{"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":"## データを見ていくよ！","metadata":{}},{"cell_type":"markdown","source":"その前に今回の背景とタスクを確認しておこう！\n\n**〇背景**<br>\nH＆M Groupは、53のオンライン市場と約4,850の店舗を持つブランドと企業のファミリーです。H＆M Groupのオンラインストアは買い物客に閲覧するための製品の幅広い選択を提供します。しかし、選択肢が多すぎると、顧客は自分が興味を持っているものや探しているものをすぐに見つけられず、最終的には購入できない可能性があります。ショッピング体験を向上させるには、製品の推奨事項が重要です。さらに重要なことに、顧客が正しい選択をするのを支援することは、収益を減らし、それによって輸送からの排出を最小限に抑えるため、持続可能性にもプラスの影響を及ぼします。\nこのコンペティションでは、H＆M Groupは、以前のトランザクションのデータ、および顧客と製品のメタデータに基づいて製品の推奨事項を作成することを勧めます。利用可能なメタデータは、衣服の種類や顧客の年齢などの単純なデータから、製品の説明からのテキストデータ、衣服の画像からの画像データにまで及びます。\nどのような情報が役立つかについての先入観はありません。それはあなたが知るためのものです。カテゴリデータ型アルゴリズムを調査したい場合、またはNLPと画像処理の深層学習に飛び込みたい場合は、それはあなた次第です。\n\n**〇タスク**<br>\nある顧客に対して12つの購入予測を行う。\n→2020年9月22日以降の7日間で何を購入するのかを予測するよ。","metadata":{}},{"cell_type":"code","source":"import os \nimport pandas as pd \nimport numpy as np \nimport matplotlib.pylab as plt \nimport cv2\nfrom os import listdir\nfrom IPython.display import Image\nimport glob","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:26:56.921472Z","iopub.execute_input":"2022-03-16T04:26:56.921883Z","iopub.status.idle":"2022-03-16T04:26:57.292200Z","shell.execute_reply.started":"2022-03-16T04:26:56.921764Z","shell.execute_reply":"2022-03-16T04:26:57.291228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_path = '../input/h-and-m-personalized-fashion-recommendations/'\n\nfor filename in os.listdir(data_path):\n    print(filename)","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:26:57.293996Z","iopub.execute_input":"2022-03-16T04:26:57.294278Z","iopub.status.idle":"2022-03-16T04:26:57.300360Z","shell.execute_reply.started":"2022-03-16T04:26:57.294247Z","shell.execute_reply":"2022-03-16T04:26:57.299299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for filename in os.listdir(data_path):\n    if filename != 'images':\n        df = pd.read_csv(data_path + filename)\n        print(filename)\n        print(len(df))\n        display(df.head())","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:26:57.301943Z","iopub.execute_input":"2022-03-16T04:26:57.302266Z","iopub.status.idle":"2022-03-16T04:28:18.123742Z","shell.execute_reply.started":"2022-03-16T04:26:57.302226Z","shell.execute_reply":"2022-03-16T04:28:18.122892Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## No. 1 画像データ","metadata":{}},{"cell_type":"code","source":"def getImagePaths():\n\n    img_dir = '../input/h-and-m-personalized-fashion-recommendations/images/*/*.jpg'\n    get_img = glob.glob(img_dir)\n    image_names = []\n    for filename in get_img:\n        image_names.append(filename)\n    \n    return image_names\n\n\ndef display_multiple_img(images_paths, rows, cols):\n    \n    figure, ax = plt.subplots(nrows=rows,ncols=cols,figsize=(16,8) )\n    for ind,image_path in enumerate(images_paths):\n        image=cv2.imread(image_path)\n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) \n        try:\n            ax.ravel()[ind].imshow(image)\n            ax.ravel()[ind].set_axis_off()\n            ax.ravel()[ind].set_title(image_path[60:])\n        except:\n            continue;\n    plt.tight_layout()\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:49:16.103053Z","iopub.execute_input":"2022-03-16T04:49:16.103384Z","iopub.status.idle":"2022-03-16T04:49:16.111671Z","shell.execute_reply.started":"2022-03-16T04:49:16.103351Z","shell.execute_reply":"2022-03-16T04:49:16.110526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"images_path = getImagePaths()\ndisplay_multiple_img(images_path[0:30], rows=6, cols=5)","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:49:17.782508Z","iopub.execute_input":"2022-03-16T04:49:17.783424Z","iopub.status.idle":"2022-03-16T04:49:29.087269Z","shell.execute_reply.started":"2022-03-16T04:49:17.783368Z","shell.execute_reply":"2022-03-16T04:49:29.086354Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## No. 2 transactions_train.csv","metadata":{}},{"cell_type":"markdown","source":"t_dat:購入日付<br>\ncustomer_id:顧客の一意なid<br>\narticle_id:各物品の一意なid<br>\nprice:価格<br>\nsales_cannel_id:1 or 2 （なんだこりゃ）<br>\n","metadata":{}},{"cell_type":"code","source":"tst_path = '../input/h-and-m-personalized-fashion-recommendations/transactions_train.csv'\ntst = pd.read_csv(tst_path)\ndisplay(tst.head())\nprint(tst['customer_id'].nunique())","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:32:43.124263Z","iopub.execute_input":"2022-03-16T04:32:43.125212Z","iopub.status.idle":"2022-03-16T04:33:28.933992Z","shell.execute_reply.started":"2022-03-16T04:32:43.125150Z","shell.execute_reply":"2022-03-16T04:33:28.933082Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 2-1. t_datの期間は？","metadata":{}},{"cell_type":"code","source":"print(min(tst['t_dat']))\nprint(max(tst['t_dat']))","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:19.645366Z","iopub.execute_input":"2022-03-16T04:29:19.645686Z","iopub.status.idle":"2022-03-16T04:29:25.192672Z","shell.execute_reply.started":"2022-03-16T04:29:19.645639Z","shell.execute_reply":"2022-03-16T04:29:25.191399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"2年間のデータがあることがわかるね!","metadata":{}},{"cell_type":"markdown","source":"![image.png](attachment:504cb07d-a5cc-4d37-8c55-0e48b1e2f672.png)","metadata":{},"attachments":{"504cb07d-a5cc-4d37-8c55-0e48b1e2f672.png":{"image/png":"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SZIkSZLsyuRbpZIkSZIkSZIkSZJkBrJDnSRJkiRJkiRJkiQzkB3qJEmSJEmSJEmSJJmBQb9D/be//W31fzsm3kZ9zGMes9ltt91Wj8wHeRx88MHNb3/729UjR3GJS1yiud71rrf613IwT93f/e53N1/84heb2972ts3Zz3721aPbc4ITnGD1fxuPl6L94x//aI53vOOVOk7jT3/6U/P2t7+9Od3pTtdc7WpXa3bffffVb4Yz9pl9LKIss7Co8u+M/Otf/yofson2+O53v9u8733va6597Ws35zrXucqxZYY755+07XGPe9zVo93885//LDYOfmva+UmyM9Lli7vsaIxtOffvf/97+VeMXFTusR5spo/LeDQ7//3vf4vs6NgkjnWsYy3Ut4+xg52djcrjxGq2sl6+hB69613vat7//vc3v//975s999yzuelNb7rUfisIX4vjH//4m1rmnX6G+ktf+lJzl7vcpXnPe96zemR+vIxLZ/orX/nKdh9OZpmYt+7qo146GcuIREBn379D+NGPftRs3bq1JA9/+MMfVo+OY+wz+1hEWfrgeP/yl790ttuiyr8z8qlPfap51KMe1fzyl78sf7Pzz3zmM8V+PvGJTxS5zkIkIH/961+nJj/z4hnPfOYzm7e+9a2rR/r51a9+VQLooYce2vz85z9fPXpUouY+gniy/Ggn7aXdkvF0+eIuOxpjWwayX/nKV5bzXbesLMrHTSLj0TAmyakLcUq8Ir9JnyH6OoYxdrCzs555XA1Zr5cv4asOOeSQ4q9Of/rTNze4wQ2a85znPGsd07F6uR5MyknC1/r4/2ayw3Sof/CDHzRPfvKT12ZUNpMTnehEzWMe85jmDW94Q/k897nPbc5ylrOsfpssK5zE/e9//xJkTnGKU6we3RzWsyyRpOggJrNzjGMco7nWta7V3O1udyszuLPOoCxrcn3GM56x6MmWLVu281+RqGXCtGOgneqBoGQcyxQXNppF+bhJZDwaxlg5nfzkJ2/uec97Nk996lM7P/e4xz3KeSc84QnLv8ni2Rl8h87y9773veZGN7pR88hHPrK5053u1Jz//Odf/XY57HdHyUl2mA610ZFZZoEvfvGLl+XZy7YUeyPYleveheVJkoeLXvSia6Nvm8UylSXp57SnPW1zk5vcpPy7s2F52hWveMXy2agtB0mybOzqvnhn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mBOc4ASDdHJnYoxPn9f/74hsduzx7He9613N+9///ub3v/99s+eeezY3velNR+tpl10ui60ua573hz/8oXnLW97SfPKTnyztIOZf8YpXXP02SZIxDJqhFoz/+te/ls7CevKjH/2o2bp1a/O+972vGPos/OpXvyqO+dBDD21+/vOfrx7dXMiN/MixzSLqvCuwUe36qU99qnnUox7V/PKXv1w9Mg7Xuf62t73toM93v/vdcp1/6783ms997nPNs571rBL4b3nLWzYXvvCFmxOe8ISd+kmXn/nMZzZvfetby9+bxbKUo+bf//5388pXvrJ8/H8Iy1iPsSwqRiyj/26zI7aXsiqzsu9qjPHp8/r/ZWWSfW5m7OEjDznkkOIvT3/60zc3uMENmvOc5zyjO9PosstlsdVlzPPI5sUvfnHznve8pznvec/bXP/612/OcpazrH67cxADKurq/0myngzqUHNGGxFkONL73//+xbmf4hSnWD06jjOe8Yzl+i1btiyNc4hOVpdTX0SddwWWsV27OPnJT97c8573bJ761Keufe51r3uV74y818d9znCGM5TvNpP/+7//a7797W83Zz7zmZvHPOYxzZ3udKcSXI9xjGOkfiaDWFSM2FHsPEl2JDYqhxvLX/7yl+Z73/tec6Mb3ah55CMfWWLP+c9//tVvdx6WMY7+9re/bX7wgx+UMj3kIQ9pbn/72zdnOtOZVr/dOYgB7l11MDHZWJZqD7UlOde61rWai170ojONUMJSGktWfHaEJVuLqPOuwI7SrpbNSQgudKELrX3Odrazle+MwNfHfU584hOX7zYTS/4kNpaDWqZck/qZbCQ7mv9OkmR2LDPW0REHj3WsY60e3flYxjhK9lYBnfSkJ83YniQLYPfHr7D6/6Px5z//ufnOd77TfPOb3yyGp0Mg8bbH6CQnOUk559e//nXz4x//uCwP/eMf/9h89KMfbQ4//PDmNKc5TelcwFIL13/2s59tDjvssOZnP/tZud73tSEbTTJaydDj/vUxTvcnP/lJeYYy6QiYEawTL7NtP/zhD8uyGvdw//qYexiZcw97RS0HMWLYt3fIUill/vSnP12W7ehwnOhEJ2qOOOKIMtrrGX2JXzzX58tf/nK5Tp1/97vfFXkJIEPqbPbw4x//eLmPc2JvprYgU3tf7T065SlP2RuU7OtUhqgHB+/e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"}}},{"cell_type":"markdown","source":"2020/9/22以降のデータを予測するよ","metadata":{}},{"cell_type":"markdown","source":"### 2-2. 顧客ごとの使用金額は？","metadata":{}},{"cell_type":"code","source":"tst_price = tst[['customer_id', 'price']]\nUU_price = tst_price.groupby('customer_id', as_index = False).sum()\n\ndisplay(UU_price.head())\n\nnu = UU_price['customer_id'].nunique()\n\nprint(f'row_NotUU：{len(tst)}')\nprint(f'row_UU：{len(UU_price)}')\nprint(f'check: {nu}')\n\nUU_price.describe()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:25.194315Z","iopub.execute_input":"2022-03-16T04:29:25.195498Z","iopub.status.idle":"2022-03-16T04:29:42.411084Z","shell.execute_reply.started":"2022-03-16T04:29:25.195437Z","shell.execute_reply":"2022-03-16T04:29:42.410310Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"金額の単位ってどうなってるのかな。","metadata":{}},{"cell_type":"markdown","source":"### 2-3. 人気商品は？","metadata":{}},{"cell_type":"code","source":"pop_item_cnt = tst['article_id'].value_counts()\npop_item_cnt\n\n# グラフ化重すぎぃぃぃぃぃ。\n# pop_item = pd.DataFrame(pop_item_cnt)\n\n# pop_item.plot.bar() # 棒グラフ\n\n# 円グラフ\n# sizes = pop_item['article_id']\n# labels =  pop_item.index.tolist()\n# fig1, ax1 = plt.subplots()\n# ax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=0)\n# ax1.axis('equal')\n# plt.show()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:42.412319Z","iopub.execute_input":"2022-03-16T04:29:42.412523Z","iopub.status.idle":"2022-03-16T04:29:44.036634Z","shell.execute_reply.started":"2022-03-16T04:29:42.412495Z","shell.execute_reply":"2022-03-16T04:29:44.035700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 人気第1位\npath = \"../input/h-and-m-personalized-fashion-recommendations/images/070/0706016001.jpg\"\nim = plt.imread(path)\nplt.figure(figsize=(15, 6))\nplt.imshow(im)","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:50:54.464332Z","iopub.execute_input":"2022-03-16T04:50:54.464895Z","iopub.status.idle":"2022-03-16T04:50:54.999566Z","shell.execute_reply.started":"2022-03-16T04:50:54.464852Z","shell.execute_reply":"2022-03-16T04:50:54.998918Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 人気第２位\npath = \"../input/h-and-m-personalized-fashion-recommendations/images/070/0706016002.jpg\"\nim = plt.imread(path)\nplt.figure(figsize=(15, 6))\nplt.imshow(im)","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:51:10.543317Z","iopub.execute_input":"2022-03-16T04:51:10.544463Z","iopub.status.idle":"2022-03-16T04:51:11.071688Z","shell.execute_reply.started":"2022-03-16T04:51:10.544394Z","shell.execute_reply":"2022-03-16T04:51:11.071027Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 人気第３位\npath = \"../input/h-and-m-personalized-fashion-recommendations/images/037/0372860001.jpg\"\nim = plt.imread(path)\nplt.figure(figsize=(15, 6))\nplt.imshow(im)","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:52:35.783051Z","iopub.execute_input":"2022-03-16T04:52:35.783738Z","iopub.status.idle":"2022-03-16T04:52:36.357255Z","shell.execute_reply.started":"2022-03-16T04:52:35.783696Z","shell.execute_reply":"2022-03-16T04:52:36.356242Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"存在しない画像もあるよ。\npath = \"../input/h-and-m-personalized-fashion-recommendations/images/061/0610776002.jpg\"\nim = plt.imread(path)\nplt.figure(figsize=(15, 6))\nplt.imshow(im)\n\"\"\"","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:56:11.164150Z","iopub.execute_input":"2022-03-16T04:56:11.164544Z","iopub.status.idle":"2022-03-16T04:56:11.172830Z","shell.execute_reply.started":"2022-03-16T04:56:11.164495Z","shell.execute_reply":"2022-03-16T04:56:11.171939Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"###  2-4. sales_channel_idってなに！！","metadata":{}},{"cell_type":"code","source":"# 年を表している？\nsales_ch_cnt = tst['sales_channel_id'].value_counts()\nsales_ch_cnt\n\ndisplay(sales_ch_cnt)\n\nsales_ch = pd.DataFrame(sales_ch_cnt)\n\n# 円グラフ\nsizes = sales_ch['sales_channel_id']\nlabels =  sales_ch.index.tolist()\nfig1, ax1 = plt.subplots()\nax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=0)\nax1.axis('equal')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:44.038090Z","iopub.execute_input":"2022-03-16T04:29:44.038322Z","iopub.status.idle":"2022-03-16T04:29:44.317162Z","shell.execute_reply.started":"2022-03-16T04:29:44.038294Z","shell.execute_reply":"2022-03-16T04:29:44.316128Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## No.3 article.csv","metadata":{}},{"cell_type":"code","source":"article_dir = \"../input/h-and-m-personalized-fashion-recommendations/articles.csv\"\ndf_article = pd.read_csv(article_dir)\ndf_article.head()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:44.318818Z","iopub.execute_input":"2022-03-16T04:29:44.319418Z","iopub.status.idle":"2022-03-16T04:29:45.151299Z","shell.execute_reply.started":"2022-03-16T04:29:44.319368Z","shell.execute_reply":"2022-03-16T04:29:45.150581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 3-1. アイテム数の数は？","metadata":{}},{"cell_type":"code","source":"print(f'len(df_article)：{len(df_article)}')\narticole_UU = df_article['article_id'].nunique()\nprint(f' UU数 {articole_UU}')","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:45.152315Z","iopub.execute_input":"2022-03-16T04:29:45.153064Z","iopub.status.idle":"2022-03-16T04:29:45.165002Z","shell.execute_reply.started":"2022-03-16T04:29:45.153014Z","shell.execute_reply":"2022-03-16T04:29:45.164363Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_article.info()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:45.167296Z","iopub.execute_input":"2022-03-16T04:29:45.167902Z","iopub.status.idle":"2022-03-16T04:29:45.249938Z","shell.execute_reply.started":"2022-03-16T04:29:45.167863Z","shell.execute_reply":"2022-03-16T04:29:45.248939Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"article_id: 一意のid<br>\nproduct_code, prod_name: 各製品の一意なidと名称<br>\nproduct_type, product_type_name: 製品をグループ化したものとその名称<br>\ngraphical_appearance_no, graphical_appearance_name: 画像のグループとその名前<br>\ncolor_group_code, color_group_name: 色のグループとその名前<br>","metadata":{}},{"cell_type":"markdown","source":"### 3-2. どんな洋服が人気？","metadata":{}},{"cell_type":"code","source":"product_group_name_cnts = df_article['product_group_name'].value_counts()\n\nproduct_group_name_item = pd.DataFrame(product_group_name_cnts)\n\nproduct_group_name_item.plot.bar() # 棒グラフ","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:45.251351Z","iopub.execute_input":"2022-03-16T04:29:45.251619Z","iopub.status.idle":"2022-03-16T04:29:45.620504Z","shell.execute_reply.started":"2022-03-16T04:29:45.251587Z","shell.execute_reply":"2022-03-16T04:29:45.619577Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\ngarment upper body: 衣服上半身\ngarment lower body: 衣服下半身\n\n\"\"\"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"product_group_name_cnts = df_article['product_type_name'].value_counts()\n\nproduct_group_name_item = pd.DataFrame(product_group_name_cnts)\n\nproduct_group_name_item = product_group_name_item[:15]\n\n# 上位15件のみ表示\nproduct_group_name_item.plot.barh() # 棒グラフ","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:45.621981Z","iopub.execute_input":"2022-03-16T04:29:45.622562Z","iopub.status.idle":"2022-03-16T04:29:45.910105Z","shell.execute_reply.started":"2022-03-16T04:29:45.622522Z","shell.execute_reply":"2022-03-16T04:29:45.909149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nthrusers : ズボン\ndress : ドレス\nsweater: セーター\n\"\"\"","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:45.911617Z","iopub.execute_input":"2022-03-16T04:29:45.911854Z","iopub.status.idle":"2022-03-16T04:29:45.918190Z","shell.execute_reply.started":"2022-03-16T04:29:45.911823Z","shell.execute_reply":"2022-03-16T04:29:45.917332Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"colour_group_name_cnts = df_article['colour_group_name'].value_counts()\n\ncolour_group_name_item = pd.DataFrame(colour_group_name_cnts)\n\ncolour_group_name_item = colour_group_name_item[:15]\n\ncolour_group_name_item.plot.barh() # 棒グラフ","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:45.919365Z","iopub.execute_input":"2022-03-16T04:29:45.920164Z","iopub.status.idle":"2022-03-16T04:29:46.204537Z","shell.execute_reply.started":"2022-03-16T04:29:45.920128Z","shell.execute_reply":"2022-03-16T04:29:46.203869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nBlack\nDark Blue\nwhite\n\"\"\"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"department_name_cnts = df_article['department_name'].value_counts().sort_values(ascending=False)\n\ndepartment_name_item = pd.DataFrame(department_name_cnts)\n\ndepartment_name_item = department_name_item[:20]\n\ndepartment_name_item.plot.barh() # 棒グラフ","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:46.205785Z","iopub.execute_input":"2022-03-16T04:29:46.206470Z","iopub.status.idle":"2022-03-16T04:29:46.528723Z","shell.execute_reply.started":"2022-03-16T04:29:46.206421Z","shell.execute_reply":"2022-03-16T04:29:46.528085Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nJersey:ジャージー（H&Mで人気のジャージー商品）\nKnitwear: ニットウェア\nTrouser:ズボン\n\n\"\"\"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"index_name_cnts = df_article['index_name'].value_counts().sort_values(ascending=False)\n\nindex_name_item = pd.DataFrame(index_name_cnts)\n\nindex_name_item = index_name_item[:20]\n\nindex_name_item.plot.barh() # 棒グラフ","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:46.529969Z","iopub.execute_input":"2022-03-16T04:29:46.530355Z","iopub.status.idle":"2022-03-16T04:29:46.788370Z","shell.execute_reply.started":"2022-03-16T04:29:46.530309Z","shell.execute_reply":"2022-03-16T04:29:46.787753Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## No4. customers.csv","metadata":{}},{"cell_type":"markdown","source":"customer_id:各顧客の一意なid<br>\nFN:0 or 1（不明）<br>\nActive:0 or 1（不明）<br>\nclub_member_status:会員情報<br>\nfashion_news_frequency:ニュースを送る頻度<br>\nage:現在の年齢<br>\npostal_code:郵便番号<br>","metadata":{}},{"cell_type":"code","source":"costomers_dir = \"../input/h-and-m-personalized-fashion-recommendations/customers.csv\"\ndf_costomers = pd.read_csv(costomers_dir)\ndisplay(df_costomers.head())\nprint(f'顧客数: {len(df_costomers)}')","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:46.789735Z","iopub.execute_input":"2022-03-16T04:29:46.790237Z","iopub.status.idle":"2022-03-16T04:29:50.732694Z","shell.execute_reply.started":"2022-03-16T04:29:46.790201Z","shell.execute_reply":"2022-03-16T04:29:50.731757Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### 4-1. 年齢の分布は？","metadata":{}},{"cell_type":"code","source":"ages=pd.DataFrame(df_costomers['age'].value_counts().sort_index())\nlabels = [ '{0} – {1}'.format(i, i + 5) for i in range(20, 70, 5) ]\nc=pd.cut(ages.index,bins=np.arange(20, 75, 5),labels=labels)\nh_ages=ages.groupby(c).sum()\nh_ages","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:50.766807Z","iopub.execute_input":"2022-03-16T04:29:50.767143Z","iopub.status.idle":"2022-03-16T04:29:50.801055Z","shell.execute_reply.started":"2022-03-16T04:29:50.767113Z","shell.execute_reply":"2022-03-16T04:29:50.800070Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"h_ages.plot.bar() # 棒グラフ","metadata":{"execution":{"iopub.status.busy":"2022-03-16T05:18:05.778481Z","iopub.execute_input":"2022-03-16T05:18:05.778993Z","iopub.status.idle":"2022-03-16T05:18:06.017800Z","shell.execute_reply.started":"2022-03-16T05:18:05.778928Z","shell.execute_reply":"2022-03-16T05:18:06.016798Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"20代と45~55歳のあたりにピークがあることがわかるね～","metadata":{}},{"cell_type":"markdown","source":"### 4-2. 会員情報の詳細は？","metadata":{}},{"cell_type":"code","source":"df_costomers['club_member_status'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T05:11:12.533381Z","iopub.execute_input":"2022-03-16T05:11:12.533738Z","iopub.status.idle":"2022-03-16T05:11:12.626741Z","shell.execute_reply.started":"2022-03-16T05:11:12.533694Z","shell.execute_reply":"2022-03-16T05:11:12.625597Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"club_member_status_cnts = df_costomers['club_member_status'].value_counts().sort_values(ascending=False)\n\nclub_member_status = pd.DataFrame(club_member_status_cnts)\n\nclub_member_status = club_member_status[:20]\n\nclub_member_status.plot.barh() # 棒グラフ","metadata":{"execution":{"iopub.status.busy":"2022-03-16T05:10:43.513994Z","iopub.execute_input":"2022-03-16T05:10:43.514417Z","iopub.status.idle":"2022-03-16T05:10:43.815506Z","shell.execute_reply.started":"2022-03-16T05:10:43.514376Z","shell.execute_reply":"2022-03-16T05:10:43.814715Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"日本では、会員登録をしてから300Pを獲得するまではメンバー、それ以降はプラスメンバーになるみたい。<br>\nポイントは100円ごとに1Pたまるよ。<br>\n海外では会員情報の制度も異なるみたいだね。<br>","metadata":{}},{"cell_type":"markdown","source":"### 4-3. ニュースを送る頻度は？","metadata":{}},{"cell_type":"code","source":"df_costomers['fashion_news_frequency'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T05:11:41.513665Z","iopub.execute_input":"2022-03-16T05:11:41.514014Z","iopub.status.idle":"2022-03-16T05:11:41.609600Z","shell.execute_reply.started":"2022-03-16T05:11:41.513973Z","shell.execute_reply":"2022-03-16T05:11:41.608717Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"定期的（Regularly）にニュースを送ている顧客も今回与えられたデータの約35%くらいいるみたいだね。","metadata":{}},{"cell_type":"code","source":"df_costomers['FN'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T05:32:23.017880Z","iopub.execute_input":"2022-03-16T05:32:23.018281Z","iopub.status.idle":"2022-03-16T05:32:23.040579Z","shell.execute_reply.started":"2022-03-16T05:32:23.018241Z","shell.execute_reply":"2022-03-16T05:32:23.039624Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_costomers['Active'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-03-16T05:32:40.076223Z","iopub.execute_input":"2022-03-16T05:32:40.076566Z","iopub.status.idle":"2022-03-16T05:32:40.098375Z","shell.execute_reply.started":"2022-03-16T05:32:40.076523Z","shell.execute_reply":"2022-03-16T05:32:40.097507Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"FNとActiveは何を表しているのだろうか、、、。","metadata":{}},{"cell_type":"markdown","source":"## No.5 submission ","metadata":{}},{"cell_type":"code","source":"submission_dir = \"../input/h-and-m-personalized-fashion-recommendations/sample_submission.csv\"\ndf_submission = pd.read_csv(submission_dir)\ndisplay(df_submission.head())\nprint(len(df_submission))","metadata":{"execution":{"iopub.status.busy":"2022-03-16T04:29:51.042753Z","iopub.execute_input":"2022-03-16T04:29:51.043489Z","iopub.status.idle":"2022-03-16T04:29:54.005880Z","shell.execute_reply.started":"2022-03-16T04:29:51.043451Z","shell.execute_reply":"2022-03-16T04:29:54.005040Z"},"trusted":true},"execution_count":null,"outputs":[]}]}