From d23d047fb47817aea9d628066605912a9f07eb55 Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 18:26:46 +0000 Subject: [PATCH] Ajout exportation vers bucket commun et modif access key --- 0_Cleaning_and_merge.ipynb | 1061 ++++++++++-------------------------- 1 file changed, 291 insertions(+), 770 deletions(-) diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index 8b723e0..89910f7 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -38,8 +38,7 @@ "outputs": [], "source": [ "# Create filesystem object\n", - "S3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n", - "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL})" + "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': 'https://'+'minio-simple.lab.groupe-genes.fr'},key ='WKTGH4YGUBAT3TR0OSUR', secret = 'g8ozi6ZUrBy8DzaAip4F7zOizbr4DKf4RgYNseqU', token = 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJXS1RHSDRZR1VCQVQzVFIwT1NVUiIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9vbnl4aWEubGFiLmdyb3VwZS1nZW5lcy5mciJdLCJhdWQiOlsibWluaW8iLCJhY2NvdW50Il0sImF1dGhfdGltZSI6MTcwNzU4NjUwMCwiYXpwIjoib255eGlhLW1pbmlvIiwiZW1haWwiOiJhbnRvaW5lLmpvdWJyZWxAZW5zYWUuZnIiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzA3NjczMDQ3LCJmYW1pbHlfbmFtZSI6IkpPVUJSRUwiLCJnaXZlbl9uYW1lIjoiQW50b2luZSIsImdyb3VwcyI6WyJiZGMyMzI0LXRlYW0xIl0sImlhdCI6MTcwNzU4NjY0NywiaXNzIjoiaHR0cHM6Ly9hdXRoLmdyb3VwZS1nZW5lcy5mci9yZWFsbXMvZ2VuZXMiLCJqdGkiOiI1MjQ2MDZmMS1lYWM3LTQxZDgtYTEzMy04MGZjMDk0MGVlNzEiLCJuYW1lIjoiQW50b2luZSBKT1VCUkVMIiwicG9saWN5Ijoic3Rzb25seSIsInByZWZlcnJlZF91c2VybmFtZSI6ImFqb3VicmVsLWVuc2FlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwiZGVmYXVsdC1yb2xlcy1nZW5lcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsInNlc3Npb25fc3RhdGUiOiI1OTk2MWNkYy0xNmFiLTQ4MTAtYWE4Zi1iZGUyMjkwNjhiNzUiLCJzaWQiOiI1OTk2MWNkYy0xNmFiLTQ4MTAtYWE4Zi1iZGUyMjkwNjhiNzUiLCJzdWIiOiIwNWYwZDk3Mi1jNWM4LTQyNmYtODAwZC00NmQ0OGU4NjkwMzUiLCJ0eXAiOiJCZWFyZXIifQ.-imw-N4bk1uCcQGobkxhsRoeBAqxC9rT7PifElbC7ODOStnwIulc7HRR2fmtiqI2PdyrfnVvzfmIPK1g056HbA')" ] }, { @@ -60,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 93, "id": "699664b9-eee4-4f8d-a207-e524526560c5", "metadata": {}, "outputs": [], @@ -810,153 +809,6 @@ "df1_campaigns_information.head()" ] }, - { - "cell_type": "code", - "execution_count": 18, - "id": "e2c88552-b863-47a2-be23-8d2898fb28bc", - "metadata": {}, - "outputs": [], - "source": [ - "def campaigns_kpi_function(campaigns_information = None):\n", - " # Nombre de campagnes de mails\n", - " nb_campaigns = campaigns_information[['customer_id', 'campaign_name']].groupby('customer_id').count().reset_index()\n", - " nb_campaigns.rename(columns = {'campaign_name' : 'nb_campaigns'}, inplace = True)\n", - " # Temps d'ouverture en min moyen \n", - " campaigns_information['time_to_open'] = campaigns_information['opened_at'] - campaigns_information['delivered_at']\n", - " time_to_open = campaigns_information[['customer_id', 'time_to_open']].groupby('customer_id').mean().reset_index()\n", - "\n", - " # Nombre de mail ouvert \n", - " opened_campaign = campaigns_information[['customer_id', 'campaign_name', 'opened_at']]\n", - " opened_campaign.dropna(subset=['opened_at'], inplace=True)\n", - " opened_campaign = opened_campaign[['customer_id', 'campaign_name']].groupby('customer_id').count().reset_index()\n", - " opened_campaign.rename(columns = {'campaign_name' : 'nb_campaigns_opened' }, inplace = True)\n", - "\n", - " # Fusion des indicateurs\n", - " campaigns_reduced = pd.merge(nb_campaigns, opened_campaign, on = 'customer_id', how = 'left')\n", - " campaigns_reduced = pd.merge(campaigns_reduced, time_to_open, on = 'customer_id', how = 'left')\n", - "\n", - " # Remplir les NaN : nb_campaigns_opened\n", - " campaigns_reduced['nb_campaigns_opened'].fillna(0, inplace=True)\n", - "\n", - " # Remplir les NaT : time_to_open (??)\n", - "\n", - " return campaigns_reduced\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "24537647-bc29-4777-9848-ac4120a4aa60", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_8302/3700263836.py:11: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " opened_campaign.dropna(subset=['opened_at'], inplace=True)\n" - ] - } - ], - "source": [ - "df1_campaigns_kpi = campaigns_kpi_function(campaigns_information = df1_campaigns_information) " - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "6be2a9a6-056b-4e19-8c26-a18ba3df36b3", - "metadata": {}, - "outputs": [ - { - "data": { - "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", - "
customer_idnb_campaignsnb_campaigns_openedtime_to_open
0240.0NaT
13222124.01 days 00:28:30.169354838
2477.01 days 04:31:01.428571428
3540.0NaT
46200.0NaT
\n", - "
" - ], - "text/plain": [ - " customer_id nb_campaigns nb_campaigns_opened time_to_open\n", - "0 2 4 0.0 NaT\n", - "1 3 222 124.0 1 days 00:28:30.169354838\n", - "2 4 7 7.0 1 days 04:31:01.428571428\n", - "3 5 4 0.0 NaT\n", - "4 6 20 0.0 NaT" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1_campaigns_kpi.head()" - ] - }, { "cell_type": "markdown", "id": "56520a97-ede8-4920-a211-3b5b136af33d", @@ -1899,20 +1751,175 @@ "df1_products_purchased = pd.merge(df1_ticket_information, products_global, left_on = 'product_id', right_on = 'id_products', how = 'inner')" ] }, + { + "cell_type": "markdown", + "id": "d7c3668a-c016-4bd0-837e-04af328ff14f", + "metadata": {}, + "source": [ + "# Construction des variables explicatives" + ] + }, + { + "cell_type": "markdown", + "id": "314f1b7f-ae48-4c6f-8469-9ce879043243", + "metadata": {}, + "source": [ + "## KPI campaigns" + ] + }, { "cell_type": "code", - "execution_count": null, - "id": "52db7bcb-3fb7-48e5-b612-4e22bdab4a94", + "execution_count": 18, + "id": "e2c88552-b863-47a2-be23-8d2898fb28bc", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def campaigns_kpi_function(campaigns_information = None):\n", + " # Nombre de campagnes de mails\n", + " nb_campaigns = campaigns_information[['customer_id', 'campaign_name']].groupby('customer_id').count().reset_index()\n", + " nb_campaigns.rename(columns = {'campaign_name' : 'nb_campaigns'}, inplace = True)\n", + " # Temps d'ouverture en min moyen \n", + " campaigns_information['time_to_open'] = campaigns_information['opened_at'] - campaigns_information['delivered_at']\n", + " time_to_open = campaigns_information[['customer_id', 'time_to_open']].groupby('customer_id').mean().reset_index()\n", + "\n", + " # Nombre de mail ouvert \n", + " opened_campaign = campaigns_information[['customer_id', 'campaign_name', 'opened_at']]\n", + " opened_campaign.dropna(subset=['opened_at'], inplace=True)\n", + " opened_campaign = opened_campaign[['customer_id', 'campaign_name']].groupby('customer_id').count().reset_index()\n", + " opened_campaign.rename(columns = {'campaign_name' : 'nb_campaigns_opened' }, inplace = True)\n", + "\n", + " # Fusion des indicateurs\n", + " campaigns_reduced = pd.merge(nb_campaigns, opened_campaign, on = 'customer_id', how = 'left')\n", + " campaigns_reduced = pd.merge(campaigns_reduced, time_to_open, on = 'customer_id', how = 'left')\n", + "\n", + " # Remplir les NaN : nb_campaigns_opened\n", + " campaigns_reduced['nb_campaigns_opened'].fillna(0, inplace=True)\n", + "\n", + " # Remplir les NaT : time_to_open (??)\n", + "\n", + " return campaigns_reduced\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "24537647-bc29-4777-9848-ac4120a4aa60", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_8302/3700263836.py:11: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " opened_campaign.dropna(subset=['opened_at'], inplace=True)\n" + ] + } + ], + "source": [ + "df1_campaigns_kpi = campaigns_kpi_function(campaigns_information = df1_campaigns_information) " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "6be2a9a6-056b-4e19-8c26-a18ba3df36b3", + "metadata": {}, + "outputs": [ + { + "data": { + "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", + "
customer_idnb_campaignsnb_campaigns_openedtime_to_open
0240.0NaT
13222124.01 days 00:28:30.169354838
2477.01 days 04:31:01.428571428
3540.0NaT
46200.0NaT
\n", + "
" + ], + "text/plain": [ + " customer_id nb_campaigns nb_campaigns_opened time_to_open\n", + "0 2 4 0.0 NaT\n", + "1 3 222 124.0 1 days 00:28:30.169354838\n", + "2 4 7 7.0 1 days 04:31:01.428571428\n", + "3 5 4 0.0 NaT\n", + "4 6 20 0.0 NaT" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1_campaigns_kpi.head()" + ] }, { "cell_type": "markdown", "id": "d4dcfbe0-c6ce-497e-b75e-dc9e938801b2", "metadata": {}, "source": [ - "### KPI tickets" + "## KPI tickets" ] }, { @@ -1978,7 +1985,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 78, "id": "3d8b0875-b409-44ce-b688-d9d6758782d3", "metadata": {}, "outputs": [ @@ -2105,177 +2112,48 @@ " l'école des magiciens\n", " 2018\n", " \n", - " \n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " \n", - " \n", - " 1826667\n", - " 18643494\n", - " 81\n", - " 4\n", - " vad\n", - " 2022-08-02 12:18:16+00:00\n", - " Billet en nombre\n", - " 11.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " en nb entrées tr\n", - " NaN\n", - " 2022\n", - " \n", - " \n", - " 1826668\n", - " 18643495\n", - " 81\n", - " 4\n", - " vad\n", - " 2022-08-02 12:18:16+00:00\n", - " Billet en nombre\n", - " 11.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " en nb entrées tr\n", - " NaN\n", - " 2022\n", - " \n", - " \n", - " 1826669\n", - " 18643496\n", - " 81\n", - " 4\n", - " vad\n", - " 2022-08-02 12:18:16+00:00\n", - " Billet en nombre\n", - " 11.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " en nb entrées tr\n", - " NaN\n", - " 2022\n", - " \n", - " \n", - " 1826670\n", - " 18643497\n", - " 81\n", - " 4\n", - " vad\n", - " 2022-08-02 12:18:16+00:00\n", - " Billet en nombre\n", - " 11.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " en nb entrées tr\n", - " NaN\n", - " 2022\n", - " \n", - " \n", - " 1826671\n", - " 19853111\n", - " 62763\n", - " 4\n", - " vad\n", - " 2022-11-04 14:25:42+00:00\n", - " Billet en nombre\n", - " 0.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " indiv entrées gr\n", - " NaN\n", - " 2022\n", - " \n", " \n", "\n", - "

1826672 rows × 14 columns

\n", "" ], "text/plain": [ - " ticket_id customer_id event_type_id supplier_name \\\n", - "0 13070859 48187 4 vente en ligne \n", - "1 13070855 48187 4 vente en ligne \n", - "2 13070856 48187 4 vente en ligne \n", - "3 13070857 48187 4 vente en ligne \n", - "4 13070858 48187 4 vente en ligne \n", - "... ... ... ... ... \n", - "1826667 18643494 81 4 vad \n", - "1826668 18643495 81 4 vad \n", - "1826669 18643496 81 4 vad \n", - "1826670 18643497 81 4 vad \n", - "1826671 19853111 62763 4 vad \n", + " ticket_id customer_id event_type_id supplier_name \\\n", + "0 13070859 48187 4 vente en ligne \n", + "1 13070855 48187 4 vente en ligne \n", + "2 13070856 48187 4 vente en ligne \n", + "3 13070857 48187 4 vente en ligne \n", + "4 13070858 48187 4 vente en ligne \n", "\n", - " purchase_date type_of_ticket_name amount \\\n", - "0 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "1 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "2 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "3 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "4 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "... ... ... ... \n", - "1826667 2022-08-02 12:18:16+00:00 Billet en nombre 11.0 \n", - "1826668 2022-08-02 12:18:16+00:00 Billet en nombre 11.0 \n", - "1826669 2022-08-02 12:18:16+00:00 Billet en nombre 11.0 \n", - "1826670 2022-08-02 12:18:16+00:00 Billet en nombre 11.0 \n", - "1826671 2022-11-04 14:25:42+00:00 Billet en nombre 0.0 \n", + " purchase_date type_of_ticket_name amount children \\\n", + "0 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", + "1 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", + "2 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", + "3 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", + "4 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", "\n", - " children is_full_price name_event_types name_facilities \\\n", - "0 pricing_formula False spectacle vivant mucem \n", - "1 pricing_formula False spectacle vivant mucem \n", - "2 pricing_formula False spectacle vivant mucem \n", - "3 pricing_formula False spectacle vivant mucem \n", - "4 pricing_formula False spectacle vivant mucem \n", - "... ... ... ... ... \n", - "1826667 pricing_formula False spectacle vivant mucem \n", - "1826668 pricing_formula False spectacle vivant mucem \n", - "1826669 pricing_formula False spectacle vivant mucem \n", - "1826670 pricing_formula False spectacle vivant mucem \n", - "1826671 pricing_formula False spectacle vivant mucem \n", + " is_full_price name_event_types name_facilities name_categories \\\n", + "0 False spectacle vivant mucem indiv prog enfant \n", + "1 False spectacle vivant mucem indiv prog enfant \n", + "2 False spectacle vivant mucem indiv prog enfant \n", + "3 False spectacle vivant mucem indiv prog enfant \n", + "4 False spectacle vivant mucem indiv prog enfant \n", "\n", - " name_categories name_events name_seasons \n", - "0 indiv prog enfant l'école des magiciens 2018 \n", - "1 indiv prog enfant l'école des magiciens 2018 \n", - "2 indiv prog enfant l'école des magiciens 2018 \n", - "3 indiv prog enfant l'école des magiciens 2018 \n", - "4 indiv prog enfant l'école des magiciens 2018 \n", - "... ... ... ... \n", - "1826667 en nb entrées tr NaN 2022 \n", - "1826668 en nb entrées tr NaN 2022 \n", - "1826669 en nb entrées tr NaN 2022 \n", - "1826670 en nb entrées tr NaN 2022 \n", - "1826671 indiv entrées gr NaN 2022 \n", - "\n", - "[1826672 rows x 14 columns]" + " name_events name_seasons \n", + "0 l'école des magiciens 2018 \n", + "1 l'école des magiciens 2018 \n", + "2 l'école des magiciens 2018 \n", + "3 l'école des magiciens 2018 \n", + "4 l'école des magiciens 2018 " ] }, - "execution_count": 33, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Importance des suppliers\n", - "df1_products_purchased_reduced" + "df1_products_purchased_reduced.head()" ] }, { @@ -2291,7 +2169,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 82, "id": "043303fe-e90f-4689-a2a9-5d690555a045", "metadata": {}, "outputs": [], @@ -2305,11 +2183,11 @@ " tickets_information_copy['vente_internet'] = tickets_information_copy['supplier_name'].str.contains('|'.join(liste_mots), case=False).astype(int)\n", "\n", " # Proportion de vente en ligne\n", - " prop_vente_internet = tickets_information_copy[tickets_information_copy['vente_internet'] == 1].groupby('customer_id')['ticket_id'].count().reset_index()\n", + " prop_vente_internet = tickets_information_copy[tickets_information_copy['vente_internet'] == 1].groupby(['customer_id', 'event_type_id'])['ticket_id'].count().reset_index()\n", " prop_vente_internet.rename(columns = {'ticket_id' : 'nb_tickets_internet'}, inplace = True)\n", " \n", " tickets_kpi = (tickets_information_copy[['event_type_id', 'customer_id', 'ticket_id','supplier_name', 'purchase_date', 'amount', 'vente_internet']]\n", - " .groupby([ 'customer_id']) # 'event_type_id',\n", + " .groupby(['customer_id', 'event_type_id']) \n", " .agg({'ticket_id': 'count', \n", " 'amount' : 'sum',\n", " 'supplier_name': 'nunique',\n", @@ -2322,11 +2200,12 @@ " tickets_kpi.rename(columns = {'ticket_id_count' : 'nb_tickets', \n", " 'amount_sum' : 'total_amount',\n", " 'supplier_name_nunique' : 'nb_suppliers', \n", - " 'customer_id_' : 'customer_id'}, inplace = True)\n", + " 'customer_id_' : 'customer_id',\n", + " 'event_type_id_' : 'event_type_id'}, inplace = True)\n", " \n", " tickets_kpi['time_between_purchase'] = tickets_kpi['purchase_date_max'] - tickets_kpi['purchase_date_min']\n", "\n", - " tickets_kpi = tickets_kpi.merge(prop_vente_internet, on = 'customer_id', how = 'left')\n", + " tickets_kpi = tickets_kpi.merge(prop_vente_internet, on = ['customer_id', 'event_type_id'], how = 'left')\n", " tickets_kpi['nb_tickets_internet'] = tickets_kpi['nb_tickets_internet'].fillna(0)\n", " \n", " return tickets_kpi\n", @@ -2335,7 +2214,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 83, "id": "5882234a-1ed5-4269-87a6-0d75613476e3", "metadata": {}, "outputs": [], @@ -2343,9 +2222,33 @@ "df1_tickets_kpi = tickets_kpi_function(tickets_information = df1_products_purchased_reduced)" ] }, + { + "cell_type": "markdown", + "id": "597b241e-a83d-4b7c-8ad7-eec50295dff2", + "metadata": {}, + "source": [ + "#### Exportation" + ] + }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 92, + "id": "a4a2311d-8a72-4030-afd5-218004d5d2a5", + "metadata": {}, + "outputs": [], + "source": [ + "# Exportation vers 'projet-bdc2324-team1'\n", + "BUCKET_OUT = \"projet-bdc2324-team1\"\n", + "FILE_KEY_OUT_S3 = \"0_Temp/Company 1 - Purchasing behaviour.csv\"\n", + "FILE_PATH_OUT_S3 = BUCKET_OUT + \"/\" + FILE_KEY_OUT_S3\n", + "\n", + "with fs.open(FILE_PATH_OUT_S3, 'w') as file_out:\n", + " df1_tickets_kpi.to_csv(file_out)" + ] + }, + { + "cell_type": "code", + "execution_count": 84, "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", "metadata": {}, "outputs": [ @@ -2371,6 +2274,7 @@ " \n", " \n", " customer_id\n", + " event_type_id\n", " nb_tickets\n", " total_amount\n", " nb_suppliers\n", @@ -2383,474 +2287,104 @@ " \n", " \n", " \n", + " 1\n", + " 1\n", + " 4\n", + " 453242\n", + " 3248965.5\n", + " 6\n", + " 1\n", + " 2013-09-23 14:45:01+00:00\n", + " 2023-11-03 14:11:01+00:00\n", + " 3692 days 23:26:00\n", + " 2988.0\n", + " \n", + " \n", " 0\n", " 1\n", - " 1256574\n", - " 8830567.5\n", + " 2\n", + " 384226\n", + " 2686540.5\n", " 7\n", " 1\n", + " 2014-12-03 14:55:37+00:00\n", + " 2023-11-04 15:12:16+00:00\n", + " 3258 days 00:16:39\n", + " 51.0\n", + " \n", + " \n", + " 3\n", + " 1\n", + " 6\n", + " 217356\n", + " 1435871.5\n", + " 5\n", + " 1\n", + " 2017-01-01 02:20:08+00:00\n", + " 2019-12-31 02:20:06+00:00\n", + " 1093 days 23:59:58\n", + " 5.0\n", + " \n", + " \n", + " 2\n", + " 1\n", + " 5\n", + " 201750\n", + " 1459190.0\n", + " 6\n", + " 1\n", " 2013-06-10 10:37:58+00:00\n", " 2023-11-08 15:59:45+00:00\n", " 3803 days 05:21:47\n", - " 3053.0\n", + " 9.0\n", " \n", " \n", - " 3615\n", + " 5032\n", " 6733\n", - " 35527\n", - " 1188.0\n", - " 4\n", - " 1\n", - " 2015-09-09 13:48:38+00:00\n", - " 2023-11-03 09:42:40+00:00\n", - " 2976 days 19:54:02\n", - " 30896.0\n", - " \n", - " \n", - " 39\n", - " 41\n", - " 16263\n", - " 37642.0\n", " 6\n", - " 1\n", - " 2014-01-23 16:56:57+00:00\n", - " 2023-10-25 09:13:16+00:00\n", - " 3561 days 16:16:19\n", - " 13993.0\n", - " \n", - " \n", - " 11\n", - " 12\n", - " 5871\n", - " 38767.0\n", - " 2\n", - " 1\n", - " 2018-04-04 07:46:31+00:00\n", - " 2023-11-04 13:46:59+00:00\n", - " 2040 days 06:00:28\n", - " 167.0\n", - " \n", - " \n", - " 32809\n", - " 63488\n", - " 5851\n", - " 64350.0\n", - " 1\n", - " 1\n", - " 2020-08-18 08:32:57+00:00\n", - " 2022-08-25 13:08:38+00:00\n", - " 737 days 04:35:41\n", - " 5851.0\n", - " \n", - " \n", - " 3708\n", - " 6916\n", - " 5482\n", - " 51489.5\n", - " 2\n", - " 1\n", - " 2018-03-26 11:13:43+00:00\n", - " 2021-08-26 12:49:17+00:00\n", - " 1249 days 01:35:34\n", - " 5481.0\n", - " \n", - " \n", - " 32616\n", - " 63194\n", - " 4507\n", - " 13232.0\n", + " 14208\n", + " 0.0\n", " 3\n", " 1\n", - " 2017-11-28 13:52:15+00:00\n", - " 2022-09-07 12:55:33+00:00\n", - " 1743 days 23:03:18\n", - " 826.0\n", - " \n", - " \n", - " 78\n", - " 81\n", - " 3562\n", - " 38746.0\n", - " 1\n", - " 1\n", - " 2017-01-05 13:04:58+00:00\n", - " 2022-08-30 11:51:34+00:00\n", - " 2062 days 22:46:36\n", - " 3562.0\n", - " \n", - " \n", - " 35295\n", - " 84002\n", - " 3403\n", - " 19830.0\n", - " 4\n", - " 1\n", - " 2021-05-28 10:22:33+00:00\n", - " 2023-11-06 15:59:22+00:00\n", - " 892 days 05:36:49\n", - " 869.0\n", - " \n", - " \n", - " 3377\n", - " 5618\n", - " 3294\n", - " 31684.5\n", - " 1\n", - " 1\n", - " 2018-10-25 11:04:24+00:00\n", - " 2022-02-24 07:47:20+00:00\n", - " 1217 days 20:42:56\n", - " 3294.0\n", - " \n", - " \n", - " 30011\n", - " 59259\n", - " 2591\n", - " 4350.0\n", - " 3\n", - " 1\n", - " 2019-11-25 08:52:48+00:00\n", - " 2023-06-12 14:05:19+00:00\n", - " 1295 days 05:12:31\n", - " 52.0\n", - " \n", - " \n", - " 34937\n", - " 74876\n", - " 2571\n", - " 2600.0\n", - " 2\n", - " 1\n", - " 2018-02-08 12:54:01+00:00\n", - " 2023-10-02 08:13:05+00:00\n", - " 2061 days 19:19:04\n", - " 448.0\n", - " \n", - " \n", - " 270\n", - " 295\n", - " 2570\n", - " 17678.5\n", - " 6\n", - " 1\n", - " 2014-01-24 15:16:17+00:00\n", - " 2023-10-16 10:19:22+00:00\n", - " 3551 days 19:03:05\n", - " 1479.0\n", - " \n", - " \n", - " 866\n", - " 1221\n", - " 2320\n", - " 9652.0\n", - " 2\n", - " 1\n", - " 2017-03-29 08:00:09+00:00\n", - " 2022-09-19 12:55:15+00:00\n", - " 2000 days 04:55:06\n", - " 104.0\n", - " \n", - " \n", - " 1022\n", - " 1429\n", - " 2249\n", - " 3500.0\n", - " 4\n", - " 1\n", - " 2014-12-03 14:56:38+00:00\n", - " 2023-11-06 08:30:37+00:00\n", - " 3259 days 17:33:59\n", - " 690.0\n", - " \n", - " \n", - " 3922\n", - " 7249\n", - " 1827\n", - " 13385.0\n", - " 1\n", - " 1\n", - " 2019-05-07 12:34:56+00:00\n", - " 2021-10-26 12:28:40+00:00\n", - " 902 days 23:53:44\n", - " 1827.0\n", - " \n", - " \n", - " 54425\n", - " 1070539\n", - " 1800\n", - " 19800.0\n", - " 1\n", - " 1\n", - " 2022-05-02 16:09:03+00:00\n", - " 2022-07-25 12:49:27+00:00\n", - " 83 days 20:40:24\n", - " 1800.0\n", - " \n", - " \n", - " 69520\n", - " 1216801\n", - " 1623\n", - " 12562.0\n", - " 2\n", - " 0\n", - " 2023-06-16 14:16:04+00:00\n", - " 2023-09-29 16:34:38+00:00\n", - " 105 days 02:18:34\n", - " 0.0\n", - " \n", - " \n", - " 30056\n", - " 59330\n", - " 1551\n", - " 0.0\n", - " 1\n", - " 0\n", - " 2018-02-02 08:53:51+00:00\n", - " 2023-11-06 10:22:14+00:00\n", - " 2103 days 01:28:23\n", - " 0.0\n", - " \n", - " \n", - " 3243\n", - " 5441\n", - " 1544\n", - " 14133.0\n", - " 2\n", - " 1\n", - " 2017-12-14 12:50:23+00:00\n", - " 2022-09-22 08:21:47+00:00\n", - " 1742 days 19:31:24\n", - " 1384.0\n", - " \n", - " \n", - " 55195\n", - " 1084435\n", - " 1500\n", - " 16500.0\n", - " 1\n", - " 1\n", - " 2022-05-18 08:04:41+00:00\n", - " 2022-09-27 14:32:13+00:00\n", - " 132 days 06:27:32\n", - " 1500.0\n", - " \n", - " \n", - " 28983\n", - " 57816\n", - " 1485\n", - " 0.0\n", - " 2\n", - " 1\n", - " 2019-01-21 14:19:18+00:00\n", - " 2023-05-22 07:30:55+00:00\n", - " 1581 days 17:11:37\n", - " 357.0\n", - " \n", - " \n", - " 2231\n", - " 2942\n", - " 1307\n", - " 100.0\n", - " 2\n", - " 1\n", - " 2017-10-25 15:06:58+00:00\n", - " 2023-06-29 09:33:58+00:00\n", - " 2072 days 18:27:00\n", - " 676.0\n", - " \n", - " \n", - " 23\n", - " 24\n", - " 1266\n", - " 0.0\n", - " 2\n", - " 1\n", - " 2015-09-30 16:07:52+00:00\n", - " 2023-10-19 07:20:48+00:00\n", - " 2940 days 15:12:56\n", - " 556.0\n", - " \n", - " \n", - " 4513\n", - " 9592\n", - " 1211\n", - " 62.0\n", - " 4\n", - " 1\n", - " 2018-02-25 07:17:19+00:00\n", - " 2023-10-17 09:39:40+00:00\n", - " 2060 days 02:22:21\n", - " 353.0\n", - " \n", - " \n", - " 2936\n", - " 5059\n", - " 1186\n", - " 6308.0\n", - " 3\n", - " 1\n", - " 2018-02-01 11:16:51+00:00\n", - " 2023-05-22 13:41:22+00:00\n", - " 1936 days 02:24:31\n", - " 1182.0\n", - " \n", - " \n", - " 11484\n", - " 25100\n", - " 1123\n", - " 0.0\n", - " 1\n", - " 1\n", - " 2015-12-21 15:38:05+00:00\n", - " 2021-07-13 07:39:57+00:00\n", - " 2030 days 16:01:52\n", - " 1123.0\n", - " \n", - " \n", - " 934\n", - " 1326\n", - " 1098\n", - " 798.0\n", - " 3\n", - " 1\n", - " 2018-02-13 13:13:48+00:00\n", - " 2023-02-01 08:39:45+00:00\n", - " 1813 days 19:25:57\n", - " 266.0\n", - " \n", - " \n", - " 30156\n", - " 59490\n", - " 1088\n", - " 0.0\n", - " 1\n", - " 0\n", - " 2019-12-06 12:59:20+00:00\n", - " 2023-10-05 08:23:50+00:00\n", - " 1398 days 19:24:30\n", - " 0.0\n", - " \n", - " \n", - " 36478\n", - " 251268\n", - " 1086\n", - " 0.0\n", - " 2\n", - " 1\n", - " 2018-02-02 09:06:22+00:00\n", - " 2023-06-30 07:22:46+00:00\n", - " 1973 days 22:16:24\n", - " 279.0\n", + " 2017-01-11 15:00:54+00:00\n", + " 2019-11-27 09:47:06+00:00\n", + " 1049 days 18:46:12\n", + " 13497.0\n", " \n", " \n", "\n", "" ], "text/plain": [ - " customer_id nb_tickets total_amount nb_suppliers \\\n", - "0 1 1256574 8830567.5 7 \n", - "3615 6733 35527 1188.0 4 \n", - "39 41 16263 37642.0 6 \n", - "11 12 5871 38767.0 2 \n", - "32809 63488 5851 64350.0 1 \n", - "3708 6916 5482 51489.5 2 \n", - "32616 63194 4507 13232.0 3 \n", - "78 81 3562 38746.0 1 \n", - "35295 84002 3403 19830.0 4 \n", - "3377 5618 3294 31684.5 1 \n", - "30011 59259 2591 4350.0 3 \n", - "34937 74876 2571 2600.0 2 \n", - "270 295 2570 17678.5 6 \n", - "866 1221 2320 9652.0 2 \n", - "1022 1429 2249 3500.0 4 \n", - "3922 7249 1827 13385.0 1 \n", - "54425 1070539 1800 19800.0 1 \n", - "69520 1216801 1623 12562.0 2 \n", - "30056 59330 1551 0.0 1 \n", - "3243 5441 1544 14133.0 2 \n", - "55195 1084435 1500 16500.0 1 \n", - "28983 57816 1485 0.0 2 \n", - "2231 2942 1307 100.0 2 \n", - "23 24 1266 0.0 2 \n", - "4513 9592 1211 62.0 4 \n", - "2936 5059 1186 6308.0 3 \n", - "11484 25100 1123 0.0 1 \n", - "934 1326 1098 798.0 3 \n", - "30156 59490 1088 0.0 1 \n", - "36478 251268 1086 0.0 2 \n", + " customer_id event_type_id nb_tickets total_amount nb_suppliers \\\n", + "1 1 4 453242 3248965.5 6 \n", + "0 1 2 384226 2686540.5 7 \n", + "3 1 6 217356 1435871.5 5 \n", + "2 1 5 201750 1459190.0 6 \n", + "5032 6733 6 14208 0.0 3 \n", "\n", - " vente_internet_max purchase_date_min purchase_date_max \\\n", - "0 1 2013-06-10 10:37:58+00:00 2023-11-08 15:59:45+00:00 \n", - "3615 1 2015-09-09 13:48:38+00:00 2023-11-03 09:42:40+00:00 \n", - "39 1 2014-01-23 16:56:57+00:00 2023-10-25 09:13:16+00:00 \n", - "11 1 2018-04-04 07:46:31+00:00 2023-11-04 13:46:59+00:00 \n", - "32809 1 2020-08-18 08:32:57+00:00 2022-08-25 13:08:38+00:00 \n", - "3708 1 2018-03-26 11:13:43+00:00 2021-08-26 12:49:17+00:00 \n", - "32616 1 2017-11-28 13:52:15+00:00 2022-09-07 12:55:33+00:00 \n", - "78 1 2017-01-05 13:04:58+00:00 2022-08-30 11:51:34+00:00 \n", - "35295 1 2021-05-28 10:22:33+00:00 2023-11-06 15:59:22+00:00 \n", - "3377 1 2018-10-25 11:04:24+00:00 2022-02-24 07:47:20+00:00 \n", - "30011 1 2019-11-25 08:52:48+00:00 2023-06-12 14:05:19+00:00 \n", - "34937 1 2018-02-08 12:54:01+00:00 2023-10-02 08:13:05+00:00 \n", - "270 1 2014-01-24 15:16:17+00:00 2023-10-16 10:19:22+00:00 \n", - "866 1 2017-03-29 08:00:09+00:00 2022-09-19 12:55:15+00:00 \n", - "1022 1 2014-12-03 14:56:38+00:00 2023-11-06 08:30:37+00:00 \n", - "3922 1 2019-05-07 12:34:56+00:00 2021-10-26 12:28:40+00:00 \n", - "54425 1 2022-05-02 16:09:03+00:00 2022-07-25 12:49:27+00:00 \n", - "69520 0 2023-06-16 14:16:04+00:00 2023-09-29 16:34:38+00:00 \n", - "30056 0 2018-02-02 08:53:51+00:00 2023-11-06 10:22:14+00:00 \n", - "3243 1 2017-12-14 12:50:23+00:00 2022-09-22 08:21:47+00:00 \n", - "55195 1 2022-05-18 08:04:41+00:00 2022-09-27 14:32:13+00:00 \n", - "28983 1 2019-01-21 14:19:18+00:00 2023-05-22 07:30:55+00:00 \n", - "2231 1 2017-10-25 15:06:58+00:00 2023-06-29 09:33:58+00:00 \n", - "23 1 2015-09-30 16:07:52+00:00 2023-10-19 07:20:48+00:00 \n", - "4513 1 2018-02-25 07:17:19+00:00 2023-10-17 09:39:40+00:00 \n", - "2936 1 2018-02-01 11:16:51+00:00 2023-05-22 13:41:22+00:00 \n", - "11484 1 2015-12-21 15:38:05+00:00 2021-07-13 07:39:57+00:00 \n", - "934 1 2018-02-13 13:13:48+00:00 2023-02-01 08:39:45+00:00 \n", - "30156 0 2019-12-06 12:59:20+00:00 2023-10-05 08:23:50+00:00 \n", - "36478 1 2018-02-02 09:06:22+00:00 2023-06-30 07:22:46+00:00 \n", + " vente_internet_max purchase_date_min purchase_date_max \\\n", + "1 1 2013-09-23 14:45:01+00:00 2023-11-03 14:11:01+00:00 \n", + "0 1 2014-12-03 14:55:37+00:00 2023-11-04 15:12:16+00:00 \n", + "3 1 2017-01-01 02:20:08+00:00 2019-12-31 02:20:06+00:00 \n", + "2 1 2013-06-10 10:37:58+00:00 2023-11-08 15:59:45+00:00 \n", + "5032 1 2017-01-11 15:00:54+00:00 2019-11-27 09:47:06+00:00 \n", "\n", - " time_between_purchase nb_tickets_internet \n", - "0 3803 days 05:21:47 3053.0 \n", - "3615 2976 days 19:54:02 30896.0 \n", - "39 3561 days 16:16:19 13993.0 \n", - "11 2040 days 06:00:28 167.0 \n", - "32809 737 days 04:35:41 5851.0 \n", - "3708 1249 days 01:35:34 5481.0 \n", - "32616 1743 days 23:03:18 826.0 \n", - "78 2062 days 22:46:36 3562.0 \n", - "35295 892 days 05:36:49 869.0 \n", - "3377 1217 days 20:42:56 3294.0 \n", - "30011 1295 days 05:12:31 52.0 \n", - "34937 2061 days 19:19:04 448.0 \n", - "270 3551 days 19:03:05 1479.0 \n", - "866 2000 days 04:55:06 104.0 \n", - "1022 3259 days 17:33:59 690.0 \n", - "3922 902 days 23:53:44 1827.0 \n", - "54425 83 days 20:40:24 1800.0 \n", - "69520 105 days 02:18:34 0.0 \n", - "30056 2103 days 01:28:23 0.0 \n", - "3243 1742 days 19:31:24 1384.0 \n", - "55195 132 days 06:27:32 1500.0 \n", - "28983 1581 days 17:11:37 357.0 \n", - "2231 2072 days 18:27:00 676.0 \n", - "23 2940 days 15:12:56 556.0 \n", - "4513 2060 days 02:22:21 353.0 \n", - "2936 1936 days 02:24:31 1182.0 \n", - "11484 2030 days 16:01:52 1123.0 \n", - "934 1813 days 19:25:57 266.0 \n", - "30156 1398 days 19:24:30 0.0 \n", - "36478 1973 days 22:16:24 279.0 " + " time_between_purchase nb_tickets_internet \n", + "1 3692 days 23:26:00 2988.0 \n", + "0 3258 days 00:16:39 51.0 \n", + "3 1093 days 23:59:58 5.0 \n", + "2 3803 days 05:21:47 9.0 \n", + "5032 1049 days 18:46:12 13497.0 " ] }, - "execution_count": 77, + "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df1_tickets_kpi.sort_values(by='nb_tickets', ascending=False).head(30)" + "df1_tickets_kpi.sort_values(by='nb_tickets', ascending=False).head(5)" ] }, { @@ -2882,19 +2416,6 @@ "df1_customer.head()" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "b5c4418c-ad2e-4bb9-bd5c-3b769e9c87d4", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('display.max_columns', None)\n", - "\n", - "\n", - "df1_customer[df1_customer['customer_id'] == 1]" - ] - }, { "cell_type": "code", "execution_count": null,