From 89b05d9366fa9bcd7fd342084734a90e3c28789e Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 12:23:44 +0000 Subject: [PATCH 01/11] Ajout indicatrice canal vente en ligne --- Exploration_billet_AJ.ipynb | 194 ++++++++++++++++++++++-------------- 1 file changed, 120 insertions(+), 74 deletions(-) diff --git a/Exploration_billet_AJ.ipynb b/Exploration_billet_AJ.ipynb index 6af213e..13d581c 100644 --- a/Exploration_billet_AJ.ipynb +++ b/Exploration_billet_AJ.ipynb @@ -69,54 +69,6 @@ "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, @@ -143,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 6, "id": "dd6a3518-b752-4a1e-b77b-9e03e853c3ed", "metadata": {}, "outputs": [ @@ -151,7 +103,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_683/4081512283.py:10: DtypeWarning: Columns (1) have mixed types. Specify dtype option on import or set low_memory=False.\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" ] } @@ -175,7 +127,9 @@ { "cell_type": "markdown", "id": "f01e4530-1a61-49cb-a6b0-aa188cf1c0e0", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## customersplus.csv" ] @@ -1252,7 +1206,9 @@ { "cell_type": "markdown", "id": "78453f3c-4f89-44ed-a6c6-2a7443b72b52", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## suppliers.csv" ] @@ -2197,7 +2153,9 @@ { "cell_type": "markdown", "id": "53227600-c1c5-48aa-9f5d-db5a23a8a22a", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## Fusion de l'ensemble des données billétiques" ] @@ -2443,7 +2401,9 @@ { "cell_type": "markdown", "id": "ad2d0059-76d3-44b9-b0eb-0b0ca4d4ba75", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "# Utilisation de fonctions" ] @@ -2724,7 +2684,9 @@ { "cell_type": "markdown", "id": "a2132ee2-3f22-45fd-b65b-72689c8b672c", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## Target area" ] @@ -3132,7 +3094,9 @@ { "cell_type": "markdown", "id": "2f665824-a026-4acd-8358-b408a61854b4", - "metadata": {}, + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, "source": [ "## Campaign area" ] @@ -3902,16 +3866,14 @@ { "cell_type": "markdown", "id": "96ea2523-38dc-47ef-a49e-2c2d9ad0b1c6", - "metadata": { - "jp-MarkdownHeadingCollapsed": true - }, + "metadata": {}, "source": [ "## Exploration variables" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 7, "id": "aaa41688-ea7e-4dba-851c-1f0b0ec43c71", "metadata": {}, "outputs": [], @@ -3934,7 +3896,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 8, "id": "2fecc2e1-113f-46ed-9065-0b9ee416166e", "metadata": {}, "outputs": [], @@ -3944,7 +3906,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 9, "id": "55f6170a-36fb-4efb-9810-f982883660cf", "metadata": {}, "outputs": [ @@ -3992,7 +3954,7 @@ "0 9 100.0 100.0 100.0" ] }, - "execution_count": 30, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -4003,7 +3965,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 10, "id": "0030fd02-09e3-42f5-9c83-290458a38c29", "metadata": {}, "outputs": [], @@ -4018,7 +3980,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 11, "id": "6b1736d1-8fd7-4fcc-9431-b8bf0c7b4f2b", "metadata": {}, "outputs": [ @@ -4042,7 +4004,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "id": "226b694b-0b00-4167-b69f-3178902254eb", "metadata": {}, "outputs": [], @@ -4051,19 +4013,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": "f51d8836-6eef-47d5-873d-4327e12a3245", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "90b94363-a562-4633-ba27-622422e2368c", + "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": "fedbfbd2-698b-4846-9618-84a3c8d087c7", + "metadata": {}, + "outputs": [], + "source": [ + "# df_all[df_all['tenant_id'] == 101]['name'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "8d365bb5-2ddc-4f68-b415-e21f960c2c0f", + "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": "fc37348d-b282-42ad-b768-c882148d8f66", + "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": { From c682d436b89bb8c6470674dde080a8283014ca3f Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 13:23:17 +0000 Subject: [PATCH 02/11] =?UTF-8?q?Ajout=20canal=20de=20vente=20en=20ligne?= =?UTF-8?q?=20et=20nombre=20tickets=20achet=C3=A9=20en=20lignet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0_Cleaning_and_merge.ipynb | 1036 ++++++++++++------------------------ 1 file changed, 331 insertions(+), 705 deletions(-) diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index 99d5ea7..5085051 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -79,7 +79,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_15815/4081512283.py:10: DtypeWarning: Columns (1) have mixed types. Specify dtype option on import or set low_memory=False.\n", + "/tmp/ipykernel_8302/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" ] } @@ -205,6 +205,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", @@ -242,17 +243,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_15815/1591303091.py:5: SettingWithCopyWarning: \n", + "/tmp/ipykernel_8302/3092893564.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_15815/1591303091.py:9: SettingWithCopyWarning: \n", + "/tmp/ipykernel_8302/3092893564.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_15815/1591303091.py:13: SettingWithCopyWarning: \n", + "/tmp/ipykernel_8302/3092893564.py:10: 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", + " suppliers['supplier_name'] = suppliers['supplier_name'].fillna('')\n", + "/tmp/ipykernel_8302/3092893564.py:14: 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", @@ -433,7 +440,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_15815/3848597476.py:4: SettingWithCopyWarning: \n", + "/tmp/ipykernel_8302/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", @@ -647,19 +654,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_15815/1967867975.py:15: SettingWithCopyWarning: \n", + "/tmp/ipykernel_8302/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_15815/1967867975.py:15: SettingWithCopyWarning: \n", + "/tmp/ipykernel_8302/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_15815/1967867975.py:15: SettingWithCopyWarning: \n", + "/tmp/ipykernel_8302/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", @@ -847,7 +854,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_15815/3700263836.py:11: SettingWithCopyWarning: \n", + "/tmp/ipykernel_8302/3700263836.py:11: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", @@ -1971,7 +1978,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 33, "id": "3d8b0875-b409-44ce-b688-d9d6758782d3", "metadata": {}, "outputs": [ @@ -2261,7 +2268,7 @@ "[1826672 rows x 14 columns]" ] }, - "execution_count": 53, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -2273,7 +2280,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "id": "2bda0b97-b28b-4070-a57d-aeab0e2f7dfe", "metadata": {}, "outputs": [], @@ -2284,38 +2291,51 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 74, "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", - " 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", + "\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')['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", - " 'purchase_date_max' : 'max',\n", - " 'purchase_date' : 'min'})\n", + " 'vente_internet' : 'max',\n", + " 'purchase_date' : ['min', 'max']})\n", " .reset_index()\n", " )\n", + " tickets_kpi.columns = tickets_kpi.columns.map('_'.join)\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", + " tickets_kpi.rename(columns = {'ticket_id_count' : 'nb_tickets', \n", + " 'amount_sum' : 'total_amount',\n", + " 'supplier_name_nunique' : 'nb_suppliers', \n", + " 'customer_id_' : 'customer_id'}, inplace = True)\n", " \n", " tickets_kpi['time_between_purchase'] = tickets_kpi['purchase_date_max'] - tickets_kpi['purchase_date_min']\n", - " \n", + "\n", + " tickets_kpi = tickets_kpi.merge(prop_vente_internet, on = 'customer_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": 51, + "execution_count": 75, "id": "5882234a-1ed5-4269-87a6-0d75613476e3", "metadata": {}, "outputs": [], @@ -2325,8 +2345,8 @@ }, { "cell_type": "code", - "execution_count": 52, - "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", + "execution_count": 76, + "id": "c78f5ade-c721-49d9-a474-73c217686ed1", "metadata": {}, "outputs": [ { @@ -2354,9 +2374,11 @@ " nb_tickets\n", " total_amount\n", " nb_suppliers\n", - " purchase_date_max\n", + " vente_internet_max\n", " purchase_date_min\n", + " purchase_date_max\n", " time_between_purchase\n", + " nb_tickets_internet\n", " \n", " \n", " \n", @@ -2366,407 +2388,330 @@ " 1256574\n", " 8830567.5\n", " 7\n", - " 2023-11-08 15:59:45+00:00\n", + " 1\n", " 2013-06-10 10:37:58+00:00\n", + " 2023-11-08 15:59:45+00:00\n", " 3803 days 05:21:47\n", + " 3053.0\n", " \n", " \n", - " 3615\n", - " 6733\n", - " 35527\n", - " 1188.0\n", - " 4\n", - " 2023-11-03 09:42:40+00:00\n", - " 2015-09-09 13:48:38+00:00\n", - " 2976 days 19:54:02\n", + " 1\n", + " 2\n", + " 307\n", + " 0.0\n", + " 1\n", + " 0\n", + " 2018-04-07 12:55:07+00:00\n", + " 2020-03-08 12:06:43+00:00\n", + " 700 days 23:11:36\n", + " 0.0\n", " \n", " \n", - " 39\n", - " 41\n", - " 16263\n", - " 37642.0\n", + " 2\n", + " 3\n", " 6\n", - " 2023-10-25 09:13:16+00:00\n", - " 2014-01-23 16:56:57+00:00\n", - " 3561 days 16:16:19\n", - " \n", - " \n", - " 11\n", - " 12\n", - " 5871\n", - " 38767.0\n", - " 2\n", - " 2023-11-04 13:46:59+00:00\n", - " 2018-04-04 07:46:31+00:00\n", - " 2040 days 06:00:28\n", - " \n", - " \n", - " 32809\n", - " 63488\n", - " 5851\n", - " 64350.0\n", + " 110.0\n", " 1\n", - " 2022-08-25 13:08:38+00:00\n", - " 2020-08-18 08:32:57+00:00\n", - " 737 days 04:35:41\n", - " \n", - " \n", - " 3708\n", - " 6916\n", - " 5482\n", - " 51489.5\n", - " 2\n", - " 2021-08-26 12:49:17+00:00\n", - " 2018-03-26 11:13:43+00:00\n", - " 1249 days 01:35:34\n", - " \n", - " \n", - " 32616\n", - " 63194\n", - " 4507\n", - " 13232.0\n", - " 3\n", - " 2022-09-07 12:55:33+00:00\n", - " 2017-11-28 13:52:15+00:00\n", - " 1743 days 23:03:18\n", - " \n", - " \n", - " 78\n", - " 81\n", - " 3562\n", - " 38746.0\n", " 1\n", - " 2022-08-30 11:51:34+00:00\n", - " 2017-01-05 13:04:58+00:00\n", - " 2062 days 22:46:36\n", + " 2019-09-19 15:15:01+00:00\n", + " 2023-09-27 09:13:09+00:00\n", + " 1468 days 17:58:08\n", + " 6.0\n", " \n", " \n", - " 35295\n", - " 84002\n", - " 3403\n", - " 19830.0\n", + " 3\n", " 4\n", - " 2023-11-06 15:59:22+00:00\n", - " 2021-05-28 10:22:33+00:00\n", - " 892 days 05:36:49\n", - " \n", - " \n", - " 3377\n", - " 5618\n", - " 3294\n", - " 31684.5\n", - " 1\n", - " 2022-02-24 07:47:20+00:00\n", - " 2018-10-25 11:04:24+00:00\n", - " 1217 days 20:42:56\n", - " \n", - " \n", - " 30011\n", - " 59259\n", - " 2591\n", - " 4350.0\n", - " 3\n", - " 2023-06-12 14:05:19+00:00\n", - " 2019-11-25 08:52:48+00:00\n", - " 1295 days 05:12:31\n", - " \n", - " \n", - " 34937\n", - " 74876\n", - " 2571\n", - " 2600.0\n", - " 2\n", - " 2023-10-02 08:13:05+00:00\n", - " 2018-02-08 12:54:01+00:00\n", - " 2061 days 19:19:04\n", - " \n", - " \n", - " 270\n", - " 295\n", - " 2570\n", - " 17678.5\n", - " 6\n", - " 2023-10-16 10:19:22+00:00\n", - " 2014-01-24 15:16:17+00:00\n", - " 3551 days 19:03:05\n", - " \n", - " \n", - " 866\n", - " 1221\n", - " 2320\n", - " 9652.0\n", - " 2\n", - " 2022-09-19 12:55:15+00:00\n", - " 2017-03-29 08:00:09+00:00\n", - " 2000 days 04:55:06\n", - " \n", - " \n", - " 1022\n", - " 1429\n", - " 2249\n", - " 3500.0\n", " 4\n", - " 2023-11-06 08:30:37+00:00\n", - " 2014-12-03 14:56:38+00:00\n", - " 3259 days 17:33:59\n", - " \n", - " \n", - " 3922\n", - " 7249\n", - " 1827\n", - " 13385.0\n", + " 41.0\n", " 1\n", - " 2021-10-26 12:28:40+00:00\n", - " 2019-05-07 12:34:56+00:00\n", - " 902 days 23:53:44\n", - " \n", - " \n", - " 54425\n", - " 1070539\n", - " 1800\n", - " 19800.0\n", " 1\n", - " 2022-07-25 12:49:27+00:00\n", - " 2022-05-02 16:09:03+00:00\n", - " 83 days 20:40:24\n", + " 2019-09-19 15:43:49+00:00\n", + " 2021-09-02 18:42:19+00:00\n", + " 714 days 02:58:30\n", + " 4.0\n", " \n", " \n", - " 69520\n", - " 1216801\n", - " 1623\n", - " 12562.0\n", + " 4\n", + " 5\n", " 2\n", - " 2023-09-29 16:34:38+00:00\n", - " 2023-06-16 14:16:04+00:00\n", - " 105 days 02:18:34\n", - " \n", - " \n", - " 30056\n", - " 59330\n", - " 1551\n", - " 0.0\n", + " 19.0\n", " 1\n", - " 2023-11-06 10:22:14+00:00\n", - " 2018-02-02 08:53:51+00:00\n", - " 2103 days 01:28:23\n", - " \n", - " \n", - " 3243\n", - " 5441\n", - " 1544\n", - " 14133.0\n", - " 2\n", - " 2022-09-22 08:21:47+00:00\n", - " 2017-12-14 12:50:23+00:00\n", - " 1742 days 19:31:24\n", - " \n", - " \n", - " 55195\n", - " 1084435\n", - " 1500\n", - " 16500.0\n", " 1\n", - " 2022-09-27 14:32:13+00:00\n", - " 2022-05-18 08:04:41+00:00\n", - " 132 days 06:27:32\n", + " 2019-09-19 15:45:36+00:00\n", + " 2019-09-19 15:45:36+00:00\n", + " 0 days 00:00:00\n", + " 2.0\n", " \n", " \n", - " 28983\n", - " 57816\n", - " 1485\n", - " 0.0\n", - " 2\n", - " 2023-05-22 07:30:55+00:00\n", - " 2019-01-21 14:19:18+00:00\n", - " 1581 days 17:11:37\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 2231\n", - " 2942\n", - " 1307\n", - " 100.0\n", - " 2\n", - " 2023-06-29 09:33:58+00:00\n", - " 2017-10-25 15:06:58+00:00\n", - " 2072 days 18:27:00\n", + " 73513\n", + " 1256133\n", + " 3\n", + " 33.0\n", + " 1\n", + " 1\n", + " 2023-11-08 16:51:19+00:00\n", + " 2023-11-08 16:51:19+00:00\n", + " 0 days 00:00:00\n", + " 3.0\n", " \n", " \n", - " 23\n", - " 24\n", - " 1266\n", - " 0.0\n", - " 2\n", - " 2023-10-19 07:20:48+00:00\n", - " 2015-09-30 16:07:52+00:00\n", - " 2940 days 15:12:56\n", - " \n", - " \n", - " 4513\n", - " 9592\n", - " 1211\n", - " 62.0\n", + " 73514\n", + " 1256134\n", " 4\n", - " 2023-10-17 09:39:40+00:00\n", - " 2018-02-25 07:17:19+00:00\n", - " 2060 days 02:22:21\n", - " \n", - " \n", - " 2936\n", - " 5059\n", - " 1186\n", - " 6308.0\n", - " 3\n", - " 2023-05-22 13:41:22+00:00\n", - " 2018-02-01 11:16:51+00:00\n", - " 1936 days 02:24:31\n", - " \n", - " \n", - " 11484\n", - " 25100\n", - " 1123\n", - " 0.0\n", + " 44.0\n", " 1\n", - " 2021-07-13 07:39:57+00:00\n", - " 2015-12-21 15:38:05+00:00\n", - " 2030 days 16:01:52\n", - " \n", - " \n", - " 934\n", - " 1326\n", - " 1098\n", - " 798.0\n", - " 3\n", - " 2023-02-01 08:39:45+00:00\n", - " 2018-02-13 13:13:48+00:00\n", - " 1813 days 19:25:57\n", - " \n", - " \n", - " 30156\n", - " 59490\n", - " 1088\n", - " 0.0\n", " 1\n", - " 2023-10-05 08:23:50+00:00\n", - " 2019-12-06 12:59:20+00:00\n", - " 1398 days 19:24:30\n", + " 2023-11-08 17:17:51+00:00\n", + " 2023-11-08 17:17:51+00:00\n", + " 0 days 00:00:00\n", + " 4.0\n", " \n", " \n", - " 36478\n", - " 251268\n", - " 1086\n", - " 0.0\n", + " 73515\n", + " 1256135\n", + " 1\n", + " 11.0\n", + " 1\n", + " 1\n", + " 2023-11-08 17:23:54+00:00\n", + " 2023-11-08 17:23:54+00:00\n", + " 0 days 00:00:00\n", + " 1.0\n", + " \n", + " \n", + " 73516\n", + " 1256136\n", " 2\n", - " 2023-06-30 07:22:46+00:00\n", - " 2018-02-02 09:06:22+00:00\n", - " 1973 days 22:16:24\n", + " 22.0\n", + " 1\n", + " 1\n", + " 2023-11-08 18:32:18+00:00\n", + " 2023-11-08 18:32:18+00:00\n", + " 0 days 00:00:00\n", + " 2.0\n", + " \n", + " \n", + " 73517\n", + " 1256137\n", + " 2\n", + " 22.0\n", + " 1\n", + " 1\n", + " 2023-11-08 19:30:28+00:00\n", + " 2023-11-08 19:30:28+00:00\n", + " 0 days 00:00:00\n", + " 2.0\n", " \n", " \n", "\n", + "

73518 rows × 9 columns

\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", + "1 2 307 0.0 1 \n", + "2 3 6 110.0 1 \n", + "3 4 4 41.0 1 \n", + "4 5 2 19.0 1 \n", + "... ... ... ... ... \n", + "73513 1256133 3 33.0 1 \n", + "73514 1256134 4 44.0 1 \n", + "73515 1256135 1 11.0 1 \n", + "73516 1256136 2 22.0 1 \n", + "73517 1256137 2 22.0 1 \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", + " vente_internet_max purchase_date_min purchase_date_max \\\n", + "0 1 2013-06-10 10:37:58+00:00 2023-11-08 15:59:45+00:00 \n", + "1 0 2018-04-07 12:55:07+00:00 2020-03-08 12:06:43+00:00 \n", + "2 1 2019-09-19 15:15:01+00:00 2023-09-27 09:13:09+00:00 \n", + "3 1 2019-09-19 15:43:49+00:00 2021-09-02 18:42:19+00:00 \n", + "4 1 2019-09-19 15:45:36+00:00 2019-09-19 15:45:36+00:00 \n", + "... ... ... ... \n", + "73513 1 2023-11-08 16:51:19+00:00 2023-11-08 16:51:19+00:00 \n", + "73514 1 2023-11-08 17:17:51+00:00 2023-11-08 17:17:51+00:00 \n", + "73515 1 2023-11-08 17:23:54+00:00 2023-11-08 17:23:54+00:00 \n", + "73516 1 2023-11-08 18:32:18+00:00 2023-11-08 18:32:18+00:00 \n", + "73517 1 2023-11-08 19:30:28+00:00 2023-11-08 19:30:28+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 " + " time_between_purchase nb_tickets_internet \n", + "0 3803 days 05:21:47 3053.0 \n", + "1 700 days 23:11:36 0.0 \n", + "2 1468 days 17:58:08 6.0 \n", + "3 714 days 02:58:30 4.0 \n", + "4 0 days 00:00:00 2.0 \n", + "... ... ... \n", + "73513 0 days 00:00:00 3.0 \n", + "73514 0 days 00:00:00 4.0 \n", + "73515 0 days 00:00:00 1.0 \n", + "73516 0 days 00:00:00 2.0 \n", + "73517 0 days 00:00:00 2.0 \n", + "\n", + "[73518 rows x 9 columns]" ] }, - "execution_count": 52, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], + "source": [ + "df1_tickets_kpi" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "de1ecf15-1aa1-4aa2-9467-8ad8e9be5856", + "metadata": {}, + "outputs": [], + "source": [ + " df_tickets_information_copy = df1_products_purchased_reduced.copy()\n", + "\n", + " # Dummy : Canal de vente en ligne\n", + " liste_mots = ['en ligne', 'internet', 'web', 'net', 'vad', 'online'] # vad = vente à distance\n", + " df_tickets_information_copy['vente_internet'] = df_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 = df_tickets_information_copy[df_tickets_information_copy['vente_internet'] == 1].groupby('customer_id')['ticket_id'].count().reset_index()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "9cd36178-11dc-409c-b148-fb1d208c2faf", + "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", + "
customer_idticket_id
013053
136
244
352
462
.........
5674412561333
5674512561344
5674612561351
5674712561362
5674812561372
\n", + "

56749 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " customer_id ticket_id\n", + "0 1 3053\n", + "1 3 6\n", + "2 4 4\n", + "3 5 2\n", + "4 6 2\n", + "... ... ...\n", + "56744 1256133 3\n", + "56745 1256134 4\n", + "56746 1256135 1\n", + "56747 1256136 2\n", + "56748 1256137 2\n", + "\n", + "[56749 rows x 2 columns]" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prop_vente_internet" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", + "metadata": {}, + "outputs": [], "source": [ "df1_tickets_kpi.sort_values(by='nb_tickets', ascending=False).head(30)" ] @@ -2781,7 +2726,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "id": "46de1912-4a66-46e5-8b9e-7768b2d2723b", "metadata": {}, "outputs": [], @@ -2792,339 +2737,20 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "id": "9740d64a-e5eb-4967-a534-ca6177546465", "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_idprofessionlanguage...average_ticket_baskettotal_pricepurchase_countfirst_buying_datecountryagetenant_idnb_campaignsnb_campaigns_openedtime_to_open
012751NaN2False1TrueTrueNaNNaNNaN...NaNNaN0NaTfrNaN1311NaNNaNNaT
112825NaN2False2TrueTrueNaNNaNNaN...NaNNaN0NaTfrNaN1311NaNNaNNaT
211261NaN2False1TrueTrueNaNNaNNaN...NaNNaN0NaTfrNaN1311NaNNaNNaT
313071NaN2False2TrueTrueNaNNaNNaN...NaNNaN0NaTfrNaN1311NaNNaNNaT
4653061NaN10False2TrueFalseNaNNaNNaN...NaNNaN0NaTNaNNaN131180.02.00 days 19:53:02.500000
\n", - "

5 rows × 28 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 profession language ... average_ticket_basket \\\n", - "0 True NaN NaN NaN ... NaN \n", - "1 True NaN NaN NaN ... NaN \n", - "2 True NaN NaN NaN ... NaN \n", - "3 True NaN NaN NaN ... NaN \n", - "4 False NaN NaN NaN ... NaN \n", - "\n", - " total_price purchase_count first_buying_date country age tenant_id \\\n", - "0 NaN 0 NaT fr NaN 1311 \n", - "1 NaN 0 NaT fr NaN 1311 \n", - "2 NaN 0 NaT fr NaN 1311 \n", - "3 NaN 0 NaT fr NaN 1311 \n", - "4 NaN 0 NaT NaN NaN 1311 \n", - "\n", - " nb_campaigns nb_campaigns_opened time_to_open \n", - "0 NaN NaN NaT \n", - "1 NaN NaN NaT \n", - "2 NaN NaN NaT \n", - "3 NaN NaN NaT \n", - "4 80.0 2.0 0 days 19:53:02.500000 \n", - "\n", - "[5 rows x 28 columns]" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df1_customer.head()" ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "id": "b5c4418c-ad2e-4bb9-bd5c-3b769e9c87d4", "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", - "
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
582011NaN2False2TrueFalseNaNNaNNaNNaN2023-11-08 03:20:0745.012547757.030122330831-67.79096913.751531.9560878821221.56414722013-06-10 10:37:58+00:00frNaN1311NaNNaNNaT
\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": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "pd.set_option('display.max_columns', None)\n", "\n", @@ -3134,7 +2760,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "id": "1e42a790-b215-4107-a969-85005da06ebd", "metadata": {}, "outputs": [], @@ -3145,7 +2771,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "id": "d950f24d-a5d1-4f1e-aeaa-ca826470365f", "metadata": {}, "outputs": [], From a83055cc48acd1001625d25327219c121b6d0102 Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 13:25:12 +0000 Subject: [PATCH 03/11] Nettoyage --- 0_Cleaning_and_merge.ipynb | 687 ++++++++++++++++++++++--------------- 1 file changed, 412 insertions(+), 275 deletions(-) diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index 5085051..8b723e0 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -2345,8 +2345,8 @@ }, { "cell_type": "code", - "execution_count": 76, - "id": "c78f5ade-c721-49d9-a474-73c217686ed1", + "execution_count": 77, + "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", "metadata": {}, "outputs": [ { @@ -2395,323 +2395,460 @@ " 3053.0\n", " \n", " \n", - " 1\n", + " 3615\n", + " 6733\n", + " 35527\n", + " 1188.0\n", + " 4\n", + " 1\n", + " 2015-09-09 13:48:38+00:00\n", + " 2023-11-03 09:42:40+00:00\n", + " 2976 days 19:54:02\n", + " 30896.0\n", + " \n", + " \n", + " 39\n", + " 41\n", + " 16263\n", + " 37642.0\n", + " 6\n", + " 1\n", + " 2014-01-23 16:56:57+00:00\n", + " 2023-10-25 09:13:16+00:00\n", + " 3561 days 16:16:19\n", + " 13993.0\n", + " \n", + " \n", + " 11\n", + " 12\n", + " 5871\n", + " 38767.0\n", " 2\n", - " 307\n", + " 1\n", + " 2018-04-04 07:46:31+00:00\n", + " 2023-11-04 13:46:59+00:00\n", + " 2040 days 06:00:28\n", + " 167.0\n", + " \n", + " \n", + " 32809\n", + " 63488\n", + " 5851\n", + " 64350.0\n", + " 1\n", + " 1\n", + " 2020-08-18 08:32:57+00:00\n", + " 2022-08-25 13:08:38+00:00\n", + " 737 days 04:35:41\n", + " 5851.0\n", + " \n", + " \n", + " 3708\n", + " 6916\n", + " 5482\n", + " 51489.5\n", + " 2\n", + " 1\n", + " 2018-03-26 11:13:43+00:00\n", + " 2021-08-26 12:49:17+00:00\n", + " 1249 days 01:35:34\n", + " 5481.0\n", + " \n", + " \n", + " 32616\n", + " 63194\n", + " 4507\n", + " 13232.0\n", + " 3\n", + " 1\n", + " 2017-11-28 13:52:15+00:00\n", + " 2022-09-07 12:55:33+00:00\n", + " 1743 days 23:03:18\n", + " 826.0\n", + " \n", + " \n", + " 78\n", + " 81\n", + " 3562\n", + " 38746.0\n", + " 1\n", + " 1\n", + " 2017-01-05 13:04:58+00:00\n", + " 2022-08-30 11:51:34+00:00\n", + " 2062 days 22:46:36\n", + " 3562.0\n", + " \n", + " \n", + " 35295\n", + " 84002\n", + " 3403\n", + " 19830.0\n", + " 4\n", + " 1\n", + " 2021-05-28 10:22:33+00:00\n", + " 2023-11-06 15:59:22+00:00\n", + " 892 days 05:36:49\n", + " 869.0\n", + " \n", + " \n", + " 3377\n", + " 5618\n", + " 3294\n", + " 31684.5\n", + " 1\n", + " 1\n", + " 2018-10-25 11:04:24+00:00\n", + " 2022-02-24 07:47:20+00:00\n", + " 1217 days 20:42:56\n", + " 3294.0\n", + " \n", + " \n", + " 30011\n", + " 59259\n", + " 2591\n", + " 4350.0\n", + " 3\n", + " 1\n", + " 2019-11-25 08:52:48+00:00\n", + " 2023-06-12 14:05:19+00:00\n", + " 1295 days 05:12:31\n", + " 52.0\n", + " \n", + " \n", + " 34937\n", + " 74876\n", + " 2571\n", + " 2600.0\n", + " 2\n", + " 1\n", + " 2018-02-08 12:54:01+00:00\n", + " 2023-10-02 08:13:05+00:00\n", + " 2061 days 19:19:04\n", + " 448.0\n", + " \n", + " \n", + " 270\n", + " 295\n", + " 2570\n", + " 17678.5\n", + " 6\n", + " 1\n", + " 2014-01-24 15:16:17+00:00\n", + " 2023-10-16 10:19:22+00:00\n", + " 3551 days 19:03:05\n", + " 1479.0\n", + " \n", + " \n", + " 866\n", + " 1221\n", + " 2320\n", + " 9652.0\n", + " 2\n", + " 1\n", + " 2017-03-29 08:00:09+00:00\n", + " 2022-09-19 12:55:15+00:00\n", + " 2000 days 04:55:06\n", + " 104.0\n", + " \n", + " \n", + " 1022\n", + " 1429\n", + " 2249\n", + " 3500.0\n", + " 4\n", + " 1\n", + " 2014-12-03 14:56:38+00:00\n", + " 2023-11-06 08:30:37+00:00\n", + " 3259 days 17:33:59\n", + " 690.0\n", + " \n", + " \n", + " 3922\n", + " 7249\n", + " 1827\n", + " 13385.0\n", + " 1\n", + " 1\n", + " 2019-05-07 12:34:56+00:00\n", + " 2021-10-26 12:28:40+00:00\n", + " 902 days 23:53:44\n", + " 1827.0\n", + " \n", + " \n", + " 54425\n", + " 1070539\n", + " 1800\n", + " 19800.0\n", + " 1\n", + " 1\n", + " 2022-05-02 16:09:03+00:00\n", + " 2022-07-25 12:49:27+00:00\n", + " 83 days 20:40:24\n", + " 1800.0\n", + " \n", + " \n", + " 69520\n", + " 1216801\n", + " 1623\n", + " 12562.0\n", + " 2\n", + " 0\n", + " 2023-06-16 14:16:04+00:00\n", + " 2023-09-29 16:34:38+00:00\n", + " 105 days 02:18:34\n", + " 0.0\n", + " \n", + " \n", + " 30056\n", + " 59330\n", + " 1551\n", " 0.0\n", " 1\n", " 0\n", - " 2018-04-07 12:55:07+00:00\n", - " 2020-03-08 12:06:43+00:00\n", - " 700 days 23:11:36\n", + " 2018-02-02 08:53:51+00:00\n", + " 2023-11-06 10:22:14+00:00\n", + " 2103 days 01:28:23\n", " 0.0\n", " \n", " \n", - " 2\n", + " 3243\n", + " 5441\n", + " 1544\n", + " 14133.0\n", + " 2\n", + " 1\n", + " 2017-12-14 12:50:23+00:00\n", + " 2022-09-22 08:21:47+00:00\n", + " 1742 days 19:31:24\n", + " 1384.0\n", + " \n", + " \n", + " 55195\n", + " 1084435\n", + " 1500\n", + " 16500.0\n", + " 1\n", + " 1\n", + " 2022-05-18 08:04:41+00:00\n", + " 2022-09-27 14:32:13+00:00\n", + " 132 days 06:27:32\n", + " 1500.0\n", + " \n", + " \n", + " 28983\n", + " 57816\n", + " 1485\n", + " 0.0\n", + " 2\n", + " 1\n", + " 2019-01-21 14:19:18+00:00\n", + " 2023-05-22 07:30:55+00:00\n", + " 1581 days 17:11:37\n", + " 357.0\n", + " \n", + " \n", + " 2231\n", + " 2942\n", + " 1307\n", + " 100.0\n", + " 2\n", + " 1\n", + " 2017-10-25 15:06:58+00:00\n", + " 2023-06-29 09:33:58+00:00\n", + " 2072 days 18:27:00\n", + " 676.0\n", + " \n", + " \n", + " 23\n", + " 24\n", + " 1266\n", + " 0.0\n", + " 2\n", + " 1\n", + " 2015-09-30 16:07:52+00:00\n", + " 2023-10-19 07:20:48+00:00\n", + " 2940 days 15:12:56\n", + " 556.0\n", + " \n", + " \n", + " 4513\n", + " 9592\n", + " 1211\n", + " 62.0\n", + " 4\n", + " 1\n", + " 2018-02-25 07:17:19+00:00\n", + " 2023-10-17 09:39:40+00:00\n", + " 2060 days 02:22:21\n", + " 353.0\n", + " \n", + " \n", + " 2936\n", + " 5059\n", + " 1186\n", + " 6308.0\n", " 3\n", - " 6\n", - " 110.0\n", " 1\n", - " 1\n", - " 2019-09-19 15:15:01+00:00\n", - " 2023-09-27 09:13:09+00:00\n", - " 1468 days 17:58:08\n", - " 6.0\n", + " 2018-02-01 11:16:51+00:00\n", + " 2023-05-22 13:41:22+00:00\n", + " 1936 days 02:24:31\n", + " 1182.0\n", " \n", " \n", - " 3\n", - " 4\n", - " 4\n", - " 41.0\n", + " 11484\n", + " 25100\n", + " 1123\n", + " 0.0\n", " 1\n", " 1\n", - " 2019-09-19 15:43:49+00:00\n", - " 2021-09-02 18:42:19+00:00\n", - " 714 days 02:58:30\n", - " 4.0\n", + " 2015-12-21 15:38:05+00:00\n", + " 2021-07-13 07:39:57+00:00\n", + " 2030 days 16:01:52\n", + " 1123.0\n", " \n", " \n", - " 4\n", - " 5\n", - " 2\n", - " 19.0\n", - " 1\n", - " 1\n", - " 2019-09-19 15:45:36+00:00\n", - " 2019-09-19 15:45:36+00:00\n", - " 0 days 00:00:00\n", - " 2.0\n", - " \n", - " \n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " \n", - " \n", - " 73513\n", - " 1256133\n", + " 934\n", + " 1326\n", + " 1098\n", + " 798.0\n", " 3\n", - " 33.0\n", " 1\n", - " 1\n", - " 2023-11-08 16:51:19+00:00\n", - " 2023-11-08 16:51:19+00:00\n", - " 0 days 00:00:00\n", - " 3.0\n", + " 2018-02-13 13:13:48+00:00\n", + " 2023-02-01 08:39:45+00:00\n", + " 1813 days 19:25:57\n", + " 266.0\n", " \n", " \n", - " 73514\n", - " 1256134\n", - " 4\n", - " 44.0\n", + " 30156\n", + " 59490\n", + " 1088\n", + " 0.0\n", " 1\n", - " 1\n", - " 2023-11-08 17:17:51+00:00\n", - " 2023-11-08 17:17:51+00:00\n", - " 0 days 00:00:00\n", - " 4.0\n", + " 0\n", + " 2019-12-06 12:59:20+00:00\n", + " 2023-10-05 08:23:50+00:00\n", + " 1398 days 19:24:30\n", + " 0.0\n", " \n", " \n", - " 73515\n", - " 1256135\n", - " 1\n", - " 11.0\n", - " 1\n", - " 1\n", - " 2023-11-08 17:23:54+00:00\n", - " 2023-11-08 17:23:54+00:00\n", - " 0 days 00:00:00\n", - " 1.0\n", - " \n", - " \n", - " 73516\n", - " 1256136\n", + " 36478\n", + " 251268\n", + " 1086\n", + " 0.0\n", " 2\n", - " 22.0\n", " 1\n", - " 1\n", - " 2023-11-08 18:32:18+00:00\n", - " 2023-11-08 18:32:18+00:00\n", - " 0 days 00:00:00\n", - " 2.0\n", - " \n", - " \n", - " 73517\n", - " 1256137\n", - " 2\n", - " 22.0\n", - " 1\n", - " 1\n", - " 2023-11-08 19:30:28+00:00\n", - " 2023-11-08 19:30:28+00:00\n", - " 0 days 00:00:00\n", - " 2.0\n", + " 2018-02-02 09:06:22+00:00\n", + " 2023-06-30 07:22:46+00:00\n", + " 1973 days 22:16:24\n", + " 279.0\n", " \n", " \n", "\n", - "

73518 rows × 9 columns

\n", "" ], "text/plain": [ " customer_id nb_tickets total_amount nb_suppliers \\\n", "0 1 1256574 8830567.5 7 \n", - "1 2 307 0.0 1 \n", - "2 3 6 110.0 1 \n", - "3 4 4 41.0 1 \n", - "4 5 2 19.0 1 \n", - "... ... ... ... ... \n", - "73513 1256133 3 33.0 1 \n", - "73514 1256134 4 44.0 1 \n", - "73515 1256135 1 11.0 1 \n", - "73516 1256136 2 22.0 1 \n", - "73517 1256137 2 22.0 1 \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", " vente_internet_max purchase_date_min purchase_date_max \\\n", "0 1 2013-06-10 10:37:58+00:00 2023-11-08 15:59:45+00:00 \n", - "1 0 2018-04-07 12:55:07+00:00 2020-03-08 12:06:43+00:00 \n", - "2 1 2019-09-19 15:15:01+00:00 2023-09-27 09:13:09+00:00 \n", - "3 1 2019-09-19 15:43:49+00:00 2021-09-02 18:42:19+00:00 \n", - "4 1 2019-09-19 15:45:36+00:00 2019-09-19 15:45:36+00:00 \n", - "... ... ... ... \n", - "73513 1 2023-11-08 16:51:19+00:00 2023-11-08 16:51:19+00:00 \n", - "73514 1 2023-11-08 17:17:51+00:00 2023-11-08 17:17:51+00:00 \n", - "73515 1 2023-11-08 17:23:54+00:00 2023-11-08 17:23:54+00:00 \n", - "73516 1 2023-11-08 18:32:18+00:00 2023-11-08 18:32:18+00:00 \n", - "73517 1 2023-11-08 19:30:28+00:00 2023-11-08 19:30:28+00:00 \n", + "3615 1 2015-09-09 13:48:38+00:00 2023-11-03 09:42:40+00:00 \n", + "39 1 2014-01-23 16:56:57+00:00 2023-10-25 09:13:16+00:00 \n", + "11 1 2018-04-04 07:46:31+00:00 2023-11-04 13:46:59+00:00 \n", + "32809 1 2020-08-18 08:32:57+00:00 2022-08-25 13:08:38+00:00 \n", + "3708 1 2018-03-26 11:13:43+00:00 2021-08-26 12:49:17+00:00 \n", + "32616 1 2017-11-28 13:52:15+00:00 2022-09-07 12:55:33+00:00 \n", + "78 1 2017-01-05 13:04:58+00:00 2022-08-30 11:51:34+00:00 \n", + "35295 1 2021-05-28 10:22:33+00:00 2023-11-06 15:59:22+00:00 \n", + "3377 1 2018-10-25 11:04:24+00:00 2022-02-24 07:47:20+00:00 \n", + "30011 1 2019-11-25 08:52:48+00:00 2023-06-12 14:05:19+00:00 \n", + "34937 1 2018-02-08 12:54:01+00:00 2023-10-02 08:13:05+00:00 \n", + "270 1 2014-01-24 15:16:17+00:00 2023-10-16 10:19:22+00:00 \n", + "866 1 2017-03-29 08:00:09+00:00 2022-09-19 12:55:15+00:00 \n", + "1022 1 2014-12-03 14:56:38+00:00 2023-11-06 08:30:37+00:00 \n", + "3922 1 2019-05-07 12:34:56+00:00 2021-10-26 12:28:40+00:00 \n", + "54425 1 2022-05-02 16:09:03+00:00 2022-07-25 12:49:27+00:00 \n", + "69520 0 2023-06-16 14:16:04+00:00 2023-09-29 16:34:38+00:00 \n", + "30056 0 2018-02-02 08:53:51+00:00 2023-11-06 10:22:14+00:00 \n", + "3243 1 2017-12-14 12:50:23+00:00 2022-09-22 08:21:47+00:00 \n", + "55195 1 2022-05-18 08:04:41+00:00 2022-09-27 14:32:13+00:00 \n", + "28983 1 2019-01-21 14:19:18+00:00 2023-05-22 07:30:55+00:00 \n", + "2231 1 2017-10-25 15:06:58+00:00 2023-06-29 09:33:58+00:00 \n", + "23 1 2015-09-30 16:07:52+00:00 2023-10-19 07:20:48+00:00 \n", + "4513 1 2018-02-25 07:17:19+00:00 2023-10-17 09:39:40+00:00 \n", + "2936 1 2018-02-01 11:16:51+00:00 2023-05-22 13:41:22+00:00 \n", + "11484 1 2015-12-21 15:38:05+00:00 2021-07-13 07:39:57+00:00 \n", + "934 1 2018-02-13 13:13:48+00:00 2023-02-01 08:39:45+00:00 \n", + "30156 0 2019-12-06 12:59:20+00:00 2023-10-05 08:23:50+00:00 \n", + "36478 1 2018-02-02 09:06:22+00:00 2023-06-30 07:22:46+00:00 \n", "\n", " time_between_purchase nb_tickets_internet \n", "0 3803 days 05:21:47 3053.0 \n", - "1 700 days 23:11:36 0.0 \n", - "2 1468 days 17:58:08 6.0 \n", - "3 714 days 02:58:30 4.0 \n", - "4 0 days 00:00:00 2.0 \n", - "... ... ... \n", - "73513 0 days 00:00:00 3.0 \n", - "73514 0 days 00:00:00 4.0 \n", - "73515 0 days 00:00:00 1.0 \n", - "73516 0 days 00:00:00 2.0 \n", - "73517 0 days 00:00:00 2.0 \n", - "\n", - "[73518 rows x 9 columns]" + "3615 2976 days 19:54:02 30896.0 \n", + "39 3561 days 16:16:19 13993.0 \n", + "11 2040 days 06:00:28 167.0 \n", + "32809 737 days 04:35:41 5851.0 \n", + "3708 1249 days 01:35:34 5481.0 \n", + "32616 1743 days 23:03:18 826.0 \n", + "78 2062 days 22:46:36 3562.0 \n", + "35295 892 days 05:36:49 869.0 \n", + "3377 1217 days 20:42:56 3294.0 \n", + "30011 1295 days 05:12:31 52.0 \n", + "34937 2061 days 19:19:04 448.0 \n", + "270 3551 days 19:03:05 1479.0 \n", + "866 2000 days 04:55:06 104.0 \n", + "1022 3259 days 17:33:59 690.0 \n", + "3922 902 days 23:53:44 1827.0 \n", + "54425 83 days 20:40:24 1800.0 \n", + "69520 105 days 02:18:34 0.0 \n", + "30056 2103 days 01:28:23 0.0 \n", + "3243 1742 days 19:31:24 1384.0 \n", + "55195 132 days 06:27:32 1500.0 \n", + "28983 1581 days 17:11:37 357.0 \n", + "2231 2072 days 18:27:00 676.0 \n", + "23 2940 days 15:12:56 556.0 \n", + "4513 2060 days 02:22:21 353.0 \n", + "2936 1936 days 02:24:31 1182.0 \n", + "11484 2030 days 16:01:52 1123.0 \n", + "934 1813 days 19:25:57 266.0 \n", + "30156 1398 days 19:24:30 0.0 \n", + "36478 1973 days 22:16:24 279.0 " ] }, - "execution_count": 76, + "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "df1_tickets_kpi" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "de1ecf15-1aa1-4aa2-9467-8ad8e9be5856", - "metadata": {}, - "outputs": [], - "source": [ - " df_tickets_information_copy = df1_products_purchased_reduced.copy()\n", - "\n", - " # Dummy : Canal de vente en ligne\n", - " liste_mots = ['en ligne', 'internet', 'web', 'net', 'vad', 'online'] # vad = vente à distance\n", - " df_tickets_information_copy['vente_internet'] = df_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 = df_tickets_information_copy[df_tickets_information_copy['vente_internet'] == 1].groupby('customer_id')['ticket_id'].count().reset_index()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "9cd36178-11dc-409c-b148-fb1d208c2faf", - "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", - "
customer_idticket_id
013053
136
244
352
462
.........
5674412561333
5674512561344
5674612561351
5674712561362
5674812561372
\n", - "

56749 rows × 2 columns

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

1826672 rows × 14 columns

\n", "" ], "text/plain": [ - " ticket_id customer_id event_type_id supplier_name \\\n", - "0 13070859 48187 4 vente en ligne \n", - "1 13070855 48187 4 vente en ligne \n", - "2 13070856 48187 4 vente en ligne \n", - "3 13070857 48187 4 vente en ligne \n", - "4 13070858 48187 4 vente en ligne \n", - "... ... ... ... ... \n", - "1826667 18643494 81 4 vad \n", - "1826668 18643495 81 4 vad \n", - "1826669 18643496 81 4 vad \n", - "1826670 18643497 81 4 vad \n", - "1826671 19853111 62763 4 vad \n", + " ticket_id customer_id event_type_id supplier_name \\\n", + "0 13070859 48187 4 vente en ligne \n", + "1 13070855 48187 4 vente en ligne \n", + "2 13070856 48187 4 vente en ligne \n", + "3 13070857 48187 4 vente en ligne \n", + "4 13070858 48187 4 vente en ligne \n", "\n", - " purchase_date type_of_ticket_name amount \\\n", - "0 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "1 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "2 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "3 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "4 2018-12-28 14:47:50+00:00 Atelier 8.0 \n", - "... ... ... ... \n", - "1826667 2022-08-02 12:18:16+00:00 Billet en nombre 11.0 \n", - "1826668 2022-08-02 12:18:16+00:00 Billet en nombre 11.0 \n", - "1826669 2022-08-02 12:18:16+00:00 Billet en nombre 11.0 \n", - "1826670 2022-08-02 12:18:16+00:00 Billet en nombre 11.0 \n", - "1826671 2022-11-04 14:25:42+00:00 Billet en nombre 0.0 \n", + " purchase_date type_of_ticket_name amount children \\\n", + "0 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", + "1 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", + "2 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", + "3 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", + "4 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", "\n", - " children is_full_price name_event_types name_facilities \\\n", - "0 pricing_formula False spectacle vivant mucem \n", - "1 pricing_formula False spectacle vivant mucem \n", - "2 pricing_formula False spectacle vivant mucem \n", - "3 pricing_formula False spectacle vivant mucem \n", - "4 pricing_formula False spectacle vivant mucem \n", - "... ... ... ... ... \n", - "1826667 pricing_formula False spectacle vivant mucem \n", - "1826668 pricing_formula False spectacle vivant mucem \n", - "1826669 pricing_formula False spectacle vivant mucem \n", - "1826670 pricing_formula False spectacle vivant mucem \n", - "1826671 pricing_formula False spectacle vivant mucem \n", + " is_full_price name_event_types name_facilities name_categories \\\n", + "0 False spectacle vivant mucem indiv prog enfant \n", + "1 False spectacle vivant mucem indiv prog enfant \n", + "2 False spectacle vivant mucem indiv prog enfant \n", + "3 False spectacle vivant mucem indiv prog enfant \n", + "4 False spectacle vivant mucem indiv prog enfant \n", "\n", - " name_categories name_events name_seasons \n", - "0 indiv prog enfant l'école des magiciens 2018 \n", - "1 indiv prog enfant l'école des magiciens 2018 \n", - "2 indiv prog enfant l'école des magiciens 2018 \n", - "3 indiv prog enfant l'école des magiciens 2018 \n", - "4 indiv prog enfant l'école des magiciens 2018 \n", - "... ... ... ... \n", - "1826667 en nb entrées tr NaN 2022 \n", - "1826668 en nb entrées tr NaN 2022 \n", - "1826669 en nb entrées tr NaN 2022 \n", - "1826670 en nb entrées tr NaN 2022 \n", - "1826671 indiv entrées gr NaN 2022 \n", - "\n", - "[1826672 rows x 14 columns]" + " name_events name_seasons \n", + "0 l'école des magiciens 2018 \n", + "1 l'école des magiciens 2018 \n", + "2 l'école des magiciens 2018 \n", + "3 l'école des magiciens 2018 \n", + "4 l'école des magiciens 2018 " ] }, - "execution_count": 33, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Importance des suppliers\n", - "df1_products_purchased_reduced" + "df1_products_purchased_reduced.head()" ] }, { @@ -2291,7 +2169,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 82, "id": "043303fe-e90f-4689-a2a9-5d690555a045", "metadata": {}, "outputs": [], @@ -2305,11 +2183,11 @@ " tickets_information_copy['vente_internet'] = tickets_information_copy['supplier_name'].str.contains('|'.join(liste_mots), case=False).astype(int)\n", "\n", " # Proportion de vente en ligne\n", - " prop_vente_internet = tickets_information_copy[tickets_information_copy['vente_internet'] == 1].groupby('customer_id')['ticket_id'].count().reset_index()\n", + " prop_vente_internet = tickets_information_copy[tickets_information_copy['vente_internet'] == 1].groupby(['customer_id', 'event_type_id'])['ticket_id'].count().reset_index()\n", " prop_vente_internet.rename(columns = {'ticket_id' : 'nb_tickets_internet'}, inplace = True)\n", " \n", " tickets_kpi = (tickets_information_copy[['event_type_id', 'customer_id', 'ticket_id','supplier_name', 'purchase_date', 'amount', 'vente_internet']]\n", - " .groupby([ 'customer_id']) # 'event_type_id',\n", + " .groupby(['customer_id', 'event_type_id']) \n", " .agg({'ticket_id': 'count', \n", " 'amount' : 'sum',\n", " 'supplier_name': 'nunique',\n", @@ -2322,11 +2200,12 @@ " tickets_kpi.rename(columns = {'ticket_id_count' : 'nb_tickets', \n", " 'amount_sum' : 'total_amount',\n", " 'supplier_name_nunique' : 'nb_suppliers', \n", - " 'customer_id_' : 'customer_id'}, inplace = True)\n", + " 'customer_id_' : 'customer_id',\n", + " 'event_type_id_' : 'event_type_id'}, inplace = True)\n", " \n", " tickets_kpi['time_between_purchase'] = tickets_kpi['purchase_date_max'] - tickets_kpi['purchase_date_min']\n", "\n", - " tickets_kpi = tickets_kpi.merge(prop_vente_internet, on = 'customer_id', how = 'left')\n", + " tickets_kpi = tickets_kpi.merge(prop_vente_internet, on = ['customer_id', 'event_type_id'], how = 'left')\n", " tickets_kpi['nb_tickets_internet'] = tickets_kpi['nb_tickets_internet'].fillna(0)\n", " \n", " return tickets_kpi\n", @@ -2335,7 +2214,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 83, "id": "5882234a-1ed5-4269-87a6-0d75613476e3", "metadata": {}, "outputs": [], @@ -2343,9 +2222,33 @@ "df1_tickets_kpi = tickets_kpi_function(tickets_information = df1_products_purchased_reduced)" ] }, + { + "cell_type": "markdown", + "id": "597b241e-a83d-4b7c-8ad7-eec50295dff2", + "metadata": {}, + "source": [ + "#### Exportation" + ] + }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 92, + "id": "a4a2311d-8a72-4030-afd5-218004d5d2a5", + "metadata": {}, + "outputs": [], + "source": [ + "# Exportation vers 'projet-bdc2324-team1'\n", + "BUCKET_OUT = \"projet-bdc2324-team1\"\n", + "FILE_KEY_OUT_S3 = \"0_Temp/Company 1 - Purchasing behaviour.csv\"\n", + "FILE_PATH_OUT_S3 = BUCKET_OUT + \"/\" + FILE_KEY_OUT_S3\n", + "\n", + "with fs.open(FILE_PATH_OUT_S3, 'w') as file_out:\n", + " df1_tickets_kpi.to_csv(file_out)" + ] + }, + { + "cell_type": "code", + "execution_count": 84, "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", "metadata": {}, "outputs": [ @@ -2371,6 +2274,7 @@ " \n", " \n", " customer_id\n", + " event_type_id\n", " nb_tickets\n", " total_amount\n", " nb_suppliers\n", @@ -2383,474 +2287,104 @@ " \n", " \n", " \n", + " 1\n", + " 1\n", + " 4\n", + " 453242\n", + " 3248965.5\n", + " 6\n", + " 1\n", + " 2013-09-23 14:45:01+00:00\n", + " 2023-11-03 14:11:01+00:00\n", + " 3692 days 23:26:00\n", + " 2988.0\n", + " \n", + " \n", " 0\n", " 1\n", - " 1256574\n", - " 8830567.5\n", + " 2\n", + " 384226\n", + " 2686540.5\n", " 7\n", " 1\n", + " 2014-12-03 14:55:37+00:00\n", + " 2023-11-04 15:12:16+00:00\n", + " 3258 days 00:16:39\n", + " 51.0\n", + " \n", + " \n", + " 3\n", + " 1\n", + " 6\n", + " 217356\n", + " 1435871.5\n", + " 5\n", + " 1\n", + " 2017-01-01 02:20:08+00:00\n", + " 2019-12-31 02:20:06+00:00\n", + " 1093 days 23:59:58\n", + " 5.0\n", + " \n", + " \n", + " 2\n", + " 1\n", + " 5\n", + " 201750\n", + " 1459190.0\n", + " 6\n", + " 1\n", " 2013-06-10 10:37:58+00:00\n", " 2023-11-08 15:59:45+00:00\n", " 3803 days 05:21:47\n", - " 3053.0\n", + " 9.0\n", " \n", " \n", - " 3615\n", + " 5032\n", " 6733\n", - " 35527\n", - " 1188.0\n", - " 4\n", - " 1\n", - " 2015-09-09 13:48:38+00:00\n", - " 2023-11-03 09:42:40+00:00\n", - " 2976 days 19:54:02\n", - " 30896.0\n", - " \n", - " \n", - " 39\n", - " 41\n", - " 16263\n", - " 37642.0\n", " 6\n", - " 1\n", - " 2014-01-23 16:56:57+00:00\n", - " 2023-10-25 09:13:16+00:00\n", - " 3561 days 16:16:19\n", - " 13993.0\n", - " \n", - " \n", - " 11\n", - " 12\n", - " 5871\n", - " 38767.0\n", - " 2\n", - " 1\n", - " 2018-04-04 07:46:31+00:00\n", - " 2023-11-04 13:46:59+00:00\n", - " 2040 days 06:00:28\n", - " 167.0\n", - " \n", - " \n", - " 32809\n", - " 63488\n", - " 5851\n", - " 64350.0\n", - " 1\n", - " 1\n", - " 2020-08-18 08:32:57+00:00\n", - " 2022-08-25 13:08:38+00:00\n", - " 737 days 04:35:41\n", - " 5851.0\n", - " \n", - " \n", - " 3708\n", - " 6916\n", - " 5482\n", - " 51489.5\n", - " 2\n", - " 1\n", - " 2018-03-26 11:13:43+00:00\n", - " 2021-08-26 12:49:17+00:00\n", - " 1249 days 01:35:34\n", - " 5481.0\n", - " \n", - " \n", - " 32616\n", - " 63194\n", - " 4507\n", - " 13232.0\n", + " 14208\n", + " 0.0\n", " 3\n", " 1\n", - " 2017-11-28 13:52:15+00:00\n", - " 2022-09-07 12:55:33+00:00\n", - " 1743 days 23:03:18\n", - " 826.0\n", - " \n", - " \n", - " 78\n", - " 81\n", - " 3562\n", - " 38746.0\n", - " 1\n", - " 1\n", - " 2017-01-05 13:04:58+00:00\n", - " 2022-08-30 11:51:34+00:00\n", - " 2062 days 22:46:36\n", - " 3562.0\n", - " \n", - " \n", - " 35295\n", - " 84002\n", - " 3403\n", - " 19830.0\n", - " 4\n", - " 1\n", - " 2021-05-28 10:22:33+00:00\n", - " 2023-11-06 15:59:22+00:00\n", - " 892 days 05:36:49\n", - " 869.0\n", - " \n", - " \n", - " 3377\n", - " 5618\n", - " 3294\n", - " 31684.5\n", - " 1\n", - " 1\n", - " 2018-10-25 11:04:24+00:00\n", - " 2022-02-24 07:47:20+00:00\n", - " 1217 days 20:42:56\n", - " 3294.0\n", - " \n", - " \n", - " 30011\n", - " 59259\n", - " 2591\n", - " 4350.0\n", - " 3\n", - " 1\n", - " 2019-11-25 08:52:48+00:00\n", - " 2023-06-12 14:05:19+00:00\n", - " 1295 days 05:12:31\n", - " 52.0\n", - " \n", - " \n", - " 34937\n", - " 74876\n", - " 2571\n", - " 2600.0\n", - " 2\n", - " 1\n", - " 2018-02-08 12:54:01+00:00\n", - " 2023-10-02 08:13:05+00:00\n", - " 2061 days 19:19:04\n", - " 448.0\n", - " \n", - " \n", - " 270\n", - " 295\n", - " 2570\n", - " 17678.5\n", - " 6\n", - " 1\n", - " 2014-01-24 15:16:17+00:00\n", - " 2023-10-16 10:19:22+00:00\n", - " 3551 days 19:03:05\n", - " 1479.0\n", - " \n", - " \n", - " 866\n", - " 1221\n", - " 2320\n", - " 9652.0\n", - " 2\n", - " 1\n", - " 2017-03-29 08:00:09+00:00\n", - " 2022-09-19 12:55:15+00:00\n", - " 2000 days 04:55:06\n", - " 104.0\n", - " \n", - " \n", - " 1022\n", - " 1429\n", - " 2249\n", - " 3500.0\n", - " 4\n", - " 1\n", - " 2014-12-03 14:56:38+00:00\n", - " 2023-11-06 08:30:37+00:00\n", - " 3259 days 17:33:59\n", - " 690.0\n", - " \n", - " \n", - " 3922\n", - " 7249\n", - " 1827\n", - " 13385.0\n", - " 1\n", - " 1\n", - " 2019-05-07 12:34:56+00:00\n", - " 2021-10-26 12:28:40+00:00\n", - " 902 days 23:53:44\n", - " 1827.0\n", - " \n", - " \n", - " 54425\n", - " 1070539\n", - " 1800\n", - " 19800.0\n", - " 1\n", - " 1\n", - " 2022-05-02 16:09:03+00:00\n", - " 2022-07-25 12:49:27+00:00\n", - " 83 days 20:40:24\n", - " 1800.0\n", - " \n", - " \n", - " 69520\n", - " 1216801\n", - " 1623\n", - " 12562.0\n", - " 2\n", - " 0\n", - " 2023-06-16 14:16:04+00:00\n", - " 2023-09-29 16:34:38+00:00\n", - " 105 days 02:18:34\n", - " 0.0\n", - " \n", - " \n", - " 30056\n", - " 59330\n", - " 1551\n", - " 0.0\n", - " 1\n", - " 0\n", - " 2018-02-02 08:53:51+00:00\n", - " 2023-11-06 10:22:14+00:00\n", - " 2103 days 01:28:23\n", - " 0.0\n", - " \n", - " \n", - " 3243\n", - " 5441\n", - " 1544\n", - " 14133.0\n", - " 2\n", - " 1\n", - " 2017-12-14 12:50:23+00:00\n", - " 2022-09-22 08:21:47+00:00\n", - " 1742 days 19:31:24\n", - " 1384.0\n", - " \n", - " \n", - " 55195\n", - " 1084435\n", - " 1500\n", - " 16500.0\n", - " 1\n", - " 1\n", - " 2022-05-18 08:04:41+00:00\n", - " 2022-09-27 14:32:13+00:00\n", - " 132 days 06:27:32\n", - " 1500.0\n", - " \n", - " \n", - " 28983\n", - " 57816\n", - " 1485\n", - " 0.0\n", - " 2\n", - " 1\n", - " 2019-01-21 14:19:18+00:00\n", - " 2023-05-22 07:30:55+00:00\n", - " 1581 days 17:11:37\n", - " 357.0\n", - " \n", - " \n", - " 2231\n", - " 2942\n", - " 1307\n", - " 100.0\n", - " 2\n", - " 1\n", - " 2017-10-25 15:06:58+00:00\n", - " 2023-06-29 09:33:58+00:00\n", - " 2072 days 18:27:00\n", - " 676.0\n", - " \n", - " \n", - " 23\n", - " 24\n", - " 1266\n", - " 0.0\n", - " 2\n", - " 1\n", - " 2015-09-30 16:07:52+00:00\n", - " 2023-10-19 07:20:48+00:00\n", - " 2940 days 15:12:56\n", - " 556.0\n", - " \n", - " \n", - " 4513\n", - " 9592\n", - " 1211\n", - " 62.0\n", - " 4\n", - " 1\n", - " 2018-02-25 07:17:19+00:00\n", - " 2023-10-17 09:39:40+00:00\n", - " 2060 days 02:22:21\n", - " 353.0\n", - " \n", - " \n", - " 2936\n", - " 5059\n", - " 1186\n", - " 6308.0\n", - " 3\n", - " 1\n", - " 2018-02-01 11:16:51+00:00\n", - " 2023-05-22 13:41:22+00:00\n", - " 1936 days 02:24:31\n", - " 1182.0\n", - " \n", - " \n", - " 11484\n", - " 25100\n", - " 1123\n", - " 0.0\n", - " 1\n", - " 1\n", - " 2015-12-21 15:38:05+00:00\n", - " 2021-07-13 07:39:57+00:00\n", - " 2030 days 16:01:52\n", - " 1123.0\n", - " \n", - " \n", - " 934\n", - " 1326\n", - " 1098\n", - " 798.0\n", - " 3\n", - " 1\n", - " 2018-02-13 13:13:48+00:00\n", - " 2023-02-01 08:39:45+00:00\n", - " 1813 days 19:25:57\n", - " 266.0\n", - " \n", - " \n", - " 30156\n", - " 59490\n", - " 1088\n", - " 0.0\n", - " 1\n", - " 0\n", - " 2019-12-06 12:59:20+00:00\n", - " 2023-10-05 08:23:50+00:00\n", - " 1398 days 19:24:30\n", - " 0.0\n", - " \n", - " \n", - " 36478\n", - " 251268\n", - " 1086\n", - " 0.0\n", - " 2\n", - " 1\n", - " 2018-02-02 09:06:22+00:00\n", - " 2023-06-30 07:22:46+00:00\n", - " 1973 days 22:16:24\n", - " 279.0\n", + " 2017-01-11 15:00:54+00:00\n", + " 2019-11-27 09:47:06+00:00\n", + " 1049 days 18:46:12\n", + " 13497.0\n", " \n", " \n", "\n", "" ], "text/plain": [ - " customer_id nb_tickets total_amount nb_suppliers \\\n", - "0 1 1256574 8830567.5 7 \n", - "3615 6733 35527 1188.0 4 \n", - "39 41 16263 37642.0 6 \n", - "11 12 5871 38767.0 2 \n", - "32809 63488 5851 64350.0 1 \n", - "3708 6916 5482 51489.5 2 \n", - "32616 63194 4507 13232.0 3 \n", - "78 81 3562 38746.0 1 \n", - "35295 84002 3403 19830.0 4 \n", - "3377 5618 3294 31684.5 1 \n", - "30011 59259 2591 4350.0 3 \n", - "34937 74876 2571 2600.0 2 \n", - "270 295 2570 17678.5 6 \n", - "866 1221 2320 9652.0 2 \n", - "1022 1429 2249 3500.0 4 \n", - "3922 7249 1827 13385.0 1 \n", - "54425 1070539 1800 19800.0 1 \n", - "69520 1216801 1623 12562.0 2 \n", - "30056 59330 1551 0.0 1 \n", - "3243 5441 1544 14133.0 2 \n", - "55195 1084435 1500 16500.0 1 \n", - "28983 57816 1485 0.0 2 \n", - "2231 2942 1307 100.0 2 \n", - "23 24 1266 0.0 2 \n", - "4513 9592 1211 62.0 4 \n", - "2936 5059 1186 6308.0 3 \n", - "11484 25100 1123 0.0 1 \n", - "934 1326 1098 798.0 3 \n", - "30156 59490 1088 0.0 1 \n", - "36478 251268 1086 0.0 2 \n", + " customer_id event_type_id nb_tickets total_amount nb_suppliers \\\n", + "1 1 4 453242 3248965.5 6 \n", + "0 1 2 384226 2686540.5 7 \n", + "3 1 6 217356 1435871.5 5 \n", + "2 1 5 201750 1459190.0 6 \n", + "5032 6733 6 14208 0.0 3 \n", "\n", - " vente_internet_max purchase_date_min purchase_date_max \\\n", - "0 1 2013-06-10 10:37:58+00:00 2023-11-08 15:59:45+00:00 \n", - "3615 1 2015-09-09 13:48:38+00:00 2023-11-03 09:42:40+00:00 \n", - "39 1 2014-01-23 16:56:57+00:00 2023-10-25 09:13:16+00:00 \n", - "11 1 2018-04-04 07:46:31+00:00 2023-11-04 13:46:59+00:00 \n", - "32809 1 2020-08-18 08:32:57+00:00 2022-08-25 13:08:38+00:00 \n", - "3708 1 2018-03-26 11:13:43+00:00 2021-08-26 12:49:17+00:00 \n", - "32616 1 2017-11-28 13:52:15+00:00 2022-09-07 12:55:33+00:00 \n", - "78 1 2017-01-05 13:04:58+00:00 2022-08-30 11:51:34+00:00 \n", - "35295 1 2021-05-28 10:22:33+00:00 2023-11-06 15:59:22+00:00 \n", - "3377 1 2018-10-25 11:04:24+00:00 2022-02-24 07:47:20+00:00 \n", - "30011 1 2019-11-25 08:52:48+00:00 2023-06-12 14:05:19+00:00 \n", - "34937 1 2018-02-08 12:54:01+00:00 2023-10-02 08:13:05+00:00 \n", - "270 1 2014-01-24 15:16:17+00:00 2023-10-16 10:19:22+00:00 \n", - "866 1 2017-03-29 08:00:09+00:00 2022-09-19 12:55:15+00:00 \n", - "1022 1 2014-12-03 14:56:38+00:00 2023-11-06 08:30:37+00:00 \n", - "3922 1 2019-05-07 12:34:56+00:00 2021-10-26 12:28:40+00:00 \n", - "54425 1 2022-05-02 16:09:03+00:00 2022-07-25 12:49:27+00:00 \n", - "69520 0 2023-06-16 14:16:04+00:00 2023-09-29 16:34:38+00:00 \n", - "30056 0 2018-02-02 08:53:51+00:00 2023-11-06 10:22:14+00:00 \n", - "3243 1 2017-12-14 12:50:23+00:00 2022-09-22 08:21:47+00:00 \n", - "55195 1 2022-05-18 08:04:41+00:00 2022-09-27 14:32:13+00:00 \n", - "28983 1 2019-01-21 14:19:18+00:00 2023-05-22 07:30:55+00:00 \n", - "2231 1 2017-10-25 15:06:58+00:00 2023-06-29 09:33:58+00:00 \n", - "23 1 2015-09-30 16:07:52+00:00 2023-10-19 07:20:48+00:00 \n", - "4513 1 2018-02-25 07:17:19+00:00 2023-10-17 09:39:40+00:00 \n", - "2936 1 2018-02-01 11:16:51+00:00 2023-05-22 13:41:22+00:00 \n", - "11484 1 2015-12-21 15:38:05+00:00 2021-07-13 07:39:57+00:00 \n", - "934 1 2018-02-13 13:13:48+00:00 2023-02-01 08:39:45+00:00 \n", - "30156 0 2019-12-06 12:59:20+00:00 2023-10-05 08:23:50+00:00 \n", - "36478 1 2018-02-02 09:06:22+00:00 2023-06-30 07:22:46+00:00 \n", + " vente_internet_max purchase_date_min purchase_date_max \\\n", + "1 1 2013-09-23 14:45:01+00:00 2023-11-03 14:11:01+00:00 \n", + "0 1 2014-12-03 14:55:37+00:00 2023-11-04 15:12:16+00:00 \n", + "3 1 2017-01-01 02:20:08+00:00 2019-12-31 02:20:06+00:00 \n", + "2 1 2013-06-10 10:37:58+00:00 2023-11-08 15:59:45+00:00 \n", + "5032 1 2017-01-11 15:00:54+00:00 2019-11-27 09:47:06+00:00 \n", "\n", - " time_between_purchase nb_tickets_internet \n", - "0 3803 days 05:21:47 3053.0 \n", - "3615 2976 days 19:54:02 30896.0 \n", - "39 3561 days 16:16:19 13993.0 \n", - "11 2040 days 06:00:28 167.0 \n", - "32809 737 days 04:35:41 5851.0 \n", - "3708 1249 days 01:35:34 5481.0 \n", - "32616 1743 days 23:03:18 826.0 \n", - "78 2062 days 22:46:36 3562.0 \n", - "35295 892 days 05:36:49 869.0 \n", - "3377 1217 days 20:42:56 3294.0 \n", - "30011 1295 days 05:12:31 52.0 \n", - "34937 2061 days 19:19:04 448.0 \n", - "270 3551 days 19:03:05 1479.0 \n", - "866 2000 days 04:55:06 104.0 \n", - "1022 3259 days 17:33:59 690.0 \n", - "3922 902 days 23:53:44 1827.0 \n", - "54425 83 days 20:40:24 1800.0 \n", - "69520 105 days 02:18:34 0.0 \n", - "30056 2103 days 01:28:23 0.0 \n", - "3243 1742 days 19:31:24 1384.0 \n", - "55195 132 days 06:27:32 1500.0 \n", - "28983 1581 days 17:11:37 357.0 \n", - "2231 2072 days 18:27:00 676.0 \n", - "23 2940 days 15:12:56 556.0 \n", - "4513 2060 days 02:22:21 353.0 \n", - "2936 1936 days 02:24:31 1182.0 \n", - "11484 2030 days 16:01:52 1123.0 \n", - "934 1813 days 19:25:57 266.0 \n", - "30156 1398 days 19:24:30 0.0 \n", - "36478 1973 days 22:16:24 279.0 " + " time_between_purchase nb_tickets_internet \n", + "1 3692 days 23:26:00 2988.0 \n", + "0 3258 days 00:16:39 51.0 \n", + "3 1093 days 23:59:58 5.0 \n", + "2 3803 days 05:21:47 9.0 \n", + "5032 1049 days 18:46:12 13497.0 " ] }, - "execution_count": 77, + "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df1_tickets_kpi.sort_values(by='nb_tickets', ascending=False).head(30)" + "df1_tickets_kpi.sort_values(by='nb_tickets', ascending=False).head(5)" ] }, { @@ -2882,19 +2416,6 @@ "df1_customer.head()" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "b5c4418c-ad2e-4bb9-bd5c-3b769e9c87d4", - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option('display.max_columns', None)\n", - "\n", - "\n", - "df1_customer[df1_customer['customer_id'] == 1]" - ] - }, { "cell_type": "code", "execution_count": null, From 335c798a6555a0bee866db80f0721d0b336e5e57 Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 18:37:38 +0000 Subject: [PATCH 05/11] Ajout notebook pour statistiques descriptives --- 1_Descriptive_Statistics.ipynb | 229 +++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 1_Descriptive_Statistics.ipynb diff --git a/1_Descriptive_Statistics.ipynb b/1_Descriptive_Statistics.ipynb new file mode 100644 index 0000000..0eefa74 --- /dev/null +++ b/1_Descriptive_Statistics.ipynb @@ -0,0 +1,229 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3f41343f-7205-41d9-89dd-88039e301413", + "metadata": {}, + "source": [ + "# Statistiques descriptives" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "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" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7fb72fa3-7940-496f-ac78-c2837f65eefa", + "metadata": {}, + "outputs": [], + "source": [ + "# Access Key to Minio\n", + "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': 'https://'+'minio-simple.lab.groupe-genes.fr'},key ='WKTGH4YGUBAT3TR0OSUR', secret = 'g8ozi6ZUrBy8DzaAip4F7zOizbr4DKf4RgYNseqU', token = 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJXS1RHSDRZR1VCQVQzVFIwT1NVUiIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9vbnl4aWEubGFiLmdyb3VwZS1nZW5lcy5mciJdLCJhdWQiOlsibWluaW8iLCJhY2NvdW50Il0sImF1dGhfdGltZSI6MTcwNzU4NjUwMCwiYXpwIjoib255eGlhLW1pbmlvIiwiZW1haWwiOiJhbnRvaW5lLmpvdWJyZWxAZW5zYWUuZnIiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzA3NjczMDQ3LCJmYW1pbHlfbmFtZSI6IkpPVUJSRUwiLCJnaXZlbl9uYW1lIjoiQW50b2luZSIsImdyb3VwcyI6WyJiZGMyMzI0LXRlYW0xIl0sImlhdCI6MTcwNzU4NjY0NywiaXNzIjoiaHR0cHM6Ly9hdXRoLmdyb3VwZS1nZW5lcy5mci9yZWFsbXMvZ2VuZXMiLCJqdGkiOiI1MjQ2MDZmMS1lYWM3LTQxZDgtYTEzMy04MGZjMDk0MGVlNzEiLCJuYW1lIjoiQW50b2luZSBKT1VCUkVMIiwicG9saWN5Ijoic3Rzb25seSIsInByZWZlcnJlZF91c2VybmFtZSI6ImFqb3VicmVsLWVuc2FlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwiZGVmYXVsdC1yb2xlcy1nZW5lcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsInNlc3Npb25fc3RhdGUiOiI1OTk2MWNkYy0xNmFiLTQ4MTAtYWE4Zi1iZGUyMjkwNjhiNzUiLCJzaWQiOiI1OTk2MWNkYy0xNmFiLTQ4MTAtYWE4Zi1iZGUyMjkwNjhiNzUiLCJzdWIiOiIwNWYwZDk3Mi1jNWM4LTQyNmYtODAwZC00NmQ0OGU4NjkwMzUiLCJ0eXAiOiJCZWFyZXIifQ.-imw-N4bk1uCcQGobkxhsRoeBAqxC9rT7PifElbC7ODOStnwIulc7HRR2fmtiqI2PdyrfnVvzfmIPK1g056HbA')" + ] + }, + { + "cell_type": "markdown", + "id": "45d5261f-4d46-49cb-8582-dd2121122b05", + "metadata": {}, + "source": [ + "# 1 - Comportement d'achat" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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": 12, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0customer_idevent_type_idnb_ticketstotal_amountnb_suppliersvente_internet_maxpurchase_date_minpurchase_date_maxtime_between_purchasenb_tickets_internet
00123842262686540.5712014-12-03 14:55:37+00:002023-11-04 15:12:16+00:003258 days 00:16:3951.0
11144532423248965.5612013-09-23 14:45:01+00:002023-11-03 14:11:01+00:003692 days 23:26:002988.0
22152017501459190.0612013-06-10 10:37:58+00:002023-11-08 15:59:45+00:003803 days 05:21:479.0
33162173561435871.5512017-01-01 02:20:08+00:002019-12-31 02:20:06+00:001093 days 23:59:585.0
44221430.0102018-04-07 12:55:07+00:002020-03-08 12:06:43+00:00700 days 23:11:360.0
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 customer_id event_type_id nb_tickets total_amount \\\n", + "0 0 1 2 384226 2686540.5 \n", + "1 1 1 4 453242 3248965.5 \n", + "2 2 1 5 201750 1459190.0 \n", + "3 3 1 6 217356 1435871.5 \n", + "4 4 2 2 143 0.0 \n", + "\n", + " nb_suppliers vente_internet_max purchase_date_min \\\n", + "0 7 1 2014-12-03 14:55:37+00:00 \n", + "1 6 1 2013-09-23 14:45:01+00:00 \n", + "2 6 1 2013-06-10 10:37:58+00:00 \n", + "3 5 1 2017-01-01 02:20:08+00:00 \n", + "4 1 0 2018-04-07 12:55:07+00:00 \n", + "\n", + " purchase_date_max time_between_purchase nb_tickets_internet \n", + "0 2023-11-04 15:12:16+00:00 3258 days 00:16:39 51.0 \n", + "1 2023-11-03 14:11:01+00:00 3692 days 23:26:00 2988.0 \n", + "2 2023-11-08 15:59:45+00:00 3803 days 05:21:47 9.0 \n", + "3 2019-12-31 02:20:06+00:00 1093 days 23:59:58 5.0 \n", + "4 2020-03-08 12:06:43+00:00 700 days 23:11:36 0.0 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tickets_kpi.head()" + ] + } + ], + "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 +} From 071b9fda3685ce03e6cbceff0203da35733e20b0 Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 18:43:11 +0000 Subject: [PATCH 06/11] Modification de l'exportation --- 0_Cleaning_and_merge.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index 89910f7..68efb55 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -2232,7 +2232,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 94, "id": "a4a2311d-8a72-4030-afd5-218004d5d2a5", "metadata": {}, "outputs": [], @@ -2243,7 +2243,7 @@ "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)" + " df1_tickets_kpi.to_csv(file_out, index = False)" ] }, { From 5f02915ae99daeee25f8aba304c85f3f87d6775b Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 18:53:59 +0000 Subject: [PATCH 07/11] Ajout travail Alexis --- 0_Cleaning_and_merge.ipynb | 766 +++++++++++++++++++++++++++++++++++++ 1 file changed, 766 insertions(+) diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index 68efb55..be348ed 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -1759,6 +1759,772 @@ "# Construction des variables explicatives" ] }, + { + "cell_type": "markdown", + "id": "b09c2964-bef9-489e-ad71-84959054531b", + "metadata": {}, + "source": [ + "## Alexis' work" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "id": "4ab1c0d2-0097-4669-b984-b6822c976740", + "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", + "
event_type_idavg_amount
026.150659
147.762474
254.452618
366.439463
\n", + "
" + ], + "text/plain": [ + " event_type_id avg_amount\n", + "0 2 6.150659\n", + "1 4 7.762474\n", + "2 5 4.452618\n", + "3 6 6.439463" + ] + }, + "execution_count": 142, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "avg_amount = (df1_products_purchased_reduced.groupby([\"event_type_id\"])\n", + " .agg({\"amount\" : \"mean\"}).reset_index()\n", + " .rename(columns = {'amount' : 'avg_amount'}))\n", + "\n", + "avg_amount" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "id": "a9c62b39-389e-4dac-89a6-ac8a59fea58a", + "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_idevent_type_idnb_ticketsavg_amount
0123842266.150659
1144532427.762474
2152017504.452618
3162173566.439463
4221436.150659
\n", + "
" + ], + "text/plain": [ + " customer_id event_type_id nb_tickets avg_amount\n", + "0 1 2 384226 6.150659\n", + "1 1 4 453242 7.762474\n", + "2 1 5 201750 4.452618\n", + "3 1 6 217356 6.439463\n", + "4 2 2 143 6.150659" + ] + }, + "execution_count": 143, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nb_tickets = (df1_products_purchased_reduced.groupby([\"customer_id\", \"event_type_id\"])\n", + " .agg({\"ticket_id\" : \"count\"}).reset_index()\n", + " .rename(columns = {'ticket_id' : 'nb_tickets'})\n", + " .merge(avg_amount, how='left', on='event_type_id'))\n", + "nb_tickets.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "id": "8710611c-7eb8-45ca-bdcc-009f4081f9e2", + "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": "a89fad43-ee68-4081-9384-3e9f08ec6a59", + "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": "a19fec00-4ece-400c-937c-ce5cd8daccfd", + "metadata": {}, + "outputs": [], + "source": [ + "df1_customer_product.to_csv(\"customer_product.csv\", index = False)" + ] + }, { "cell_type": "markdown", "id": "314f1b7f-ae48-4c6f-8469-9ce879043243", From 05538d34901e7656bbd0b4a1f86a5e3dbb768275 Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 18:57:33 +0000 Subject: [PATCH 08/11] Ajout fusions --- 0_Cleaning_and_merge.ipynb | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index be348ed..b95fec5 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -3172,16 +3172,6 @@ "df1_customer = pd.merge(df1_customerplus_clean, df1_campaigns_kpi, on = 'customer_id', how = 'left')" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "9740d64a-e5eb-4967-a534-ca6177546465", - "metadata": {}, - "outputs": [], - "source": [ - "df1_customer.head()" - ] - }, { "cell_type": "code", "execution_count": null, @@ -3190,7 +3180,7 @@ "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')" ] }, { From c75f2eebe18c4753aafc32c549161c134f9e3b9f Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 21:05:09 +0000 Subject: [PATCH 09/11] Ajout graph circulaire --- 1_Descriptive_Statistics.ipynb | 373 ++++++++++++++++++++++++++++++--- 1 file changed, 343 insertions(+), 30 deletions(-) diff --git a/1_Descriptive_Statistics.ipynb b/1_Descriptive_Statistics.ipynb index 0eefa74..1009391 100644 --- a/1_Descriptive_Statistics.ipynb +++ b/1_Descriptive_Statistics.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 23, "id": "abfaf341-7b35-4407-9133-d21336c04027", "metadata": {}, "outputs": [], @@ -19,12 +19,13 @@ "import numpy as np\n", "import os\n", "import s3fs\n", - "import re" + "import re\n", + "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "7fb72fa3-7940-496f-ac78-c2837f65eefa", "metadata": {}, "outputs": [], @@ -43,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "id": "9376af51-4320-44b6-8f30-1e1234371556", "metadata": {}, "outputs": [], @@ -59,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "id": "1855dcca-cfce-4c54-90ae-55d9a1ab5d45", "metadata": {}, "outputs": [ @@ -84,7 +85,6 @@ " \n", " \n", " \n", - " Unnamed: 0\n", " customer_id\n", " event_type_id\n", " nb_tickets\n", @@ -100,7 +100,6 @@ " \n", " \n", " 0\n", - " 0\n", " 1\n", " 2\n", " 384226\n", @@ -115,7 +114,6 @@ " \n", " 1\n", " 1\n", - " 1\n", " 4\n", " 453242\n", " 3248965.5\n", @@ -128,7 +126,6 @@ " \n", " \n", " 2\n", - " 2\n", " 1\n", " 5\n", " 201750\n", @@ -142,7 +139,6 @@ " \n", " \n", " 3\n", - " 3\n", " 1\n", " 6\n", " 217356\n", @@ -156,7 +152,6 @@ " \n", " \n", " 4\n", - " 4\n", " 2\n", " 2\n", " 143\n", @@ -173,26 +168,271 @@ "" ], "text/plain": [ - " Unnamed: 0 customer_id event_type_id nb_tickets total_amount \\\n", - "0 0 1 2 384226 2686540.5 \n", - "1 1 1 4 453242 3248965.5 \n", - "2 2 1 5 201750 1459190.0 \n", - "3 3 1 6 217356 1435871.5 \n", - "4 4 2 2 143 0.0 \n", + " 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", - " nb_suppliers vente_internet_max purchase_date_min \\\n", - "0 7 1 2014-12-03 14:55:37+00:00 \n", - "1 6 1 2013-09-23 14:45:01+00:00 \n", - "2 6 1 2013-06-10 10:37:58+00:00 \n", - "3 5 1 2017-01-01 02:20:08+00:00 \n", - "4 1 0 2018-04-07 12:55:07+00:00 \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", - " purchase_date_max time_between_purchase nb_tickets_internet \n", - "0 2023-11-04 15:12:16+00:00 3258 days 00:16:39 51.0 \n", - "1 2023-11-03 14:11:01+00:00 3692 days 23:26:00 2988.0 \n", - "2 2023-11-08 15:59:45+00:00 3803 days 05:21:47 9.0 \n", - "3 2019-12-31 02:20:06+00:00 1093 days 23:59:58 5.0 \n", - "4 2020-03-08 12:06:43+00:00 700 days 23:11:36 0.0 " + " 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": 8, + "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": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tickets_kpi.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "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": 12, @@ -201,8 +441,81 @@ } ], "source": [ - "tickets_kpi.head()" + "# Présence d'outlier\n", + "tickets_kpi.sort_values(by = ['nb_tickets'], axis = 0, ascending = False).head(10)" ] + }, + { + "cell_type": "code", + "execution_count": 34, + "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": 57, + "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": 58, + "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": { From 28b69938321ac8a75ed3947c361a7feb12d4d6b0 Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 21:24:37 +0000 Subject: [PATCH 10/11] =?UTF-8?q?Nettoyage=20et=20r=C3=A9organisation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0_Cleaning_and_merge.ipynb | 1862 +++++++++++++----------------------- 1 file changed, 682 insertions(+), 1180 deletions(-) diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index b95fec5..ced5bdf 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -59,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 3, "id": "699664b9-eee4-4f8d-a207-e524526560c5", "metadata": {}, "outputs": [], @@ -78,7 +78,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_8302/4081512283.py:10: DtypeWarning: Columns (1) have mixed types. Specify dtype option on import or set low_memory=False.\n", + "/tmp/ipykernel_42764/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" ] } @@ -242,23 +242,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_8302/3092893564.py:5: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/3092893564.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_8302/3092893564.py:9: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/3092893564.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_8302/3092893564.py:10: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/3092893564.py:10: 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", " suppliers['supplier_name'] = suppliers['supplier_name'].fillna('')\n", - "/tmp/ipykernel_8302/3092893564.py:14: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/3092893564.py:14: 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", @@ -439,7 +439,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_8302/3848597476.py:4: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/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", @@ -451,165 +451,6 @@ "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": 13, - "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": 13, - "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": 14, - "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": 14, - "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", @@ -620,7 +461,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "id": "d883cc7b-ac43-4485-b86f-eaf595fbad85", "metadata": {}, "outputs": [], @@ -645,7 +486,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "id": "c8552dd6-52c5-4431-b43d-3cd6c578fd9f", "metadata": {}, "outputs": [ @@ -653,19 +494,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_8302/1967867975.py:15: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/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_8302/1967867975.py:15: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/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_8302/1967867975.py:15: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/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", @@ -680,7 +521,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "id": "c24457e7-3cad-451a-a65b-7373b656bd6e", "metadata": { "scrolled": true @@ -800,7 +641,7 @@ "4 404 2021-03-27 23:00:00+00:00 " ] }, - "execution_count": 17, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -814,7 +655,7 @@ "id": "56520a97-ede8-4920-a211-3b5b136af33d", "metadata": {}, "source": [ - "## Create Products Table" + "## Product area" ] }, { @@ -827,7 +668,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 16, "id": "30488a40-1b38-4b9a-9d3b-26a0597c5e6d", "metadata": {}, "outputs": [], @@ -838,7 +679,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 17, "id": "607eb4b4-eed9-4b50-b823-f75c116dd37c", "metadata": {}, "outputs": [], @@ -909,7 +750,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 18, "id": "350b09b9-451f-4d47-81fe-f34b892db027", "metadata": {}, "outputs": [], @@ -997,7 +838,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 19, "id": "0fccc8ef-e575-4857-a401-94a7274394df", "metadata": {}, "outputs": [ @@ -1150,7 +991,7 @@ "4 indiv entrées tp " ] }, - "execution_count": 24, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1162,7 +1003,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 20, "id": "779d8aaf-6668-4f66-8852-847304407ea3", "metadata": {}, "outputs": [ @@ -1332,7 +1173,7 @@ "4 spectacle vivant mucem " ] }, - "execution_count": 25, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1344,7 +1185,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 21, "id": "7714fa32-303b-4ea7-b174-3fd0fcab5af0", "metadata": {}, "outputs": [ @@ -1443,7 +1284,7 @@ "4 37 383 269 1" ] }, - "execution_count": 26, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1463,7 +1304,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 22, "id": "15a62ed6-35e4-4abc-aeef-a7daeec0a4ba", "metadata": {}, "outputs": [], @@ -1491,7 +1332,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 23, "id": "89dc9685-1de9-4ce3-a6c0-8d7f1931a951", "metadata": {}, "outputs": [ @@ -1730,7 +1571,7 @@ "[5 rows x 21 columns]" ] }, - "execution_count": 28, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1742,13 +1583,16 @@ }, { "cell_type": "code", - "execution_count": 29, + "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']]" ] }, { @@ -1759,772 +1603,6 @@ "# Construction des variables explicatives" ] }, - { - "cell_type": "markdown", - "id": "b09c2964-bef9-489e-ad71-84959054531b", - "metadata": {}, - "source": [ - "## Alexis' work" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "id": "4ab1c0d2-0097-4669-b984-b6822c976740", - "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", - "
event_type_idavg_amount
026.150659
147.762474
254.452618
366.439463
\n", - "
" - ], - "text/plain": [ - " event_type_id avg_amount\n", - "0 2 6.150659\n", - "1 4 7.762474\n", - "2 5 4.452618\n", - "3 6 6.439463" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "avg_amount = (df1_products_purchased_reduced.groupby([\"event_type_id\"])\n", - " .agg({\"amount\" : \"mean\"}).reset_index()\n", - " .rename(columns = {'amount' : 'avg_amount'}))\n", - "\n", - "avg_amount" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "id": "a9c62b39-389e-4dac-89a6-ac8a59fea58a", - "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_idevent_type_idnb_ticketsavg_amount
0123842266.150659
1144532427.762474
2152017504.452618
3162173566.439463
4221436.150659
\n", - "
" - ], - "text/plain": [ - " customer_id event_type_id nb_tickets avg_amount\n", - "0 1 2 384226 6.150659\n", - "1 1 4 453242 7.762474\n", - "2 1 5 201750 4.452618\n", - "3 1 6 217356 6.439463\n", - "4 2 2 143 6.150659" - ] - }, - "execution_count": 143, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nb_tickets = (df1_products_purchased_reduced.groupby([\"customer_id\", \"event_type_id\"])\n", - " .agg({\"ticket_id\" : \"count\"}).reset_index()\n", - " .rename(columns = {'ticket_id' : 'nb_tickets'})\n", - " .merge(avg_amount, how='left', on='event_type_id'))\n", - "nb_tickets.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "id": "8710611c-7eb8-45ca-bdcc-009f4081f9e2", - "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": "a89fad43-ee68-4081-9384-3e9f08ec6a59", - "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": "a19fec00-4ece-400c-937c-ce5cd8daccfd", - "metadata": {}, - "outputs": [], - "source": [ - "df1_customer_product.to_csv(\"customer_product.csv\", index = False)" - ] - }, { "cell_type": "markdown", "id": "314f1b7f-ae48-4c6f-8469-9ce879043243", @@ -2535,7 +1613,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 28, "id": "e2c88552-b863-47a2-be23-8d2898fb28bc", "metadata": {}, "outputs": [], @@ -2569,7 +1647,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 29, "id": "24537647-bc29-4777-9848-ac4120a4aa60", "metadata": {}, "outputs": [ @@ -2577,7 +1655,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_8302/3700263836.py:11: SettingWithCopyWarning: \n", + "/tmp/ipykernel_42764/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", @@ -2591,7 +1669,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 30, "id": "6be2a9a6-056b-4e19-8c26-a18ba3df36b3", "metadata": {}, "outputs": [ @@ -2671,7 +1749,7 @@ "4 6 20 0.0 NaT" ] }, - "execution_count": 20, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -2688,35 +1766,6 @@ "## KPI tickets" ] }, - { - "cell_type": "code", - "execution_count": 30, - "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": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1_products_purchased.columns" - ] - }, { "cell_type": "code", "execution_count": 31, @@ -2736,206 +1785,23 @@ } ], "source": [ - "df1_products_purchased['name_event_types'].unique()" + "df1_products_purchased_reduced['name_event_types'].unique()" ] }, { "cell_type": "code", "execution_count": 32, - "id": "e01e8cf9-1187-4a4b-993d-b7b4321cd8f0", - "metadata": {}, - "outputs": [], - "source": [ - "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": "code", - "execution_count": 78, - "id": "3d8b0875-b409-44ce-b688-d9d6758782d3", - "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", - "
ticket_idcustomer_idevent_type_idsupplier_namepurchase_datetype_of_ticket_nameamountchildrenis_full_pricename_event_typesname_facilitiesname_categoriesname_eventsname_seasons
013070859481874vente en ligne2018-12-28 14:47:50+00:00Atelier8.0pricing_formulaFalsespectacle vivantmucemindiv prog enfantl'école des magiciens2018
113070855481874vente en ligne2018-12-28 14:47:50+00:00Atelier8.0pricing_formulaFalsespectacle vivantmucemindiv prog enfantl'école des magiciens2018
213070856481874vente en ligne2018-12-28 14:47:50+00:00Atelier8.0pricing_formulaFalsespectacle vivantmucemindiv prog enfantl'école des magiciens2018
313070857481874vente en ligne2018-12-28 14:47:50+00:00Atelier8.0pricing_formulaFalsespectacle vivantmucemindiv prog enfantl'école des magiciens2018
413070858481874vente en ligne2018-12-28 14:47:50+00:00Atelier8.0pricing_formulaFalsespectacle vivantmucemindiv prog enfantl'école des magiciens2018
\n", - "
" - ], - "text/plain": [ - " ticket_id customer_id event_type_id supplier_name \\\n", - "0 13070859 48187 4 vente en ligne \n", - "1 13070855 48187 4 vente en ligne \n", - "2 13070856 48187 4 vente en ligne \n", - "3 13070857 48187 4 vente en ligne \n", - "4 13070858 48187 4 vente en ligne \n", - "\n", - " purchase_date type_of_ticket_name amount children \\\n", - "0 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", - "1 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", - "2 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", - "3 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", - "4 2018-12-28 14:47:50+00:00 Atelier 8.0 pricing_formula \n", - "\n", - " 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 " - ] - }, - "execution_count": 78, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Importance des suppliers\n", - "df1_products_purchased_reduced.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, "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" + "nb_event_types = df1_products_purchased_reduced[['customer_id', 'name_event_types']].groupby('customer_id').nunique()" ] }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 33, "id": "043303fe-e90f-4689-a2a9-5d690555a045", "metadata": {}, "outputs": [], @@ -2961,6 +1827,7 @@ " '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", @@ -2980,7 +1847,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 34, "id": "5882234a-1ed5-4269-87a6-0d75613476e3", "metadata": {}, "outputs": [], @@ -2998,7 +1865,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 35, "id": "a4a2311d-8a72-4030-afd5-218004d5d2a5", "metadata": {}, "outputs": [], @@ -3014,7 +1881,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 36, "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", "metadata": {}, "outputs": [ @@ -3144,7 +2011,7 @@ "5032 1049 days 18:46:12 13497.0 " ] }, - "execution_count": 84, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -3153,6 +2020,641 @@ "df1_tickets_kpi.sort_values(by='nb_tickets', ascending=False).head(5)" ] }, + { + "cell_type": "markdown", + "id": "f1d7f7ba-361b-467d-b375-b09c149185f7", + "metadata": {}, + "source": [ + "## Alexis' work" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "4ab1c0d2-0097-4669-b984-b6822c976740", + "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", + "
event_type_idavg_amount
026.150659
147.762474
254.452618
366.439463
\n", + "
" + ], + "text/plain": [ + " event_type_id avg_amount\n", + "0 2 6.150659\n", + "1 4 7.762474\n", + "2 5 4.452618\n", + "3 6 6.439463" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "avg_amount = (df1_products_purchased_reduced.groupby([\"event_type_id\"])\n", + " .agg({\"amount\" : \"mean\"}).reset_index()\n", + " .rename(columns = {'amount' : 'avg_amount'}))\n", + "\n", + "avg_amount" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "a9c62b39-389e-4dac-89a6-ac8a59fea58a", + "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_idevent_type_idnb_ticketsavg_amount
0123842266.150659
1144532427.762474
2152017504.452618
3162173566.439463
4221436.150659
\n", + "
" + ], + "text/plain": [ + " customer_id event_type_id nb_tickets avg_amount\n", + "0 1 2 384226 6.150659\n", + "1 1 4 453242 7.762474\n", + "2 1 5 201750 4.452618\n", + "3 1 6 217356 6.439463\n", + "4 2 2 143 6.150659" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nb_tickets = (df1_products_purchased_reduced.groupby([\"customer_id\", \"event_type_id\"])\n", + " .agg({\"ticket_id\" : \"count\"}).reset_index()\n", + " .rename(columns = {'ticket_id' : 'nb_tickets'})\n", + " .merge(avg_amount, how='left', on='event_type_id'))\n", + "nb_tickets.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "8710611c-7eb8-45ca-bdcc-009f4081f9e2", + "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_idprofessionlanguage...average_ticket_baskettotal_pricepurchase_countfirst_buying_datecountryagetenant_idnb_campaignsnb_campaigns_openedtime_to_open
012751NaN2False1TrueTrueNaNNaNNaN...NaNNaN0NaTfrNaN1311NaNNaNNaT
112825NaN2False2TrueTrueNaNNaNNaN...NaNNaN0NaTfrNaN1311NaNNaNNaT
211261NaN2False1TrueTrueNaNNaNNaN...NaNNaN0NaTfrNaN1311NaNNaNNaT
313071NaN2False2TrueTrueNaNNaNNaN...NaNNaN0NaTfrNaN1311NaNNaNNaT
4653061NaN10False2TrueFalseNaNNaNNaN...NaNNaN0NaTNaNNaN131180.02.00 days 19:53:02.500000
\n", + "

5 rows × 28 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 profession language ... average_ticket_basket \\\n", + "0 True NaN NaN NaN ... NaN \n", + "1 True NaN NaN NaN ... NaN \n", + "2 True NaN NaN NaN ... NaN \n", + "3 True NaN NaN NaN ... NaN \n", + "4 False NaN NaN NaN ... NaN \n", + "\n", + " total_price purchase_count first_buying_date country age tenant_id \\\n", + "0 NaN 0 NaT fr NaN 1311 \n", + "1 NaN 0 NaT fr NaN 1311 \n", + "2 NaN 0 NaT fr NaN 1311 \n", + "3 NaN 0 NaT fr NaN 1311 \n", + "4 NaN 0 NaT NaN NaN 1311 \n", + "\n", + " nb_campaigns nb_campaigns_opened time_to_open \n", + "0 NaN NaN NaT \n", + "1 NaN NaN NaT \n", + "2 NaN NaN NaT \n", + "3 NaN NaN NaT \n", + "4 80.0 2.0 0 days 19:53:02.500000 \n", + "\n", + "[5 rows x 28 columns]" + ] + }, + "execution_count": 39, + "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": 40, + "id": "a89fad43-ee68-4081-9384-3e9f08ec6a59", + "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", + "
customer_idbirthdatestreet_idis_partnergenderis_email_trueopt_instructure_idprofessionlanguage...first_buying_datecountryagetenant_idnb_campaignsnb_campaigns_openedtime_to_openevent_type_idnb_ticketsavg_amount
012751NaN2False1TrueTrueNaNNaNNaN...NaTfrNaN1311NaNNaNNaTNaNNaNNaN
112825NaN2False2TrueTrueNaNNaNNaN...NaTfrNaN1311NaNNaNNaTNaNNaNNaN
211261NaN2False1TrueTrueNaNNaNNaN...NaTfrNaN1311NaNNaNNaTNaNNaNNaN
313071NaN2False2TrueTrueNaNNaNNaN...NaTfrNaN1311NaNNaNNaTNaNNaNNaN
4653061NaN10False2TrueFalseNaNNaNNaN...NaTNaNNaN131180.02.00 days 19:53:02.500000NaNNaNNaN
\n", + "

5 rows × 31 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 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", + " 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", + " 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", + "[5 rows x 31 columns]" + ] + }, + "execution_count": 40, + "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": 41, + "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", @@ -3163,7 +2665,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "id": "46de1912-4a66-46e5-8b9e-7768b2d2723b", "metadata": {}, "outputs": [], @@ -3174,7 +2676,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "id": "1e42a790-b215-4107-a969-85005da06ebd", "metadata": {}, "outputs": [], From 9f433d2c12ecdbfd64e406dad769ce8502bc8a5d Mon Sep 17 00:00:00 2001 From: ajoubrel-ensae Date: Sat, 10 Feb 2024 22:19:35 +0000 Subject: [PATCH 11/11] Modification access key --- 0_Cleaning_and_merge.ipynb | 162 +++++++++------------------------ 1_Descriptive_Statistics.ipynb | 21 +++-- 2 files changed, 56 insertions(+), 127 deletions(-) diff --git a/0_Cleaning_and_merge.ipynb b/0_Cleaning_and_merge.ipynb index ced5bdf..20c5a03 100644 --- a/0_Cleaning_and_merge.ipynb +++ b/0_Cleaning_and_merge.ipynb @@ -19,7 +19,8 @@ "import numpy as np\n", "import os\n", "import s3fs\n", - "import re" + "import re\n", + "import warnings" ] }, { @@ -38,7 +39,19 @@ "outputs": [], "source": [ "# Create filesystem object\n", - "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': 'https://'+'minio-simple.lab.groupe-genes.fr'},key ='WKTGH4YGUBAT3TR0OSUR', secret = 'g8ozi6ZUrBy8DzaAip4F7zOizbr4DKf4RgYNseqU', token = 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJXS1RHSDRZR1VCQVQzVFIwT1NVUiIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9vbnl4aWEubGFiLmdyb3VwZS1nZW5lcy5mciJdLCJhdWQiOlsibWluaW8iLCJhY2NvdW50Il0sImF1dGhfdGltZSI6MTcwNzU4NjUwMCwiYXpwIjoib255eGlhLW1pbmlvIiwiZW1haWwiOiJhbnRvaW5lLmpvdWJyZWxAZW5zYWUuZnIiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzA3NjczMDQ3LCJmYW1pbHlfbmFtZSI6IkpPVUJSRUwiLCJnaXZlbl9uYW1lIjoiQW50b2luZSIsImdyb3VwcyI6WyJiZGMyMzI0LXRlYW0xIl0sImlhdCI6MTcwNzU4NjY0NywiaXNzIjoiaHR0cHM6Ly9hdXRoLmdyb3VwZS1nZW5lcy5mci9yZWFsbXMvZ2VuZXMiLCJqdGkiOiI1MjQ2MDZmMS1lYWM3LTQxZDgtYTEzMy04MGZjMDk0MGVlNzEiLCJuYW1lIjoiQW50b2luZSBKT1VCUkVMIiwicG9saWN5Ijoic3Rzb25seSIsInByZWZlcnJlZF91c2VybmFtZSI6ImFqb3VicmVsLWVuc2FlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwiZGVmYXVsdC1yb2xlcy1nZW5lcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsInNlc3Npb25fc3RhdGUiOiI1OTk2MWNkYy0xNmFiLTQ4MTAtYWE4Zi1iZGUyMjkwNjhiNzUiLCJzaWQiOiI1OTk2MWNkYy0xNmFiLTQ4MTAtYWE4Zi1iZGUyMjkwNjhiNzUiLCJzdWIiOiIwNWYwZDk3Mi1jNWM4LTQyNmYtODAwZC00NmQ0OGU4NjkwMzUiLCJ0eXAiOiJCZWFyZXIifQ.-imw-N4bk1uCcQGobkxhsRoeBAqxC9rT7PifElbC7ODOStnwIulc7HRR2fmtiqI2PdyrfnVvzfmIPK1g056HbA')" + "S3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n", + "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')" ] }, { @@ -73,18 +86,10 @@ "execution_count": 4, "id": "dd6a3518-b752-4a1e-b77b-9e03e853c3ed", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_42764/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", @@ -237,35 +242,7 @@ "execution_count": 9, "id": "3e1d2ba7-ff4f-48eb-93a8-2bb648c70396", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_42764/3092893564.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_42764/3092893564.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_42764/3092893564.py:10: 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", - " suppliers['supplier_name'] = suppliers['supplier_name'].fillna('')\n", - "/tmp/ipykernel_42764/3092893564.py:14: 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)" ] @@ -434,19 +411,7 @@ "execution_count": 12, "id": "5fbfd88b-b94c-489c-9201-670e96e453e7", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_42764/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)" ] @@ -489,32 +454,7 @@ "execution_count": 14, "id": "c8552dd6-52c5-4431-b43d-3cd6c578fd9f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_42764/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_42764/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_42764/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)" ] @@ -1613,7 +1553,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 25, "id": "e2c88552-b863-47a2-be23-8d2898fb28bc", "metadata": {}, "outputs": [], @@ -1647,29 +1587,17 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 26, "id": "24537647-bc29-4777-9848-ac4120a4aa60", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_42764/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" - ] - } - ], + "outputs": [], "source": [ "df1_campaigns_kpi = campaigns_kpi_function(campaigns_information = df1_campaigns_information) " ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 27, "id": "6be2a9a6-056b-4e19-8c26-a18ba3df36b3", "metadata": {}, "outputs": [ @@ -1749,7 +1677,7 @@ "4 6 20 0.0 NaT" ] }, - "execution_count": 30, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1768,7 +1696,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 28, "id": "b913a69e-3146-4919-b5f6-a6108532bffa", "metadata": {}, "outputs": [ @@ -1779,7 +1707,7 @@ " 'offre muséale groupe'], dtype=object)" ] }, - "execution_count": 31, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1790,7 +1718,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 29, "id": "2bda0b97-b28b-4070-a57d-aeab0e2f7dfe", "metadata": {}, "outputs": [], @@ -1801,7 +1729,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 30, "id": "043303fe-e90f-4689-a2a9-5d690555a045", "metadata": {}, "outputs": [], @@ -1847,7 +1775,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 31, "id": "5882234a-1ed5-4269-87a6-0d75613476e3", "metadata": {}, "outputs": [], @@ -1865,7 +1793,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 32, "id": "a4a2311d-8a72-4030-afd5-218004d5d2a5", "metadata": {}, "outputs": [], @@ -1881,7 +1809,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 33, "id": "a7a452a6-cd5e-4c8b-b250-8a7d26e48fad", "metadata": {}, "outputs": [ @@ -2011,7 +1939,7 @@ "5032 1049 days 18:46:12 13497.0 " ] }, - "execution_count": 36, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -2030,7 +1958,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 34, "id": "4ab1c0d2-0097-4669-b984-b6822c976740", "metadata": {}, "outputs": [ @@ -2092,7 +2020,7 @@ "3 6 6.439463" ] }, - "execution_count": 37, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2107,7 +2035,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 35, "id": "a9c62b39-389e-4dac-89a6-ac8a59fea58a", "metadata": {}, "outputs": [ @@ -2187,7 +2115,7 @@ "4 2 2 143 6.150659" ] }, - "execution_count": 38, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -2202,7 +2130,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 36, "id": "8710611c-7eb8-45ca-bdcc-009f4081f9e2", "metadata": {}, "outputs": [ @@ -2408,7 +2336,7 @@ "[5 rows x 28 columns]" ] }, - "execution_count": 39, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -2421,7 +2349,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 37, "id": "a89fad43-ee68-4081-9384-3e9f08ec6a59", "metadata": {}, "outputs": [ @@ -2634,7 +2562,7 @@ "[5 rows x 31 columns]" ] }, - "execution_count": 40, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -2647,7 +2575,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 38, "id": "a19fec00-4ece-400c-937c-ce5cd8daccfd", "metadata": {}, "outputs": [], @@ -2665,7 +2593,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 39, "id": "46de1912-4a66-46e5-8b9e-7768b2d2723b", "metadata": {}, "outputs": [], @@ -2676,7 +2604,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 40, "id": "1e42a790-b215-4107-a969-85005da06ebd", "metadata": {}, "outputs": [], @@ -2687,7 +2615,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "id": "d950f24d-a5d1-4f1e-aeaa-ca826470365f", "metadata": {}, "outputs": [], diff --git a/1_Descriptive_Statistics.ipynb b/1_Descriptive_Statistics.ipynb index 1009391..113fd77 100644 --- a/1_Descriptive_Statistics.ipynb +++ b/1_Descriptive_Statistics.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 1, "id": "abfaf341-7b35-4407-9133-d21336c04027", "metadata": {}, "outputs": [], @@ -30,8 +30,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Access Key to Minio\n", - "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': 'https://'+'minio-simple.lab.groupe-genes.fr'},key ='WKTGH4YGUBAT3TR0OSUR', secret = 'g8ozi6ZUrBy8DzaAip4F7zOizbr4DKf4RgYNseqU', token = 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJXS1RHSDRZR1VCQVQzVFIwT1NVUiIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9vbnl4aWEubGFiLmdyb3VwZS1nZW5lcy5mciJdLCJhdWQiOlsibWluaW8iLCJhY2NvdW50Il0sImF1dGhfdGltZSI6MTcwNzU4NjUwMCwiYXpwIjoib255eGlhLW1pbmlvIiwiZW1haWwiOiJhbnRvaW5lLmpvdWJyZWxAZW5zYWUuZnIiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzA3NjczMDQ3LCJmYW1pbHlfbmFtZSI6IkpPVUJSRUwiLCJnaXZlbl9uYW1lIjoiQW50b2luZSIsImdyb3VwcyI6WyJiZGMyMzI0LXRlYW0xIl0sImlhdCI6MTcwNzU4NjY0NywiaXNzIjoiaHR0cHM6Ly9hdXRoLmdyb3VwZS1nZW5lcy5mci9yZWFsbXMvZ2VuZXMiLCJqdGkiOiI1MjQ2MDZmMS1lYWM3LTQxZDgtYTEzMy04MGZjMDk0MGVlNzEiLCJuYW1lIjoiQW50b2luZSBKT1VCUkVMIiwicG9saWN5Ijoic3Rzb25seSIsInByZWZlcnJlZF91c2VybmFtZSI6ImFqb3VicmVsLWVuc2FlIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwiZGVmYXVsdC1yb2xlcy1nZW5lcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsInNlc3Npb25fc3RhdGUiOiI1OTk2MWNkYy0xNmFiLTQ4MTAtYWE4Zi1iZGUyMjkwNjhiNzUiLCJzaWQiOiI1OTk2MWNkYy0xNmFiLTQ4MTAtYWE4Zi1iZGUyMjkwNjhiNzUiLCJzdWIiOiIwNWYwZDk3Mi1jNWM4LTQyNmYtODAwZC00NmQ0OGU4NjkwMzUiLCJ0eXAiOiJCZWFyZXIifQ.-imw-N4bk1uCcQGobkxhsRoeBAqxC9rT7PifElbC7ODOStnwIulc7HRR2fmtiqI2PdyrfnVvzfmIPK1g056HbA')" + "# Create filesystem object\n", + "S3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n", + "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL})" ] }, { @@ -201,7 +202,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, "id": "0e5d3b2e-1a75-4d46-80e6-c306e9f8de84", "metadata": {}, "outputs": [ @@ -214,7 +215,7 @@ " dtype='object')" ] }, - "execution_count": 8, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -225,7 +226,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 6, "id": "7667e8eb-9a1e-4216-96f4-bf987c6e30b5", "metadata": {}, "outputs": [ @@ -435,7 +436,7 @@ "36376 2022-08-25 13:08:38+00:00 447 days 00:47:59 5750.0 " ] }, - "execution_count": 12, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -447,7 +448,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 7, "id": "9b2e27f2-703d-465b-a0f9-76e996de617c", "metadata": {}, "outputs": [], @@ -463,7 +464,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 8, "id": "36141803-8865-4210-bd39-0a980301fd0c", "metadata": {}, "outputs": [ @@ -501,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 9, "id": "94cf1a25-9ded-48f2-b1b2-75225bdaf49d", "metadata": {}, "outputs": [],