diff --git a/Sport/Descriptive_statistics/stat_desc_sport.ipynb b/Sport/Descriptive_statistics/stat_desc_sport.ipynb index f48a127..0745887 100644 --- a/Sport/Descriptive_statistics/stat_desc_sport.ipynb +++ b/Sport/Descriptive_statistics/stat_desc_sport.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 6, + "execution_count": 50, "id": "dd143b00-1989-44cf-8558-a30087d17f70", "metadata": {}, "outputs": [], @@ -13,7 +13,8 @@ "import warnings\n", "from datetime import date, timedelta, datetime\n", "import numpy as np\n", - "import matplotlib.pyplot as plt" + "import matplotlib.pyplot as plt\n", + "import matplotlib.dates as mdates\n" ] }, { @@ -55,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "id": "945c59bb-05b4-4f21-82f0-0db40d7957b3", "metadata": {}, "outputs": [], @@ -67,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 43, "id": "41a67995-0a08-45c0-bbad-6e6cee5474c8", "metadata": {}, "outputs": [ @@ -105,14 +106,15 @@ "nb_compagnie=['5','6','7','8','9']\n", "\n", "customer_sport = pd.DataFrame()\n", - "campaigns_sport = pd.DataFrame()\n", + "campaigns_sport_brut = pd.DataFrame()\n", + "campaigns_sport_kpi = 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_campaigns_brut = 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", @@ -123,19 +125,22 @@ " \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_brut[\"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_brut[\"customer_id\"]= directory_path + '_' + df_campaigns_brut['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", + " campaigns_sport_kpi = pd.concat([campaigns_sport_kpi, df_campaigns_kpi], ignore_index=True)\n", + " campaigns_sport_brut = pd.concat([campaigns_sport_brut, df_campaigns_brut], 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", " " @@ -580,6 +585,32 @@ "maximum_price_paid(customer_sport)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "90e050a5-2561-49d9-8ad8-877bdb368ed1", + "metadata": {}, + "outputs": [], + "source": [ + "#def sale_canal(customer_sport)\n", + " # avg_supp_event = customer_sport['nb_suppliers'].mean()\n", + " # avg_supp_event.plot(kind='bar')\n", + " # plt.xlabel(\"Type d'évènement\")\n", + " #plt.ylabel('Nombre de Canaux de Ventes Moyen')\n", + " #plt.title(\"Nombre de Canaux de Ventes Moyen utilisé par les Consommateurs par type d'évènement\")\n", + " #plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aa4974b5-637e-43e6-86c4-ee7a3adb89d0", + "metadata": {}, + "outputs": [], + "source": [ + "# Nombre Total de tickets achetés sur Internet par compagnie" + ] + }, { "cell_type": "code", "execution_count": 15, @@ -859,6 +890,35 @@ "country_bar(customer_sport)" ] }, + { + "cell_type": "code", + "execution_count": 33, + "id": "1336c230-2e02-4559-90ac-a43bbb65b1c6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['customer_id', 'street_id', 'structure_id', 'mcp_contact_id',\n", + " 'fidelity', 'tenant_id', 'is_partner', 'deleted_at', 'gender',\n", + " 'is_email_true', 'opt_in', 'last_buying_date', 'max_price',\n", + " 'ticket_sum', 'average_price', 'average_purchase_delay',\n", + " 'average_price_basket', 'average_ticket_basket', 'total_price',\n", + " 'purchase_count', 'first_buying_date', 'country', 'gender_label',\n", + " 'gender_female', 'gender_male', 'gender_other', 'country_fr',\n", + " 'number_company', 'already_purchased'],\n", + " dtype='object')" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customer_sport.columns" + ] + }, { "cell_type": "markdown", "id": "43d63ea3-75f4-4356-a7e9-35905d86baa5", @@ -908,11 +968,8 @@ "metadata": {}, "outputs": [], "source": [ - "campaigns_sport[\"no_campaign_opened\"] = pd.isna(campaigns_sport[\"time_to_open\"])\n", - "company_lazy_customers = campaigns_sport.groupby(\"number_company\")[\"no_campaign_opened\"].mean().reset_index()\n", - "\n", - "def lazy_customer_plot(campaigns_sport):\n", - " company_lazy_customers = campaigns_sport.groupby(\"number_company\")[\"no_campaign_opened\"].mean().reset_index()\n", + "def lazy_customer_plot(campaigns_sport_kpi):\n", + " company_lazy_customers = campaigns_sport_kpi.groupby(\"number_company\")[\"no_campaign_opened\"].mean().reset_index()\n", " # Création du barplot\n", " plt.bar(company_lazy_customers[\"number_company\"], company_lazy_customers[\"no_campaign_opened\"])\n", " \n", @@ -943,58 +1000,98 @@ } ], "source": [ - "lazy_customer_plot(campaigns_sport)" + "lazy_customer_plot(campaigns_sport_kpi)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "038423ec-d095-4297-8ea8-42d205da510b", + "execution_count": 31, + "id": "1b7ac0f0-903e-45ae-8f44-dc37ed36eafc", "metadata": {}, "outputs": [], "source": [ - "def " + "def campaigns_effectiveness(customer_sport, Train=False):\n", + " if not Train:\n", + " customer_sport[\"already_purchased\"] = customer_sport[\"purchase_count\"]>0\n", + "\n", + " nb_customers_purchasing = customer_sport[customer_sport[\"already_purchased\"]].groupby([\"number_company\",\"already_purchased\"])[\"customer_id\"].count().reset_index()\n", + " nb_customers_no_purchase = customer_sport[~customer_sport[\"already_purchased\"]].groupby([\"number_company\",\"already_purchased\"])[\"customer_id\"].count().reset_index()\n", + "\n", + " plt.bar(nb_customers_purchasing[\"number_company\"], nb_customers_purchasing[\"customer_id\"]/1000, label = \"has purchased\")\n", + " plt.bar(nb_customers_no_purchase[\"number_company\"], nb_customers_no_purchase[\"customer_id\"]/1000, \n", + " bottom = nb_customers_purchasing[\"customer_id\"]/1000, label = \"has not purchased\")\n", + " \n", + " \n", + " # Ajout de titres et d'étiquettes\n", + " plt.xlabel('Company')\n", + " plt.ylabel(\"Nombre de clients (en milliers)\")\n", + " plt.title(\"Nombre de clients ayant acheté ou été ciblés par des mails pour les compagnies de sport\")\n", + " plt.legend()\n", + " \n", + " # Affichage du barplot\n", + " plt.show()" ] }, { "cell_type": "code", - "execution_count": 16, - "id": "264dd0f3-721b-4ddb-9e7c-0d21c6c0ddeb", - "metadata": {}, - "outputs": [], - "source": [ - "def display_databases(directory_path, file_name):\n", - " \"\"\"\n", - " This function returns the file from s3 storage \n", - " \"\"\"\n", - " file_path = \"projet-bdc2324-team1\" + \"/Generalization/\" + directory_path + \"/\" + file_name + \".csv\"\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", - " return df " - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "f0cfdd97-5ba2-4209-b827-d10ef0e80262", + "execution_count": 32, + "id": "3e05edab-fb8a-423b-b0ae-94e36eeeb3cd", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "File path : projet-bdc2324-team1/Generalization/musique/Test_set.csv\n" - ] - }, + "data": { + "image/png": "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3t6eT9wlIiIiogKNLQH5dOvWrTzVv3v37keKhIiIiIhIPUwC8umLL75Ajx49cOLEiRzrJCUlYf78+fDy8sKGDRs+YXRERERERKrYHSifLl26hHHjxqF+/frQ09ODv78/HB0dYWhoiCdPnuDixYu4cOEC/P39MXHiRAQHB8sdMhERERFpOT4nQENSU1Oxbds26Sm/L1++RNGiReHn54d69erBy8tL7hA/CJ8TUIDwOQFERKQmPieA3octARpiaGiIZs2aoVmzZnKHQkRERESUK94TQERERESkZZgEEBERERFpGSYBRERERERahkkAEREREZGWYRJARERERKRlmARo0JIlS/DXX39Jr8PCwmBpaYlq1arh5s2bMkZGRERERPQfJgEaNG7cOBgZGQEAjh49ilmzZmHChAkoWrQoBg4cKHN0RERERERv8DkBGnT79m2ULl0aALBp0ya0aNECPXv2REBAAGrWrClvcERERERE/48tARpkamqKR48eAQB27dqFwMBAAG8eJPby5Us5QyMiIiIikrAlQIOCgoLQvXt3+Pn54e+//0bDhg0BABcuXICrq6u8wRERERER/T+2BGjQb7/9hqpVq+LBgwdYv349bGxsAACnTp1C27ZtZY6OiIiIiOgNtgRoUHJyMmbMmIEiRZRzq4iICNy+fVumqIiIiIiIlLElQIPc3Nzw8OFDlfLHjx/Dzc1NhoiIiIiIiFQxCdAgIUS25c+fP4ehoeEnjoaIiIiIKHvsDqQBgwYNAgAoFAqMGDECxsbG0rSMjAwcP34cvr6+MkVHRERERKSMSYAGnD59GsCbloBz585BX19fmqavr48KFSpg8ODBcoVHRERERKSESYAG7N+/HwDQpUsXTJ8+Hebm5jJHRERERESUMyYBGrRo0SK5QyAiIiIiei8mARqUkpKCX3/9FXv37kViYiIyMzOVpl+/fl2myIiIiIiI/sMkQIO6d++OqKgodOjQAQ4ODlAoFHKHRERERESkgkmABm3fvh1//fUXAgIC5A6FiIiIiChHfE6ABllZWcHa2lruMIiIiIiIcsUkQINGjx6NESNG4MWLF3KHQkRERESUI3YH0qDJkyfjn3/+gZ2dHVxdXaGnp6c0PTY2VqbIiIiIiIj+wyRAg5o2bSp3CERERERE78UkQIPCw8PlDoGIiIiI6L14T4CGPX36FAsWLMDQoUPx+PFjAG+6Ad29e1fmyIiIiIiI3mBLgAadPXsWgYGBsLCwwI0bN9CjRw9YW1tj48aNuHnzJpYuXSp3iEREREREbAnQpEGDBqFz5864evUqDA0NpfLg4GAcPHhQxsiIiIiIiP7DJECDYmJi8P3336uUOzk5ISEhQYaIiIiIiIhUMQnQIENDQyQnJ6uUX7lyBba2tjJERERERESkikmABjVp0gSjRo3C69evAQAKhQK3bt3CTz/9hObNm8scHRERERHRG0wCNGjSpEl48OABihUrhpcvX6JGjRooXbo0zMzMMHbsWLnDIyIiIiICwNGBNMrc3ByHDx/Gvn37EBsbi8zMTFSsWBGBgYFyh0ZEREREJGES8BHUrl0btWvXljsMIiIiIqJsMQnIpxkzZqBnz54wNDTEjBkzcq07YMCATxQVEREREVHOFEIIIXcQnzM3NzecPHkSNjY2cHNzy7GeQqHA9evXP2FkmpGcnAwLCwskJSXB3NxcszOPsNDs/Aq7iCS5IyAios/ERz1/U6HAloB8io+Pz/b/REREREQFFUcHIiIiIiLSMmwJyKdBgwapXXfKlCkfMRIiIiIiIvUwCcin06dPq1VPoVB85EiIiIiIiNTDJCCf9u/fL3cIRERERER5wnsCNCgpKQmPHz9WKX/8+DGSk5NliIiIiIiISBWTAA1q06YNVq9erVK+du1atGnTRoaIiIiIiIhUMQnQoOPHj6NWrVoq5TVr1sTx48dliIiIiIiISBWTAA1KS0tDenq6Svnr16/x8uVLGSIiIiIiIlLFJECDvvjiC8ybN0+lfO7cuahUqZIMERERERERqeLoQBo0duxYBAYG4syZM6hTpw4AYO/evYiJicGuXbtkjo6IiIiI6A22BGhQQEAAjh49CmdnZ6xduxZbtmxB6dKlcfbsWXz99ddyh0dEREREBIAtARrn6+uLFStWyB0GEREREVGO2BJARERERKRlmAQQEREREWkZJgFERERERFqGSQARERERkZZhEvARXLt2DTt37pQeECaEyPM8xo8fjy+++AJmZmYoVqwYmjZtiitXrijVEUIgIiICjo6OMDIyQs2aNXHhwgWlOmlpaejfvz+KFi0KExMTfPPNN7hz586HrxwRERERffaYBGjQo0ePEBgYCHd3dzRo0AD3798HAHTv3h2hoaF5mldUVBT69u2LY8eOYffu3UhPT0fdunWRkpIi1ZkwYQKmTJmCWbNmISYmBvb29ggKCsKzZ8+kOiEhIdi4cSNWr16Nw4cP4/nz52jUqBEyMjI0s9JERERE9NlhEqBBAwcOhK6uLm7dugVjY2OpvHXr1tixY0ee5rVjxw507twZ5cuXR4UKFbBo0SLcunULp06dAvCmFWDatGkYNmwYmjVrBi8vLyxZsgQvXrzAypUrAQBJSUn4/fffMXnyZAQGBsLPzw/Lly/HuXPnsGfPHs2tOBERERF9VpgEaNCuXbsQGRmJ4sWLK5WXKVMGN2/ezNe8k5KSAADW1tYAgPj4eCQkJKBu3bpSHQMDA9SoUQPR0dEAgFOnTuH169dKdRwdHeHl5SXVeVdaWhqSk5OV/oiIiIiocGESoEEpKSlKLQBZHj58CAMDgw+erxACgwYNwldffQUvLy8AQEJCAgDAzs5Oqa6dnZ00LSEhAfr6+rCyssqxzrvGjx8PCwsL6c/Z2fmD4yYiIiKigolJgAZVr14dS5culV4rFApkZmZi4sSJqFWr1gfPt1+/fjh79ixWrVqlMk2hUCi9FkKolL0rtzpDhw5FUlKS9Hf79u0PjpuIiIiICiZduQMoTCZOnIiaNWvi5MmTePXqFcLCwnDhwgU8fvwYR44c+aB59u/fH5s3b8bBgweVuhnZ29sDePNrv4ODg1SemJgotQ7Y29vj1atXePLkiVJrQGJiIqpVq5bt8gwMDPLVakFEVKBEWMgdwecjIknuCIjoE2JLgAaVK1cOZ8+eReXKlREUFISUlBQ0a9YMp0+fRqlSpfI0LyEE+vXrhw0bNmDfvn1wc3NTmu7m5gZ7e3vs3r1bKnv16hWioqKkC/xKlSpBT09Pqc79+/dx/vz5HJMAIiIiIir82BKgYfb29hg5cmS+59O3b1+sXLkSf/75J8zMzKQ+/BYWFjAyMoJCoUBISAjGjRuHMmXKoEyZMhg3bhyMjY3Rrl07qW63bt0QGhoKGxsbWFtbY/DgwfD29kZgYGC+YyQiIiKizxOTgHw6e/as2nV9fHzUrjtnzhwAQM2aNZXKFy1ahM6dOwMAwsLC8PLlS/Tp0wdPnjxBlSpVsGvXLpiZmUn1p06dCl1dXbRq1QovX75EnTp1sHjxYujo6KgdCxEREREVLgrxIY+zJUmRIkWgUChUbrbN2qxvl32OD+hKTk6GhYUFkpKSYG5urtmZs69u3rC/LlHe8TijPh5jCpWPev6mQoH3BORTfHw8rl+/jvj4eKxfvx5ubm6YPXs24uLiEBcXh9mzZ6NUqVJYv3693KESEREREQFgd6B8c3Fxkf7fsmVLzJgxAw0aNJDKfHx84OzsjOHDh6Np06YyREhEREREpIwtARp07tw5lVF8gDcj+Vy8eFGGiIiIiIiIVDEJ0CBPT0+MGTMGqampUllaWhrGjBkDT09PGSMjIiIiIvoPuwNp0Ny5c9G4cWM4OzujQoUKAIAzZ85AoVBg69atMkdHRERERPQGkwANqly5MuLj47F8+XJcvnwZQgi0bt0a7dq1g4mJidzhEREREREBYBKgccbGxujZs6fcYRARERER5Yj3BBARERERaRm2BBAREZFm8SFt6uND2kgmbAkgIiIiItIyTAKIiIiIiLQMkwANe/r0KRYsWIChQ4fi8ePHAIDY2FjcvXtX5siIiIiIiN7gPQEadPbsWQQGBsLCwgI3btxAjx49YG1tjY0bN+LmzZtYunSp3CESEREREbElQJMGDRqEzp074+rVqzA0NJTKg4ODcfDgQRkjIyIiIiL6D5MADYqJicH333+vUu7k5ISEhAQZIiIiIiIiUsUkQIMMDQ2RnJysUn7lyhXY2trKEBERERERkSomARrUpEkTjBo1Cq9fvwYAKBQK3Lp1Cz/99BOaN28uc3RERERERG8wCdCgSZMm4cGDByhWrBhevnyJGjVqoHTp0jAzM8PYsWPlDo+IiIiICABHB9Ioc3NzHD58GPv27UNsbCwyMzNRsWJFBAYGyh0aEREREZGESYCGpKenw9DQEHFxcahduzZq164td0hERERERNlidyAN0dXVhYuLCzIyMuQOhYiIiIgoV0wCNOiXX35RelIwEREREVFBxO5AGjRjxgxcu3YNjo6OcHFxgYmJidL02NhYmSIjIiIiIvoPkwANatq0qdwhEBERERG9F5MADQoPD5c7BCIiIiKi92IS8BGcPHkSly5dgkKhgKenJypVqiR3SEREREREEiYBGnTnzh20bdsWR44cgaWlJQDg6dOnqFatGlatWgVnZ2d5AyQiIiIiAkcH0qiuXbvi9evXuHTpEh4/fozHjx/j0qVLEEKgW7ducodHRERERASALQEadejQIURHR8PDw0Mq8/DwwMyZMxEQECBjZERERERE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JICIiIiISMswCSAiIiIi0jJMAoiIiIiItAyTACIiIiIiLcMkgIiIiIhIyzAJICIiIiLSMnxiMJG24UPa8oYPaSMiokKILQFERERERFqGLQEkG9fUlXKH8Fm5IXcAREREVGiwJYCIiIiISMswCSAiIiIi0jJMAoiIiIiItAyTACIiIiIiLcMkgIiIiIhIy3B0ICKiT4HPZ1Afn81ARPTRsSWAiIiIiEjLMAkgIiIiItIyTAKIiIiIiLQMkwAiIiIiIi3DJICIiIiISMswCSAiIiIi0jJMAoiIiIiItAyTACIiIiIiLcMkgIiIiIhIyzAJICIiIiLSMkwCiIiIiIi0DJMAIiIiIiItwySAiIiIiEjLMAkgIiIiItIyTAKIiIiIiLQMkwAiIiIiIi3DJICIiIiISMswCSAiIiIi0jJMAoiIiIiItAyTACIiIiIiLcMkgIiIiIhIy+jKHQARkTZwTV0pdwifjRtyB0BEpAXYEkBEREREpGWYBBARERERaRkmAUREREREWoZJABERERGRluGNwURahjeo5s0NuQMgIiL6CNgSQERERESkZZgEEBERERFpGSYBRERERERahkkAEREREZGWYRJARERERKRlmAQQEREREWkZJgFERERERFqGSQARERERkZZhEkBEREREpGWYBBARERERaRkmAUREREREWoZJABERERGRlmESQERERESkZZgEEBERERFpGSYBRERERERahkkAEREREZGWYRJARERERKRlmAQQEREREWkZJgFERERERFqGSYAWmD17Ntzc3GBoaIhKlSrh0KFDcodERERERDJiElDIrVmzBiEhIRg2bBhOnz6Nr7/+GsHBwbh165bcoRERERGRTJgEFHJTpkxBt27d0L17d3h6emLatGlwdnbGnDlz5A6NiIiIiGTCJKAQe/XqFU6dOoW6desqldetWxfR0dEyRUVEREREctOVOwD6eB4+fIiMjAzY2dkpldvZ2SEhISHb96SlpSEtLU16nZSUBABITk7WeHyZaS80Ps/CTFP7gNs9b7jdPz1NHm+43dXH7S6Pj3F+fXu+QoiPMn/6/DEJ0AIKhULptRBCpSzL+PHjMXLkSJVyZ2fnjxIbqc9imtwRaCdu90+P21we3O7y+Njb/dmzZ7CwsPi4C6HPEpOAQqxo0aLQ0dFR+dU/MTFRpXUgy9ChQzFo0CDp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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "campaigns_effectiveness(customer_sport)" + ] + }, + { + "cell_type": "markdown", + "id": "5d08698b-e3ab-4038-ad26-990297520d43", + "metadata": {}, + "source": [ + "## Evolution des Commandes" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "93fd7b09-690d-490f-8a59-01be25da7445", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_439/3124665301.py:8: DtypeWarning: Columns (20,29,39) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " df = pd.read_csv(file_in, sep=\",\")\n" - ] - }, + "data": { + "text/plain": [ + "Index(['ticket_id', 'customer_id', 'purchase_id', 'event_type_id',\n", + " 'supplier_name', 'purchase_date', 'amount', 'is_full_price',\n", + " 'name_event_types', 'name_facilities', 'name_categories', 'name_events',\n", + " 'name_seasons', 'start_date_time', 'end_date_time', 'open'],\n", + " dtype='object')" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "products_sport.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "2f5e32e1-224f-4cc4-a5c3-c4d5857df83c", + "metadata": {}, + "outputs": [ { "data": { "text/html": [ @@ -1017,148 +1114,58 @@ " \n", " \n", " customer_id\n", - " nb_tickets\n", - " nb_purchases\n", - " total_amount\n", - " nb_suppliers\n", - " vente_internet_max\n", - " purchase_date_min\n", - " purchase_date_max\n", - " time_between_purchase\n", - " nb_tickets_internet\n", - " ...\n", - " gender_label\n", - " gender_female\n", - " gender_male\n", - " gender_other\n", - " country_fr\n", - " has_tags\n", " nb_campaigns\n", " nb_campaigns_opened\n", " time_to_open\n", - " y_has_purchased\n", + " number_company\n", + " no_campaign_opened\n", " \n", " \n", " \n", " \n", " 0\n", - " 10_1\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " other\n", - " 0\n", - " 0\n", - " 1\n", - " NaN\n", - " 0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " 5_160516\n", + " 26\n", + " 2.0\n", + " 0 days 01:30:27\n", + " 5\n", + " False\n", " \n", " \n", " 1\n", - " 10_2\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " other\n", - " 0\n", - " 0\n", - " 1\n", - " NaN\n", - " 0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " 5_160517\n", + " 73\n", + " 49.0\n", + " 2 days 01:30:16.909090909\n", + " 5\n", + " False\n", " \n", " \n", " 2\n", - " 10_3\n", + " 5_160518\n", + " 25\n", " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " other\n", - " 0\n", - " 0\n", - " 1\n", - " NaN\n", - " 0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " NaT\n", + " 5\n", + " True\n", " \n", " \n", " 3\n", - " 10_4\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " other\n", - " 0\n", - " 0\n", - " 1\n", - " NaN\n", - " 0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " 5_160519\n", + " 46\n", + " 5.0\n", + " 0 days 09:31:47.250000\n", + " 5\n", + " False\n", " \n", " \n", " 4\n", - " 10_5\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " other\n", - " 0\n", - " 0\n", - " 1\n", - " NaN\n", - " 0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " 5_160520\n", + " 35\n", + " 9.0\n", + " 1 days 14:34:51.571428571\n", + " 5\n", + " False\n", " \n", " \n", " ...\n", @@ -1168,246 +1175,396 @@ " ...\n", " ...\n", " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", " \n", " \n", - " 1523683\n", - " 14_6884748\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " male\n", - " 0\n", + " 463093\n", + " 9_1720340\n", " 1\n", - " 0\n", - " 1.0\n", - " 0\n", " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " NaT\n", + " 9\n", + " True\n", " \n", " \n", - " 1523684\n", - " 14_6884749\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " male\n", - " 0\n", + " 463094\n", + " 9_1720352\n", " 1\n", - " 0\n", " 1.0\n", - " 0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " 0 days 08:30:32\n", + " 9\n", + " False\n", " \n", " \n", - " 1523685\n", - " 14_6884750\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " male\n", - " 0\n", + " 463095\n", + " 9_1720353\n", " 1\n", - " 0\n", - " 1.0\n", - " 0\n", " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " NaT\n", + " 9\n", + " True\n", " \n", " \n", - " 1523686\n", - " 14_6884751\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " female\n", + " 463096\n", + " 9_1720354\n", " 1\n", - " 0\n", - " 0\n", " 1.0\n", - " 0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " 0 days 00:00:05\n", + " 9\n", + " False\n", " \n", " \n", - " 1523687\n", - " 14_6884753\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", - " NaN\n", - " 0.0\n", - " ...\n", - " male\n", - " 0\n", + " 463097\n", + " 9_1720355\n", " 1\n", - " 0\n", " 1.0\n", - " 0\n", - " 0.0\n", - " 0.0\n", - " NaN\n", - " NaN\n", + " 0 days 00:19:39\n", + " 9\n", + " False\n", " \n", " \n", "\n", - "

1523688 rows × 41 columns

\n", + "

463098 rows × 6 columns

\n", "" ], "text/plain": [ - " customer_id nb_tickets nb_purchases total_amount nb_suppliers \\\n", - "0 10_1 0.0 0.0 0.0 0.0 \n", - "1 10_2 0.0 0.0 0.0 0.0 \n", - "2 10_3 0.0 0.0 0.0 0.0 \n", - "3 10_4 0.0 0.0 0.0 0.0 \n", - "4 10_5 0.0 0.0 0.0 0.0 \n", - "... ... ... ... ... ... \n", - "1523683 14_6884748 0.0 0.0 0.0 0.0 \n", - "1523684 14_6884749 0.0 0.0 0.0 0.0 \n", - "1523685 14_6884750 0.0 0.0 0.0 0.0 \n", - "1523686 14_6884751 0.0 0.0 0.0 0.0 \n", - "1523687 14_6884753 0.0 0.0 0.0 0.0 \n", + " customer_id nb_campaigns nb_campaigns_opened \\\n", + "0 5_160516 26 2.0 \n", + "1 5_160517 73 49.0 \n", + "2 5_160518 25 0.0 \n", + "3 5_160519 46 5.0 \n", + "4 5_160520 35 9.0 \n", + "... ... ... ... \n", + "463093 9_1720340 1 0.0 \n", + "463094 9_1720352 1 1.0 \n", + "463095 9_1720353 1 0.0 \n", + "463096 9_1720354 1 1.0 \n", + "463097 9_1720355 1 1.0 \n", "\n", - " vente_internet_max purchase_date_min purchase_date_max \\\n", - "0 0.0 NaN NaN \n", - "1 0.0 NaN NaN \n", - "2 0.0 NaN NaN \n", - "3 0.0 NaN NaN \n", - "4 0.0 NaN NaN \n", - "... ... ... ... \n", - "1523683 0.0 NaN NaN \n", - "1523684 0.0 NaN NaN \n", - "1523685 0.0 NaN NaN \n", - "1523686 0.0 NaN NaN \n", - "1523687 0.0 NaN NaN \n", + " time_to_open number_company no_campaign_opened \n", + "0 0 days 01:30:27 5 False \n", + "1 2 days 01:30:16.909090909 5 False \n", + "2 NaT 5 True \n", + "3 0 days 09:31:47.250000 5 False \n", + "4 1 days 14:34:51.571428571 5 False \n", + "... ... ... ... \n", + "463093 NaT 9 True \n", + "463094 0 days 08:30:32 9 False \n", + "463095 NaT 9 True \n", + "463096 0 days 00:00:05 9 False \n", + "463097 0 days 00:19:39 9 False \n", "\n", - " time_between_purchase nb_tickets_internet ... gender_label \\\n", - "0 NaN 0.0 ... other \n", - "1 NaN 0.0 ... other \n", - "2 NaN 0.0 ... other \n", - "3 NaN 0.0 ... other \n", - "4 NaN 0.0 ... other \n", - "... ... ... ... ... \n", - "1523683 NaN 0.0 ... male \n", - "1523684 NaN 0.0 ... male \n", - "1523685 NaN 0.0 ... male \n", - "1523686 NaN 0.0 ... female \n", - "1523687 NaN 0.0 ... male \n", - "\n", - " gender_female gender_male gender_other country_fr has_tags \\\n", - "0 0 0 1 NaN 0 \n", - "1 0 0 1 NaN 0 \n", - "2 0 0 1 NaN 0 \n", - "3 0 0 1 NaN 0 \n", - "4 0 0 1 NaN 0 \n", - "... ... ... ... ... ... \n", - "1523683 0 1 0 1.0 0 \n", - "1523684 0 1 0 1.0 0 \n", - "1523685 0 1 0 1.0 0 \n", - "1523686 1 0 0 1.0 0 \n", - "1523687 0 1 0 1.0 0 \n", - "\n", - " nb_campaigns nb_campaigns_opened time_to_open y_has_purchased \n", - "0 0.0 0.0 NaN NaN \n", - "1 0.0 0.0 NaN NaN \n", - "2 0.0 0.0 NaN NaN \n", - "3 0.0 0.0 NaN NaN \n", - "4 0.0 0.0 NaN NaN \n", - "... ... ... ... ... \n", - "1523683 0.0 0.0 NaN NaN \n", - "1523684 0.0 0.0 NaN NaN \n", - "1523685 0.0 0.0 NaN NaN \n", - "1523686 0.0 0.0 NaN NaN \n", - "1523687 0.0 0.0 NaN NaN \n", - "\n", - "[1523688 rows x 41 columns]" + "[463098 rows x 6 columns]" ] }, - "execution_count": 17, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "train = display_databases('musique', 'Test_set')\n", - "train" + "campaigns_sport" ] }, { "cell_type": "code", - "execution_count": 18, - "id": "b6a6feb7-2557-4932-8038-24cd9b363665", + "execution_count": 53, + "id": "b917f58e-fb8c-485b-808c-a53c04745833", + "metadata": {}, + "outputs": [], + "source": [ + "def sale_dynamics(products_sport, campaigns_sport_brut):\n", + " # Mois du premier achat\n", + " purchase_min = products_sport.groupby(['customer_id'])['purchase_date'].min().reset_index()\n", + " purchase_min.rename(columns = {'purchase_date' : 'first_purchase_event'}, inplace = True)\n", + " purchase_min['first_purchase_event'] = pd.to_datetime(purchase_min['first_purchase_event'])\n", + " purchase_min['first_purchase_month'] = pd.to_datetime(purchase_min['first_purchase_event'].dt.strftime('%Y-%m'))\n", + "\n", + " # Mois du premier mails\n", + " first_mail_received = campaigns_sport_brut.groupby('customer_id')['sent_at'].min().reset_index()\n", + " first_mail_received.rename(columns = {'sent_at' : 'first_email_reception'}, inplace = True)\n", + " first_mail_received['first_email_reception'] = pd.to_datetime(first_mail_received['first_email_reception'])\n", + " first_mail_received['first_email_month'] = pd.to_datetime(first_mail_received['first_email_reception'].dt.strftime('%Y-%m'))\n", + "\n", + " # Fusion \n", + " known_customer = pd.merge(purchase_min[['customer_id', 'first_purchase_month']], \n", + " first_mail_received[['customer_id', 'first_email_month']], on = 'customer_id', how = 'outer')\n", + "\n", + " # Mois à partir duquel le client est considere comme connu\n", + "\n", + " known_customer['known_date'] = pd.to_datetime(known_customer[['first_email_month', 'first_purchase_month']].min(axis = 1), utc = True, format = 'ISO8601')\n", + "\n", + " # Nombre de commande par mois\n", + " purchases_count = pd.merge(products_sport[['customer_id', 'purchase_id', 'purchase_date']].drop_duplicates(), known_customer[['customer_id', 'known_date']], on = ['customer_id'], how = 'inner')\n", + " purchases_count['is_customer_known'] = purchases_count['purchase_date'] > purchases_count['known_date'] + pd.DateOffset(months=1)\n", + " purchases_count['purchase_date_month'] = pd.to_datetime(purchases_count['purchase_date'].dt.strftime('%Y-%m'))\n", + " purchases_count = purchases_count[purchases_count['customer_id'] != 1]\n", + " \n", + " # Nombre de commande par mois par type de client\n", + " nb_purchases_graph = purchases_count.groupby(['purchase_date_month', 'is_customer_known'])['purchase_id'].count().reset_index()\n", + " nb_purchases_graph.rename(columns = {'purchase_id' : 'nb_purchases'}, inplace = True)\n", + " \n", + " nb_purchases_graph_2 = purchases_count.groupby(['purchase_date_month', 'is_customer_known'])['customer_id'].nunique().reset_index()\n", + " nb_purchases_graph_2.rename(columns = {'customer_id' : 'nb_new_customer'}, inplace = True)\n", + "\n", + " # Graphique en nombre de commande\n", + " purchases_graph = nb_purchases_graph\n", + " \n", + " purchases_graph_used = purchases_graph[purchases_graph[\"purchase_date_month\"] >= datetime(2021,3,1)]\n", + " purchases_graph_used_0 = purchases_graph_used[purchases_graph_used[\"is_customer_known\"]==False]\n", + " purchases_graph_used_1 = purchases_graph_used[purchases_graph_used[\"is_customer_known\"]==True]\n", + " \n", + " \n", + " # Création du barplot\n", + " plt.bar(purchases_graph_used_0[\"purchase_date_month\"], purchases_graph_used_0[\"nb_purchases\"], width=12, label = \"Nouveau client\")\n", + " plt.bar(purchases_graph_used_0[\"purchase_date_month\"], purchases_graph_used_1[\"nb_purchases\"], \n", + " bottom = purchases_graph_used_0[\"nb_purchases\"], width=12, label = \"Ancien client\")\n", + " \n", + " \n", + " # commande pr afficher slt\n", + " plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%b%y'))\n", + " \n", + " \n", + " # Ajout de titres et d'étiquettes\n", + " plt.xlabel('Mois')\n", + " plt.ylabel(\"Nombre d'achats\")\n", + " plt.title(\"Nombre d'achats - Sport\")\n", + " plt.legend()\n", + " \n", + " # Affichage du barplot\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "7f0275ec-5cc5-436c-8d50-5263fd8a6945", "metadata": {}, "outputs": [ { "data": { + "image/png": "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JiIiIiIZWDQRERERycCiiYiIiEgGFk1EREREMrBoIiIiIpJBV9MJEFEdF6WspC3n2edBRFTLONJEREREJAOLJiIiIiIZWDQRERERycCiiYiIiEgGFk1EREREMrBoIiIiIpKBRRMRERGRDCyaiIiIiGRg0UREREQkA4smIiIiIhlYNBERERHJwKKJiIiISAYWTUREREQysGgiIiIikoFFExEREZEMLJqIiIiIZGDRRERERCQDiyYiIiIiGapdNEVHR2Pnzp3S+0mTJqFRo0bo3Lkzrly5otbkiIiIiLRFtYummTNnwsjICABw+PBhLF26FHPmzIGVlRU++OADtSdIREREpA10q/uBa9euoXnz5gCAbdu24Y033sDo0aPh4+MDX19fdedHREREpBWqPdLUsGFD3L59GwAQFxcHf39/AIChoSHy8/PVmx0RERGRlqj2SFNAQADeeecdtGvXDn/++SeCg4MBAOfOnYOzs7O68yMiIqLyopSPac95tnk8Z6o90vTVV1/B29sbt27dwubNm2FpaQkASEpKwqBBg9SeIBEREZE2qPZIU25uLr788ks0aKBab0VFReHatWtqS4yIiIhIm1R7pMnFxQX//vtvhfasrCy4uLioJSkiIiIibVPtokkIUWn7vXv3YGho+NQJEREREWkj2ZfnPvzwQwCAQqHAf//7XxgbG0vbSkpKcPToUbRt21btCRIRERFpA9kjTadOncKpU6cghMDZs2el96dOncIff/yBNm3aYO3atTVOZNasWVAoFJgwYYLUJoRAVFQUHBwcYGRkBF9fX5w7d07lc4WFhRg/fjysrKxgYmKC3r174/r16yox2dnZCAsLg1KphFKpRFhYGO7cuaMSc/XqVYSEhMDExARWVlaIiIhAUVFRjftDRERE9Yvskab9+/cDAIYPH47FixfDzMxMbUkcP34cK1asgKenp0r7nDlzsGDBAqxduxaurq6YPn06AgICcOHCBZiamgIAJkyYgO3btyMmJgaWlpaYOHEievXqhaSkJOjo6AAAQkNDcf36dcTGxgIARo8ejbCwMGzfvh3Aw5Gy4OBgWFtbIyEhAbdv38bQoUMhhMCSJUvU1k8iIiKqu6o9p2nNmjVqLZju3buHwYMHY+XKlTA3N5fahRBYtGgRpkyZgn79+sHd3R3R0dG4f/8+NmzYAADIycnBqlWrMH/+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AgAAkyZNQn5+PsLDw5GdnY2OHTsiLi4Opqam0j4WLlwIXV1dDBgwAPn5+fDz88PatWuho6Mjxaxfvx4RERHSXXa9e/fG0qVLpe06OjrYuXMnwsPD4ePjAyMjI4SGhmLevHlq6ysRERHVbdUumsqcOHECqampUCgUaNmyZZWXsR5n1apVVW5XKBSIiopCVFTUY2MMDQ2xZMkSLFmy5LExFhYWWLduXZXHcnJywo4dO6qMISIioudXtYum69evY9CgQTh06BAaNWoEALhz5w46d+6MjRs38g4yIiIiqpeqPRF8xIgRKC4uRmpqKrKyspCVlYXU1FQIITBy5MjayJGIiIhI46o90vT7778jMTFRmkQNPFxracmSJfDx8VFrckRERETaotojTU5OTtLDeh/14MEDNG7cWC1JEREREWmbahdNc+bMwfjx43HixAkIIQA8nBT+/vvv824zIiIiqrdkXZ4zNzdXeZxIXl4eOnbsCF3dhx9/8OABdHV1MWLECLWu40RERESkLWQVTYsWLarlNIiIiIi0m6yiaejQobWdBxFR7eJqzUT0lGq8uGVmZiYyMzNRWlqq0u7p6fnUSRERERFpm2oXTUlJSRg6dKi0NtOjFAoFSkpK1JYcERERkbaodtE0fPhwuLq6YtWqVbC1tVWZIE5ERERUX1W7aEpLS8OWLVvQvHnz2siHiIiISCtVe50mPz8/nD59ujZyISIiItJa1R5p+vbbbzF06FCkpKTA3d0denp6Ktt79+6ttuSIiIiItEW1i6bExEQkJCTg119/rbCNE8GJiIiovqr25bmIiAiEhYUhPT0dpaWlKi8WTERERFRfVbtoun37Nj744APY2trWRj5EREREWqnaRVO/fv2wf//+2siFiIiISGtVe06Tq6srJk+ejISEBHh4eFSYCB4REaG25IiIiIi0RY3unmvYsCEOHDiAAwcOqGxTKBQsmoiIiKheqtHilkRERETPmxo/sBeA9Ow5PkqFnhtRykracp59HkTqwnNa8/gzqDOqPREcAL777jt4eHjAyMgIRkZG8PT0xPfff6/u3IiIiIi0RrVHmhYsWICpU6di3Lhx8PHxgRAChw4dwnvvvYd///0XH3zwQW3kSUT1TWX/ugb4L2wi0lrVLpqWLFmCZcuWYciQIVJbnz590Lp1a0RFRbFoIiIionqp2pfn0tPT0blz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", "text/plain": [ - "array([nan])" + "
" ] }, - "execution_count": 18, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sale_dynamics(products_sport, campaigns_sport_brut)" + ] + }, + { + "cell_type": "markdown", + "id": "23b35899-728c-4674-bbbc-157643c16abe", + "metadata": {}, + "source": [ + "# 3 - Caractéristiques Démographiques" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "id": "b1bb86c5-3f40-4d5c-bef0-d6e8693c6b5e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bdc2324-data/5/5customersplus.csv\n" + ] + }, + { + "data": { + "text/plain": [ + "Index(['id', 'lastname', 'firstname', 'birthdate', 'email', 'street_id',\n", + " 'created_at', 'updated_at', 'civility', 'is_partner', 'extra',\n", + " 'deleted_at', 'reference', 'gender', 'is_email_true', 'extra_field',\n", + " 'identifier', 'opt_in', 'structure_id', 'note', 'profession',\n", + " 'language', 'mcp_contact_id', 'need_reload', 'last_buying_date',\n", + " 'max_price', 'ticket_sum', 'average_price', 'fidelity',\n", + " 'average_purchase_delay', 'average_price_basket',\n", + " 'average_ticket_basket', 'total_price', 'preferred_category',\n", + " 'preferred_supplier', 'preferred_formula', 'purchase_count',\n", + " 'first_buying_date', 'last_visiting_date', 'zipcode', 'country', 'age',\n", + " 'tenant_id'],\n", + " dtype='object')" + ] + }, + "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "train['y_has_purchased'].unique()" + "directory_path = '5'\n", + "file_name = \"5customersplus.csv\"\n", + "file_path = \"bdc2324-data\" + \"/\" + 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.columns" ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "8adba9cc-e257-4c57-8149-c9af48c12b6f", + "metadata": {}, + "outputs": [], + "source": [ + "def load_customer_brut_dataset(directory_path):\n", + " file_name = str(directory_path) + \"customersplus.csv\"\n", + " print(file_name)\n", + " file_path = \"bdc2324-data\" + \"/\" + str(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", + " return customersplus" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "4c8f511b-2740-4b8d-bd99-d0ecf7d64e74", + "metadata": {}, + "outputs": [], + "source": [ + "def percent_of_na(company, column):\n", + " df = load_customer_brut_dataset(company)\n", + " if column in df.columns:\n", + " na_percentage = df[column].isna().mean() * 100\n", + " non_na_percentage = 100 - na_percentage\n", + " \n", + " labels = ['Valeurs Manquantes', 'Non-Valeurs Manquantes']\n", + " sizes = [na_percentage, non_na_percentage]\n", + " colors = ['#ff9999','#66b3ff']\n", + " explode = (0.1, 0)\n", + " \n", + " plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140)\n", + " plt.axis('equal') \n", + " plt.title('Pourcentage de Valeurs Manquantes : {}'.format(column))\n", + " #plt.show()\n", + " else:\n", + " print(f\"The column {column} doesn't exist for the company {company}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "1ca50118-a32d-4dda-8fdf-92443f0f5196", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n", + "5customersplus.csv\n", + "bdc2324-data/5/5customersplus.csv\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[100], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m company \u001b[38;5;129;01min\u001b[39;00m customer_sport[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnumber_company\u001b[39m\u001b[38;5;124m'\u001b[39m]:\n\u001b[0;32m----> 2\u001b[0m \u001b[43mpercent_of_na\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcompany\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mprofession\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[0;32mIn[99], line 2\u001b[0m, in \u001b[0;36mpercent_of_na\u001b[0;34m(company, column)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpercent_of_na\u001b[39m(company, column):\n\u001b[0;32m----> 2\u001b[0m df \u001b[38;5;241m=\u001b[39m \u001b[43mload_customer_brut_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcompany\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m column \u001b[38;5;129;01min\u001b[39;00m df\u001b[38;5;241m.\u001b[39mcolumns:\n\u001b[1;32m 4\u001b[0m na_percentage \u001b[38;5;241m=\u001b[39m df[column]\u001b[38;5;241m.\u001b[39misna()\u001b[38;5;241m.\u001b[39mmean() \u001b[38;5;241m*\u001b[39m \u001b[38;5;241m100\u001b[39m\n", + "Cell \u001b[0;32mIn[95], line 7\u001b[0m, in \u001b[0;36mload_customer_brut_dataset\u001b[0;34m(directory_path)\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(file_path)\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m fs\u001b[38;5;241m.\u001b[39mopen(file_path, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m file_in:\n\u001b[0;32m----> 7\u001b[0m customersplus \u001b[38;5;241m=\u001b[39m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile_in\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msep\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m,\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m customersplus\n", + "File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1024\u001b[0m, in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)\u001b[0m\n\u001b[1;32m 1011\u001b[0m kwds_defaults \u001b[38;5;241m=\u001b[39m _refine_defaults_read(\n\u001b[1;32m 1012\u001b[0m dialect,\n\u001b[1;32m 1013\u001b[0m delimiter,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1020\u001b[0m dtype_backend\u001b[38;5;241m=\u001b[39mdtype_backend,\n\u001b[1;32m 1021\u001b[0m )\n\u001b[1;32m 1022\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate(kwds_defaults)\n\u001b[0;32m-> 1024\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/pandas/io/parsers/readers.py:624\u001b[0m, in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 621\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m parser\n\u001b[1;32m 623\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m parser:\n\u001b[0;32m--> 624\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mparser\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnrows\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1921\u001b[0m, in \u001b[0;36mTextFileReader.read\u001b[0;34m(self, nrows)\u001b[0m\n\u001b[1;32m 1914\u001b[0m nrows \u001b[38;5;241m=\u001b[39m validate_integer(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnrows\u001b[39m\u001b[38;5;124m\"\u001b[39m, nrows)\n\u001b[1;32m 1915\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1916\u001b[0m \u001b[38;5;66;03m# error: \"ParserBase\" has no attribute \"read\"\u001b[39;00m\n\u001b[1;32m 1917\u001b[0m (\n\u001b[1;32m 1918\u001b[0m index,\n\u001b[1;32m 1919\u001b[0m columns,\n\u001b[1;32m 1920\u001b[0m col_dict,\n\u001b[0;32m-> 1921\u001b[0m ) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore[attr-defined]\u001b[39;49;00m\n\u001b[1;32m 1922\u001b[0m \u001b[43m \u001b[49m\u001b[43mnrows\u001b[49m\n\u001b[1;32m 1923\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1924\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m:\n\u001b[1;32m 1925\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclose()\n", + "File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/pandas/io/parsers/c_parser_wrapper.py:234\u001b[0m, in \u001b[0;36mCParserWrapper.read\u001b[0;34m(self, nrows)\u001b[0m\n\u001b[1;32m 232\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlow_memory:\n\u001b[0;32m--> 234\u001b[0m chunks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_reader\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_low_memory\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnrows\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 235\u001b[0m \u001b[38;5;66;03m# destructive to chunks\u001b[39;00m\n\u001b[1;32m 236\u001b[0m data \u001b[38;5;241m=\u001b[39m _concatenate_chunks(chunks)\n", + "File \u001b[0;32mparsers.pyx:838\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader.read_low_memory\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mparsers.pyx:921\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader._read_rows\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mparsers.pyx:1083\u001b[0m, in \u001b[0;36mpandas._libs.parsers.TextReader._convert_column_data\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mparsers.pyx:1456\u001b[0m, in \u001b[0;36mpandas._libs.parsers._maybe_upcast\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/opt/mamba/lib/python3.11/site-packages/numpy/core/multiarray.py:1131\u001b[0m, in \u001b[0;36mputmask\u001b[0;34m(a, mask, values)\u001b[0m\n\u001b[1;32m 1082\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1083\u001b[0m \u001b[38;5;124;03m copyto(dst, src, casting='same_kind', where=True)\u001b[39;00m\n\u001b[1;32m 1084\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \n\u001b[1;32m 1127\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (dst, src, where)\n\u001b[0;32m-> 1131\u001b[0m \u001b[38;5;129m@array_function_from_c_func_and_dispatcher\u001b[39m(_multiarray_umath\u001b[38;5;241m.\u001b[39mputmask)\n\u001b[1;32m 1132\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mputmask\u001b[39m(a, \u001b[38;5;241m/\u001b[39m, mask, values):\n\u001b[1;32m 1133\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1134\u001b[0m \u001b[38;5;124;03m putmask(a, mask, values)\u001b[39;00m\n\u001b[1;32m 1135\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1171\u001b[0m \n\u001b[1;32m 1172\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m 1173\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (a, mask, values)\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnQAAAGZCAYAAAAAW6wOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+IElEQVR4nO3dd5hU5f3+8Xu2V8qyBVikCIIiUryoAtJCUEEFRBCUrhJLTKJEIYJYMCqKJSaKBVDBngAKBFEpBr+09SdCsEBQQAEpC9KWXbY9vz90xpndmd3ZNmfOzPt1XVzsnPo5Z6fc8zznOeswxhgBAADAtiKsLgAAAABVQ6ADAACwOQIdAACAzRHoAAAAbI5ABwAAYHMEOgAAAJsj0AEAANgcgQ4AAMDmCHQAAAA2R6CDV6+88oocDofrX1RUlBo1aqTx48dr//79VpcXUH/961+1ZMkSq8uotD179sjhcOiVV16p8rbee+89ORwOzZkzx+cyH330kRwOh5588km/tztu3Dg1bdq0yvUF2tq1a12vEV/nt2/fvnI4HLY8vpqwfv163X///Tp+/LjVpQSVVatWqWPHjkpMTJTD4bDkPceur0P8jECHMs2fP18bNmzQRx99pJtuuklvvvmmevbsqZycHKtLCxi7B7rqNHDgQNWvX1/z5s3zucz8+fMVHR2t0aNHB7AyayUnJ2vu3Lmlpu/evVtr165VrVq1LKgqOK1fv14PPPAAgc6NMUbDhw9XdHS03n//fW3YsEG9evUKeB3Tp0/X4sWLA75fVA8CHcrUpk0bde3aVX369NGMGTN09913a/fu3QENOLm5ueJPDgeHqKgojRkzRllZWdq+fXup+cePH9fixYt11VVXKS0tzYIKK6agoECFhYVV3s6IESP06aef6n//+5/H9Hnz5ikzM1Pdu3ev8j5gH8YY5ebm+r38gQMHdOzYMQ0ZMkT9+vVT165dVbdu3Rqs0LvmzZurQ4cOAd8vqgeBDhXStWtXSdLevXslSXl5eZo6daqaNWummJgYZWZm6rbbbiv17dvhcOj+++8vtb2mTZtq3LhxrsfOrt4PP/xQEyZMUFpamhISEnT27FlJ0htvvKFu3bopKSlJSUlJat++famWkY8//lj9+vVTrVq1lJCQoO7du2vVqlUey9x///1yOBz68ssvNXLkSNWuXVsZGRmaMGGCTpw44VF3Tk6OXn31VVfXWu/evSVJR44c0a233qrWrVsrKSlJ6enp6tu3r9atW1fqOPft26dhw4YpOTlZderU0fXXX6+srCyvXXWfffaZrrrqKqWkpCguLk4dOnTQO++84/N34u7AgQMaPny4kpOTVbt2bY0YMUIHDx70umxl9zNx4kRJP7fElfTmm28qLy9PEyZMkCT94x//0KWXXqr09HQlJibqoosu0qxZs1RQUFDufowxeu6559S+fXvFx8erbt26GjZsmL777juP5Uo+h5x69+7t+l1Jv3aPLliwQHfddZcyMzMVGxurXbt26cyZM5o8ebKaNWumuLg4paSkqGPHjnrzzTfLrVOS+vfvr3POOcej5bK4uFivvvqqxo4dq4iI0m+1/p6b3r17q02bNsrKylLPnj2VkJCgc889V48++qiKi4s9lv3mm2902WWXKSEhQampqfrd736npUuXyuFwaO3atRU+Z3l5ebrrrrvUvn171a5dWykpKerWrZvee++9Uus6HA7dfvvtWrBggS644AIlJCSoXbt2WrZsmWuZ+++/X3/+858lSc2aNXO9ptxre/vtt9WtWzclJiYqKSlJAwYM0JYtWzz29d133+m6665Tw4YNFRsbq4yMDPXr109ffPFFqboqa9y4cUpKStKXX36pfv36KTExUWlpabr99tt15swZr8c+Z84cXXDBBYqNjdWrr74qSfr000/Vr18/JScnKyEhQZdccomWL1/ucU4aNWokSbrnnntKdc//73//06hRo5Senq7Y2FhdcMEF+sc//uGx/+LiYs2cOVOtWrVSfHy86tSpo7Zt2+qZZ55xLXPkyBHdfPPNOueccxQbG6u0tDR1795dH3/8sccxl+xy9fc9vmnTpho0aJA++OADXXzxxYqPj9f5559fZms+qleU1QXAXnbt2iVJSktLkzFGgwcP1qpVqzR16lT17NlT27Zt04wZM7RhwwZt2LBBsbGxldrPhAkTNHDgQC1YsEA5OTmKjo7Wfffdp4ceekhDhw7VXXfdpdq1a2v79u2ucClJCxcu1JgxY3T11Vfr1VdfVXR0tF544QUNGDBAK1euVL9+/Tz2c80112jEiBGaOHGi/vvf/2rq1KmS5HoT2rBhg/r27as+ffpo+vTpkuTqPjt27JgkacaMGapfv75Onz6txYsXq3fv3lq1apXrgzEnJ0d9+vTRsWPH9Nhjj6lFixb64IMPNGLEiFLHvWbNGl122WXq0qWL5syZo9q1a+utt97SiBEjdObMGa8fwk65ubn6zW9+owMHDuiRRx5Ry5YttXz58mrfT8uWLdWjRw8tXLhQjz76qKKjo13z5s+fr8zMTA0YMECS9O2332rUqFGuD4OtW7fq4Ycf1jfffFPuG/2kSZP0yiuv6I477tBjjz2mY8eO6cEHH9Qll1yirVu3KiMjo8z1fZk6daq6deumOXPmKCIiQunp6brzzju1YMECzZw5Ux06dFBOTo62b9+uo0eP+rXNiIgIjRs3TnPnztXMmTMVGRmpDz/8UPv27dP48eP1hz/8odQ6FTk3Bw8e1PXXX6+77rpLM2bM0OLFizV16lQ1bNhQY8aMkSQdOnRIvXr1UnR0tJ577jllZGTo9ddf1+23316p8yRJZ8+e1bFjxzR58mRlZmYqPz9fH3/8sYYOHar58+e79u20fPlyZWVl6cEHH1RSUpJmzZqlIUOGaMeOHTr33HN144036tixY3r22We1aNEiNWjQQJLUunVrST9f3jBt2jSNHz9e06ZNU35+vh5//HH17NlTmzdvdi13xRVXqKioSLNmzVLjxo2VnZ2t9evXl9uNu2fPHjVr1kxjx47165rSgoICXXHFFZo0aZKmTJmi9evXa+bMmdq7d6+WLl3qseySJUu0bt063Xfffapfv77S09P1ySefqH///mrbtq3mzp2r2NhYPffcc7ryyiv15ptvasSIEbrxxhvVrl07DR06VL///e81atQo1/vmV199pUsuuUSNGzfW7NmzVb9+fa1cuVJ33HGHsrOzNWPGDEnSrFmzdP/992vatGm69NJLVVBQoG+++cbjfIwePVqff/65Hn74YbVs2VLHjx/X559/XuZzvKLv8Vu3btVdd92lKVOmKCMjQy+//LImTpyoFi1a6NJLLy33fKOKDODF/PnzjSSzceNGU1BQYE6dOmWWLVtm0tLSTHJysjl48KD54IMPjCQza9Ysj3XffvttI8m8+OKLrmmSzIwZM0rtp0mTJmbs2LGl9jtmzBiP5b777jsTGRlprr/+ep815+TkmJSUFHPllVd6TC8qKjLt2rUznTt3dk2bMWOG19pvvfVWExcXZ4qLi13TEhMTPWr0pbCw0BQUFJh+/fqZIUOGuKb/4x//MJLMihUrPJafNGmSkWTmz5/vmnb++eebDh06mIKCAo9lBw0aZBo0aGCKiop87v/55583ksx7773nMf2mm26q1v0Y8+vvadGiRa5p27dvN5LMvffe63WdoqIiU1BQYF577TUTGRlpjh075po3duxY06RJE9fjDRs2GElm9uzZHtv44YcfTHx8vLn77rtd00o+h5x69eplevXq5Xq8Zs0aI8lceumlpZZt06aNGTx4cJnH7I1zm++++6757rvvjMPhMMuWLTPGGHPttdea3r17G2OMGThwoMfxlVTWuenVq5eRZDZt2uSxTuvWrc2AAQNcj++55x7jcDjMF1984bFc//79jSSzZs0a1zR/z1lJzuf4xIkTTYcOHTzmSTIZGRnm5MmTrmkHDx40ERER5pFHHnFNe/zxx40ks3v3bo/1v//+exMVFWV+//vfe0w/deqUqV+/vhk+fLgxxpjs7GwjyTz99NM+6/Rlz549JjIy0kyYMKHcZceOHWskmWeeecZj+sMPP2wkmU8//dQ1TZKpXbu2x+/NGGO6du1q0tPTzalTp1zTCgsLTZs2bUyjRo1c7zO7d+82kszjjz/usf6AAQNMo0aNzIkTJzym33777SYuLs61v0GDBpn27duXeTxJSUnmj3/8Y7nH7P48rch7fJMmTUxcXJzZu3eva1pubq5JSUkxkyZNKnO/qB50uaJMXbt2VXR0tJKTkzVo0CDVr19fK1asUEZGhlavXi1JpVpzrr32WiUmJpbq5qyIa665xuPxRx99pKKiIt12220+11m/fr2OHTumsWPHqrCw0PWvuLhYl112mbKyskoN5rjqqqs8Hrdt21Z5eXk6fPiwX3XOmTNHF198seLi4hQVFaXo6GitWrVKX3/9tWuZTz75RMnJybrssss81h05cqTH4127dumbb77R9ddfL0kex3DFFVfoxx9/1I4dO3zWsmbNGiUnJ5c6plGjRlXrfiS5unXdW5LmzZsnh8Oh8ePHu6Zt2bJFV111lerVq6fIyEhFR0drzJgxKioq0s6dO31uf9myZXI4HLrhhhs86qtfv77atWvn0UVXUSWfW5LUuXNnrVixQlOmTNHatWsrdP2TU7NmzdS7d2/NmzdPR48e1XvvvefqevamIuemfv366ty5s8e0tm3berROr1mzRhdeeKHatWvnsVzJ339Fvfvuu+revbuSkpJcz/G5c+d6PMed+vTpo+TkZNfjjIwMpaene9Tpy8qVK1VYWKgxY8Z4/M7j4uLUq1cv1+88JSVFzZs31+OPP64nn3xSW7ZsKdX17EuTJk1UWFjodQCLL87XiZPzfK5Zs8Zjet++fT2ue8vJydGmTZs0bNgwJSUluaZHRkZq9OjR2rdvX5mvs7y8PK1atUpDhgxRQkJCqddpXl6eNm7cKOnn5+/WrVt16623auXKlTp58mSp7XXu3FmvvPKKZs6cqY0bN/p12UNF3+Pbt2+vxo0bux7HxcWpZcuWfv3+UXUEOpTptddeU1ZWlrZs2aIDBw5o27Ztrgu8jx49qqioqFIXvzscDtWvX9/v7ipvnF0xTkeOHJEk17Um3hw6dEiSNGzYMEVHR3v8e+yxx2SMcXWTOtWrV8/jsbP7wJ8P9CeffFK33HKLunTpon/961/auHGjsrKydNlll3msf/ToUa/dgyWnOeufPHlyqfpvvfVWSVJ2drbPenztp379+tW6H0lKSEjQddddpw8++EAHDx5UYWGhFi5cqF69eql58+aSpO+//149e/bU/v379cwzz2jdunXKyspyXf9T1jk+dOiQjDHKyMgoVePGjRvLra8sJZ9bkvS3v/1N99xzj5YsWaI+ffooJSVFgwcPLjXIoTwTJ07U0qVL9eSTTyo+Pl7Dhg3zulxFz03J56n083O15POs5O9aKv37r4hFixZp+PDhyszM1MKFC7VhwwZlZWVpwoQJysvLK7W8P3X64nxedurUqdTv/O2333b9zh0Oh1atWqUBAwZo1qxZuvjii5WWlqY77rhDp06dqvSxehMVFVXqmJzns+T7W8nn1U8//SRjjNfnW8OGDb1uw93Ro0dVWFioZ599ttT5uOKKKyT9+jqdOnWqnnjiCW3cuFGXX3656tWrp379+umzzz5zbe/tt9/W2LFj9fLLL6tbt25KSUnRmDFjfF5j66yhIu/xVfn9o+q4hg5luuCCC9SxY0ev8+rVq6fCwkIdOXLE4wVvjNHBgwfVqVMn17TY2FjXwAZ3vt7QHA6Hx2Pn9vft26dzzjnH6zqpqamSpGeffdY1eKOkyl535c3ChQvVu3dvPf/88x7TS36o1KtXT5s3by61fsk3Umf9U6dO1dChQ73us1WrVj7rCdR+nCZOnKiXXnpJr732mlq2bKnDhw9r9uzZrvlLlixRTk6OFi1apCZNmrim+3PhempqqhwOh9atW+f1Okz3aXFxcV6fW9nZ2a5jdVfyuSVJiYmJeuCBB/TAAw/o0KFDrta6K6+8Ut9880259ToNHTpUt912mx599FHddNNNio+P97pcVc6NL/Xq1fP64extmr/nbOHChWrWrJnefvttj/Pmbd2qcu73n//8p8c58aZJkyauVradO3fqnXfe0f3336/8/Pwy75FYUYWFhTp69KhHUHGez5LhpeTzqm7duoqIiNCPP/5YarsHDhyQJK/PT/f1na15vnommjVrJunn4HnnnXfqzjvv1PHjx/Xxxx/rL3/5iwYMGKAffvjBNUjm6aef1tNPP63vv/9e77//vqZMmaLDhw/rgw8+8Lr9irzHw3q00KHSnAMMFi5c6DH9X//6l3JycjwGIDRt2lTbtm3zWG716tU6ffq0X/v67W9/q8jIyFLhyV337t1Vp04dffXVV+rYsaPXfzExMf4enouvb5gOh6NU2Ni2bZs2bNjgMa1Xr146deqUVqxY4TH9rbfe8njcqlUrnXfeedq6davP+t27s0rq06ePTp06pffff99j+htvvFGt+3Hq0qWL2rRpo/nz52v+/PmqXbu2R3em8wPO/RwZY/TSSy+Vu+1BgwbJGKP9+/d7re+iiy5yLevtubVz585yu419ycjI0Lhx4zRy5Ejt2LGj1IjGssTHx+u+++7TlVdeqVtuucXnclU5N7706dNHX375pbZu3eoxveTvX/L/nDkcDsXExHiElYMHD3od5eovX63gAwYMUFRUlL799lufz0tvWrZsqWnTpumiiy7S559/Xum6fHn99dc9HjvPp/toYG8SExPVpUsXLVq0yONYi4uLtXDhQjVq1EgtW7b0uX5CQoL69OmjLVu2qG3btl7Ph7cWsTp16mjYsGG67bbbdOzYMe3Zs6fUMo0bN9btt9+u/v37l3nOKvIeD+vRQodK69+/vwYMGKB77rlHJ0+eVPfu3V0joDp06OBxY9nRo0dr+vTpuu+++9SrVy999dVX+vvf/67atWv7ta+mTZvqL3/5ix566CHl5ua6bjXy1VdfKTs7Ww888ICSkpL07LPPauzYsTp27JiGDRum9PR0HTlyRFu3btWRI0fKDIS+XHTRRVq7dq2WLl2qBg0aKDk5Wa1atdKgQYP00EMPacaMGerVq5d27NihBx98UM2aNfO4t9nYsWP11FNP6YYbbtDMmTPVokULrVixQitXrpQkj1tavPDCC7r88ss1YMAAjRs3TpmZmTp27Ji+/vprff7553r33Xd91jlmzBg99dRTGjNmjB5++GGdd955+ve//+3aj7uq7MfdhAkTdOedd2rHjh2aNGmSR4tU//79FRMTo5EjR+ruu+9WXl6enn/+ef3000/lbrd79+66+eabNX78eH322We69NJLlZiYqB9//FGffvqpLrroIldgGj16tG644Qbdeuutuuaaa7R3717NmjWrQvfB69KliwYNGqS2bduqbt26+vrrr7VgwQJ169ZNCQkJfm9HkqulpCxVOTe+/PGPf9S8efM0cOBAzZw50zXK1VsLo7/nbNCgQVq0aJFuvfVWDRs2TD/88IMeeughNWjQoMLd0U7OMP7MM89o7Nixio6OVqtWrdS0aVM9+OCDuvfee/Xdd9/psssuU926dXXo0CFt3rzZ1Yq6bds23X777br22mt13nnnKSYmRqtXr9a2bds0ZcqUMve9d+9eNW/eXGPHjvXrOrqYmBjNnj1bp0+fVqdOnVyjXC+//HL16NGj3PUfeeQR9e/fX3369NHkyZMVExOj5557Ttu3b9ebb77ptbXY3TPPPKMePXqoZ8+euuWWW9S0aVOdOnVKu3bt0tKlS13XuF155ZVq06aNOnbsqLS0NO3du1dPP/20mjRpovPOO08nTpxQnz59NGrUKJ1//vlKTk5WVlaWPvjgA5+t9FLF3uMRBKwbj4Fg5hzFmJWVVeZyubm55p577jFNmjQx0dHRpkGDBuaWW24xP/30k8dyZ8+eNXfffbc555xzTHx8vOnVq5f54osvfI5y9bXf1157zXTq1MnExcWZpKQk06FDB4/Rm8YY88knn5iBAwealJQUEx0dbTIzM83AgQPNu+++61rGOcr1yJEjXo/bfQTeF198Ybp3724SEhKMJNcowLNnz5rJkyebzMxMExcXZy6++GKzZMmSUiPFjPl5BN/QoUNNUlKSSU5ONtdcc43597//7XVU6tatW83w4cNNenq6iY6ONvXr1zd9+/Y1c+bM8f2L+MW+ffvMNddc47Gf9evXlxrlWtX9OB05csTExMQYSWbz5s2l5i9dutS0a9fOxMXFmczMTPPnP//ZrFixotSoS2/nzBhj5s2bZ7p06WISExNNfHy8ad68uRkz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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for company in customer_sport['number_company']:\n", + " percent_of_na(company, 'profession')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "97326d89-d6f9-4e8f-9395-5c81def3831a", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {