8491 lines
333 KiB
Plaintext
8491 lines
333 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "455cc769-1b3b-4fef-b395-e74a988ceed3",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Notebook Alexis"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 274,
|
||
"id": "20eeb149-6618-4ef2-9cfd-ff062950f36c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"import os\n",
|
||
"import s3fs"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 275,
|
||
"id": "30494c5e-9649-4fff-8708-617544188b20",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"['bdc2324-data/1',\n",
|
||
" 'bdc2324-data/10',\n",
|
||
" 'bdc2324-data/101',\n",
|
||
" 'bdc2324-data/11',\n",
|
||
" 'bdc2324-data/12',\n",
|
||
" 'bdc2324-data/13',\n",
|
||
" 'bdc2324-data/14',\n",
|
||
" 'bdc2324-data/2',\n",
|
||
" 'bdc2324-data/3',\n",
|
||
" 'bdc2324-data/4',\n",
|
||
" 'bdc2324-data/5',\n",
|
||
" 'bdc2324-data/6',\n",
|
||
" 'bdc2324-data/7',\n",
|
||
" 'bdc2324-data/8',\n",
|
||
" 'bdc2324-data/9']"
|
||
]
|
||
},
|
||
"execution_count": 275,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"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})\n",
|
||
"\n",
|
||
"BUCKET = \"bdc2324-data\"\n",
|
||
"fs.ls(BUCKET)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "2feffee9-9f23-4caa-8a01-9e4a93abbf5d",
|
||
"metadata": {},
|
||
"source": [
|
||
"### I. Analyse fichier 8"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f54ba449-2051-4acd-939d-d30abd5452fe",
|
||
"metadata": {},
|
||
"source": [
|
||
"This section describes the databases associated with company 8. "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 276,
|
||
"id": "f1cce705-46e1-42de-8e93-2ee15312d288",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"directory_path = '8'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 277,
|
||
"id": "82d4db0e-0cd5-49af-a4d3-f17f54b1c03c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"bdc2324-data/8/8campaign_stats.csv\n",
|
||
"bdc2324-data/8/8campaigns.csv\n",
|
||
"bdc2324-data/8/8categories.csv\n",
|
||
"bdc2324-data/8/8countries.csv\n",
|
||
"bdc2324-data/8/8currencies.csv\n",
|
||
"bdc2324-data/8/8customer_target_mappings.csv\n",
|
||
"bdc2324-data/8/8customersplus.csv\n",
|
||
"bdc2324-data/8/8event_types.csv\n",
|
||
"bdc2324-data/8/8events.csv\n",
|
||
"bdc2324-data/8/8facilities.csv\n",
|
||
"bdc2324-data/8/8link_stats.csv\n",
|
||
"bdc2324-data/8/8pricing_formulas.csv\n",
|
||
"bdc2324-data/8/8product_packs.csv\n",
|
||
"bdc2324-data/8/8products.csv\n",
|
||
"bdc2324-data/8/8products_groups.csv\n",
|
||
"bdc2324-data/8/8purchases.csv\n",
|
||
"bdc2324-data/8/8representation_category_capacities.csv\n",
|
||
"bdc2324-data/8/8representations.csv\n",
|
||
"bdc2324-data/8/8seasons.csv\n",
|
||
"bdc2324-data/8/8suppliers.csv\n",
|
||
"bdc2324-data/8/8target_types.csv\n",
|
||
"bdc2324-data/8/8targets.csv\n",
|
||
"bdc2324-data/8/8tickets.csv\n",
|
||
"bdc2324-data/8/8type_of_categories.csv\n",
|
||
"bdc2324-data/8/8type_of_pricing_formulas.csv\n",
|
||
"bdc2324-data/8/8type_ofs.csv\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# check the files in the directory\n",
|
||
"\n",
|
||
"objects = fs.ls(f'{BUCKET}/{directory_path}')\n",
|
||
"\n",
|
||
"for file in objects:\n",
|
||
" print(file)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 278,
|
||
"id": "65cb38ad-52ae-4266-85d8-c47d81b00283",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def display_databases(file_name):\n",
|
||
" \"\"\"\n",
|
||
" This function returns the file from s3 storage\n",
|
||
" \"\"\"\n",
|
||
" file_path = BUCKET + \"/\" + directory_path + \"/\" + file_name\n",
|
||
" print(\"File path : \", file_path)\n",
|
||
" with fs.open(file_path, mode=\"rb\") as file_in:\n",
|
||
" df = pd.read_csv(file_in, sep=\",\")\n",
|
||
" \n",
|
||
" print(\"Shape : \", df.shape)\n",
|
||
" return df\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ddd545ef-7e9f-4696-962a-115294991641",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Lookt at campaigns files"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 279,
|
||
"id": "0214d30d-5f83-498f-867f-e67b5793b731",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8campaigns.csv\n",
|
||
"Shape : (1689, 11)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>service_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>process_id</th>\n",
|
||
" <th>report_url</th>\n",
|
||
" <th>category</th>\n",
|
||
" <th>to_be_synced</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" <th>sent_at</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>#LOUSFP RELANCE P'TITS LOU</td>\n",
|
||
" <td>1436</td>\n",
|
||
" <td>2022-02-01 15:22:53.564432+01:00</td>\n",
|
||
" <td>2022-02-01 15:22:53.564432+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>eaa32c96f620053cf442ad32258076b9</td>\n",
|
||
" <td>2022-01-31 00:00:00+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>#LOUSFP BRASSERIE ACHETEURS</td>\n",
|
||
" <td>1435</td>\n",
|
||
" <td>2022-02-01 15:22:53.572592+01:00</td>\n",
|
||
" <td>2022-02-01 15:22:53.572592+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1f3202d820180a39f736f20fce790de8</td>\n",
|
||
" <td>2022-01-31 00:00:00+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>PRESSE. LOU/SF Paris - RDV et protocole</td>\n",
|
||
" <td>1433</td>\n",
|
||
" <td>2022-02-01 15:22:53.578426+01:00</td>\n",
|
||
" <td>2022-02-01 15:22:53.578426+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>b069b3415151fa7217e870017374de7c</td>\n",
|
||
" <td>2022-01-31 00:00:00+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>#LOUSFP ÉTUDIANTS</td>\n",
|
||
" <td>1432</td>\n",
|
||
" <td>2022-02-01 15:22:53.584235+01:00</td>\n",
|
||
" <td>2022-02-01 15:22:53.584235+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>56468d5607a5aaf1604ff5e15593b003</td>\n",
|
||
" <td>2022-01-27 00:00:00+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>#LOUSFP P'TITS LOU</td>\n",
|
||
" <td>1431</td>\n",
|
||
" <td>2022-02-01 15:22:53.590187+01:00</td>\n",
|
||
" <td>2022-02-01 15:22:53.590187+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>e11943a6031a0e6114ae69c257617980</td>\n",
|
||
" <td>2022-01-27 00:00:00+01:00</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name service_id \\\n",
|
||
"0 1 #LOUSFP RELANCE P'TITS LOU 1436 \n",
|
||
"1 2 #LOUSFP BRASSERIE ACHETEURS 1435 \n",
|
||
"2 3 PRESSE. LOU/SF Paris - RDV et protocole 1433 \n",
|
||
"3 4 #LOUSFP ÉTUDIANTS 1432 \n",
|
||
"4 5 #LOUSFP P'TITS LOU 1431 \n",
|
||
"\n",
|
||
" created_at updated_at \\\n",
|
||
"0 2022-02-01 15:22:53.564432+01:00 2022-02-01 15:22:53.564432+01:00 \n",
|
||
"1 2022-02-01 15:22:53.572592+01:00 2022-02-01 15:22:53.572592+01:00 \n",
|
||
"2 2022-02-01 15:22:53.578426+01:00 2022-02-01 15:22:53.578426+01:00 \n",
|
||
"3 2022-02-01 15:22:53.584235+01:00 2022-02-01 15:22:53.584235+01:00 \n",
|
||
"4 2022-02-01 15:22:53.590187+01:00 2022-02-01 15:22:53.590187+01:00 \n",
|
||
"\n",
|
||
" process_id report_url category to_be_synced \\\n",
|
||
"0 NaN NaN 0 False \n",
|
||
"1 NaN NaN 0 False \n",
|
||
"2 NaN NaN 0 False \n",
|
||
"3 NaN NaN 0 False \n",
|
||
"4 NaN NaN 0 False \n",
|
||
"\n",
|
||
" identifier sent_at \n",
|
||
"0 eaa32c96f620053cf442ad32258076b9 2022-01-31 00:00:00+01:00 \n",
|
||
"1 1f3202d820180a39f736f20fce790de8 2022-01-31 00:00:00+01:00 \n",
|
||
"2 b069b3415151fa7217e870017374de7c 2022-01-31 00:00:00+01:00 \n",
|
||
"3 56468d5607a5aaf1604ff5e15593b003 2022-01-27 00:00:00+01:00 \n",
|
||
"4 e11943a6031a0e6114ae69c257617980 2022-01-27 00:00:00+01:00 "
|
||
]
|
||
},
|
||
"execution_count": 279,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"campaigns = display_databases(\"8campaigns.csv\")\n",
|
||
"campaigns.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 280,
|
||
"id": "e7982be4-2c42-4a91-be5a-329a999644cc",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8campaign_stats.csv\n",
|
||
"Shape : (2527083, 8)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>campaign_id</th>\n",
|
||
" <th>customer_id</th>\n",
|
||
" <th>opened_at</th>\n",
|
||
" <th>sent_at</th>\n",
|
||
" <th>delivered_at</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>161410</td>\n",
|
||
" <td>2022-02-02 18:16:07+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2022-02-02 17:16:08.616899+01:00</td>\n",
|
||
" <td>2022-02-02 17:16:08.623098+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>54228</td>\n",
|
||
" <td>2022-02-02 18:18:11+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2022-02-02 17:18:12.030260+01:00</td>\n",
|
||
" <td>2022-02-02 17:18:12.036606+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>120794</td>\n",
|
||
" <td>2022-02-02 18:18:58+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2022-02-02 17:19:00.129697+01:00</td>\n",
|
||
" <td>2022-02-02 17:19:00.134704+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>467025</td>\n",
|
||
" <td>2022-02-02 18:19:33+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2022-02-02 17:19:34.023492+01:00</td>\n",
|
||
" <td>2022-02-02 17:19:34.027570+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>142106</td>\n",
|
||
" <td>2022-02-02 18:19:35+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2022-02-02 17:19:36.553321+01:00</td>\n",
|
||
" <td>2022-02-02 17:19:36.557473+01:00</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id campaign_id customer_id opened_at sent_at \\\n",
|
||
"0 1 5 161410 2022-02-02 18:16:07+01:00 NaN \n",
|
||
"1 2 1 54228 2022-02-02 18:18:11+01:00 NaN \n",
|
||
"2 3 6 120794 2022-02-02 18:18:58+01:00 NaN \n",
|
||
"3 4 3 467025 2022-02-02 18:19:33+01:00 NaN \n",
|
||
"4 5 2 142106 2022-02-02 18:19:35+01:00 NaN \n",
|
||
"\n",
|
||
" delivered_at created_at \\\n",
|
||
"0 NaN 2022-02-02 17:16:08.616899+01:00 \n",
|
||
"1 NaN 2022-02-02 17:18:12.030260+01:00 \n",
|
||
"2 NaN 2022-02-02 17:19:00.129697+01:00 \n",
|
||
"3 NaN 2022-02-02 17:19:34.023492+01:00 \n",
|
||
"4 NaN 2022-02-02 17:19:36.553321+01:00 \n",
|
||
"\n",
|
||
" updated_at \n",
|
||
"0 2022-02-02 17:16:08.623098+01:00 \n",
|
||
"1 2022-02-02 17:18:12.036606+01:00 \n",
|
||
"2 2022-02-02 17:19:00.134704+01:00 \n",
|
||
"3 2022-02-02 17:19:34.027570+01:00 \n",
|
||
"4 2022-02-02 17:19:36.557473+01:00 "
|
||
]
|
||
},
|
||
"execution_count": 280,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"campaign_stats = display_databases(\"8campaign_stats.csv\")\n",
|
||
"campaign_stats.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e6512bc9-91f5-4fe4-a637-a4e84dc497a9",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Look at links files"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "28e7c1fe-470f-4d84-87b8-a711a973500b",
|
||
"metadata": {},
|
||
"source": [
|
||
"There is no links file for these company. Only the link_stats file"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 281,
|
||
"id": "e973575b-4ed6-4b23-8024-f383ac82e87c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8link_stats.csv\n",
|
||
"Shape : (108461, 6)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>clicked_at</th>\n",
|
||
" <th>link_id</th>\n",
|
||
" <th>customer_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2022-02-02 18:33:17+01:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>62137</td>\n",
|
||
" <td>2022-02-02 17:33:19.237759+01:00</td>\n",
|
||
" <td>2022-02-02 17:33:19.237759+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2022-02-02 18:33:26+01:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>556048</td>\n",
|
||
" <td>2022-02-02 17:33:28.101943+01:00</td>\n",
|
||
" <td>2022-02-02 17:33:28.101943+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>2022-02-02 18:33:49+01:00</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>194456</td>\n",
|
||
" <td>2022-02-02 17:33:50.595125+01:00</td>\n",
|
||
" <td>2022-02-02 17:33:50.595125+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2022-02-02 18:34:19+01:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>194456</td>\n",
|
||
" <td>2022-02-02 17:34:20.493986+01:00</td>\n",
|
||
" <td>2022-02-02 17:34:20.493986+01:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>2022-02-02 18:34:21+01:00</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>21571</td>\n",
|
||
" <td>2022-02-02 17:34:22.300427+01:00</td>\n",
|
||
" <td>2022-02-02 17:34:22.300427+01:00</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id clicked_at link_id customer_id \\\n",
|
||
"0 1 2022-02-02 18:33:17+01:00 1 62137 \n",
|
||
"1 2 2022-02-02 18:33:26+01:00 1 556048 \n",
|
||
"2 3 2022-02-02 18:33:49+01:00 2 194456 \n",
|
||
"3 4 2022-02-02 18:34:19+01:00 1 194456 \n",
|
||
"4 5 2022-02-02 18:34:21+01:00 2 21571 \n",
|
||
"\n",
|
||
" created_at updated_at \n",
|
||
"0 2022-02-02 17:33:19.237759+01:00 2022-02-02 17:33:19.237759+01:00 \n",
|
||
"1 2022-02-02 17:33:28.101943+01:00 2022-02-02 17:33:28.101943+01:00 \n",
|
||
"2 2022-02-02 17:33:50.595125+01:00 2022-02-02 17:33:50.595125+01:00 \n",
|
||
"3 2022-02-02 17:34:20.493986+01:00 2022-02-02 17:34:20.493986+01:00 \n",
|
||
"4 2022-02-02 17:34:22.300427+01:00 2022-02-02 17:34:22.300427+01:00 "
|
||
]
|
||
},
|
||
"execution_count": 281,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"links_stats = display_databases(\"8link_stats.csv\")\n",
|
||
"links_stats.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8dfcca1f-1323-413f-aa8d-3ee5ce2610a8",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyse Customersplus file"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 282,
|
||
"id": "3b523575-c779-451c-a12e-a36fb4ad232c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"bdc2324-data/8/8customersplus.csv\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/tmp/ipykernel_548/2210053343.py:5: DtypeWarning: Columns (20) have mixed types. Specify dtype option on import or set low_memory=False.\n",
|
||
" customersplus = pd.read_csv(file_in, sep=\",\")\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>lastname</th>\n",
|
||
" <th>firstname</th>\n",
|
||
" <th>birthdate</th>\n",
|
||
" <th>email</th>\n",
|
||
" <th>street_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>civility</th>\n",
|
||
" <th>is_partner</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>preferred_category</th>\n",
|
||
" <th>preferred_supplier</th>\n",
|
||
" <th>preferred_formula</th>\n",
|
||
" <th>purchase_count</th>\n",
|
||
" <th>first_buying_date</th>\n",
|
||
" <th>last_visiting_date</th>\n",
|
||
" <th>zipcode</th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>age</th>\n",
|
||
" <th>tenant_id</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1411166</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>email1411166</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2022-12-19 15:03:39.419371+01:00</td>\n",
|
||
" <td>2022-12-19 15:03:39.419371+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1594</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>478498</td>\n",
|
||
" <td>lastname478498</td>\n",
|
||
" <td>firstname478498</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>email478498</td>\n",
|
||
" <td>339167</td>\n",
|
||
" <td>2021-09-17 18:58:30.259053+02:00</td>\n",
|
||
" <td>2023-06-28 15:25:24.146689+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1594</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>473678</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>email473678</td>\n",
|
||
" <td>339167</td>\n",
|
||
" <td>2021-09-17 18:44:04.119713+02:00</td>\n",
|
||
" <td>2021-09-17 18:44:04.124204+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1594</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>475026</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>email475026</td>\n",
|
||
" <td>339167</td>\n",
|
||
" <td>2021-09-17 18:47:28.789618+02:00</td>\n",
|
||
" <td>2021-09-17 18:47:28.793958+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1594</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>487146</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>email487146</td>\n",
|
||
" <td>339167</td>\n",
|
||
" <td>2021-09-17 19:10:24.070460+02:00</td>\n",
|
||
" <td>2021-09-17 19:10:24.076033+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1594</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 43 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id lastname firstname birthdate email \\\n",
|
||
"0 1411166 NaN NaN NaN email1411166 \n",
|
||
"1 478498 lastname478498 firstname478498 NaN email478498 \n",
|
||
"2 473678 NaN NaN NaN email473678 \n",
|
||
"3 475026 NaN NaN NaN email475026 \n",
|
||
"4 487146 NaN NaN NaN email487146 \n",
|
||
"\n",
|
||
" street_id created_at \\\n",
|
||
"0 1 2022-12-19 15:03:39.419371+01:00 \n",
|
||
"1 339167 2021-09-17 18:58:30.259053+02:00 \n",
|
||
"2 339167 2021-09-17 18:44:04.119713+02:00 \n",
|
||
"3 339167 2021-09-17 18:47:28.789618+02:00 \n",
|
||
"4 339167 2021-09-17 19:10:24.070460+02:00 \n",
|
||
"\n",
|
||
" updated_at civility is_partner ... \\\n",
|
||
"0 2022-12-19 15:03:39.419371+01:00 NaN False ... \n",
|
||
"1 2023-06-28 15:25:24.146689+02:00 NaN False ... \n",
|
||
"2 2021-09-17 18:44:04.124204+02:00 NaN False ... \n",
|
||
"3 2021-09-17 18:47:28.793958+02:00 NaN False ... \n",
|
||
"4 2021-09-17 19:10:24.076033+02:00 NaN False ... \n",
|
||
"\n",
|
||
" preferred_category preferred_supplier preferred_formula 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 last_visiting_date zipcode country age tenant_id \n",
|
||
"0 NaN NaN NaN fr NaN 1594 \n",
|
||
"1 NaN NaN NaN NaN NaN 1594 \n",
|
||
"2 NaN NaN NaN NaN NaN 1594 \n",
|
||
"3 NaN NaN NaN NaN NaN 1594 \n",
|
||
"4 NaN NaN NaN NaN NaN 1594 \n",
|
||
"\n",
|
||
"[5 rows x 43 columns]"
|
||
]
|
||
},
|
||
"execution_count": 282,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"file_name = \"8customersplus.csv\"\n",
|
||
"file_path = BUCKET + \"/\" + directory_path + \"/\" + file_name\n",
|
||
"print(file_path)\n",
|
||
"with fs.open(file_path, mode=\"rb\") as file_in:\n",
|
||
" customersplus = pd.read_csv(file_in, sep=\",\")\n",
|
||
"\n",
|
||
"customersplus.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fe56785a-ed3c-4322-aafa-a630f97b836f",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyse Structures files"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 283,
|
||
"id": "87d801fc-d19a-4c45-9b21-9b6d7a8451fd",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"bdc2324-data/8/8structures.csv\n",
|
||
"No structures database\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"file_name = \"8structures.csv\"\n",
|
||
"file_path = BUCKET + \"/\" + directory_path + \"/\" + file_name\n",
|
||
"print(file_path)\n",
|
||
"try:\n",
|
||
" with fs.open(file_path, mode=\"rb\") as file_in:\n",
|
||
" structures = pd.read_csv(file_in, sep=\",\")\n",
|
||
"except:\n",
|
||
" print(\"No structures database\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b8452558-2d32-459b-91e7-f6042345e465",
|
||
"metadata": {},
|
||
"source": [
|
||
"For Stade Français, there is no structures, tags and structure_tag_mapping databases"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "285b1422-9ca9-4afd-b752-777a54aaa677",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyze Target databases"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 284,
|
||
"id": "b6e4c3ea-5ccf-4aec-bd2d-79a5a1194178",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"bdc2324-data/8/8customer_target_mappings.csv\n",
|
||
"Shape : (1449147, 7)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>customer_id</th>\n",
|
||
" <th>target_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>460062</td>\n",
|
||
" <td>68</td>\n",
|
||
" <td>2021-09-17 20:20:24.562734+02:00</td>\n",
|
||
" <td>2021-09-17 20:20:24.562734+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>460056</td>\n",
|
||
" <td>68</td>\n",
|
||
" <td>2021-09-17 20:20:24.610139+02:00</td>\n",
|
||
" <td>2021-09-17 20:20:24.610139+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>460051</td>\n",
|
||
" <td>65</td>\n",
|
||
" <td>2021-09-17 20:20:24.641381+02:00</td>\n",
|
||
" <td>2021-09-17 20:20:24.641381+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>460051</td>\n",
|
||
" <td>66</td>\n",
|
||
" <td>2021-09-17 20:20:24.672238+02:00</td>\n",
|
||
" <td>2021-09-17 20:20:24.672238+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>460049</td>\n",
|
||
" <td>71</td>\n",
|
||
" <td>2021-09-17 20:20:24.703110+02:00</td>\n",
|
||
" <td>2021-09-17 20:20:24.703110+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id customer_id target_id created_at \\\n",
|
||
"0 1 460062 68 2021-09-17 20:20:24.562734+02:00 \n",
|
||
"1 2 460056 68 2021-09-17 20:20:24.610139+02:00 \n",
|
||
"2 3 460051 65 2021-09-17 20:20:24.641381+02:00 \n",
|
||
"3 4 460051 66 2021-09-17 20:20:24.672238+02:00 \n",
|
||
"4 5 460049 71 2021-09-17 20:20:24.703110+02:00 \n",
|
||
"\n",
|
||
" updated_at name extra_field \n",
|
||
"0 2021-09-17 20:20:24.562734+02:00 NaN NaN \n",
|
||
"1 2021-09-17 20:20:24.610139+02:00 NaN NaN \n",
|
||
"2 2021-09-17 20:20:24.641381+02:00 NaN NaN \n",
|
||
"3 2021-09-17 20:20:24.672238+02:00 NaN NaN \n",
|
||
"4 2021-09-17 20:20:24.703110+02:00 NaN NaN "
|
||
]
|
||
},
|
||
"execution_count": 284,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"file_name = \"8customer_target_mappings.csv\"\n",
|
||
"file_path = BUCKET + \"/\" + directory_path + \"/\" + file_name\n",
|
||
"print(file_path)\n",
|
||
"try:\n",
|
||
" with fs.open(file_path, mode=\"rb\") as file_in:\n",
|
||
" customer_targets = pd.read_csv(file_in, sep=\",\")\n",
|
||
" \n",
|
||
"except:\n",
|
||
" print(\"No such database in s3\")\n",
|
||
"\n",
|
||
"print(\"Shape : \", customer_targets.shape)\n",
|
||
"customer_targets.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 285,
|
||
"id": "6e81a35c-3c6f-403d-9ebd-e8399ecd4263",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"bdc2324-data/8/8targets.csv\n",
|
||
"Shape : (331, 5)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>target_type_id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>ÉTUDIANTS (OPÉ PANIERS) 21-22</td>\n",
|
||
" <td>2021-09-17 18:10:40.879995+02:00</td>\n",
|
||
" <td>2021-09-17 18:10:40.879995+02:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>EFFECTIF + STAFF 21-22</td>\n",
|
||
" <td>2021-09-17 18:10:40.894758+02:00</td>\n",
|
||
" <td>2021-09-17 18:10:40.894758+02:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Acheteurs LOU / USAP</td>\n",
|
||
" <td>2021-09-17 18:10:40.911969+02:00</td>\n",
|
||
" <td>2021-09-17 18:10:40.911969+02:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Liste Compensation 21-22</td>\n",
|
||
" <td>2021-09-17 18:10:40.928796+02:00</td>\n",
|
||
" <td>2021-09-17 18:10:40.928796+02:00</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Partenaires 21-22</td>\n",
|
||
" <td>2021-09-17 18:10:40.945476+02:00</td>\n",
|
||
" <td>2021-09-17 18:10:40.945476+02:00</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id target_type_id name \\\n",
|
||
"0 1 1 ÉTUDIANTS (OPÉ PANIERS) 21-22 \n",
|
||
"1 2 1 EFFECTIF + STAFF 21-22 \n",
|
||
"2 3 1 Acheteurs LOU / USAP \n",
|
||
"3 4 1 Liste Compensation 21-22 \n",
|
||
"4 5 1 Partenaires 21-22 \n",
|
||
"\n",
|
||
" created_at updated_at \n",
|
||
"0 2021-09-17 18:10:40.879995+02:00 2021-09-17 18:10:40.879995+02:00 \n",
|
||
"1 2021-09-17 18:10:40.894758+02:00 2021-09-17 18:10:40.894758+02:00 \n",
|
||
"2 2021-09-17 18:10:40.911969+02:00 2021-09-17 18:10:40.911969+02:00 \n",
|
||
"3 2021-09-17 18:10:40.928796+02:00 2021-09-17 18:10:40.928796+02:00 \n",
|
||
"4 2021-09-17 18:10:40.945476+02:00 2021-09-17 18:10:40.945476+02:00 "
|
||
]
|
||
},
|
||
"execution_count": 285,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"file_name = \"8targets.csv\"\n",
|
||
"file_path = BUCKET + \"/\" + directory_path + \"/\" + file_name\n",
|
||
"print(file_path)\n",
|
||
"try:\n",
|
||
" with fs.open(file_path, mode=\"rb\") as file_in:\n",
|
||
" targets = pd.read_csv(file_in, sep=\",\")\n",
|
||
" \n",
|
||
"except:\n",
|
||
" print(\"No such database in s3\")\n",
|
||
"\n",
|
||
"print(\"Shape : \", targets.shape)\n",
|
||
"targets.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 286,
|
||
"id": "85696d74-3b2f-4368-9045-44db5322b60d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"bdc2324-data/8/8target_types.csv\n",
|
||
"Shape : (4, 6)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>is_import</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>manual_static_filter</td>\n",
|
||
" <td>2021-09-17 18:10:40.864320+02:00</td>\n",
|
||
" <td>2021-09-17 18:10:40.864320+02:00</td>\n",
|
||
" <td>e34e3aa838a6eb4c41df6ed4444b796a</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>manual_dynamic_filter</td>\n",
|
||
" <td>2022-03-09 14:41:45.695407+01:00</td>\n",
|
||
" <td>2022-03-09 14:41:45.695407+01:00</td>\n",
|
||
" <td>e0f4b8693184850fefd6d2a38f10584e</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>manual_static_filter</td>\n",
|
||
" <td>2022-04-01 17:02:49.588910+02:00</td>\n",
|
||
" <td>2022-04-01 17:02:49.588910+02:00</td>\n",
|
||
" <td>fb27e81baa4debc6a4e1a8639c20e808</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>manual_import</td>\n",
|
||
" <td>2022-05-06 14:26:01.923160+02:00</td>\n",
|
||
" <td>2022-05-06 14:26:01.923160+02:00</td>\n",
|
||
" <td>12213df2ce68a624e4c0070521437bac</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id is_import name created_at \\\n",
|
||
"0 1 NaN manual_static_filter 2021-09-17 18:10:40.864320+02:00 \n",
|
||
"1 2 False manual_dynamic_filter 2022-03-09 14:41:45.695407+01:00 \n",
|
||
"2 3 False manual_static_filter 2022-04-01 17:02:49.588910+02:00 \n",
|
||
"3 4 True manual_import 2022-05-06 14:26:01.923160+02:00 \n",
|
||
"\n",
|
||
" updated_at identifier \n",
|
||
"0 2021-09-17 18:10:40.864320+02:00 e34e3aa838a6eb4c41df6ed4444b796a \n",
|
||
"1 2022-03-09 14:41:45.695407+01:00 e0f4b8693184850fefd6d2a38f10584e \n",
|
||
"2 2022-04-01 17:02:49.588910+02:00 fb27e81baa4debc6a4e1a8639c20e808 \n",
|
||
"3 2022-05-06 14:26:01.923160+02:00 12213df2ce68a624e4c0070521437bac "
|
||
]
|
||
},
|
||
"execution_count": 286,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"file_name = \"8target_types.csv\"\n",
|
||
"file_path = BUCKET + \"/\" + directory_path + \"/\" + file_name\n",
|
||
"print(file_path)\n",
|
||
"try:\n",
|
||
" with fs.open(file_path, mode=\"rb\") as file_in:\n",
|
||
" target_types = pd.read_csv(file_in, sep=\",\")\n",
|
||
" \n",
|
||
"except:\n",
|
||
" print(\"No such database in s3\")\n",
|
||
"\n",
|
||
"print(\"Shape : \", target_types.shape)\n",
|
||
"target_types.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "cdc6416b-3deb-446c-8957-435745b93533",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyze consumption files"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f8622bd5-a5ab-403f-ab01-758aec879ee4",
|
||
"metadata": {},
|
||
"source": [
|
||
"Meaning consumptions.csv, suppliers.csv, tickets.csv and purchases.csv\n",
|
||
"\n",
|
||
"However, there is no consumptions.csv file"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 287,
|
||
"id": "7c57529b-2ffb-4039-9795-b27c6fbd54a4",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8purchases.csv\n",
|
||
"Shape : (975703, 7)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>purchase_date</th>\n",
|
||
" <th>customer_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>number</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>119609</td>\n",
|
||
" <td>2017-09-09 15:39:45.913000+02:00</td>\n",
|
||
" <td>1149</td>\n",
|
||
" <td>2021-06-29 21:52:21.816195+02:00</td>\n",
|
||
" <td>2021-06-29 21:52:21.816195+02:00</td>\n",
|
||
" <td>193416</td>\n",
|
||
" <td>f2956e2d53321317e7c15c1cb992156c</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>119610</td>\n",
|
||
" <td>2017-09-09 15:39:46.033000+02:00</td>\n",
|
||
" <td>1149</td>\n",
|
||
" <td>2021-06-29 21:52:21.817846+02:00</td>\n",
|
||
" <td>2021-06-29 21:52:21.817846+02:00</td>\n",
|
||
" <td>193416</td>\n",
|
||
" <td>faabab441b2668a85bb484490b2166c3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>5464</td>\n",
|
||
" <td>2017-07-24 19:44:11.923000+02:00</td>\n",
|
||
" <td>1251</td>\n",
|
||
" <td>2021-06-29 21:33:45.604224+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:45.604224+02:00</td>\n",
|
||
" <td>184354</td>\n",
|
||
" <td>f63c69fa585ce4f91681f0d9ebeb770f</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>119613</td>\n",
|
||
" <td>2017-09-10 11:25:45.820000+02:00</td>\n",
|
||
" <td>12558</td>\n",
|
||
" <td>2021-06-29 21:52:21.822033+02:00</td>\n",
|
||
" <td>2021-06-29 21:52:21.822033+02:00</td>\n",
|
||
" <td>193462</td>\n",
|
||
" <td>ffce5fd8d2348eb6885d0ee9c7bd017c</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1422860</td>\n",
|
||
" <td>2018-10-08 10:30:42.980000+02:00</td>\n",
|
||
" <td>17935</td>\n",
|
||
" <td>2021-07-16 04:20:55.347369+02:00</td>\n",
|
||
" <td>2021-07-16 04:20:55.347369+02:00</td>\n",
|
||
" <td>247459</td>\n",
|
||
" <td>193e41eae8ee078537107a569c0426ef</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id purchase_date customer_id \\\n",
|
||
"0 119609 2017-09-09 15:39:45.913000+02:00 1149 \n",
|
||
"1 119610 2017-09-09 15:39:46.033000+02:00 1149 \n",
|
||
"2 5464 2017-07-24 19:44:11.923000+02:00 1251 \n",
|
||
"3 119613 2017-09-10 11:25:45.820000+02:00 12558 \n",
|
||
"4 1422860 2018-10-08 10:30:42.980000+02:00 17935 \n",
|
||
"\n",
|
||
" created_at updated_at number \\\n",
|
||
"0 2021-06-29 21:52:21.816195+02:00 2021-06-29 21:52:21.816195+02:00 193416 \n",
|
||
"1 2021-06-29 21:52:21.817846+02:00 2021-06-29 21:52:21.817846+02:00 193416 \n",
|
||
"2 2021-06-29 21:33:45.604224+02:00 2021-06-29 21:33:45.604224+02:00 184354 \n",
|
||
"3 2021-06-29 21:52:21.822033+02:00 2021-06-29 21:52:21.822033+02:00 193462 \n",
|
||
"4 2021-07-16 04:20:55.347369+02:00 2021-07-16 04:20:55.347369+02:00 247459 \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 f2956e2d53321317e7c15c1cb992156c \n",
|
||
"1 faabab441b2668a85bb484490b2166c3 \n",
|
||
"2 f63c69fa585ce4f91681f0d9ebeb770f \n",
|
||
"3 ffce5fd8d2348eb6885d0ee9c7bd017c \n",
|
||
"4 193e41eae8ee078537107a569c0426ef "
|
||
]
|
||
},
|
||
"execution_count": 287,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"purchases = display_databases(\"8purchases.csv\")\n",
|
||
"purchases.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 288,
|
||
"id": "903321fb-99f8-475d-b4a6-c70ec2efe190",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8tickets.csv\n",
|
||
"Shape : (2370152, 11)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>number</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>purchase_id</th>\n",
|
||
" <th>product_id</th>\n",
|
||
" <th>is_from_subscription</th>\n",
|
||
" <th>type_of</th>\n",
|
||
" <th>supplier_id</th>\n",
|
||
" <th>barcode</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>254164</td>\n",
|
||
" <td>193416_763837_650_688_326212</td>\n",
|
||
" <td>2021-06-29 21:53:14.951871+02:00</td>\n",
|
||
" <td>2021-06-29 21:53:14.951871+02:00</td>\n",
|
||
" <td>119609</td>\n",
|
||
" <td>3334</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>9ec3b5617fc54512acf131aa5fa26870</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>254165</td>\n",
|
||
" <td>193416_763838_650_688_326236</td>\n",
|
||
" <td>2021-06-29 21:53:14.953717+02:00</td>\n",
|
||
" <td>2021-06-29 21:53:14.953717+02:00</td>\n",
|
||
" <td>119610</td>\n",
|
||
" <td>3334</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>b227c664e2574a919672683f5cc4c98e</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>254168</td>\n",
|
||
" <td>193462_763921_649_687_305676</td>\n",
|
||
" <td>2021-06-29 21:53:14.958207+02:00</td>\n",
|
||
" <td>2021-06-29 21:53:14.958207+02:00</td>\n",
|
||
" <td>119613</td>\n",
|
||
" <td>3432</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>28ac507ad84a30993bdfc0996fd2476b</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>254169</td>\n",
|
||
" <td>193462_763922_649_687_305653</td>\n",
|
||
" <td>2021-06-29 21:53:14.959681+02:00</td>\n",
|
||
" <td>2021-06-29 21:53:14.959681+02:00</td>\n",
|
||
" <td>119614</td>\n",
|
||
" <td>3268</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>131dbaeef23f5ac2271bf0266ce35476</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>254170</td>\n",
|
||
" <td>193462_763923_649_687_305630</td>\n",
|
||
" <td>2021-06-29 21:53:14.961157+02:00</td>\n",
|
||
" <td>2021-06-29 21:53:14.961157+02:00</td>\n",
|
||
" <td>119615</td>\n",
|
||
" <td>3268</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1a6342ad2c213b626aa55e5374cd661a</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id number created_at \\\n",
|
||
"0 254164 193416_763837_650_688_326212 2021-06-29 21:53:14.951871+02:00 \n",
|
||
"1 254165 193416_763838_650_688_326236 2021-06-29 21:53:14.953717+02:00 \n",
|
||
"2 254168 193462_763921_649_687_305676 2021-06-29 21:53:14.958207+02:00 \n",
|
||
"3 254169 193462_763922_649_687_305653 2021-06-29 21:53:14.959681+02:00 \n",
|
||
"4 254170 193462_763923_649_687_305630 2021-06-29 21:53:14.961157+02:00 \n",
|
||
"\n",
|
||
" updated_at purchase_id product_id \\\n",
|
||
"0 2021-06-29 21:53:14.951871+02:00 119609 3334 \n",
|
||
"1 2021-06-29 21:53:14.953717+02:00 119610 3334 \n",
|
||
"2 2021-06-29 21:53:14.958207+02:00 119613 3432 \n",
|
||
"3 2021-06-29 21:53:14.959681+02:00 119614 3268 \n",
|
||
"4 2021-06-29 21:53:14.961157+02:00 119615 3268 \n",
|
||
"\n",
|
||
" is_from_subscription type_of supplier_id barcode \\\n",
|
||
"0 False 1 2 NaN \n",
|
||
"1 False 1 2 NaN \n",
|
||
"2 False 1 2 NaN \n",
|
||
"3 False 1 2 NaN \n",
|
||
"4 False 1 2 NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 9ec3b5617fc54512acf131aa5fa26870 \n",
|
||
"1 b227c664e2574a919672683f5cc4c98e \n",
|
||
"2 28ac507ad84a30993bdfc0996fd2476b \n",
|
||
"3 131dbaeef23f5ac2271bf0266ce35476 \n",
|
||
"4 1a6342ad2c213b626aa55e5374cd661a "
|
||
]
|
||
},
|
||
"execution_count": 288,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"tickets = display_databases(\"8tickets.csv\")\n",
|
||
"tickets.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 289,
|
||
"id": "243e6942-0233-4cd5-b32b-e005457131d2",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8suppliers.csv\n",
|
||
"Shape : (16, 9)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>manually_added</th>\n",
|
||
" <th>label</th>\n",
|
||
" <th>itr</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>commission</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>152</td>\n",
|
||
" <td>plateformeceweb</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2021-07-16 00:02:17.805193+02:00</td>\n",
|
||
" <td>2021-07-16 00:02:17.805193+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0fc934f49bfa9f1f4e6ab7e2593b6839</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>6</td>\n",
|
||
" <td>accreditation annuelle</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2021-06-29 21:33:14.138349+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:14.138349+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fe13238540e0ff293ec8aad29aeae6c3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>68</td>\n",
|
||
" <td>abonnement parking</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2021-06-29 22:10:31.167367+02:00</td>\n",
|
||
" <td>2021-06-29 22:10:31.167367+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0f7defc52a97cdca533af74f4e6e5b1e</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>9</td>\n",
|
||
" <td>accreditation match</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2021-06-29 21:33:14.142084+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:14.142084+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>40e19a7c4824eaad298e0107ed7e3691</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>154</td>\n",
|
||
" <td>web lnr-lou</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2021-07-16 00:02:17.806521+02:00</td>\n",
|
||
" <td>2021-07-16 00:02:17.806521+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>b144dd617807b02e0d9002fac6c61768</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name manually_added label itr \\\n",
|
||
"0 152 plateformeceweb False NaN NaN \n",
|
||
"1 6 accreditation annuelle False NaN NaN \n",
|
||
"2 68 abonnement parking False NaN NaN \n",
|
||
"3 9 accreditation match False NaN NaN \n",
|
||
"4 154 web lnr-lou False NaN NaN \n",
|
||
"\n",
|
||
" updated_at created_at \\\n",
|
||
"0 2021-07-16 00:02:17.805193+02:00 2021-07-16 00:02:17.805193+02:00 \n",
|
||
"1 2021-06-29 21:33:14.138349+02:00 2021-06-29 21:33:14.138349+02:00 \n",
|
||
"2 2021-06-29 22:10:31.167367+02:00 2021-06-29 22:10:31.167367+02:00 \n",
|
||
"3 2021-06-29 21:33:14.142084+02:00 2021-06-29 21:33:14.142084+02:00 \n",
|
||
"4 2021-07-16 00:02:17.806521+02:00 2021-07-16 00:02:17.806521+02:00 \n",
|
||
"\n",
|
||
" commission identifier \n",
|
||
"0 NaN 0fc934f49bfa9f1f4e6ab7e2593b6839 \n",
|
||
"1 NaN fe13238540e0ff293ec8aad29aeae6c3 \n",
|
||
"2 NaN 0f7defc52a97cdca533af74f4e6e5b1e \n",
|
||
"3 NaN 40e19a7c4824eaad298e0107ed7e3691 \n",
|
||
"4 NaN b144dd617807b02e0d9002fac6c61768 "
|
||
]
|
||
},
|
||
"execution_count": 289,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"suppliers = display_databases(\"8suppliers.csv\")\n",
|
||
"suppliers.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fd8c876a-f0c5-4123-a422-c267af5f29b1",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyse product file"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 290,
|
||
"id": "6b82efce-1dee-4d89-8585-28c4ad477eef",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8products.csv\n",
|
||
"Shape : (45411, 14)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>amount</th>\n",
|
||
" <th>is_full_price</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>apply_price</th>\n",
|
||
" <th>products_group_id</th>\n",
|
||
" <th>product_pack_id</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" <th>amount_consumption</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>90013</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1961</td>\n",
|
||
" <td>912</td>\n",
|
||
" <td>2021-07-16 04:56:05.797551+02:00</td>\n",
|
||
" <td>2021-07-16 04:56:05.797551+02:00</td>\n",
|
||
" <td>34</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>87917</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>476e111175b1660688b7c13dade2b57e</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>662</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>29</td>\n",
|
||
" <td>2021-06-29 21:33:17.389201+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:17.389201+02:00</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>640</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2c765698e9bedd48e8a3fd27dc8dbc97</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>646</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>46</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>2021-06-29 21:33:17.366742+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:17.366742+02:00</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>624</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>4e719148651fd7f175e3fb51bdb5d31b</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5703</td>\n",
|
||
" <td>5.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>188</td>\n",
|
||
" <td>2021-06-29 21:52:09.374365+02:00</td>\n",
|
||
" <td>2021-06-29 21:52:09.374365+02:00</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>5540</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>e4d7beeb0a631e2e51e61951623ba9b1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>648</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>49</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>2021-06-29 21:33:17.369471+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:17.369471+02:00</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>626</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>07a5dd9e125345b9458651ab73605255</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id amount is_full_price representation_id pricing_formula_id \\\n",
|
||
"0 90013 0.0 False 1961 912 \n",
|
||
"1 662 0.0 False 11 29 \n",
|
||
"2 646 0.0 False 46 10 \n",
|
||
"3 5703 5.0 False 7 188 \n",
|
||
"4 648 0.0 False 49 10 \n",
|
||
"\n",
|
||
" created_at updated_at \\\n",
|
||
"0 2021-07-16 04:56:05.797551+02:00 2021-07-16 04:56:05.797551+02:00 \n",
|
||
"1 2021-06-29 21:33:17.389201+02:00 2021-06-29 21:33:17.389201+02:00 \n",
|
||
"2 2021-06-29 21:33:17.366742+02:00 2021-06-29 21:33:17.366742+02:00 \n",
|
||
"3 2021-06-29 21:52:09.374365+02:00 2021-06-29 21:52:09.374365+02:00 \n",
|
||
"4 2021-06-29 21:33:17.369471+02:00 2021-06-29 21:33:17.369471+02:00 \n",
|
||
"\n",
|
||
" category_id apply_price products_group_id product_pack_id extra_field \\\n",
|
||
"0 34 0.0 87917 1 NaN \n",
|
||
"1 16 0.0 640 1 NaN \n",
|
||
"2 15 0.0 624 1 NaN \n",
|
||
"3 4 0.0 5540 1 NaN \n",
|
||
"4 15 0.0 626 1 NaN \n",
|
||
"\n",
|
||
" amount_consumption identifier \n",
|
||
"0 NaN 476e111175b1660688b7c13dade2b57e \n",
|
||
"1 NaN 2c765698e9bedd48e8a3fd27dc8dbc97 \n",
|
||
"2 NaN 4e719148651fd7f175e3fb51bdb5d31b \n",
|
||
"3 NaN e4d7beeb0a631e2e51e61951623ba9b1 \n",
|
||
"4 NaN 07a5dd9e125345b9458651ab73605255 "
|
||
]
|
||
},
|
||
"execution_count": 290,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products = display_databases(\"8products.csv\")\n",
|
||
"products.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8ad143b2-2869-4bd2-982e-688498b98727",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyze pricing files"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9a54e9a5-801d-4000-9e76-e792edbf7e41",
|
||
"metadata": {},
|
||
"source": [
|
||
"Meaning pricing_formulas.csv and type_of_pricing_formulas"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 291,
|
||
"id": "daf37bff-a26d-4ff5-ad50-c90f917164bd",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8pricing_formulas.csv\n",
|
||
"Shape : (516, 6)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>7</td>\n",
|
||
" <td>visite stade enfant</td>\n",
|
||
" <td>2021-06-29 21:33:14.160728+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:14.160728+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>bbc80e5761a0ea325f6f6a5411752659</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>3229</td>\n",
|
||
" <td>tarif bloc etudiants</td>\n",
|
||
" <td>2021-07-16 04:20:46.684601+02:00</td>\n",
|
||
" <td>2021-09-03 16:44:46.096785+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>205122cc7e96d559330972b0ec0cf35a</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>42</td>\n",
|
||
" <td>invitation eiffage</td>\n",
|
||
" <td>2021-06-29 21:33:14.204483+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:14.204483+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>e4e6365c02e2a7b01ebe2ce8ace624f2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4379</td>\n",
|
||
" <td>invitation offre speciale</td>\n",
|
||
" <td>2021-07-16 05:21:44.984893+02:00</td>\n",
|
||
" <td>2021-07-16 05:21:44.984893+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>307817b6205535a35915a64027ee161e</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>2641</td>\n",
|
||
" <td>prevente reabo enfant</td>\n",
|
||
" <td>2021-07-16 03:47:40.896805+02:00</td>\n",
|
||
" <td>2021-09-03 16:08:35.304298+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>478eb63c71ba35d8d3d64c8637dafdee</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 7 visite stade enfant 2021-06-29 21:33:14.160728+02:00 \n",
|
||
"1 3229 tarif bloc etudiants 2021-07-16 04:20:46.684601+02:00 \n",
|
||
"2 42 invitation eiffage 2021-06-29 21:33:14.204483+02:00 \n",
|
||
"3 4379 invitation offre speciale 2021-07-16 05:21:44.984893+02:00 \n",
|
||
"4 2641 prevente reabo enfant 2021-07-16 03:47:40.896805+02:00 \n",
|
||
"\n",
|
||
" updated_at extra_field \\\n",
|
||
"0 2021-06-29 21:33:14.160728+02:00 NaN \n",
|
||
"1 2021-09-03 16:44:46.096785+02:00 NaN \n",
|
||
"2 2021-06-29 21:33:14.204483+02:00 NaN \n",
|
||
"3 2021-07-16 05:21:44.984893+02:00 NaN \n",
|
||
"4 2021-09-03 16:08:35.304298+02:00 NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 bbc80e5761a0ea325f6f6a5411752659 \n",
|
||
"1 205122cc7e96d559330972b0ec0cf35a \n",
|
||
"2 e4e6365c02e2a7b01ebe2ce8ace624f2 \n",
|
||
"3 307817b6205535a35915a64027ee161e \n",
|
||
"4 478eb63c71ba35d8d3d64c8637dafdee "
|
||
]
|
||
},
|
||
"execution_count": 291,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pricing_formulas = display_databases(\"8pricing_formulas.csv\")\n",
|
||
"pricing_formulas.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 292,
|
||
"id": "cdb14488-b093-4b39-84fa-1c2b4576208f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8type_of_pricing_formulas.csv\n",
|
||
"Shape : (103, 6)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>type_of_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>1021</td>\n",
|
||
" <td>2021-09-03 14:17:19.816110+02:00</td>\n",
|
||
" <td>2021-09-03 14:17:19.816110+02:00</td>\n",
|
||
" <td>41047fbeb7cd3e1cb2713c608d2f786d</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>4305</td>\n",
|
||
" <td>2021-09-03 14:17:19.848088+02:00</td>\n",
|
||
" <td>2021-09-03 14:17:19.848088+02:00</td>\n",
|
||
" <td>a62a4dad7d62738129244bbb5ede0747</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>4306</td>\n",
|
||
" <td>2021-09-03 14:17:19.864067+02:00</td>\n",
|
||
" <td>2021-09-03 14:17:19.864067+02:00</td>\n",
|
||
" <td>c3770373e09f55412068c447736d9da3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>29</td>\n",
|
||
" <td>2021-09-03 14:17:19.880078+02:00</td>\n",
|
||
" <td>2021-09-03 14:17:19.880078+02:00</td>\n",
|
||
" <td>7b7b1242ae7a8c9eb66d35d8a4348ccd</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>2021-09-03 14:18:03.616081+02:00</td>\n",
|
||
" <td>2021-09-03 14:18:03.616081+02:00</td>\n",
|
||
" <td>0a2b941c46b31258c03b316aa064e86a</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id type_of_id pricing_formula_id created_at \\\n",
|
||
"0 1 7 1021 2021-09-03 14:17:19.816110+02:00 \n",
|
||
"1 2 7 4305 2021-09-03 14:17:19.848088+02:00 \n",
|
||
"2 3 7 4306 2021-09-03 14:17:19.864067+02:00 \n",
|
||
"3 4 7 29 2021-09-03 14:17:19.880078+02:00 \n",
|
||
"4 5 8 10 2021-09-03 14:18:03.616081+02:00 \n",
|
||
"\n",
|
||
" updated_at identifier \n",
|
||
"0 2021-09-03 14:17:19.816110+02:00 41047fbeb7cd3e1cb2713c608d2f786d \n",
|
||
"1 2021-09-03 14:17:19.848088+02:00 a62a4dad7d62738129244bbb5ede0747 \n",
|
||
"2 2021-09-03 14:17:19.864067+02:00 c3770373e09f55412068c447736d9da3 \n",
|
||
"3 2021-09-03 14:17:19.880078+02:00 7b7b1242ae7a8c9eb66d35d8a4348ccd \n",
|
||
"4 2021-09-03 14:18:03.616081+02:00 0a2b941c46b31258c03b316aa064e86a "
|
||
]
|
||
},
|
||
"execution_count": 292,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"type_pricing_formulas = display_databases(\"8type_of_pricing_formulas.csv\")\n",
|
||
"type_pricing_formulas.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a084297a-4fd7-4cda-b513-7704f4244a5c",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyze type of products"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "76a67ea7-8720-441e-8973-23e5d105370e",
|
||
"metadata": {},
|
||
"source": [
|
||
"Meaning categories.csv, type_of_categories.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 293,
|
||
"id": "6582694d-5339-4f33-a943-c73033121a90",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8categories.csv\n",
|
||
"Shape : (148, 7)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" <th>quota</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>653</td>\n",
|
||
" <td>acces village implid</td>\n",
|
||
" <td>2021-07-16 00:04:37.181331+02:00</td>\n",
|
||
" <td>2021-07-16 00:04:37.181331+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>c447d053646a6503d3cd84d4798bf5b7</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>805</td>\n",
|
||
" <td>parking organisation</td>\n",
|
||
" <td>2021-07-16 01:54:15.822407+02:00</td>\n",
|
||
" <td>2021-07-16 01:54:15.822407+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>02bf9871964345f505ad305080daec36</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>809</td>\n",
|
||
" <td>rose rouge orange</td>\n",
|
||
" <td>2021-07-16 01:54:15.825345+02:00</td>\n",
|
||
" <td>2021-07-16 01:54:15.825345+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>31fb5b57bc1a2bcd5c155fb0d9e7c0dd</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>2183</td>\n",
|
||
" <td>2eme catégorie j.b. centrale</td>\n",
|
||
" <td>2021-07-16 04:37:25.446835+02:00</td>\n",
|
||
" <td>2021-07-16 04:37:25.446835+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>c9eb6651caaed42b809b3f4407a847c9</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>621</td>\n",
|
||
" <td>acces brasserie</td>\n",
|
||
" <td>2021-07-16 00:02:17.249701+02:00</td>\n",
|
||
" <td>2021-07-16 00:02:17.249701+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>349e6a59585d78d80d46acbc6a520c50</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 653 acces village implid 2021-07-16 00:04:37.181331+02:00 \n",
|
||
"1 805 parking organisation 2021-07-16 01:54:15.822407+02:00 \n",
|
||
"2 809 rose rouge orange 2021-07-16 01:54:15.825345+02:00 \n",
|
||
"3 2183 2eme catégorie j.b. centrale 2021-07-16 04:37:25.446835+02:00 \n",
|
||
"4 621 acces brasserie 2021-07-16 00:02:17.249701+02:00 \n",
|
||
"\n",
|
||
" updated_at extra_field quota \\\n",
|
||
"0 2021-07-16 00:04:37.181331+02:00 NaN NaN \n",
|
||
"1 2021-07-16 01:54:15.822407+02:00 NaN NaN \n",
|
||
"2 2021-07-16 01:54:15.825345+02:00 NaN NaN \n",
|
||
"3 2021-07-16 04:37:25.446835+02:00 NaN NaN \n",
|
||
"4 2021-07-16 00:02:17.249701+02:00 NaN NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 c447d053646a6503d3cd84d4798bf5b7 \n",
|
||
"1 02bf9871964345f505ad305080daec36 \n",
|
||
"2 31fb5b57bc1a2bcd5c155fb0d9e7c0dd \n",
|
||
"3 c9eb6651caaed42b809b3f4407a847c9 \n",
|
||
"4 349e6a59585d78d80d46acbc6a520c50 "
|
||
]
|
||
},
|
||
"execution_count": 293,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"categories = display_databases(\"8categories.csv\")\n",
|
||
"categories.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 294,
|
||
"id": "589076df-1958-42de-9941-1aff9fa8536f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8type_of_categories.csv\n",
|
||
"Shape : (6, 6)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>type_of_id</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2021-08-20 15:22:05.558209+02:00</td>\n",
|
||
" <td>2021-08-20 15:22:05.558209+02:00</td>\n",
|
||
" <td>af8fa6d57f6b19a7600a69e7771c7c3a</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2021-09-02 17:29:32.582002+02:00</td>\n",
|
||
" <td>2021-09-02 17:29:32.582002+02:00</td>\n",
|
||
" <td>63718e7ad306912427758ddf988ad34f</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>2021-09-02 17:32:38.299733+02:00</td>\n",
|
||
" <td>2021-09-02 17:32:38.299733+02:00</td>\n",
|
||
" <td>5e147d4d90888df14c4584f5c6887c96</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2021-09-02 17:35:04.748993+02:00</td>\n",
|
||
" <td>2021-09-02 17:35:04.748993+02:00</td>\n",
|
||
" <td>a9dfdc3f40b41e3018933c6167fc38a5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>17</td>\n",
|
||
" <td>2021-09-02 17:35:37.396740+02:00</td>\n",
|
||
" <td>2021-09-02 17:35:37.396740+02:00</td>\n",
|
||
" <td>c05b0061d2a875adbc35d3dfa6a50a12</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id type_of_id category_id created_at \\\n",
|
||
"0 1 1 2 2021-08-20 15:22:05.558209+02:00 \n",
|
||
"1 2 2 1 2021-09-02 17:29:32.582002+02:00 \n",
|
||
"2 3 3 3 2021-09-02 17:32:38.299733+02:00 \n",
|
||
"3 4 4 4 2021-09-02 17:35:04.748993+02:00 \n",
|
||
"4 5 5 17 2021-09-02 17:35:37.396740+02:00 \n",
|
||
"\n",
|
||
" updated_at identifier \n",
|
||
"0 2021-08-20 15:22:05.558209+02:00 af8fa6d57f6b19a7600a69e7771c7c3a \n",
|
||
"1 2021-09-02 17:29:32.582002+02:00 63718e7ad306912427758ddf988ad34f \n",
|
||
"2 2021-09-02 17:32:38.299733+02:00 5e147d4d90888df14c4584f5c6887c96 \n",
|
||
"3 2021-09-02 17:35:04.748993+02:00 a9dfdc3f40b41e3018933c6167fc38a5 \n",
|
||
"4 2021-09-02 17:35:37.396740+02:00 c05b0061d2a875adbc35d3dfa6a50a12 "
|
||
]
|
||
},
|
||
"execution_count": 294,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"type_categories = display_databases(\"8type_of_categories.csv\")\n",
|
||
"type_categories.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "3427b681-4c05-4e4e-9c2b-867ee789f98c",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyze type of representations"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9381e36b-090a-44c5-a29d-3ac4c9a4431e",
|
||
"metadata": {},
|
||
"source": [
|
||
"Meaning representation_category_capacities.csv, representations.csv, representations_types.csv\n",
|
||
"\n",
|
||
"however there is no representation_types database"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 295,
|
||
"id": "6f06d72a-5725-4eee-8e4c-e9ef5820f346",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8representation_category_capacities.csv\n",
|
||
"Shape : (7378, 7)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>expected_filling</th>\n",
|
||
" <th>max_filling</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>561</td>\n",
|
||
" <td>2021-06-29 21:33:14.096827+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:14.096827+02:00</td>\n",
|
||
" <td>17</td>\n",
|
||
" <td>37</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>571</td>\n",
|
||
" <td>2021-06-29 21:33:14.110047+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:14.110047+02:00</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>39</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>9665</td>\n",
|
||
" <td>2021-07-16 00:02:17.736387+02:00</td>\n",
|
||
" <td>2021-07-16 00:02:17.736387+02:00</td>\n",
|
||
" <td>1887</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>383906</td>\n",
|
||
" <td>2023-03-04 02:55:01.585418+01:00</td>\n",
|
||
" <td>2023-03-04 02:55:01.585418+01:00</td>\n",
|
||
" <td>52729</td>\n",
|
||
" <td>476</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>393</td>\n",
|
||
" <td>2021-06-29 21:33:13.876766+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:13.876766+02:00</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>23</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id created_at updated_at \\\n",
|
||
"0 561 2021-06-29 21:33:14.096827+02:00 2021-06-29 21:33:14.096827+02:00 \n",
|
||
"1 571 2021-06-29 21:33:14.110047+02:00 2021-06-29 21:33:14.110047+02:00 \n",
|
||
"2 9665 2021-07-16 00:02:17.736387+02:00 2021-07-16 00:02:17.736387+02:00 \n",
|
||
"3 383906 2023-03-04 02:55:01.585418+01:00 2023-03-04 02:55:01.585418+01:00 \n",
|
||
"4 393 2021-06-29 21:33:13.876766+02:00 2021-06-29 21:33:13.876766+02:00 \n",
|
||
"\n",
|
||
" representation_id category_id expected_filling max_filling \n",
|
||
"0 17 37 NaN NaN \n",
|
||
"1 14 39 NaN NaN \n",
|
||
"2 1887 8 NaN NaN \n",
|
||
"3 52729 476 NaN NaN \n",
|
||
"4 9 23 NaN NaN "
|
||
]
|
||
},
|
||
"execution_count": 295,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"representation_category_capacities = display_databases(\"8representation_category_capacities.csv\")\n",
|
||
"representation_category_capacities.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 296,
|
||
"id": "bd405913-033d-4f15-a5b9-103d577baaff",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8representations.csv\n",
|
||
"Shape : (1015, 16)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>serial</th>\n",
|
||
" <th>event_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>start_date_time</th>\n",
|
||
" <th>open</th>\n",
|
||
" <th>satisfaction</th>\n",
|
||
" <th>end_date_time</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>is_display</th>\n",
|
||
" <th>representation_type_id</th>\n",
|
||
" <th>expected_filling</th>\n",
|
||
" <th>max_filling</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>5903</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>5836</td>\n",
|
||
" <td>2021-07-16 05:16:57.419565+02:00</td>\n",
|
||
" <td>2021-07-16 05:16:57.419565+02:00</td>\n",
|
||
" <td>2019-08-24 18:00:00+02:00</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1901-01-01 00:09:21+00:09</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>8009c34cae4e79e3781f16f3ceeab244</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>67133</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>65652</td>\n",
|
||
" <td>2023-09-27 02:21:36.573001+02:00</td>\n",
|
||
" <td>2023-09-27 02:21:36.573001+02:00</td>\n",
|
||
" <td>2023-10-04 10:30:00+02:00</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1901-01-01 00:09:21+00:09</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>4e9d3fc8d1f7bf563dc586548fe6390e</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1874</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1826</td>\n",
|
||
" <td>2021-07-16 00:02:17.390274+02:00</td>\n",
|
||
" <td>2021-07-16 00:02:17.390274+02:00</td>\n",
|
||
" <td>2019-09-14 18:00:00+02:00</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1901-01-01 00:09:21+00:09</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>19f666370c1fc781dff638c20ae04c8a</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5904</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>5837</td>\n",
|
||
" <td>2021-07-16 05:16:57.420302+02:00</td>\n",
|
||
" <td>2021-07-16 05:16:57.420302+02:00</td>\n",
|
||
" <td>2019-09-01 17:05:00+02:00</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1901-01-01 00:09:21+00:09</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>4221acd3f49179f5d0b292c15d1ab8e4</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>4165</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>4106</td>\n",
|
||
" <td>2021-07-16 03:53:05.929713+02:00</td>\n",
|
||
" <td>2021-07-16 03:53:05.929713+02:00</td>\n",
|
||
" <td>2018-10-14 14:00:00+02:00</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1901-01-01 00:09:21+00:09</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>733104286519c0614b2d45470eb180a1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id serial event_id created_at \\\n",
|
||
"0 5903 NaN 5836 2021-07-16 05:16:57.419565+02:00 \n",
|
||
"1 67133 NaN 65652 2023-09-27 02:21:36.573001+02:00 \n",
|
||
"2 1874 NaN 1826 2021-07-16 00:02:17.390274+02:00 \n",
|
||
"3 5904 NaN 5837 2021-07-16 05:16:57.420302+02:00 \n",
|
||
"4 4165 NaN 4106 2021-07-16 03:53:05.929713+02:00 \n",
|
||
"\n",
|
||
" updated_at start_date_time open \\\n",
|
||
"0 2021-07-16 05:16:57.419565+02:00 2019-08-24 18:00:00+02:00 True \n",
|
||
"1 2023-09-27 02:21:36.573001+02:00 2023-10-04 10:30:00+02:00 True \n",
|
||
"2 2021-07-16 00:02:17.390274+02:00 2019-09-14 18:00:00+02:00 True \n",
|
||
"3 2021-07-16 05:16:57.420302+02:00 2019-09-01 17:05:00+02:00 True \n",
|
||
"4 2021-07-16 03:53:05.929713+02:00 2018-10-14 14:00:00+02:00 True \n",
|
||
"\n",
|
||
" satisfaction end_date_time name is_display \\\n",
|
||
"0 NaN 1901-01-01 00:09:21+00:09 NaN True \n",
|
||
"1 NaN 1901-01-01 00:09:21+00:09 NaN True \n",
|
||
"2 NaN 1901-01-01 00:09:21+00:09 NaN True \n",
|
||
"3 NaN 1901-01-01 00:09:21+00:09 NaN True \n",
|
||
"4 NaN 1901-01-01 00:09:21+00:09 NaN True \n",
|
||
"\n",
|
||
" representation_type_id expected_filling max_filling extra_field \\\n",
|
||
"0 NaN NaN NaN NaN \n",
|
||
"1 NaN NaN NaN NaN \n",
|
||
"2 NaN NaN NaN NaN \n",
|
||
"3 NaN NaN NaN NaN \n",
|
||
"4 NaN NaN NaN NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 8009c34cae4e79e3781f16f3ceeab244 \n",
|
||
"1 4e9d3fc8d1f7bf563dc586548fe6390e \n",
|
||
"2 19f666370c1fc781dff638c20ae04c8a \n",
|
||
"3 4221acd3f49179f5d0b292c15d1ab8e4 \n",
|
||
"4 733104286519c0614b2d45470eb180a1 "
|
||
]
|
||
},
|
||
"execution_count": 296,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"representations = display_databases(\"8representations.csv\")\n",
|
||
"representations.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 297,
|
||
"id": "0f2c7ea3-6964-48fd-9411-17547b2c3a3f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#representation_type = display_databases(\"8representation_types.csv\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a9b02406-2a69-4431-8d49-3c6bd6a5e1c7",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyze type of events"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1d554266-282c-4f64-9a0f-ddcf591ec912",
|
||
"metadata": {},
|
||
"source": [
|
||
"Meaning events.csv, event_types.csv, seasons.csv and facilities.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 298,
|
||
"id": "cba22ee2-338d-4ce1-a1e8-829a11a94bcf",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8events.csv\n",
|
||
"Shape : (922, 12)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>season_id</th>\n",
|
||
" <th>facility_id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>event_type_id</th>\n",
|
||
" <th>manual_added</th>\n",
|
||
" <th>is_display</th>\n",
|
||
" <th>event_type_key_id</th>\n",
|
||
" <th>facility_key_id</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>41542</td>\n",
|
||
" <td>2022-10-29 02:54:32.756920+02:00</td>\n",
|
||
" <td>2022-10-29 02:57:35.511792+02:00</td>\n",
|
||
" <td>52</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>match lou feminin - lons</td>\n",
|
||
" <td>5588</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>5588</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>40cc5a346b1af4ee7108ac28b144fb77</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>21068</td>\n",
|
||
" <td>2021-12-17 03:43:53.166446+01:00</td>\n",
|
||
" <td>2021-12-17 03:46:40.346096+01:00</td>\n",
|
||
" <td>51</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>repas brasserie lou-racing</td>\n",
|
||
" <td>2310</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>2310</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>500b670b79aa592ecb06f4957800a752</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>59812</td>\n",
|
||
" <td>2023-05-26 01:45:54.321665+02:00</td>\n",
|
||
" <td>2023-05-26 01:46:01.571397+02:00</td>\n",
|
||
" <td>1501</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>parking match 2</td>\n",
|
||
" <td>10185</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>10185</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>d5f62ed879867b8b51ed7b85f1fc3ab0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>3424</td>\n",
|
||
" <td>2021-07-16 03:13:06.988358+02:00</td>\n",
|
||
" <td>2021-07-16 05:33:31.321933+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>rugby + hockey sur glace</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>822b47176c355a647aa2dbdf8dfbc594</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>21379</td>\n",
|
||
" <td>2021-12-23 02:37:22.948114+01:00</td>\n",
|
||
" <td>2021-12-23 02:38:20.726329+01:00</td>\n",
|
||
" <td>51</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>bloc des etudiants lou-racing</td>\n",
|
||
" <td>2562</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>2562</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>17b91f19c71ff6287ffc1f44af952576</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id created_at updated_at \\\n",
|
||
"0 41542 2022-10-29 02:54:32.756920+02:00 2022-10-29 02:57:35.511792+02:00 \n",
|
||
"1 21068 2021-12-17 03:43:53.166446+01:00 2021-12-17 03:46:40.346096+01:00 \n",
|
||
"2 59812 2023-05-26 01:45:54.321665+02:00 2023-05-26 01:46:01.571397+02:00 \n",
|
||
"3 3424 2021-07-16 03:13:06.988358+02:00 2021-07-16 05:33:31.321933+02:00 \n",
|
||
"4 21379 2021-12-23 02:37:22.948114+01:00 2021-12-23 02:38:20.726329+01:00 \n",
|
||
"\n",
|
||
" season_id facility_id name event_type_id \\\n",
|
||
"0 52 1 match lou feminin - lons 5588 \n",
|
||
"1 51 1 repas brasserie lou-racing 2310 \n",
|
||
"2 1501 2 parking match 2 10185 \n",
|
||
"3 1 1 rugby + hockey sur glace 5 \n",
|
||
"4 51 1 bloc des etudiants lou-racing 2562 \n",
|
||
"\n",
|
||
" manual_added is_display event_type_key_id facility_key_id \\\n",
|
||
"0 False True 5588 1 \n",
|
||
"1 False True 2310 1 \n",
|
||
"2 False True 10185 2 \n",
|
||
"3 False True 5 1 \n",
|
||
"4 False True 2562 1 \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 40cc5a346b1af4ee7108ac28b144fb77 \n",
|
||
"1 500b670b79aa592ecb06f4957800a752 \n",
|
||
"2 d5f62ed879867b8b51ed7b85f1fc3ab0 \n",
|
||
"3 822b47176c355a647aa2dbdf8dfbc594 \n",
|
||
"4 17b91f19c71ff6287ffc1f44af952576 "
|
||
]
|
||
},
|
||
"execution_count": 298,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"events = display_databases(\"8events.csv\")\n",
|
||
"events.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 299,
|
||
"id": "3db00b9d-2187-4cb6-980d-8ac6ab9eb460",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8event_types.csv\n",
|
||
"Shape : (73, 6)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>fidelity_delay</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>standard</td>\n",
|
||
" <td>2021-06-29 13:52:10.434850+02:00</td>\n",
|
||
" <td>2021-06-29 13:52:10.434850+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>c00f0c4675b91fb8b918e4079a0b1bac</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>11</td>\n",
|
||
" <td>ptit lou</td>\n",
|
||
" <td>2021-06-29 21:33:13.000743+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:13.000743+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>dedd3579bc13b3ed7a90277247d9944b</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>274</td>\n",
|
||
" <td>parking 19-20</td>\n",
|
||
" <td>2021-07-16 00:02:17.225410+02:00</td>\n",
|
||
" <td>2021-07-16 00:02:17.225410+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>0d348caeec0b66f9d4987dfbe30e1e8b</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>129</td>\n",
|
||
" <td>events 2018-2019</td>\n",
|
||
" <td>2021-06-30 01:35:18.110429+02:00</td>\n",
|
||
" <td>2021-06-30 01:35:18.110429+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>65eb39ddf8f79d28d93c2f2c53118f50</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>10</td>\n",
|
||
" <td>accreditations 2017-2018</td>\n",
|
||
" <td>2021-06-29 21:33:12.999510+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:12.999510+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>732cfdcf2065fa0005faf42793ddd76c</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 1 standard 2021-06-29 13:52:10.434850+02:00 \n",
|
||
"1 11 ptit lou 2021-06-29 21:33:13.000743+02:00 \n",
|
||
"2 274 parking 19-20 2021-07-16 00:02:17.225410+02:00 \n",
|
||
"3 129 events 2018-2019 2021-06-30 01:35:18.110429+02:00 \n",
|
||
"4 10 accreditations 2017-2018 2021-06-29 21:33:12.999510+02:00 \n",
|
||
"\n",
|
||
" updated_at fidelity_delay \\\n",
|
||
"0 2021-06-29 13:52:10.434850+02:00 36 \n",
|
||
"1 2021-06-29 21:33:13.000743+02:00 36 \n",
|
||
"2 2021-07-16 00:02:17.225410+02:00 36 \n",
|
||
"3 2021-06-30 01:35:18.110429+02:00 36 \n",
|
||
"4 2021-06-29 21:33:12.999510+02:00 36 \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 c00f0c4675b91fb8b918e4079a0b1bac \n",
|
||
"1 dedd3579bc13b3ed7a90277247d9944b \n",
|
||
"2 0d348caeec0b66f9d4987dfbe30e1e8b \n",
|
||
"3 65eb39ddf8f79d28d93c2f2c53118f50 \n",
|
||
"4 732cfdcf2065fa0005faf42793ddd76c "
|
||
]
|
||
},
|
||
"execution_count": 299,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"event_types = display_databases(\"8event_types.csv\")\n",
|
||
"event_types.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 300,
|
||
"id": "cba0ee58-6280-45fe-99b3-0be09db5922b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8seasons.csv\n",
|
||
"Shape : (16, 6)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>start_date_time</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1501</td>\n",
|
||
" <td>saison 2023-2024</td>\n",
|
||
" <td>2022-06-25 03:07:31.209270+02:00</td>\n",
|
||
" <td>2022-06-25 03:07:31.209270+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>71f5c069ce45c5e933dcc37c22507fbf</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1194</td>\n",
|
||
" <td>saison 2049-2050</td>\n",
|
||
" <td>2022-02-17 03:24:23.942691+01:00</td>\n",
|
||
" <td>2022-02-17 03:24:23.942691+01:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>44e20620bbc5926db2e295d38b606afd</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>saison 2016-2017</td>\n",
|
||
" <td>2021-06-29 21:33:00.702563+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:00.702563+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>f9cf989d4f49300220df67ef93aa2294</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>47</td>\n",
|
||
" <td>saison 2018-2019</td>\n",
|
||
" <td>2021-06-30 01:35:15.156097+02:00</td>\n",
|
||
" <td>2021-06-30 01:35:15.156097+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>eec50c35fbf8593b364ced287335d90c</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>100</td>\n",
|
||
" <td>saison 2010-2011</td>\n",
|
||
" <td>2021-07-16 00:23:27.607648+02:00</td>\n",
|
||
" <td>2021-07-16 00:23:27.607648+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>7ccc51049a85e0df9b80662e45b6ddb8</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 1501 saison 2023-2024 2022-06-25 03:07:31.209270+02:00 \n",
|
||
"1 1194 saison 2049-2050 2022-02-17 03:24:23.942691+01:00 \n",
|
||
"2 2 saison 2016-2017 2021-06-29 21:33:00.702563+02:00 \n",
|
||
"3 47 saison 2018-2019 2021-06-30 01:35:15.156097+02:00 \n",
|
||
"4 100 saison 2010-2011 2021-07-16 00:23:27.607648+02:00 \n",
|
||
"\n",
|
||
" updated_at start_date_time \\\n",
|
||
"0 2022-06-25 03:07:31.209270+02:00 NaN \n",
|
||
"1 2022-02-17 03:24:23.942691+01:00 NaN \n",
|
||
"2 2021-06-29 21:33:00.702563+02:00 NaN \n",
|
||
"3 2021-06-30 01:35:15.156097+02:00 NaN \n",
|
||
"4 2021-07-16 00:23:27.607648+02:00 NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 71f5c069ce45c5e933dcc37c22507fbf \n",
|
||
"1 44e20620bbc5926db2e295d38b606afd \n",
|
||
"2 f9cf989d4f49300220df67ef93aa2294 \n",
|
||
"3 eec50c35fbf8593b364ced287335d90c \n",
|
||
"4 7ccc51049a85e0df9b80662e45b6ddb8 "
|
||
]
|
||
},
|
||
"execution_count": 300,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"seasons = display_databases(\"8seasons.csv\")\n",
|
||
"seasons.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 301,
|
||
"id": "6fa82fd7-d6d3-4857-af24-ea573b1129d0",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/8/8facilities.csv\n",
|
||
"Shape : (5, 7)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>street_id</th>\n",
|
||
" <th>fixed_capacity</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>74</td>\n",
|
||
" <td>plan pour campagne d'abo 2011/2012</td>\n",
|
||
" <td>2021-07-16 00:23:30.337698+02:00</td>\n",
|
||
" <td>2021-07-16 00:23:30.337698+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2e1d25d5f7e46e23c734fe0e4951390e</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>accreditation</td>\n",
|
||
" <td>2021-06-29 21:33:13.018552+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:13.018552+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>da37a04e592cbd344142730ce05a6887</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>organisation match exterieur</td>\n",
|
||
" <td>2021-06-29 21:33:13.019878+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:13.019878+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>8f9ee8c2e954585f7c68096d7f1cf4f1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>parking matmut stadium</td>\n",
|
||
" <td>2021-06-29 21:33:13.017165+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:13.017165+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>aeab282982ea738674dbf5c3763a0be0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>matmut stadium</td>\n",
|
||
" <td>2021-06-29 21:33:13.004560+02:00</td>\n",
|
||
" <td>2021-06-29 21:33:13.004560+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>89feffd283ebdabdc3b81fb62ea4f6f0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 74 plan pour campagne d'abo 2011/2012 2021-07-16 00:23:30.337698+02:00 \n",
|
||
"1 3 accreditation 2021-06-29 21:33:13.018552+02:00 \n",
|
||
"2 4 organisation match exterieur 2021-06-29 21:33:13.019878+02:00 \n",
|
||
"3 2 parking matmut stadium 2021-06-29 21:33:13.017165+02:00 \n",
|
||
"4 1 matmut stadium 2021-06-29 21:33:13.004560+02:00 \n",
|
||
"\n",
|
||
" updated_at street_id fixed_capacity \\\n",
|
||
"0 2021-07-16 00:23:30.337698+02:00 1 NaN \n",
|
||
"1 2021-06-29 21:33:13.018552+02:00 1 NaN \n",
|
||
"2 2021-06-29 21:33:13.019878+02:00 1 NaN \n",
|
||
"3 2021-06-29 21:33:13.017165+02:00 1 NaN \n",
|
||
"4 2021-06-29 21:33:13.004560+02:00 1 NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 2e1d25d5f7e46e23c734fe0e4951390e \n",
|
||
"1 da37a04e592cbd344142730ce05a6887 \n",
|
||
"2 8f9ee8c2e954585f7c68096d7f1cf4f1 \n",
|
||
"3 aeab282982ea738674dbf5c3763a0be0 \n",
|
||
"4 89feffd283ebdabdc3b81fb62ea4f6f0 "
|
||
]
|
||
},
|
||
"execution_count": 301,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"facilities = display_databases(\"8facilities.csv\")\n",
|
||
"facilities.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c7467d41-0ded-465d-bb08-15be914a166b",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Analyze annexe databases"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "17e9e334-0ae4-48d8-bed5-b50b4af49d5b",
|
||
"metadata": {},
|
||
"source": [
|
||
"Meaning contributions.csv, contribution_sites.csv, currencies.csv, countries.csv and type_ofs.csc"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d3ec1040-48b2-40bb-8947-920ddb4589f3",
|
||
"metadata": {},
|
||
"source": [
|
||
"## II. Identify Commons Datasets"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ec528a8a-df38-48e2-a1be-4a1459a80a1e",
|
||
"metadata": {},
|
||
"source": [
|
||
"From the analyze of the 8th company, we notice that some databases does not exist. Therefore, in order to construct a uniform database for all companies, we should first identify the common databases between all companies"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 302,
|
||
"id": "c240b811-48a6-4501-9e70-bc51d69e3ac4",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"## We first construct a dictionary reporting all the datasets for each companies\n",
|
||
"\n",
|
||
"companies = fs.ls(BUCKET)\n",
|
||
"companies_database = {}\n",
|
||
"\n",
|
||
"for company in companies:\n",
|
||
" companies_database[company.split('/')[-1]] = [file.split('/')[-1].replace(company.split('/')[-1], '') for file in fs.ls(company)] \n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 303,
|
||
"id": "54057367-9df9-42f4-aa07-bf524bb76462",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Number of databases : 30\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Then we create a list of all database\n",
|
||
"\n",
|
||
"all_database = companies_database[max(companies_database, key=lambda x: len(companies_database[x]))]\n",
|
||
"print(\"Number of databases : \",len(all_database))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 304,
|
||
"id": "63914e20-9efc-4088-877b-edab5f225d00",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"30\n",
|
||
"23\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"## We then create a set of database in common for all companies\n",
|
||
"\n",
|
||
"data_in_common = set(all_database)\n",
|
||
"\n",
|
||
"print(len(data_in_common))\n",
|
||
"\n",
|
||
"for key in companies_database:\n",
|
||
" diff_database = data_in_common.symmetric_difference(companies_database[key])\n",
|
||
" data_in_common = data_in_common - diff_database\n",
|
||
"\n",
|
||
"print(len(data_in_common))\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "676d8536-7d8c-4075-a357-b8d06e501ca8",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Create Universal database"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7e460fbe-5067-4998-a1a8-9e3d07401750",
|
||
"metadata": {},
|
||
"source": [
|
||
"We will first create a procedure to clean the datasets of a company and then merge them. Hence, we will be able to replicate this procedure for all companies and create a universal database.\n",
|
||
"\n",
|
||
"Let's first create our procedure for the company 1 and the datasets belongings to the theme producst"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 305,
|
||
"id": "590a132a-4f57-4ea3-a282-2ef913e4b753",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"directory_path = '1'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 306,
|
||
"id": "0fbebfb7-a827-46b1-890b-86c9def7cdbb",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"theme_products = [\"products.csv\" ,\"categories.csv\", \"type_of_categories.csv\"]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 307,
|
||
"id": "b8aa5f8f-845e-4ee5-b80d-38b7061a94a2",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def remove_horodates(df):\n",
|
||
" \"\"\"\n",
|
||
" this function remove horodate columns like created_at and updated_at\n",
|
||
" \"\"\"\n",
|
||
" df = df.drop(columns = [\"created_at\", \"updated_at\"])\n",
|
||
" return df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 308,
|
||
"id": "2c478213-09ae-44ef-8c7c-125bcb571642",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def order_columns_id(df):\n",
|
||
" \"\"\"\n",
|
||
" this function puts all id columns at the beginning in order to read the dataset easier\n",
|
||
" \"\"\"\n",
|
||
" substring = 'id'\n",
|
||
" id_columns = [col for col in df.columns if substring in col]\n",
|
||
" remaining_col = [col for col in df.columns if substring not in col]\n",
|
||
" new_order = id_columns + remaining_col\n",
|
||
" return df[new_order]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 309,
|
||
"id": "327e44b0-eb99-4022-b4ca-79548072f0f0",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def percent_na(df):\n",
|
||
" \"\"\"\n",
|
||
" this function returns the percentage of na for each column\n",
|
||
" \"\"\"\n",
|
||
" percent_missing = df.isna().sum() * 100 / len(df)\n",
|
||
" return percent_missing"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 310,
|
||
"id": "10926def-267f-4e86-b2c9-72e27ff9a9df",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def process_df(df):\n",
|
||
" df = remove_horodates(df)\n",
|
||
" print(\"Number of columns : \", len(df.columns))\n",
|
||
" df = order_columns_id(df)\n",
|
||
" print(\"Columns : \", df.columns)\n",
|
||
" print(\"Percent of NA for each column : \", percent_na(df))\n",
|
||
" return df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "98ac02cb-5295-47ca-99c6-99e622c5f388",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep analysis of products.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 311,
|
||
"id": "862a7658-0602-4d94-bb58-d23774c00d32",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1products.csv\n",
|
||
"Shape : (94803, 14)\n",
|
||
"Number of columns : 14\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>amount</th>\n",
|
||
" <th>is_full_price</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>apply_price</th>\n",
|
||
" <th>products_group_id</th>\n",
|
||
" <th>product_pack_id</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" <th>amount_consumption</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>10682</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>914</td>\n",
|
||
" <td>114</td>\n",
|
||
" <td>2020-09-03 14:09:43.119798+02:00</td>\n",
|
||
" <td>2020-09-03 14:09:43.119798+02:00</td>\n",
|
||
" <td>41</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>10655</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>35c88f2db8a63d7474e46eb8ca9260e7</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>478</td>\n",
|
||
" <td>9.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>273</td>\n",
|
||
" <td>131</td>\n",
|
||
" <td>2020-09-03 13:21:22.711773+02:00</td>\n",
|
||
" <td>2020-09-03 13:21:22.711773+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>471</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>8a179671ab198e570e6a104c4451379f</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20873</td>\n",
|
||
" <td>11.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>275</td>\n",
|
||
" <td>137</td>\n",
|
||
" <td>2020-09-03 14:46:33.589030+02:00</td>\n",
|
||
" <td>2020-09-03 14:46:33.589030+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>20825</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>ee83779ce29e67ad251e40234b426d6a</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>157142</td>\n",
|
||
" <td>8.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>82519</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>2022-01-28 19:29:23.525722+01:00</td>\n",
|
||
" <td>2022-01-28 19:29:23.525722+01:00</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>156773</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>d865383579314b791aa4bcf3fb418f17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1341</td>\n",
|
||
" <td>8.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>93</td>\n",
|
||
" <td>2020-09-03 13:29:30.773089+02:00</td>\n",
|
||
" <td>2020-09-03 13:29:30.773089+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1175</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>f1c4689bc47dee6f60b56d74b593dd46</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id amount is_full_price representation_id pricing_formula_id \\\n",
|
||
"0 10682 9.0 False 914 114 \n",
|
||
"1 478 9.5 False 273 131 \n",
|
||
"2 20873 11.5 False 275 137 \n",
|
||
"3 157142 8.0 False 82519 9 \n",
|
||
"4 1341 8.5 False 9 93 \n",
|
||
"\n",
|
||
" created_at updated_at \\\n",
|
||
"0 2020-09-03 14:09:43.119798+02:00 2020-09-03 14:09:43.119798+02:00 \n",
|
||
"1 2020-09-03 13:21:22.711773+02:00 2020-09-03 13:21:22.711773+02:00 \n",
|
||
"2 2020-09-03 14:46:33.589030+02:00 2020-09-03 14:46:33.589030+02:00 \n",
|
||
"3 2022-01-28 19:29:23.525722+01:00 2022-01-28 19:29:23.525722+01:00 \n",
|
||
"4 2020-09-03 13:29:30.773089+02:00 2020-09-03 13:29:30.773089+02:00 \n",
|
||
"\n",
|
||
" category_id apply_price products_group_id product_pack_id extra_field \\\n",
|
||
"0 41 0.0 10655 1 NaN \n",
|
||
"1 1 0.0 471 1 NaN \n",
|
||
"2 1 0.0 20825 1 NaN \n",
|
||
"3 5 0.0 156773 1 NaN \n",
|
||
"4 1 0.0 1175 1 NaN \n",
|
||
"\n",
|
||
" amount_consumption identifier \n",
|
||
"0 NaN 35c88f2db8a63d7474e46eb8ca9260e7 \n",
|
||
"1 NaN 8a179671ab198e570e6a104c4451379f \n",
|
||
"2 NaN ee83779ce29e67ad251e40234b426d6a \n",
|
||
"3 NaN d865383579314b791aa4bcf3fb418f17 \n",
|
||
"4 NaN f1c4689bc47dee6f60b56d74b593dd46 "
|
||
]
|
||
},
|
||
"execution_count": 311,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products = display_databases(\"1products.csv\")\n",
|
||
"print(\"Number of columns : \", len(products.columns))\n",
|
||
"products.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 312,
|
||
"id": "f0db8c51-2792-4d49-9b1a-d98ce0d9ea28",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Number of columns : 12\n",
|
||
"Columns : Index(['id', 'representation_id', 'pricing_formula_id', 'category_id',\n",
|
||
" 'products_group_id', 'product_pack_id', 'identifier', 'amount',\n",
|
||
" 'is_full_price', 'apply_price', 'extra_field', 'amount_consumption'],\n",
|
||
" dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>products_group_id</th>\n",
|
||
" <th>product_pack_id</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" <th>amount</th>\n",
|
||
" <th>is_full_price</th>\n",
|
||
" <th>apply_price</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" <th>amount_consumption</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>10682</td>\n",
|
||
" <td>914</td>\n",
|
||
" <td>114</td>\n",
|
||
" <td>41</td>\n",
|
||
" <td>10655</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>35c88f2db8a63d7474e46eb8ca9260e7</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>478</td>\n",
|
||
" <td>273</td>\n",
|
||
" <td>131</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>471</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>8a179671ab198e570e6a104c4451379f</td>\n",
|
||
" <td>9.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20873</td>\n",
|
||
" <td>275</td>\n",
|
||
" <td>137</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>20825</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>ee83779ce29e67ad251e40234b426d6a</td>\n",
|
||
" <td>11.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>157142</td>\n",
|
||
" <td>82519</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>156773</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>d865383579314b791aa4bcf3fb418f17</td>\n",
|
||
" <td>8.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1341</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>93</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1175</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>f1c4689bc47dee6f60b56d74b593dd46</td>\n",
|
||
" <td>8.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id representation_id pricing_formula_id category_id \\\n",
|
||
"0 10682 914 114 41 \n",
|
||
"1 478 273 131 1 \n",
|
||
"2 20873 275 137 1 \n",
|
||
"3 157142 82519 9 5 \n",
|
||
"4 1341 9 93 1 \n",
|
||
"\n",
|
||
" products_group_id product_pack_id identifier \\\n",
|
||
"0 10655 1 35c88f2db8a63d7474e46eb8ca9260e7 \n",
|
||
"1 471 1 8a179671ab198e570e6a104c4451379f \n",
|
||
"2 20825 1 ee83779ce29e67ad251e40234b426d6a \n",
|
||
"3 156773 1 d865383579314b791aa4bcf3fb418f17 \n",
|
||
"4 1175 1 f1c4689bc47dee6f60b56d74b593dd46 \n",
|
||
"\n",
|
||
" amount is_full_price apply_price extra_field amount_consumption \n",
|
||
"0 9.0 False 0.0 NaN NaN \n",
|
||
"1 9.5 False 0.0 NaN NaN \n",
|
||
"2 11.5 False 0.0 NaN NaN \n",
|
||
"3 8.0 False 0.0 NaN NaN \n",
|
||
"4 8.5 False 0.0 NaN NaN "
|
||
]
|
||
},
|
||
"execution_count": 312,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products = remove_horodates(products)\n",
|
||
"print(\"Number of columns : \", len(products.columns))\n",
|
||
"products = order_columns_id(products)\n",
|
||
"print(\"Columns : \", products.columns)\n",
|
||
"products.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 313,
|
||
"id": "a383474f-7da9-422c-bb69-3f0cc0b7053f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"id int64\n",
|
||
"representation_id int64\n",
|
||
"pricing_formula_id int64\n",
|
||
"category_id int64\n",
|
||
"products_group_id int64\n",
|
||
"product_pack_id int64\n",
|
||
"identifier object\n",
|
||
"amount float64\n",
|
||
"is_full_price bool\n",
|
||
"apply_price float64\n",
|
||
"extra_field float64\n",
|
||
"amount_consumption float64\n",
|
||
"dtype: object\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(products.dtypes)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 314,
|
||
"id": "460749ac-aa26-4216-8667-518546f72f72",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"id 0.0\n",
|
||
"representation_id 0.0\n",
|
||
"pricing_formula_id 0.0\n",
|
||
"category_id 0.0\n",
|
||
"products_group_id 0.0\n",
|
||
"product_pack_id 0.0\n",
|
||
"identifier 0.0\n",
|
||
"amount 0.0\n",
|
||
"is_full_price 0.0\n",
|
||
"apply_price 0.0\n",
|
||
"extra_field 100.0\n",
|
||
"amount_consumption 100.0\n",
|
||
"dtype: float64\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"percent_missing = products.isna().sum() * 100 / len(products)\n",
|
||
"print(percent_missing)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ebcb48ab-adad-42e5-b5d7-7275771cd200",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep analysis of categories.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 315,
|
||
"id": "3efce2b6-2d2f-4da9-98ed-1aae17da624c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"name_dataset = '1categories.csv'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 316,
|
||
"id": "38aa39fd-58af-4fb8-98f2-4269dbaf35de",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1categories.csv\n",
|
||
"Shape : (27, 7)\n",
|
||
"Number of columns : 7\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" <th>quota</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>30</td>\n",
|
||
" <td>en nb entrées gr</td>\n",
|
||
" <td>2020-09-03 13:21:20.019202+02:00</td>\n",
|
||
" <td>2020-09-03 13:21:20.019202+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>849ab2791a14f5fc2bb4d87ab2b78bf6</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>16</td>\n",
|
||
" <td>indiv activité enfant</td>\n",
|
||
" <td>2020-09-03 13:11:23.306968+02:00</td>\n",
|
||
" <td>2020-09-03 13:11:23.306968+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>425fd2f01984cc4ba030c1be98f42c33</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>39</td>\n",
|
||
" <td>indiv activité gr</td>\n",
|
||
" <td>2020-09-03 13:21:20.029901+02:00</td>\n",
|
||
" <td>2020-09-03 13:21:20.029901+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>9244dd3738788db0d22a5d0afe687b69</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>1108</td>\n",
|
||
" <td>groupe forfait adulte</td>\n",
|
||
" <td>2020-09-19 02:06:43.145697+02:00</td>\n",
|
||
" <td>2020-09-19 02:06:43.145697+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>3edda20c877a93b5ff883827238eb711</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>6</td>\n",
|
||
" <td>groupe forfait entrées tr</td>\n",
|
||
" <td>2020-09-03 13:11:23.264997+02:00</td>\n",
|
||
" <td>2020-09-03 13:11:23.264997+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>ff48df4b2dd5a14116bf4d280b31621e</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 30 en nb entrées gr 2020-09-03 13:21:20.019202+02:00 \n",
|
||
"1 16 indiv activité enfant 2020-09-03 13:11:23.306968+02:00 \n",
|
||
"2 39 indiv activité gr 2020-09-03 13:21:20.029901+02:00 \n",
|
||
"3 1108 groupe forfait adulte 2020-09-19 02:06:43.145697+02:00 \n",
|
||
"4 6 groupe forfait entrées tr 2020-09-03 13:11:23.264997+02:00 \n",
|
||
"\n",
|
||
" updated_at extra_field quota \\\n",
|
||
"0 2020-09-03 13:21:20.019202+02:00 NaN NaN \n",
|
||
"1 2020-09-03 13:11:23.306968+02:00 NaN NaN \n",
|
||
"2 2020-09-03 13:21:20.029901+02:00 NaN NaN \n",
|
||
"3 2020-09-19 02:06:43.145697+02:00 NaN NaN \n",
|
||
"4 2020-09-03 13:11:23.264997+02:00 NaN NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 849ab2791a14f5fc2bb4d87ab2b78bf6 \n",
|
||
"1 425fd2f01984cc4ba030c1be98f42c33 \n",
|
||
"2 9244dd3738788db0d22a5d0afe687b69 \n",
|
||
"3 3edda20c877a93b5ff883827238eb711 \n",
|
||
"4 ff48df4b2dd5a14116bf4d280b31621e "
|
||
]
|
||
},
|
||
"execution_count": 316,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = display_databases(name_dataset)\n",
|
||
"print(\"Number of columns : \", len(df.columns))\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 317,
|
||
"id": "99eb6d14-8b4b-4d55-8fc7-ddf2726096f4",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Number of columns : 5\n",
|
||
"Columns : Index(['id', 'identifier', 'name', 'extra_field', 'quota'], dtype='object')\n",
|
||
"Percent of NA for each column : id 0.000000\n",
|
||
"identifier 0.000000\n",
|
||
"name 3.703704\n",
|
||
"extra_field 100.000000\n",
|
||
"quota 100.000000\n",
|
||
"dtype: float64\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" <th>quota</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>30</td>\n",
|
||
" <td>849ab2791a14f5fc2bb4d87ab2b78bf6</td>\n",
|
||
" <td>en nb entrées gr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>16</td>\n",
|
||
" <td>425fd2f01984cc4ba030c1be98f42c33</td>\n",
|
||
" <td>indiv activité enfant</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>39</td>\n",
|
||
" <td>9244dd3738788db0d22a5d0afe687b69</td>\n",
|
||
" <td>indiv activité gr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>1108</td>\n",
|
||
" <td>3edda20c877a93b5ff883827238eb711</td>\n",
|
||
" <td>groupe forfait adulte</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>6</td>\n",
|
||
" <td>ff48df4b2dd5a14116bf4d280b31621e</td>\n",
|
||
" <td>groupe forfait entrées tr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id identifier name \\\n",
|
||
"0 30 849ab2791a14f5fc2bb4d87ab2b78bf6 en nb entrées gr \n",
|
||
"1 16 425fd2f01984cc4ba030c1be98f42c33 indiv activité enfant \n",
|
||
"2 39 9244dd3738788db0d22a5d0afe687b69 indiv activité gr \n",
|
||
"3 1108 3edda20c877a93b5ff883827238eb711 groupe forfait adulte \n",
|
||
"4 6 ff48df4b2dd5a14116bf4d280b31621e groupe forfait entrées tr \n",
|
||
"\n",
|
||
" extra_field quota \n",
|
||
"0 NaN NaN \n",
|
||
"1 NaN NaN \n",
|
||
"2 NaN NaN \n",
|
||
"3 NaN NaN \n",
|
||
"4 NaN NaN "
|
||
]
|
||
},
|
||
"execution_count": 317,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = process_df(df)\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 318,
|
||
"id": "c5f39cc9-dff8-452c-9a3e-9f7df81a8a19",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id int64\n",
|
||
"identifier object\n",
|
||
"name object\n",
|
||
"extra_field float64\n",
|
||
"quota float64\n",
|
||
"dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 318,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.dtypes"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c4cb0b37-2262-45c0-97be-b12c503016e3",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep analysis of type_of_categories.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "3b4a3af9-ed12-43ec-b17e-fd425b238265",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep analysis of representation_category_capacities.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "135966fb-aab1-48d7-bb4c-39a53ee643ca",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep analysis of representations.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b480f39f-d5c7-4ded-8f64-ea8ac31f5db5",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep analysis of events.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 319,
|
||
"id": "2d52d6da-cca5-4abd-be05-2f00fd3eca8e",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"name_dataset = '1events.csv'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 320,
|
||
"id": "6cab507d-8b11-404d-9286-5cc205228af9",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1events.csv\n",
|
||
"Shape : (1232, 12)\n",
|
||
"Number of columns : 12\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>season_id</th>\n",
|
||
" <th>facility_id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>event_type_id</th>\n",
|
||
" <th>manual_added</th>\n",
|
||
" <th>is_display</th>\n",
|
||
" <th>event_type_key_id</th>\n",
|
||
" <th>facility_key_id</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>192</td>\n",
|
||
" <td>2020-09-03 13:36:42.216991+02:00</td>\n",
|
||
" <td>2021-11-02 15:06:40.663219+01:00</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>frontières</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>c1cecd093146068fd57896e254e98170</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>30329</td>\n",
|
||
" <td>2023-11-04 02:50:34.602462+01:00</td>\n",
|
||
" <td>2023-11-04 02:52:26.138154+01:00</td>\n",
|
||
" <td>2767</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>visite guidée une autre histoire du monde (1h00)</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>f510a6710878d7aca36e71c54abab525</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>161</td>\n",
|
||
" <td>2020-09-03 13:29:27.944002+02:00</td>\n",
|
||
" <td>2021-11-02 15:06:40.652026+01:00</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>visite contée les chercheurs d'or indiv</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>21177fa9acad1ae2b1f595690fb853d3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5957</td>\n",
|
||
" <td>2021-07-31 11:16:42.575583+02:00</td>\n",
|
||
" <td>2021-11-02 15:06:40.663219+01:00</td>\n",
|
||
" <td>582</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>we dreamt of utopia and we woke up screaming.</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>962601f1eb153d45d49437f8fe839f7f</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>8337</td>\n",
|
||
" <td>2021-08-17 13:40:34.111923+02:00</td>\n",
|
||
" <td>2021-11-02 15:06:40.663219+01:00</td>\n",
|
||
" <td>582</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>jeff koons épisodes 4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>bfa22f5a2364a2dacfc45cca1c8d3215</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id created_at updated_at \\\n",
|
||
"0 192 2020-09-03 13:36:42.216991+02:00 2021-11-02 15:06:40.663219+01:00 \n",
|
||
"1 30329 2023-11-04 02:50:34.602462+01:00 2023-11-04 02:52:26.138154+01:00 \n",
|
||
"2 161 2020-09-03 13:29:27.944002+02:00 2021-11-02 15:06:40.652026+01:00 \n",
|
||
"3 5957 2021-07-31 11:16:42.575583+02:00 2021-11-02 15:06:40.663219+01:00 \n",
|
||
"4 8337 2021-08-17 13:40:34.111923+02:00 2021-11-02 15:06:40.663219+01:00 \n",
|
||
"\n",
|
||
" season_id facility_id name \\\n",
|
||
"0 16 1 frontières \n",
|
||
"1 2767 1 visite guidée une autre histoire du monde (1h00) \n",
|
||
"2 16 1 visite contée les chercheurs d'or indiv \n",
|
||
"3 582 1 we dreamt of utopia and we woke up screaming. \n",
|
||
"4 582 1 jeff koons épisodes 4 \n",
|
||
"\n",
|
||
" event_type_id manual_added is_display event_type_key_id \\\n",
|
||
"0 4 False True 4 \n",
|
||
"1 5 False True 5 \n",
|
||
"2 2 False True 2 \n",
|
||
"3 4 False True 4 \n",
|
||
"4 4 False True 4 \n",
|
||
"\n",
|
||
" facility_key_id identifier \n",
|
||
"0 1 c1cecd093146068fd57896e254e98170 \n",
|
||
"1 1 f510a6710878d7aca36e71c54abab525 \n",
|
||
"2 1 21177fa9acad1ae2b1f595690fb853d3 \n",
|
||
"3 1 962601f1eb153d45d49437f8fe839f7f \n",
|
||
"4 1 bfa22f5a2364a2dacfc45cca1c8d3215 "
|
||
]
|
||
},
|
||
"execution_count": 320,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = display_databases(name_dataset)\n",
|
||
"print(\"Number of columns : \", len(df.columns))\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 321,
|
||
"id": "9fe57873-8108-44c9-b8a5-f58d3cbb6d17",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Number of columns : 10\n",
|
||
"Columns : Index(['id', 'season_id', 'facility_id', 'event_type_id', 'event_type_key_id',\n",
|
||
" 'facility_key_id', 'identifier', 'name', 'manual_added', 'is_display'],\n",
|
||
" dtype='object')\n",
|
||
"Percent of NA for each column : id 0.000000\n",
|
||
"season_id 0.000000\n",
|
||
"facility_id 0.000000\n",
|
||
"event_type_id 0.000000\n",
|
||
"event_type_key_id 0.000000\n",
|
||
"facility_key_id 0.000000\n",
|
||
"identifier 0.000000\n",
|
||
"name 0.974026\n",
|
||
"manual_added 0.000000\n",
|
||
"is_display 0.000000\n",
|
||
"dtype: float64\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>season_id</th>\n",
|
||
" <th>facility_id</th>\n",
|
||
" <th>event_type_id</th>\n",
|
||
" <th>event_type_key_id</th>\n",
|
||
" <th>facility_key_id</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>manual_added</th>\n",
|
||
" <th>is_display</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>192</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>c1cecd093146068fd57896e254e98170</td>\n",
|
||
" <td>frontières</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>30329</td>\n",
|
||
" <td>2767</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>f510a6710878d7aca36e71c54abab525</td>\n",
|
||
" <td>visite guidée une autre histoire du monde (1h00)</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>161</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>21177fa9acad1ae2b1f595690fb853d3</td>\n",
|
||
" <td>visite contée les chercheurs d'or indiv</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5957</td>\n",
|
||
" <td>582</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>962601f1eb153d45d49437f8fe839f7f</td>\n",
|
||
" <td>we dreamt of utopia and we woke up screaming.</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>8337</td>\n",
|
||
" <td>582</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>bfa22f5a2364a2dacfc45cca1c8d3215</td>\n",
|
||
" <td>jeff koons épisodes 4</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id season_id facility_id event_type_id event_type_key_id \\\n",
|
||
"0 192 16 1 4 4 \n",
|
||
"1 30329 2767 1 5 5 \n",
|
||
"2 161 16 1 2 2 \n",
|
||
"3 5957 582 1 4 4 \n",
|
||
"4 8337 582 1 4 4 \n",
|
||
"\n",
|
||
" facility_key_id identifier \\\n",
|
||
"0 1 c1cecd093146068fd57896e254e98170 \n",
|
||
"1 1 f510a6710878d7aca36e71c54abab525 \n",
|
||
"2 1 21177fa9acad1ae2b1f595690fb853d3 \n",
|
||
"3 1 962601f1eb153d45d49437f8fe839f7f \n",
|
||
"4 1 bfa22f5a2364a2dacfc45cca1c8d3215 \n",
|
||
"\n",
|
||
" name manual_added is_display \n",
|
||
"0 frontières False True \n",
|
||
"1 visite guidée une autre histoire du monde (1h00) False True \n",
|
||
"2 visite contée les chercheurs d'or indiv False True \n",
|
||
"3 we dreamt of utopia and we woke up screaming. False True \n",
|
||
"4 jeff koons épisodes 4 False True "
|
||
]
|
||
},
|
||
"execution_count": 321,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = process_df(df)\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 322,
|
||
"id": "7fd9e5bd-baac-4b3b-9ffb-5a9baa18399b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id int64\n",
|
||
"season_id int64\n",
|
||
"facility_id int64\n",
|
||
"event_type_id int64\n",
|
||
"event_type_key_id int64\n",
|
||
"facility_key_id int64\n",
|
||
"identifier object\n",
|
||
"name object\n",
|
||
"manual_added bool\n",
|
||
"is_display bool\n",
|
||
"dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 322,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.dtypes"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "24186efa-5908-4b03-bf52-96415fc8bd54",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep analysis of event_types.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 323,
|
||
"id": "90ab62d4-a086-4469-961c-67eefb375388",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"name_dataset = '1event_types.csv'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 324,
|
||
"id": "58db1751-fd56-4c28-b49e-bc8235bb0dc8",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1event_types.csv\n",
|
||
"Shape : (9, 6)\n",
|
||
"Number of columns : 6\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>fidelity_delay</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>standard</td>\n",
|
||
" <td>2020-09-03 12:24:22.574262+02:00</td>\n",
|
||
" <td>2020-09-03 12:24:22.574262+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>c00f0c4675b91fb8b918e4079a0b1bac</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>66</td>\n",
|
||
" <td>package</td>\n",
|
||
" <td>2020-09-03 14:05:04.648137+02:00</td>\n",
|
||
" <td>2020-09-03 14:05:04.648137+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>efe90a8e604a7c840e88d03a67f6b7d8</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>83</td>\n",
|
||
" <td>guide multimédias</td>\n",
|
||
" <td>2020-09-03 14:15:17.252539+02:00</td>\n",
|
||
" <td>2020-09-03 14:15:17.252539+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>ee14c62b3b9f6c7dd5401685a18e4460</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>non défini</td>\n",
|
||
" <td>2020-09-03 13:11:23.117024+02:00</td>\n",
|
||
" <td>2020-09-03 13:11:23.117024+02:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>52ff3466787b4d538407372e5f7afe0f</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>2723</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2021-12-22 09:45:47.715105+01:00</td>\n",
|
||
" <td>2021-12-22 09:45:47.715105+01:00</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>d41d8cd98f00b204e9800998ecf8427e</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 1 standard 2020-09-03 12:24:22.574262+02:00 \n",
|
||
"1 66 package 2020-09-03 14:05:04.648137+02:00 \n",
|
||
"2 83 guide multimédias 2020-09-03 14:15:17.252539+02:00 \n",
|
||
"3 3 non défini 2020-09-03 13:11:23.117024+02:00 \n",
|
||
"4 2723 NaN 2021-12-22 09:45:47.715105+01:00 \n",
|
||
"\n",
|
||
" updated_at fidelity_delay \\\n",
|
||
"0 2020-09-03 12:24:22.574262+02:00 36 \n",
|
||
"1 2020-09-03 14:05:04.648137+02:00 36 \n",
|
||
"2 2020-09-03 14:15:17.252539+02:00 36 \n",
|
||
"3 2020-09-03 13:11:23.117024+02:00 36 \n",
|
||
"4 2021-12-22 09:45:47.715105+01:00 36 \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 c00f0c4675b91fb8b918e4079a0b1bac \n",
|
||
"1 efe90a8e604a7c840e88d03a67f6b7d8 \n",
|
||
"2 ee14c62b3b9f6c7dd5401685a18e4460 \n",
|
||
"3 52ff3466787b4d538407372e5f7afe0f \n",
|
||
"4 d41d8cd98f00b204e9800998ecf8427e "
|
||
]
|
||
},
|
||
"execution_count": 324,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = display_databases(name_dataset)\n",
|
||
"print(\"Number of columns : \", len(df.columns))\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 325,
|
||
"id": "ac93382c-0b5f-462d-8021-0dd1e7201b8c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Number of columns : 4\n",
|
||
"Columns : Index(['id', 'fidelity_delay', 'identifier', 'name'], dtype='object')\n",
|
||
"Percent of NA for each column : id 0.000000\n",
|
||
"fidelity_delay 0.000000\n",
|
||
"identifier 0.000000\n",
|
||
"name 11.111111\n",
|
||
"dtype: float64\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>fidelity_delay</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" <th>name</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>c00f0c4675b91fb8b918e4079a0b1bac</td>\n",
|
||
" <td>standard</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>66</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>efe90a8e604a7c840e88d03a67f6b7d8</td>\n",
|
||
" <td>package</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>83</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>ee14c62b3b9f6c7dd5401685a18e4460</td>\n",
|
||
" <td>guide multimédias</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>52ff3466787b4d538407372e5f7afe0f</td>\n",
|
||
" <td>non défini</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>2723</td>\n",
|
||
" <td>36</td>\n",
|
||
" <td>d41d8cd98f00b204e9800998ecf8427e</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id fidelity_delay identifier name\n",
|
||
"0 1 36 c00f0c4675b91fb8b918e4079a0b1bac standard\n",
|
||
"1 66 36 efe90a8e604a7c840e88d03a67f6b7d8 package\n",
|
||
"2 83 36 ee14c62b3b9f6c7dd5401685a18e4460 guide multimédias\n",
|
||
"3 3 36 52ff3466787b4d538407372e5f7afe0f non défini\n",
|
||
"4 2723 36 d41d8cd98f00b204e9800998ecf8427e NaN"
|
||
]
|
||
},
|
||
"execution_count": 325,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = process_df(df)\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 326,
|
||
"id": "18cbd630-3c7d-49e1-932b-9460badf3758",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id int64\n",
|
||
"fidelity_delay int64\n",
|
||
"identifier object\n",
|
||
"name object\n",
|
||
"dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 326,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.dtypes"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5847a441-31b9-4802-a5ae-90d8c6d6e153",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep analysis of seasons.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 327,
|
||
"id": "ae544dcc-f23d-4216-bb5b-597cc1b3765e",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"name_dataset = '1seasons.csv'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 328,
|
||
"id": "1ac97963-9208-4329-be41-d71a5797487f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1seasons.csv\n",
|
||
"Shape : (13, 6)\n",
|
||
"Number of columns : 6\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>start_date_time</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>943</td>\n",
|
||
" <td>2013</td>\n",
|
||
" <td>2021-07-29 08:55:33.282607+02:00</td>\n",
|
||
" <td>2021-07-29 08:55:33.282607+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>8038da89e49ac5eabb489cfc6cea9fc1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>129</td>\n",
|
||
" <td>2014</td>\n",
|
||
" <td>2020-09-03 15:13:08.105567+02:00</td>\n",
|
||
" <td>2020-09-03 15:13:08.105567+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>cee8d6b7ce52554fd70354e37bbf44a2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>2015</td>\n",
|
||
" <td>2020-09-03 13:11:19.405037+02:00</td>\n",
|
||
" <td>2020-09-03 13:11:19.405037+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>65d2ea03425887a717c435081cfc5dbb</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2016</td>\n",
|
||
" <td>2020-09-03 13:11:19.401001+02:00</td>\n",
|
||
" <td>2020-09-03 13:11:19.401001+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>95192c98732387165bf8e396c0f2dad2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2017</td>\n",
|
||
" <td>2020-09-03 13:11:19.409005+02:00</td>\n",
|
||
" <td>2020-09-03 13:11:19.409005+02:00</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>8d8818c8e140c64c743113f563cf750f</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 943 2013 2021-07-29 08:55:33.282607+02:00 \n",
|
||
"1 129 2014 2020-09-03 15:13:08.105567+02:00 \n",
|
||
"2 3 2015 2020-09-03 13:11:19.405037+02:00 \n",
|
||
"3 2 2016 2020-09-03 13:11:19.401001+02:00 \n",
|
||
"4 4 2017 2020-09-03 13:11:19.409005+02:00 \n",
|
||
"\n",
|
||
" updated_at start_date_time \\\n",
|
||
"0 2021-07-29 08:55:33.282607+02:00 NaN \n",
|
||
"1 2020-09-03 15:13:08.105567+02:00 NaN \n",
|
||
"2 2020-09-03 13:11:19.405037+02:00 NaN \n",
|
||
"3 2020-09-03 13:11:19.401001+02:00 NaN \n",
|
||
"4 2020-09-03 13:11:19.409005+02:00 NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 8038da89e49ac5eabb489cfc6cea9fc1 \n",
|
||
"1 cee8d6b7ce52554fd70354e37bbf44a2 \n",
|
||
"2 65d2ea03425887a717c435081cfc5dbb \n",
|
||
"3 95192c98732387165bf8e396c0f2dad2 \n",
|
||
"4 8d8818c8e140c64c743113f563cf750f "
|
||
]
|
||
},
|
||
"execution_count": 328,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = display_databases(name_dataset)\n",
|
||
"print(\"Number of columns : \", len(df.columns))\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 329,
|
||
"id": "b4593d46-105c-47dd-aa71-babd8e63e65b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Number of columns : 4\n",
|
||
"Columns : Index(['id', 'identifier', 'name', 'start_date_time'], dtype='object')\n",
|
||
"Percent of NA for each column : id 0.000000\n",
|
||
"identifier 0.000000\n",
|
||
"name 7.692308\n",
|
||
"start_date_time 100.000000\n",
|
||
"dtype: float64\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>start_date_time</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>943</td>\n",
|
||
" <td>8038da89e49ac5eabb489cfc6cea9fc1</td>\n",
|
||
" <td>2013</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>129</td>\n",
|
||
" <td>cee8d6b7ce52554fd70354e37bbf44a2</td>\n",
|
||
" <td>2014</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>65d2ea03425887a717c435081cfc5dbb</td>\n",
|
||
" <td>2015</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>95192c98732387165bf8e396c0f2dad2</td>\n",
|
||
" <td>2016</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>8d8818c8e140c64c743113f563cf750f</td>\n",
|
||
" <td>2017</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id identifier name start_date_time\n",
|
||
"0 943 8038da89e49ac5eabb489cfc6cea9fc1 2013 NaN\n",
|
||
"1 129 cee8d6b7ce52554fd70354e37bbf44a2 2014 NaN\n",
|
||
"2 3 65d2ea03425887a717c435081cfc5dbb 2015 NaN\n",
|
||
"3 2 95192c98732387165bf8e396c0f2dad2 2016 NaN\n",
|
||
"4 4 8d8818c8e140c64c743113f563cf750f 2017 NaN"
|
||
]
|
||
},
|
||
"execution_count": 329,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = process_df(df)\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 330,
|
||
"id": "5d3b096d-8e73-4514-94e5-f2dcd4d0a89c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id int64\n",
|
||
"identifier object\n",
|
||
"name object\n",
|
||
"start_date_time float64\n",
|
||
"dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 330,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.dtypes"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a7b00bc7-eae6-457c-ac68-a4a55a6d1c8c",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Deep Analysis of facilities.csv"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 331,
|
||
"id": "d95ef015-d44c-4353-8761-771b910d21c9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"name_dataset = '1facilities.csv'"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 332,
|
||
"id": "ef5fe794-8df7-4f27-8554-ecdc4074ac0b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1facilities.csv\n",
|
||
"Shape : (2, 7)\n",
|
||
"Number of columns : 7\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>created_at</th>\n",
|
||
" <th>updated_at</th>\n",
|
||
" <th>street_id</th>\n",
|
||
" <th>fixed_capacity</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>non défini</td>\n",
|
||
" <td>2020-09-03 13:16:35.293111+02:00</td>\n",
|
||
" <td>2020-09-03 13:16:35.293111+02:00</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>52ff3466787b4d538407372e5f7afe0f</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" <td>2020-09-03 13:11:23.133059+02:00</td>\n",
|
||
" <td>2020-09-03 13:11:23.133059+02:00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>702bd76fe3dd5dbcf118a6965a946f54</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name created_at \\\n",
|
||
"0 2 non défini 2020-09-03 13:16:35.293111+02:00 \n",
|
||
"1 1 mucem 2020-09-03 13:11:23.133059+02:00 \n",
|
||
"\n",
|
||
" updated_at street_id fixed_capacity \\\n",
|
||
"0 2020-09-03 13:16:35.293111+02:00 2 NaN \n",
|
||
"1 2020-09-03 13:11:23.133059+02:00 1 NaN \n",
|
||
"\n",
|
||
" identifier \n",
|
||
"0 52ff3466787b4d538407372e5f7afe0f \n",
|
||
"1 702bd76fe3dd5dbcf118a6965a946f54 "
|
||
]
|
||
},
|
||
"execution_count": 332,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = display_databases(name_dataset)\n",
|
||
"print(\"Number of columns : \", len(df.columns))\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 333,
|
||
"id": "e3621201-fab9-49fd-95c1-0b9d5da76e50",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Number of columns : 5\n",
|
||
"Columns : Index(['id', 'street_id', 'identifier', 'name', 'fixed_capacity'], dtype='object')\n",
|
||
"Percent of NA for each column : id 0.0\n",
|
||
"street_id 0.0\n",
|
||
"identifier 0.0\n",
|
||
"name 0.0\n",
|
||
"fixed_capacity 100.0\n",
|
||
"dtype: float64\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>street_id</th>\n",
|
||
" <th>identifier</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>fixed_capacity</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>52ff3466787b4d538407372e5f7afe0f</td>\n",
|
||
" <td>non défini</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>702bd76fe3dd5dbcf118a6965a946f54</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id street_id identifier name fixed_capacity\n",
|
||
"0 2 2 52ff3466787b4d538407372e5f7afe0f non défini NaN\n",
|
||
"1 1 1 702bd76fe3dd5dbcf118a6965a946f54 mucem NaN"
|
||
]
|
||
},
|
||
"execution_count": 333,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df = process_df(df)\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 334,
|
||
"id": "1b198b92-8654-4531-a0dd-8f2e01c2e6c1",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id int64\n",
|
||
"street_id int64\n",
|
||
"identifier object\n",
|
||
"name object\n",
|
||
"fixed_capacity float64\n",
|
||
"dtype: object"
|
||
]
|
||
},
|
||
"execution_count": 334,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.dtypes"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ab5c4c2d-3e04-457d-a183-e173df89b650",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Merge"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 335,
|
||
"id": "43576244-c8cf-4ca0-b056-7aea1fbf0bc7",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def process_df_2(df):\n",
|
||
" df = remove_horodates(df)\n",
|
||
" print(\"Number of columns : \", len(df.columns))\n",
|
||
" df = order_columns_id(df)\n",
|
||
" print(\"Columns : \", df.columns)\n",
|
||
" return df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 336,
|
||
"id": "0fad097e-474c-4af7-b1e1-7d8dda3f09ea",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def load_dataset(name):\n",
|
||
" df = display_databases(name)\n",
|
||
" df = process_df_2(df)\n",
|
||
" # drop na :\n",
|
||
" #df = df.dropna(axis=1, thresh=len(df))\n",
|
||
" # if identifier in table : delete it\n",
|
||
" if 'identifier' in df.columns:\n",
|
||
" df = df.drop(columns = 'identifier')\n",
|
||
" return df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b60034ef-fdd6-4640-a012-cf74c17b333f",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Products Table"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 337,
|
||
"id": "6213b1eb-c5f8-49dd-ab69-366542380e80",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def create_products_table():\n",
|
||
" # first merge products and categories\n",
|
||
" print(\"first merge products and categories\")\n",
|
||
" products = load_dataset(\"1products.csv\")\n",
|
||
" categories = load_dataset(\"1categories.csv\")\n",
|
||
" # Drop useless columns\n",
|
||
" products = products.drop(columns = ['apply_price', 'extra_field', 'amount_consumption'])\n",
|
||
" categories = categories.drop(columns = ['extra_field', 'quota'])\n",
|
||
"\n",
|
||
" #Merge\n",
|
||
" products_theme = products.merge(categories, how = 'left', left_on = 'category_id',\n",
|
||
" right_on = 'id', suffixes=('_products', '_categories'))\n",
|
||
" products_theme = products_theme.rename(columns = {\"name\" : \"name_categories\"})\n",
|
||
" \n",
|
||
" # Second merge products_theme and type of categories\n",
|
||
" print(\"Second merge products_theme and type of categories\")\n",
|
||
" type_of_categories = load_dataset(\"1type_of_categories.csv\")\n",
|
||
" type_of_categories = type_of_categories.drop(columns = 'id')\n",
|
||
" products_theme = products_theme.merge(type_of_categories, how = 'left', left_on = 'category_id',\n",
|
||
" right_on = 'category_id' )\n",
|
||
"\n",
|
||
" # Index cleaning\n",
|
||
" products_theme = products_theme.drop(columns = ['id_categories'])\n",
|
||
" products_theme = order_columns_id(products_theme)\n",
|
||
"\n",
|
||
" \n",
|
||
"\n",
|
||
" return products_theme"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 338,
|
||
"id": "b853e020-f73d-44e8-b086-e5548ce21011",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"first merge products and categories\n",
|
||
"File path : bdc2324-data/1/1products.csv\n",
|
||
"Shape : (94803, 14)\n",
|
||
"Number of columns : 12\n",
|
||
"Columns : Index(['id', 'representation_id', 'pricing_formula_id', 'category_id',\n",
|
||
" 'products_group_id', 'product_pack_id', 'identifier', 'amount',\n",
|
||
" 'is_full_price', 'apply_price', 'extra_field', 'amount_consumption'],\n",
|
||
" dtype='object')\n",
|
||
"File path : bdc2324-data/1/1categories.csv\n",
|
||
"Shape : (27, 7)\n",
|
||
"Number of columns : 5\n",
|
||
"Columns : Index(['id', 'identifier', 'name', 'extra_field', 'quota'], dtype='object')\n",
|
||
"Second merge products_theme and type of categories\n",
|
||
"File path : bdc2324-data/1/1type_of_categories.csv\n",
|
||
"Shape : (5, 6)\n",
|
||
"Number of columns : 4\n",
|
||
"Columns : Index(['id', 'type_of_id', 'category_id', 'identifier'], dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id_products</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>products_group_id</th>\n",
|
||
" <th>product_pack_id</th>\n",
|
||
" <th>type_of_id</th>\n",
|
||
" <th>amount</th>\n",
|
||
" <th>is_full_price</th>\n",
|
||
" <th>name_categories</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>10682</td>\n",
|
||
" <td>914</td>\n",
|
||
" <td>114</td>\n",
|
||
" <td>41</td>\n",
|
||
" <td>10655</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv activité tr</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>478</td>\n",
|
||
" <td>273</td>\n",
|
||
" <td>131</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>471</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>9.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20873</td>\n",
|
||
" <td>275</td>\n",
|
||
" <td>137</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>20825</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>11.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>157142</td>\n",
|
||
" <td>82519</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>156773</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>8.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tr</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1341</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>93</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1175</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>8.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id_products representation_id pricing_formula_id category_id \\\n",
|
||
"0 10682 914 114 41 \n",
|
||
"1 478 273 131 1 \n",
|
||
"2 20873 275 137 1 \n",
|
||
"3 157142 82519 9 5 \n",
|
||
"4 1341 9 93 1 \n",
|
||
"\n",
|
||
" products_group_id product_pack_id type_of_id amount is_full_price \\\n",
|
||
"0 10655 1 NaN 9.0 False \n",
|
||
"1 471 1 12.0 9.5 False \n",
|
||
"2 20825 1 12.0 11.5 False \n",
|
||
"3 156773 1 NaN 8.0 False \n",
|
||
"4 1175 1 12.0 8.5 False \n",
|
||
"\n",
|
||
" name_categories \n",
|
||
"0 indiv activité tr \n",
|
||
"1 indiv entrées tp \n",
|
||
"2 indiv entrées tp \n",
|
||
"3 indiv entrées tr \n",
|
||
"4 indiv entrées tp "
|
||
]
|
||
},
|
||
"execution_count": 338,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products_theme = create_products_table()\n",
|
||
"products_theme.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8bd7b7ab-fd04-48d2-898b-48c5815457f3",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Events Table"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 339,
|
||
"id": "6ed0ad20-8315-4112-9a85-10e5f04ef852",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def create_events_table():\n",
|
||
" # first merge events and seasons : \n",
|
||
" print(\"first merge events and seasons : \")\n",
|
||
" events = load_dataset(\"1events.csv\")\n",
|
||
" seasons = load_dataset(\"1seasons.csv\")\n",
|
||
"\n",
|
||
" # Drop useless columns\n",
|
||
" events = events.drop(columns = ['manual_added', 'is_display'])\n",
|
||
" seasons = seasons.drop(columns = ['start_date_time'])\n",
|
||
" \n",
|
||
" events_theme = events.merge(seasons, how = 'left', left_on = 'season_id', right_on = 'id', suffixes=('_events', '_seasons'))\n",
|
||
"\n",
|
||
" # Secondly merge events_theme and event_types\n",
|
||
" print(\"Secondly merge events_theme and event_types : \")\n",
|
||
" event_types = load_dataset(\"1event_types.csv\")\n",
|
||
" event_types = event_types.drop(columns = ['fidelity_delay'])\n",
|
||
" \n",
|
||
" events_theme = events_theme.merge(event_types, how = 'left', left_on = 'event_type_id', right_on = 'id', suffixes=('_events', '_event_type'))\n",
|
||
" events_theme = events_theme.rename(columns = {\"name\" : \"name_event_types\"})\n",
|
||
" events_theme = events_theme.drop(columns = 'id')\n",
|
||
"\n",
|
||
" # thirdly merge events_theme and facilities\n",
|
||
" print(\"thirdly merge events_theme and facilities : \")\n",
|
||
" facilities = load_dataset(\"1facilities.csv\")\n",
|
||
" facilities = facilities.drop(columns = ['fixed_capacity'])\n",
|
||
" \n",
|
||
" events_theme = events_theme.merge(facilities, how = 'left', left_on = 'facility_id', right_on = 'id', suffixes=('_events', '_facility'))\n",
|
||
" events_theme = events_theme.rename(columns = {\"name\" : \"name_facilities\", \"id_events\" : \"event_id\"})\n",
|
||
" events_theme = events_theme.drop(columns = 'id')\n",
|
||
"\n",
|
||
" # Index cleaning\n",
|
||
" events_theme = events_theme.drop(columns = ['id_seasons'])\n",
|
||
" events_theme = order_columns_id(events_theme)\n",
|
||
" return events_theme"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 340,
|
||
"id": "98ef0636-8c45-4a23-a62a-1fbe1544f8ce",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"first merge events and seasons : \n",
|
||
"File path : bdc2324-data/1/1events.csv\n",
|
||
"Shape : (1232, 12)\n",
|
||
"Number of columns : 10\n",
|
||
"Columns : Index(['id', 'season_id', 'facility_id', 'event_type_id', 'event_type_key_id',\n",
|
||
" 'facility_key_id', 'identifier', 'name', 'manual_added', 'is_display'],\n",
|
||
" dtype='object')\n",
|
||
"File path : bdc2324-data/1/1seasons.csv\n",
|
||
"Shape : (13, 6)\n",
|
||
"Number of columns : 4\n",
|
||
"Columns : Index(['id', 'identifier', 'name', 'start_date_time'], dtype='object')\n",
|
||
"Secondly merge events_theme and event_types : \n",
|
||
"File path : bdc2324-data/1/1event_types.csv\n",
|
||
"Shape : (9, 6)\n",
|
||
"Number of columns : 4\n",
|
||
"Columns : Index(['id', 'fidelity_delay', 'identifier', 'name'], dtype='object')\n",
|
||
"thirdly merge events_theme and facilities : \n",
|
||
"File path : bdc2324-data/1/1facilities.csv\n",
|
||
"Shape : (2, 7)\n",
|
||
"Number of columns : 5\n",
|
||
"Columns : Index(['id', 'street_id', 'identifier', 'name', 'fixed_capacity'], dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>event_id</th>\n",
|
||
" <th>season_id</th>\n",
|
||
" <th>facility_id</th>\n",
|
||
" <th>event_type_id</th>\n",
|
||
" <th>event_type_key_id</th>\n",
|
||
" <th>facility_key_id</th>\n",
|
||
" <th>street_id</th>\n",
|
||
" <th>name_events</th>\n",
|
||
" <th>name_seasons</th>\n",
|
||
" <th>name_event_types</th>\n",
|
||
" <th>name_facilities</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>192</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>frontières</td>\n",
|
||
" <td>2018</td>\n",
|
||
" <td>spectacle vivant</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>30329</td>\n",
|
||
" <td>2767</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>visite guidée une autre histoire du monde (1h00)</td>\n",
|
||
" <td>2023</td>\n",
|
||
" <td>offre muséale groupe</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>161</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>visite contée les chercheurs d'or indiv</td>\n",
|
||
" <td>2018</td>\n",
|
||
" <td>offre muséale individuel</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>5957</td>\n",
|
||
" <td>582</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>we dreamt of utopia and we woke up screaming.</td>\n",
|
||
" <td>2021</td>\n",
|
||
" <td>spectacle vivant</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>8337</td>\n",
|
||
" <td>582</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>jeff koons épisodes 4</td>\n",
|
||
" <td>2021</td>\n",
|
||
" <td>spectacle vivant</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" event_id season_id facility_id event_type_id event_type_key_id \\\n",
|
||
"0 192 16 1 4 4 \n",
|
||
"1 30329 2767 1 5 5 \n",
|
||
"2 161 16 1 2 2 \n",
|
||
"3 5957 582 1 4 4 \n",
|
||
"4 8337 582 1 4 4 \n",
|
||
"\n",
|
||
" facility_key_id street_id \\\n",
|
||
"0 1 1 \n",
|
||
"1 1 1 \n",
|
||
"2 1 1 \n",
|
||
"3 1 1 \n",
|
||
"4 1 1 \n",
|
||
"\n",
|
||
" name_events name_seasons \\\n",
|
||
"0 frontières 2018 \n",
|
||
"1 visite guidée une autre histoire du monde (1h00) 2023 \n",
|
||
"2 visite contée les chercheurs d'or indiv 2018 \n",
|
||
"3 we dreamt of utopia and we woke up screaming. 2021 \n",
|
||
"4 jeff koons épisodes 4 2021 \n",
|
||
"\n",
|
||
" name_event_types name_facilities \n",
|
||
"0 spectacle vivant mucem \n",
|
||
"1 offre muséale groupe mucem \n",
|
||
"2 offre muséale individuel mucem \n",
|
||
"3 spectacle vivant mucem \n",
|
||
"4 spectacle vivant mucem "
|
||
]
|
||
},
|
||
"execution_count": 340,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"events_theme= create_events_table()\n",
|
||
"events_theme.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "4ad5b680-bb27-4f86-a5f3-7ff4fd1be96a",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Representations_Table"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 341,
|
||
"id": "481dddd6-80a8-4b9e-a05e-ed06fa3ed7a6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def create_representations_table():\n",
|
||
" representations = load_dataset(\"1representations.csv\")\n",
|
||
" representations = representations.drop(columns = ['serial', 'open', 'satisfaction', 'is_display', 'expected_filling',\n",
|
||
" 'max_filling', 'extra_field', 'start_date_time', 'end_date_time', 'name',\n",
|
||
" 'representation_type_id'])\n",
|
||
" \n",
|
||
" representations_capacity = load_dataset(\"1representation_category_capacities.csv\")\n",
|
||
" representations_capacity = representations_capacity.drop(columns = ['expected_filling', 'max_filling'])\n",
|
||
"\n",
|
||
" representations_theme = representations.merge(representations_capacity, how='left',\n",
|
||
" left_on='id', right_on='representation_id',\n",
|
||
" suffixes=('_representation', '_representation_cap'))\n",
|
||
" # index cleaning\n",
|
||
" representations_theme = representations_theme.drop(columns = [\"id_representation\"])\n",
|
||
" representations_theme = order_columns_id(representations_theme)\n",
|
||
" return representations_theme"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 342,
|
||
"id": "677f4ed8-ef58-45f2-9056-ede0898c6a64",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1representations.csv\n",
|
||
"Shape : (36095, 16)\n",
|
||
"Number of columns : 14\n",
|
||
"Columns : Index(['id', 'event_id', 'representation_type_id', 'identifier', 'serial',\n",
|
||
" 'start_date_time', 'open', 'satisfaction', 'end_date_time', 'name',\n",
|
||
" 'is_display', 'expected_filling', 'max_filling', 'extra_field'],\n",
|
||
" dtype='object')\n",
|
||
"File path : bdc2324-data/1/1representation_category_capacities.csv\n",
|
||
"Shape : (65241, 7)\n",
|
||
"Number of columns : 5\n",
|
||
"Columns : Index(['id', 'representation_id', 'category_id', 'expected_filling',\n",
|
||
" 'max_filling'],\n",
|
||
" dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>event_id</th>\n",
|
||
" <th>id_representation_cap</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12384</td>\n",
|
||
" <td>123058</td>\n",
|
||
" <td>84820</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>37</td>\n",
|
||
" <td>2514</td>\n",
|
||
" <td>269</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>37</td>\n",
|
||
" <td>384</td>\n",
|
||
" <td>269</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>37</td>\n",
|
||
" <td>2515</td>\n",
|
||
" <td>269</td>\n",
|
||
" <td>10</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>37</td>\n",
|
||
" <td>383</td>\n",
|
||
" <td>269</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" event_id id_representation_cap representation_id category_id\n",
|
||
"0 12384 123058 84820 2\n",
|
||
"1 37 2514 269 2\n",
|
||
"2 37 384 269 5\n",
|
||
"3 37 2515 269 10\n",
|
||
"4 37 383 269 1"
|
||
]
|
||
},
|
||
"execution_count": 342,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"representation_theme = create_representations_table()\n",
|
||
"representation_theme.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e274e3cc-1b41-43e0-8412-1563166060cb",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Price Table"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 343,
|
||
"id": "c52621e7-01de-48dc-b572-2974542a8be5",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1product_packs.csv\n",
|
||
"Shape : (1, 6)\n",
|
||
"Number of columns : 4\n",
|
||
"Columns : Index(['id', 'identifier', 'name', 'type_of'], dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>type_of</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name type_of\n",
|
||
"0 1 NaN 0"
|
||
]
|
||
},
|
||
"execution_count": 343,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"product_packs = load_dataset(\"1product_packs.csv\")\n",
|
||
"product_packs.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 344,
|
||
"id": "9e4f60ab-9a2c-4090-b0c4-f9a1530b2d39",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1pricing_formulas.csv\n",
|
||
"Shape : (556, 6)\n",
|
||
"Number of columns : 4\n",
|
||
"Columns : Index(['id', 'identifier', 'name', 'extra_field'], dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>extra_field</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>41909</td>\n",
|
||
" <td>visite mécènes 1h30</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>502</td>\n",
|
||
" <td>entree mucem tp( expo picasso)</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>504</td>\n",
|
||
" <td>nombre de personnes cinema</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>117</td>\n",
|
||
" <td>spectacle tarif e famille tr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1496</td>\n",
|
||
" <td>billet nb famille mecene 1a</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name extra_field\n",
|
||
"0 41909 visite mécènes 1h30 NaN\n",
|
||
"1 502 entree mucem tp( expo picasso) NaN\n",
|
||
"2 504 nombre de personnes cinema NaN\n",
|
||
"3 117 spectacle tarif e famille tr NaN\n",
|
||
"4 1496 billet nb famille mecene 1a NaN"
|
||
]
|
||
},
|
||
"execution_count": 344,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pricing_formula = load_dataset(\"1pricing_formulas.csv\")\n",
|
||
"pricing_formula.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 345,
|
||
"id": "247b5c45-a18a-4cfd-86b4-d3453e157bcd",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1type_of_pricing_formulas.csv\n",
|
||
"Shape : (568, 6)\n",
|
||
"Number of columns : 4\n",
|
||
"Columns : Index(['id', 'type_of_id', 'pricing_formula_id', 'identifier'], dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>type_of_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>127</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2425</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>3</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2937</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>48</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>7</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id type_of_id pricing_formula_id\n",
|
||
"0 1 1 127\n",
|
||
"1 2 1 2425\n",
|
||
"2 3 1 2937\n",
|
||
"3 4 1 48\n",
|
||
"4 5 1 7"
|
||
]
|
||
},
|
||
"execution_count": 345,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"type_pricing_formula = load_dataset(\"1type_of_pricing_formulas.csv\")\n",
|
||
"type_pricing_formula.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 346,
|
||
"id": "4b48f7b3-0f06-4ef6-9355-5016af82f49c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1products_groups.csv\n",
|
||
"Shape : (92973, 9)\n",
|
||
"Number of columns : 7\n",
|
||
"Columns : Index(['id', 'category_id', 'pricing_formula_id', 'representation_id',\n",
|
||
" 'percent_price', 'max_price', 'min_price'],\n",
|
||
" dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>percent_price</th>\n",
|
||
" <th>max_price</th>\n",
|
||
" <th>min_price</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>2735</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>97</td>\n",
|
||
" <td>1534</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>156773</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>82519</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>14387</td>\n",
|
||
" <td>16</td>\n",
|
||
" <td>79</td>\n",
|
||
" <td>8046</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>2770</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>37</td>\n",
|
||
" <td>1563</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>27179</td>\n",
|
||
" <td>13</td>\n",
|
||
" <td>119</td>\n",
|
||
" <td>14192</td>\n",
|
||
" <td>100.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id category_id pricing_formula_id representation_id percent_price \\\n",
|
||
"0 2735 8 97 1534 100.0 \n",
|
||
"1 156773 5 9 82519 100.0 \n",
|
||
"2 14387 16 79 8046 100.0 \n",
|
||
"3 2770 2 37 1563 100.0 \n",
|
||
"4 27179 13 119 14192 100.0 \n",
|
||
"\n",
|
||
" max_price min_price \n",
|
||
"0 0.0 0.0 \n",
|
||
"1 0.0 0.0 \n",
|
||
"2 0.0 0.0 \n",
|
||
"3 0.0 0.0 \n",
|
||
"4 0.0 0.0 "
|
||
]
|
||
},
|
||
"execution_count": 346,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"product_groups = load_dataset(\"1products_groups.csv\")\n",
|
||
"product_groups.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "71c26a38-6818-42df-8aee-0135681a5563",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Uniform Products theme database"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 347,
|
||
"id": "b26f4e7e-134d-4e32-a615-4b0e6bb80b25",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Products theme columns : Index(['id_products', 'representation_id', 'pricing_formula_id', 'category_id',\n",
|
||
" 'products_group_id', 'product_pack_id', 'type_of_id', 'amount',\n",
|
||
" 'is_full_price', 'name_categories'],\n",
|
||
" dtype='object')\n",
|
||
"\n",
|
||
" Representation theme columns : Index(['event_id', 'id_representation_cap', 'representation_id',\n",
|
||
" 'category_id'],\n",
|
||
" dtype='object')\n",
|
||
"\n",
|
||
" Events theme columns : Index(['event_id', 'season_id', 'facility_id', 'event_type_id',\n",
|
||
" 'event_type_key_id', 'facility_key_id', 'street_id', 'name_events',\n",
|
||
" 'name_seasons', 'name_event_types', 'name_facilities'],\n",
|
||
" dtype='object')\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(\"Products theme columns : \", products_theme.columns)\n",
|
||
"print(\"\\n Representation theme columns : \", representation_theme.columns)\n",
|
||
"print(\"\\n Events theme columns : \", events_theme.columns)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 348,
|
||
"id": "d40b1e3b-b1f3-4915-8ebc-6bb7856da42a",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id_products</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>products_group_id</th>\n",
|
||
" <th>product_pack_id</th>\n",
|
||
" <th>type_of_id</th>\n",
|
||
" <th>amount</th>\n",
|
||
" <th>is_full_price</th>\n",
|
||
" <th>name_categories</th>\n",
|
||
" <th>event_id</th>\n",
|
||
" <th>id_representation_cap</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>10682</td>\n",
|
||
" <td>914</td>\n",
|
||
" <td>114</td>\n",
|
||
" <td>41</td>\n",
|
||
" <td>10655</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv activité tr</td>\n",
|
||
" <td>132</td>\n",
|
||
" <td>8789</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>478</td>\n",
|
||
" <td>273</td>\n",
|
||
" <td>131</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>471</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>9.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" <td>37</td>\n",
|
||
" <td>390</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20873</td>\n",
|
||
" <td>275</td>\n",
|
||
" <td>137</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>20825</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>11.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" <td>37</td>\n",
|
||
" <td>395</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>157142</td>\n",
|
||
" <td>82519</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>156773</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>8.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tr</td>\n",
|
||
" <td>12365</td>\n",
|
||
" <td>120199</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1341</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>93</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1175</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>8.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>21</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id_products representation_id pricing_formula_id category_id \\\n",
|
||
"0 10682 914 114 41 \n",
|
||
"1 478 273 131 1 \n",
|
||
"2 20873 275 137 1 \n",
|
||
"3 157142 82519 9 5 \n",
|
||
"4 1341 9 93 1 \n",
|
||
"\n",
|
||
" products_group_id product_pack_id type_of_id amount is_full_price \\\n",
|
||
"0 10655 1 NaN 9.0 False \n",
|
||
"1 471 1 12.0 9.5 False \n",
|
||
"2 20825 1 12.0 11.5 False \n",
|
||
"3 156773 1 NaN 8.0 False \n",
|
||
"4 1175 1 12.0 8.5 False \n",
|
||
"\n",
|
||
" name_categories event_id id_representation_cap \n",
|
||
"0 indiv activité tr 132 8789 \n",
|
||
"1 indiv entrées tp 37 390 \n",
|
||
"2 indiv entrées tp 37 395 \n",
|
||
"3 indiv entrées tr 12365 120199 \n",
|
||
"4 indiv entrées tp 8 21 "
|
||
]
|
||
},
|
||
"execution_count": 348,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products_global = products_theme.merge(representation_theme, how='left',\n",
|
||
" on= [\"representation_id\", \"category_id\"])\n",
|
||
"\n",
|
||
"\n",
|
||
"products_global.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 349,
|
||
"id": "78d75a08-e959-429c-847a-7d70a2804806",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id_products</th>\n",
|
||
" <th>representation_id</th>\n",
|
||
" <th>pricing_formula_id</th>\n",
|
||
" <th>category_id</th>\n",
|
||
" <th>products_group_id</th>\n",
|
||
" <th>product_pack_id</th>\n",
|
||
" <th>type_of_id</th>\n",
|
||
" <th>event_id</th>\n",
|
||
" <th>id_representation_cap</th>\n",
|
||
" <th>season_id</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>event_type_key_id</th>\n",
|
||
" <th>facility_key_id</th>\n",
|
||
" <th>street_id</th>\n",
|
||
" <th>amount</th>\n",
|
||
" <th>is_full_price</th>\n",
|
||
" <th>name_categories</th>\n",
|
||
" <th>name_events</th>\n",
|
||
" <th>name_seasons</th>\n",
|
||
" <th>name_event_types</th>\n",
|
||
" <th>name_facilities</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>10682</td>\n",
|
||
" <td>914</td>\n",
|
||
" <td>114</td>\n",
|
||
" <td>41</td>\n",
|
||
" <td>10655</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>132</td>\n",
|
||
" <td>8789</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv activité tr</td>\n",
|
||
" <td>visite-jeu \"le classico des minots\" (1h30)</td>\n",
|
||
" <td>2017</td>\n",
|
||
" <td>offre muséale individuel</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>478</td>\n",
|
||
" <td>273</td>\n",
|
||
" <td>131</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>471</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>37</td>\n",
|
||
" <td>390</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>9.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" <td>billet mucem picasso</td>\n",
|
||
" <td>2016</td>\n",
|
||
" <td>offre muséale individuel</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>20873</td>\n",
|
||
" <td>275</td>\n",
|
||
" <td>137</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>20825</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>37</td>\n",
|
||
" <td>395</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>11.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" <td>billet mucem picasso</td>\n",
|
||
" <td>2016</td>\n",
|
||
" <td>offre muséale individuel</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>157142</td>\n",
|
||
" <td>82519</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>156773</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>12365</td>\n",
|
||
" <td>120199</td>\n",
|
||
" <td>1754</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>8.0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>offre muséale individuel</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1341</td>\n",
|
||
" <td>9</td>\n",
|
||
" <td>93</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1175</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>12.0</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>21</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>8.5</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>indiv entrées tp</td>\n",
|
||
" <td>non défini</td>\n",
|
||
" <td>2017</td>\n",
|
||
" <td>non défini</td>\n",
|
||
" <td>mucem</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 22 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id_products representation_id pricing_formula_id category_id \\\n",
|
||
"0 10682 914 114 41 \n",
|
||
"1 478 273 131 1 \n",
|
||
"2 20873 275 137 1 \n",
|
||
"3 157142 82519 9 5 \n",
|
||
"4 1341 9 93 1 \n",
|
||
"\n",
|
||
" products_group_id product_pack_id type_of_id event_id \\\n",
|
||
"0 10655 1 NaN 132 \n",
|
||
"1 471 1 12.0 37 \n",
|
||
"2 20825 1 12.0 37 \n",
|
||
"3 156773 1 NaN 12365 \n",
|
||
"4 1175 1 12.0 8 \n",
|
||
"\n",
|
||
" id_representation_cap season_id ... event_type_key_id facility_key_id \\\n",
|
||
"0 8789 4 ... 5 1 \n",
|
||
"1 390 2 ... 2 1 \n",
|
||
"2 395 2 ... 2 1 \n",
|
||
"3 120199 1754 ... 4 1 \n",
|
||
"4 21 4 ... 6 1 \n",
|
||
"\n",
|
||
" street_id amount is_full_price name_categories \\\n",
|
||
"0 1 9.0 False indiv activité tr \n",
|
||
"1 1 9.5 False indiv entrées tp \n",
|
||
"2 1 11.5 False indiv entrées tp \n",
|
||
"3 1 8.0 False indiv entrées tr \n",
|
||
"4 1 8.5 False indiv entrées tp \n",
|
||
"\n",
|
||
" name_events name_seasons \\\n",
|
||
"0 visite-jeu \"le classico des minots\" (1h30) 2017 \n",
|
||
"1 billet mucem picasso 2016 \n",
|
||
"2 billet mucem picasso 2016 \n",
|
||
"3 NaN NaN \n",
|
||
"4 non défini 2017 \n",
|
||
"\n",
|
||
" name_event_types name_facilities \n",
|
||
"0 offre muséale individuel mucem \n",
|
||
"1 offre muséale individuel mucem \n",
|
||
"2 offre muséale individuel mucem \n",
|
||
"3 offre muséale individuel mucem \n",
|
||
"4 non défini mucem \n",
|
||
"\n",
|
||
"[5 rows x 22 columns]"
|
||
]
|
||
},
|
||
"execution_count": 349,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products_global = products_global.merge(events_theme, how='left', on='event_id',\n",
|
||
" suffixes = (\"_representation\", \"_event\"))\n",
|
||
"products_global = order_columns_id(products_global)\n",
|
||
"products_global.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 350,
|
||
"id": "4a6950e8-4818-4df2-afa9-562e0921698c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['id_products', 'representation_id', 'pricing_formula_id', 'category_id',\n",
|
||
" 'products_group_id', 'product_pack_id', 'type_of_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": 350,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products_global.columns"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 351,
|
||
"id": "b18f6428-90e0-4b1b-9b8d-bad995fb6c98",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(94803, 22)"
|
||
]
|
||
},
|
||
"execution_count": 351,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products_global.shape"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c3caf2fd-178e-48e9-b95f-5798bd576f5d",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Analysis of Products_global"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 352,
|
||
"id": "33ee07a2-d871-4436-9860-9be389bc4902",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id_products 0\n",
|
||
"representation_id 0\n",
|
||
"pricing_formula_id 0\n",
|
||
"category_id 0\n",
|
||
"products_group_id 0\n",
|
||
"product_pack_id 0\n",
|
||
"type_of_id 67589\n",
|
||
"event_id 0\n",
|
||
"id_representation_cap 0\n",
|
||
"season_id 0\n",
|
||
"facility_id 0\n",
|
||
"event_type_id 0\n",
|
||
"event_type_key_id 0\n",
|
||
"facility_key_id 0\n",
|
||
"street_id 0\n",
|
||
"amount 0\n",
|
||
"is_full_price 0\n",
|
||
"name_categories 3991\n",
|
||
"name_events 46657\n",
|
||
"name_seasons 30663\n",
|
||
"name_event_types 0\n",
|
||
"name_facilities 0\n",
|
||
"dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 352,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"products_global.isna().sum()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 353,
|
||
"id": "557fc475-4417-4d9f-8d4e-8c49bc42367f",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"array(['offre muséale individuel', 'non défini', 'spectacle vivant',\n",
|
||
" 'offre muséale groupe', 'formule adhésion'], dtype=object)"
|
||
]
|
||
},
|
||
"execution_count": 353,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# how many event types ?\n",
|
||
"\n",
|
||
"products_global['name_event_types'].unique()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 354,
|
||
"id": "a9b9a23c-b0de-4685-97e5-d52dd78349f5",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"644"
|
||
]
|
||
},
|
||
"execution_count": 354,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# how many events ?\n",
|
||
"\n",
|
||
"len(products_global['name_events'].unique())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 355,
|
||
"id": "fb374c72-58ca-404d-a86b-e834a2fc4a34",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"array(['indiv activité tr', 'indiv entrées tp', 'indiv entrées tr',\n",
|
||
" 'indiv prog enfant', 'indiv activité gr', 'indiv prog gr',\n",
|
||
" 'indiv activité tp', 'indiv activité enfant', 'indiv entrées gr',\n",
|
||
" 'groupe forfait entrées tr', 'groupe autonome adulte',\n",
|
||
" 'indiv prog tp', 'indiv prog tr', 'indiv entrées fa',\n",
|
||
" 'groupe forfait scolaire', 'en nb entrées tr', 'non défini', nan,\n",
|
||
" 'en nb entrées gr', 'groupe autonome entrées gr',\n",
|
||
" 'groupe forfait entrées gr', 'groupe autonome entrées tr',\n",
|
||
" 'en nb entrées tp', 'groupe autonome gr',\n",
|
||
" 'groupe autonome entrées tp', 'groupe forfait adulte',\n",
|
||
" 'groupe forfait etudiant'], dtype=object)"
|
||
]
|
||
},
|
||
"execution_count": 355,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# how many categories ?\n",
|
||
"products_global['name_categories'].unique()\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 356,
|
||
"id": "11f89771-8d50-4ef4-b34e-53e4f6b419bb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"27"
|
||
]
|
||
},
|
||
"execution_count": 356,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"len(products_global['category_id'].unique())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 357,
|
||
"id": "8add1ff2-b7e8-4381-90d8-d18d8660ed39",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def uniform_product_df():\n",
|
||
" \"\"\"\n",
|
||
" This function returns the uniform product dataset\n",
|
||
" \"\"\"\n",
|
||
" print(\"Products theme columns : \", products_theme.columns)\n",
|
||
" print(\"\\n Representation theme columns : \", representation_theme.columns)\n",
|
||
" print(\"\\n Events theme columns : \", events_theme.columns)\n",
|
||
"\n",
|
||
" products_global = products_theme.merge(representation_theme, how='left',\n",
|
||
" on= [\"representation_id\", \"category_id\"])\n",
|
||
" \n",
|
||
" products_global = products_global.merge(events_theme, how='left', on='event_id',\n",
|
||
" suffixes = (\"_representation\", \"_event\"))\n",
|
||
" \n",
|
||
" products_global = order_columns_id(products_global)\n",
|
||
"\n",
|
||
" # remove useless columns \n",
|
||
" products_global = products_global.drop(columns = ['type_of_id', 'name_events', 'name_seasons', 'name_categories'])\n",
|
||
" return products_global\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b9303d35-4449-4cb6-887b-73a75f3cb868",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Investigate Customer Plus"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 358,
|
||
"id": "1fd9dcb0-164a-4fd0-90c3-2fd9e7b44016",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"File path : bdc2324-data/1/1customersplus.csv\n",
|
||
"Shape : (151866, 43)\n",
|
||
"Number of columns : 41\n",
|
||
"Columns : Index(['id', 'street_id', 'identifier', 'structure_id', 'mcp_contact_id',\n",
|
||
" 'fidelity', 'tenant_id', 'lastname', 'firstname', 'birthdate', 'email',\n",
|
||
" 'civility', 'is_partner', 'extra', 'deleted_at', 'reference', 'gender',\n",
|
||
" 'is_email_true', 'extra_field', 'opt_in', 'note', 'profession',\n",
|
||
" 'language', 'need_reload', 'last_buying_date', 'max_price',\n",
|
||
" 'ticket_sum', 'average_price', 'average_purchase_delay',\n",
|
||
" 'average_price_basket', 'average_ticket_basket', 'total_price',\n",
|
||
" 'preferred_category', 'preferred_supplier', 'preferred_formula',\n",
|
||
" 'purchase_count', 'first_buying_date', 'last_visiting_date', 'zipcode',\n",
|
||
" 'country', 'age'],\n",
|
||
" dtype='object')\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>id</th>\n",
|
||
" <th>street_id</th>\n",
|
||
" <th>structure_id</th>\n",
|
||
" <th>mcp_contact_id</th>\n",
|
||
" <th>fidelity</th>\n",
|
||
" <th>tenant_id</th>\n",
|
||
" <th>lastname</th>\n",
|
||
" <th>firstname</th>\n",
|
||
" <th>birthdate</th>\n",
|
||
" <th>email</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>total_price</th>\n",
|
||
" <th>preferred_category</th>\n",
|
||
" <th>preferred_supplier</th>\n",
|
||
" <th>preferred_formula</th>\n",
|
||
" <th>purchase_count</th>\n",
|
||
" <th>first_buying_date</th>\n",
|
||
" <th>last_visiting_date</th>\n",
|
||
" <th>zipcode</th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>age</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12751</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>lastname12751</td>\n",
|
||
" <td>firstname12751</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>12825</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>lastname12825</td>\n",
|
||
" <td>firstname12825</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>11261</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>lastname11261</td>\n",
|
||
" <td>firstname11261</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>13071</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>lastname13071</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>653061</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>email653061</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 40 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id street_id structure_id mcp_contact_id fidelity tenant_id \\\n",
|
||
"0 12751 2 NaN NaN 0 1311 \n",
|
||
"1 12825 2 NaN NaN 0 1311 \n",
|
||
"2 11261 2 NaN NaN 0 1311 \n",
|
||
"3 13071 2 NaN NaN 0 1311 \n",
|
||
"4 653061 10 NaN NaN 0 1311 \n",
|
||
"\n",
|
||
" lastname firstname birthdate email ... total_price \\\n",
|
||
"0 lastname12751 firstname12751 NaN NaN ... NaN \n",
|
||
"1 lastname12825 firstname12825 NaN NaN ... NaN \n",
|
||
"2 lastname11261 firstname11261 NaN NaN ... NaN \n",
|
||
"3 lastname13071 NaN NaN NaN ... NaN \n",
|
||
"4 NaN NaN NaN email653061 ... NaN \n",
|
||
"\n",
|
||
" preferred_category preferred_supplier preferred_formula 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 last_visiting_date zipcode country age \n",
|
||
"0 NaN NaN NaN fr NaN \n",
|
||
"1 NaN NaN NaN fr NaN \n",
|
||
"2 NaN NaN NaN fr NaN \n",
|
||
"3 NaN NaN NaN fr NaN \n",
|
||
"4 NaN NaN NaN NaN NaN \n",
|
||
"\n",
|
||
"[5 rows x 40 columns]"
|
||
]
|
||
},
|
||
"execution_count": 358,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"customer_plus = load_dataset(\"1customersplus.csv\")\n",
|
||
"customer_plus.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 359,
|
||
"id": "e4a5f890-d5aa-40d7-a70c-8d8a254a5c9a",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id 0\n",
|
||
"street_id 0\n",
|
||
"structure_id 133752\n",
|
||
"mcp_contact_id 52965\n",
|
||
"fidelity 0\n",
|
||
"tenant_id 0\n",
|
||
"lastname 66003\n",
|
||
"firstname 68333\n",
|
||
"birthdate 146429\n",
|
||
"email 13094\n",
|
||
"civility 151866\n",
|
||
"is_partner 0\n",
|
||
"extra 151866\n",
|
||
"deleted_at 151866\n",
|
||
"reference 151866\n",
|
||
"gender 0\n",
|
||
"is_email_true 0\n",
|
||
"extra_field 151866\n",
|
||
"opt_in 0\n",
|
||
"note 150960\n",
|
||
"profession 145660\n",
|
||
"language 150774\n",
|
||
"need_reload 0\n",
|
||
"last_buying_date 78444\n",
|
||
"max_price 78444\n",
|
||
"ticket_sum 0\n",
|
||
"average_price 13120\n",
|
||
"average_purchase_delay 78444\n",
|
||
"average_price_basket 78444\n",
|
||
"average_ticket_basket 78444\n",
|
||
"total_price 65324\n",
|
||
"preferred_category 151866\n",
|
||
"preferred_supplier 151866\n",
|
||
"preferred_formula 151866\n",
|
||
"purchase_count 0\n",
|
||
"first_buying_date 78444\n",
|
||
"last_visiting_date 151866\n",
|
||
"zipcode 108093\n",
|
||
"country 8291\n",
|
||
"age 146429\n",
|
||
"dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 359,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"customer_plus.isna().sum()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "55ac8ec6-baa2-4199-b29a-d931260a6970",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Analysis of Customer Products"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 360,
|
||
"id": "de370d66-852e-46a1-8fb4-5c1e5756f5cd",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import matplotlib.pyplot as plt"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 361,
|
||
"id": "088a1f50-cf5d-4d1a-891d-4e9df7e1c35b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>customer_id</th>\n",
|
||
" <th>birthdate</th>\n",
|
||
" <th>street_id</th>\n",
|
||
" <th>is_partner</th>\n",
|
||
" <th>gender</th>\n",
|
||
" <th>is_email_true</th>\n",
|
||
" <th>opt_in</th>\n",
|
||
" <th>structure_id</th>\n",
|
||
" <th>profession</th>\n",
|
||
" <th>language</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>first_buying_date</th>\n",
|
||
" <th>country</th>\n",
|
||
" <th>age</th>\n",
|
||
" <th>tenant_id</th>\n",
|
||
" <th>nb_campaigns</th>\n",
|
||
" <th>nb_campaigns_opened</th>\n",
|
||
" <th>time_to_open</th>\n",
|
||
" <th>event_type_id</th>\n",
|
||
" <th>nb_tickets</th>\n",
|
||
" <th>avg_amount</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12751</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>12825</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>11261</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>13071</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>fr</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>653061</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1311</td>\n",
|
||
" <td>80.0</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>0 days 19:53:02.500000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>5 rows × 31 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"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 ... NaN fr \n",
|
||
"1 True NaN NaN NaN ... NaN fr \n",
|
||
"2 True NaN NaN NaN ... NaN fr \n",
|
||
"3 True NaN NaN NaN ... NaN fr \n",
|
||
"4 False NaN NaN NaN ... NaN NaN \n",
|
||
"\n",
|
||
" age tenant_id nb_campaigns nb_campaigns_opened time_to_open \\\n",
|
||
"0 NaN 1311 NaN NaN NaN \n",
|
||
"1 NaN 1311 NaN NaN NaN \n",
|
||
"2 NaN 1311 NaN NaN NaN \n",
|
||
"3 NaN 1311 NaN NaN NaN \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": 361,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"customer_product = pd.read_csv(\"customer_product.csv\")\n",
|
||
"customer_product.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 362,
|
||
"id": "bdd582af-0cf1-4e04-90ad-7165b8a36ac8",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"(156289, 31)\n",
|
||
"Index(['customer_id', 'birthdate', 'street_id', 'is_partner', 'gender',\n",
|
||
" 'is_email_true', 'opt_in', 'structure_id', 'profession', 'language',\n",
|
||
" 'mcp_contact_id', 'last_buying_date', 'max_price', 'ticket_sum',\n",
|
||
" 'average_price', 'fidelity', 'average_purchase_delay',\n",
|
||
" 'average_price_basket', 'average_ticket_basket', 'total_price',\n",
|
||
" 'purchase_count', 'first_buying_date', 'country', 'age', 'tenant_id',\n",
|
||
" 'nb_campaigns', 'nb_campaigns_opened', 'time_to_open', 'event_type_id',\n",
|
||
" 'nb_tickets', 'avg_amount'],\n",
|
||
" dtype='object')\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Shape :\n",
|
||
"print(customer_product.shape)\n",
|
||
"# columns : \n",
|
||
"print(customer_product.columns)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 363,
|
||
"id": "55fa2361-ebde-4472-b8d2-521a20be766d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"customer_id 0\n",
|
||
"birthdate 149375\n",
|
||
"street_id 0\n",
|
||
"is_partner 0\n",
|
||
"gender 0\n",
|
||
"is_email_true 0\n",
|
||
"opt_in 0\n",
|
||
"structure_id 136867\n",
|
||
"profession 150004\n",
|
||
"language 155184\n",
|
||
"mcp_contact_id 53519\n",
|
||
"last_buying_date 78445\n",
|
||
"max_price 78445\n",
|
||
"ticket_sum 0\n",
|
||
"average_price 13120\n",
|
||
"fidelity 0\n",
|
||
"average_purchase_delay 78445\n",
|
||
"average_price_basket 78445\n",
|
||
"average_ticket_basket 78445\n",
|
||
"total_price 65325\n",
|
||
"purchase_count 0\n",
|
||
"first_buying_date 78445\n",
|
||
"country 8304\n",
|
||
"age 149375\n",
|
||
"tenant_id 0\n",
|
||
"nb_campaigns 21623\n",
|
||
"nb_campaigns_opened 21623\n",
|
||
"time_to_open 69017\n",
|
||
"event_type_id 78355\n",
|
||
"nb_tickets 78355\n",
|
||
"avg_amount 78355\n",
|
||
"dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 363,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# check NA\n",
|
||
"\n",
|
||
"customer_product.isna().sum()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 364,
|
||
"id": "2e228eb6-8cc7-4fd7-8e17-2b818095cb96",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>customer_id</th>\n",
|
||
" <th>gender</th>\n",
|
||
" <th>is_partner</th>\n",
|
||
" <th>is_email_true</th>\n",
|
||
" <th>nb_campaigns</th>\n",
|
||
" <th>nb_campaigns_opened</th>\n",
|
||
" <th>fidelity</th>\n",
|
||
" <th>nb_tickets</th>\n",
|
||
" <th>ticket_sum</th>\n",
|
||
" <th>average_price</th>\n",
|
||
" <th>avg_amount</th>\n",
|
||
" <th>event_type_id</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>12751</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>12825</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>11261</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>13071</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>653061</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>80.0</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" customer_id gender is_partner is_email_true nb_campaigns \\\n",
|
||
"0 12751 1 False True NaN \n",
|
||
"1 12825 2 False True NaN \n",
|
||
"2 11261 1 False True NaN \n",
|
||
"3 13071 2 False True NaN \n",
|
||
"4 653061 2 False True 80.0 \n",
|
||
"\n",
|
||
" nb_campaigns_opened fidelity nb_tickets ticket_sum average_price \\\n",
|
||
"0 NaN 0 NaN 0 0.0 \n",
|
||
"1 NaN 0 NaN 0 0.0 \n",
|
||
"2 NaN 0 NaN 0 0.0 \n",
|
||
"3 NaN 0 NaN 0 0.0 \n",
|
||
"4 2.0 0 NaN 0 0.0 \n",
|
||
"\n",
|
||
" avg_amount event_type_id \n",
|
||
"0 NaN NaN \n",
|
||
"1 NaN NaN \n",
|
||
"2 NaN NaN \n",
|
||
"3 NaN NaN \n",
|
||
"4 NaN NaN "
|
||
]
|
||
},
|
||
"execution_count": 364,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"## Investigate a subset of variables\n",
|
||
"\n",
|
||
"df = customer_product[[\"customer_id\", \"gender\", \"is_partner\", \"is_email_true\",\"nb_campaigns\", \"nb_campaigns_opened\", \"fidelity\",\n",
|
||
" \"nb_tickets\", \"ticket_sum\", \"average_price\", \"avg_amount\", \"event_type_id\"]]\n",
|
||
"df.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 368,
|
||
"id": "80120f51-f91e-4d4d-9578-1dc88cd94754",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"shape : (156289, 12)\n",
|
||
"Nombre de customer unique : 151866\n",
|
||
"Nombre de ligne où nb_tickets est non nul : 77934\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(\"shape : \", df.shape)\n",
|
||
"print(\"Nombre de customer unique : \", len(df[\"customer_id\"].unique()))\n",
|
||
"print(\"Nombre de ligne où nb_tickets est non nul : \", df[\"nb_tickets\"].count())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 370,
|
||
"id": "0d56bfa9-c93c-42ee-bec2-96f0598fce2c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Nombre de consommateur unique : 73511\n",
|
||
"Nombre de type d'évènement : 4\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>customer_id</th>\n",
|
||
" <th>gender</th>\n",
|
||
" <th>is_partner</th>\n",
|
||
" <th>is_email_true</th>\n",
|
||
" <th>nb_campaigns</th>\n",
|
||
" <th>nb_campaigns_opened</th>\n",
|
||
" <th>fidelity</th>\n",
|
||
" <th>nb_tickets</th>\n",
|
||
" <th>ticket_sum</th>\n",
|
||
" <th>average_price</th>\n",
|
||
" <th>avg_amount</th>\n",
|
||
" <th>event_type_id</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>162</th>\n",
|
||
" <td>309255</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>7.762474</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>195</th>\n",
|
||
" <td>7772</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>133.0</td>\n",
|
||
" <td>19.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5.0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>2.800000</td>\n",
|
||
" <td>7.762474</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>197</th>\n",
|
||
" <td>280009</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>116.0</td>\n",
|
||
" <td>32.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>11.000000</td>\n",
|
||
" <td>7.762474</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>199</th>\n",
|
||
" <td>1556</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>8.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>23.333333</td>\n",
|
||
" <td>6.150659</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>200</th>\n",
|
||
" <td>1556</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>8.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>23.333333</td>\n",
|
||
" <td>6.439463</td>\n",
|
||
" <td>6.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>156245</th>\n",
|
||
" <td>293753</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>94.0</td>\n",
|
||
" <td>34.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>11.000000</td>\n",
|
||
" <td>7.762474</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>156246</th>\n",
|
||
" <td>293798</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>7.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>12.000000</td>\n",
|
||
" <td>7.762474</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>156281</th>\n",
|
||
" <td>295224</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>10.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>98.0</td>\n",
|
||
" <td>98</td>\n",
|
||
" <td>0.000000</td>\n",
|
||
" <td>6.150659</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>156287</th>\n",
|
||
" <td>295366</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>5.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3.0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>11.000000</td>\n",
|
||
" <td>7.762474</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>156288</th>\n",
|
||
" <td>295368</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>False</td>\n",
|
||
" <td>True</td>\n",
|
||
" <td>5.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>11.000000</td>\n",
|
||
" <td>7.762474</td>\n",
|
||
" <td>4.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>77934 rows × 12 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" customer_id gender is_partner is_email_true nb_campaigns \\\n",
|
||
"162 309255 2 False True 2.0 \n",
|
||
"195 7772 0 False True 133.0 \n",
|
||
"197 280009 0 False True 116.0 \n",
|
||
"199 1556 0 False True 9.0 \n",
|
||
"200 1556 0 False True 9.0 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"156245 293753 2 False True 94.0 \n",
|
||
"156246 293798 2 False True 7.0 \n",
|
||
"156281 295224 2 False True 10.0 \n",
|
||
"156287 295366 2 False True 5.0 \n",
|
||
"156288 295368 2 False True 5.0 \n",
|
||
"\n",
|
||
" nb_campaigns_opened fidelity nb_tickets ticket_sum average_price \\\n",
|
||
"162 2.0 0 2.0 0 0.000000 \n",
|
||
"195 19.0 0 5.0 5 2.800000 \n",
|
||
"197 32.0 1 1.0 1 11.000000 \n",
|
||
"199 8.0 1 2.0 3 23.333333 \n",
|
||
"200 8.0 1 1.0 3 23.333333 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"156245 34.0 1 1.0 1 11.000000 \n",
|
||
"156246 0.0 2 2.0 2 12.000000 \n",
|
||
"156281 0.0 1 98.0 98 0.000000 \n",
|
||
"156287 0.0 1 3.0 3 11.000000 \n",
|
||
"156288 0.0 1 2.0 2 11.000000 \n",
|
||
"\n",
|
||
" avg_amount event_type_id \n",
|
||
"162 7.762474 4.0 \n",
|
||
"195 7.762474 4.0 \n",
|
||
"197 7.762474 4.0 \n",
|
||
"199 6.150659 2.0 \n",
|
||
"200 6.439463 6.0 \n",
|
||
"... ... ... \n",
|
||
"156245 7.762474 4.0 \n",
|
||
"156246 7.762474 4.0 \n",
|
||
"156281 6.150659 2.0 \n",
|
||
"156287 7.762474 4.0 \n",
|
||
"156288 7.762474 4.0 \n",
|
||
"\n",
|
||
"[77934 rows x 12 columns]"
|
||
]
|
||
},
|
||
"execution_count": 370,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Filter only customer that buy tickets\n",
|
||
"\n",
|
||
"df_purchase = df.dropna(subset= [\"nb_tickets\"])\n",
|
||
"print(\"Nombre de consommateur unique : \", len(df_purchase[\"customer_id\"].unique()))\n",
|
||
"print(\"Nombre de type d'évènement : \", len(df_purchase[\"event_type_id\"].unique()))\n",
|
||
"#print(\"Nombre de type d'évènement (nom) : \", len(df_purchase[\"name_event_types\"].unique()))\n",
|
||
"df_purchase"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 371,
|
||
"id": "0cc96c4e-f3f3-43d2-94b5-a11719f09607",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"ename": "KeyError",
|
||
"evalue": "'name_event_types'",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||
"Cell \u001b[0;32mIn[371], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m event_counts \u001b[38;5;241m=\u001b[39m \u001b[43mdf_purchase\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgroupby\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mname_event_types\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcustomer_id\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mnunique()\n\u001b[1;32m 3\u001b[0m event_counts\u001b[38;5;241m.\u001b[39mplot(kind\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbar\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 4\u001b[0m plt\u001b[38;5;241m.\u001b[39mxlabel(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mType d\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mévènement\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
|
||
"File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/pandas/core/frame.py:8869\u001b[0m, in \u001b[0;36mDataFrame.groupby\u001b[0;34m(self, by, axis, level, as_index, sort, group_keys, observed, dropna)\u001b[0m\n\u001b[1;32m 8866\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m level \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m by \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 8867\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mYou have to supply one of \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mby\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m and \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlevel\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 8869\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDataFrameGroupBy\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 8870\u001b[0m \u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8871\u001b[0m \u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mby\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8872\u001b[0m \u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8873\u001b[0m \u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlevel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8874\u001b[0m \u001b[43m \u001b[49m\u001b[43mas_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mas_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8875\u001b[0m \u001b[43m \u001b[49m\u001b[43msort\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msort\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8876\u001b[0m \u001b[43m \u001b[49m\u001b[43mgroup_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8877\u001b[0m \u001b[43m \u001b[49m\u001b[43mobserved\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mobserved\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8878\u001b[0m \u001b[43m \u001b[49m\u001b[43mdropna\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdropna\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8879\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
|
||
"File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/pandas/core/groupby/groupby.py:1278\u001b[0m, in \u001b[0;36mGroupBy.__init__\u001b[0;34m(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, observed, dropna)\u001b[0m\n\u001b[1;32m 1275\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdropna \u001b[38;5;241m=\u001b[39m dropna\n\u001b[1;32m 1277\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m grouper \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1278\u001b[0m grouper, exclusions, obj \u001b[38;5;241m=\u001b[39m \u001b[43mget_grouper\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1279\u001b[0m \u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1280\u001b[0m \u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1281\u001b[0m \u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1282\u001b[0m \u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlevel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1283\u001b[0m \u001b[43m \u001b[49m\u001b[43msort\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msort\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1284\u001b[0m \u001b[43m \u001b[49m\u001b[43mobserved\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mobserved\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mis\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mlib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mno_default\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mobserved\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1285\u001b[0m \u001b[43m \u001b[49m\u001b[43mdropna\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdropna\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1286\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1288\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m observed \u001b[38;5;129;01mis\u001b[39;00m lib\u001b[38;5;241m.\u001b[39mno_default:\n\u001b[1;32m 1289\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28many\u001b[39m(ping\u001b[38;5;241m.\u001b[39m_passed_categorical \u001b[38;5;28;01mfor\u001b[39;00m ping \u001b[38;5;129;01min\u001b[39;00m grouper\u001b[38;5;241m.\u001b[39mgroupings):\n",
|
||
"File \u001b[0;32m/opt/mamba/lib/python3.10/site-packages/pandas/core/groupby/grouper.py:1009\u001b[0m, in \u001b[0;36mget_grouper\u001b[0;34m(obj, key, axis, level, sort, observed, validate, dropna)\u001b[0m\n\u001b[1;32m 1007\u001b[0m in_axis, level, gpr \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m, gpr, \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1008\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1009\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(gpr)\n\u001b[1;32m 1010\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(gpr, Grouper) \u001b[38;5;129;01mand\u001b[39;00m gpr\u001b[38;5;241m.\u001b[39mkey \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1011\u001b[0m \u001b[38;5;66;03m# Add key to exclusions\u001b[39;00m\n\u001b[1;32m 1012\u001b[0m exclusions\u001b[38;5;241m.\u001b[39madd(gpr\u001b[38;5;241m.\u001b[39mkey)\n",
|
||
"\u001b[0;31mKeyError\u001b[0m: 'name_event_types'"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"event_counts = df_purchase.groupby('name_event_types')['customer_id'].nunique()\n",
|
||
"\n",
|
||
"event_counts.plot(kind='bar')\n",
|
||
"plt.xlabel(\"Type d'évènement\")\n",
|
||
"plt.ylabel('Nombre de consommateurs uniques')\n",
|
||
"plt.title(\"Nombre de consommateurs uniques par type d'évènement\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "e37ad847-7ea5-4afe-9c6d-e07a668d2a27",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"average_tickets_by_event = df_purchase.groupby('name_event_types')['nb_tickets'].mean()\n",
|
||
"\n",
|
||
"average_tickets_by_event.plot(kind='bar', figsize=(8, 5))\n",
|
||
"plt.xlabel(\"Type d'évènements\")\n",
|
||
"plt.ylabel('Nombre moyen de tickets achetés')\n",
|
||
"plt.title(\"Nombre moyen de tickets achetés par Type d'évènements\")\n",
|
||
"plt.xticks(rotation=45)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "e02b260a-fcb7-418b-87a8-de2bb4e6eb0a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_purchase.isna().sum()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "26fa888d-dd33-4990-89bd-6a9c1391098b",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Modelisation K-means"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 242,
|
||
"id": "daef46cd-f6a5-4282-ac0a-83fde277edec",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"df_purchase = df_purchase.fillna(0)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 243,
|
||
"id": "e34437e6-a57d-4d10-ac62-5c43cdda6892",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n",
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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8R1fREREJEFzc4M33jBvffrAo0dmG7Cwlcl++cXsnztzpnkDyJvXLGq9vc3ld//bKuDSJXNFtKgWjLCC5ReAtW/fnvbt20f53H8L1M2bN8d9IBEREZFEysPD7FMbEACDB8Pdu+ZobVhxe+AAHD9u3qJjGOYIcJcu8M47vPTFZS/L8uVsRURERMQayZJBtWowejTs2wfXr5tTC95999mvMwy4cAG2bYuXmM+kYlZEREREAPDxgTp1oEGDmO0fFBS3eWJCxayIiIiIRPD0RWCxsV9cUjErIiIiIhGUKWN2LYiuH63NBlmzmvtZTcWsiIiIiETg6mq234LIBW3Y4/Hjrb/4C1TMioiIiEgU6tY1229lzhxxe5YsCactFySA1lwiIiIikjDVrWu239q06QmrVx+ievUilC/vliBGZMOomBURERGRaLm6QkCAwb17lwgIKJygClnQNAMRERERcWAqZkVERETEYamYFRERERGHpWJWRERERByWilkRERERcVgqZkVERETEYamYFRERERGHpWJWRERERByWilkRERERcVgqZkVERETEYamYFRERERGHpWJWRERERByWilkRERERcVhuVgeIb4ZhAHD79m2LkyR+wcHB3L9/n9u3b+Pu7m51HIkHOufOSefd+eicO5/4PudhdVpY3fYsTlfM3rlzB4CsWbNanEREREREnuXOnTukTJnymfvYjJiUvIlIaGgoly9fJnny5NhsNqvjJGq3b98ma9asXLhwgRQpUlgdR+KBzrlz0nl3Pjrnzie+z7lhGNy5c4dMmTLh4vLsWbFONzLr4uJClixZrI7hVFKkSKG/7JyMzrlz0nl3Pjrnzic+z/nzRmTD6AIwEREREXFYKmZFRERExGGpmJU44+HhwcCBA/Hw8LA6isQTnXPnpPPufHTOnU9CPudOdwGYiIiIiCQeGpkVEREREYelYlZEREREHJaKWRERERFxWCpmRURERMRhqZiVWDdixAjeeOMNkidPTvr06Xn33Xc5ceKE1bEkHo0YMQKbzUaXLl2sjiJx6NKlSzRt2pQ0adLg7e1NkSJF2L9/v9WxJA49efKEzz77jBw5cuDl5UXOnDkZMmQIoaGhVkeTWLJ161Zq1apFpkyZsNlsLF++PMLzhmEwaNAgMmXKhJeXF+XKlePo0aPWhP1/KmYl1m3ZsoUOHTrwyy+/EBgY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y1K1alU+/fTTSM+5uLhgGEaEbcHBwZH2c3d3j/DYZrNFuS0mFyKF/eo7NDSUWrVqcejQoQi3P/74g7Jly4bvnzRp0uce8+njhjEMw67ODV5eXjHeF2L23Q0aNIijR49Ss2ZNNm7cSL58+Vi2bFm0xwwNDcXV1ZX9+/dH+E6OHz/OhAkTImT972ebNWsWu3btwt/fn8WLF5MnTx5++eWXKN8nTZo02Gy2KC8OzJUrF6+99hozZ86M9oK7v//+m3Tp0kX7OUTEcaiYFRGHMHLkSH766Sd27twZYXu6dOm4cuVKhKIsNvuoPl1MPXnyhP379/Paa68B8Prrr3P06FH8/Px45ZVXItxiWsACpEiRgkyZMkVqF7Vz507y5s0b4+Pkzp0bLy+vGLftSpcuHXfu3OHevXvh26L67vLkyUPXrl1Zt24ddevWZdasWYA5uhoSEhJh36JFixISEsLVq1cjfScZM2Z8bqaiRYvSt29fdu7cSYECBViwYEGU+yVJkoR8+fJx7NixSM+lTZuWjRs3curUKRo2bBipQD916hQPHz6kaNGiz80jIgmfilkRcQgFCxakSZMmkVoqlStXjmvXrjF69GhOnTrFpEmTWL16day976RJk1i2bBm///47HTp04ObNm7Rq1QqADh068Pfff9OoUSP27NnD6dOnWbduHa1atYpU5D1Pz549GTVqFIsXL+bEiRP06dOHQ4cO0blz5xgfw9PTk969e9OrVy/mzp3LqVOn+OWXX5gxY0aU+5coUQJvb28+/fRT/vzzTxYsWMDs2bPDn3/w4AEdO3Zk8+bNnDt3jh07drB3797wAtvPz4+7d++yYcMGrl+/zv3798mTJw9NmjShWbNmLF26lDNnzrB3715GjRrFqlWros1+5swZ+vbty65duzh37hzr1q3j5MmTzyzmq1atGm2/2PTp07Nx40Z+//13GjVqxJMnT8Kf27ZtGzlz5nzmdAkRcRwqZkXEYQwdOjTSr8Xz5s3L5MmTmTRpEoULF2bPnj3RXun/IkaOHMmoUaMoXLgw27Zt43//+x9p06YFIFOmTOzYsYOQkBCqVq1KgQIF6Ny5MylTpowwPzcmOnXqRPfu3enevTsFCxZkzZo1rFixgty5c9t1nP79+9O9e3cGDBhA3rx5adiwYaR5wGF8fHz47rvvWLVqFQULFmThwoURWn65urpy48YNmjVrRp48eWjQoAHVq1dn8ODBAPj7+9OuXTsaNmxIunTpGD16NGBOF2jWrBndu3fn1VdfpXbt2uzevZusWbNGm9vb25vff/+devXqkSdPHj788EM6duzIRx99FO1r2rZty6pVq7h161aUz2fMmJGNGzfy22+/0aRJk/B/YCxcuJC2bds+83sUEcdhM/77fwYREREH0aBBg/CpCTFx5MgRKlasyMmTJ0mZMmUcpxOR+KCRWRERcVhjxoyJsptEdC5fvszcuXNVyIokIhqZFRERERGHpZFZEREREXFYKmZFRERExGGpmBURERERh6ViVkREREQclopZEREREXFYKmZFRERExGGpmBURERERh6ViVkREREQclopZEREREXFY/wfr19eniXWGAwAAAABJRU5ErkJggg==",
|
||
"text/plain": [
|
||
"<Figure size 800x600 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.cluster import KMeans\n",
|
||
"from sklearn.preprocessing import StandardScaler\n",
|
||
"\n",
|
||
"columns_for_clustering = ['gender', 'is_partner', 'is_email_true', 'nb_campaigns', 'nb_campaigns_opened', 'fidelity', 'nb_tickets', 'ticket_sum', 'average_price', 'amount']\n",
|
||
"\n",
|
||
"scaler = StandardScaler()\n",
|
||
"X = scaler.fit_transform(df_purchase[columns_for_clustering])\n",
|
||
"\n",
|
||
"inertia = []\n",
|
||
"for i in range(1, 11):\n",
|
||
" kmeans = KMeans(n_clusters=i, random_state=42)\n",
|
||
" kmeans.fit(X)\n",
|
||
" inertia.append(kmeans.inertia_)\n",
|
||
"\n",
|
||
"# Plot the elbow curve to find the optimal k\n",
|
||
"plt.figure(figsize=(8, 6))\n",
|
||
"plt.plot(range(1, 11), inertia, marker='o', linestyle='-', color='b')\n",
|
||
"plt.xlabel('Number of clusters (k)')\n",
|
||
"plt.ylabel('Inertia (Within-cluster sum of squares)')\n",
|
||
"plt.title('Elbow Method for Optimal k')\n",
|
||
"plt.grid()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 246,
|
||
"id": "4da7d97e-9128-4e4a-a454-1451d2dfee40",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/opt/mamba/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
|
||
" super()._check_params_vs_input(X, default_n_init=10)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Cluster 1:\n",
|
||
"gender 0.893962\n",
|
||
"is_partner 0.000000\n",
|
||
"is_email_true 1.000000\n",
|
||
"nb_campaigns 231.270802\n",
|
||
"nb_campaigns_opened 99.261042\n",
|
||
"fidelity 30.193383\n",
|
||
"nb_tickets 10.965757\n",
|
||
"ticket_sum 2604.072622\n",
|
||
"average_price 9.781489\n",
|
||
"amount 16.114144\n",
|
||
"Name: 0, dtype: float64\n",
|
||
"Size: 6045\n",
|
||
"\n",
|
||
"Cluster 2:\n",
|
||
"gender 1.999420e+00\n",
|
||
"is_partner 0.000000e+00\n",
|
||
"is_email_true 9.998067e-01\n",
|
||
"nb_campaigns 1.048816e-02\n",
|
||
"nb_campaigns_opened 1.159981e-03\n",
|
||
"fidelity 3.305112e+05\n",
|
||
"nb_tickets 6.141087e+01\n",
|
||
"ticket_sum 1.253568e+06\n",
|
||
"average_price 7.031328e+00\n",
|
||
"amount 6.880643e+00\n",
|
||
"Name: 1, dtype: float64\n",
|
||
"Size: 20690\n",
|
||
"\n",
|
||
"Cluster 3:\n",
|
||
"gender 1.311996\n",
|
||
"is_partner 0.000000\n",
|
||
"is_email_true 0.982297\n",
|
||
"nb_campaigns 11.520089\n",
|
||
"nb_campaigns_opened 2.922872\n",
|
||
"fidelity 4.664367\n",
|
||
"nb_tickets 4.819549\n",
|
||
"ticket_sum 184.855712\n",
|
||
"average_price 9.696602\n",
|
||
"amount 11.980846\n",
|
||
"Name: 2, dtype: float64\n",
|
||
"Size: 101623\n",
|
||
"\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"k = 3 \n",
|
||
"\n",
|
||
"kmeans = KMeans(n_clusters=k, random_state=42)\n",
|
||
"df_purchase['cluster'] = kmeans.fit_predict(X)\n",
|
||
"\n",
|
||
"cluster_means = df_purchase.groupby('cluster')[columns_for_clustering].mean()\n",
|
||
"cluster_sizes = df_purchase['cluster'].value_counts()\n",
|
||
"\n",
|
||
"for cluster in range(k):\n",
|
||
" print(f\"Cluster {cluster + 1}:\")\n",
|
||
" print(cluster_means.loc[cluster])\n",
|
||
" print(f\"Size: {cluster_sizes[cluster]}\\n\")"
|
||
]
|
||
}
|
||
],
|
||
"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
|
||
}
|