diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index ba13c22..20c5a03 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 1, "id": "15103481-8d74-404c-aa09-7601fe7730da", "metadata": {}, "outputs": [], @@ -19,7 +19,8 @@ "import numpy as np\n", "import os\n", "import s3fs\n", - "import re" + "import re\n", + "import warnings" ] }, { @@ -32,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 2, "id": "5d83bb1a-d341-446e-91f6-1c428607f6d4", "metadata": {}, "outputs": [], @@ -42,6 +43,17 @@ "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL})" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "a9b84234-d5df-4c43-a9cd-80cfe2f1e34d", + "metadata": {}, + "outputs": [], + "source": [ + "# Ignore warning\n", + "warnings.filterwarnings('ignore')" + ] + }, { "cell_type": "markdown", "id": "9cbd72c5-6f8e-4366-ab66-96c32c6e963a", @@ -60,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 3, "id": "699664b9-eee4-4f8d-a207-e524526560c5", "metadata": {}, "outputs": [], @@ -71,21 +83,13 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 4, "id": "dd6a3518-b752-4a1e-b77b-9e03e853c3ed", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1018/4081512283.py:10: DtypeWarning: Columns (1) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " df = pd.read_csv(file_in)\n" - ] - } - ], + "outputs": [], "source": [ "# loop to create dataframes from liste\n", + "\n", "files_path = liste_database\n", "\n", "client_number = files_path[0].split(\"/\")[1]\n", @@ -110,7 +114,7 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 5, "id": "d237be96-8c86-4a91-b7a1-487e87a16c3d", "metadata": {}, "outputs": [], @@ -151,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 6, "id": "7e7b90ce-da54-4f00-bc34-64c543b0858f", "metadata": {}, "outputs": [], @@ -173,7 +177,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 7, "id": "03329e32-00a5-42c8-9470-75f7b6216ccd", "metadata": {}, "outputs": [], @@ -191,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 8, "id": "b95464b1-26bc-4aac-84b4-45da83b92251", "metadata": {}, "outputs": [], @@ -205,6 +209,7 @@ " # Base des fournisseurs\n", " suppliers = suppliers[['id', 'name']]\n", " suppliers.rename(columns = {'name' : 'supplier_name'}, inplace = True)\n", + " suppliers['supplier_name'] = suppliers['supplier_name'].fillna('')\n", "\n", " # Base des types de billets\n", " type_ofs = type_ofs[['id', 'name', 'children']]\n", @@ -234,39 +239,17 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 9, "id": "3e1d2ba7-ff4f-48eb-93a8-2bb648c70396", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1018/1591303091.py:5: 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", - " tickets.rename(columns = {'id' : 'ticket_id'}, inplace = True)\n", - "/tmp/ipykernel_1018/1591303091.py:9: 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", - " suppliers.rename(columns = {'name' : 'supplier_name'}, inplace = True)\n", - "/tmp/ipykernel_1018/1591303091.py:13: 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", - " type_ofs.rename(columns = {'name' : 'type_of_ticket_name'}, inplace = True)\n" - ] - } - ], + "outputs": [], "source": [ "df1_ticket_information = preprocessing_tickets_area(tickets = df1_tickets, purchases = df1_purchases, suppliers = df1_suppliers, type_ofs = df1_type_ofs)" ] }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 10, "id": "4b18edfc-6450-4c6a-9e7b-ee5a5808c8c9", "metadata": {}, "outputs": [ @@ -377,7 +360,7 @@ "4 Atelier pricing_formula 2018-12-28 14:47:50+00:00 48187 " ] }, - "execution_count": 98, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -396,7 +379,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 11, "id": "baed146a-9d3a-4397-a812-3d50c9a2f038", "metadata": {}, "outputs": [], @@ -425,185 +408,14 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 12, "id": "5fbfd88b-b94c-489c-9201-670e96e453e7", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1018/3848597476.py:4: 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", - " targets.rename(columns = {'id' : 'target_id' , 'name' : 'target_name'}, inplace = True)\n" - ] - } - ], + "outputs": [], "source": [ "df1_target_information = preprocessing_target_area(targets = df1_targets, target_types = df1_target_types, customer_target_mappings = df1_customer_target_mappings)" ] }, - { - "cell_type": "code", - "execution_count": 104, - "id": "b4f05142-2a22-42ef-a60d-f23cc4b5cb09", - "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", - "
customer_id
target_name
consentement optin mediation specialisee150000
consentement optin jeune public149979
consentement optin b2c108909
Arenametrix_bascule tel vers sib35216
consentement optout b2c34523
\n", - "
" - ], - "text/plain": [ - " customer_id\n", - "target_name \n", - "consentement optin mediation specialisee 150000\n", - "consentement optin jeune public 149979\n", - "consentement optin b2c 108909\n", - "Arenametrix_bascule tel vers sib 35216\n", - "consentement optout b2c 34523" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1_target_information[['target_name', 'customer_id']].groupby('target_name').count().sort_values(by='customer_id', ascending=False).head()" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "id": "4417ff51-f501-4ab9-a192-4ab75764a8ed", - "metadata": { - "scrolled": true - }, - "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", - "
customer_id
target_name
Arenametrix_bascule tel vers sib35216
Autres_interet_exposition1021
COM Inscrits NL générale (historique)23005
Contacts_prenomsdoubles11643
DDCP MD Procès du Siècle1684
\n", - "
" - ], - "text/plain": [ - " customer_id\n", - "target_name \n", - "Arenametrix_bascule tel vers sib 35216\n", - "Autres_interet_exposition 1021\n", - "COM Inscrits NL générale (historique) 23005\n", - "Contacts_prenomsdoubles 11643\n", - "DDCP MD Procès du Siècle 1684" - ] - }, - "execution_count": 106, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1_target_information_reduced = df1_target_information[['target_name', 'customer_id']].groupby('target_name').count()\n", - "df1_target_information_reduced[df1_target_information_reduced['customer_id'] >= 1000].head()" - ] - }, { "cell_type": "markdown", "id": "cdbb48b4-5e16-4ef4-8791-ed213d68d52f", @@ -614,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 13, "id": "d883cc7b-ac43-4485-b86f-eaf595fbad85", "metadata": {}, "outputs": [], @@ -639,42 +451,17 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 14, "id": "c8552dd6-52c5-4431-b43d-3cd6c578fd9f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1018/1967867975.py:15: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\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", - " df[column_name] = pd.to_datetime(df[column_name], utc = True, format = 'ISO8601')\n", - "/tmp/ipykernel_1018/1967867975.py:15: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\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", - " df[column_name] = pd.to_datetime(df[column_name], utc = True, format = 'ISO8601')\n", - "/tmp/ipykernel_1018/1967867975.py:15: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\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", - " df[column_name] = pd.to_datetime(df[column_name], utc = True, format = 'ISO8601')\n" - ] - } - ], + "outputs": [], "source": [ "df1_campaigns_information = preprocessing_campaigns_area(campaign_stats = df1_campaign_stats, campaigns = df1_campaigns)" ] }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 15, "id": "c24457e7-3cad-451a-a65b-7373b656bd6e", "metadata": { "scrolled": true @@ -794,7 +581,7 @@ "4 404 2021-03-27 23:00:00+00:00 " ] }, - "execution_count": 112, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -803,159 +590,12 @@ "df1_campaigns_information.head()" ] }, - { - "cell_type": "code", - "execution_count": 114, - "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": 116, - "id": "24537647-bc29-4777-9848-ac4120a4aa60", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_1018/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": 118, - "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": 118, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1_campaigns_kpi.head()" - ] - }, { "cell_type": "markdown", "id": "56520a97-ede8-4920-a211-3b5b136af33d", "metadata": {}, "source": [ - "## Create Products Table" + "## Product area" ] }, { @@ -968,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 16, "id": "30488a40-1b38-4b9a-9d3b-26a0597c5e6d", "metadata": {}, "outputs": [], @@ -979,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 17, "id": "607eb4b4-eed9-4b50-b823-f75c116dd37c", "metadata": {}, "outputs": [], @@ -1050,7 +690,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 18, "id": "350b09b9-451f-4d47-81fe-f34b892db027", "metadata": {}, "outputs": [], @@ -1138,7 +778,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 19, "id": "0fccc8ef-e575-4857-a401-94a7274394df", "metadata": {}, "outputs": [ @@ -1291,7 +931,7 @@ "4 indiv entrées tp " ] }, - "execution_count": 126, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1303,7 +943,7 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 20, "id": "779d8aaf-6668-4f66-8852-847304407ea3", "metadata": {}, "outputs": [ @@ -1473,7 +1113,7 @@ "4 spectacle vivant mucem " ] }, - "execution_count": 128, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1485,7 +1125,7 @@ }, { "cell_type": "code", - "execution_count": 130, + "execution_count": 21, "id": "7714fa32-303b-4ea7-b174-3fd0fcab5af0", "metadata": {}, "outputs": [ @@ -1584,7 +1224,7 @@ "4 37 383 269 1" ] }, - "execution_count": 130, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1604,7 +1244,7 @@ }, { "cell_type": "code", - "execution_count": 132, + "execution_count": 22, "id": "15a62ed6-35e4-4abc-aeef-a7daeec0a4ba", "metadata": {}, "outputs": [], @@ -1632,7 +1272,7 @@ }, { "cell_type": "code", - "execution_count": 134, + "execution_count": 23, "id": "89dc9685-1de9-4ce3-a6c0-8d7f1931a951", "metadata": {}, "outputs": [ @@ -1686,7 +1326,7 @@ " id_representation_cap\n", " season_id\n", " facility_id\n", - " event_type_id\n", + " ...\n", " event_type_key_id\n", " facility_key_id\n", " street_id\n", @@ -1712,7 +1352,7 @@ " 8789\n", " 4\n", " 1\n", - " 2\n", + " ...\n", " 5\n", " 1\n", " 1\n", @@ -1736,7 +1376,7 @@ " 390\n", " 2\n", " 1\n", - " 2\n", + " ...\n", " 2\n", " 1\n", " 1\n", @@ -1760,7 +1400,7 @@ " 395\n", " 2\n", " 1\n", - " 2\n", + " ...\n", " 2\n", " 1\n", " 1\n", @@ -1784,7 +1424,7 @@ " 120199\n", " 1754\n", " 1\n", - " 2\n", + " ...\n", " 4\n", " 1\n", " 1\n", @@ -1808,7 +1448,7 @@ " 21\n", " 4\n", " 1\n", - " 3\n", + " ...\n", " 6\n", " 1\n", " 1\n", @@ -1822,6 +1462,7 @@ " \n", " \n", "\n", + "

5 rows × 21 columns

\n", "" ], "text/plain": [ @@ -1839,19 +1480,19 @@ "3 156773 1 12365 120199 \n", "4 1175 1 8 21 \n", "\n", - " season_id facility_id event_type_id event_type_key_id facility_key_id \\\n", - "0 4 1 2 5 1 \n", - "1 2 1 2 2 1 \n", - "2 2 1 2 2 1 \n", - "3 1754 1 2 4 1 \n", - "4 4 1 3 6 1 \n", + " season_id facility_id ... event_type_key_id facility_key_id street_id \\\n", + "0 4 1 ... 5 1 1 \n", + "1 2 1 ... 2 1 1 \n", + "2 2 1 ... 2 1 1 \n", + "3 1754 1 ... 4 1 1 \n", + "4 4 1 ... 6 1 1 \n", "\n", - " street_id amount is_full_price name_categories \\\n", - "0 1 9.0 False indiv activité tr \n", - "1 1 9.5 False indiv entrées tp \n", - "2 1 11.5 False indiv entrées tp \n", - "3 1 8.0 False indiv entrées tr \n", - "4 1 8.5 False indiv entrées tp \n", + " amount is_full_price name_categories \\\n", + "0 9.0 False indiv activité tr \n", + "1 9.5 False indiv entrées tp \n", + "2 11.5 False indiv entrées tp \n", + "3 8.0 False indiv entrées tr \n", + "4 8.5 False indiv entrées tp \n", "\n", " name_events name_seasons \\\n", "0 visite-jeu \"le classico des minots\" (1h30) 2017 \n", @@ -1865,10 +1506,12 @@ "1 offre muséale individuel mucem \n", "2 offre muséale individuel mucem \n", "3 offre muséale individuel mucem \n", - "4 non défini mucem " + "4 non défini mucem \n", + "\n", + "[5 rows x 21 columns]" ] }, - "execution_count": 134, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1880,19 +1523,82 @@ }, { "cell_type": "code", - "execution_count": 136, + "execution_count": 24, "id": "98f78cd5-b694-4cc6-b033-20170aa13e8d", "metadata": {}, "outputs": [], "source": [ "# Fusion liée au product\n", - "df1_products_purchased = pd.merge(df1_ticket_information, products_global, left_on = 'product_id', right_on = 'id_products', how = 'inner')" + "df1_products_purchased = pd.merge(df1_ticket_information, products_global, left_on = 'product_id', right_on = 'id_products', how = 'inner')\n", + "\n", + "# Selection des variables d'intérêts\n", + "df1_products_purchased_reduced = df1_products_purchased[['ticket_id', 'customer_id', 'event_type_id', 'supplier_name', 'purchase_date', 'type_of_ticket_name', 'amount', 'children', 'is_full_price', 'name_event_types', 'name_facilities', 'name_categories', 'name_events', 'name_seasons']]" + ] + }, + { + "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": 137, - "id": "52db7bcb-3fb7-48e5-b612-4e22bdab4a94", + "execution_count": 25, + "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": 26, + "id": "24537647-bc29-4777-9848-ac4120a4aa60", + "metadata": {}, + "outputs": [], + "source": [ + "df1_campaigns_kpi = campaigns_kpi_function(campaigns_information = df1_campaigns_information) " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "6be2a9a6-056b-4e19-8c26-a18ba3df36b3", "metadata": {}, "outputs": [ { @@ -1916,260 +1622,68 @@ " \n", " \n", " \n", - " ticket_id\n", - " product_id\n", - " is_from_subscription\n", - " supplier_name\n", - " type_of_ticket_name\n", - " children\n", - " purchase_date\n", " customer_id\n", - " id_products\n", - " representation_id\n", - " pricing_formula_id\n", - " category_id\n", - " products_group_id\n", - " product_pack_id\n", - " event_id\n", - " id_representation_cap\n", - " season_id\n", - " facility_id\n", - " event_type_id\n", - " event_type_key_id\n", - " facility_key_id\n", - " street_id\n", - " amount\n", - " is_full_price\n", - " name_categories\n", - " name_events\n", - " name_seasons\n", - " name_event_types\n", - " name_facilities\n", + " nb_campaigns\n", + " nb_campaigns_opened\n", + " time_to_open\n", " \n", " \n", " \n", " \n", " 0\n", - " 13070859\n", - " 225251\n", - " False\n", - " vente en ligne\n", - " Atelier\n", - " pricing_formula\n", - " 2018-12-28 14:47:50+00:00\n", - " 48187\n", - " 225251\n", - " 113676\n", - " 28\n", - " 13\n", - " 224768\n", - " 1\n", - " 197\n", - " 172742\n", - " 16\n", - " 1\n", + " 2\n", " 4\n", - " 4\n", - " 1\n", - " 1\n", - " 8.0\n", - " False\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\n", - " spectacle vivant\n", - " mucem\n", + " 0.0\n", + " NaT\n", " \n", " \n", " 1\n", - " 13070855\n", - " 225251\n", - " False\n", - " vente en ligne\n", - " Atelier\n", - " pricing_formula\n", - " 2018-12-28 14:47:50+00:00\n", - " 48187\n", - " 225251\n", - " 113676\n", - " 28\n", - " 13\n", - " 224768\n", - " 1\n", - " 197\n", - " 172742\n", - " 16\n", - " 1\n", - " 4\n", - " 4\n", - " 1\n", - " 1\n", - " 8.0\n", - " False\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\n", - " spectacle vivant\n", - " mucem\n", + " 3\n", + " 222\n", + " 124.0\n", + " 1 days 00:28:30.169354838\n", " \n", " \n", " 2\n", - " 13070856\n", - " 225251\n", - " False\n", - " vente en ligne\n", - " Atelier\n", - " pricing_formula\n", - " 2018-12-28 14:47:50+00:00\n", - " 48187\n", - " 225251\n", - " 113676\n", - " 28\n", - " 13\n", - " 224768\n", - " 1\n", - " 197\n", - " 172742\n", - " 16\n", - " 1\n", " 4\n", - " 4\n", - " 1\n", - " 1\n", - " 8.0\n", - " False\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\n", - " spectacle vivant\n", - " mucem\n", + " 7\n", + " 7.0\n", + " 1 days 04:31:01.428571428\n", " \n", " \n", " 3\n", - " 13070857\n", - " 225251\n", - " False\n", - " vente en ligne\n", - " Atelier\n", - " pricing_formula\n", - " 2018-12-28 14:47:50+00:00\n", - " 48187\n", - " 225251\n", - " 113676\n", - " 28\n", - " 13\n", - " 224768\n", - " 1\n", - " 197\n", - " 172742\n", - " 16\n", - " 1\n", + " 5\n", " 4\n", - " 4\n", - " 1\n", - " 1\n", - " 8.0\n", - " False\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\n", - " spectacle vivant\n", - " mucem\n", + " 0.0\n", + " NaT\n", " \n", " \n", " 4\n", - " 13070858\n", - " 225251\n", - " False\n", - " vente en ligne\n", - " Atelier\n", - " pricing_formula\n", - " 2018-12-28 14:47:50+00:00\n", - " 48187\n", - " 225251\n", - " 113676\n", - " 28\n", - " 13\n", - " 224768\n", - " 1\n", - " 197\n", - " 172742\n", - " 16\n", - " 1\n", - " 4\n", - " 4\n", - " 1\n", - " 1\n", - " 8.0\n", - " False\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\n", - " spectacle vivant\n", - " mucem\n", + " 6\n", + " 20\n", + " 0.0\n", + " NaT\n", " \n", " \n", "\n", "" ], "text/plain": [ - " ticket_id product_id is_from_subscription supplier_name \\\n", - "0 13070859 225251 False vente en ligne \n", - "1 13070855 225251 False vente en ligne \n", - "2 13070856 225251 False vente en ligne \n", - "3 13070857 225251 False vente en ligne \n", - "4 13070858 225251 False vente en ligne \n", - "\n", - " type_of_ticket_name children purchase_date customer_id \\\n", - "0 Atelier pricing_formula 2018-12-28 14:47:50+00:00 48187 \n", - "1 Atelier pricing_formula 2018-12-28 14:47:50+00:00 48187 \n", - "2 Atelier pricing_formula 2018-12-28 14:47:50+00:00 48187 \n", - "3 Atelier pricing_formula 2018-12-28 14:47:50+00:00 48187 \n", - "4 Atelier pricing_formula 2018-12-28 14:47:50+00:00 48187 \n", - "\n", - " id_products representation_id pricing_formula_id category_id \\\n", - "0 225251 113676 28 13 \n", - "1 225251 113676 28 13 \n", - "2 225251 113676 28 13 \n", - "3 225251 113676 28 13 \n", - "4 225251 113676 28 13 \n", - "\n", - " products_group_id product_pack_id event_id id_representation_cap \\\n", - "0 224768 1 197 172742 \n", - "1 224768 1 197 172742 \n", - "2 224768 1 197 172742 \n", - "3 224768 1 197 172742 \n", - "4 224768 1 197 172742 \n", - "\n", - " season_id facility_id event_type_id event_type_key_id facility_key_id \\\n", - "0 16 1 4 4 1 \n", - "1 16 1 4 4 1 \n", - "2 16 1 4 4 1 \n", - "3 16 1 4 4 1 \n", - "4 16 1 4 4 1 \n", - "\n", - " street_id amount is_full_price name_categories name_events \\\n", - "0 1 8.0 False indiv prog enfant l'école des magiciens \n", - "1 1 8.0 False indiv prog enfant l'école des magiciens \n", - "2 1 8.0 False indiv prog enfant l'école des magiciens \n", - "3 1 8.0 False indiv prog enfant l'école des magiciens \n", - "4 1 8.0 False indiv prog enfant l'école des magiciens \n", - "\n", - " name_seasons name_event_types name_facilities \n", - "0 2018 spectacle vivant mucem \n", - "1 2018 spectacle vivant mucem \n", - "2 2018 spectacle vivant mucem \n", - "3 2018 spectacle vivant mucem \n", - "4 2018 spectacle vivant mucem " + " 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": 137, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df1_products_purchased.head()" + "df1_campaigns_kpi.head()" ] }, { @@ -2177,41 +1691,12 @@ "id": "d4dcfbe0-c6ce-497e-b75e-dc9e938801b2", "metadata": {}, "source": [ - "### KPI tickets" + "## KPI tickets" ] }, { "cell_type": "code", - "execution_count": 138, - "id": "665a5925-9c0e-425a-8f11-c33a0a9ec444", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['ticket_id', 'product_id', 'is_from_subscription', 'supplier_name',\n", - " 'type_of_ticket_name', 'children', 'purchase_date', 'customer_id',\n", - " 'id_products', 'representation_id', 'pricing_formula_id', 'category_id',\n", - " 'products_group_id', 'product_pack_id', 'event_id',\n", - " 'id_representation_cap', 'season_id', 'facility_id', 'event_type_id',\n", - " 'event_type_key_id', 'facility_key_id', 'street_id', 'amount',\n", - " 'is_full_price', 'name_categories', 'name_events', 'name_seasons',\n", - " 'name_event_types', 'name_facilities'],\n", - " dtype='object')" - ] - }, - "execution_count": 138, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1_products_purchased.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 139, + "execution_count": 28, "id": "b913a69e-3146-4919-b5f6-a6108532bffa", "metadata": {}, "outputs": [ @@ -2222,29 +1707,110 @@ " 'offre muséale groupe'], dtype=object)" ] }, - "execution_count": 139, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df1_products_purchased['name_event_types'].unique()" + "df1_products_purchased_reduced['name_event_types'].unique()" ] }, { "cell_type": "code", - "execution_count": 140, - "id": "e01e8cf9-1187-4a4b-993d-b7b4321cd8f0", + "execution_count": 29, + "id": "2bda0b97-b28b-4070-a57d-aeab0e2f7dfe", "metadata": {}, "outputs": [], "source": [ - "df1_products_purchased_reduced = df1_products_purchased[['ticket_id', 'customer_id', 'product_id', 'event_type_id', 'supplier_name', 'purchase_date', 'type_of_ticket_name', 'amount', 'children', 'is_full_price', 'name_event_types', 'name_facilities', 'name_categories', 'name_events', 'name_seasons']]" + "# Nombre de client assistant à plus de 2 type d'événement\n", + "nb_event_types = df1_products_purchased_reduced[['customer_id', 'name_event_types']].groupby('customer_id').nunique()" ] }, { "cell_type": "code", - "execution_count": 141, - "id": "3d8b0875-b409-44ce-b688-d9d6758782d3", + "execution_count": 30, + "id": "043303fe-e90f-4689-a2a9-5d690555a045", + "metadata": {}, + "outputs": [], + "source": [ + "def tickets_kpi_function(tickets_information = None):\n", + "\n", + " tickets_information_copy = tickets_information.copy()\n", + "\n", + " # Dummy : Canal de vente en ligne\n", + " liste_mots = ['en ligne', 'internet', 'web', 'net', 'vad', 'online'] # vad = vente à distance\n", + " 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', '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", + " .agg({'ticket_id': 'count', \n", + " 'amount' : 'sum',\n", + " 'supplier_name': 'nunique',\n", + " 'vente_internet' : 'max',\n", + " 'purchase_date' : ['min', 'max']})\n", + " .reset_index()\n", + " )\n", + " \n", + " tickets_kpi.columns = tickets_kpi.columns.map('_'.join)\n", + " \n", + " 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',\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', 'event_type_id'], how = 'left')\n", + " tickets_kpi['nb_tickets_internet'] = tickets_kpi['nb_tickets_internet'].fillna(0)\n", + " \n", + " return tickets_kpi\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "5882234a-1ed5-4269-87a6-0d75613476e3", + "metadata": {}, + "outputs": [], + "source": [ + "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": 32, + "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, index = False)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", "metadata": {}, "outputs": [ { @@ -2268,161 +1834,123 @@ " \n", " \n", " \n", - " ticket_id\n", " customer_id\n", - " product_id\n", " event_type_id\n", - " supplier_name\n", - " purchase_date\n", - " type_of_ticket_name\n", - " amount\n", - " children\n", - " is_full_price\n", - " name_event_types\n", - " name_facilities\n", - " name_categories\n", - " name_events\n", - " name_seasons\n", + " nb_tickets\n", + " total_amount\n", + " nb_suppliers\n", + " vente_internet_max\n", + " purchase_date_min\n", + " purchase_date_max\n", + " time_between_purchase\n", + " nb_tickets_internet\n", " \n", " \n", " \n", " \n", - " 0\n", - " 13070859\n", - " 48187\n", - " 225251\n", - " 4\n", - " vente en ligne\n", - " 2018-12-28 14:47:50+00:00\n", - " Atelier\n", - " 8.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\n", - " \n", - " \n", " 1\n", - " 13070855\n", - " 48187\n", - " 225251\n", + " 1\n", " 4\n", - " vente en ligne\n", - " 2018-12-28 14:47:50+00:00\n", - " Atelier\n", - " 8.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\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", - " 2\n", - " 13070856\n", - " 48187\n", - " 225251\n", - " 4\n", - " vente en ligne\n", - " 2018-12-28 14:47:50+00:00\n", - " Atelier\n", - " 8.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\n", + " 0\n", + " 1\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", - " 13070857\n", - " 48187\n", - " 225251\n", - " 4\n", - " vente en ligne\n", - " 2018-12-28 14:47:50+00:00\n", - " Atelier\n", - " 8.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\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", - " 4\n", - " 13070858\n", - " 48187\n", - " 225251\n", - " 4\n", - " vente en ligne\n", - " 2018-12-28 14:47:50+00:00\n", - " Atelier\n", - " 8.0\n", - " pricing_formula\n", - " False\n", - " spectacle vivant\n", - " mucem\n", - " indiv prog enfant\n", - " l'école des magiciens\n", - " 2018\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", + " 9.0\n", + " \n", + " \n", + " 5032\n", + " 6733\n", + " 6\n", + " 14208\n", + " 0.0\n", + " 3\n", + " 1\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": [ - " ticket_id customer_id product_id event_type_id supplier_name \\\n", - "0 13070859 48187 225251 4 vente en ligne \n", - "1 13070855 48187 225251 4 vente en ligne \n", - "2 13070856 48187 225251 4 vente en ligne \n", - "3 13070857 48187 225251 4 vente en ligne \n", - "4 13070858 48187 225251 4 vente en ligne \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", - " 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", + " 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", - " 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_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 " + " 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": 141, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Importance des suppliers\n", - "df1_products_purchased_reduced.head()" + "df1_tickets_kpi.sort_values(by='nb_tickets', ascending=False).head(5)" ] }, { "cell_type": "markdown", - "id": "9354b283-9e00-4aa9-a017-d7dd11fdf745", + "id": "f1d7f7ba-361b-467d-b375-b09c149185f7", "metadata": {}, "source": [ "## Alexis' work" @@ -2430,8 +1958,8 @@ }, { "cell_type": "code", - "execution_count": 142, - "id": "cfbeaf0b-64ea-4abf-b785-57e43e651108", + "execution_count": 34, + "id": "4ab1c0d2-0097-4669-b984-b6822c976740", "metadata": {}, "outputs": [ { @@ -2492,7 +2020,7 @@ "3 6 6.439463" ] }, - "execution_count": 142, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2507,8 +2035,8 @@ }, { "cell_type": "code", - "execution_count": 143, - "id": "0805e41f-bb43-46a2-ac65-1a379936b3d8", + "execution_count": 35, + "id": "a9c62b39-389e-4dac-89a6-ac8a59fea58a", "metadata": {}, "outputs": [ { @@ -2587,7 +2115,7 @@ "4 2 2 143 6.150659" ] }, - "execution_count": 143, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -2600,1123 +2128,10 @@ "nb_tickets.head()" ] }, - { - "cell_type": "code", - "execution_count": 144, - "id": "28fd3b8c-0caf-4d4e-9c39-9c1cd2bab126", - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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_idbirthdatestreet_idis_partnergenderis_email_trueopt_instructure_idprofessionlanguagemcp_contact_idlast_buying_datemax_priceticket_sumaverage_pricefidelityaverage_purchase_delayaverage_price_basketaverage_ticket_baskettotal_pricepurchase_countfirst_buying_datecountryagetenant_idnb_campaignsnb_campaigns_openedtime_to_open
012751NaN2False1TrueTrueNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTfrNaN1311NaNNaNNaT
112825NaN2False2TrueTrueNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTfrNaN1311NaNNaNNaT
211261NaN2False1TrueTrueNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTfrNaN1311NaNNaNNaT
313071NaN2False2TrueTrueNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTfrNaN1311NaNNaNNaT
4653061NaN10False2TrueFalseNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTNaNNaN131180.02.00 days 19:53:02.500000
\n", - "
" - ], - "text/plain": [ - " customer_id birthdate street_id is_partner gender is_email_true \\\n", - "0 12751 NaN 2 False 1 True \n", - "1 12825 NaN 2 False 2 True \n", - "2 11261 NaN 2 False 1 True \n", - "3 13071 NaN 2 False 2 True \n", - "4 653061 NaN 10 False 2 True \n", - "\n", - " opt_in structure_id profession language mcp_contact_id last_buying_date \\\n", - "0 True NaN NaN NaN NaN NaN \n", - "1 True NaN NaN NaN NaN NaN \n", - "2 True NaN NaN NaN NaN NaN \n", - "3 True NaN NaN NaN NaN NaN \n", - "4 False NaN NaN NaN NaN NaN \n", - "\n", - " max_price ticket_sum average_price fidelity average_purchase_delay \\\n", - "0 NaN 0 0.0 0 NaN \n", - "1 NaN 0 0.0 0 NaN \n", - "2 NaN 0 0.0 0 NaN \n", - "3 NaN 0 0.0 0 NaN \n", - "4 NaN 0 0.0 0 NaN \n", - "\n", - " average_price_basket average_ticket_basket total_price purchase_count \\\n", - "0 NaN NaN NaN 0 \n", - "1 NaN NaN NaN 0 \n", - "2 NaN NaN NaN 0 \n", - "3 NaN NaN NaN 0 \n", - "4 NaN NaN NaN 0 \n", - "\n", - " first_buying_date country age tenant_id nb_campaigns \\\n", - "0 NaT fr NaN 1311 NaN \n", - "1 NaT fr NaN 1311 NaN \n", - "2 NaT fr NaN 1311 NaN \n", - "3 NaT fr NaN 1311 NaN \n", - "4 NaT NaN NaN 1311 80.0 \n", - "\n", - " nb_campaigns_opened time_to_open \n", - "0 NaN NaT \n", - "1 NaN NaT \n", - "2 NaN NaT \n", - "3 NaN NaT \n", - "4 2.0 0 days 19:53:02.500000 " - ] - }, - "execution_count": 144, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Fusion avec KPI campaigns liés au customer\n", - "df1_customer = pd.merge(df1_customerplus_clean, df1_campaigns_kpi, on = 'customer_id', how = 'left')\n", - "df1_customer.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 146, - "id": "b438c563-e6c1-4b10-bedf-3b251f97018d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "shape : (156289, 31)\n" - ] - }, - { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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_idbirthdatestreet_idis_partnergenderis_email_trueopt_instructure_idprofessionlanguagemcp_contact_idlast_buying_datemax_priceticket_sumaverage_pricefidelityaverage_purchase_delayaverage_price_basketaverage_ticket_baskettotal_pricepurchase_countfirst_buying_datecountryagetenant_idnb_campaignsnb_campaigns_openedtime_to_openevent_type_idnb_ticketsavg_amount
012751NaN2False1TrueTrueNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTfrNaN1311NaNNaNNaTNaNNaNNaN
112825NaN2False2TrueTrueNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTfrNaN1311NaNNaNNaTNaNNaNNaN
211261NaN2False1TrueTrueNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTfrNaN1311NaNNaNNaTNaNNaNNaN
313071NaN2False2TrueTrueNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTfrNaN1311NaNNaNNaTNaNNaNNaN
4653061NaN10False2TrueFalseNaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0NaTNaNNaN131180.02.00 days 19:53:02.500000NaNNaNNaN
\n", - "
" - ], - "text/plain": [ - " customer_id birthdate street_id is_partner gender is_email_true \\\n", - "0 12751 NaN 2 False 1 True \n", - "1 12825 NaN 2 False 2 True \n", - "2 11261 NaN 2 False 1 True \n", - "3 13071 NaN 2 False 2 True \n", - "4 653061 NaN 10 False 2 True \n", - "\n", - " opt_in structure_id profession language mcp_contact_id last_buying_date \\\n", - "0 True NaN NaN NaN NaN NaN \n", - "1 True NaN NaN NaN NaN NaN \n", - "2 True NaN NaN NaN NaN NaN \n", - "3 True NaN NaN NaN NaN NaN \n", - "4 False NaN NaN NaN NaN NaN \n", - "\n", - " max_price ticket_sum average_price fidelity average_purchase_delay \\\n", - "0 NaN 0 0.0 0 NaN \n", - "1 NaN 0 0.0 0 NaN \n", - "2 NaN 0 0.0 0 NaN \n", - "3 NaN 0 0.0 0 NaN \n", - "4 NaN 0 0.0 0 NaN \n", - "\n", - " average_price_basket average_ticket_basket total_price purchase_count \\\n", - "0 NaN NaN NaN 0 \n", - "1 NaN NaN NaN 0 \n", - "2 NaN NaN NaN 0 \n", - "3 NaN NaN NaN 0 \n", - "4 NaN NaN NaN 0 \n", - "\n", - " first_buying_date country age tenant_id nb_campaigns \\\n", - "0 NaT fr NaN 1311 NaN \n", - "1 NaT fr NaN 1311 NaN \n", - "2 NaT fr NaN 1311 NaN \n", - "3 NaT fr NaN 1311 NaN \n", - "4 NaT NaN NaN 1311 80.0 \n", - "\n", - " nb_campaigns_opened time_to_open event_type_id nb_tickets \\\n", - "0 NaN NaT NaN NaN \n", - "1 NaN NaT NaN NaN \n", - "2 NaN NaT NaN NaN \n", - "3 NaN NaT NaN NaN \n", - "4 2.0 0 days 19:53:02.500000 NaN NaN \n", - "\n", - " avg_amount \n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 NaN \n", - "4 NaN " - ] - }, - "execution_count": 146, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1_customer_product = pd.merge(df1_customer, nb_tickets, on = 'customer_id', how = 'left')\n", - "print(\"shape : \", df1_customer_product.shape)\n", - "df1_customer_product.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 147, - "id": "afcfe12d-f840-4886-a08b-13a69f022f4c", - "metadata": {}, - "outputs": [], - "source": [ - "df1_customer_product.to_csv(\"customer_product.csv\", index = False)" - ] - }, - { - "cell_type": "markdown", - "id": "8e763591-1802-4f5b-8285-1cf980de541a", - "metadata": {}, - "source": [ - "## End of Alexis' work" - ] - }, { "cell_type": "code", "execution_count": 36, - "id": "2bda0b97-b28b-4070-a57d-aeab0e2f7dfe", - "metadata": {}, - "outputs": [], - "source": [ - "# Nombre de client assistant à plus de 2 type d'événement\n", - "nb_event_types = df1_products_purchased_reduced[['customer_id', 'name_event_types']].groupby('customer_id').nunique()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "043303fe-e90f-4689-a2a9-5d690555a045", - "metadata": {}, - "outputs": [], - "source": [ - "def tickets_kpi_function(tickets_information = None):\n", - " tickets_information_copy = tickets_information.copy()\n", - " tickets_information_copy['purchase_date_max'] = tickets_information_copy['purchase_date']\n", - " tickets_kpi = (tickets_information_copy[['event_type_id', 'customer_id', 'ticket_id','supplier_name', 'purchase_date', 'purchase_date_max', 'amount']]\n", - " .groupby([ 'customer_id']) # 'event_type_id',\n", - " .agg({'ticket_id': 'count', \n", - " 'amount' : 'sum',\n", - " 'supplier_name': 'nunique',\n", - " 'purchase_date_max' : 'max',\n", - " 'purchase_date' : 'min'})\n", - " .reset_index()\n", - " )\n", - " \n", - " tickets_kpi.rename(columns = {'ticket_id' : 'nb_tickets', \n", - " 'amount' : 'total_amount',\n", - " 'supplier_name' : 'nb_suppliers', \n", - " 'purchase_date' : 'purchase_date_min'}, inplace = True)\n", - " \n", - " tickets_kpi['time_between_purchase'] = tickets_kpi['purchase_date_max'] - tickets_kpi['purchase_date_min']\n", - " \n", - " return tickets_kpi\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "5882234a-1ed5-4269-87a6-0d75613476e3", - "metadata": {}, - "outputs": [], - "source": [ - "df1_tickets_kpi = tickets_kpi_function(tickets_information = df1_products_purchased_reduced)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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_ticketstotal_amountnb_supplierspurchase_date_maxpurchase_date_mintime_between_purchase
0112565748830567.572023-11-08 15:59:45+00:002013-06-10 10:37:58+00:003803 days 05:21:47
36156733355271188.042023-11-03 09:42:40+00:002015-09-09 13:48:38+00:002976 days 19:54:02
39411626337642.062023-10-25 09:13:16+00:002014-01-23 16:56:57+00:003561 days 16:16:19
1112587138767.022023-11-04 13:46:59+00:002018-04-04 07:46:31+00:002040 days 06:00:28
3280963488585164350.012022-08-25 13:08:38+00:002020-08-18 08:32:57+00:00737 days 04:35:41
37086916548251489.522021-08-26 12:49:17+00:002018-03-26 11:13:43+00:001249 days 01:35:34
3261663194450713232.032022-09-07 12:55:33+00:002017-11-28 13:52:15+00:001743 days 23:03:18
7881356238746.012022-08-30 11:51:34+00:002017-01-05 13:04:58+00:002062 days 22:46:36
3529584002340319830.042023-11-06 15:59:22+00:002021-05-28 10:22:33+00:00892 days 05:36:49
33775618329431684.512022-02-24 07:47:20+00:002018-10-25 11:04:24+00:001217 days 20:42:56
300115925925914350.032023-06-12 14:05:19+00:002019-11-25 08:52:48+00:001295 days 05:12:31
349377487625712600.022023-10-02 08:13:05+00:002018-02-08 12:54:01+00:002061 days 19:19:04
270295257017678.562023-10-16 10:19:22+00:002014-01-24 15:16:17+00:003551 days 19:03:05
866122123209652.022022-09-19 12:55:15+00:002017-03-29 08:00:09+00:002000 days 04:55:06
1022142922493500.042023-11-06 08:30:37+00:002014-12-03 14:56:38+00:003259 days 17:33:59
39227249182713385.012021-10-26 12:28:40+00:002019-05-07 12:34:56+00:00902 days 23:53:44
544251070539180019800.012022-07-25 12:49:27+00:002022-05-02 16:09:03+00:0083 days 20:40:24
695201216801162312562.022023-09-29 16:34:38+00:002023-06-16 14:16:04+00:00105 days 02:18:34
300565933015510.012023-11-06 10:22:14+00:002018-02-02 08:53:51+00:002103 days 01:28:23
32435441154414133.022022-09-22 08:21:47+00:002017-12-14 12:50:23+00:001742 days 19:31:24
551951084435150016500.012022-09-27 14:32:13+00:002022-05-18 08:04:41+00:00132 days 06:27:32
289835781614850.022023-05-22 07:30:55+00:002019-01-21 14:19:18+00:001581 days 17:11:37
223129421307100.022023-06-29 09:33:58+00:002017-10-25 15:06:58+00:002072 days 18:27:00
232412660.022023-10-19 07:20:48+00:002015-09-30 16:07:52+00:002940 days 15:12:56
45139592121162.042023-10-17 09:39:40+00:002018-02-25 07:17:19+00:002060 days 02:22:21
2936505911866308.032023-05-22 13:41:22+00:002018-02-01 11:16:51+00:001936 days 02:24:31
114842510011230.012021-07-13 07:39:57+00:002015-12-21 15:38:05+00:002030 days 16:01:52
93413261098798.032023-02-01 08:39:45+00:002018-02-13 13:13:48+00:001813 days 19:25:57
301565949010880.012023-10-05 08:23:50+00:002019-12-06 12:59:20+00:001398 days 19:24:30
3647825126810860.022023-06-30 07:22:46+00:002018-02-02 09:06:22+00:001973 days 22:16:24
\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", - "\n", - " purchase_date_max purchase_date_min \\\n", - "0 2023-11-08 15:59:45+00:00 2013-06-10 10:37:58+00:00 \n", - "3615 2023-11-03 09:42:40+00:00 2015-09-09 13:48:38+00:00 \n", - "39 2023-10-25 09:13:16+00:00 2014-01-23 16:56:57+00:00 \n", - "11 2023-11-04 13:46:59+00:00 2018-04-04 07:46:31+00:00 \n", - "32809 2022-08-25 13:08:38+00:00 2020-08-18 08:32:57+00:00 \n", - "3708 2021-08-26 12:49:17+00:00 2018-03-26 11:13:43+00:00 \n", - "32616 2022-09-07 12:55:33+00:00 2017-11-28 13:52:15+00:00 \n", - "78 2022-08-30 11:51:34+00:00 2017-01-05 13:04:58+00:00 \n", - "35295 2023-11-06 15:59:22+00:00 2021-05-28 10:22:33+00:00 \n", - "3377 2022-02-24 07:47:20+00:00 2018-10-25 11:04:24+00:00 \n", - "30011 2023-06-12 14:05:19+00:00 2019-11-25 08:52:48+00:00 \n", - "34937 2023-10-02 08:13:05+00:00 2018-02-08 12:54:01+00:00 \n", - "270 2023-10-16 10:19:22+00:00 2014-01-24 15:16:17+00:00 \n", - "866 2022-09-19 12:55:15+00:00 2017-03-29 08:00:09+00:00 \n", - "1022 2023-11-06 08:30:37+00:00 2014-12-03 14:56:38+00:00 \n", - "3922 2021-10-26 12:28:40+00:00 2019-05-07 12:34:56+00:00 \n", - "54425 2022-07-25 12:49:27+00:00 2022-05-02 16:09:03+00:00 \n", - "69520 2023-09-29 16:34:38+00:00 2023-06-16 14:16:04+00:00 \n", - "30056 2023-11-06 10:22:14+00:00 2018-02-02 08:53:51+00:00 \n", - "3243 2022-09-22 08:21:47+00:00 2017-12-14 12:50:23+00:00 \n", - "55195 2022-09-27 14:32:13+00:00 2022-05-18 08:04:41+00:00 \n", - "28983 2023-05-22 07:30:55+00:00 2019-01-21 14:19:18+00:00 \n", - "2231 2023-06-29 09:33:58+00:00 2017-10-25 15:06:58+00:00 \n", - "23 2023-10-19 07:20:48+00:00 2015-09-30 16:07:52+00:00 \n", - "4513 2023-10-17 09:39:40+00:00 2018-02-25 07:17:19+00:00 \n", - "2936 2023-05-22 13:41:22+00:00 2018-02-01 11:16:51+00:00 \n", - "11484 2021-07-13 07:39:57+00:00 2015-12-21 15:38:05+00:00 \n", - "934 2023-02-01 08:39:45+00:00 2018-02-13 13:13:48+00:00 \n", - "30156 2023-10-05 08:23:50+00:00 2019-12-06 12:59:20+00:00 \n", - "36478 2023-06-30 07:22:46+00:00 2018-02-02 09:06:22+00:00 \n", - "\n", - " time_between_purchase \n", - "0 3803 days 05:21:47 \n", - "3615 2976 days 19:54:02 \n", - "39 3561 days 16:16:19 \n", - "11 2040 days 06:00:28 \n", - "32809 737 days 04:35:41 \n", - "3708 1249 days 01:35:34 \n", - "32616 1743 days 23:03:18 \n", - "78 2062 days 22:46:36 \n", - "35295 892 days 05:36:49 \n", - "3377 1217 days 20:42:56 \n", - "30011 1295 days 05:12:31 \n", - "34937 2061 days 19:19:04 \n", - "270 3551 days 19:03:05 \n", - "866 2000 days 04:55:06 \n", - "1022 3259 days 17:33:59 \n", - "3922 902 days 23:53:44 \n", - "54425 83 days 20:40:24 \n", - "69520 105 days 02:18:34 \n", - "30056 2103 days 01:28:23 \n", - "3243 1742 days 19:31:24 \n", - "55195 132 days 06:27:32 \n", - "28983 1581 days 17:11:37 \n", - "2231 2072 days 18:27:00 \n", - "23 2940 days 15:12:56 \n", - "4513 2060 days 02:22:21 \n", - "2936 1936 days 02:24:31 \n", - "11484 2030 days 16:01:52 \n", - "934 1813 days 19:25:57 \n", - "30156 1398 days 19:24:30 \n", - "36478 1973 days 22:16:24 " - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1_tickets_kpi.sort_values(by='nb_tickets', ascending=False).head(30)" - ] - }, - { - "cell_type": "markdown", - "id": "7c3211a5-a851-43bc-a1f0-b39d51857fb7", - "metadata": {}, - "source": [ - "# Fusion des bases locales" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "46de1912-4a66-46e5-8b9e-7768b2d2723b", - "metadata": {}, - "outputs": [], - "source": [ - "# Fusion avec KPI liés au customer\n", - "df1_customer = pd.merge(df1_customerplus_clean, df1_campaigns_kpi, on = 'customer_id', how = 'left')" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "9740d64a-e5eb-4967-a534-ca6177546465", + "id": "8710611c-7eb8-45ca-bdcc-009f4081f9e2", "metadata": {}, "outputs": [ { @@ -3921,21 +2336,30 @@ "[5 rows x 28 columns]" ] }, - "execution_count": 41, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "# Fusion avec KPI campaigns liés au customer\n", + "df1_customer = pd.merge(df1_customerplus_clean, df1_campaigns_kpi, on = 'customer_id', how = 'left')\n", "df1_customer.head()" ] }, { "cell_type": "code", - "execution_count": 42, - "id": "b5c4418c-ad2e-4bb9-bd5c-3b769e9c87d4", + "execution_count": 37, + "id": "a89fad43-ee68-4081-9384-3e9f08ec6a59", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shape : (156289, 31)\n" + ] + }, { "data": { "text/html": [ @@ -3967,17 +2391,7 @@ " structure_id\n", " profession\n", " language\n", - " mcp_contact_id\n", - " last_buying_date\n", - " max_price\n", - " ticket_sum\n", - " average_price\n", - " fidelity\n", - " average_purchase_delay\n", - " average_price_basket\n", - " average_ticket_basket\n", - " total_price\n", - " purchase_count\n", + " ...\n", " first_buying_date\n", " country\n", " age\n", @@ -3985,159 +2399,9 @@ " nb_campaigns\n", " nb_campaigns_opened\n", " time_to_open\n", - " \n", - " \n", - " \n", - " \n", - " 58201\n", - " 1\n", - " NaN\n", - " 2\n", - " False\n", - " 2\n", - " True\n", - " False\n", - " NaN\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 2023-11-08 03:20:07\n", - " 45.0\n", - " 1254775\n", - " 7.030122\n", - " 330831\n", - " -67.790969\n", - " 13.75153\n", - " 1.956087\n", - " 8821221.5\n", - " 641472\n", - " 2013-06-10 10:37:58+00:00\n", - " fr\n", - " NaN\n", - " 1311\n", - " NaN\n", - " NaN\n", - " NaT\n", - " \n", - " \n", - "\n", - "" - ], - "text/plain": [ - " customer_id birthdate street_id is_partner gender is_email_true \\\n", - "58201 1 NaN 2 False 2 True \n", - "\n", - " opt_in structure_id profession language mcp_contact_id \\\n", - "58201 False NaN NaN NaN NaN \n", - "\n", - " last_buying_date max_price ticket_sum average_price fidelity \\\n", - "58201 2023-11-08 03:20:07 45.0 1254775 7.030122 330831 \n", - "\n", - " average_purchase_delay average_price_basket average_ticket_basket \\\n", - "58201 -67.790969 13.75153 1.956087 \n", - "\n", - " total_price purchase_count first_buying_date country age \\\n", - "58201 8821221.5 641472 2013-06-10 10:37:58+00:00 fr NaN \n", - "\n", - " tenant_id nb_campaigns nb_campaigns_opened time_to_open \n", - "58201 1311 NaN NaN NaT " - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.set_option('display.max_columns', None)\n", - "\n", - "\n", - "df1_customer[df1_customer['customer_id'] == 1]" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "2b161dfb-1593-4f1e-870b-de24735e4968", - "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", - " \n", - " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -4153,17 +2417,7 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4174,31 +2428,6 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -4212,17 +2441,7 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4233,31 +2452,6 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -4271,17 +2465,7 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4292,31 +2476,6 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -4330,17 +2489,7 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4351,31 +2500,6 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", @@ -4389,17 +2513,7 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -4410,152 +2524,103 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \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_idbirthdatestreet_id_xis_partnergenderis_email_trueopt_instructure_idprofessionlanguagemcp_contact_idlast_buying_datemax_priceticket_sumaverage_pricefidelityaverage_purchase_delayaverage_price_basketaverage_ticket_baskettotal_pricepurchase_countfirst_buying_datecountryagetenant_idnb_campaignsnb_campaigns_openedtime_to_openticket_idproduct_idis_from_subscriptionsupplier_nametype_of_ticket_namechildrenpurchase_dateid_productsrepresentation_idpricing_formula_idcategory_idproducts_group_idproduct_pack_idevent_idid_representation_capseason_idfacility_idevent_type_idevent_type_key_idfacility_key_idstreet_id_yamountis_full_pricename_categoriesname_eventsname_seasonsname_event_typesname_facilitiesnb_ticketsavg_amount
NaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0...NaTfrNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1NaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0...NaTfrNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2NaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0...NaTfrNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
3NaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0...NaTfrNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
4NaNNaNNaNNaNNaNNaN00.00NaNNaNNaNNaN0...NaTNaNNaNNaNNaNNaNNaNNaNNaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "

5 rows × 31 columns

\n", "
" ], "text/plain": [ - " customer_id birthdate street_id_x is_partner gender is_email_true \\\n", - "0 12751 NaN 2 False 1 True \n", - "1 12825 NaN 2 False 2 True \n", - "2 11261 NaN 2 False 1 True \n", - "3 13071 NaN 2 False 2 True \n", - "4 653061 NaN 10 False 2 True \n", + " customer_id birthdate street_id is_partner gender is_email_true \\\n", + "0 12751 NaN 2 False 1 True \n", + "1 12825 NaN 2 False 2 True \n", + "2 11261 NaN 2 False 1 True \n", + "3 13071 NaN 2 False 2 True \n", + "4 653061 NaN 10 False 2 True \n", "\n", - " opt_in structure_id profession language mcp_contact_id last_buying_date \\\n", - "0 True NaN NaN NaN NaN NaN \n", - "1 True NaN NaN NaN NaN NaN \n", - "2 True NaN NaN NaN NaN NaN \n", - "3 True NaN NaN NaN NaN NaN \n", - "4 False NaN NaN NaN NaN NaN \n", + " opt_in structure_id profession language ... first_buying_date country \\\n", + "0 True NaN NaN NaN ... NaT fr \n", + "1 True NaN NaN NaN ... NaT fr \n", + "2 True NaN NaN NaN ... NaT fr \n", + "3 True NaN NaN NaN ... NaT fr \n", + "4 False NaN NaN NaN ... NaT NaN \n", "\n", - " max_price ticket_sum average_price fidelity average_purchase_delay \\\n", - "0 NaN 0 0.0 0 NaN \n", - "1 NaN 0 0.0 0 NaN \n", - "2 NaN 0 0.0 0 NaN \n", - "3 NaN 0 0.0 0 NaN \n", - "4 NaN 0 0.0 0 NaN \n", + " age tenant_id nb_campaigns nb_campaigns_opened time_to_open \\\n", + "0 NaN 1311 NaN NaN NaT \n", + "1 NaN 1311 NaN NaN NaT \n", + "2 NaN 1311 NaN NaN NaT \n", + "3 NaN 1311 NaN NaN NaT \n", + "4 NaN 1311 80.0 2.0 0 days 19:53:02.500000 \n", "\n", - " average_price_basket average_ticket_basket total_price purchase_count \\\n", - "0 NaN NaN NaN 0 \n", - "1 NaN NaN NaN 0 \n", - "2 NaN NaN NaN 0 \n", - "3 NaN NaN NaN 0 \n", - "4 NaN NaN NaN 0 \n", + " event_type_id nb_tickets avg_amount \n", + "0 NaN NaN NaN \n", + "1 NaN NaN NaN \n", + "2 NaN NaN NaN \n", + "3 NaN NaN NaN \n", + "4 NaN NaN NaN \n", "\n", - " first_buying_date country age tenant_id nb_campaigns \\\n", - "0 NaT fr NaN 1311 NaN \n", - "1 NaT fr NaN 1311 NaN \n", - "2 NaT fr NaN 1311 NaN \n", - "3 NaT fr NaN 1311 NaN \n", - "4 NaT NaN NaN 1311 80.0 \n", - "\n", - " nb_campaigns_opened time_to_open ticket_id product_id \\\n", - "0 NaN NaT NaN NaN \n", - "1 NaN NaT NaN NaN \n", - "2 NaN NaT NaN NaN \n", - "3 NaN NaT NaN NaN \n", - "4 2.0 0 days 19:53:02.500000 NaN NaN \n", - "\n", - " is_from_subscription supplier_name type_of_ticket_name children \\\n", - "0 NaN NaN NaN NaN \n", - "1 NaN NaN NaN NaN \n", - "2 NaN NaN NaN NaN \n", - "3 NaN NaN NaN NaN \n", - "4 NaN NaN NaN NaN \n", - "\n", - " purchase_date id_products representation_id pricing_formula_id \\\n", - "0 NaT NaN NaN NaN \n", - "1 NaT NaN NaN NaN \n", - "2 NaT NaN NaN NaN \n", - "3 NaT NaN NaN NaN \n", - "4 NaT NaN NaN NaN \n", - "\n", - " category_id products_group_id product_pack_id event_id \\\n", - "0 NaN NaN NaN NaN \n", - "1 NaN NaN NaN NaN \n", - "2 NaN NaN NaN NaN \n", - "3 NaN NaN NaN NaN \n", - "4 NaN NaN NaN NaN \n", - "\n", - " id_representation_cap season_id facility_id event_type_id \\\n", - "0 NaN NaN NaN NaN \n", - "1 NaN NaN NaN NaN \n", - "2 NaN NaN NaN NaN \n", - "3 NaN NaN NaN NaN \n", - "4 NaN NaN NaN NaN \n", - "\n", - " event_type_key_id facility_key_id street_id_y amount is_full_price \\\n", - "0 NaN NaN NaN NaN NaN \n", - "1 NaN NaN NaN NaN NaN \n", - "2 NaN NaN NaN NaN NaN \n", - "3 NaN NaN NaN NaN NaN \n", - "4 NaN NaN NaN NaN NaN \n", - "\n", - " name_categories name_events name_seasons name_event_types name_facilities \n", - "0 NaN NaN NaN NaN NaN \n", - "1 NaN NaN NaN NaN NaN \n", - "2 NaN NaN NaN NaN NaN \n", - "3 NaN NaN NaN NaN NaN \n", - "4 NaN NaN NaN NaN NaN " + "[5 rows x 31 columns]" ] }, - "execution_count": 43, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Fusion avec KPI liés au comportement d'achat,\n", - "df1_customer_product = pd.merge(df1_customer, df1_products_purchased, on = 'customer_id', how = 'left')\n", + "df1_customer_product = pd.merge(df1_customer, nb_tickets, on = 'customer_id', how = 'left')\n", + "print(\"shape : \", df1_customer_product.shape)\n", "df1_customer_product.head()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, + "id": "a19fec00-4ece-400c-937c-ce5cd8daccfd", + "metadata": {}, + "outputs": [], + "source": [ + "# df1_customer_product.to_csv(\"customer_product.csv\", index = False)" + ] + }, + { + "cell_type": "markdown", + "id": "7c3211a5-a851-43bc-a1f0-b39d51857fb7", + "metadata": {}, + "source": [ + "# Fusion des bases locales" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "46de1912-4a66-46e5-8b9e-7768b2d2723b", + "metadata": {}, + "outputs": [], + "source": [ + "# Fusion avec KPI liés au customer\n", + "df1_customer = pd.merge(df1_customerplus_clean, df1_campaigns_kpi, on = 'customer_id', how = 'left')" + ] + }, + { + "cell_type": "code", + "execution_count": 40, "id": "1e42a790-b215-4107-a969-85005da06ebd", "metadata": {}, "outputs": [], "source": [ "# Fusion avec KPI liés au comportement d'achat\n", - "#df1_customer_product = pd.merge(df1_products_purchased_reduced, df1_products_purchased, on = 'customer_id', how = 'outer')" + "df1_customer_product = pd.merge(df1_tickets_kpi, df1_customer, on = 'customer_id', how = 'outer')" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 41, "id": "d950f24d-a5d1-4f1e-aeaa-ca826470365f", "metadata": {}, "outputs": [], "source": [ - "#df1_customer_product.head()" + "# df1_customer_product" ] } ], diff --git a/1_Descriptive_Statistics.ipynb b/1_Descriptive_Statistics.ipynb new file mode 100644 index 0000000..113fd77 --- /dev/null +++ b/1_Descriptive_Statistics.ipynb @@ -0,0 +1,543 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3f41343f-7205-41d9-89dd-88039e301413", + "metadata": {}, + "source": [ + "# Statistiques descriptives" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "abfaf341-7b35-4407-9133-d21336c04027", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import os\n", + "import s3fs\n", + "import re\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7fb72fa3-7940-496f-ac78-c2837f65eefa", + "metadata": {}, + "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})" + ] + }, + { + "cell_type": "markdown", + "id": "45d5261f-4d46-49cb-8582-dd2121122b05", + "metadata": {}, + "source": [ + "# 1 - Comportement d'achat" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9376af51-4320-44b6-8f30-1e1234371556", + "metadata": {}, + "outputs": [], + "source": [ + "# Chargement des données temporaires\n", + "BUCKET = \"projet-bdc2324-team1\"\n", + "FILE_KEY_S3 = \"0_Temp/Company 1 - Purchasing behaviour.csv\"\n", + "FILE_PATH_S3 = BUCKET + \"/\" + FILE_KEY_S3\n", + "\n", + "with fs.open(FILE_PATH_S3, mode=\"rb\") as file_in:\n", + " tickets_kpi = pd.read_csv(file_in, sep=\",\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1855dcca-cfce-4c54-90ae-55d9a1ab5d45", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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_idevent_type_idnb_ticketstotal_amountnb_suppliersvente_internet_maxpurchase_date_minpurchase_date_maxtime_between_purchasenb_tickets_internet
0123842262686540.5712014-12-03 14:55:37+00:002023-11-04 15:12:16+00:003258 days 00:16:3951.0
1144532423248965.5612013-09-23 14:45:01+00:002023-11-03 14:11:01+00:003692 days 23:26:002988.0
2152017501459190.0612013-06-10 10:37:58+00:002023-11-08 15:59:45+00:003803 days 05:21:479.0
3162173561435871.5512017-01-01 02:20:08+00:002019-12-31 02:20:06+00:001093 days 23:59:585.0
4221430.0102018-04-07 12:55:07+00:002020-03-08 12:06:43+00:00700 days 23:11:360.0
\n", + "
" + ], + "text/plain": [ + " customer_id event_type_id nb_tickets total_amount nb_suppliers \\\n", + "0 1 2 384226 2686540.5 7 \n", + "1 1 4 453242 3248965.5 6 \n", + "2 1 5 201750 1459190.0 6 \n", + "3 1 6 217356 1435871.5 5 \n", + "4 2 2 143 0.0 1 \n", + "\n", + " vente_internet_max purchase_date_min purchase_date_max \\\n", + "0 1 2014-12-03 14:55:37+00:00 2023-11-04 15:12:16+00:00 \n", + "1 1 2013-09-23 14:45:01+00:00 2023-11-03 14:11:01+00:00 \n", + "2 1 2013-06-10 10:37:58+00:00 2023-11-08 15:59:45+00:00 \n", + "3 1 2017-01-01 02:20:08+00:00 2019-12-31 02:20:06+00:00 \n", + "4 0 2018-04-07 12:55:07+00:00 2020-03-08 12:06:43+00:00 \n", + "\n", + " time_between_purchase nb_tickets_internet \n", + "0 3258 days 00:16:39 51.0 \n", + "1 3692 days 23:26:00 2988.0 \n", + "2 3803 days 05:21:47 9.0 \n", + "3 1093 days 23:59:58 5.0 \n", + "4 700 days 23:11:36 0.0 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tickets_kpi.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0e5d3b2e-1a75-4d46-80e6-c306e9f8de84", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['customer_id', 'event_type_id', 'nb_tickets', 'total_amount',\n", + " 'nb_suppliers', 'vente_internet_max', 'purchase_date_min',\n", + " 'purchase_date_max', 'time_between_purchase', 'nb_tickets_internet'],\n", + " dtype='object')" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tickets_kpi.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "7667e8eb-9a1e-4216-96f4-bf987c6e30b5", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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_idevent_type_idnb_ticketstotal_amountnb_suppliersvente_internet_maxpurchase_date_minpurchase_date_maxtime_between_purchasenb_tickets_internet
1144532423248965.5612013-09-23 14:45:01+00:002023-11-03 14:11:01+00:003692 days 23:26:002988.0
0123842262686540.5712014-12-03 14:55:37+00:002023-11-04 15:12:16+00:003258 days 00:16:3951.0
3162173561435871.5512017-01-01 02:20:08+00:002019-12-31 02:20:06+00:001093 days 23:59:585.0
2152017501459190.0612013-06-10 10:37:58+00:002023-11-08 15:59:45+00:003803 days 05:21:479.0
503267336142080.0312017-01-11 15:00:54+00:002019-11-27 09:47:06+00:001049 days 18:46:1213497.0
50296733211656471.0312015-09-09 13:48:38+00:002022-07-07 07:37:12+00:002492 days 17:48:349815.0
50306733474400.0212021-01-06 10:05:01+00:002022-09-08 14:39:40+00:00610 days 04:34:397419.0
60416658312546.5412017-01-02 11:23:53+00:002019-12-30 10:36:55+00:001091 days 23:13:026391.0
57412651422423.0612014-01-23 16:56:57+00:002023-03-06 13:55:23+00:003328 days 20:58:265321.0
36376634884575063250.0112021-06-04 12:20:39+00:002022-08-25 13:08:38+00:00447 days 00:47:595750.0
\n", + "
" + ], + "text/plain": [ + " 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", + "5029 6733 2 11656 471.0 3 \n", + "5030 6733 4 7440 0.0 2 \n", + "60 41 6 6583 12546.5 4 \n", + "57 41 2 6514 22423.0 6 \n", + "36376 63488 4 5750 63250.0 1 \n", + "\n", + " vente_internet_max purchase_date_min \\\n", + "1 1 2013-09-23 14:45:01+00:00 \n", + "0 1 2014-12-03 14:55:37+00:00 \n", + "3 1 2017-01-01 02:20:08+00:00 \n", + "2 1 2013-06-10 10:37:58+00:00 \n", + "5032 1 2017-01-11 15:00:54+00:00 \n", + "5029 1 2015-09-09 13:48:38+00:00 \n", + "5030 1 2021-01-06 10:05:01+00:00 \n", + "60 1 2017-01-02 11:23:53+00:00 \n", + "57 1 2014-01-23 16:56:57+00:00 \n", + "36376 1 2021-06-04 12:20:39+00:00 \n", + "\n", + " purchase_date_max time_between_purchase nb_tickets_internet \n", + "1 2023-11-03 14:11:01+00:00 3692 days 23:26:00 2988.0 \n", + "0 2023-11-04 15:12:16+00:00 3258 days 00:16:39 51.0 \n", + "3 2019-12-31 02:20:06+00:00 1093 days 23:59:58 5.0 \n", + "2 2023-11-08 15:59:45+00:00 3803 days 05:21:47 9.0 \n", + "5032 2019-11-27 09:47:06+00:00 1049 days 18:46:12 13497.0 \n", + "5029 2022-07-07 07:37:12+00:00 2492 days 17:48:34 9815.0 \n", + "5030 2022-09-08 14:39:40+00:00 610 days 04:34:39 7419.0 \n", + "60 2019-12-30 10:36:55+00:00 1091 days 23:13:02 6391.0 \n", + "57 2023-03-06 13:55:23+00:00 3328 days 20:58:26 5321.0 \n", + "36376 2022-08-25 13:08:38+00:00 447 days 00:47:59 5750.0 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Présence d'outlier\n", + "tickets_kpi.sort_values(by = ['nb_tickets'], axis = 0, ascending = False).head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9b2e27f2-703d-465b-a0f9-76e996de617c", + "metadata": {}, + "outputs": [], + "source": [ + "# Part du CA par customer\n", + "total_amount_share = tickets_kpi.groupby('customer_id')['total_amount'].sum().reset_index()\n", + "total_amount_share['total_amount_entreprise'] = total_amount_share['total_amount'].sum()\n", + "total_amount_share['share_total_amount'] = total_amount_share['total_amount']/total_amount_share['total_amount_entreprise']\n", + "\n", + "total_amount_share_index = total_amount_share.set_index('customer_id')\n", + "df_circulaire = total_amount_share_index['total_amount'].sort_values(axis = 0, ascending = False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "36141803-8865-4210-bd39-0a980301fd0c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Costumer 1 vs others customers\n", + "coupure = 1\n", + "\n", + "top = df_circulaire[:coupure]\n", + "rest = df_circulaire[coupure:]\n", + "\n", + "# Calculez la somme du reste\n", + "rest_sum = rest.sum()\n", + "\n", + "# Créez une nouvelle série avec les cinq plus grandes parts et 'Autre'\n", + "new_series = pd.concat([top, pd.Series([rest_sum], index=['Autre'])])\n", + "\n", + "# Créez le graphique circulaire\n", + "plt.figure(figsize=(3, 3))\n", + "plt.pie(new_series, labels=new_series.index, autopct='%1.1f%%', startangle=140, pctdistance=0.5)\n", + "plt.axis('equal') # Assurez-vous que le graphique est un cercle\n", + "plt.title('Répartition des montants totaux')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "94cf1a25-9ded-48f2-b1b2-75225bdaf49d", + "metadata": {}, + "outputs": [], + "source": [ + "tickets_kpi_filtered = tickets_kpi[tickets_kpi['customer_id'] != 1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31e4e6f1-efc4-410d-b1d3-bb49950ef58e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Exploration_billet_AJ.ipynb b/Exploration_billet_AJ.ipynb index 344dd7b..bec456e 100644 --- a/Exploration_billet_AJ.ipynb +++ b/Exploration_billet_AJ.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "56b3d44e-1e3f-4726-9916-0f9af107860e", + "id": "5bf5c226", "metadata": {}, "source": [ "# Business Data Challenge - Team 1" @@ -11,7 +11,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "15103481-8d74-404c-aa09-7601fe7730da", + "id": "b1a5b9d3", "metadata": {}, "outputs": [], "source": [ @@ -24,7 +24,7 @@ }, { "cell_type": "markdown", - "id": "c3bb0d13-34b2-4e1c-9985-468cd87c5a0e", + "id": "ecfa2219", "metadata": {}, "source": [ "Configuration de l'accès aux données" @@ -33,7 +33,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "5d83bb1a-d341-446e-91f6-1c428607f6d4", + "id": "1a094277", "metadata": {}, "outputs": [], "source": [ @@ -44,7 +44,7 @@ }, { "cell_type": "markdown", - "id": "f99da24f-0d93-4618-92bc-3ba81dc0445c", + "id": "c437eaec", "metadata": {}, "source": [ "# Exemple sur Company 1" @@ -52,7 +52,7 @@ }, { "cell_type": "markdown", - "id": "9d74b68f-ba07-4a15-9a27-dae931762d70", + "id": "a1c1fc39", "metadata": {}, "source": [ "## Chargement données" @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": 3, - "id": "699664b9-eee4-4f8d-a207-e524526560c5", + "id": "66f8c17b", "metadata": {}, "outputs": [], "source": [ @@ -69,68 +69,12 @@ "liste_database = fs.ls(BUCKET)" ] }, - { - "cell_type": "code", - "execution_count": 4, - "id": "aaf64d60-bf92-470c-8210-d09abd6a653e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['bdc2324-data/1/1campaign_stats.csv',\n", - " 'bdc2324-data/1/1campaigns.csv',\n", - " 'bdc2324-data/1/1categories.csv',\n", - " 'bdc2324-data/1/1countries.csv',\n", - " 'bdc2324-data/1/1currencies.csv',\n", - " 'bdc2324-data/1/1customer_target_mappings.csv',\n", - " 'bdc2324-data/1/1customersplus.csv',\n", - " 'bdc2324-data/1/1event_types.csv',\n", - " 'bdc2324-data/1/1events.csv',\n", - " 'bdc2324-data/1/1facilities.csv',\n", - " 'bdc2324-data/1/1link_stats.csv',\n", - " 'bdc2324-data/1/1pricing_formulas.csv',\n", - " 'bdc2324-data/1/1product_packs.csv',\n", - " 'bdc2324-data/1/1products.csv',\n", - " 'bdc2324-data/1/1products_groups.csv',\n", - " 'bdc2324-data/1/1purchases.csv',\n", - " 'bdc2324-data/1/1representation_category_capacities.csv',\n", - " 'bdc2324-data/1/1representations.csv',\n", - " 'bdc2324-data/1/1seasons.csv',\n", - " 'bdc2324-data/1/1structure_tag_mappings.csv',\n", - " 'bdc2324-data/1/1suppliers.csv',\n", - " 'bdc2324-data/1/1tags.csv',\n", - " 'bdc2324-data/1/1target_types.csv',\n", - " 'bdc2324-data/1/1targets.csv',\n", - " 'bdc2324-data/1/1tickets.csv',\n", - " 'bdc2324-data/1/1type_of_categories.csv',\n", - " 'bdc2324-data/1/1type_of_pricing_formulas.csv',\n", - " 'bdc2324-data/1/1type_ofs.csv']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "liste_database" - ] - }, { "cell_type": "code", "execution_count": 5, - "id": "0cb92854-903b-4efd-ac1b-197e29f044b4", + "id": "c08e6798", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['bdc2324-data/1/1purchases.csv', 'bdc2324-data/1/1suppliers.csv', 'bdc2324-data/1/1tickets.csv', 'bdc2324-data/1/1type_ofs.csv']\n" - ] - } - ], + "outputs": [], "source": [ "liste_database_select = ['suppliers', 'ticket', 'purchase', 'consumption', 'type_ofs']\n", "\n", @@ -144,15 +88,20 @@ { "cell_type": "code", "execution_count": 6, - "id": "dd6a3518-b752-4a1e-b77b-9e03e853c3ed", + "id": "675f518d", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ + "<<<<<<< local \n", + "/tmp/ipykernel_445/4081512283.py:10: DtypeWarning: Columns (1) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " df = pd.read_csv(file_in)\n", + "=======\n", "/tmp/ipykernel_15285/4081512283.py:10: DtypeWarning: Columns (1) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " df = pd.read_csv(file_in)\n" + " df = pd.read_csv(file_in)\n", + ">>>>>>> remote \n" ] } ], @@ -174,8 +123,10 @@ }, { "cell_type": "markdown", - "id": "f01e4530-1a61-49cb-a6b0-aa188cf1c0e0", - "metadata": {}, + "id": "e855f403", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## customersplus.csv" ] @@ -183,52 +134,9 @@ { "cell_type": "code", "execution_count": 22, - "id": "a01f993a-0f9f-4aed-bd23-bcdec9041bb3", + "id": "91a8f8c4", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 151866 entries, 0 to 151865\n", - "Data columns (total 29 columns):\n", - " # Column Non-Null Count Dtype \n", - "--- ------ -------------- ----- \n", - " 0 id 151866 non-null int64 \n", - " 1 birthdate 5437 non-null object \n", - " 2 street_id 151866 non-null int64 \n", - " 3 civility 0 non-null float64\n", - " 4 is_partner 151866 non-null bool \n", - " 5 deleted_at 0 non-null float64\n", - " 6 gender 151866 non-null int64 \n", - " 7 is_email_true 151866 non-null bool \n", - " 8 opt_in 151866 non-null bool \n", - " 9 structure_id 18114 non-null float64\n", - " 10 note 906 non-null object \n", - " 11 profession 6206 non-null object \n", - " 12 language 1092 non-null object \n", - " 13 mcp_contact_id 98901 non-null float64\n", - " 14 last_buying_date 73422 non-null object \n", - " 15 max_price 73422 non-null float64\n", - " 16 ticket_sum 151866 non-null int64 \n", - " 17 average_price 138746 non-null float64\n", - " 18 fidelity 151866 non-null int64 \n", - " 19 average_purchase_delay 73422 non-null float64\n", - " 20 average_price_basket 73422 non-null float64\n", - " 21 average_ticket_basket 73422 non-null float64\n", - " 22 total_price 86542 non-null float64\n", - " 23 purchase_count 151866 non-null int64 \n", - " 24 first_buying_date 73422 non-null object \n", - " 25 last_visiting_date 0 non-null float64\n", - " 26 country 143575 non-null object \n", - " 27 age 5437 non-null float64\n", - " 28 tenant_id 151866 non-null int64 \n", - "dtypes: bool(3), float64(12), int64(7), object(7)\n", - "memory usage: 30.6+ MB\n" - ] - } - ], + "outputs": [], "source": [ "a = pd.DataFrame(df1_customersplus.info())" ] @@ -236,7 +144,7 @@ { "cell_type": "code", "execution_count": 31, - "id": "45e82fc0-ba17-497b-9818-8be2bdc49d22", + "id": "2fda171d", "metadata": {}, "outputs": [], "source": [ @@ -265,7 +173,7 @@ { "cell_type": "code", "execution_count": 35, - "id": "d237be96-8c86-4a91-b7a1-487e87a16c3d", + "id": "205eeeab", "metadata": {}, "outputs": [], "source": [ @@ -290,7 +198,7 @@ { "cell_type": "code", "execution_count": 32, - "id": "4bcdb081-c34f-4d51-b93f-abbb6fa49c5e", + "id": "634282c5", "metadata": {}, "outputs": [], "source": [ @@ -300,350 +208,9 @@ { "cell_type": "code", "execution_count": 33, - "id": "319c814f-0956-4a92-9c0a-c6b9f53b04b5", + "id": "0e8d4133", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Nom_colonneType_colonneTaux_NA
0idint640.000000
1lastnameobject43.461341
2firstnameobject44.995588
3birthdateobject96.419870
4emailobject8.622075
5street_idint640.000000
6created_atobject0.000000
7updated_atobject0.000000
8civilityfloat64100.000000
9is_partnerbool0.000000
10extrafloat64100.000000
11deleted_atfloat64100.000000
12referencefloat64100.000000
13genderint640.000000
14is_email_truebool0.000000
15extra_fieldfloat64100.000000
16identifierobject0.000000
17opt_inbool0.000000
18structure_idfloat6488.072380
19noteobject99.403421
20professionobject95.913503
21languageobject99.280945
22mcp_contact_idfloat6434.876141
23need_reloadbool0.000000
24last_buying_dateobject51.653431
25max_pricefloat6451.653431
26ticket_sumint640.000000
27average_pricefloat648.639195
28fidelityint640.000000
29average_purchase_delayfloat6451.653431
30average_price_basketfloat6451.653431
31average_ticket_basketfloat6451.653431
32total_pricefloat6443.014236
33preferred_categoryfloat64100.000000
34preferred_supplierfloat64100.000000
35preferred_formulafloat64100.000000
36purchase_countint640.000000
37first_buying_dateobject51.653431
38last_visiting_datefloat64100.000000
39zipcodeobject71.176564
40countryobject5.459418
41agefloat6496.419870
42tenant_idint640.000000
\n", - "
" - ], - "text/plain": [ - " Nom_colonne Type_colonne Taux_NA\n", - "0 id int64 0.000000\n", - "1 lastname object 43.461341\n", - "2 firstname object 44.995588\n", - "3 birthdate object 96.419870\n", - "4 email object 8.622075\n", - "5 street_id int64 0.000000\n", - "6 created_at object 0.000000\n", - "7 updated_at object 0.000000\n", - "8 civility float64 100.000000\n", - "9 is_partner bool 0.000000\n", - "10 extra float64 100.000000\n", - "11 deleted_at float64 100.000000\n", - "12 reference float64 100.000000\n", - "13 gender int64 0.000000\n", - "14 is_email_true bool 0.000000\n", - "15 extra_field float64 100.000000\n", - "16 identifier object 0.000000\n", - "17 opt_in bool 0.000000\n", - "18 structure_id float64 88.072380\n", - "19 note object 99.403421\n", - "20 profession object 95.913503\n", - "21 language object 99.280945\n", - "22 mcp_contact_id float64 34.876141\n", - "23 need_reload bool 0.000000\n", - "24 last_buying_date object 51.653431\n", - "25 max_price float64 51.653431\n", - "26 ticket_sum int64 0.000000\n", - "27 average_price float64 8.639195\n", - "28 fidelity int64 0.000000\n", - "29 average_purchase_delay float64 51.653431\n", - "30 average_price_basket float64 51.653431\n", - "31 average_ticket_basket float64 51.653431\n", - "32 total_price float64 43.014236\n", - "33 preferred_category float64 100.000000\n", - "34 preferred_supplier float64 100.000000\n", - "35 preferred_formula float64 100.000000\n", - "36 purchase_count int64 0.000000\n", - "37 first_buying_date object 51.653431\n", - "38 last_visiting_date float64 100.000000\n", - "39 zipcode object 71.176564\n", - "40 country object 5.459418\n", - "41 age float64 96.419870\n", - "42 tenant_id int64 0.000000" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "a" ] @@ -651,7 +218,7 @@ { "cell_type": "code", "execution_count": 16, - "id": "e54a1170-2b10-4b22-8241-e7f5ec3fce75", + "id": "1268ad5a", "metadata": {}, "outputs": [], "source": [ @@ -661,216 +228,9 @@ { "cell_type": "code", "execution_count": 40, - "id": "5c997ff6-251b-4e7f-8946-a8b722f5e97f", + "id": "bd41dc80", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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_idbirthdatestreet_idis_partnergenderis_email_trueopt_instructure_idnoteprofession...fidelityaverage_purchase_delayaverage_price_basketaverage_ticket_baskettotal_pricepurchase_countfirst_buying_datecountryagetenant_id
012751NaN2False1TrueTrueNaNNaNNaN...0NaNNaNNaNNaN0NaTfrNaN1311
112825NaN2False2TrueTrueNaNNaNNaN...0NaNNaNNaNNaN0NaTfrNaN1311
211261NaN2False1TrueTrueNaNNaNNaN...0NaNNaNNaNNaN0NaTfrNaN1311
313071NaN2False2TrueTrueNaNNaNNaN...0NaNNaNNaNNaN0NaTfrNaN1311
4653061NaN10False2TrueFalseNaNNaNNaN...0NaNNaNNaNNaN0NaTNaNNaN1311
\n", - "

5 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " customer_id birthdate street_id is_partner gender is_email_true \\\n", - "0 12751 NaN 2 False 1 True \n", - "1 12825 NaN 2 False 2 True \n", - "2 11261 NaN 2 False 1 True \n", - "3 13071 NaN 2 False 2 True \n", - "4 653061 NaN 10 False 2 True \n", - "\n", - " opt_in structure_id note profession ... fidelity average_purchase_delay \\\n", - "0 True NaN NaN NaN ... 0 NaN \n", - "1 True NaN NaN NaN ... 0 NaN \n", - "2 True NaN NaN NaN ... 0 NaN \n", - "3 True NaN NaN NaN ... 0 NaN \n", - "4 False NaN NaN NaN ... 0 NaN \n", - "\n", - " average_price_basket average_ticket_basket total_price purchase_count \\\n", - "0 NaN NaN NaN 0 \n", - "1 NaN NaN NaN 0 \n", - "2 NaN NaN NaN 0 \n", - "3 NaN NaN NaN 0 \n", - "4 NaN NaN NaN 0 \n", - "\n", - " first_buying_date country age tenant_id \n", - "0 NaT fr NaN 1311 \n", - "1 NaT fr NaN 1311 \n", - "2 NaT fr NaN 1311 \n", - "3 NaT fr NaN 1311 \n", - "4 NaT NaN NaN 1311 \n", - "\n", - "[5 rows x 26 columns]" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Selection des variables\n", "df1_customersplus_clean = df1_customersplus.copy()\n", @@ -885,7 +245,7 @@ }, { "cell_type": "markdown", - "id": "e908f516-2a74-45d6-8492-7dcdc3afbe1f", + "id": "64d0f76b", "metadata": { "jp-MarkdownHeadingCollapsed": true }, @@ -896,264 +256,9 @@ { "cell_type": "code", "execution_count": 6, - "id": "14f4158e-c9c0-4beb-826a-5e0f949434a4", + "id": "7e683711", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnumbercreated_atupdated_atpurchase_idproduct_idis_from_subscriptiontype_ofsupplier_idbarcodeidentifier
013070859135930026612882021-12-28 20:47:10.320641+01:002022-02-14 18:46:53.614229+01:005107462225251False13NaNb6ad7fc36f33b5e05f58c7fca06688a6
113070860135930026613992021-12-28 20:47:10.321037+01:002022-02-14 18:46:53.614761+01:005107462224914False13NaNb0903af480266f27802fe5c38c277c9e
213070861135930026614192021-12-28 20:47:10.321629+01:002022-02-14 18:46:53.615521+01:005107462224914False13NaN64ca12b7e26a65b90335c0702ea0faba
313070862135930026615082021-12-28 20:47:10.322029+01:002022-02-14 18:46:53.616000+01:005107462224914False13NaN5ac2f8150aa9f3a6b1599df08cc2f0c7
413070863135930026616892021-12-28 20:47:10.322449+01:002022-02-14 18:46:53.616447+01:005107462224914False13NaNdfe30081bae020d12094279926136b9c
....................................
182666720662815135930161543902023-11-09 07:51:34.935983+01:002023-11-09 07:51:34.935983+01:008007697405689False13NaNdba9aa428f843b79ae69dfacfe8fc579
182666820662816135930161545012023-11-09 07:51:34.937038+01:002023-11-09 07:51:34.937038+01:008007698403658False13NaN93f1fcfc6ba4fa68f92eb4b4a619fcf0
182666920662817135930161546802023-11-09 07:51:34.938224+01:002023-11-09 07:51:34.938224+01:008007698403658False13NaNc8bbbd25df2c158767ceef42c3237f23
182667020662818135930161548992023-11-09 07:51:34.939328+01:002023-11-09 07:51:34.939328+01:008007699403658False13NaN738f0a8b5088b5056bc3b32eff2dca1f
182667120662819135930161549882023-11-09 07:51:34.940680+01:002023-11-09 07:51:34.940680+01:008007699403658False13NaN4c5a6195434377380b4e6ae63b2e9cf6
\n", - "

1826672 rows × 11 columns

\n", - "
" - ], - "text/plain": [ - " id number created_at \\\n", - "0 13070859 13593002661288 2021-12-28 20:47:10.320641+01:00 \n", - "1 13070860 13593002661399 2021-12-28 20:47:10.321037+01:00 \n", - "2 13070861 13593002661419 2021-12-28 20:47:10.321629+01:00 \n", - "3 13070862 13593002661508 2021-12-28 20:47:10.322029+01:00 \n", - "4 13070863 13593002661689 2021-12-28 20:47:10.322449+01:00 \n", - "... ... ... ... \n", - "1826667 20662815 13593016154390 2023-11-09 07:51:34.935983+01:00 \n", - "1826668 20662816 13593016154501 2023-11-09 07:51:34.937038+01:00 \n", - "1826669 20662817 13593016154680 2023-11-09 07:51:34.938224+01:00 \n", - "1826670 20662818 13593016154899 2023-11-09 07:51:34.939328+01:00 \n", - "1826671 20662819 13593016154988 2023-11-09 07:51:34.940680+01:00 \n", - "\n", - " updated_at purchase_id product_id \\\n", - "0 2022-02-14 18:46:53.614229+01:00 5107462 225251 \n", - "1 2022-02-14 18:46:53.614761+01:00 5107462 224914 \n", - "2 2022-02-14 18:46:53.615521+01:00 5107462 224914 \n", - "3 2022-02-14 18:46:53.616000+01:00 5107462 224914 \n", - "4 2022-02-14 18:46:53.616447+01:00 5107462 224914 \n", - "... ... ... ... \n", - "1826667 2023-11-09 07:51:34.935983+01:00 8007697 405689 \n", - "1826668 2023-11-09 07:51:34.937038+01:00 8007698 403658 \n", - "1826669 2023-11-09 07:51:34.938224+01:00 8007698 403658 \n", - "1826670 2023-11-09 07:51:34.939328+01:00 8007699 403658 \n", - "1826671 2023-11-09 07:51:34.940680+01:00 8007699 403658 \n", - "\n", - " is_from_subscription type_of supplier_id barcode \\\n", - "0 False 1 3 NaN \n", - "1 False 1 3 NaN \n", - "2 False 1 3 NaN \n", - "3 False 1 3 NaN \n", - "4 False 1 3 NaN \n", - "... ... ... ... ... \n", - "1826667 False 1 3 NaN \n", - "1826668 False 1 3 NaN \n", - "1826669 False 1 3 NaN \n", - "1826670 False 1 3 NaN \n", - "1826671 False 1 3 NaN \n", - "\n", - " identifier \n", - "0 b6ad7fc36f33b5e05f58c7fca06688a6 \n", - "1 b0903af480266f27802fe5c38c277c9e \n", - "2 64ca12b7e26a65b90335c0702ea0faba \n", - "3 5ac2f8150aa9f3a6b1599df08cc2f0c7 \n", - "4 dfe30081bae020d12094279926136b9c \n", - "... ... \n", - "1826667 dba9aa428f843b79ae69dfacfe8fc579 \n", - "1826668 93f1fcfc6ba4fa68f92eb4b4a619fcf0 \n", - "1826669 c8bbbd25df2c158767ceef42c3237f23 \n", - "1826670 738f0a8b5088b5056bc3b32eff2dca1f \n", - "1826671 4c5a6195434377380b4e6ae63b2e9cf6 \n", - "\n", - "[1826672 rows x 11 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_tickets" ] @@ -1161,34 +266,9 @@ { "cell_type": "code", "execution_count": 7, - "id": "f3c35394-b586-4ae4-b5ab-b03bb01bb618", + "id": "e7b9a52e", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 1826672 entries, 0 to 1826671\n", - "Data columns (total 11 columns):\n", - " # Column Dtype \n", - "--- ------ ----- \n", - " 0 id int64 \n", - " 1 number object \n", - " 2 created_at object \n", - " 3 updated_at object \n", - " 4 purchase_id int64 \n", - " 5 product_id int64 \n", - " 6 is_from_subscription bool \n", - " 7 type_of int64 \n", - " 8 supplier_id int64 \n", - " 9 barcode float64\n", - " 10 identifier object \n", - "dtypes: bool(1), float64(1), int64(5), object(4)\n", - "memory usage: 141.1+ MB\n" - ] - } - ], + "outputs": [], "source": [ "df1_tickets.info()" ] @@ -1196,31 +276,9 @@ { "cell_type": "code", "execution_count": 8, - "id": "c1b42769-03c7-4785-92ce-5e1e6b41908d", + "id": "568280e8", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "id 0.0\n", - "number 0.0\n", - "created_at 0.0\n", - "updated_at 0.0\n", - "purchase_id 0.0\n", - "product_id 0.0\n", - "is_from_subscription 0.0\n", - "type_of 0.0\n", - "supplier_id 0.0\n", - "barcode 100.0\n", - "identifier 0.0\n", - "dtype: float64" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_tickets.isna().sum()/len(df1_tickets)*100" ] @@ -1228,21 +286,9 @@ { "cell_type": "code", "execution_count": 9, - "id": "42896791-2d93-4725-a50b-6c7cbe535ec7", + "id": "29ecec90", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_619/232847087.py:3: 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", - " df1_tickets_clean.rename(columns = {'id' : 'ticket_id'}, inplace = True)\n" - ] - } - ], + "outputs": [], "source": [ "# Selection des variables\n", "df1_tickets_clean = df1_tickets.drop(['lastname', 'firstname', 'email', 'created_at', 'updated_at', 'extra', 'reference', 'extra_field', 'identifier', 'need_reload', 'preferred_category', 'preferred_supplier', 'preferred_formula', 'zipcode'], axis = 1, inplace=True)\n", @@ -1251,8 +297,10 @@ }, { "cell_type": "markdown", - "id": "78453f3c-4f89-44ed-a6c6-2a7443b72b52", - "metadata": {}, + "id": "22bb5de4", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## suppliers.csv" ] @@ -1260,194 +308,9 @@ { "cell_type": "code", "execution_count": 10, - "id": "2e0dada0-9457-484c-aa55-77e44613ecca", + "id": "6a9a91f4", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnamemanually_addedlabelitrupdated_atcreated_atcommissionidentifier
01617j4 administrationFalseNaNNaN2021-07-29 09:21:37.325772+02:002021-07-29 09:21:37.325772+02:00NaN5958b2a060ac3e31678b438892a1bd2e
18non définiFalseNaNNaN2020-09-03 13:16:35.329062+02:002020-09-03 13:16:35.329062+02:00NaN52ff3466787b4d538407372e5f7afe0f
24vadFalseNaNNaN2020-09-03 13:11:23.896992+02:002020-09-03 13:11:23.896992+02:00NaN1225483c97b36018cab2bea14ab78ea6
31fort saint jeanFalseNaNNaN2020-09-03 13:11:23.833073+02:002020-09-03 13:11:23.833073+02:00NaN001b9b4a524fe407150b8235b304d4ec
42j4FalseNaNNaN2020-09-03 13:11:23.888993+02:002020-09-03 13:11:23.888993+02:00NaN6a0cf6edf20060344b465706b61719aa
55revendeurFalseNaNNaN2020-09-03 13:11:23.900987+02:002020-09-03 13:11:23.900987+02:00NaN931239d4acb6214d7e5c98edecfb4916
63vente en ligneFalseNaNNaN2020-09-03 13:11:23.893097+02:002020-09-03 13:11:23.893097+02:00NaNbde8f2ccff510df8572d3214d86b837d
76ccrFalseNaNNaN2020-09-03 13:11:23.904974+02:002020-09-03 13:11:23.904974+02:00NaNb48ec279411f7dbbb68393c61a9724d9
87dabFalseNaNNaN2020-09-03 13:11:23.908970+02:002020-09-03 13:11:23.908970+02:00NaN11c6d471fa4e354e62e684d293694202
\n", - "
" - ], - "text/plain": [ - " id name manually_added label itr \\\n", - "0 1617 j4 administration False NaN NaN \n", - "1 8 non défini False NaN NaN \n", - "2 4 vad False NaN NaN \n", - "3 1 fort saint jean False NaN NaN \n", - "4 2 j4 False NaN NaN \n", - "5 5 revendeur False NaN NaN \n", - "6 3 vente en ligne False NaN NaN \n", - "7 6 ccr False NaN NaN \n", - "8 7 dab False NaN NaN \n", - "\n", - " updated_at created_at \\\n", - "0 2021-07-29 09:21:37.325772+02:00 2021-07-29 09:21:37.325772+02:00 \n", - "1 2020-09-03 13:16:35.329062+02:00 2020-09-03 13:16:35.329062+02:00 \n", - "2 2020-09-03 13:11:23.896992+02:00 2020-09-03 13:11:23.896992+02:00 \n", - "3 2020-09-03 13:11:23.833073+02:00 2020-09-03 13:11:23.833073+02:00 \n", - "4 2020-09-03 13:11:23.888993+02:00 2020-09-03 13:11:23.888993+02:00 \n", - "5 2020-09-03 13:11:23.900987+02:00 2020-09-03 13:11:23.900987+02:00 \n", - "6 2020-09-03 13:11:23.893097+02:00 2020-09-03 13:11:23.893097+02:00 \n", - "7 2020-09-03 13:11:23.904974+02:00 2020-09-03 13:11:23.904974+02:00 \n", - "8 2020-09-03 13:11:23.908970+02:00 2020-09-03 13:11:23.908970+02:00 \n", - "\n", - " commission identifier \n", - "0 NaN 5958b2a060ac3e31678b438892a1bd2e \n", - "1 NaN 52ff3466787b4d538407372e5f7afe0f \n", - "2 NaN 1225483c97b36018cab2bea14ab78ea6 \n", - "3 NaN 001b9b4a524fe407150b8235b304d4ec \n", - "4 NaN 6a0cf6edf20060344b465706b61719aa \n", - "5 NaN 931239d4acb6214d7e5c98edecfb4916 \n", - "6 NaN bde8f2ccff510df8572d3214d86b837d \n", - "7 NaN b48ec279411f7dbbb68393c61a9724d9 \n", - "8 NaN 11c6d471fa4e354e62e684d293694202 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_suppliers" ] @@ -1455,32 +318,9 @@ { "cell_type": "code", "execution_count": 11, - "id": "b583be02-ab60-4e14-9325-0204f203a1af", + "id": "bab4758a", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 9 entries, 0 to 8\n", - "Data columns (total 9 columns):\n", - " # Column Non-Null Count Dtype \n", - "--- ------ -------------- ----- \n", - " 0 id 9 non-null int64 \n", - " 1 name 9 non-null object \n", - " 2 manually_added 9 non-null bool \n", - " 3 label 0 non-null float64\n", - " 4 itr 0 non-null float64\n", - " 5 updated_at 9 non-null object \n", - " 6 created_at 9 non-null object \n", - " 7 commission 0 non-null float64\n", - " 8 identifier 9 non-null object \n", - "dtypes: bool(1), float64(3), int64(1), object(4)\n", - "memory usage: 713.0+ bytes\n" - ] - } - ], + "outputs": [], "source": [ "df1_suppliers.info()" ] @@ -1488,29 +328,9 @@ { "cell_type": "code", "execution_count": 12, - "id": "6d7f338e-e4d3-422b-9cdc-dec967c0b28e", + "id": "b5fff251", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "id 0.0\n", - "name 0.0\n", - "manually_added 0.0\n", - "label 100.0\n", - "itr 100.0\n", - "updated_at 0.0\n", - "created_at 0.0\n", - "commission 100.0\n", - "identifier 0.0\n", - "dtype: float64" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_suppliers.isna().sum()/len(df1_suppliers)*100" ] @@ -1518,21 +338,9 @@ { "cell_type": "code", "execution_count": 13, - "id": "3c645ab7-16bf-4054-9ae2-15a8c32e29c6", + "id": "8b09e2a3", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_619/302783287.py:3: 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", - " df1_suppliers_clean.rename(columns = {'name' : 'supplier_name'}, inplace = True)\n" - ] - } - ], + "outputs": [], "source": [ "# Selection des variables\n", "df1_suppliers_clean = df1_suppliers[['id', 'name']]\n", @@ -1542,109 +350,16 @@ { "cell_type": "code", "execution_count": 14, - "id": "4de7e2e2-6da4-4618-8444-b524399c5493", + "id": "ecee7cdc", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idsupplier_name
01617j4 administration
18non défini
24vad
31fort saint jean
42j4
55revendeur
63vente en ligne
76ccr
87dab
\n", - "
" - ], - "text/plain": [ - " id supplier_name\n", - "0 1617 j4 administration\n", - "1 8 non défini\n", - "2 4 vad\n", - "3 1 fort saint jean\n", - "4 2 j4\n", - "5 5 revendeur\n", - "6 3 vente en ligne\n", - "7 6 ccr\n", - "8 7 dab" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_suppliers_clean" ] }, { "cell_type": "markdown", - "id": "0a6df975-c7fc-45bc-92af-a0bdab17d795", + "id": "c8e6e69b", "metadata": { "jp-MarkdownHeadingCollapsed": true }, @@ -1655,186 +370,9 @@ { "cell_type": "code", "execution_count": 15, - "id": "a02f6594-3e91-4e87-bbb6-649c28d4f7e9", + "id": "1a6cff1f", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnamechildrencreated_atupdated_atidentifier
01Atelierpricing_formula2021-01-05 11:55:51.188106+01:002021-01-05 11:55:51.188106+01:00623ec4067827558b28972cf39fe81ee7
12Billet en nombrepricing_formula2021-01-11 12:13:19.286301+01:002021-01-11 12:13:19.286301+01:00a53d313a97296ee37caa066dbfe7a45c
23Groupepricing_formula2021-01-11 12:19:22.842917+01:002021-01-11 12:19:22.842917+01:001ab143efc3b85acbbc752fe8eb2b0b86
34Revendeurpricing_formula2021-01-12 12:34:20.481236+01:002021-01-12 12:34:20.481236+01:008b332723366a07e1eef5f1c92f9ae067
45Cinéma scolairepricing_formula2021-01-25 19:16:05.141719+01:002021-01-25 19:16:05.141719+01:00a12e62cb4c4f47e7406bd8fbff2bfe30
56Musée famillepricing_formula2021-01-25 19:23:06.692627+01:002021-01-25 19:23:06.692627+01:001ec6c19283111ccb3ed67f52d414470e
67Spectacle famillepricing_formula2021-01-25 19:28:21.390016+01:002021-01-25 19:28:21.390016+01:0005e2104f1b74ced229c06847d6e91938
78Masterclasspricing_formula2021-01-25 19:31:05.076904+01:002021-01-25 19:31:05.076904+01:009cc946edfb25e11b4282f58db16e6ae9
89Spectaclepricing_formula2021-01-25 19:38:41.260535+01:002021-01-25 19:38:41.260535+01:00d88321c347f0e0ab101184cdf25c94bf
910Cinemapricing_formula2021-02-05 11:12:31.932576+01:002021-02-05 11:12:31.932576+01:000870fef2bfcd5b30a12e4f5c7f4aaba7
1011Museepricing_formula2021-02-05 11:52:05.468207+01:002021-02-05 11:52:05.468207+01:008ba8934454cc62c7cdb3eb6e1b39df0c
1112Tarifs pleincategory2023-03-13 11:31:50.528331+01:002023-03-13 11:31:50.528331+01:00a6969df76efc15d157be48e87a7bcf9a
\n", - "
" - ], - "text/plain": [ - " id name children created_at \\\n", - "0 1 Atelier pricing_formula 2021-01-05 11:55:51.188106+01:00 \n", - "1 2 Billet en nombre pricing_formula 2021-01-11 12:13:19.286301+01:00 \n", - "2 3 Groupe pricing_formula 2021-01-11 12:19:22.842917+01:00 \n", - "3 4 Revendeur pricing_formula 2021-01-12 12:34:20.481236+01:00 \n", - "4 5 Cinéma scolaire pricing_formula 2021-01-25 19:16:05.141719+01:00 \n", - "5 6 Musée famille pricing_formula 2021-01-25 19:23:06.692627+01:00 \n", - "6 7 Spectacle famille pricing_formula 2021-01-25 19:28:21.390016+01:00 \n", - "7 8 Masterclass pricing_formula 2021-01-25 19:31:05.076904+01:00 \n", - "8 9 Spectacle pricing_formula 2021-01-25 19:38:41.260535+01:00 \n", - "9 10 Cinema pricing_formula 2021-02-05 11:12:31.932576+01:00 \n", - "10 11 Musee pricing_formula 2021-02-05 11:52:05.468207+01:00 \n", - "11 12 Tarifs plein category 2023-03-13 11:31:50.528331+01:00 \n", - "\n", - " updated_at identifier \n", - "0 2021-01-05 11:55:51.188106+01:00 623ec4067827558b28972cf39fe81ee7 \n", - "1 2021-01-11 12:13:19.286301+01:00 a53d313a97296ee37caa066dbfe7a45c \n", - "2 2021-01-11 12:19:22.842917+01:00 1ab143efc3b85acbbc752fe8eb2b0b86 \n", - "3 2021-01-12 12:34:20.481236+01:00 8b332723366a07e1eef5f1c92f9ae067 \n", - "4 2021-01-25 19:16:05.141719+01:00 a12e62cb4c4f47e7406bd8fbff2bfe30 \n", - "5 2021-01-25 19:23:06.692627+01:00 1ec6c19283111ccb3ed67f52d414470e \n", - "6 2021-01-25 19:28:21.390016+01:00 05e2104f1b74ced229c06847d6e91938 \n", - "7 2021-01-25 19:31:05.076904+01:00 9cc946edfb25e11b4282f58db16e6ae9 \n", - "8 2021-01-25 19:38:41.260535+01:00 d88321c347f0e0ab101184cdf25c94bf \n", - "9 2021-02-05 11:12:31.932576+01:00 0870fef2bfcd5b30a12e4f5c7f4aaba7 \n", - "10 2021-02-05 11:52:05.468207+01:00 8ba8934454cc62c7cdb3eb6e1b39df0c \n", - "11 2023-03-13 11:31:50.528331+01:00 a6969df76efc15d157be48e87a7bcf9a " - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_type_ofs" ] @@ -1842,29 +380,9 @@ { "cell_type": "code", "execution_count": 16, - "id": "e9c8d32b-22f4-4581-8af7-31cc1c31fa0e", + "id": "93630b41", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 12 entries, 0 to 11\n", - "Data columns (total 6 columns):\n", - " # Column Non-Null Count Dtype \n", - "--- ------ -------------- ----- \n", - " 0 id 12 non-null int64 \n", - " 1 name 12 non-null object\n", - " 2 children 12 non-null object\n", - " 3 created_at 12 non-null object\n", - " 4 updated_at 12 non-null object\n", - " 5 identifier 12 non-null object\n", - "dtypes: int64(1), object(5)\n", - "memory usage: 704.0+ bytes\n" - ] - } - ], + "outputs": [], "source": [ "df1_type_ofs.info()" ] @@ -1872,21 +390,9 @@ { "cell_type": "code", "execution_count": 17, - "id": "cbb5e614-1fe5-4da0-bca0-8a242e0885da", + "id": "4f94481a", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_619/81842251.py:3: 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", - " df1_type_ofs_clean.rename(columns = {'name' : 'type_of_ticket_name'}, inplace = True)\n" - ] - } - ], + "outputs": [], "source": [ "# Selection des variables\n", "df1_type_ofs_clean = df1_type_ofs[['id', 'name', 'children']]\n", @@ -1895,7 +401,7 @@ }, { "cell_type": "markdown", - "id": "676a9869-9a8b-4cd2-8b1c-0644b5229c72", + "id": "1b2811e2", "metadata": { "jp-MarkdownHeadingCollapsed": true }, @@ -1906,205 +412,11 @@ { "cell_type": "code", "execution_count": 18, - "id": "f8d36b72-f8e7-45e5-b4fa-e0803493fd3c", + "id": "2455d2e1", "metadata": { "scrolled": true }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idpurchase_datecustomer_idcreated_atupdated_atnumberidentifier
051456622019-07-17 11:17:53+02:0066322021-12-28 20:48:51.569237+01:002021-12-28 20:48:51.569237+01:00fa80c83b29a268b45728c910a8afcf7982877c41df26f832eb823a83acd1a172
149416422018-10-31 11:59:00+01:0012021-12-28 20:31:48.196681+01:002022-03-03 17:52:21.958861+01:00597b6c06adfe6acc539b29b657b80da0e7102ebe65526c427245533ebabe66e5
250888602018-10-31 12:45:12+01:0012021-12-28 20:46:34.703542+01:002021-12-28 20:46:34.703542+01:004a7f6baaf9be6a99e3fead7f7e981fa8af75c4ae53d1b6957875538355b162e1
350888622018-10-31 13:07:12+01:0012021-12-28 20:46:34.704773+01:002021-12-28 20:46:34.704773+01:001d83dfad44b73070d1c6d5875d0edd2d4b2fe34659b177209b07270ae1043b40
450888632018-10-31 13:08:50+01:0012021-12-28 20:46:34.705453+01:002021-12-28 20:46:34.705453+01:007bfe2bc9c1670c973d0960e3fd408cf8b115f04a99b94df9e4a32185844f0998
........................
74224580076952023-11-08 17:51:19+01:0012561332023-11-09 07:51:33.920187+01:002023-11-09 07:51:33.920187+01:0099ad774dedbad43feb73514765d2f0bad68558180b4bf2e8a945724843655775
74224680076962023-11-08 18:17:51+01:0012561342023-11-09 07:51:33.921967+01:002023-11-09 07:51:33.921967+01:00c1511614c511c5f95980172690179102f5102d910a7731091f239ad7b0df35b4
74224780076972023-11-08 18:23:54+01:0012561352023-11-09 07:51:33.923034+01:002023-11-09 07:51:33.923034+01:0033b64b39cc53428b4f17d65ff5b93104e2b917626be60cc2c3207cc037fe69e4
74224880076982023-11-08 19:32:18+01:0012561362023-11-09 07:51:33.924135+01:002023-11-09 07:51:33.924135+01:009ae0b129e704b3d9c093ce9c7c4e50395bfa23236c31f8562c3a0233c1b53b31
74224980076992023-11-08 20:30:28+01:0012561372023-11-09 07:51:33.925382+01:002023-11-09 07:51:33.925382+01:00d31ced089c2b1f90479257a4686f9306d86b1e0de3ff01eaf04fbcd031ac5fef
\n", - "

742250 rows × 7 columns

\n", - "
" - ], - "text/plain": [ - " id purchase_date customer_id \\\n", - "0 5145662 2019-07-17 11:17:53+02:00 6632 \n", - "1 4941642 2018-10-31 11:59:00+01:00 1 \n", - "2 5088860 2018-10-31 12:45:12+01:00 1 \n", - "3 5088862 2018-10-31 13:07:12+01:00 1 \n", - "4 5088863 2018-10-31 13:08:50+01:00 1 \n", - "... ... ... ... \n", - "742245 8007695 2023-11-08 17:51:19+01:00 1256133 \n", - "742246 8007696 2023-11-08 18:17:51+01:00 1256134 \n", - "742247 8007697 2023-11-08 18:23:54+01:00 1256135 \n", - "742248 8007698 2023-11-08 19:32:18+01:00 1256136 \n", - "742249 8007699 2023-11-08 20:30:28+01:00 1256137 \n", - "\n", - " created_at updated_at \\\n", - "0 2021-12-28 20:48:51.569237+01:00 2021-12-28 20:48:51.569237+01:00 \n", - "1 2021-12-28 20:31:48.196681+01:00 2022-03-03 17:52:21.958861+01:00 \n", - "2 2021-12-28 20:46:34.703542+01:00 2021-12-28 20:46:34.703542+01:00 \n", - "3 2021-12-28 20:46:34.704773+01:00 2021-12-28 20:46:34.704773+01:00 \n", - "4 2021-12-28 20:46:34.705453+01:00 2021-12-28 20:46:34.705453+01:00 \n", - "... ... ... \n", - "742245 2023-11-09 07:51:33.920187+01:00 2023-11-09 07:51:33.920187+01:00 \n", - "742246 2023-11-09 07:51:33.921967+01:00 2023-11-09 07:51:33.921967+01:00 \n", - "742247 2023-11-09 07:51:33.923034+01:00 2023-11-09 07:51:33.923034+01:00 \n", - "742248 2023-11-09 07:51:33.924135+01:00 2023-11-09 07:51:33.924135+01:00 \n", - "742249 2023-11-09 07:51:33.925382+01:00 2023-11-09 07:51:33.925382+01:00 \n", - "\n", - " number identifier \n", - "0 fa80c83b29a268b45728c910a8afcf79 82877c41df26f832eb823a83acd1a172 \n", - "1 597b6c06adfe6acc539b29b657b80da0 e7102ebe65526c427245533ebabe66e5 \n", - "2 4a7f6baaf9be6a99e3fead7f7e981fa8 af75c4ae53d1b6957875538355b162e1 \n", - "3 1d83dfad44b73070d1c6d5875d0edd2d 4b2fe34659b177209b07270ae1043b40 \n", - "4 7bfe2bc9c1670c973d0960e3fd408cf8 b115f04a99b94df9e4a32185844f0998 \n", - "... ... ... \n", - "742245 99ad774dedbad43feb73514765d2f0ba d68558180b4bf2e8a945724843655775 \n", - "742246 c1511614c511c5f95980172690179102 f5102d910a7731091f239ad7b0df35b4 \n", - "742247 33b64b39cc53428b4f17d65ff5b93104 e2b917626be60cc2c3207cc037fe69e4 \n", - "742248 9ae0b129e704b3d9c093ce9c7c4e5039 5bfa23236c31f8562c3a0233c1b53b31 \n", - "742249 d31ced089c2b1f90479257a4686f9306 d86b1e0de3ff01eaf04fbcd031ac5fef \n", - "\n", - "[742250 rows x 7 columns]" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_purchases" ] @@ -2112,30 +424,9 @@ { "cell_type": "code", "execution_count": 19, - "id": "3f266a9d-6eee-4b27-b6cc-d401bc2fa0b8", + "id": "5f9a159d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 742250 entries, 0 to 742249\n", - "Data columns (total 7 columns):\n", - " # Column Non-Null Count Dtype \n", - "--- ------ -------------- ----- \n", - " 0 id 742250 non-null int64 \n", - " 1 purchase_date 742250 non-null object\n", - " 2 customer_id 742250 non-null int64 \n", - " 3 created_at 742250 non-null object\n", - " 4 updated_at 742250 non-null object\n", - " 5 number 742250 non-null object\n", - " 6 identifier 742250 non-null object\n", - "dtypes: int64(2), object(5)\n", - "memory usage: 39.6+ MB\n" - ] - } - ], + "outputs": [], "source": [ "df1_purchases.info()" ] @@ -2143,7 +434,7 @@ { "cell_type": "code", "execution_count": 20, - "id": "8b24ccbc-ccf0-4722-8cd9-8ee8aa90d1fd", + "id": "db201bf7", "metadata": {}, "outputs": [], "source": [ @@ -2155,30 +446,9 @@ { "cell_type": "code", "execution_count": 21, - "id": "27d18584-228f-4698-85d6-4d23151ea5ed", + "id": "bd436fca", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 742250 entries, 0 to 742249\n", - "Data columns (total 7 columns):\n", - " # Column Non-Null Count Dtype \n", - "--- ------ -------------- ----- \n", - " 0 id 742250 non-null int64 \n", - " 1 purchase_date 742250 non-null datetime64[ns, UTC]\n", - " 2 customer_id 742250 non-null int64 \n", - " 3 created_at 742250 non-null object \n", - " 4 updated_at 742250 non-null object \n", - " 5 number 742250 non-null object \n", - " 6 identifier 742250 non-null object \n", - "dtypes: datetime64[ns, UTC](1), int64(2), object(4)\n", - "memory usage: 39.6+ MB\n" - ] - } - ], + "outputs": [], "source": [ "df1_purchases.info()" ] @@ -2186,7 +456,7 @@ { "cell_type": "code", "execution_count": 22, - "id": "ea22e3a2-2b25-481d-8ebc-194e11a06cd9", + "id": "83435862", "metadata": {}, "outputs": [], "source": [ @@ -2196,8 +466,10 @@ }, { "cell_type": "markdown", - "id": "53227600-c1c5-48aa-9f5d-db5a23a8a22a", - "metadata": {}, + "id": "f210e730", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## Fusion de l'ensemble des données billétiques" ] @@ -2205,7 +477,7 @@ { "cell_type": "code", "execution_count": 23, - "id": "e0b8b47a-b321-4a79-823c-36a131a78ac7", + "id": "1f8b3aa7", "metadata": {}, "outputs": [], "source": [ @@ -2225,225 +497,21 @@ { "cell_type": "code", "execution_count": 24, - "id": "7572e6e7-f28d-43ba-b045-b9fa09e68e1d", + "id": "83a4d021", "metadata": { "scrolled": true }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ticket_idproduct_idis_from_subscriptionsupplier_nametype_of_ticket_namechildrenpurchase_datecustomer_id
013070859225251Falsevente en ligneAtelierpricing_formula2018-12-28 14:47:50+00:0048187
113070860224914Falsevente en ligneAtelierpricing_formula2018-12-28 14:47:50+00:0048187
213070861224914Falsevente en ligneAtelierpricing_formula2018-12-28 14:47:50+00:0048187
313070862224914Falsevente en ligneAtelierpricing_formula2018-12-28 14:47:50+00:0048187
413070863224914Falsevente en ligneAtelierpricing_formula2018-12-28 14:47:50+00:0048187
...........................
182666720662815405689Falsevente en ligneAtelierpricing_formula2023-11-08 17:23:54+00:001256135
182666820662816403658Falsevente en ligneAtelierpricing_formula2023-11-08 18:32:18+00:001256136
182666920662817403658Falsevente en ligneAtelierpricing_formula2023-11-08 18:32:18+00:001256136
182667020662818403658Falsevente en ligneAtelierpricing_formula2023-11-08 19:30:28+00:001256137
182667120662819403658Falsevente en ligneAtelierpricing_formula2023-11-08 19:30:28+00:001256137
\n", - "

1826672 rows × 8 columns

\n", - "
" - ], - "text/plain": [ - " ticket_id product_id is_from_subscription supplier_name \\\n", - "0 13070859 225251 False vente en ligne \n", - "1 13070860 224914 False vente en ligne \n", - "2 13070861 224914 False vente en ligne \n", - "3 13070862 224914 False vente en ligne \n", - "4 13070863 224914 False vente en ligne \n", - "... ... ... ... ... \n", - "1826667 20662815 405689 False vente en ligne \n", - "1826668 20662816 403658 False vente en ligne \n", - "1826669 20662817 403658 False vente en ligne \n", - "1826670 20662818 403658 False vente en ligne \n", - "1826671 20662819 403658 False vente en ligne \n", - "\n", - " type_of_ticket_name children purchase_date \\\n", - "0 Atelier pricing_formula 2018-12-28 14:47:50+00:00 \n", - "1 Atelier pricing_formula 2018-12-28 14:47:50+00:00 \n", - "2 Atelier pricing_formula 2018-12-28 14:47:50+00:00 \n", - "3 Atelier pricing_formula 2018-12-28 14:47:50+00:00 \n", - "4 Atelier pricing_formula 2018-12-28 14:47:50+00:00 \n", - "... ... ... ... \n", - "1826667 Atelier pricing_formula 2023-11-08 17:23:54+00:00 \n", - "1826668 Atelier pricing_formula 2023-11-08 18:32:18+00:00 \n", - "1826669 Atelier pricing_formula 2023-11-08 18:32:18+00:00 \n", - "1826670 Atelier pricing_formula 2023-11-08 19:30:28+00:00 \n", - "1826671 Atelier pricing_formula 2023-11-08 19:30:28+00:00 \n", - "\n", - " customer_id \n", - "0 48187 \n", - "1 48187 \n", - "2 48187 \n", - "3 48187 \n", - "4 48187 \n", - "... ... \n", - "1826667 1256135 \n", - "1826668 1256136 \n", - "1826669 1256136 \n", - "1826670 1256137 \n", - "1826671 1256137 \n", - "\n", - "[1826672 rows x 8 columns]" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_ticket_information" ] }, { "cell_type": "markdown", - "id": "ad2d0059-76d3-44b9-b0eb-0b0ca4d4ba75", - "metadata": {}, + "id": "56e6ebd1", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "# Utilisation de fonctions" ] @@ -2451,25 +519,9 @@ { "cell_type": "code", "execution_count": 51, - "id": "c1afe322-ff41-4760-819e-0195fed5b27d", + "id": "88fcde4b", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 20 entries, 0 to 19\n", - "Data columns (total 2 columns):\n", - " # Column Non-Null Count Dtype \n", - "--- ------ -------------- ----- \n", - " 0 opened_at 8 non-null object \n", - " 1 opened_at_clean 8 non-null datetime64[ns, UTC]\n", - "dtypes: datetime64[ns, UTC](1), object(1)\n", - "memory usage: 448.0+ bytes\n" - ] - } - ], + "outputs": [], "source": [ "# Créer un DataFrame exemple\n", "df_not_clean = df1_campaign_stats[['opened_at']].head(20)\n", @@ -2485,7 +537,7 @@ }, { "cell_type": "markdown", - "id": "27ecf058-23eb-4018-abbd-68c4ebe7c786", + "id": "818f69db", "metadata": {}, "source": [ "## Nettoyage, selection et fusion" @@ -2494,190 +546,9 @@ { "cell_type": "code", "execution_count": 23, - "id": "d887898c-6a21-41ed-901d-4d6fdbca5372", + "id": "c9654eda", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ticket_idproduct_idis_from_subscriptiontype_ofsupplier_namepurchase_datecustomer_id
013070859225251False1vente en ligne2018-12-28 14:47:50+00:0048187
113070860224914False1vente en ligne2018-12-28 14:47:50+00:0048187
213070861224914False1vente en ligne2018-12-28 14:47:50+00:0048187
313070862224914False1vente en ligne2018-12-28 14:47:50+00:0048187
413070863224914False1vente en ligne2018-12-28 14:47:50+00:0048187
........................
182666720662815405689False1vente en ligne2023-11-08 17:23:54+00:001256135
182666820662816403658False1vente en ligne2023-11-08 18:32:18+00:001256136
182666920662817403658False1vente en ligne2023-11-08 18:32:18+00:001256136
182667020662818403658False1vente en ligne2023-11-08 19:30:28+00:001256137
182667120662819403658False1vente en ligne2023-11-08 19:30:28+00:001256137
\n", - "

1826672 rows × 7 columns

\n", - "
" - ], - "text/plain": [ - " ticket_id product_id is_from_subscription type_of supplier_name \\\n", - "0 13070859 225251 False 1 vente en ligne \n", - "1 13070860 224914 False 1 vente en ligne \n", - "2 13070861 224914 False 1 vente en ligne \n", - "3 13070862 224914 False 1 vente en ligne \n", - "4 13070863 224914 False 1 vente en ligne \n", - "... ... ... ... ... ... \n", - "1826667 20662815 405689 False 1 vente en ligne \n", - "1826668 20662816 403658 False 1 vente en ligne \n", - "1826669 20662817 403658 False 1 vente en ligne \n", - "1826670 20662818 403658 False 1 vente en ligne \n", - "1826671 20662819 403658 False 1 vente en ligne \n", - "\n", - " purchase_date customer_id \n", - "0 2018-12-28 14:47:50+00:00 48187 \n", - "1 2018-12-28 14:47:50+00:00 48187 \n", - "2 2018-12-28 14:47:50+00:00 48187 \n", - "3 2018-12-28 14:47:50+00:00 48187 \n", - "4 2018-12-28 14:47:50+00:00 48187 \n", - "... ... ... \n", - "1826667 2023-11-08 17:23:54+00:00 1256135 \n", - "1826668 2023-11-08 18:32:18+00:00 1256136 \n", - "1826669 2023-11-08 18:32:18+00:00 1256136 \n", - "1826670 2023-11-08 19:30:28+00:00 1256137 \n", - "1826671 2023-11-08 19:30:28+00:00 1256137 \n", - "\n", - "[1826672 rows x 7 columns]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_ticket_information" ] @@ -2685,37 +556,16 @@ { "cell_type": "code", "execution_count": 14, - "id": "ac9a6373-c1c6-46b5-873b-dc22f17bcbdb", + "id": "7f2b620c", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 1826672 entries, 0 to 1826671\n", - "Data columns (total 7 columns):\n", - " # Column Dtype \n", - "--- ------ ----- \n", - " 0 ticket_id int64 \n", - " 1 product_id int64 \n", - " 2 is_from_subscription bool \n", - " 3 type_of int64 \n", - " 4 supplier_name object \n", - " 5 purchase_date datetime64[ns, UTC]\n", - " 6 customer_id int64 \n", - "dtypes: bool(1), datetime64[ns, UTC](1), int64(4), object(1)\n", - "memory usage: 85.4+ MB\n" - ] - } - ], + "outputs": [], "source": [ "df1_ticket_information.info()" ] }, { "cell_type": "markdown", - "id": "b1719943-89eb-4ba0-a107-2f96d5d01ec9", + "id": "637bdb72", "metadata": {}, "source": [ "# Customer information" @@ -2723,8 +573,10 @@ }, { "cell_type": "markdown", - "id": "a2132ee2-3f22-45fd-b65b-72689c8b672c", - "metadata": {}, + "id": "14c52894", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## Target area" ] @@ -2732,7 +584,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "da5d4708-7147-4cc8-8686-52d4bcba5a7a", + "id": "d83abfbf", "metadata": {}, "outputs": [ { @@ -2770,21 +622,9 @@ { "cell_type": "code", "execution_count": 62, - "id": "b4fa5fe3-ce8e-4b0a-af94-fb468d241bad", + "id": "90d71b2c", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "id 5.080902\n", - "dtype: float64" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_targets_test = df1_targets_full[['id', 'customer_id']].groupby(['customer_id']).count()\n", "len(df1_targets_test[df1_targets_test['id'] > 1]) / len(df1_targets_test)\n", @@ -2796,7 +636,7 @@ { "cell_type": "code", "execution_count": 10, - "id": "c74746de-0bf4-4b83-9a75-f1d3183abf1c", + "id": "2301de1e", "metadata": {}, "outputs": [ { @@ -2900,7 +740,7 @@ { "cell_type": "code", "execution_count": 14, - "id": "47c55fa0-b2f3-46f9-9abf-c4ab66bd9fcb", + "id": "75fbc2f7", "metadata": {}, "outputs": [ { @@ -2945,7 +785,7 @@ { "cell_type": "code", "execution_count": 19, - "id": "8af1aeb9-ebdd-4286-a14c-3b7d801ea172", + "id": "55cddf92", "metadata": {}, "outputs": [ { @@ -2996,7 +836,7 @@ { "cell_type": "code", "execution_count": 22, - "id": "ceb069e5-76c9-46e4-9ea7-8c16eb4ed3cd", + "id": "7fd98a85", "metadata": {}, "outputs": [ { @@ -3032,7 +872,7 @@ { "cell_type": "code", "execution_count": 18, - "id": "8bffef87-542e-4775-bc7c-2c0323fda581", + "id": "cf94bb1d", "metadata": {}, "outputs": [ { @@ -3104,7 +944,7 @@ }, { "cell_type": "markdown", - "id": "2f665824-a026-4acd-8358-b408a61854b4", + "id": "711d3884", "metadata": { "jp-MarkdownHeadingCollapsed": true }, @@ -3115,34 +955,9 @@ { "cell_type": "code", "execution_count": 52, - "id": "5d05203c-ea30-4208-a29f-fef7737c672e", + "id": "c25b5295", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_9792/1967867975.py:15: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\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", - " df[column_name] = pd.to_datetime(df[column_name], utc = True, format = 'ISO8601')\n", - "/tmp/ipykernel_9792/1967867975.py:15: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\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", - " df[column_name] = pd.to_datetime(df[column_name], utc = True, format = 'ISO8601')\n", - "/tmp/ipykernel_9792/1967867975.py:15: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\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", - " df[column_name] = pd.to_datetime(df[column_name], utc = True, format = 'ISO8601')\n" - ] - } - ], + "outputs": [], "source": [ "# campaign_stats cleaning \n", "df1_campaign_stats_clean = df1_campaign_stats[[\"id\", \"campaign_id\", \"customer_id\", \"opened_at\", \"sent_at\", \"delivered_at\"]]\n", @@ -3162,31 +977,9 @@ { "cell_type": "code", "execution_count": 53, - "id": "8ac634cf-2a30-4ccc-a34d-0fd401a49aaa", + "id": "2a3de6a5", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 6214808 entries, 0 to 6214807\n", - "Data columns (total 8 columns):\n", - " # Column Dtype \n", - "--- ------ ----- \n", - " 0 id int64 \n", - " 1 customer_id int64 \n", - " 2 opened_at datetime64[ns, UTC]\n", - " 3 sent_at datetime64[ns, UTC]\n", - " 4 delivered_at datetime64[ns, UTC]\n", - " 5 campaign_name object \n", - " 6 campaign_service_id int64 \n", - " 7 campaign_sent_at datetime64[ns, UTC]\n", - "dtypes: datetime64[ns, UTC](4), int64(3), object(1)\n", - "memory usage: 379.3+ MB\n" - ] - } - ], + "outputs": [], "source": [ "df1_campaigns_full.info()" ] @@ -3194,235 +987,16 @@ { "cell_type": "code", "execution_count": 56, - "id": "7d22cdd5-2060-4922-8e04-27b613d4ee27", + "id": "3fc1f446", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idcustomer_idopened_atsent_atdelivered_atcampaign_namecampaign_service_idcampaign_sent_at
019793112597NaT2021-03-28 16:01:09+00:002021-03-28 16:24:18+00:00Le Mucem chez vous, gardons le lien #224042021-03-27 23:00:00+00:00
114211113666NaT2021-03-28 16:01:09+00:002021-03-28 16:21:02+00:00Le Mucem chez vous, gardons le lien #224042021-03-27 23:00:00+00:00
213150280561NaT2021-03-28 16:00:59+00:002021-03-28 16:08:45+00:00Le Mucem chez vous, gardons le lien #224042021-03-27 23:00:00+00:00
370731010072021-03-28 18:11:06+00:002021-03-28 16:00:59+00:002021-03-28 16:09:47+00:00Le Mucem chez vous, gardons le lien #224042021-03-27 23:00:00+00:00
45175103972NaT2021-03-28 16:01:06+00:002021-03-28 16:05:03+00:00Le Mucem chez vous, gardons le lien #224042021-03-27 23:00:00+00:00
...........................
621480383029942661552023-10-23 09:43:25+00:002023-10-23 09:32:33+00:002023-10-23 09:32:34+00:00dre_nov_202313182023-10-23 09:31:17+00:00
62148048303307213552023-10-23 09:44:02+00:002023-10-23 09:32:49+00:002023-10-23 09:32:49+00:00dre_nov_202313182023-10-23 09:31:17+00:00
62148058304346218492023-10-23 09:45:52+00:002023-10-23 09:33:28+00:002023-10-23 09:33:29+00:00dre_nov_202313182023-10-23 09:31:17+00:00
621480683020376677892023-10-23 09:47:32+00:002023-10-23 09:31:53+00:002023-10-23 09:31:54+00:00dre_nov_202313182023-10-23 09:31:17+00:00
62148078304939294154NaT2023-10-23 09:33:54+00:002023-10-23 09:33:55+00:00dre_nov_202313182023-10-23 09:31:17+00:00
\n", - "

6214808 rows × 8 columns

\n", - "
" - ], - "text/plain": [ - " id customer_id opened_at \\\n", - "0 19793 112597 NaT \n", - "1 14211 113666 NaT \n", - "2 13150 280561 NaT \n", - "3 7073 101007 2021-03-28 18:11:06+00:00 \n", - "4 5175 103972 NaT \n", - "... ... ... ... \n", - "6214803 8302994 266155 2023-10-23 09:43:25+00:00 \n", - "6214804 8303307 21355 2023-10-23 09:44:02+00:00 \n", - "6214805 8304346 21849 2023-10-23 09:45:52+00:00 \n", - "6214806 8302037 667789 2023-10-23 09:47:32+00:00 \n", - "6214807 8304939 294154 NaT \n", - "\n", - " sent_at delivered_at \\\n", - "0 2021-03-28 16:01:09+00:00 2021-03-28 16:24:18+00:00 \n", - "1 2021-03-28 16:01:09+00:00 2021-03-28 16:21:02+00:00 \n", - "2 2021-03-28 16:00:59+00:00 2021-03-28 16:08:45+00:00 \n", - "3 2021-03-28 16:00:59+00:00 2021-03-28 16:09:47+00:00 \n", - "4 2021-03-28 16:01:06+00:00 2021-03-28 16:05:03+00:00 \n", - "... ... ... \n", - "6214803 2023-10-23 09:32:33+00:00 2023-10-23 09:32:34+00:00 \n", - "6214804 2023-10-23 09:32:49+00:00 2023-10-23 09:32:49+00:00 \n", - "6214805 2023-10-23 09:33:28+00:00 2023-10-23 09:33:29+00:00 \n", - "6214806 2023-10-23 09:31:53+00:00 2023-10-23 09:31:54+00:00 \n", - "6214807 2023-10-23 09:33:54+00:00 2023-10-23 09:33:55+00:00 \n", - "\n", - " campaign_name campaign_service_id \\\n", - "0 Le Mucem chez vous, gardons le lien #22 404 \n", - "1 Le Mucem chez vous, gardons le lien #22 404 \n", - "2 Le Mucem chez vous, gardons le lien #22 404 \n", - "3 Le Mucem chez vous, gardons le lien #22 404 \n", - "4 Le Mucem chez vous, gardons le lien #22 404 \n", - "... ... ... \n", - "6214803 dre_nov_2023 1318 \n", - "6214804 dre_nov_2023 1318 \n", - "6214805 dre_nov_2023 1318 \n", - "6214806 dre_nov_2023 1318 \n", - "6214807 dre_nov_2023 1318 \n", - "\n", - " campaign_sent_at \n", - "0 2021-03-27 23:00:00+00:00 \n", - "1 2021-03-27 23:00:00+00:00 \n", - "2 2021-03-27 23:00:00+00:00 \n", - "3 2021-03-27 23:00:00+00:00 \n", - "4 2021-03-27 23:00:00+00:00 \n", - "... ... \n", - "6214803 2023-10-23 09:31:17+00:00 \n", - "6214804 2023-10-23 09:31:17+00:00 \n", - "6214805 2023-10-23 09:31:17+00:00 \n", - "6214806 2023-10-23 09:31:17+00:00 \n", - "6214807 2023-10-23 09:31:17+00:00 \n", - "\n", - "[6214808 rows x 8 columns]" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_campaigns_information" ] }, { "cell_type": "markdown", - "id": "0a5b24f0-4bca-4cde-a6ba-eb130b38cac4", + "id": "20e69ee3", "metadata": { "jp-MarkdownHeadingCollapsed": true }, @@ -3433,264 +1007,9 @@ { "cell_type": "code", "execution_count": 37, - "id": "bc63bc4e-6cc1-4d35-9635-faf55339e186", + "id": "d9cbdbce", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idnameservice_idcreated_atupdated_atprocess_idreport_urlcategoryto_be_syncedidentifiersent_at
01319613newsletter enseignants janvier 20227212022-01-14 16:06:42.586321+01:002022-02-03 14:17:27.112963+01:00NaNNaN0.0Falseaba3b6fd5d186d28e06ff97135cade7f2022-01-14 00:00:00+01:00
11319586lsf_janvier_20227172022-01-07 11:30:35.315895+01:002022-02-03 14:17:27.116171+01:00NaNNaN0.0False788d986905533aba051261497ecffcbb2022-01-07 00:00:00+01:00
21319282Invitation à déjeuner au Mucem | Vernissage « ...5912021-09-28 12:50:24.448752+02:002022-02-03 14:17:27.119582+01:00NaNNaN0.0False3493894fa4ea036cfc6433c3e2ee63b02021-09-28 00:00:00+02:00
31319283Vacances de la Toussaint - centres des loisirs5902021-09-28 18:01:04.692073+02:002022-02-03 14:17:27.124408+01:00NaNNaN0.0False08b255a5d42b89b0585260b6f2360bdd2021-09-28 00:00:00+02:00
41319636ddcp_promo_md_livemag7302022-01-27 18:00:41.053069+01:002022-02-03 14:17:27.127607+01:00NaNNaN0.0Falsed5cfead94f5350c12c322b5b664544c12022-01-27 00:00:00+01:00
....................................
9521320072dre_gaza01068812022-05-26 09:01:35.523639+02:002022-12-02 17:51:22.614046+01:00NaNNaN0.0False7504adad8bb96320eb3afdd4df6e1f602022-05-26 00:00:00+02:00
953661398DDCP Plan Bis 4 - Marketing direct - MJ5C1832021-06-18 10:30:01.259578+02:002021-09-24 11:56:09.082785+02:00NaNNaN0.0Falsecedebb6e872f539bef8c3f919874e9d72020-07-27 00:00:00+02:00
9541320487Invitation portes ouvertes amitiés9882022-09-29 18:01:33.834090+02:002022-12-02 17:51:23.258324+01:00NaNNaN0.0False9908279ebbf1f9b250ba689db6a0222b2022-09-29 00:00:00+02:00
955906903DDCP PROMO La méditerranée des philosophes #3 ...3102021-07-19 14:07:16.177390+02:002021-09-24 11:56:09.086101+02:00NaNNaN0.0False06eb61b839a0cefee4967c67ccb099dc2020-12-23 00:00:00+01:00
956579313ddcp_promo_automation_manuel_pre_visit4812021-06-08 17:38:54.041310+02:002021-09-24 11:56:09.089394+02:00NaNNaN0.0False9461cce28ebe3e76fb4b931c35a169b02021-06-08 00:00:00+02:00
\n", - "

957 rows × 11 columns

\n", - "
" - ], - "text/plain": [ - " id name service_id \\\n", - "0 1319613 newsletter enseignants janvier 2022 721 \n", - "1 1319586 lsf_janvier_2022 717 \n", - "2 1319282 Invitation à déjeuner au Mucem | Vernissage « ... 591 \n", - "3 1319283 Vacances de la Toussaint - centres des loisirs 590 \n", - "4 1319636 ddcp_promo_md_livemag 730 \n", - ".. ... ... ... \n", - "952 1320072 dre_gaza0106 881 \n", - "953 661398 DDCP Plan Bis 4 - Marketing direct - MJ5C 183 \n", - "954 1320487 Invitation portes ouvertes amitiés 988 \n", - "955 906903 DDCP PROMO La méditerranée des philosophes #3 ... 310 \n", - "956 579313 ddcp_promo_automation_manuel_pre_visit 481 \n", - "\n", - " created_at updated_at \\\n", - "0 2022-01-14 16:06:42.586321+01:00 2022-02-03 14:17:27.112963+01:00 \n", - "1 2022-01-07 11:30:35.315895+01:00 2022-02-03 14:17:27.116171+01:00 \n", - "2 2021-09-28 12:50:24.448752+02:00 2022-02-03 14:17:27.119582+01:00 \n", - "3 2021-09-28 18:01:04.692073+02:00 2022-02-03 14:17:27.124408+01:00 \n", - "4 2022-01-27 18:00:41.053069+01:00 2022-02-03 14:17:27.127607+01:00 \n", - ".. ... ... \n", - "952 2022-05-26 09:01:35.523639+02:00 2022-12-02 17:51:22.614046+01:00 \n", - "953 2021-06-18 10:30:01.259578+02:00 2021-09-24 11:56:09.082785+02:00 \n", - "954 2022-09-29 18:01:33.834090+02:00 2022-12-02 17:51:23.258324+01:00 \n", - "955 2021-07-19 14:07:16.177390+02:00 2021-09-24 11:56:09.086101+02:00 \n", - "956 2021-06-08 17:38:54.041310+02:00 2021-09-24 11:56:09.089394+02:00 \n", - "\n", - " process_id report_url category to_be_synced \\\n", - "0 NaN NaN 0.0 False \n", - "1 NaN NaN 0.0 False \n", - "2 NaN NaN 0.0 False \n", - "3 NaN NaN 0.0 False \n", - "4 NaN NaN 0.0 False \n", - ".. ... ... ... ... \n", - "952 NaN NaN 0.0 False \n", - "953 NaN NaN 0.0 False \n", - "954 NaN NaN 0.0 False \n", - "955 NaN NaN 0.0 False \n", - "956 NaN NaN 0.0 False \n", - "\n", - " identifier sent_at \n", - "0 aba3b6fd5d186d28e06ff97135cade7f 2022-01-14 00:00:00+01:00 \n", - "1 788d986905533aba051261497ecffcbb 2022-01-07 00:00:00+01:00 \n", - "2 3493894fa4ea036cfc6433c3e2ee63b0 2021-09-28 00:00:00+02:00 \n", - "3 08b255a5d42b89b0585260b6f2360bdd 2021-09-28 00:00:00+02:00 \n", - "4 d5cfead94f5350c12c322b5b664544c1 2022-01-27 00:00:00+01:00 \n", - ".. ... ... \n", - "952 7504adad8bb96320eb3afdd4df6e1f60 2022-05-26 00:00:00+02:00 \n", - "953 cedebb6e872f539bef8c3f919874e9d7 2020-07-27 00:00:00+02:00 \n", - "954 9908279ebbf1f9b250ba689db6a0222b 2022-09-29 00:00:00+02:00 \n", - "955 06eb61b839a0cefee4967c67ccb099dc 2020-12-23 00:00:00+01:00 \n", - "956 9461cce28ebe3e76fb4b931c35a169b0 2021-06-08 00:00:00+02:00 \n", - "\n", - "[957 rows x 11 columns]" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_campaigns" ] @@ -3698,185 +1017,16 @@ { "cell_type": "code", "execution_count": 38, - "id": "c19b321f-65f9-4d6c-8c1f-edb2eb9d70e7", + "id": "c07459f0", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idclicked_atlink_idcustomer_idcreated_atupdated_at
012021-03-26 16:30:36+01:0012840332021-03-26 15:30:37.050161+01:002021-03-26 15:30:37.050161+01:00
122021-03-26 17:16:34+01:0021197682021-03-26 16:16:34.950871+01:002021-03-26 16:16:34.950871+01:00
22722021-03-28 20:03:32+02:00421131052021-03-28 18:03:32.736394+02:002021-03-28 18:03:32.736394+02:00
342021-03-26 17:43:19+01:0032722802021-03-26 16:43:19.338321+01:002021-03-26 16:43:19.338321+01:00
452021-03-26 17:46:00+01:0031050952021-03-26 16:46:00.502945+01:002021-03-26 16:46:00.502945+01:00
.....................
1510462435532023-11-09 16:34:27+01:00146669982023-11-09 15:34:29.425425+01:002023-11-09 15:34:29.425425+01:00
1510472435542023-11-09 16:34:35+01:00146709982023-11-09 15:34:37.505505+01:002023-11-09 15:34:37.505505+01:00
1510482435592023-11-09 16:51:15+01:0014686829232023-11-09 15:51:17.439518+01:002023-11-09 15:51:17.439518+01:00
1510492435612023-11-09 16:59:42+01:0014677829232023-11-09 15:59:44.030922+01:002023-11-09 15:59:44.030922+01:00
1510502435642023-11-09 17:16:41+01:001469112543552023-11-09 16:16:43.012932+01:002023-11-09 16:16:43.012932+01:00
\n", - "

151051 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " id clicked_at link_id customer_id \\\n", - "0 1 2021-03-26 16:30:36+01:00 1 284033 \n", - "1 2 2021-03-26 17:16:34+01:00 2 119768 \n", - "2 272 2021-03-28 20:03:32+02:00 42 113105 \n", - "3 4 2021-03-26 17:43:19+01:00 3 272280 \n", - "4 5 2021-03-26 17:46:00+01:00 3 105095 \n", - "... ... ... ... ... \n", - "151046 243553 2023-11-09 16:34:27+01:00 14666 998 \n", - "151047 243554 2023-11-09 16:34:35+01:00 14670 998 \n", - "151048 243559 2023-11-09 16:51:15+01:00 14686 82923 \n", - "151049 243561 2023-11-09 16:59:42+01:00 14677 82923 \n", - "151050 243564 2023-11-09 17:16:41+01:00 14691 1254355 \n", - "\n", - " created_at updated_at \n", - "0 2021-03-26 15:30:37.050161+01:00 2021-03-26 15:30:37.050161+01:00 \n", - "1 2021-03-26 16:16:34.950871+01:00 2021-03-26 16:16:34.950871+01:00 \n", - "2 2021-03-28 18:03:32.736394+02:00 2021-03-28 18:03:32.736394+02:00 \n", - "3 2021-03-26 16:43:19.338321+01:00 2021-03-26 16:43:19.338321+01:00 \n", - "4 2021-03-26 16:46:00.502945+01:00 2021-03-26 16:46:00.502945+01:00 \n", - "... ... ... \n", - "151046 2023-11-09 15:34:29.425425+01:00 2023-11-09 15:34:29.425425+01:00 \n", - "151047 2023-11-09 15:34:37.505505+01:00 2023-11-09 15:34:37.505505+01:00 \n", - "151048 2023-11-09 15:51:17.439518+01:00 2023-11-09 15:51:17.439518+01:00 \n", - "151049 2023-11-09 15:59:44.030922+01:00 2023-11-09 15:59:44.030922+01:00 \n", - "151050 2023-11-09 16:16:43.012932+01:00 2023-11-09 16:16:43.012932+01:00 \n", - "\n", - "[151051 rows x 6 columns]" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_link_stats" ] }, { "cell_type": "markdown", - "id": "96ea2523-38dc-47ef-a49e-2c2d9ad0b1c6", + "id": "80ae4c42", "metadata": {}, "source": [ "## Exploration variables" @@ -3884,8 +1034,8 @@ }, { "cell_type": "code", - "execution_count": 28, - "id": "aaa41688-ea7e-4dba-851c-1f0b0ec43c71", + "execution_count": 7, + "id": "b50b8f95", "metadata": {}, "outputs": [], "source": [ @@ -3907,8 +1057,8 @@ }, { "cell_type": "code", - "execution_count": 29, - "id": "2fecc2e1-113f-46ed-9065-0b9ee416166e", + "execution_count": 8, + "id": "7e292935", "metadata": {}, "outputs": [], "source": [ @@ -3917,8 +1067,8 @@ }, { "cell_type": "code", - "execution_count": 30, - "id": "55f6170a-36fb-4efb-9810-f982883660cf", + "execution_count": 9, + "id": "05b6f2b0", "metadata": {}, "outputs": [ { @@ -3965,7 +1115,7 @@ "0 9 100.0 100.0 100.0" ] }, - "execution_count": 30, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -3976,8 +1126,8 @@ }, { "cell_type": "code", - "execution_count": 31, - "id": "0030fd02-09e3-42f5-9c83-290458a38c29", + "execution_count": 10, + "id": "c9324d80", "metadata": {}, "outputs": [], "source": [ @@ -3991,8 +1141,8 @@ }, { "cell_type": "code", - "execution_count": 32, - "id": "6b1736d1-8fd7-4fcc-9431-b8bf0c7b4f2b", + "execution_count": 11, + "id": "10304058", "metadata": {}, "outputs": [ { @@ -4015,8 +1165,8 @@ }, { "cell_type": "code", - "execution_count": 33, - "id": "226b694b-0b00-4167-b69f-3178902254eb", + "execution_count": 32, + "id": "ffa423e5", "metadata": {}, "outputs": [], "source": [ @@ -4024,19 +1174,103 @@ "def database_loading(database_name = None):\n", " files_path = database_name\n", " \n", - " client_number = files_path[0].split(\"/\")[1]\n", + " client_number = files_path.split(\"/\")[1]\n", " df_prefix = \"df\" + str(client_number) + \"_\"\n", " \n", - " for i in range(len(files_path)) :\n", - " current_path = files_path[i]\n", - " with fs.open(current_path, mode=\"rb\") as file_in:\n", - " df = pd.read_csv(file_in)\n", - " # the pattern of the name is df1xxx\n", - " nom_dataframe = df_prefix + re.search(r'\\/(\\d+)\\/(\\d+)([a-zA-Z_]+)\\.csv$', current_path).group(3)\n", - " globals()[nom_dataframe] = df\n", + " current_path = files_path\n", + " with fs.open(current_path, mode=\"rb\") as file_in:\n", + " df = pd.read_csv(file_in)\n", "\n", + " return df, client_number" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "70bdc88d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "6a0f567d", + "metadata": {}, + "outputs": [], + "source": [ + "df_all = pd.DataFrame()\n", + "\n", + "for link in liste_suppliers:\n", + " \n", + " df_supplier, tenant_id = database_loading(link)\n", + " \n", + " df_supplier['tenant_id'] = int(tenant_id)\n", + "\n", + " df_all = pd.concat([df_all, df_supplier], axis = 0)\n", " " ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "1522d8cd", + "metadata": {}, + "outputs": [], + "source": [ + "# df_all[df_all['tenant_id'] == 101]['name'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "b0e42a61", + "metadata": {}, + "outputs": [], + "source": [ + "liste_mots = ['en ligne', 'internet', 'web', 'net', 'vad', 'online'] \n", + "# vad = vente à distance\n", + "df_all['name'] = df_all['name'].fillna('')\n", + "\n", + "df_all['canal_vente_internet'] = df_all['name'].str.contains('|'.join(liste_mots), case=False).astype(int)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "d299ae91", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tenant_id\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 1\n", + "5 1\n", + "6 1\n", + "7 1\n", + "8 1\n", + "9 1\n", + "10 1\n", + "11 1\n", + "12 1\n", + "13 1\n", + "14 1\n", + "101 1\n", + "Name: canal_vente_internet, dtype: int64" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_all.groupby('tenant_id')['canal_vente_internet'].max()" + ] } ], "metadata": {