{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<p style = \"font-size:40px; \nfont-family: Helvetica; \nfont-weight : bold; \nbackground-color: #036EB7; \ncolor : #FFFFFF; \ntext-align: left; \npadding: 0px 15px; \nborder-radius:3px\">\n\tH&M Competitions Sample Dataset\n</p>","metadata":{"execution":{"iopub.status.busy":"2022-04-09T09:01:24.517941Z","iopub.execute_input":"2022-04-09T09:01:24.518723Z","iopub.status.idle":"2022-04-09T09:01:24.526043Z","shell.execute_reply.started":"2022-04-09T09:01:24.518668Z","shell.execute_reply":"2022-04-09T09:01:24.525047Z"}}},{"cell_type":"markdown","source":"### SMALL(5%): https://www.kaggle.com/datasets/adldotori/hm-small5-dataset\n### MINI(1%): https://www.kaggle.com/datasets/adldotori/hm-mini1-dataset\n### TINY(0.2%): https://www.kaggle.com/datasets/adldotori/hm-tiny02-dataset","metadata":{}},{"cell_type":"code","source":"DATA_PATH = '../input/h-and-m-personalized-fashion-recommendations'","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-04-18T10:59:53.582716Z","iopub.execute_input":"2022-04-18T10:59:53.583071Z","iopub.status.idle":"2022-04-18T10:59:53.615748Z","shell.execute_reply.started":"2022-04-18T10:59:53.582978Z","shell.execute_reply":"2022-04-18T10:59:53.615002Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cudf\nprint('RAPIDS version', cudf.__version__)","metadata":{"execution":{"iopub.status.busy":"2022-04-18T10:59:53.617112Z","iopub.execute_input":"2022-04-18T10:59:53.617551Z","iopub.status.idle":"2022-04-18T10:59:57.066524Z","shell.execute_reply.started":"2022-04-18T10:59:53.617516Z","shell.execute_reply":"2022-04-18T10:59:57.065764Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os.path as osp","metadata":{"execution":{"iopub.status.busy":"2022-04-18T10:59:57.067671Z","iopub.execute_input":"2022-04-18T10:59:57.068453Z","iopub.status.idle":"2022-04-18T10:59:57.072127Z","shell.execute_reply.started":"2022-04-18T10:59:57.068417Z","shell.execute_reply":"2022-04-18T10:59:57.071465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"customers = cudf.read_csv(osp.join(DATA_PATH, 'customers.csv'))\narticles = cudf.read_csv(osp.join(DATA_PATH, 'articles.csv'))\nsample_submission = cudf.read_csv(osp.join(DATA_PATH, 'sample_submission.csv'))","metadata":{"execution":{"iopub.status.busy":"2022-04-18T10:59:57.074744Z","iopub.execute_input":"2022-04-18T10:59:57.075546Z","iopub.status.idle":"2022-04-18T11:00:04.779723Z","shell.execute_reply.started":"2022-04-18T10:59:57.075507Z","shell.execute_reply":"2022-04-18T11:00:04.778938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = cudf.read_csv(osp.join(DATA_PATH, 'transactions_train.csv'))\ntrain.t_dat = cudf.to_datetime(train.t_dat)\n\nprint(train.shape)\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:00:04.781770Z","iopub.execute_input":"2022-04-18T11:00:04.782221Z","iopub.status.idle":"2022-04-18T11:00:40.704507Z","shell.execute_reply.started":"2022-04-18T11:00:04.782165Z","shell.execute_reply":"2022-04-18T11:00:40.703830Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['t_dat'] = cudf.to_datetime(train['t_dat'], format=\"%Y-%m-%d\")\ntrain['month'] = train['t_dat'].dt.strftime('%m')\ntrain['year'] = train['t_dat'].dt.strftime('%Y')\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:00:40.705740Z","iopub.execute_input":"2022-04-18T11:00:40.706053Z","iopub.status.idle":"2022-04-18T11:00:40.763696Z","shell.execute_reply.started":"2022-04-18T11:00:40.706016Z","shell.execute_reply":"2022-04-18T11:00:40.762920Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style = \"font-size:25px; \nfont-family: Helvetica; \nfont-weight : normal; \nbackground-color: #036EB7; \ncolor : #FFFFFF; \ntext-align: left; \npadding: 0px 15px; \nborder-radius:3px\">\n\tThose who purchased less than 5 articles\n</p>","metadata":{}},{"cell_type":"code","source":"customer_count = train.groupby('customer_id', as_index=False)[['price']].count().to_pandas().sort_index()\nnot_cold_users = customer_count[customer_count.price > 5].index\ncustomer_count[customer_count.price > 5]","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:00:40.765062Z","iopub.execute_input":"2022-04-18T11:00:40.765303Z","iopub.status.idle":"2022-04-18T11:00:45.267432Z","shell.execute_reply.started":"2022-04-18T11:00:40.765271Z","shell.execute_reply":"2022-04-18T11:00:45.266741Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style = \"font-size:25px; \nfont-family: Helvetica; \nfont-weight : normal; \nbackground-color: #036EB7; \ncolor : #FFFFFF; \ntext-align: left; \npadding: 0px 15px; \nborder-radius:3px\">\n\tA person whose last purchase was three months ago\n</p>","metadata":{}},{"cell_type":"code","source":"import datetime\n\ncustomer_last_purchase = train[\n    ~train.customer_id.isin(not_cold_users)\n].groupby('customer_id', as_index=False)[['t_dat']].last().to_pandas()\ncold_inactive_users = customer_last_purchase[customer_last_purchase.t_dat < \"2020-06-01\"].index\ncold_active_users = customer_last_purchase[customer_last_purchase.t_dat > \"2020-06-01\"].index\ncustomer_last_purchase[customer_last_purchase.t_dat < \"2020-06-01\"]","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:00:45.268654Z","iopub.execute_input":"2022-04-18T11:00:45.268984Z","iopub.status.idle":"2022-04-18T11:00:46.722494Z","shell.execute_reply.started":"2022-04-18T11:00:45.268949Z","shell.execute_reply":"2022-04-18T11:00:46.721742Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"not_cold_users = not_cold_users.to_list()\ncold_inactive_users = cold_inactive_users.to_list()\ncold_active_users = cold_active_users.to_list()","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:03:27.290819Z","iopub.execute_input":"2022-04-18T11:03:27.291376Z","iopub.status.idle":"2022-04-18T11:03:27.312320Z","shell.execute_reply.started":"2022-04-18T11:03:27.291339Z","shell.execute_reply":"2022-04-18T11:03:27.311421Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import random\nimport numpy as np\n\nrandom.seed(42)\n\nrandom.shuffle(not_cold_users)\nrandom.shuffle(cold_inactive_users)\nrandom.shuffle(cold_active_users)","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:03:33.814752Z","iopub.execute_input":"2022-04-18T11:03:33.815237Z","iopub.status.idle":"2022-04-18T11:03:35.144099Z","shell.execute_reply.started":"2022-04-18T11:03:33.815197Z","shell.execute_reply":"2022-04-18T11:03:35.143349Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"We have a three types of user.\n1. **not_cold_users**: Those who purchased within 3 months and have purchased a total of 5 or more so far. \n2. **cold_inactive_users**: Those who have purchased less than 5 items and have not purchased in the last 3 months\n3. **cold_active_users**: Those who have purchased less than 5 and have purchased in the last 3 months\n\n### Because the characteristics of the three types of users are completely different, the data set is created according to the user ratio.","metadata":{}},{"cell_type":"code","source":"article_count = train.groupby('article_id')['t_dat'].count().sort_values(ascending=False)\narticle_count = article_count.index.to_pandas().to_list()","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:07:08.260694Z","iopub.execute_input":"2022-04-18T11:07:08.260988Z","iopub.status.idle":"2022-04-18T11:07:08.315561Z","shell.execute_reply.started":"2022-04-18T11:07:08.260956Z","shell.execute_reply":"2022-04-18T11:07:08.314929Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style = \"font-size:25px; \nfont-family: Helvetica; \nfont-weight : normal; \nbackground-color: #036EB7; \ncolor : #FFFFFF; \ntext-align: left; \npadding: 0px 15px; \nborder-radius:3px\">\n\tGenerate Dataset (tiny, mini, small)\n</p>","metadata":{}},{"cell_type":"code","source":"import random\nimport pandas as pd\nfrom typing import Tuple\n\ndef generate_dataset(\n    rate # dataset size rate\n) -> Tuple[pd.DataFrame, pd.DataFrame]:\n    new_not_cold_users = not_cold_users[:round(len(not_cold_users) * rate)]\n    new_cold_inactive_users = not_cold_users[:round(len(cold_inactive_users) * rate)]\n    new_cold_active_users = not_cold_users[:round(len(cold_active_users) * rate)]\n    new_articles = article_count[:round(len(article_count) * rate)]\n    \n    new_users = new_not_cold_users + new_cold_inactive_users + new_cold_active_users\n\n    new_train = train[(train.customer_id.isin(new_users)) & (train.article_id.isin(new_articles))]\n    new_customer = customers[customers.customer_id.isin(new_users)]\n    new_articles = articles[articles.article_id.isin(new_articles)]\n    \n    return new_train, new_customer, new_articles","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:08:19.923008Z","iopub.execute_input":"2022-04-18T11:08:19.923635Z","iopub.status.idle":"2022-04-18T11:08:19.930804Z","shell.execute_reply.started":"2022-04-18T11:08:19.923589Z","shell.execute_reply":"2022-04-18T11:08:19.929863Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tiny_train, tiny_customer, tiny_articles = generate_dataset(0.002)\nmini_train, mini_customer, mini_articles = generate_dataset(0.01)\nsmall_train, small_customer, small_articles = generate_dataset(0.05)","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:08:41.644629Z","iopub.execute_input":"2022-04-18T11:08:41.644913Z","iopub.status.idle":"2022-04-18T11:08:44.361871Z","shell.execute_reply.started":"2022-04-18T11:08:41.644865Z","shell.execute_reply":"2022-04-18T11:08:44.360987Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nos.makedirs('tiny')\nos.makedirs('mini')\nos.makedirs('small')","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:08:44.363489Z","iopub.execute_input":"2022-04-18T11:08:44.363731Z","iopub.status.idle":"2022-04-18T11:08:44.368112Z","shell.execute_reply.started":"2022-04-18T11:08:44.363698Z","shell.execute_reply":"2022-04-18T11:08:44.367338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tiny_train.to_csv('tiny/transactions_train.csv', index=False)\ntiny_customer.to_csv('tiny/customers.csv', index=False)\ntiny_articles.to_csv('tiny/articles.csv', index=False)\nsample_submission.to_csv('tiny/sample_submission.csv', index=False)\n\nmini_train.to_csv('mini/transactions_train.csv', index=False)\nmini_customer.to_csv('mini/customers.csv', index=False)\nmini_articles.to_csv('mini/articles.csv', index=False)\nsample_submission.to_csv('mini/sample_submission.csv', index=False)\n\nsmall_train.to_csv('small/transactions_train.csv', index=False)\nsmall_customer.to_csv('small/customers.csv', index=False)\nsmall_articles.to_csv('small/articles.csv', index=False)\nsample_submission.to_csv('small/sample_submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:09:03.313906Z","iopub.execute_input":"2022-04-18T11:09:03.314170Z","iopub.status.idle":"2022-04-18T11:09:06.515042Z","shell.execute_reply.started":"2022-04-18T11:09:03.314139Z","shell.execute_reply":"2022-04-18T11:09:06.514209Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!zip -r tiny.zip tiny/\n!zip -r mini.zip mini/\n!zip -r small.zip small/","metadata":{"execution":{"iopub.status.busy":"2022-04-18T11:09:06.517307Z","iopub.execute_input":"2022-04-18T11:09:06.517804Z"},"trusted":true},"execution_count":null,"outputs":[]}]}