From 2df6aa058431e14bfaf36b81648ab1d872639114 Mon Sep 17 00:00:00 2001 From: Taitannn <64827821+Taitannn@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:35:09 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=83=8E=E3=83=83=E3=82=AF4=E3=81=8B?= =?UTF-8?q?=E3=82=89=E3=83=8E=E3=83=83=E3=82=AF7=E3=81=BE=E3=81=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...343\203\216\343\203\203\343\202\257.ipynb" | 3669 +++++++++++++++++ 1 file changed, 3669 insertions(+) create mode 100644 "100knock-data_analytics/1\347\253\240/1\347\253\240_\343\202\246\343\202\247\343\203\226\343\201\213\343\202\211\343\201\256\346\263\250\346\226\207\346\225\260\343\202\222\345\210\206\346\236\220\343\201\231\343\202\213\357\274\221\357\274\220\346\234\254\343\203\216\343\203\203\343\202\257.ipynb" diff --git "a/100knock-data_analytics/1\347\253\240/1\347\253\240_\343\202\246\343\202\247\343\203\226\343\201\213\343\202\211\343\201\256\346\263\250\346\226\207\346\225\260\343\202\222\345\210\206\346\236\220\343\201\231\343\202\213\357\274\221\357\274\220\346\234\254\343\203\216\343\203\203\343\202\257.ipynb" "b/100knock-data_analytics/1\347\253\240/1\347\253\240_\343\202\246\343\202\247\343\203\226\343\201\213\343\202\211\343\201\256\346\263\250\346\226\207\346\225\260\343\202\222\345\210\206\346\236\220\343\201\231\343\202\213\357\274\221\357\274\220\346\234\254\343\203\216\343\203\203\343\202\257.ipynb" new file mode 100644 index 0000000..d31e243 --- /dev/null +++ "b/100knock-data_analytics/1\347\253\240/1\347\253\240_\343\202\246\343\202\247\343\203\226\343\201\213\343\202\211\343\201\256\346\263\250\346\226\207\346\225\260\343\202\222\345\210\206\346\236\220\343\201\231\343\202\213\357\274\221\357\274\220\346\234\254\343\203\216\343\203\203\343\202\257.ipynb" @@ -0,0 +1,3669 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "source": [ + "# Google Driveと接続を行います。これを行うことで、Driveにあるデータにアクセスできるようになります。\n", + "# 下記セルを実行すると、Googleアカウントのログインを求められますのでログインしてください。\n", + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "id": "WlS8LwC8J3kd", + "outputId": "6a0339e2-93eb-451e-f440-225dcfd896ee", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 作業フォルダへの移動を行います。\n", + "# 人によって作業場所がことなるので、その場合作業場所を変更してください。\n", + "import os\n", + "os.chdir('/content/drive/MyDrive/100knock-data_analytics/1章') #ここを変更。" + ], + "metadata": { + "id": "G-vAUZn2J52N" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qUQ5OkKmJ1mJ" + }, + "source": [ + "# 1章 ウェブの注文数を分析する10本ノック\n", + "\n", + "ここでは、ある企業のECサイトでの商品の注文数の推移を分析していきます。 \n", + "データの属性を理解し、分析をするためにデータを加工した後、 \n", + "データの可視化を行うことで問題を発見していくプロセスを学びます。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HyMoAlu5J1mN" + }, + "source": [ + "### ノック1:データを読み込んでみよう" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "Wicqn13lJ1mO", + "outputId": "9e67ae11-2a64-4cd3-8196-b7dcda777f68", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 313 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " customer_id customer_name registration_date customer_name_kana \\\n", + "0 IK152942 平田 裕次郎 2019-01-01 00:25:33 ひらた ゆうじろう \n", + "1 TS808488 田村 詩織 2019-01-01 01:13:45 たむら しおり \n", + "2 AS834628 久野 由樹 2019-01-01 02:00:14 ひさの ゆき \n", + "3 AS345469 鶴岡 薫 2019-01-01 04:48:22 つるおか かおる \n", + "4 GD892565 大内 高史 2019-01-01 04:54:51 おおうち たかし \n", + "\n", + " email gender age birth pref \n", + "0 hirata_yuujirou@example.com M 29 1990/6/10 石川県 \n", + "1 tamura_shiori@example.com F 33 1986/5/20 東京都 \n", + "2 hisano_yuki@example.com F 63 1956/1/2 茨城県 \n", + "3 tsuruoka_kaoru@example.com M 74 1945/3/25 東京都 \n", + "4 oouchi_takashi@example.com M 54 1965/8/5 千葉県 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idcustomer_nameregistration_datecustomer_name_kanaemailgenderagebirthpref
0IK152942平田 裕次郎2019-01-01 00:25:33ひらた ゆうじろうhirata_yuujirou@example.comM291990/6/10石川県
1TS808488田村 詩織2019-01-01 01:13:45たむら しおりtamura_shiori@example.comF331986/5/20東京都
2AS834628久野 由樹2019-01-01 02:00:14ひさの ゆきhisano_yuki@example.comF631956/1/2茨城県
3AS345469鶴岡 薫2019-01-01 04:48:22つるおか かおるtsuruoka_kaoru@example.comM741945/3/25東京都
4GD892565大内 高史2019-01-01 04:54:51おおうち たかしoouchi_takashi@example.comM541965/8/5千葉県
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "import pandas as pd\n", + "customer_master = pd.read_csv('customer_master.csv')\n", + "customer_master.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "rJm5rP2uJ1mP", + "outputId": "d885b322-8cc3-4b68-b080-1749d568f0e9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " item_id item_name item_price\n", + "0 S001 PC-A 50000\n", + "1 S002 PC-B 85000\n", + "2 S003 PC-C 120000\n", + "3 S004 PC-D 180000\n", + "4 S005 PC-E 210000" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_iditem_nameitem_price
0S001PC-A50000
1S002PC-B85000
2S003PC-C120000
3S004PC-D180000
4S005PC-E210000
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "item_master = pd.read_csv('item_master.csv')\n", + "item_master.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "iPazmB_tJ1mP", + "outputId": "d399e08a-5043-49ec-ae34-51ae28233753", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " transaction_id price payment_date customer_id\n", + "0 T0000000113 210000 2019-02-01 01:36:57 PL563502\n", + "1 T0000000114 50000 2019-02-01 01:37:23 HD678019\n", + "2 T0000000115 120000 2019-02-01 02:34:19 HD298120\n", + "3 T0000000116 210000 2019-02-01 02:47:23 IK452215\n", + "4 T0000000117 170000 2019-02-01 04:33:46 PL542865" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
transaction_idpricepayment_datecustomer_id
0T00000001132100002019-02-01 01:36:57PL563502
1T0000000114500002019-02-01 01:37:23HD678019
2T00000001151200002019-02-01 02:34:19HD298120
3T00000001162100002019-02-01 02:47:23IK452215
4T00000001171700002019-02-01 04:33:46PL542865
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ], + "source": [ + "transaction_1 = pd.read_csv('transaction_1.csv')\n", + "transaction_1.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "id": "13Byx1zPJ1mQ", + "outputId": "bec4ff47-3e73-4472-f496-507c2533c4db", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " detail_id transaction_id item_id quantity\n", + "0 0 T0000000113 S005 1\n", + "1 1 T0000000114 S001 1\n", + "2 2 T0000000115 S003 1\n", + "3 3 T0000000116 S005 1\n", + "4 4 T0000000117 S002 2" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
detail_idtransaction_iditem_idquantity
00T0000000113S0051
11T0000000114S0011
22T0000000115S0031
33T0000000116S0051
44T0000000117S0022
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "transaction_detail_1 = pd.read_csv('transaction_detail_1.csv')\n", + "transaction_detail_1.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tUj49Lq2J1mQ" + }, + "source": [ + "### ノック2:データを結合(ユニオン)してみよう" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "id": "yToHeaCkJ1mR", + "outputId": "67e74e71-1d17-4a7a-efda-a77d049016ed", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " transaction_id price payment_date customer_id\n", + "0 T0000000113 210000 2019-02-01 01:36:57 PL563502\n", + "1 T0000000114 50000 2019-02-01 01:37:23 HD678019\n", + "2 T0000000115 120000 2019-02-01 02:34:19 HD298120\n", + "3 T0000000116 210000 2019-02-01 02:47:23 IK452215\n", + "4 T0000000117 170000 2019-02-01 04:33:46 PL542865" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
transaction_idpricepayment_datecustomer_id
0T00000001132100002019-02-01 01:36:57PL563502
1T0000000114500002019-02-01 01:37:23HD678019
2T00000001151200002019-02-01 02:34:19HD298120
3T00000001162100002019-02-01 02:47:23IK452215
4T00000001171700002019-02-01 04:33:46PL542865
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "source": [ + "transaction_2 = pd.read_csv('transaction_2.csv')\n", + "transaction = pd.concat([transaction_1, transaction_2], ignore_index=True)\n", + "transaction.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "nIlKzMwUJ1mS", + "outputId": "a166ad8b-21eb-42b4-c6b6-49a7db3d0d15", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "5000\n", + "1786\n", + "6786\n" + ] + } + ], + "source": [ + "print(len(transaction_1))\n", + "print(len(transaction_2))\n", + "print(len(transaction))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "UI1QoncnJ1mS", + "outputId": "2fa27f16-1642-4e07-c355-5b7d1b7203e5", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " detail_id transaction_id item_id quantity\n", + "0 0 T0000000113 S005 1\n", + "1 1 T0000000114 S001 1\n", + "2 2 T0000000115 S003 1\n", + "3 3 T0000000116 S005 1\n", + "4 4 T0000000117 S002 2" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
detail_idtransaction_iditem_idquantity
00T0000000113S0051
11T0000000114S0011
22T0000000115S0031
33T0000000116S0051
44T0000000117S0022
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "transaction_detail_2 = pd.read_csv('transaction_detail_2.csv')\n", + "transaction_detail=pd.concat([transaction_detail_1,transaction_detail_2], ignore_index=True)\n", + "transaction_detail.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hL_2eEJsJ1mS" + }, + "source": [ + "### ノック3:売上データ同士を結合(ジョイン)してみよう" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "cM5Iq_32J1mT", + "outputId": "30525907-aea9-4e88-8425-35983815ad6d", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " detail_id transaction_id item_id quantity payment_date customer_id\n", + "0 0 T0000000113 S005 1 2019-02-01 01:36:57 PL563502\n", + "1 1 T0000000114 S001 1 2019-02-01 01:37:23 HD678019\n", + "2 2 T0000000115 S003 1 2019-02-01 02:34:19 HD298120\n", + "3 3 T0000000116 S005 1 2019-02-01 02:47:23 IK452215\n", + "4 4 T0000000117 S002 2 2019-02-01 04:33:46 PL542865" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
detail_idtransaction_iditem_idquantitypayment_datecustomer_id
00T0000000113S00512019-02-01 01:36:57PL563502
11T0000000114S00112019-02-01 01:37:23HD678019
22T0000000115S00312019-02-01 02:34:19HD298120
33T0000000116S00512019-02-01 02:47:23IK452215
44T0000000117S00222019-02-01 04:33:46PL542865
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "join_data = pd.merge(transaction_detail, transaction[[\"transaction_id\",\"payment_date\",\"customer_id\"]], on = \"transaction_id\", how = \"left\")\n", + "join_data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "dEIa14ICJ1mT", + "outputId": "7eb9b2a0-863c-41e4-f103-2c3299b3d30c", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "7144\n", + "6786\n", + "7144\n" + ] + } + ], + "source": [ + "print(len(transaction_detail))\n", + "print(len(transaction))\n", + "print(len(join_data))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "N68ukZAbJ1mT" + }, + "source": [ + "### ノック4:マスタデータを結合(ジョイン)してみよう" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "jAi74QxfJ1mT", + "outputId": "b525cd5c-85b6-4fea-d4da-8527eeb12481", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 313 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " detail_id transaction_id item_id quantity payment_date \\\n", + "0 0 T0000000113 S005 1 2019-02-01 01:36:57 \n", + "1 1 T0000000114 S001 1 2019-02-01 01:37:23 \n", + "2 2 T0000000115 S003 1 2019-02-01 02:34:19 \n", + "3 3 T0000000116 S005 1 2019-02-01 02:47:23 \n", + "4 4 T0000000117 S002 2 2019-02-01 04:33:46 \n", + "\n", + " customer_id customer_name registration_date customer_name_kana \\\n", + "0 PL563502 井本 芳正 2019-01-07 14:34:35 いもと よしまさ \n", + "1 HD678019 三船 六郎 2019-01-27 18:00:11 みふね ろくろう \n", + "2 HD298120 山根 小雁 2019-01-11 08:16:02 やまね こがん \n", + "3 IK452215 池田 菜摘 2019-01-10 05:07:38 いけだ なつみ \n", + "4 PL542865 栗田 憲一 2019-01-25 06:46:05 くりた けんいち \n", + "\n", + " email gender age birth pref item_name \\\n", + "0 imoto_yoshimasa@example.com M 30 1989/7/15 熊本県 PC-E \n", + "1 mifune_rokurou@example.com M 73 1945/11/29 京都府 PC-A \n", + "2 yamane_kogan@example.com M 42 1977/5/17 茨城県 PC-C \n", + "3 ikeda_natsumi@example.com F 47 1972/3/17 兵庫県 PC-E \n", + "4 kurita_kenichi@example.com M 74 1944/12/17 長崎県 PC-B \n", + "\n", + " item_price \n", + "0 210000 \n", + "1 50000 \n", + "2 120000 \n", + "3 210000 \n", + "4 85000 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
detail_idtransaction_iditem_idquantitypayment_datecustomer_idcustomer_nameregistration_datecustomer_name_kanaemailgenderagebirthprefitem_nameitem_price
00T0000000113S00512019-02-01 01:36:57PL563502井本 芳正2019-01-07 14:34:35いもと よしまさimoto_yoshimasa@example.comM301989/7/15熊本県PC-E210000
11T0000000114S00112019-02-01 01:37:23HD678019三船 六郎2019-01-27 18:00:11みふね ろくろうmifune_rokurou@example.comM731945/11/29京都府PC-A50000
22T0000000115S00312019-02-01 02:34:19HD298120山根 小雁2019-01-11 08:16:02やまね こがんyamane_kogan@example.comM421977/5/17茨城県PC-C120000
33T0000000116S00512019-02-01 02:47:23IK452215池田 菜摘2019-01-10 05:07:38いけだ なつみikeda_natsumi@example.comF471972/3/17兵庫県PC-E210000
44T0000000117S00222019-02-01 04:33:46PL542865栗田 憲一2019-01-25 06:46:05くりた けんいちkurita_kenichi@example.comM741944/12/17長崎県PC-B85000
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ], + "source": [ + "join_data = pd.merge(join_data, customer_master, on=\"customer_id\", how=\"left\")\n", + "join_data = pd.merge(join_data, item_master, on=\"item_id\", how=\"left\")\n", + "join_data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PC6cvtpvJ1mT" + }, + "source": [ + "### ノック5:必要なデータ列を作ろう" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "7oTFxMNsJ1mU", + "outputId": "13ea0f9c-88e5-4cad-8781-f69fc0611972", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " quantity item_price price\n", + "0 1 210000 210000\n", + "1 1 50000 50000\n", + "2 1 120000 120000\n", + "3 1 210000 210000\n", + "4 2 85000 170000" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
quantityitem_priceprice
01210000210000
115000050000
21120000120000
31210000210000
4285000170000
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ], + "source": [ + "join_data[\"price\"] = join_data[\"quantity\"] * join_data[\"item_price\"]\n", + "join_data[[\"quantity\", \"item_price\",\"price\"]].head()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9_CDTQ9OJ1mU" + }, + "source": [ + "### ノック6:データ検算をしよう" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "id": "F7hNI74PJ1mU", + "outputId": "bccfa6f5-c395-43f1-b823-e77c1602b4b3", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "971135000\n", + "971135000\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "execution_count": 22 + } + ], + "source": [ + "print(join_data[\"price\"].sum())\n", + "print(transaction[\"price\"].sum())\n", + "join_data[\"price\"].sum() == transaction[\"price\"].sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SUIoReEXJ1mU" + }, + "source": [ + "### ノック7:各種統計量を把握しよう" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "id": "ybIheNP9J1mV", + "outputId": "2db5fcb5-1097-4cb0-f595-a4678a4d1df6", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "detail_id 0\n", + "transaction_id 0\n", + "item_id 0\n", + "quantity 0\n", + "payment_date 0\n", + "customer_id 0\n", + "customer_name 0\n", + "registration_date 0\n", + "customer_name_kana 0\n", + "email 0\n", + "gender 0\n", + "age 0\n", + "birth 0\n", + "pref 0\n", + "item_name 0\n", + "item_price 0\n", + "price 0\n", + "dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ], + "source": [ + "join_data.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "id": "XeY8QOZ0J1mV", + "outputId": "53fdccd6-acc5-4d97-a1ae-f1c1f88844ee", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " detail_id quantity age item_price price\n", + "count 7144.000000 7144.000000 7144.000000 7144.000000 7144.000000\n", + "mean 3571.500000 1.199888 50.265677 121698.628219 135937.150056\n", + "std 2062.439494 0.513647 17.190314 64571.311830 68511.453297\n", + "min 0.000000 1.000000 20.000000 50000.000000 50000.000000\n", + "25% 1785.750000 1.000000 36.000000 50000.000000 85000.000000\n", + "50% 3571.500000 1.000000 50.000000 102500.000000 120000.000000\n", + "75% 5357.250000 1.000000 65.000000 187500.000000 210000.000000\n", + "max 7143.000000 4.000000 80.000000 210000.000000 420000.000000" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
detail_idquantityageitem_priceprice
count7144.0000007144.0000007144.0000007144.0000007144.000000
mean3571.5000001.19988850.265677121698.628219135937.150056
std2062.4394940.51364717.19031464571.31183068511.453297
min0.0000001.00000020.00000050000.00000050000.000000
25%1785.7500001.00000036.00000050000.00000085000.000000
50%3571.5000001.00000050.000000102500.000000120000.000000
75%5357.2500001.00000065.000000187500.000000210000.000000
max7143.0000004.00000080.000000210000.000000420000.000000
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ], + "source": [ + "join_data.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "id": "WvF_-kmuJ1mV", + "outputId": "179b2025-338c-4ac2-9bbe-2e1e5e782da4", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "2019-02-01 01:36:57\n", + "2019-07-31 23:41:38\n" + ] + } + ], + "source": [ + "print(join_data[\"payment_date\"].min())\n", + "print(join_data[\"payment_date\"].max())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IWYKOREPJ1mV" + }, + "source": [ + "### ノック8:月別でデータを集計してみよう" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "s3ljKRbsJ1mV" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gFaE0moTJ1mV" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "e1VQDr9dJ1mV" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NEsEIEtWJ1mV" + }, + "source": [ + "### ノック9:月別、商品別でデータを集計してみよう" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "aZyzr_vIJ1mW" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "L2zR-vGTJ1mW" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7RXaPfePJ1mW" + }, + "source": [ + "### ノック10:商品別の売上推移を可視化してみよう" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "JG1yWhO7J1mW" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NWudJq7YJ1mW" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xeQcyLAXJ1mW" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.4" + }, + "colab": { + "name": "1章_ウェブからの注文数を分析する10本ノック.ipynb", + "provenance": [], + "include_colab_link": true + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 2d1628b688e29938376fab039a154c6e1aab8188 Mon Sep 17 00:00:00 2001 From: Taitannn <64827821+Taitannn@users.noreply.github.com> Date: Sun, 24 Dec 2023 16:15:38 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E3=83=8E=E3=83=83=E3=82=AF8~10=20+=20?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=AB=A0=E5=AE=8C=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...343\203\216\343\203\203\343\202\257.ipynb" | 1916 +++++++++++++++-- 1 file changed, 1731 insertions(+), 185 deletions(-) diff --git "a/100knock-data_analytics/1\347\253\240/1\347\253\240_\343\202\246\343\202\247\343\203\226\343\201\213\343\202\211\343\201\256\346\263\250\346\226\207\346\225\260\343\202\222\345\210\206\346\236\220\343\201\231\343\202\213\357\274\221\357\274\220\346\234\254\343\203\216\343\203\203\343\202\257.ipynb" "b/100knock-data_analytics/1\347\253\240/1\347\253\240_\343\202\246\343\202\247\343\203\226\343\201\213\343\202\211\343\201\256\346\263\250\346\226\207\346\225\260\343\202\222\345\210\206\346\236\220\343\201\231\343\202\213\357\274\221\357\274\220\346\234\254\343\203\216\343\203\203\343\202\257.ipynb" index d31e243..240a8d3 100644 --- "a/100knock-data_analytics/1\347\253\240/1\347\253\240_\343\202\246\343\202\247\343\203\226\343\201\213\343\202\211\343\201\256\346\263\250\346\226\207\346\225\260\343\202\222\345\210\206\346\236\220\343\201\231\343\202\213\357\274\221\357\274\220\346\234\254\343\203\216\343\203\203\343\202\257.ipynb" +++ "b/100knock-data_analytics/1\347\253\240/1\347\253\240_\343\202\246\343\202\247\343\203\226\343\201\213\343\202\211\343\201\256\346\263\250\346\226\207\346\225\260\343\202\222\345\210\206\346\236\220\343\201\231\343\202\213\357\274\221\357\274\220\346\234\254\343\203\216\343\203\203\343\202\257.ipynb" @@ -20,18 +20,18 @@ ], "metadata": { "id": "WlS8LwC8J3kd", - "outputId": "6a0339e2-93eb-451e-f440-225dcfd896ee", + "outputId": "193a6f0e-0409-4575-a150-08527f1be89b", "colab": { "base_uri": "https://localhost:8080/" } }, - "execution_count": 3, + "execution_count": 1, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" + "Mounted at /content/drive\n" ] } ] @@ -47,7 +47,7 @@ "metadata": { "id": "G-vAUZn2J52N" }, - "execution_count": 4, + "execution_count": 2, "outputs": [] }, { @@ -74,10 +74,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "id": "Wicqn13lJ1mO", - "outputId": "9e67ae11-2a64-4cd3-8196-b7dcda777f68", + "outputId": "7ae9516b-3071-41e8-e539-a8248ac1c095", "colab": { "base_uri": "https://localhost:8080/", "height": 313 @@ -104,7 +104,7 @@ ], "text/html": [ "\n", - "
\n", + "
\n", "
\n", "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
payment_datepayment_month
02019-02-01 01:36:57201902
12019-02-01 01:37:23201902
22019-02-01 02:34:19201902
32019-02-01 02:47:23201902
42019-02-01 04:33:46201902
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ], + "source": [ + "join_data[\"payment_date\"] = pd.to_datetime(join_data[\"payment_date\"])\n", + "join_data[\"payment_month\"] = join_data['payment_date'].dt.strftime(\"%Y%m\")\n", + "join_data[[\"payment_date\",\"payment_month\"]].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "e1VQDr9dJ1mV", + "outputId": "764f310c-8475-401d-a5b9-a7917781d283", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n", + " join_data.groupby(\"payment_month\").sum()[\"price\"]\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "payment_month\n", + "201902 160185000\n", + "201903 160370000\n", + "201904 160510000\n", + "201905 155420000\n", + "201906 164030000\n", + "201907 170620000\n", + "Name: price, dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ], + "source": [ + "join_data.groupby(\"payment_month\").sum()[\"price\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NEsEIEtWJ1mV" + }, + "source": [ + "### ノック9:月別、商品別でデータを集計してみよう" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "id": "aZyzr_vIJ1mW", + "outputId": "ca2ba2ac-34b5-4ebd-aadb-ef4c84b7ab64", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n", + " join_data.groupby([\"payment_month\",\"item_name\"]).sum()[[\"price\",\"quantity\"]]\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " price quantity\n", + "payment_month item_name \n", + "201902 PC-A 24150000 483\n", + " PC-B 25245000 297\n", + " PC-C 19800000 165\n", + " PC-D 31140000 173\n", + " PC-E 59850000 285\n", + "201903 PC-A 26000000 520\n", + " PC-B 25500000 300\n", + " PC-C 19080000 159\n", + " PC-D 25740000 143\n", + " PC-E 64050000 305\n", + "201904 PC-A 25900000 518\n", + " PC-B 23460000 276\n", + " PC-C 21960000 183\n", + " PC-D 24300000 135\n", + " PC-E 64890000 309\n", + "201905 PC-A 24850000 497\n", + " PC-B 25330000 298\n", + " PC-C 20520000 171\n", + " PC-D 25920000 144\n", + " PC-E 58800000 280\n", + "201906 PC-A 26000000 520\n", + " PC-B 23970000 282\n", + " PC-C 21840000 182\n", + " PC-D 28800000 160\n", + " PC-E 63420000 302\n", + "201907 PC-A 25250000 505\n", + " PC-B 28220000 332\n", + " PC-C 19440000 162\n", + " PC-D 26100000 145\n", + " PC-E 71610000 341" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricequantity
payment_monthitem_name
201902PC-A24150000483
PC-B25245000297
PC-C19800000165
PC-D31140000173
PC-E59850000285
201903PC-A26000000520
PC-B25500000300
PC-C19080000159
PC-D25740000143
PC-E64050000305
201904PC-A25900000518
PC-B23460000276
PC-C21960000183
PC-D24300000135
PC-E64890000309
201905PC-A24850000497
PC-B25330000298
PC-C20520000171
PC-D25920000144
PC-E58800000280
201906PC-A26000000520
PC-B23970000282
PC-C21840000182
PC-D28800000160
PC-E63420000302
201907PC-A25250000505
PC-B28220000332
PC-C19440000162
PC-D26100000145
PC-E71610000341
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 22 + } + ], + "source": [ + "join_data.groupby([\"payment_month\",\"item_name\"]).sum()[[\"price\",\"quantity\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "id": "L2zR-vGTJ1mW", + "outputId": "1aedfda2-d73f-4c53-cf50-7f112f970519", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 289 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " price \\\n", + "payment_month 201902 201903 201904 201905 201906 201907 \n", + "item_name \n", + "PC-A 24150000 26000000 25900000 24850000 26000000 25250000 \n", + "PC-B 25245000 25500000 23460000 25330000 23970000 28220000 \n", + "PC-C 19800000 19080000 21960000 20520000 21840000 19440000 \n", + "PC-D 31140000 25740000 24300000 25920000 28800000 26100000 \n", + "PC-E 59850000 64050000 64890000 58800000 63420000 71610000 \n", + "\n", + " quantity \n", + "payment_month 201902 201903 201904 201905 201906 201907 \n", + "item_name \n", + "PC-A 483 520 518 497 520 505 \n", + "PC-B 297 300 276 298 282 332 \n", + "PC-C 165 159 183 171 182 162 \n", + "PC-D 173 143 135 144 160 145 \n", + "PC-E 285 305 309 280 302 341 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricequantity
payment_month201902201903201904201905201906201907201902201903201904201905201906201907
item_name
PC-A241500002600000025900000248500002600000025250000483520518497520505
PC-B252450002550000023460000253300002397000028220000297300276298282332
PC-C198000001908000021960000205200002184000019440000165159183171182162
PC-D311400002574000024300000259200002880000026100000173143135144160145
PC-E598500006405000064890000588000006342000071610000285305309280302341
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ], + "source": [ + "pd.pivot_table(join_data, index = \"item_name\", columns=\"payment_month\",values = [\"price\",\"quantity\"], aggfunc=\"sum\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7RXaPfePJ1mW" + }, + "source": [ + "### ノック10:商品別の売上推移を可視化してみよう" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "id": "JG1yWhO7J1mW", + "outputId": "9fd40fed-c08a-44e2-d7f1-7a6bc69009e3", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 237 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "item_name PC-A PC-B PC-C PC-D PC-E\n", + "payment_month \n", + "201902 24150000 25245000 19800000 31140000 59850000\n", + "201903 26000000 25500000 19080000 25740000 64050000\n", + "201904 25900000 23460000 21960000 24300000 64890000\n", + "201905 24850000 25330000 20520000 25920000 58800000\n", + "201906 26000000 23970000 21840000 28800000 63420000" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_namePC-APC-BPC-CPC-DPC-E
payment_month
2019022415000025245000198000003114000059850000
2019032600000025500000190800002574000064050000
2019042590000023460000219600002430000064890000
2019052485000025330000205200002592000058800000
2019062600000023970000218400002880000063420000
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ], + "source": [ + "graph_data = pd.pivot_table(join_data, index='payment_month', columns='item_name', values='price', aggfunc='sum')\n", + "graph_data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "id": "NWudJq7YJ1mW", + "outputId": "8284ae2d-5994-4aa8-db34-03f53e561c61", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 463 + } + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 26 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "plt.plot(list(graph_data.index), graph_data[\"PC-A\"], label=\"PC-A\")\n", + "plt.plot(list(graph_data.index), graph_data[\"PC-B\"], label='PC-B')\n", + "plt.plot(list(graph_data.index), graph_data[\"PC-C\"], label='PC-C')\n", + "plt.plot(list(graph_data.index), graph_data[\"PC-D\"], label='PC-D')\n", + "plt.plot(list(graph_data.index), graph_data[\"PC-E\"], label='PC-E')\n", + "plt.legend()" + ] }, { "cell_type": "code",