diff --git a/Sport/Descriptive_statistics/generate_dataset_DS.py b/Sport/Descriptive_statistics/generate_dataset_DS.py deleted file mode 100644 index 889db77..0000000 --- a/Sport/Descriptive_statistics/generate_dataset_DS.py +++ /dev/null @@ -1,14 +0,0 @@ -import pandas as pd -import numpy as np -import os -import s3fs -import re -import warnings - -# Create filesystem object -S3_ENDPOINT_URL = "https://" + os.environ["AWS_S3_ENDPOINT"] -fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL}) - -# Ignore warning -warnings.filterwarnings('ignore') - diff --git a/Sport/Descriptive_statistics/stat_desc_sport.ipynb b/Sport/Descriptive_statistics/stat_desc_sport.ipynb new file mode 100644 index 0000000..87ded22 --- /dev/null +++ b/Sport/Descriptive_statistics/stat_desc_sport.ipynb @@ -0,0 +1,1239 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "dd143b00-1989-44cf-8558-a30087d17f70", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import os\n", + "import s3fs\n", + "import warnings\n", + "from datetime import date, timedelta, datetime\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "08c63120-1b56-4145-9014-18a637b22876", + "metadata": {}, + "outputs": [], + "source": [ + "exec(open('../../0_KPI_functions.py').read())" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f8bd679d-fa76-49d4-9ec1-9f15516f16d3", + "metadata": {}, + "outputs": [], + "source": [ + "# Ignore warning\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "markdown", + "id": "ec9e996d-3eae-4836-8cf5-268e5dc0d672", + "metadata": {}, + "source": [ + "# Statistiques descriptives : compagnies sport" + ] + }, + { + "cell_type": "markdown", + "id": "43f81515-fbd0-49c0-b3f8-0e0fb663e2c1", + "metadata": {}, + "source": [ + "## Importations et chargement des données" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "945c59bb-05b4-4f21-82f0-0db40d7957b3", + "metadata": {}, + "outputs": [], + "source": [ + "# Create filesystem object\n", + "S3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n", + "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL})" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "41a67995-0a08-45c0-bbad-6e6cee5474c8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File path : projet-bdc2324-team1/0_Input/Company_5/customerplus_cleaned.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_5/campaigns_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_5/products_purchased_reduced.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_5/target_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_6/customerplus_cleaned.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_6/campaigns_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_6/products_purchased_reduced.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_6/target_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_7/customerplus_cleaned.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_7/campaigns_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_7/products_purchased_reduced.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_7/target_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_8/customerplus_cleaned.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_8/campaigns_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_8/products_purchased_reduced.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_8/target_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_9/customerplus_cleaned.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_9/campaigns_information.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_9/products_purchased_reduced.csv\n", + "File path : projet-bdc2324-team1/0_Input/Company_9/target_information.csv\n" + ] + } + ], + "source": [ + "# création des bases contenant les KPI pour les 5 compagnies de spectacle\n", + "\n", + "# liste des compagnies de spectacle\n", + "nb_compagnie=['5','6','7','8','9']\n", + "\n", + "customer_sport = pd.DataFrame()\n", + "campaigns_sport = pd.DataFrame()\n", + "products_sport = pd.DataFrame()\n", + "tickets_sport = pd.DataFrame()\n", + "\n", + "# début de la boucle permettant de générer des datasets agrégés pour les 5 compagnies de spectacle\n", + "for directory_path in nb_compagnie:\n", + " df_customerplus_clean_0 = display_databases(directory_path, file_name = \"customerplus_cleaned\")\n", + " df_campaigns_information = display_databases(directory_path, file_name = \"campaigns_information\", datetime_col = ['opened_at', 'sent_at', 'campaign_sent_at'])\n", + " df_products_purchased_reduced = display_databases(directory_path, file_name = \"products_purchased_reduced\", datetime_col = ['purchase_date'])\n", + " df_target_information = display_databases(directory_path, file_name = \"target_information\")\n", + " \n", + " df_campaigns_kpi = campaigns_kpi_function(campaigns_information = df_campaigns_information) \n", + " df_tickets_kpi = tickets_kpi_function(tickets_information = df_products_purchased_reduced)\n", + " df_customerplus_clean = customerplus_kpi_function(customerplus_clean = df_customerplus_clean_0)\n", + "\n", + " \n", + "# creation de la colonne Number compagnie, qui permettra d'agréger les résultats\n", + " df_tickets_kpi[\"number_company\"]=int(directory_path)\n", + " df_campaigns_kpi[\"number_company\"]=int(directory_path)\n", + " df_customerplus_clean[\"number_company\"]=int(directory_path)\n", + " df_target_information[\"number_company\"]=int(directory_path)\n", + "\n", + "# Traitement des index\n", + " df_tickets_kpi[\"customer_id\"]= directory_path + '_' + df_tickets_kpi['customer_id'].astype('str')\n", + " df_campaigns_kpi[\"customer_id\"]= directory_path + '_' + df_campaigns_kpi['customer_id'].astype('str') \n", + " df_customerplus_clean[\"customer_id\"]= directory_path + '_' + df_customerplus_clean['customer_id'].astype('str') \n", + " df_products_purchased_reduced[\"customer_id\"]= directory_path + '_' + df_products_purchased_reduced['customer_id'].astype('str') \n", + "\n", + "# Concaténation\n", + " customer_sport = pd.concat([customer_sport, df_customerplus_clean], ignore_index=True)\n", + " campaigns_sport = pd.concat([campaigns_sport, df_campaigns_kpi], ignore_index=True)\n", + " tickets_sport = pd.concat([tickets_sport, df_tickets_kpi], ignore_index=True)\n", + " products_sport = pd.concat([products_sport, df_products_purchased_reduced], ignore_index=True)\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "62922029-8071-402e-8115-c145a2874a2f", + "metadata": {}, + "source": [ + "## Statistiques descriptives" + ] + }, + { + "cell_type": "markdown", + "id": "d347bca9-3041-4414-b18e-19b626998a3e", + "metadata": {}, + "source": [ + "### 0. Détection du client anonyme (outlier) - utile pour la section 3" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c4d4b2ad-8a3c-477b-bc52-dd4860527bfe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([5, 6, 7, 8, 9])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sport_comp = tickets_sport['number_company'].unique()\n", + "sport_comp" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "97a9e235-1c04-46bf-9f3c-5496e141cc40", + "metadata": {}, + "outputs": [], + "source": [ + "def outlier_detection(company_list, show_diagram=False):\n", + "\n", + " outlier_list = list()\n", + " \n", + " for company in company_list:\n", + " total_amount_share = tickets_sport[tickets_sport['number_company']==company].groupby('customer_id')['total_amount'].sum().reset_index()\n", + " total_amount_share['CA'] = total_amount_share['total_amount'].sum()\n", + " total_amount_share['share_total_amount'] = total_amount_share['total_amount']/total_amount_share['CA']\n", + " \n", + " total_amount_share_index = total_amount_share.set_index('customer_id')\n", + " df_circulaire = total_amount_share_index['total_amount'].sort_values(axis = 0, ascending = False)\n", + " top = df_circulaire[:1]\n", + " outlier_list.append(top.index[0])\n", + " rest = df_circulaire[1:]\n", + " \n", + " # Calculez la somme du reste\n", + " rest_sum = rest.sum()\n", + " \n", + " # Créez une nouvelle série avec les cinq plus grandes parts et 'Autre'\n", + " new_series = pd.concat([top, pd.Series([rest_sum], index=['Autre'])])\n", + " \n", + " # Créez le graphique circulaire\n", + " if show_diagram:\n", + " plt.figure(figsize=(3, 3))\n", + " plt.pie(new_series, labels=new_series.index, autopct='%1.1f%%', startangle=140, pctdistance=0.5)\n", + " plt.axis('equal') # Assurez-vous que le graphique est un cercle\n", + " plt.title(f'Répartition des montants totaux pour la compagnie {company}')\n", + " plt.show()\n", + " return outlier_list\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "770cd3fc-bfe2-4a69-89bc-0eb946311130", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['5_191835', '6_591412', '7_49632', '8_1942', '9_19683']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "outlier_list = outlier_detection(sport_comp)\n", + "outlier_list" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "70b6e961-c303-465e-93f4-609721d38454", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Suppression Réussie\n" + ] + } + ], + "source": [ + "# On filtre les outliers\n", + "\n", + "def remove_elements(lst, elements_to_remove):\n", + " return [x for x in lst if x not in elements_to_remove]\n", + " \n", + "databases = [customer_sport, campaigns_sport, tickets_sport, products_sport]\n", + "\n", + "for dataset in databases:\n", + " dataset['customer_id'] = dataset['customer_id'].apply(lambda x: remove_elements(x, outlier_list))\n", + "\n", + "# On test\n", + "\n", + "bool = '5_191835' in customer_sport['customer_id']\n", + "if not bool:\n", + " print(\"Suppression Réussie\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "b54b920a-7b46-490f-ba7e-d1859055a4e3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idstreet_idstructure_idmcp_contact_idfidelitytenant_idis_partnerdeleted_atgenderis_email_true...purchase_countfirst_buying_datecountrygender_labelgender_femalegender_malegender_othercountry_frhas_tagsnumber_company
0[5, _, 6, 0, 0, 9, 7, 4, 5]1372685NaNNaN01771FalseNaN2True...0NaNafother0010.005
1[5, _, 6, 0, 1, 1, 2, 2, 8]1372685NaNNaN01771FalseNaN2True...0NaNafother0010.005
2[5, _, 6, 0, 5, 8, 9, 5, 0]1372685NaNNaN01771FalseNaN2True...0NaNafother0010.005
3[5, _, 6, 0, 6, 2, 4, 0, 4]1372685NaNNaN01771FalseNaN2True...0NaNafother0010.005
4[5, _, 2, 5, 0, 2, 1, 7]78785NaN11035.001771FalseNaN0True...0NaNfrfemale1001.005
\n", + "

5 rows × 29 columns

\n", + "
" + ], + "text/plain": [ + " customer_id street_id structure_id mcp_contact_id \\\n", + "0 [5, _, 6, 0, 0, 9, 7, 4, 5] 1372685 NaN NaN \n", + "1 [5, _, 6, 0, 1, 1, 2, 2, 8] 1372685 NaN NaN \n", + "2 [5, _, 6, 0, 5, 8, 9, 5, 0] 1372685 NaN NaN \n", + "3 [5, _, 6, 0, 6, 2, 4, 0, 4] 1372685 NaN NaN \n", + "4 [5, _, 2, 5, 0, 2, 1, 7] 78785 NaN 11035.0 \n", + "\n", + " fidelity tenant_id is_partner deleted_at gender is_email_true ... \\\n", + "0 0 1771 False NaN 2 True ... \n", + "1 0 1771 False NaN 2 True ... \n", + "2 0 1771 False NaN 2 True ... \n", + "3 0 1771 False NaN 2 True ... \n", + "4 0 1771 False NaN 0 True ... \n", + "\n", + " purchase_count first_buying_date country gender_label gender_female \\\n", + "0 0 NaN af other 0 \n", + "1 0 NaN af other 0 \n", + "2 0 NaN af other 0 \n", + "3 0 NaN af other 0 \n", + "4 0 NaN fr female 1 \n", + "\n", + " gender_male gender_other country_fr has_tags number_company \n", + "0 0 1 0.0 0 5 \n", + "1 0 1 0.0 0 5 \n", + "2 0 1 0.0 0 5 \n", + "3 0 1 0.0 0 5 \n", + "4 0 0 1.0 0 5 \n", + "\n", + "[5 rows x 29 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customer_sport.head()" + ] + }, + { + "cell_type": "markdown", + "id": "d40fe668-e1d7-4544-9db8-02498afe65fe", + "metadata": {}, + "source": [ + "### 1. customerplus_clean" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "eec1ac0b-2502-452b-97e6-69ffb77156d6", + "metadata": {}, + "outputs": [], + "source": [ + "def compute_nb_clients(customer_sport):\n", + " company_nb_clients = customer_sport[customer_sport[\"purchase_count\"]>0].groupby(\"number_company\")[\"customer_id\"].count().reset_index()\n", + " plt.bar(company_nb_clients[\"number_company\"], company_nb_clients[\"customer_id\"]/1000)\n", + "\n", + " # Ajout de titres et d'étiquettes\n", + " plt.xlabel('Company')\n", + " plt.ylabel(\"Nombre de clients (milliers)\")\n", + " plt.title(\"Nombre de clients de chaque compagnie de spectacle\")\n", + " \n", + " # Affichage du barplot\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "db4494e7-6f65-4f7e-bf8c-8ec321d0b02d", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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UQsAAIDLOT2z88UXX6h9+/bavn27IiIi5OHh4bD8mWeecVlxAAAAmeV02ImNjdXq1au1aNGiNMuy+gDlkSNH6t///rfeeOMN+7V/jDEaMmSIJk2apLNnz6pGjRr69NNPVaFChSyrAwAA3Duc3o3Vo0cPtW3bVsePH1dKSorDLSuDzvr16zVp0qQ0p7aPHj1a48aN0yeffKL169crODhY9evX1/nz57OsFgAAcO9wOuycPn1avXr1UlBQUFbUk64LFy7oxRdf1Oeff658+fLZ240xGj9+vAYNGqTmzZsrIiJCU6dO1aVLlzRjxoy7Vh8AAMi+nA47zZs318qVK7Oillvq3r27GjVqpHr16jm079+/X3FxcWrQoIG9zcvLS5GRkYqNjb2rNQIAgOzJ6WN2SpcurYEDB2r16tWqWLFimgOUe/To4bLiJGnWrFnatGmT1q9fn2ZZXFycJKWZZQoKCtLBgwdvuc7ExEQlJiba7yckJLioWgAAkN3c0dlYuXPnVkxMjGJiYhyW2Ww2l4adw4cP64033tDSpUvl7e19y343X9jQGHPbix2OHDlSQ4YMcVmdAAAg+7qjiwreLRs3btSJEydUrVo1e1tycrJWrVqlTz75RLt375Z0fYanUKFC9j4nTpy47TFFAwcOVO/eve33ExISFBoamgXPALi/FB/wo7tLuGcceK+Ru0sA7ht3/EOgkuy/jZVVPxlRt25d/f777w5tHTt2VNmyZdW/f3+VKFFCwcHBWrZsmapUqSJJunr1qmJiYjRq1KhbrtfLy0teXl5ZUjMAAMhenD5AWZKmTZumihUrysfHRz4+PqpUqZK+/vprV9cmf39/RUREONz8/PwUGBioiIgI2Ww29ezZUyNGjNDcuXO1fft2dejQQb6+vmrTpo3L6wEAAPcep2d2xo0bp7fffluvvfaaatWqJWOMfv31V73yyis6deqUevXqlRV13lK/fv10+fJldevWzX5RwaVLl8rf3/+u1gEAALInp8POxx9/rAkTJqhdu3b2tqZNm6pChQqKjo7O8rDz888/O9y32WyKjo5WdHR0lm4XAADcm5zejXX8+HHVrFkzTXvNmjV1/PhxlxQFAADgKk6HnVKlSunbb79N0z579myFh4e7pCgAAABXcXo31pAhQ/T8889r1apVqlWrlmw2m1avXq3ly5enG4IAAADcyemZnRYtWmjt2rV64IEHNG/ePM2ZM0cPPPCA1q1bp2effTYragQAALhjd3SdnWrVqmn69OmurgUAAMDl7ug6OwAAAPeKDM/s5MiR4x+vlGyz2ZSUlJTpogAAAFwlw2Fn7ty5t1wWGxurjz/+2P7zEQAAANlFhsNO06ZN07T98ccfGjhwoObPn68XX3xR7777rkuLAwAAyKw7Ombn2LFj6tKliypVqqSkpCRt2bJFU6dOVdGiRV1dHwAAQKY4FXbi4+PVv39/lSpVSjt27NDy5cs1f/58RUREZFV9AAAAmZLh3VijR4/WqFGjFBwcrJkzZ6a7WwvILooP+NHdJdxTDrzXyN0lAECWyXDYGTBggHx8fFSqVClNnTpVU6dOTbffnDlzXFYcAABAZmU47LRr1+4fTz0HAADIbjIcdqZMmZKFZQAAAGQNrqAMAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsjbADAAAsLVuHnZEjR+qhhx6Sv7+/ChYsqGbNmmn37t0OfYwxio6OVkhIiHx8fFS7dm3t2LHDTRUDAIDsJluHnZiYGHXv3l2//fabli1bpqSkJDVo0EAXL1609xk9erTGjRunTz75ROvXr1dwcLDq16+v8+fPu7FyAACQXeRydwG3s3jxYof7kydPVsGCBbVx40Y98cQTMsZo/PjxGjRokJo3by5Jmjp1qoKCgjRjxgx17drVHWUDAIBsJFvP7NwsPj5ekpQ/f35J0v79+xUXF6cGDRrY+3h5eSkyMlKxsbG3XE9iYqISEhIcbgAAwJrumbBjjFHv3r312GOPKSIiQpIUFxcnSQoKCnLoGxQUZF+WnpEjRyogIMB+Cw0NzbrCAQCAW90zYee1117Ttm3bNHPmzDTLbDabw31jTJq2Gw0cOFDx8fH22+HDh11eLwAAyB6y9TE7qV5//XX98MMPWrVqlYoUKWJvDw4OlnR9hqdQoUL29hMnTqSZ7bmRl5eXvLy8sq5gAACQbWTrmR1jjF577TXNmTNHK1asUFhYmMPysLAwBQcHa9myZfa2q1evKiYmRjVr1rzb5QIAgGwoW8/sdO/eXTNmzND//vc/+fv724/DCQgIkI+Pj2w2m3r27KkRI0YoPDxc4eHhGjFihHx9fdWmTRs3Vw8AALKDbB12JkyYIEmqXbu2Q/vkyZPVoUMHSVK/fv10+fJldevWTWfPnlWNGjW0dOlS+fv73+VqAQBAdpStw44x5h/72Gw2RUdHKzo6OusLAgAA95xsfcwOAABAZhF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApRF2AACApVkm7Hz22WcKCwuTt7e3qlWrpl9++cXdJQEAgGzAEmFn9uzZ6tmzpwYNGqTNmzfr8ccfV1RUlA4dOuTu0gAAgJtZIuyMGzdOL730kjp37qxy5cpp/PjxCg0N1YQJE9xdGgAAcLN7PuxcvXpVGzduVIMGDRzaGzRooNjYWDdVBQAAsotc7i4gs06dOqXk5GQFBQU5tAcFBSkuLi7dxyQmJioxMdF+Pz4+XpKUkJDg8vpSEi+5fJ1W5qrXgHF3DuN+97ny+4ZxzzjG3T2y4u/rjes1xty23z0fdlLZbDaH+8aYNG2pRo4cqSFDhqRpDw0NzZLakHEB491dwf2Jcb/7GHP3YNzdI6vH/fz58woICLjl8ns+7DzwwAPKmTNnmlmcEydOpJntSTVw4ED17t3bfj8lJUVnzpxRYGDgLQOSlSQkJCg0NFSHDx9Wnjx53F3OfYNxdw/G3T0Yd/e438bdGKPz588rJCTktv3u+bDj6empatWqadmyZXr22Wft7cuWLVPTpk3TfYyXl5e8vLwc2vLmzZuVZWZLefLkuS8+DNkN4+4ejLt7MO7ucT+N++1mdFLd82FHknr37q22bduqevXqevTRRzVp0iQdOnRIr7zyirtLAwAAbmaJsPP888/r9OnTGjp0qI4fP66IiAgtXLhQxYoVc3dpAADAzSwRdiSpW7du6tatm7vLuCd4eXlp8ODBaXblIWsx7u7BuLsH4+4ejHv6bOafztcCAAC4h93zFxUEAAC4HcIOAACwNMIOAACwNMIOAACwNMLOfSQ6Olo2m83hFhwc7O6y7gtHjx7Vv/71LwUGBsrX11eVK1fWxo0b3V2WpRUvXjzN+91ms6l79+7uLs2ykpKS9NZbbyksLEw+Pj4qUaKEhg4dqpSUFHeXZnnnz59Xz549VaxYMfn4+KhmzZpav369u8vKNixz6jkypkKFCvrpp5/s93PmzOnGau4PZ8+eVa1atVSnTh0tWrRIBQsW1J9//nlfXrX7blq/fr2Sk5Pt97dv36769evrueeec2NV1jZq1ChNnDhRU6dOVYUKFbRhwwZ17NhRAQEBeuONN9xdnqV17txZ27dv19dff62QkBBNnz5d9erV086dO1W4cGF3l+d2nHp+H4mOjta8efO0ZcsWd5dyXxkwYIB+/fVX/fLLL+4u5b7Ws2dPLViwQHv37r0vfgPPHRo3bqygoCB9+eWX9rYWLVrI19dXX3/9tRsrs7bLly/L399f//vf/9SoUSN7e+XKldW4cWMNGzbMjdVlD+zGus/s3btXISEhCgsLU+vWrfXXX3+5uyTL++GHH1S9enU999xzKliwoKpUqaLPP//c3WXdV65evarp06erU6dOBJ0s9Nhjj2n58uXas2ePJGnr1q1avXq1nn76aTdXZm1JSUlKTk6Wt7e3Q7uPj49Wr17tpqqyF8LOfaRGjRqaNm2alixZos8//1xxcXGqWbOmTp8+7e7SLO2vv/7ShAkTFB4eriVLluiVV15Rjx49NG3aNHeXdt+YN2+ezp07pw4dOri7FEvr37+/XnjhBZUtW1YeHh6qUqWKevbsqRdeeMHdpVmav7+/Hn30Ub377rs6duyYkpOTNX36dK1du1bHjx93d3nZArux7mMXL15UyZIl1a9fP/Xu3dvd5ViWp6enqlevrtjYWHtbjx49tH79eq1Zs8aNld0/GjZsKE9PT82fP9/dpVjarFmz9Oabb2rMmDGqUKGCtmzZop49e2rcuHFq3769u8uztD///FOdOnXSqlWrlDNnTlWtWlWlS5fWpk2btHPnTneX53YcoHwf8/PzU8WKFbV37153l2JphQoVUvny5R3aypUrp++//95NFd1fDh48qJ9++klz5sxxdymW9+abb2rAgAFq3bq1JKlixYo6ePCgRo4cSdjJYiVLllRMTIwuXryohIQEFSpUSM8//7zCwsLcXVq2wG6s+1hiYqJ27dqlQoUKubsUS6tVq5Z2797t0LZnzx4VK1bMTRXdXyZPnqyCBQs6HLiJrHHp0iXlyOH4ZyVnzpycen4X+fn5qVChQjp79qyWLFmipk2burukbIGZnftI37591aRJExUtWlQnTpzQsGHDlJCQwP+4slivXr1Us2ZNjRgxQq1atdK6des0adIkTZo0yd2lWV5KSoomT56s9u3bK1cuvu6yWpMmTTR8+HAVLVpUFSpU0ObNmzVu3Dh16tTJ3aVZ3pIlS2SMUZkyZbRv3z69+eabKlOmjDp27Oju0rIHg/vG888/bwoVKmQ8PDxMSEiIad68udmxY4e7y7ovzJ8/30RERBgvLy9TtmxZM2nSJHeXdF9YsmSJkWR2797t7lLuCwkJCeaNN94wRYsWNd7e3qZEiRJm0KBBJjEx0d2lWd7s2bNNiRIljKenpwkODjbdu3c3586dc3dZ2QYHKAMAAEvjmB0AAGBphB0AAGBphB0AAGBphB0AAGBphB0AAGBphB0AAGBphB0AAGBphB0AAGBphB0Ad01cXJxef/11lShRQl5eXgoNDVWTJk20fPlyd5cGwML4sRgAd8WBAwdUq1Yt5c2bV6NHj1alSpV07do1LVmyRN27d9cff/zh7hIBWBQzOwDuim7duslms2ndunVq2bKlSpcurQoVKqh379767bffJEmHDh1S06ZNlTt3buXJk0etWrXS33//bV9HdHS0KleurK+++kpFixZV7ty59eqrryo5OVmjR49WcHCwChYsqOHDhzts22azacKECYqKipKPj4/CwsL03XffOfTp37+/SpcuLV9fX5UoUUJvv/22rl27lmbbX3/9tYoXL66AgAC1bt1a58+flyRNmzZNgYGBSkxMdFhvixYt1K5dO5eOJQDnEHYAZLkzZ85o8eLF6t69u/z8/NIsz5s3r4wxatasmc6cOaOYmBgtW7ZMf/75p55//nmHvn/++acWLVqkxYsXa+bMmfrqq6/UqFEjHTlyRDExMRo1apTeeuste4BK9fbbb6tFixbaunWr/vWvf+mFF17Qrl277Mv9/f01ZcoU7dy5Ux9++KE+//xzffDBB2m2PW/ePC1YsEALFixQTEyM3nvvPUnSc889p+TkZP3www/2/qdOndKCBQv45WnA3dz8Q6QA7gNr1641ksycOXNu2Wfp0qUmZ86c5tChQ/a2HTt2GElm3bp1xhhjBg8ebHx9fU1CQoK9T8OGDU3x4sVNcnKyva1MmTJm5MiR9vuSzCuvvOKwvRo1aphXX331lvWMHj3aVKtWzX4/vW2/+eabpkaNGvb7r776qomKirLfHz9+vClRooRJSUm55XYAZD2O2QGQ5Ywxkq7vTrqVXbt2KTQ0VKGhofa28uXLK2/evNq1a5ceeughSVLx4sXl7+9v7xMUFKScOXMqR44cDm0nTpxwWP+jjz6a5v6WLVvs9//73/9q/Pjx2rdvny5cuKCkpCTlyZPH4TE3b7tQoUIO2+nSpYseeughHT16VIULF9bkyZPVoUOH2z5vAFmP3VgAslx4eLhsNpvDbqObGWPSDQU3t3t4eDgst9ls6balpKT8Y12p6/3tt9/UunVrRUVFacGCBdq8ebMGDRqkq1evOvT/p+1UqVJFDz74oKZNm6ZNmzbp999/V4cOHf6xDgBZi7ADIMvlz59fDRs21KeffqqLFy+mWX7u3DmVL19ehw4d0uHDh+3tO3fuVHx8vMqVK5fpGm4+hue3335T2bJlJUm//vqrihUrpkGDBql69eoKDw/XwYMH72g7nTt31uTJk/XVV1+pXr16DjNVANyDsAPgrvjss8+UnJyshx9+WN9//7327t2rXbt26aOPPtKjjz6qevXqqVKlSnrxxRe1adMmrVu3Tu3atVNkZKSqV6+e6e1/9913+uqrr7Rnzx4NHjxY69at02uvvSZJKlWqlA4dOqRZs2bpzz//1EcffaS5c+fe0XZefPFFHT16VJ9//rk6deqU6boBZB5hB8BdERYWpk2bNqlOnTrq06ePIiIiVL9+fS1fvlwTJkyQzWbTvHnzlC9fPj3xxBOqV6+eSpQoodmzZ7tk+0OGDNGsWbNUqVIlTZ06Vd98843Kly8vSWratKl69eql1157TZUrV1ZsbKzefvvtO9pOnjx51KJFC+XOnVvNmjVzSe0AMsdmUo8cBACLstlsmjt37l0LH/Xr11e5cuX00Ucf3ZXtAbg9zsYCABc5c+aMli5dqhUrVuiTTz5xdzkA/j/CDgC4SNWqVXX27FmNGjVKZcqUcXc5AP4/dmMBAABL4wBlAABgaYQdAABgaYQdAABgaYQdAABgaYQdAABgaYQdAABgaYQdAABgaYQdAABgaYQdAABgaf8P7+5CE/p0lMoAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "compute_nb_clients(customer_sport)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "a12a59a0-edfe-4e52-8037-9b875f823b33", + "metadata": {}, + "outputs": [], + "source": [ + "def maximum_price_paid(customer_sport):\n", + " company_max_price = customer_sport.groupby(\"number_company\")[\"max_price\"].max().reset_index()\n", + " # Création du barplot\n", + " plt.bar(company_max_price[\"number_company\"], company_max_price[\"max_price\"])\n", + " \n", + " # Ajout de titres et d'étiquettes\n", + " plt.xlabel('Company')\n", + " plt.ylabel(\"Prix maximal d'un billet vendu\")\n", + " plt.title(\"Prix maximal de vente observé par compagnie de spectacle\")\n", + " \n", + " # Affichage du barplot\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "2c7c2d26-4e35-4163-b771-fa4d3e8ca83e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AA8eJyIioleK7AD1JAYnIiIiehXJPoj8xo0bCA0NhbOzMwwNDWFgYKD2ICIiInrZyR6BCg8PR0ZGBiZNmgQnJycoFIrKqIuIiIhIb8kOUAcOHMD+/fvRrFmzSiiHiIiISP/J3oXn4uICIURl1EJERERUJcgOUIsWLcKECRNw+fLlSiiHiIiISP/J3oXXv39/3L9/H/Xq1YOZmRmMjIzUpt++fVtrxRERERHpI9kBatGiRZVQBhEREVHVITtAhYWFVUYdRERERFWG7GOgAODixYv47LPPMHDgQNy8eRMAsH37dpw+fVqrxRERERHpI9kBKjExEd7e3jh06BDi4uJQUFAAADh58iQmT56s9QKJiIiI9I3sADVhwgRMnz4dCQkJMDY2lto7deqEpKQkrRZHREREpI9kB6hTp06hd+/eZdrt7OyQk5OjlaKIiIiI9JnsAFWjRg1kZWWVaT9+/Dhq1aqllaKIiIiI9JnsABUSEoLx48cjOzsbCoUCJSUl+PPPPxEdHY133323MmokIiIi0iuyA9SMGTNQp04d1KpVCwUFBfD09MQbb7wBX19ffPbZZ5VRIxEREZFekX0dKCMjI6xduxbTpk3D8ePHUVJSgubNm6NBgwaVUR8RERGR3pEdoBITE+Hn54d69eqhXr16lVETERERkV6TvQvP398fderUwYQJE5CamloZNRERERHpNdkB6vr16xg3bhz279+PJk2aoEmTJpg7dy6uXr1aGfURERER6R3ZAapmzZoYPXo0/vzzT1y8eBH9+/fHqlWr4Obmhs6dO1dGjURERER65bnuhVfK3d0dEyZMwOzZs+Ht7Y3ExERt1UVERESkt547QP35558YOXIknJycEBISgsaNG2PLli3arI2IiIhIL8k+C+8///kP1q1bh+vXr6Nr165YtGgRevXqBTMzs8qoj4iIiEjvyA5Q+/btQ3R0NPr374+aNWtWRk1EREREek12gDp48GBl1EFERERUZbzQQeREREREryIGKCIiIiKZGKCIiIiIZGKAIiIiIpJJdoCqW7cucnJyyrTfuXMHdevW1UpRRERERPpMdoC6fPkyVCpVmfbCwkJcu3ZNK0URERER6TONL2OwadMm6ecdO3ZAqVRKz1UqFXbv3g03NzetFkdERESkjzQOUL169QIAKBQKhIWFqU0zMjKCm5sbvvzyS60WR0RE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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "maximum_price_paid(customer_sport)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "597d4361-8beb-43f4-9224-8f7dc34b187c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Statistiques Descriptives company 5\n", + " average_price average_price_basket average_ticket_basket \\\n", + "count 145390.000000 68869.000000 68869.000000 \n", + "mean 11.070309 65.969693 3.655202 \n", + "std 16.353610 195.462869 13.119612 \n", + "min 0.000000 0.000000 1.000000 \n", + "25% 0.000000 20.000000 1.000000 \n", + "50% 0.000000 45.000000 2.000000 \n", + "75% 20.000000 79.500000 3.000000 \n", + "max 500.000000 24159.405000 2139.833333 \n", + "\n", + " purchase_count total_price \n", + "count 471598.00000 3.950770e+05 \n", + "mean 0.29900 2.608544e+01 \n", + "std 7.22753 2.089636e+03 \n", + "min 0.00000 0.000000e+00 \n", + "25% 0.00000 0.000000e+00 \n", + "50% 0.00000 0.000000e+00 \n", + "75% 0.00000 0.000000e+00 \n", + "max 3532.00000 1.262516e+06 \n", + "Statistiques Descriptives company 6\n", + " average_price average_price_basket average_ticket_basket \\\n", + "count 33779.000000 33779.000000 33779.000000 \n", + "mean 24.033859 56.711279 2.413530 \n", + "std 21.217031 72.841926 3.763809 \n", + "min -52.740000 -1046.666667 1.000000 \n", + "25% 10.000000 19.000000 1.080000 \n", + "50% 19.333333 39.000000 2.000000 \n", + "75% 30.000000 72.990000 3.000000 \n", + "max 199.990000 3922.845361 309.047619 \n", + "\n", + " purchase_count total_price \n", + "count 79938.000000 79938.000000 \n", + "mean 2.842090 102.251041 \n", + "std 74.949889 4290.159858 \n", + "min 0.000000 -3140.000000 \n", + "25% 0.000000 0.000000 \n", + "50% 0.000000 0.000000 \n", + "75% 1.000000 54.980000 \n", + "max 14750.000000 762695.290000 \n", + "Statistiques Descriptives company 7\n", + " average_price average_price_basket average_ticket_basket \\\n", + "count 39524.000000 39524.000000 39524.000000 \n", + "mean 33.110568 155.618778 3.365885 \n", + "std 85.221328 1085.613137 6.283143 \n", + "min 0.000000 0.000000 1.000000 \n", + "25% 17.250000 25.000000 1.800000 \n", + "50% 25.000000 57.676364 2.000000 \n", + "75% 43.054691 115.837500 3.555556 \n", + "max 10770.000000 86160.000000 400.000000 \n", + "\n", + " purchase_count total_price \n", + "count 68800.000000 68800.000000 \n", + "mean 3.290029 944.593729 \n", + "std 88.071870 12118.394731 \n", + "min 0.000000 0.000000 \n", + "25% 0.000000 0.000000 \n", + "50% 1.000000 9.000000 \n", + "75% 2.000000 132.000000 \n", + "max 22934.000000 940874.200000 \n", + "Statistiques Descriptives company 8\n", + " average_price average_price_basket average_ticket_basket \\\n", + "count 129198.000000 129198.000000 129198.000000 \n", + "mean 18.409977 38.492520 2.258036 \n", + "std 19.159059 71.136628 5.270858 \n", + "min -20.000000 -1545.000000 1.000000 \n", + "25% 0.000000 0.000000 1.000000 \n", + "50% 15.000000 20.000000 2.000000 \n", + "75% 28.461538 52.500000 2.000000 \n", + "max 390.000000 7618.227273 750.000000 \n", + "\n", + " purchase_count total_price \n", + "count 197376.000000 197376.000000 \n", + "mean 4.637448 130.336075 \n", + "std 96.228665 2791.899946 \n", + "min 0.000000 -36124.000000 \n", + "25% 0.000000 0.000000 \n", + "50% 1.000000 0.000000 \n", + "75% 2.000000 75.000000 \n", + "max 40272.000000 702080.290000 \n", + "Statistiques Descriptives company 9\n", + " average_price average_price_basket average_ticket_basket \\\n", + "count 102710.000000 102710.000000 102710.000000 \n", + "mean 60.312171 62.384177 1.042402 \n", + "std 50.018101 52.009984 0.268064 \n", + "min -291.670000 -291.670000 1.000000 \n", + "25% 41.500000 42.350000 1.000000 \n", + "50% 59.000000 61.070000 1.000000 \n", + "75% 74.550000 77.710000 1.000000 \n", + "max 1116.500000 1216.950000 23.000000 \n", + "\n", + " purchase_count total_price \n", + "count 181134.000000 181134.000000 \n", + "mean 1.021354 63.476966 \n", + "std 1.805412 129.781944 \n", + "min 0.000000 -291.670000 \n", + "25% 0.000000 0.000000 \n", + "50% 1.000000 0.000000 \n", + "75% 1.000000 80.000000 \n", + "max 273.000000 14343.950000 \n" + ] + } + ], + "source": [ + "for company in sport_comp:\n", + " print(f'Statistiques Descriptives company {company}')\n", + " company_data = customer_sport[customer_sport['number_company'] == company][['average_price', 'average_price_basket',\n", + " 'average_ticket_basket', 'purchase_count', 'total_price']]\n", + " print(company_data.describe())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5058d3c9-73a0-4e01-881e-4d2423f0d291", + "metadata": {}, + "outputs": [], + "source": [ + "customer_sport[\"already_purchased\"] = customer_sport[\"purchase_count\"] > 0" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "986a0e41-ae31-46c5-a009-861530d85f45", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idstreet_idstructure_idmcp_contact_idfidelitytenant_idis_partnerdeleted_atgenderis_email_true...purchase_countfirst_buying_datecountrygender_labelgender_femalegender_malegender_othercountry_frhas_tagsnumber_company
0[5, _, 6, 0, 0, 9, 7, 4, 5]1372685NaNNaN01771FalseNaN2True...0NaNafother0010.005
1[5, _, 6, 0, 1, 1, 2, 2, 8]1372685NaNNaN01771FalseNaN2True...0NaNafother0010.005
2[5, _, 6, 0, 5, 8, 9, 5, 0]1372685NaNNaN01771FalseNaN2True...0NaNafother0010.005
3[5, _, 6, 0, 6, 2, 4, 0, 4]1372685NaNNaN01771FalseNaN2True...0NaNafother0010.005
4[5, _, 2, 5, 0, 2, 1, 7]78785NaN11035.001771FalseNaN0True...0NaNfrfemale1001.005
..................................................................
998841[9, _, 9, 9, 5, 1, 4, 6]607676NaNNaN11490FalseNaN1True...12022-05-12 06:20:49+00:00NaNmale010NaN09
998842[9, _, 9, 7, 0, 8, 9, 1]587855NaNNaN11490FalseNaN1True...12022-05-03 04:20:43+00:00frmale0101.009
998843[9, _, 8, 4, 4, 3, 0, 2]484177NaNNaN11490FalseNaN1True...12022-03-27 12:15:02+00:00demale0100.009
998844[9, _, 9, 4, 1, 2, 6, 0]564032NaNNaN11490FalseNaN1True...12022-04-20 15:12:38+00:00chmale0100.009
998845[9, _, 8, 0, 9, 7, 4, 2]453747NaNNaN11490FalseNaN1True...12022-03-07 20:42:07+00:00frmale0101.009
\n", + "

998846 rows × 29 columns

\n", + "
" + ], + "text/plain": [ + " customer_id street_id structure_id mcp_contact_id \\\n", + "0 [5, _, 6, 0, 0, 9, 7, 4, 5] 1372685 NaN NaN \n", + "1 [5, _, 6, 0, 1, 1, 2, 2, 8] 1372685 NaN NaN \n", + "2 [5, _, 6, 0, 5, 8, 9, 5, 0] 1372685 NaN NaN \n", + "3 [5, _, 6, 0, 6, 2, 4, 0, 4] 1372685 NaN NaN \n", + "4 [5, _, 2, 5, 0, 2, 1, 7] 78785 NaN 11035.0 \n", + "... ... ... ... ... \n", + "998841 [9, _, 9, 9, 5, 1, 4, 6] 607676 NaN NaN \n", + "998842 [9, _, 9, 7, 0, 8, 9, 1] 587855 NaN NaN \n", + "998843 [9, _, 8, 4, 4, 3, 0, 2] 484177 NaN NaN \n", + "998844 [9, _, 9, 4, 1, 2, 6, 0] 564032 NaN NaN \n", + "998845 [9, _, 8, 0, 9, 7, 4, 2] 453747 NaN NaN \n", + "\n", + " fidelity tenant_id is_partner deleted_at gender is_email_true \\\n", + "0 0 1771 False NaN 2 True \n", + "1 0 1771 False NaN 2 True \n", + "2 0 1771 False NaN 2 True \n", + "3 0 1771 False NaN 2 True \n", + "4 0 1771 False NaN 0 True \n", + "... ... ... ... ... ... ... \n", + "998841 1 1490 False NaN 1 True \n", + "998842 1 1490 False NaN 1 True \n", + "998843 1 1490 False NaN 1 True \n", + "998844 1 1490 False NaN 1 True \n", + "998845 1 1490 False NaN 1 True \n", + "\n", + " ... purchase_count first_buying_date country gender_label \\\n", + "0 ... 0 NaN af other \n", + "1 ... 0 NaN af other \n", + "2 ... 0 NaN af other \n", + "3 ... 0 NaN af other \n", + "4 ... 0 NaN fr female \n", + "... ... ... ... ... ... \n", + "998841 ... 1 2022-05-12 06:20:49+00:00 NaN male \n", + "998842 ... 1 2022-05-03 04:20:43+00:00 fr male \n", + "998843 ... 1 2022-03-27 12:15:02+00:00 de male \n", + "998844 ... 1 2022-04-20 15:12:38+00:00 ch male \n", + "998845 ... 1 2022-03-07 20:42:07+00:00 fr male \n", + "\n", + " gender_female gender_male gender_other country_fr has_tags \\\n", + "0 0 0 1 0.0 0 \n", + "1 0 0 1 0.0 0 \n", + "2 0 0 1 0.0 0 \n", + "3 0 0 1 0.0 0 \n", + "4 1 0 0 1.0 0 \n", + "... ... ... ... ... ... \n", + "998841 0 1 0 NaN 0 \n", + "998842 0 1 0 1.0 0 \n", + "998843 0 1 0 0.0 0 \n", + "998844 0 1 0 0.0 0 \n", + "998845 0 1 0 1.0 0 \n", + "\n", + " number_company \n", + "0 5 \n", + "1 5 \n", + "2 5 \n", + "3 5 \n", + "4 5 \n", + "... ... \n", + "998841 9 \n", + "998842 9 \n", + "998843 9 \n", + "998844 9 \n", + "998845 9 \n", + "\n", + "[998846 rows x 29 columns]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customer_sport" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "848963c9-6129-4106-80b5-76bf814b70d1", + "metadata": {}, + "outputs": [], + "source": [ + "def mailing_consent(customer_sport):\n", + " df_graph = customer_sport.groupby([\"number_company\", \"already_purchased\"])[\"opt_in\"].mean().reset_index()\n", + " # Création du barplot groupé\n", + " fig, ax = plt.subplots(figsize=(10, 6))\n", + " \n", + " categories = df_graph[\"number_company\"].unique()\n", + " bar_width = 0.35\n", + " bar_positions = np.arange(len(categories))\n", + " \n", + " # Grouper les données par label et créer les barres groupées\n", + " for label in df_graph[\"already_purchased\"].unique():\n", + " label_data = df_graph[df_graph['already_purchased'] == label]\n", + " values = [label_data[label_data['number_company'] == category]['opt_in'].values[0]*100 for category in categories]\n", + " \n", + " label_printed = \"purchased\" if label else \"no purchase\"\n", + " ax.bar(bar_positions, values, bar_width, label=label_printed)\n", + " \n", + " # Mise à jour des positions des barres pour le prochain groupe\n", + " bar_positions = [pos + bar_width for pos in bar_positions]\n", + " \n", + " # Ajout des étiquettes, de la légende, etc.\n", + " ax.set_xlabel('Numero de compagnie')\n", + " ax.set_ylabel('Part de consentement (%)')\n", + " ax.set_title('Part de consentement au mailing selon les compagnies')\n", + " ax.set_xticks([pos + bar_width / 2 for pos in np.arange(len(categories))])\n", + " ax.set_xticklabels(categories)\n", + " ax.legend()\n", + " \n", + " # Affichage du plot\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8071891-e6f5-4d93-b039-9e99c20ec4b0", + "metadata": {}, + "outputs": [], + "source": [ + "def gender_bar(customer_sport):\n", + " company_genders = customer_sport.groupby(\"number_company\")[[\"gender_male\", \"gender_female\", \"gender_other\"]].mean().reset_index()\n", + " # Création du barplot\n", + " plt.bar(company_genders[\"number_company\"], company_genders[\"gender_male\"], label = \"Homme\")\n", + " plt.bar(company_genders[\"number_company\"], company_genders[\"gender_female\"], \n", + " bottom = company_genders[\"gender_male\"], label = \"Femme\")\n", + " \n", + " \n", + " # Ajout de titres et d'étiquettes\n", + " plt.xlabel('Company')\n", + " plt.ylabel(\"Part de clients de chaque sexe\")\n", + " plt.title(\"Sexe des clients de chaque compagnie de spectacle\")\n", + " plt.legend()\n", + " \n", + " # Affichage du barplot\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2fc30f1d-cf64-4efb-9442-4d97bb50b29f", + "metadata": {}, + "outputs": [], + "source": [ + "gender_bar()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4b3bb641-814b-4679-9a67-4eca87a920a6", + "metadata": {}, + "outputs": [], + "source": [ + "def country_bar(customer_sport):\n", + " company_country_fr = customer_sport.groupby(\"number_compagny\")[\"country_fr\"].mean().reset_index()\n", + " # Création du barplot\n", + " plt.bar(company_country_fr[\"number_company\"], company_country_fr[\"country_fr\"])\n", + " \n", + " # Ajout de titres et d'étiquettes\n", + " plt.xlabel('Company')\n", + " plt.ylabel(\"Part de clients français\")\n", + " plt.title(\"Nationalité des clients de chaque compagnie de spectacle\")\n", + " \n", + " # Affichage du barplot\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01258674-6b98-49e4-93f4-f4185964999f", + "metadata": {}, + "outputs": [], + "source": [ + "country_bar()" + ] + } + ], + "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.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}