diff --git a/Spectacle/Stat_desc.ipynb b/Spectacle/Stat_desc.ipynb index 7882b36..4ca2fdd 100644 --- a/Spectacle/Stat_desc.ipynb +++ b/Spectacle/Stat_desc.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 13, "id": "aa915888-cede-4eb0-8a26-7df573d29a3e", "metadata": {}, "outputs": [], @@ -29,12 +29,13 @@ "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 re" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 28, "id": "17949e81-c30b-4fdf-9872-d7dc2b22ba9e", "metadata": {}, "outputs": [], @@ -91,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 26, "id": "40b705eb-fd18-436b-b150-61611a3c6a84", "metadata": {}, "outputs": [], @@ -616,7 +617,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 29, "id": "afd044b8-ac83-4a35-b959-700cae0b3b41", "metadata": {}, "outputs": [ @@ -631,8 +632,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -646,8 +646,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -661,8 +660,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -676,8 +674,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n", + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", @@ -688,6 +685,7 @@ "name": "stdout", "output_type": "stream", "text": [ + "Tables imported for tenant 10\n", "File path : projet-bdc2324-team1/0_Input/Company_11/customerplus_cleaned.csv\n" ] }, @@ -695,17 +693,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n", - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File path : projet-bdc2324-team1/0_Input/Company_11/campaigns_information.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "File path : projet-bdc2324-team1/0_Input/Company_11/campaigns_information.csv\n", "File path : projet-bdc2324-team1/0_Input/Company_11/products_purchased_reduced.csv\n" ] }, @@ -713,8 +721,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -728,8 +735,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n", + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", @@ -740,6 +746,7 @@ "name": "stdout", "output_type": "stream", "text": [ + "Tables imported for tenant 11\n", "File path : projet-bdc2324-team1/0_Input/Company_12/customerplus_cleaned.csv\n" ] }, @@ -747,8 +754,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -762,8 +768,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -777,10 +782,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n", - "/tmp/ipykernel_470/3170175140.py:10: DtypeWarning: Columns (4,8,10) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", + ":13: DtypeWarning: Columns (4,8,10) have mixed types. Specify dtype option on import or set low_memory=False.\n" ] }, { @@ -794,8 +797,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n", + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", @@ -806,6 +808,7 @@ "name": "stdout", "output_type": "stream", "text": [ + "Tables imported for tenant 12\n", "File path : projet-bdc2324-team1/0_Input/Company_13/customerplus_cleaned.csv\n" ] }, @@ -813,8 +816,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -828,8 +830,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -843,8 +844,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -858,8 +858,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n", + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", @@ -870,6 +869,7 @@ "name": "stdout", "output_type": "stream", "text": [ + "Tables imported for tenant 13\n", "File path : projet-bdc2324-team1/0_Input/Company_14/customerplus_cleaned.csv\n" ] }, @@ -877,8 +877,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -892,8 +891,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n" ] }, { @@ -907,10 +905,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n", - "/tmp/ipykernel_470/3170175140.py:10: DtypeWarning: Columns (8,9) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n" + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", + ":13: DtypeWarning: Columns (8,9) have mixed types. Specify dtype option on import or set low_memory=False.\n" ] }, { @@ -924,13 +920,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_470/3170175140.py:10: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", - " df = pd.read_csv(file_in, sep=\",\", parse_dates = datetime_col, date_parser=custom_date_parser)\n", + ":13: FutureWarning: The argument 'date_parser' is deprecated and will be removed in a future version. Please use 'date_format' instead, or read your data in as 'object' dtype and then call 'to_datetime'.\n", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n" ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tables imported for tenant 14\n" + ] } ], "source": [ @@ -1209,6 +1211,551 @@ "#target_information_spectacle.isna().sum()" ] }, + { + "cell_type": "markdown", + "id": "81e15508-32ca-46f1-a03d-1febddbbf5b4", + "metadata": {}, + "source": [ + "### Ajout : importation de la table train_set pour faire les stats desc dessus" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3a1fdd6b-ac43-4e90-9a31-4f522bcc44bb", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_444/3450421856.py:9: DtypeWarning: Columns (38) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " train_set_spectacle = pd.read_csv(file_in, sep=\",\")\n" + ] + } + ], + "source": [ + "# importation de la table train_set pour les compagnies de spectacle (ou musique)\n", + "\n", + "S3_ENDPOINT_URL = \"https://\" + os.environ[\"AWS_S3_ENDPOINT\"]\n", + "fs = s3fs.S3FileSystem(client_kwargs={'endpoint_url': S3_ENDPOINT_URL})\n", + "\n", + "path_train_set_spectacle = \"projet-bdc2324-team1/Generalization/musique/Train_set.csv\"\n", + "\n", + "with fs.open(path_train_set_spectacle, mode=\"rb\") as file_in:\n", + " train_set_spectacle = pd.read_csv(file_in, sep=\",\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3a4c1ff4-2861-4e86-99df-26eea0370dc3", + "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_idnb_ticketsnb_purchasestotal_amountnb_suppliersvente_internet_maxpurchase_date_minpurchase_date_maxtime_between_purchasenb_tickets_internet...countrygender_labelgender_femalegender_malegender_othercountry_frnb_campaignsnb_campaigns_openedtime_to_openy_has_purchased
010_2993410.00.00.00.00.0NaNNaNNaN0.0...frmale0101.012.03.00 days 05:47:26.333333333NaN
110_637883.02.062.01.01.0393.205891281.017639112.1882523.0...frfemale1001.03.01.00 days 05:13:511.0
210_7599460.00.00.00.00.0NaNNaNNaN0.0...NaNother001NaN0.00.0NaNNaN
310_206530.00.00.00.00.0NaNNaNNaN0.0...frmale0101.011.010.01 days 00:45:54NaN
410_8247050.00.00.00.00.0NaNNaNNaN0.0...NaNother001NaN0.00.0NaNNaN
\n", + "

5 rows × 40 columns

\n", + "
" + ], + "text/plain": [ + " customer_id nb_tickets nb_purchases total_amount nb_suppliers \\\n", + "0 10_299341 0.0 0.0 0.0 0.0 \n", + "1 10_63788 3.0 2.0 62.0 1.0 \n", + "2 10_759946 0.0 0.0 0.0 0.0 \n", + "3 10_20653 0.0 0.0 0.0 0.0 \n", + "4 10_824705 0.0 0.0 0.0 0.0 \n", + "\n", + " vente_internet_max purchase_date_min purchase_date_max \\\n", + "0 0.0 NaN NaN \n", + "1 1.0 393.205891 281.017639 \n", + "2 0.0 NaN NaN \n", + "3 0.0 NaN NaN \n", + "4 0.0 NaN NaN \n", + "\n", + " time_between_purchase nb_tickets_internet ... country gender_label \\\n", + "0 NaN 0.0 ... fr male \n", + "1 112.188252 3.0 ... fr female \n", + "2 NaN 0.0 ... NaN other \n", + "3 NaN 0.0 ... fr male \n", + "4 NaN 0.0 ... NaN other \n", + "\n", + " gender_female gender_male gender_other country_fr nb_campaigns \\\n", + "0 0 1 0 1.0 12.0 \n", + "1 1 0 0 1.0 3.0 \n", + "2 0 0 1 NaN 0.0 \n", + "3 0 1 0 1.0 11.0 \n", + "4 0 0 1 NaN 0.0 \n", + "\n", + " nb_campaigns_opened time_to_open y_has_purchased \n", + "0 3.0 0 days 05:47:26.333333333 NaN \n", + "1 1.0 0 days 05:13:51 1.0 \n", + "2 0.0 NaN NaN \n", + "3 10.0 1 days 00:45:54 NaN \n", + "4 0.0 NaN NaN \n", + "\n", + "[5 rows x 40 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_set_spectacle.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4632384d-2a06-445d-9fdb-b0c91b37ebaf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 1.])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# on remplace les valeurs has purchased = NaN par des 0\n", + "train_set_spectacle[\"y_has_purchased\"] = train_set_spectacle[\"y_has_purchased\"].fillna(0)\n", + "train_set_spectacle[\"y_has_purchased\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "5fd56696-b479-46c7-8a59-fb8137db5fb5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([10, 11, 12, 13, 14])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# on reproduit une colonne avec le numéro de la compagnie \n", + "\n", + "train_set_spectacle[\"number_company\"] = train_set_spectacle[\"customer_id\"].apply(lambda x : int(re.split(\"_\", str(x))[0]))\n", + "train_set_spectacle[\"number_company\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "91c6e047-43d2-456c-81f1-087026eef4f0", + "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_idnb_ticketsnb_purchasestotal_amountnb_suppliersvente_internet_maxpurchase_date_minpurchase_date_maxtime_between_purchasenb_tickets_internet...gender_labelgender_femalegender_malegender_othercountry_frnb_campaignsnb_campaigns_openedtime_to_openy_has_purchasednumber_company
010_2993410.00.00.00.00.0NaNNaNNaN0.0...male0101.012.03.00 days 05:47:26.3333333330.010
110_637883.02.062.01.01.0393.205891281.017639112.1882523.0...female1001.03.01.00 days 05:13:511.010
210_7599460.00.00.00.00.0NaNNaNNaN0.0...other001NaN0.00.0NaN0.010
310_206530.00.00.00.00.0NaNNaNNaN0.0...male0101.011.010.01 days 00:45:540.010
410_8247050.00.00.00.00.0NaNNaNNaN0.0...other001NaN0.00.0NaN0.010
\n", + "

5 rows × 41 columns

\n", + "
" + ], + "text/plain": [ + " customer_id nb_tickets nb_purchases total_amount nb_suppliers \\\n", + "0 10_299341 0.0 0.0 0.0 0.0 \n", + "1 10_63788 3.0 2.0 62.0 1.0 \n", + "2 10_759946 0.0 0.0 0.0 0.0 \n", + "3 10_20653 0.0 0.0 0.0 0.0 \n", + "4 10_824705 0.0 0.0 0.0 0.0 \n", + "\n", + " vente_internet_max purchase_date_min purchase_date_max \\\n", + "0 0.0 NaN NaN \n", + "1 1.0 393.205891 281.017639 \n", + "2 0.0 NaN NaN \n", + "3 0.0 NaN NaN \n", + "4 0.0 NaN NaN \n", + "\n", + " time_between_purchase nb_tickets_internet ... gender_label \\\n", + "0 NaN 0.0 ... male \n", + "1 112.188252 3.0 ... female \n", + "2 NaN 0.0 ... other \n", + "3 NaN 0.0 ... male \n", + "4 NaN 0.0 ... other \n", + "\n", + " gender_female gender_male gender_other country_fr nb_campaigns \\\n", + "0 0 1 0 1.0 12.0 \n", + "1 1 0 0 1.0 3.0 \n", + "2 0 0 1 NaN 0.0 \n", + "3 0 1 0 1.0 11.0 \n", + "4 0 0 1 NaN 0.0 \n", + "\n", + " nb_campaigns_opened time_to_open y_has_purchased \\\n", + "0 3.0 0 days 05:47:26.333333333 0.0 \n", + "1 1.0 0 days 05:13:51 1.0 \n", + "2 0.0 NaN 0.0 \n", + "3 10.0 1 days 00:45:54 0.0 \n", + "4 0.0 NaN 0.0 \n", + "\n", + " number_company \n", + "0 10 \n", + "1 10 \n", + "2 10 \n", + "3 10 \n", + "4 10 \n", + "\n", + "[5 rows x 41 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_set_spectacle.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21e562d4-035d-4112-9f94-527b7fd935cf", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "fff306c2-1d41-4ef6-867b-ba9a7cf4ee68", @@ -1990,6 +2537,78 @@ "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 37, + "id": "884a33d0-c275-4ab4-ab1f-8b53e563fb95", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " number_compagny already_purchased customer_id\n", + "0 10 True 45264\n", + "1 11 True 35313\n", + "2 12 True 216105\n", + "3 13 True 388731\n", + "4 14 True 101642\n", + " number_compagny already_purchased customer_id\n", + "0 10 False 53530\n", + "1 11 False 35994\n", + "2 12 False 26620\n", + "3 13 False 379005\n", + "4 14 False 241484\n" + ] + } + ], + "source": [ + "# nouveau barplot pr les clients : on regarde la taille totale de la base et on distingue clients ayant acheté / pas acheté\n", + "\n", + "# variable relative à l'achat\n", + "customerplus_clean_spectacle[\"already_purchased\"] = customerplus_clean_spectacle[\"purchase_count\"]>0\n", + "\n", + "nb_customers_purchasing_spectacle = customerplus_clean_spectacle[customerplus_clean_spectacle[\"already_purchased\"]].groupby([\"number_compagny\",\"already_purchased\"])[\"customer_id\"].count().reset_index()\n", + "nb_customers_no_purchase_spectacle = customerplus_clean_spectacle[~customerplus_clean_spectacle[\"already_purchased\"]].groupby([\"number_compagny\",\"already_purchased\"])[\"customer_id\"].count().reset_index()\n", + "\n", + "print(nb_customers_purchasing_spectacle)\n", + "print(nb_customers_no_purchase_spectacle)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "41c9fb5a-708b-4f85-9918-00337151f155", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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pKSiaAKVsKNHj8odAhEREX0g2GPyAVm+fDlatWoFBwcHtflvPpshv+dgaFpmxowZMDc3l15OTk7vHjgRERERlXpMTD4QcXFxOHjwIAYOHCjNU6lUAJCj5yMhIUHqRVGpVEhLS8OTJ0/yLJObCRMmIDExUXrdvXu3wBg5DgO973gMExERvTsmJh+IlStXomzZsmjTpo00z8XFBSqVChEREdK8tLQ0REZGomHDhgCAunXrQk9PT63M/fv3ceXKFalMbpRKJczMzNReecl+5kVBD+Uj0nbZx7Amz3EhIiIidbzH5AOQlZWFlStXom/fvtDV/b9drlAo4O/vj9DQULi6usLV1RWhoaEwMjJCz549AQDm5uYYMGAAAgICYG1tDSsrK4wbNw4eHh5o1qxZkcSno6MDCwsLJCQkAHj1/ImCLiUj0iZCCLx48QIJCQmwsLDQeBhtIiIi+j9MTD4ABw8exJ07d9C/f/8cywIDA5GSkoLhw4fjyZMnqF+/Pg4cOCA9wwQA5syZA11dXXTt2hUpKSlo2rQpVq1aVaQ/vrIvK8tOTojeRxYWFtKxTERERG+HD1ikEqHpA5oyMzORnp5egpERFQ09PT32lJR2fMCi5viAxVKDD1ikksQeE9IqOjo6/HFHRERE9AHize9ERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ7XbkDoJyEEIiMjMSxY8dw+/ZtvHjxAra2tqhduzaaNWsGJycnuUMkIiIiIipS7DHRIikpKQgNDYWTkxNatWqF3377DU+fPoWOjg5u3bqFoKAguLi4oHXr1jh16pTc4RIRERERFRn2mGgRNzc31K9fH0uWLEGLFi2gp6eXo0xcXBw2bNiAbt264bvvvsOgQYNkiJSIiIiIqGgphBBC7iDolStXrsDd3V2jsmlpaYiLi4Orq2sxR1U0kpKSYG5ujsTERJiZ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Nj82Nhbx8fFo3ry5NE+pVMLHxwdRUVEAgPPnzyM9PV2tjIODA9zd3aUyb0pNTUVSUpLai4iIiIgoL7zHREt17NixyOratGkToqOjcfbs2RzL4uPjAQB2dnZq8+3s7BAXFyeV0dfXV+tpyS6T/f43zZgxAyEhIUURPhERERF9AJiYaKmgoKAiqefu3bv46quvcODAARgYGORZ7s1Rv4QQBY4Ell+ZCRMmYOzYsdJ0UlISnJyc3iJyIiIiIvqQ8FIuLfb06VP89NNPmDBhAh4/fgwAiI6Oxj///KNxHefPn0dCQgLq1q0LXV1d6OrqIjIyEvPnz4eurq7UU/Jmz0dCQoK0TKVSIS0tDU+ePMmzzJuUSiXMzMzUXkREREREeWFioqUuXboENzc3hIWFYebMmXj69CkAYMeOHZgwYYLG9TRt2hSXL19GTEyM9PLy8kKvXr0QExODihUrQqVSISIiQnpPWloaIiMj0bBhQwBA3bp1oaenp1bm/v37uHLlilSGiIiIiKgweCmXlho7diz69euH8PBwmJqaSvNbtWqFnj17alyPqakp3N3d1eYZGxvD2tpamu/v74/Q0FC4urrC1dUVoaGhMDIyktZjbm6OAQMGICAgANbW1rCyssK4cePg4eGR42Z6IiIiIqJ3wcRES509exb/+9//csx3dHTM84bzdxUYGIiUlBQMHz5cesDigQMH1BKiOXPmQFdXF127dpUesLhq1Sro6OgUaSxERNrK+eUGuUN4b9yWOwAiei8xMdFSBgYGuQ6xe+PGDdja2haq7qNHj6pNKxQKBAcHIzg4ON94FixYgAULFhRq3UREREREueE9JlqqQ4cOmDJlCtLT0wG8Sh7u3LmDb775Bp07d5Y5OiIiIiKiosXEREvNnDkTDx48QNmyZZGSkgIfHx9UrlwZpqammD59utzhEREREREVKV7KpaXMzMxw/PhxHD58GNHR0cjKykKdOnV4szkRERERlUpMTLRckyZN0KRJE7nDICIiIiIqVkxMtMj8+fMxePBgGBgYYP78+fmWHT16dAlFRURERERU/JiYaJE5c+agV69eMDAwwJw5c/Isp1AomJgQERERUanCxESLxMbG5vp/IiIiIqLSjqNyERERERGR7NhjokXGjh2rcdnZs2cXYyRERERERCWLiYkWuXDhgkblFApFMUdCRERERFSymJhokSNHjsgdAhERERGRLHiPiZZKTEzE48ePc8x//PgxkpKSZIiIiIiIiKj4MDHRUt27d8emTZtyzN+yZQu6d+8uQ0RERERERMWHiYmWOn36NBo3bpxjvq+vL06fPi1DRERERERExYeJiZZKTU1FRkZGjvnp6elISUmRISIiIiIiouLDxERLffTRR1i6dGmO+UuWLEHdunVliIiIiIiIqPhwVC4tNX36dDRr1gwXL15E06ZNAQCHDh3C2bNnceDAAZmjIyIiIiIqWuwx0VLe3t44efIknJycsGXLFuzatQuVK1fGpUuX8Omnn8odHhERERFRkWKPiRarVasW1q9fL3cYRERERETFjokJERERaa9gc7kjeH8EJ8odAVGh8FIuIiIiIiKSHRMTIiIiIiKSHRMTIiIiIiKSHRMTLXfr1i3s379feqiiEELmiIiIiIiIih4TEy316NEjNGvWDG5ubmjdujXu378PABg4cCACAgJkjo6IiIiIqGgxMdFSY8aMga6uLu7cuQMjIyNpfrdu3bBv3z4ZIyMiIiIiKnocLlhLHThwAPv370e5cuXU5ru6uiIuLk6mqIiIiIiIigd7TLRUcnKyWk9JtocPH0KpVMoQERERERFR8WFioqUaNWqENWvWSNMKhQJZWVn44Ycf0LhxYxkjIyIiIiIqeryUS0v98MMP8PX1xblz55CWlobAwEBcvXoVjx8/xokTJ+QOj4iIiIioSLHHREtVr14dly5dQr169eDn54fk5GR06tQJFy5cQKVKleQOj4iIiIioSLHHRIupVCqEhITIHQYRERERUbFjYqJFLl26pHFZT0/PYoyEiIiIiKhkMTHRIrVq1YJCoYAQAgqFQpqf/bT31+dlZmaWeHxERERERMWF95hokdjYWPz999+IjY3Ftm3b4OLigkWLFiEmJgYxMTFYtGgRKlWqhG3btskdKhERERFRkWJiokUqVKggvUJDQzF//nwMGTIEnp6e8PT0xJAhQzB37lxMnTpV4zoXL14MT09PmJmZwczMDA0aNMDevXul5UIIBAcHw8HBAYaGhvD19cXVq1fV6khNTcWoUaNgY2MDY2NjtG/fHvfu3SuydhMRERERMTHRUpcvX4aLi0uO+S4uLrh27ZrG9ZQrVw7ff/89zp07h3PnzqFJkybo0KGDlHyEh4dj9uzZWLhwIc6ePQuVSgU/Pz88e/ZMqsPf3x87duzApk2bcPz4cTx//hxt27bl5WREREREVGSYmGipatWqYdq0aXj58qU0LzU1FdOmTUO1atU0rqddu3Zo3bo13Nzc4ObmhunTp8PExASnTp2CEAJz587FxIkT0alTJ7i7u2P16tV48eIFNmzYAABITEzE8uXLMWvWLDRr1gy1a9fGunXrcPnyZRw8eLDI201EREREHybe/K6llixZgnbt2sHJyQk1a9YEAFy8eBEKhQK7d+9+pzozMzOxdetWJCcno0GDBoiNjUV8fDyaN28ulVEqlfDx8UFUVBSGDBmC8+fPIz09Xa2Mg4MD3N3dERUVhRYtWuS6rtTUVKSmpkrTSUlJ7xQzEREREX0YmJhoqXr16iE2Nhbr1q3DH3/8ASEEunXrhp49e8LY2Pit6rp8+TIaNGiAly9fwsTEBDt27ED16tURFRUFALCzs1Mrb2dnh7i4OABAfHw89PX1YWlpmaNMfHx8nuucMWMGn8FCRERERBpjYqLFjIyMMHjw4ELXU6VKFcTExODp06fYtm0b+vbti8jISGn568MQA8gxXHFuCiozYcIEjB07VppOSkqCk5PTO7aAiIiIiEo73mPyAdDX10flypXh5eWFGTNmoGbNmpg3bx5UKhUA5Oj5SEhIkHpRVCoV0tLS8OTJkzzL5EapVEojgWW/iIiIiIjywsTkAySEQGpqKlxcXKBSqRARESEtS0tLQ2RkJBo2bAgAqFu3LvT09NTK3L9/H1euXJHKEBEREREVFi/lKuW+/fZbtGrVCk5OTnj27Bk2bdqEo0ePYt++fVAoFPD390doaChcXV3h6uqK0NBQGBkZoWfPngAAc3NzDBgwAAEBAbC2toaVlRXGjRsHDw8PNGvWTObWEREREVFpwcSklPvvv//Qu3dv3L9/H+bm5vD09MS+ffvg5+cHAAgMDERKSgqGDx+OJ0+eoH79+jhw4ABMTU2lOubMmQNdXV107doVKSkpaNq0KVatWgUdHR25mkVEREREpYxCCCHkDoJy9/TpU/z888/466+/8PXXX8PKygrR0dGws7ODo6Oj3OG9laSkJJibmyMxMZH3mxDRe8n5m9/kDuG9cfv7NkVXWbB50dVV2gUnFnmV/P6mksQeEy116dIlNGvWDObm5rh9+zYGDRoEKysr7NixA3FxcVizZo3cIRIRERERFRne/K6lxo4di379+uHmzZswMDCQ5rdq1Qq///67jJERERERERU9JiZa6uzZsxgyZEiO+Y6Ojvk+2JCIiIiI6H3ExERLGRgYICkpKcf8GzduwNbWVoaIiIiIiIiKDxMTLdWhQwdMmTIF6enpAF49nf3OnTv45ptv0LlzZ5mjIyIiIiIqWkxMtNTMmTPx4MEDlC1bFikpKfDx8UHlypVhamqK6dOnyx0eEREREVGR4qhcWsrMzAzHjx/H4cOHER0djaysLNSpU4cPNSQiIiKiUomJiRbKyMiAgYEBYmJi0KRJEzRp0kTukIiIiIiIihUv5dJCurq6qFChAjIzM+UOhYiIiIioRDAx0VLfffcdJkyYgMePH8sdChERERFRseOlXFpq/vz5uHXrFhwcHFChQgUYGxurLY+OjpYpMiIiIiKiosfEREt17NhR7hCIiIiIiEoMExMtFRQUJHcIREREREQlhomJljt37hyuX78OhUKBatWqoW7dunKHRERERERU5JiYaKl79+6hR48eOHHiBCwsLAAAT58+RcOGDbFx40Y4OTnJGyARERERURHiqFxaqn///khPT8f169fx+PFjPH78GNevX4cQAgMGDJA7PCIiIiKiIsUeEy117NgxREVFoUqVKtK8KlWqYMGCBfD29pYxMiIiIiKiosceEy1Vvnx5pKen55ifkZEBR0dHGSIiIiIiIio+TEy0VHh4OEaNGoVz585BCAHg1Y3wX331FWbOnClzdERERERERYuXcmkRS0tLKBQKaTo5ORn169eHru6r3ZSRkQFdXV3079+fzzkh+pAFm8sdwfsjOFHuCIiISENMTLTI3Llz5Q6BiIiIiEgWTEy0SN++feUOgYiIiIhIFkxMtFxCQgISEhKQlZWlNt/T01OmiIiIiIiIih4TEy11/vx59O3bV3p2yesUCgUyMzNlioyIiIiIqOgxMdFSX375Jdzc3LB8+XLY2dmp3RRPRERERFTaMDHRUrGxsdi+fTsqV64sdyhERERERMWOzzHRUk2bNsXFixflDoOIiIiIqESwx0RL/fTTT+jbty+uXLkCd3d36OnpqS1v3769TJERERERERU9JiZaKioqCsePH8fevXtzLOPN70RERERU2vBSLi01evRo9O7dG/fv30dWVpbai0kJEREREZU2TEy01KNHjzBmzBjY2dnJHQoRERERUbFjYqKl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sGHDBgwZMgSJiYlYvnw51q5di2bNmgEA1q1bBycnJxw8eBAtWrQosbYQERERUenFxOQDFhsbi/j4eDRv3lyap1Qq4ePjg6ioKAwZMgTnz59Henq6WhkHBwe4u7sjKioqz8QkNTUVqamp0nRSUlLxNYSIiEot55cb5A7hvXFb7gCIComJyQcsPj4eAGBnZ6c2387ODnFxcVIZfX19WFpa5iiT/f7czJgxAyEhIUUccT6CzUtuXe+74ES5IyAiIiLKgfeYEBQKhdq0ECLHvDcVVGbChAlITEyUXnfv3i2SWImIiIiodGJi8gFTqVQAkKPnIyEhQepFUalUSEtLw5MnT/IskxulUgkzMzO1FxERERFRXpiYfMBcXFygUqkQEREhzUtLS0NkZCQaNmwIAKhbty709PTUyty/fx9XrlyRyhARERERFRbvMSnlnj9/jlu3bknTsbGxiImJgZWVFcqXLw9/f3+EhobC1dUVrq6uCA0NhZGREXr27AkAMDc3x4ABAxAQEABra2tYWVlh3Lhx8PDwkEbpIiIiIiIqLCYmpdy5c+fQuHFjaXrs2LEAgL59+2LVqlUIDAxESkoKhg8fjidPnqB+/fo4cOAATE1NpffMmTMHurq66Nq1K1JSUtC0aVOsWrUKOjo6Jd4eIiIiIiqdmJiUcr6+vhBC5LlcoVAgODgYwcHBeZYxMDDAggULsGDBgmKIkIiIiIiI95gQEREREZEWYGJCRERERESyY2JCRERERESyY2JCRERERESyY2JCRERERESyY2JCRERERESy43DBRPTugs3ljuD9EZwodwRERERajT0mREREREQkOyYmREREREQkOyYmREREREQkOyYmREREREQkOyYmREREREQkOyYmREREREQkOyYmREREREQkOyYmREREREQkOyYmREREREQkOyYmREREREQkOyYmREREREQkO125AyAqCs4vN8gdwnvjttwBEBEREeWCPSZERERERCQ7JiZERERERCQ7JiZERERERCQ7JiZERERERCQ73vxORO+Mgw5o7rbcARAREWk59pgQEREREZHsmJgQEREREZHsmJgQEREREZHsmJgQEREREZHsmJgQEREREZHsmJgQEREREZHsmJgQEREREZHsmJgQEREREZHsmJgQEREREZHsmJgQEREREZHsmJjQW1m0aBFcXFxgYGCAunXr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EcmOiQkREREREcmOiQkREREREcmOiQkRUSkSHx+PUaNGoWLFilAqlXByckK7du1w6NAhuUMjIiLKl67cARARUdG4ffs2vL29YWFhgfDwcHh6eiI9PR379+/HiBEj8Mcff8gdIhERUZ7YY0JEVEoMHz4cCoUCZ86cQZcuXeDm5oYaNWpg7NixOHXqFADgzp076NChA0xMTGBmZoauXbviv//+k+oIDg5GrVq1sGLFCpQvXx4mJiYYNmwYMjMzER4eDpVKhbJly2L69Olq61YoFFi8eDFatWoFQ0NDuLi4YOvWrWplxo8fDzc3NxgZGaFixYqYNGkS0tPTc6x77dq1cHZ2hrm5Obp3745nz54BANasWQNra2ukpqaq1du5c2f06dOnSLclERGVPCYmRESlwOPHj7Fv3z6MGDECxsbGOZZbWFhACIGOHTvi8ePHiIyMREREBP766y9069ZNrexff/2FvXv3Yt++fdi4cSNWrFiBNm3a4N69e4iMjERYWBi+++47KdnJNmnSJHTu3BkXL17EF198gR49euD69evSclNTU6xatQrXrl3DvHnzsGzZMsyZMyfHunfu3Indu3dj9+7diIyMxPfffw8A+Pzzz5GZmYlff/1VKv/w4UPs3r0bX375ZaG3IRERyUwQEdF77/Tp0wKA2L59e55lDhw4IHR0dMSdO3ekeVevXhUAxJkzZ4QQQgQFBQkjIyORlJQklWnRooVwdnYWmZmZ0rwqVaqIGTNmSNMAxNChQ9XWV79+fTFs2LA84wkPDxd169aVpnNb99dffy3q168vTQ8bNky0atVKmp47d66oWLGiyMrKynM9RET0fuA9JkREpYAQAsCrS6rycv36dTg5OcHJyUmaV716dVhYWOD69ev46KOPAADOzs4wNTWVytjZ2UFHRwdlypRRm5eQkKBWf4MGDXJMx8TESNM///wz5s6di1u3buH58+fIyMiAmZmZ2nveXLe9vb3aegYNGoSPPvoI//zzDxwdHbFy5Ur069cv33YTEdH7gZdyERGVAq6urlAoFGqXTr1JCJHrD/g35+vp6aktVygUuc7LysoqMK7sek+dOoXu3bujVatW2L17Ny5cuICJEyciLS1NrXxB66lduzZq1qyJNWvWIDo6GpcvX0a/fv0KjIOIiLQfExMiolLAysoKLVq0wI8//ojk5OQcy58+fYrq1avjzp07uHv3rjT/2rVrSExMRLVq1Qodw5v3nJw6dQpVq1YFAJw4cQIVKlTAxIkT4eXlBVdXV8TFxb3TegYOHIiVK1dixYoVaNasmVoPEBERvb+YmBARlRKLFi1CZmYm6tWrh23btuHmzZu4fv065s+fjwYNGqBZs2bw9PREr169EB0djTNnzqBPnz7w8fGBl5dXode/detWrFixAn/++SeCgoJw5swZjBw5EgBQuXJl3LlzB5s2bcJff/2F+fPnY8eOHe+0nl69euGff/7BsmXL0L9//0LHTURE2oGJCRFRKeHi4oLo6Gg0btwYAQEBcHd3h5+fHw4dOoTFixdDoVBg586dsLS0RKNGjdCsWTNUrFgRmzdvLpL1h4SEYNOmTfD09MTq1auxfv16VK9eHQDQoUMHjBkzBiNHjkStWrUQFRWFSZMmvdN6zMzM0LlzZ5iYmKBjx45FEjsREclPIbLvmCQiInpHCoUCO3bsKLFEwc/PD9WqVcP8+fNLZH1ERFT8OCoXERG9Nx4/fowDBw7g8OHDWLhwodzhEBFREWJiQkRE7406dergyZMnCAsLQ5UqVeQOh4iIihAv5SIiIiIiItnx5nciIiIiIpIdExMiIiIiIpIdExMiIiIiIpIdExMiIiIiIpIdExMiIiIiIpIdExMiIiIiIpIdExMiIiIiIpIdExMiIiIiIpIdExMiIiIiIpLd/wPAKkBbBtKw7gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Création du barplot\n", + "plt.bar(nb_customers_purchasing_spectacle[\"number_compagny\"], nb_customers_purchasing_spectacle[\"customer_id\"]/1000, label = \"has purchased\")\n", + "plt.bar(nb_customers_no_purchase_spectacle[\"number_compagny\"], nb_customers_no_purchase_spectacle[\"customer_id\"]/1000, \n", + " bottom = nb_customers_purchasing_spectacle[\"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 spectacle\")\n", + "plt.legend()\n", + "\n", + "# Affichage du barplot\n", + "plt.show()\n" + ] + }, { "cell_type": "code", "execution_count": 152, @@ -3219,6 +3838,1080 @@ "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 44, + "id": "91b743c4-5473-41e1-b97e-cf06904f0fa8", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
number_companyy_has_purchasedopt_in
0100.00.226815
1101.00.456172
2110.00.086818
3111.00.000347
4120.00.387308
5121.00.000461
6130.00.125966
7131.00.167097
8140.00.777891
9141.00.175614
\n", + "
" + ], + "text/plain": [ + " number_company y_has_purchased opt_in\n", + "0 10 0.0 0.226815\n", + "1 10 1.0 0.456172\n", + "2 11 0.0 0.086818\n", + "3 11 1.0 0.000347\n", + "4 12 0.0 0.387308\n", + "5 12 1.0 0.000461\n", + "6 13 0.0 0.125966\n", + "7 13 1.0 0.167097\n", + "8 14 0.0 0.777891\n", + "9 14 1.0 0.175614" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# on refait le graphique sur train set \n", + "\n", + "df_graph = train_set_spectacle.groupby([\"number_company\", \"y_has_purchased\"])[\"opt_in\"].mean().reset_index()\n", + "df_graph" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "728e0021-4f95-4601-bb01-032db2cf6571", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.43578991448407206\n", + "0.2889600758160463\n" + ] + } + ], + "source": [ + "# pourquoi une telle différence sur la variable opt in ??\n", + "print(train_set_spectacle[\"opt_in\"].mean())\n", + "print(customerplus_clean_spectacle[\"opt_in\"].mean())" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "274b4bc5-277f-476a-8bc1-c1764b1df2de", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.8473746548562269\n", + "0.7573747808905485\n" + ] + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "e1d837e1-c445-424b-867a-48b1e790f703", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "genre = homme : \n", + "0.3175633912091978\n", + "0.3103916287323914\n", + "email vérifié : \n", + "0.9581971527197163\n", + "0.9360131470484772\n", + "nationalité française : \n", + "0.8473746548562269\n", + "0.7573747808905485\n", + "nbre d'achats : \n", + "2.925387603847428\n", + "1.968932616126136\n" + ] + } + ], + "source": [ + "# pour les autres variables, la distribution semble similaire\n", + "\n", + "print(\"genre = homme : \")\n", + "print(train_set_spectacle[\"gender_male\"].mean())\n", + "print(customerplus_clean_spectacle[\"gender_male\"].mean())\n", + "\n", + "print(\"email vérifié : \")\n", + "print(train_set_spectacle[\"is_email_true\"].mean())\n", + "print(customerplus_clean_spectacle[\"is_email_true\"].mean())\n", + "\n", + "print(\"nationalité française : \")\n", + "print(train_set_spectacle[\"country_fr\"].mean())\n", + "print(customerplus_clean_spectacle[\"country_fr\"].mean())\n", + "\n", + "# sauf pr nbre d'achats - à verif\n", + "print(\"nbre d'achats : \")\n", + "print(train_set_spectacle[\"purchase_count\"].mean())\n", + "print(customerplus_clean_spectacle[\"purchase_count\"].mean())" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "ec31d69c-846e-4d52-9ea9-f6712187b028", + "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_frnumber_compagnyalready_purchased
0821538139NaNNaN0875FalseNaN2True...0NaNNaNother001NaN10False
18091261063NaNNaN0875FalseNaN2True...0NaNfrother0011.010False
2110051063NaNNaN0875FalseNaN2False...14NaNfrother0011.010True
31766312731NaNNaN0875FalseNaN0False...1NaNfrfemale1001.010True
43810012395NaNNaN0875FalseNaN0True...1NaNfrfemale1001.010True
..................................................................
3431214667645122NaN1534181.00862FalseNaN2True...0NaNNaNother001NaN14False
3431224667649122NaN1534177.00862FalseNaN2True...0NaNNaNother001NaN14False
3431234667660122NaN1534165.00862FalseNaN0True...0NaNNaNfemale100NaN14False
3431244667679122NaN1534132.00862FalseNaN2True...0NaNNaNother001NaN14False
3431254667686122NaN1567949.00862FalseNaN0True...0NaNNaNfemale100NaN14False
\n", + "

1523688 rows × 29 columns

\n", + "
" + ], + "text/plain": [ + " customer_id street_id structure_id mcp_contact_id fidelity \\\n", + "0 821538 139 NaN NaN 0 \n", + "1 809126 1063 NaN NaN 0 \n", + "2 11005 1063 NaN NaN 0 \n", + "3 17663 12731 NaN NaN 0 \n", + "4 38100 12395 NaN NaN 0 \n", + "... ... ... ... ... ... \n", + "343121 4667645 122 NaN 1534181.0 0 \n", + "343122 4667649 122 NaN 1534177.0 0 \n", + "343123 4667660 122 NaN 1534165.0 0 \n", + "343124 4667679 122 NaN 1534132.0 0 \n", + "343125 4667686 122 NaN 1567949.0 0 \n", + "\n", + " tenant_id is_partner deleted_at gender is_email_true ... \\\n", + "0 875 False NaN 2 True ... \n", + "1 875 False NaN 2 True ... \n", + "2 875 False NaN 2 False ... \n", + "3 875 False NaN 0 False ... \n", + "4 875 False NaN 0 True ... \n", + "... ... ... ... ... ... ... \n", + "343121 862 False NaN 2 True ... \n", + "343122 862 False NaN 2 True ... \n", + "343123 862 False NaN 0 True ... \n", + "343124 862 False NaN 2 True ... \n", + "343125 862 False NaN 0 True ... \n", + "\n", + " purchase_count first_buying_date country gender_label \\\n", + "0 0 NaN NaN other \n", + "1 0 NaN fr other \n", + "2 14 NaN fr other \n", + "3 1 NaN fr female \n", + "4 1 NaN fr female \n", + "... ... ... ... ... \n", + "343121 0 NaN NaN other \n", + "343122 0 NaN NaN other \n", + "343123 0 NaN NaN female \n", + "343124 0 NaN NaN other \n", + "343125 0 NaN NaN female \n", + "\n", + " gender_female gender_male gender_other country_fr number_compagny \\\n", + "0 0 0 1 NaN 10 \n", + "1 0 0 1 1.0 10 \n", + "2 0 0 1 1.0 10 \n", + "3 1 0 0 1.0 10 \n", + "4 1 0 0 1.0 10 \n", + "... ... ... ... ... ... \n", + "343121 0 0 1 NaN 14 \n", + "343122 0 0 1 NaN 14 \n", + "343123 1 0 0 NaN 14 \n", + "343124 0 0 1 NaN 14 \n", + "343125 1 0 0 NaN 14 \n", + "\n", + " already_purchased \n", + "0 False \n", + "1 False \n", + "2 True \n", + "3 True \n", + "4 True \n", + "... ... \n", + "343121 False \n", + "343122 False \n", + "343123 False \n", + "343124 False \n", + "343125 False \n", + "\n", + "[1523688 rows x 29 columns]" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customerplus_clean_spectacle" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "e8872cac-bde9-41ad-9297-0f2e02c7f0e8", + "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_idnb_ticketsnb_purchasestotal_amountnb_suppliersvente_internet_maxpurchase_date_minpurchase_date_maxtime_between_purchasenb_tickets_internet...gender_labelgender_femalegender_malegender_othercountry_frnb_campaignsnb_campaigns_openedtime_to_openy_has_purchasednumber_company
010_2993410.00.00.00.00.0NaNNaNNaN0.0...male0101.012.03.00 days 05:47:26.3333333330.010
110_637883.02.062.01.01.0393.205891281.017639112.1882523.0...female1001.03.01.00 days 05:13:511.010
210_7599460.00.00.00.00.0NaNNaNNaN0.0...other001NaN0.00.0NaN0.010
310_206530.00.00.00.00.0NaNNaNNaN0.0...male0101.011.010.01 days 00:45:540.010
410_8247050.00.00.00.00.0NaNNaNNaN0.0...other001NaN0.00.0NaN0.010
..................................................................
69729214_1199500.00.00.00.00.0NaNNaNNaN0.0...male0101.00.00.0NaN0.014
69729314_9380.00.00.00.00.0NaNNaNNaN0.0...male0101.00.00.0NaN0.014
69729414_50047070.00.00.00.00.0NaNNaNNaN0.0...male0101.02.01.02 days 16:42:510.014
69729514_1081840.00.00.00.00.0NaNNaNNaN0.0...other0011.00.00.0NaN0.014
69729614_46639810.00.00.00.00.0NaNNaNNaN0.0...other001NaN0.00.0NaN0.014
\n", + "

697297 rows × 41 columns

\n", + "
" + ], + "text/plain": [ + " customer_id nb_tickets nb_purchases total_amount nb_suppliers \\\n", + "0 10_299341 0.0 0.0 0.0 0.0 \n", + "1 10_63788 3.0 2.0 62.0 1.0 \n", + "2 10_759946 0.0 0.0 0.0 0.0 \n", + "3 10_20653 0.0 0.0 0.0 0.0 \n", + "4 10_824705 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "697292 14_119950 0.0 0.0 0.0 0.0 \n", + "697293 14_938 0.0 0.0 0.0 0.0 \n", + "697294 14_5004707 0.0 0.0 0.0 0.0 \n", + "697295 14_108184 0.0 0.0 0.0 0.0 \n", + "697296 14_4663981 0.0 0.0 0.0 0.0 \n", + "\n", + " vente_internet_max purchase_date_min purchase_date_max \\\n", + "0 0.0 NaN NaN \n", + "1 1.0 393.205891 281.017639 \n", + "2 0.0 NaN NaN \n", + "3 0.0 NaN NaN \n", + "4 0.0 NaN NaN \n", + "... ... ... ... \n", + "697292 0.0 NaN NaN \n", + "697293 0.0 NaN NaN \n", + "697294 0.0 NaN NaN \n", + "697295 0.0 NaN NaN \n", + "697296 0.0 NaN NaN \n", + "\n", + " time_between_purchase nb_tickets_internet ... gender_label \\\n", + "0 NaN 0.0 ... male \n", + "1 112.188252 3.0 ... female \n", + "2 NaN 0.0 ... other \n", + "3 NaN 0.0 ... male \n", + "4 NaN 0.0 ... other \n", + "... ... ... ... ... \n", + "697292 NaN 0.0 ... male \n", + "697293 NaN 0.0 ... male \n", + "697294 NaN 0.0 ... male \n", + "697295 NaN 0.0 ... other \n", + "697296 NaN 0.0 ... other \n", + "\n", + " gender_female gender_male gender_other country_fr nb_campaigns \\\n", + "0 0 1 0 1.0 12.0 \n", + "1 1 0 0 1.0 3.0 \n", + "2 0 0 1 NaN 0.0 \n", + "3 0 1 0 1.0 11.0 \n", + "4 0 0 1 NaN 0.0 \n", + "... ... ... ... ... ... \n", + "697292 0 1 0 1.0 0.0 \n", + "697293 0 1 0 1.0 0.0 \n", + "697294 0 1 0 1.0 2.0 \n", + "697295 0 0 1 1.0 0.0 \n", + "697296 0 0 1 NaN 0.0 \n", + "\n", + " nb_campaigns_opened time_to_open y_has_purchased \\\n", + "0 3.0 0 days 05:47:26.333333333 0.0 \n", + "1 1.0 0 days 05:13:51 1.0 \n", + "2 0.0 NaN 0.0 \n", + "3 10.0 1 days 00:45:54 0.0 \n", + "4 0.0 NaN 0.0 \n", + "... ... ... ... \n", + "697292 0.0 NaN 0.0 \n", + "697293 0.0 NaN 0.0 \n", + "697294 1.0 2 days 16:42:51 0.0 \n", + "697295 0.0 NaN 0.0 \n", + "697296 0.0 NaN 0.0 \n", + "\n", + " number_company \n", + "0 10 \n", + "1 10 \n", + "2 10 \n", + "3 10 \n", + "4 10 \n", + "... ... \n", + "697292 14 \n", + "697293 14 \n", + "697294 14 \n", + "697295 14 \n", + "697296 14 \n", + "\n", + "[697297 rows x 41 columns]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_set_spectacle" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "d972ade5-974a-4fc9-8f83-bdf8503e1469", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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DRtqzpw58vHx0aJFi/TEE08oLS3thr/EXbt2TW3bttWPP/6o6OhoNW/eXNeuXdO2bdt0/PhxNW7cWIZhqHPnzlq7dq1GjRqlpk2bau/evRozZoy2bt2qrVu3Wvz1b8+ePRo6dKhGjhwpf39/ffzxx3r66adVuXJlNWvWTJI0ZMgQffbZZxo/frzq1aunS5cu6eeff9bZs2dv+byeeeYZtW/fXgsWLNCJEyf06quv6qmnntK6desk/TM847HHHpOPj49mzZolSea609LSFBERoZMnT+q1115T7dq1tX//fr355pvat2+f1qxZY/GL+PLly7V7925NmjRJJpNJI0aMUPv27dWnTx/9/vvvmjlzplJSUjRkyBB17dpVCQkJ5u0///xz9e7dW4888ojmz58vJycnffDBB2rdurW+++47tWjRwuK8unbtqieeeEJPP/209u3bp1GjRkmSOXxu3brVpr4l2dafb9f777+v2rVr6/3339fff/+toUOHqmPHjmrYsKGcnJz0ySef6NixYxo2bJieeeYZLVu2zLzt4cOH1a5dO0VHR8vDw0O//PKLJk+erB07dpjf14Jws74jSf369dPixYs1fPhwNW/eXAcOHNCjjz6q1NTUm+5/0aJFGjRokF588UW98847KlWqlH777TcdOHDAvE5SUpIeeOABlSpVSm+++abuvfdebd26VePHj9fRo0c1b968PPd/6NAhNW7cWOXLl9eMGTPk5+enzz//XH379tWff/6p4cOHW6z/2muvqUmTJvr444+VmpqqESNGqGPHjjp48KAcHBxseu3y25979eqlXbt2acKECapSpYr+/vtv7dq1y+JnPjd79uzRQw89pLJly+qtt95SeHi4Tp8+rWXLlikjI0MuLi63dP5RUVGKi4vT0aNHNWzYMD355JNydHRUnTp1tHDhQu3evVuvvfaavLy8NGPGDIvtly1bpvXr1+utt96Sh4eHZs2aZd7+sccekySdO3dOkjRmzBgFBATo4sWL+uabbxQZGam1a9ea/5hx6dIlRUVF6dy5c5o8ebIqV66sVatW5fpZL0lXr15Vp06d9PTTT2vo0KH64YcfNG7cOPn4+NzwZze//Ss/fTUv3377rZo1a6ZSpf7vb+WzZs3Sc889pyNHjuibb77JdbsZM2aoSpUqeuedd+Tt7a3w8HClp6fr3LlzGjZs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z52goCCL+vN7vvllS39evHix+vTpo48//liNGjWSr6+vevfuned9l5J0/vx5ZWZm3nSiDlvP/1b7ZDbrz+Hr27KPNXXqVD3//PNq2LChvv76a23btk3x8fFq06aNxeuc12d9bm2S5O7uLldXV4s2FxeXHDVay2//yk9fzU32OVnXlh+5vXdLlixRt27dVKFCBX3++efaunWr4uPj1b9//5uea7Zb7ec366u38jl+I66urgX+uYuij3uUUKxUr17dPOudtUWLFsnJyUnLly+3+E8gr+mY83NT+c34+flpx44dOdqtf6koW7asJGnUqFHq0qVLrvuqWrVqnscpV66cNm3apKysrDzDkp+fn65du6YzZ85YhCXDMJSUlKR//etfNz0fax4eHho7dqzGjh2rP//803x1qWPHjvrll19u+7xsVbZsWbm5ueWYdOL65QV1HEl677338pyVKq9fkAqKLf3ZxcUlx03iUs5fPAvDunXrdOrUKW3YsMF8FUlSrtPsFrbsX7j+/PNPVahQwdx+7dq1fL8W/fr1U79+/XTp0iX98MMPGjNmjDp06KBff/1VISEhKlu2rGrXrq0JEybkun32L/151Xf69Okc7dl/5S+o/mvNlv5ctmxZTZ8+XdOnT9fx48e1bNkyjRw5UsnJyXnOkubr6ysHBweLqzS5udPnn1u4y27L7iuff/65IiMjNXv2bIv1rG/az+9n/e2ypX/drK/mtX9JNgWEbLn9n/n5558rLCxMixcvtlie2+dRQbtZXy3oz/Hz588X2s8oii6CEkqM7C+ivf7mz8uXL+uzzz6zaT/WV1VuJCoqSl9++aWWLVtmMXxgwYIFFutVrVpV4eHh2rNnj2JjY22qR/pnqNjChQsVFxeX5/C7Fi1aaMqUKfr888/1yiuvmNu//vprXbp0KcfkA7by9/dX3759tWfPHk2fPl1paWm3fV55yes96NChg2JjY+Xn56ewsLACO561Jk2aqHTp0jpw4IAGDx5cYPu1pW/Z0p9DQ0O1d+9ei7Z169blGIpUGLJ/ObKeJviDDz4o9GNby56EZPHixapfv765/T//+U++ZqS7noeHh9q2bauMjAx17txZ+/fvV0hIiDp06KAVK1bo3nvvVZkyZWzaZ4sWLfTNN9/o1KlTFr/wfvrpp3J3dy+0qaJvtT9XrFhRgwcP1tq1a7V58+Y813Nzc1NERIS++uorTZgwIc9fJu/0+a9du1Z//vmn+ZfhzMxMLV68WPfee6/56pfJZMrRd/fu3autW7daDBGMiIjQl19+qZUrV5qHwUnKMYve7bqV/pVXX81NSEiI3NzcdOTIkRzLbPl8ymYymeTs7GwRkpKSknKd9a4w5dZXben3N7uKderUKV25csViggfcHQhKKDHat2+vqVOnqkePHnruued09uxZvfPOOzZ9z4Mk1apVSxs2bND//vc/BQYGysvLK8+rIr1799a0adPUu3dvTZgwQeHh4VqxYoW+++67HOt+8MEHatu2rVq3bq2+ffuqQoUKOnfunA4ePKhdu3bpq6++yrOmJ598UvPmzdPAgQN16NAhRUVFKSsrS9u3b1f16tXVvXt3tWzZUq1bt9aIESOUmpqqJk2amGe9q1evnnr16mXT6yBJDRs2VIcOHVS7dm2VKVNGBw8e1GeffaZGjRrJ3d39ts8rL7Vq1dKiRYu0ePFiVapUSa6urqpVq5aio6P19ddfq1mzZnrllVdUu3ZtZWVl6fjx4/r+++81dOhQNWzY0ObjWfP09NR7772nPn366Ny5c3rsscdUvnx5nTlzRnv27NGZM2dy/AU6v+eV375lS3/u1auX3njjDb355puKiIjQgQMHNHPmTPn4+Nhco60aN26sMmXKaODAgRozZoycnJz0xRdfaM+ePYV+bGs1atTQk08+qXfffVcODg5q3ry59u/fr3fffVc+Pj43HLoqSc8++6zc3NzUpEkTBQYGKikpSRMnTpSPj4/5iuxbb72l1atXq3HjxnrppZdUtWpVXblyRUePHtWKFSs0Z86cPIegjRkzxnwPyptvvilfX1998cUX+vbbbzVlypRCe7/y259TUlIUFRWlHj16qFq1avLy8lJ8fLxWrVqV5xXjbFOnTtVDDz2khg0bauTIkapcubL+/PNPLVu2TB988IG8vLzu+PmXLVtWzZs31xtvvGGe9e6XX36xCDcdOnTQuHHjNGbMGEVEROjQoUN66623FBYWZhGu+/Tpo2nTpumpp57S+PHjVblyZa1cudL8WX+zvpVf+e1f+emruXF2dlajRo20bdu2HMtq1aqlJUuWaPbs2br//vtVqlSpPEdwZMv+mo1Bgwbpscce04kTJzRu3DgFBgaah2gXhvz0VVs+x2vVqiVJ+ve//60+ffrI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Yj3rqzyGYeR55WfUqFFKSUkxP06cOHHTOvirN1Bw+HkCAAAlgV2vKL366qsaOXKkunfvLkmqVauWjh07pokTJ6pPnz4KCAiQ9M+VpcDAQPN2ycnJOa4yZXNxcZGLi0vhFw8AAACgxLLrn37T0tJy/PXZwcHBPD14WFiYAgICtHr1avPyjIwMbdy4UY0bN76jtQIAAAC4e9j1ilLHjh01YcIEVaxYUTVq1NDu3bs1depU9e/fX9I/Q+6io6MVGxur8PBwhYeHKzY2Vu7u7urRo0eh1hY68ttC3f/1jk5qf8eOVdz17dtXf//9t5YuXWrvUgAAAFCC2TUovffee3rjjTc0aNAgJScnKygoSAMGDNCbb75pXmf48OG6fPmyBg0apPPnz6thw4b6/vvvC+w7lHD32bBhg6KionT+/HmVLl3a3uUAAACgCLJrUPLy8tL06dPN04HnxmQyKSYmRjExMXesLgAAAAB3N6anKoZWrVqlhx56SKVLl5afn586dOigI0eOmJdv2LBBJpNJf//9t7ktISFBJpNJR48eNbdt3rxZERERcnd3V5kyZdS6dWudP39ekhQaGpojwNatW9cisJpMJn388cd69NFH5e7urvDwcC1btuyGtX/++edq0KCBvLy8FBAQoB49eig5Odlinf3796t9+/by9vaWl5eXmjZtanF+kvTOO+8oMDBQfn5+euGFF3T16tV8HePo0aOKioqSJJUpU0Ymk0l9+/a9Yc0AAAC4+xCUiqFLly5pyJAhio+P19q1a1WqVCk9+uij5kkw8iMhIUEtWrRQjRo1tHXrVm3atEkdO3ZUZmamTbWMHTtW3bp10969e9WuXTv17NlT586dy3P9jIwMjRs3Tnv27NHSpUuVmJhoEVT++OMPNWvWTK6urlq3bp127typ/v3769q1a+Z11q9fryNHjmj9+vWaP3++4uLiFBcXl69jBAcH6+uvv5YkHTp0SKdPn9a///1vm84ZAAAAJZ9dh97h1nTt2tXi+dy5c1W+fHkdOHBANWvWzNc+pkyZogYNGmjWrFnmtho1athcS9++fc1fEBwbG6v33ntPO3bsUJs2bXJdP3uiDkmqVKmSZsyYoQceeEAXL16Up6en3n//ffn4+GjRokVycnKSJFWpUsViH2XKlNHMmTPl4OCgatWqqX379lq7dq2effbZfB3D19dXklS+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V6+WJD3++OOSpClTpmjq1KmaOXOm4uPjFRAQoJYtW+rChQv2LBsAAABACWfXoFSuXDkFBASYH8uXL9e9996riIgIGYah6dOna/To0erSpYtq1qyp+fPnKy0tTQsWLLBn2QAAAABKuCJzj1JGRoY+//xz9e/fXyaTSYmJiUpKSlKrVq3M67i4uCgiIkJbtmzJcz/p6elKTU21eAAAAACALYpMUFq6dKn+/vtv9e3bV5KUlJQkSfL397dYz9/f37wsNxMnTpSPj4/5ERwcXGg1AwAAACiZikxQmjt3rtq2baugoCCLdpPJZPHcMIwcbdcbNWqUUlJSzI8TJ04USr0AAAAASi5HexcgSceOHdOaNWu0ZMkSc1tAQICkf64sBQYGmtuTk5NzXGW6nouLi1xcXAqvWAAAAAAlXpG4ojRv3jyVL19e7du3N7eFhYUpICDAPBOe9M99TBs3blTjxo3tUSYAAACAu4TdryhlZWVp3rx56tOnjxwd/68ck8mk6OhoxcbGKjw8XOHh4YqNjZW7u7t69Ohhx4oBAAAAlHR2D0pr1qzR8ePH1b9//xzLhg8frsuXL2vQoEE6f/68GjZsqO+//15eXl52qBQAAADA3cJkGIZh7yIKU2pqqnx8fJSSkiJvb297lwMAAIACFjryW3uXUKCOTmp/85VwS2zJBkXiHiUAAAAAKEoISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFYISgAAAABghaAEAAAAAFbsHpT++OMPPfXUU/Lz85O7u7vq1q2rnTt3mpcbhqGYmBgFBQXJzc1NkZGR2r9/vx0rBgAAAFDS2TUonT9/Xk2aNJGTk5NWrlypAwcO6N1331Xp0qXN60yZMkVTp07VzJkzFR8fr4CAALVs2VIXLlywX+EAAAAASjRHex588uTJCg4O1rx588xtoaGh5n8bhqHp06dr9OjR6tKliyRp/vz58vf314IFCzRgwIA7XTIAAACAu4BdrygtW7ZMDRo00OOPP67y5curXr16+uijj8zLExMTlZSUpFatWpnbXFxcFBERoS1btuS6z/T0dKWmplo8AAAAAMAWdg1Kv//+u2bPnq3w8HB99913GjhwoF566SV9+umnkqSkpCRJkr+/v8V2/v7+5mXWJk6cKB8fH/MjODi4cE8CAAAAQIlj16CUlZWl+vXrKzY2VvXq1dOAAQP07LPPavbs2RbrmUwmi+eGYeRoyzZq1CilpKSYHydOnCi0+gEAAACUTHYNSoGBgbrvvvss2qpXr67jx49LkgICAiQpx9Wj5OTkHFeZsrm4uMjb29viAQAAAAC2sGtQatKkiQ4dOmTR9uuvvyokJESSFBYWpoCAAK1evdq8PCMjQxs3blTjxo3vaK0AAAAA7h52nfXulVdeUePGjRUbG6tu3bppx44d+vDDD/Xhhx9K+mfIXXR0tGJjYxUeHq7w8HDFxsbK3d1dPXr0sGfpAAAAAEowuwalf/3rX/rmm280atQovfXWWwoLC9P06dPVs2dP8zrDhw/X5cuXNWjQIJ0/f14NGzbU999/Ly8vLztWDgAAAKAkMxmGYdi7iMKUmpoqHx8fpaSkcL8SAABACRQ68lt7l1Cgjk5qb+8SSixbsoFd71ECAAAAgKKIoAQAAAAAVghKAAAAAGCFoAQAAAAAVghKAAAAAGCFoAQAAAAAVghKAAAAAGCFoAQAAAAAVghKAAAAAGCFoAQAAAAAVghKAAAAAGCFoAQAAAAAVghKAAAAAGDF0dYNjh49qh9//FFHjx5VWlqaypUrp3r16qlRo0ZydXUtjBoBAAAA4I7Kd1BasGCBZsyYoR07dqh8+fKqUKGC3NzcdO7cOR05ckSurq7q2bOnRowYoZCQkMKsGQAAAAAKVb6CUv369VWqVCn17dtXX375pSpWrGixPD09XVu3btWiRYvUoEEDzZo1S48//nihFAwAAAAAhS1fQWncuHFq3759nstdXFwUGRmpyMhIjR8/XomJiQVWIAAAAADcafkKSjcKSdbKli2rsmXL3nJBAAAAAGBvNk/mcL1vv/1WGzZsUGZmppo0aaKuXbsWVF0AAAAAYDe3PD34G2+8oeHDh8tkMskwDL3yyisaPHhwQdYGAAAAAHaR7ytKO3fu1P33329+vnjxYu3Zs0dubm6SpL59+yoyMlIzZ84s+CoBAAAA4A7K9xWl5557TtHR0UpLS5MkVapUSVOnTtWhQ4e0b98+zZ49W1WqVCm0QgEAAADgTsl3UNqxY4cCAgJUv359/e9//9Mnn3yiXbt2qXHjxmratKlOnjypBQsWFGatAAAAAHBH5HvonYODg0aOHKlu3brp+eefl4eHh2bOnKmgoKDCrA8AAAAA7jibJ3OoVKmSvvvuO3Xu3FnNmjXT+++/Xxh1AQAAAIDd5DsopaSkaMSIEerYsaNef/11denSRdu3b9eOHTv04IMPat++fYVZJwAAAADcMfkOSn369NG2bdvUvn17HTp0SM8//7z8/Pw0f/58TZgwQd26ddOIESMKs1YAAAAAuCPyfY/S2rVrtXv3blWuXFnPPvusKleubF7WokUL7dq1S+PGjSuUIgEAAADgTsr3FaXw8HB9+OGH+vXXXzVnzhyFhIRYLHdzc1NsbGyBFwgAAAAAd1q+g9Inn3yidevWqV69elqwYIFmz55dmHUBAAAAgN3ke+hd3bp19dNPPxVmLQAAAABQJNg8PXh+GIZRGLsFAAAAgDsiX0GpevXqWrBggTIyMm643uHDh/X8889r8uTJBVIcAAAAANhDvobevf/++xoxYoReeOEFtWrVSg0aNFBQUJBcXV11/vx5HThwQJs2bdKBAwc0ePBgDRo0qLDrBgAAAIBCk6+g1Lx5c8XHx2vLli1avHixFixYoKNHj+ry5csqW7as6tWrp969e+upp55S6dKlC7lkAAAAAChc+Z7MQZIaN26sxo0bF1YtAAAAAFAkFMpkDgAAAABQnBGUAAAAAMAKQQkAAAAArBCUAAAAAMAKQQkAAAAArNgclBwcHJScnJyj/ezZs3JwcCiQogAAAADAnmwOSoZh5Nqenp4uZ2fn2y4IAAAAAOwt39+jNGPGDEmSyWTSxx9/LE9PT/OyzMxM/fDDD6pWrVrBVwgAAAAAd1i+g9K0adMk/XNFac6cORbD7JydnRUaGqo5c+YUfIUAAAAAcIflOyglJiZKkqKiorRkyRKVKVOm0IoCAAAAAHuy+R6l9evXF1hIiomJkclksngEBASYlxuGoZiYGAUFBcnNzU2RkZHav39/gRwbAAAAAPKS7ytK2TIzMxUXF6e1a9cqOTlZWVlZFsvXrVtn0/5q1KihNWvWmJ9fP6RvypQpmjp1quLi4lSlShWNHz9eLVu21KFDh+Tl5WVr6QAAAACQLzYHpZdffllxcXFq3769atasKZPJdHsFODpaXEXKZhiGpk+frtGjR6tLly6SpPnz58vf318LFizQgAEDbuu4AAAAAJAXm4PSokWL9OWXX6pdu3YFUsDhw4cVFBQkFxcXNWzYULGxsapUqZISExOVlJSkVq1amdd1cXFRRESEtmzZkmdQSk9PV3p6uvl5ampqgdQJAAAA4O5h8z1Kzs7Oqly5coEcvGHDhvr000/13Xff6aOPPlJSUpIaN26ss2fPKikpSZLk7+9vsY2/v795WW4mTpwoHx8f8yM4OLhAagUAAABw97A5KA0dOlT//ve/8/ziWVu0bdtWXbt2Va1atfTwww/r22+/lfTPELts1kP7DMO44XC/UaNGKSUlxfw4ceLEbdcJAAAA4O5i89C7TZs2af369Vq5cqVq1KghJycni+VLliy55WI8PDxUq1YtHT58WJ07d5YkJSUlKTAw0LxOcnJyjqtM13NxcZGLi8st1wAAAAAANl9RKl26tB599FFFRESobNmyFsPcfHx8bquY9PR0HTx4UIGBgQoLC1NAQIBWr15tXp6RkaGNGzeqcePGt3UcAAAAALgRm68ozZs3r8AOPmzYMHXs2FEVK1ZUcnKyxo8fr9TUVPXp00cmk0nR0dGKjY1VeHi4wsPDFRsbK3d3d/Xo0aPAagAAAAAAazYHJUm6du2aNmzYoCNHjqhHjx7y8vLSqVOn5O3tLU9Pz3zv5+TJk3ryySf1119/qVy5cnrwwQe1bds2hYSESJKGDx+uy5cva9CgQTp//rwaNmyo77//nu9QAgAAAFCoTIaNszIcO3ZMbdq00fHjx5Wenq5ff/1VlSpVUnR0tK5cuaI5c+YUVq23JDU1VT4+PkpJSZG3t7e9ywEAAEABCx35rb1LKFBHJ7W3dwklli3ZwOZ7lF5++WU1aNBA58+fl5ubm7n90Ucf1dq1a22vFgAAAACKmFua9W7z5s1ydna2aA8JCdEff/xRYIUBAAAAgL3YfEUpKytLmZmZOdpPnjzJvUMAAAAASgSbg1LLli01ffp083OTyaSLFy9qzJgxateuXUHWBgAAAAB2YfPQu2nTpikqKkr33Xefrly5oh49eujw4cMqW7asFi5cWBg1AgAAAMAdZXNQCgoKUkJCghYuXKhdu3YpKytLTz/9tHr27GkxuQMAAAAAFFe39D1Kbm5u6t+/v/r371/Q9QAAAACA3d1SUPrjjz+0efNmJScnKysry2LZSy+9VCCFAQAAAIC92ByU5s2bp4EDB8rZ2Vl+fn4ymUzmZSaTiaAEAAAAoNizOSi9+eabevPNNzVq1CiVKmXzpHkAAAAAUOTZnHTS0tLUvXt3QhIAAACAEsvmtPP000/rq6++KoxaAAAAAKBIsHno3cSJE9WhQwetWrVKtWrVkpOTk8XyqVOnFlhxAAAAAGAPNgel2NhYfffdd6pataok5ZjMAQAAAACKO5uD0tSpU/XJJ5+ob9++hVAOAAAAANifzfcoubi4qEmTJoVRCwAAAAAUCTYHpZdfflnvvfdeYdQCAAAAAEWCzUPvduzYoXXr1mn58uWqUaNGjskclixZUmDFAQAAAIA92ByUSpcurS5duhRGLSiuYnzsXUHBikmxdwUAAACwM5uD0rx58wqjDgAAAAAoMmy+R0mSrl27pjVr1uiDDz7QhQsXJEmnTp3SxYsXC7Q4AAAAALAHm68oHTt2TG3atNHx48eVnp6uli1bysvLS1OmTNGVK1c0Z86cwqgTAAAAAO6YW5r1rkGDBjp//rzc3NzM7Y8++qjWrl1boMUBAAAAgD3YfEVp06ZN2rx5s5ydnS3aQ0JC9McffxRYYQAAAABgLzZfUcrKylJmZmaO9pMnT8rLy6tAigIAAAAAe7I5KLVs2VLTp083PzeZTLp48aLGjBmjdu3aFWRtAAAAAGAXNg+9mzZtmqKionTffffpypUr6tGjhw4fPqyyZctq4cKFhVEjAAAAANxRNgeloKAgJSQkaNGiRdq5c6eysrL09NNPq2fPnhaTOwAAAABAcWVzUPrhhx/UuHFj9evXT/369TO3X7t2TT/88IOaNWtWoAUCAAAAwJ1m8z1KUVFROnfuXI72lJQURUVFFUhRAAAAAGBPNgclwzBkMplytJ89e1YeHh4FUhQAAAAA2FO+h9516dJF0j+z3PXt21cuLi7mZZmZmdq7d68aN25c8BUCAAAAwB2W76Dk4+Mj6Z8rSl5eXhYTNzg7O+vBBx/Us88+W/AVAgAAAMAdlu+gNG/ePElSaGiohg0bxjA7AAAAACWWzbPejRkzpjDqAAAAAIAiw+bJHP7880/16tVLQUFBcnR0lIODg8UDAAAAAIo7m68o9e3bV8ePH9cbb7yhwMDAXGfAAwAAAIDizOagtGnTJv3444+qW7duIZQDAAAAAPZn89C74OBgGYZRGLUAAAAAQJFgc1CaPn26Ro4cqaNHjxZCOQAAAABgfzYPvXviiSeUlpame++9V+7u7nJycrJYfu7cuQIrDgAAAADsweagNH369EIoAwAAAACKDpuDUp8+fQqjDgAAAAAoMmy+R0mSjhw5otdff11PPvmkkpOTJUmrVq3S/v37C7Q4AAAAALAHm4PSxo0bVatWLW3fvl1LlizRxYsXJUl79+7VmDFjCrxAAAAAALjTbA5KI0eO1Pjx47V69Wo5Ozub26OiorR169YCLQ4AAAAA7MHmoLRv3z49+uijOdrLlSuns2fP3nIhEydOlMlkUnR0tLnNMAzFxMQoKChIbm5uioyMZHgfAAAAgEJnc1AqXbq0Tp8+naN99+7dqlChwi0VER8frw8//FC1a9e2aJ8yZYqmTp2qmTNnKj4+XgEBAWrZsqUuXLhwS8cBAAAAgPywOSj16NFDI0aMUFJSkkwmk7KysrR582YNGzZMvXv3trmAixcvqmfPnvroo49UpkwZc7thGJo+fbpGjx6tLl26qGbNmpo/f77S0tK0YMGCPPeXnp6u1NRUiwcAAAAA2MLmoDRhwgRVrFhRFSpU0MWLF3XfffepWbNmaty4sV5//XWbC3jhhRfUvn17PfzwwxbtiYmJSkpKUqtWrcxtLi4uioiI0JYtW/Lc38SJE+Xj42N+BAcH21wTAAAAgLubzd+j5OTkpC+++ELjxo3Trl27lJWVpXr16ik8PNzmgy9atEi7du1SfHx8jmVJSUmSJH9/f4t2f39/HTt2LM99jho1SkOGDDE/T01NJSwBAAAAsInNQSlbpUqVVKlSJWVmZmrfvn06f/68xdC5mzlx4oRefvllff/993J1dc1zPZPJZPHcMIwcbddzcXGRi4tLvusAAAAAAGs2D72Ljo7W3LlzJUmZmZmKiIhQ/fr1FRwcrA0bNuR7Pzt37lRycrLuv/9+OTo6ytHRURs3btSMGTPk6OhovpKUfWUpW3Jyco6rTAAAAABQkGwOSv/5z39Up04dSdL//vc//f777/rll18UHR2t0aNH53s/LVq00L59+5SQkGB+NGjQQD179lRCQoIqVaqkgIAArV692rxNRkaGNm7cqMaNG9taNgAAAADkm81D7/766y8FBARIklasWKFu3bqpSpUqevrppzVjxox878fLy0s1a9a0aPPw8JCfn5+5PTo6WrGxsQoPD1d4eLhiY2Pl7u6uHj162Fo2AAAAAOSbzUHJ399fBw4cUGBgoFatWqVZs2ZJktLS0uTg4FCgxQ0fPlyXL1/WoEGDdP78eTVs2FDff/+9vLy8CvQ4AAAAAHA9m4NSv3791K1bNwUGBspkMqlly5aSpO3bt6tatWq3VYz1PU4mk0kxMTGKiYm5rf0CAAAAgC1sDkoxMTGqWbOmTpw4occff9w8w5yDg4NGjhxZ4AUCAOwjdOS39i6hwB2d1N7eJQAAiolbmh78sccey9HWp0+f2y4GAAAAAIqCWwpKa9eu1dq1a5WcnKysrCyLZZ988kmBFAYAAAAA9mJzUBo7dqzeeustNWjQwHyfEgAAAACUJDYHpTlz5iguLk69evUqjHoAAAAAwO5s/sLZjIwMvvAVAAAAQIlmc1B65plntGDBgsKoBQAAAACKBJuH3l25ckUffvih1qxZo9q1a8vJycli+dSpUwusOAAAAACwB5uD0t69e1W3bl1J0s8//2yxjIkdAAAAAJQENgel9evXF0YdAAAAAFBk2HyP0vVOnjypP/74o6BqAQAAAIAiweaglJWVpbfeeks+Pj4KCQlRxYoVVbp0aY0bNy7Hl88CAAAAQHFk89C70aNHa+7cuZo0aZKaNGkiwzC0efNmxcTE6MqVK5owYUJh1AkAAAAAd4zNQWn+/Pn6+OOP1alTJ3NbnTp1VKFCBQ0aNIigBAAAAKDYs3no3blz51StWrUc7dWqVdO5c+cKpCgAAAAAsCebg1KdOnU0c+bMHO0zZ85UnTp1CqQoAAAAALAnm4feTZkyRe3bt9eaNWvUqFEjmUwmbdmyRSdOnNCKFSsKo0YAAAAAuKNsvqIUERGhQ4cO6dFHH9Xff/+tc+fOqUuXLjp06JCaNm1aGDUCAAAAwB1l8xUlSapQoQKTNgAAAAAosWy+ojRv3jx99dVXOdq/+uorzZ8/v0CKAgAAAAB7sjkoTZo0SWXLls3RXr58ecXGxhZIUQAAAABgTzYHpWPHjiksLCxHe0hIiI4fP14gRQEAAACAPdkclMqXL6+9e/fmaN+zZ4/8/PwKpCgAAAAAsCebg1L37t310ksvaf369crMzFRmZqbWrVunl19+Wd27dy+MGgEAAADgjrJ51rvx48fr2LFjatGihRwd/9k8KytLvXv35h4lAAAAACWCzUHJ2dlZixcv1vjx45WQkCA3NzfVqlVLISEhhVEfAAAAANxxt/Q9SpIUHh6u8PDwgqwFAAAAAIoEm+9RAgAAAICSjqAEAAAAAFYISgAAAABghaAEAAAAAFZuKSj9+OOPeuqpp9SoUSP98ccfkqTPPvtMmzZtKtDiAAAAAMAebA5KX3/9tVq3bi03Nzft3r1b6enpkqQLFy7wPUoAAAAASgSbg9L48eM1Z84cffTRR3JycjK3N27cWLt27SrQ4gAAAADAHmwOSocOHVKzZs1ytHt7e+vvv/8uiJoAAAAAwK5sDkqBgYH67bffcrRv2rRJlSpVKpCiAAAAAMCebA5KAwYM0Msvv6zt27fLZDLp1KlT+uKLLzRs2DANGjSoMGoEAAAAgDvK0dYNhg8frpSUFEVFRenKlStq1qyZXFxcNGzYMA0ePLgwagQAAACAO8rmoCRJEyZM0OjRo3XgwAFlZWXpvvvuk6enZ0HXBgAAAAB2cUtBSZLc3d3VoEGDgqwFAAAAAIqEfAWlLl265HuHS5YsueViAAAAAKAoyNdkDj4+PuaHt7e31q5dq59++sm8fOfOnVq7dq18fHwKrVAAAAAAuFPydUVp3rx55n+PGDFC3bp105w5c+Tg4CBJyszM1KBBg+Tt7V04VQIAAADAHWTz9OCffPKJhg0bZg5JkuTg4KAhQ4bok08+KdDiAAAAAMAebA5K165d08GDB3O0Hzx4UFlZWQVSFAAAAADYk81BqV+/furfv7/eeecdbdq0SZs2bdI777yjZ555Rv369bNpX7Nnz1bt2rXl7e0tb29vNWrUSCtXrjQvNwxDMTExCgoKkpubmyIjI7V//35bSwYAAAAAm9g8Pfg777yjgIAATZs2TadPn5YkBQYGavjw4Ro6dKhN+7rnnns0adIkVa5cWZI0f/58PfLII9q9e7dq1KihKVOmaOrUqYqLi1OVKlU0fvx4tWzZUocOHZKXl5etpQMAAABAvpgMwzBudePU1FRJKtBJHHx9ffX222+rf//+CgoKUnR0tEaMGCFJSk9Pl7+/vyZPnqwBAwbku0YfHx+lpKQw2URhiSlhsx3GpNi7AqBICB35rb1LKHBHJ7W3dwkACkFJ+7zis6rw2JINbB56d73sIXMFITMzU4sWLdKlS5fUqFEjJSYmKikpSa1atTKv4+LiooiICG3ZsiXP/aSnpys1NdXiAQAAAAC2uK2gVBD27dsnT09Pubi4aODAgfrmm2903333KSkpSZLk7+9vsb6/v795WW4mTpxo8b1PwcHBhVo/AAAAgJLH7kGpatWqSkhI0LZt2/T888+rT58+OnDggHm5yWSyWN8wjBxt1xs1apRSUlLMjxMnThRa7QAAAABKJpsncyhozs7O5skcGjRooPj4eP373/8235eUlJSkwMBA8/rJyck5rjJdz8XFRS4uLoVbNAAAAIASzeYrSp9++qnS09NztGdkZOjTTz+97YIMw1B6errCwsIUEBCg1atXWxxj48aNaty48W0fBwAAAADyckvfo5SSknNWsAsXLtj8PUqvvfaafvzxRx09elT79u3T6NGjtWHDBvXs2VMmk0nR0dGKjY3VN998o59//ll9+/aVu7u7evToYWvZAAAAAJBvNg+9y+seoZMnT8rHx7Zpov/880/16tVLp0+flo+Pj2rXrq1Vq1apZcuWkqThw4fr8uXLGjRokM6fP6+GDRvq+++/5zuUAAAAABSqfAelevXqyWQyyWQyqUWLFnJ0/L9NMzMzlZiYqDZt2th08Llz595wuclkUkxMjGJiYmzaLwAAAADcjnwHpc6dO0uSEhIS1Lp1a3l6epqXOTs7KzQ0VF27di3wAgEAAADgTst3UBozZowyMzMVEhKi1q1bW8xEBwAAAAAliU2TOTg4OGjgwIG6cuVKYdUDAAAAAHZn86x3tWrV0u+//14YtQAAAABAkWBzUJowYYKGDRum5cuX6/Tp00pNTbV4AAAAAEBxZ/P04Nkz23Xq1MlimvDsacMzMzMLrjoAAAAAsAObg9L69esLow4AAAAAKDJsDkoRERGFUQcAAAAAFBk2B6VsaWlpOn78uDIyMizaa9eufdtFAQAAAIA92RyUzpw5o379+mnlypW5LuceJQAAAADFnc2z3kVHR+v8+fPatm2b3NzctGrVKs2f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t0apUqWMpKSkXM911KhRRvXq1S2ONWLECEOScf78ecMwDKNXr17Gc889Z7Hdjz/+aJQqVcq4fPlyrvtt1KiR0bNnz1yX/frrr4YkY/Pmzea2v/76y3BzczO+/PJLwzAMY968eYYk47fffjOvM2DAAMPd3d24cOGCua1169bGgAEDzM9DQkKMNm3aWBzviSeeMNq2bZtrLYZhGF9++aXh5+dnsX779u0t1unZs6fh4+Njfj5mzBjD3d3dSE1NNbe9+uqrRsOGDc3PIyIijJdfftkwDMP47bffDJPJZPzxxx8W+23RooUxatSoPGsDgJKMK0oAUIxNnjxZ8+fP14EDB255HzVq1FCpUv/334G/v79q1aplfu7g4CA/Pz8lJydLknbu3KnffvtNXl5e8vT0lKenp3x9fXXlyhUdOXLEvF2tWrXk7Oxsfn7w4EHVqVNHHh4e5rYmTZooKytLhw4dyrW2gwcP6sEHH7SYpKJRo0YW6+zcuVNxcXHmWjw9PdW6dWtlZWUpMTEx1/0mJCSoRYsWeR7T0dFRDRs2NLf5+fmpatWqOnjwoLnN3d1d9957r8XrFhoaKk9PT4u27Nctr/obNWpksd/169erZcuWqlChgry8vNS7d2+dPXvWPJTw0KFDeuCBByz2Yf1c+meY3/X3IAUGBuaoJduuXbtkGIaqVKli8Tpu3LjR4j0FgLuJo70LAADcumbNmql169Z67bXX1LdvX4tlpUqVkmEYFm3XDx3L5uTkZPHcZDLl2paVlSVJysrK0v33368vvvgix77KlStn/vf1gUiSDMPIc1a+vNqt689NVlaWBgwYoJdeeinHsooVK+a6jZubW577y+uY1vXb+rrdSPZ+jx07pnbt2mngwIEaN26cfH19tWnTJj399NPm9y631zG3mm2pJSsrSw4ODtq5c6ccHBwsll0f/ADgbkJQAoBibtKkSapbt655woRs5cqVU1JSksUv1gkJCbd9vPr162vx4sUqX768vL29873dfffdp/nz5+vSpUvmELV582aVKlUqR+3Xb7N06VKLtm3btuWoZ//+/apcuXK+a6ldu7bWrl2rfv365XrMa9euafv27WrcuLEk6ezZs/r1119VvXr1fB8jL9b1b9u2TdWqVZMk/fTTT7p27Zreffdd81W+L7/80mL9atWqaceOHRZtP/30023VVK9ePWVmZio5OVlNmza9rX0BQEnB0DsAKOZq1aqlnj175pg9LTIyUmfOnNGUKVN05MgRvf/++1q5cuVtH69nz54qW7asHnnkEf34449KTEzUxo0b9fLLL99wYomePXvK1dVVffr00c8//6z169frxRdfVK9eveTv75/rNgMHDtSRI0c0ZMgQHTp0SAsWLFBcXJzFOiNGjNDWrVv1wgsvKCEhQYcPH9ayZcv04osv5lnLmDFjtHDhQo0ZM0YHDx7Uvn37NGXKFElSeHi4HnnkET377LPatGmT9uzZo6eeekoVKlTQI488YvsLZmXz5s2aMmWKfv31V73//vv66quv9PLLL0uS7r33Xl27dk3vvfeefv/9d3322WeaM2eOxfYvvviiVqxYoalTp+rw4cP64IMPtHLlytv6Dq0qVaqoZ8+e6t27t5YsWaLExETFx8dr8uTJWrFixW2dLwAUVwQlACgBxo0bl2P4VfXq1TVr1iy9//77qlOnjnbs2KFhw4bd9rHc3d31ww8/qGLFiurSpYuqV6+u/v376/Llyze8wuTu7q7vvvtO586d07/+9S899thjatGihWbOnJnnNhUrVtTXX3+t//3vf6pTp47mzJmj2NhYi3Vq166tjRs36vDhw2ratKnq1aunN954Q4GBgXnuNzIyUl999ZWWLVumunXrqnnz5tq+fbt5+bx583T//ferQ4cOatSokQzD0IoVK3IMZ7sVQ4cO1c6dO1WvXj2NGzdO7777rlq3bi1Jqlu3rqZOnarJkyerZs2a+uKLL3JMAd+kSRPNmTNHU6dOVZ06dbRq1Sq98sorcnV1va265s2bp969e2vo0KGqWrWqOnXqpO3btys4OPi29gsAxZXJyM8AcAAAcNtCQ0MVHR1t8f1FBeHZZ5/VL7/8oh9//LFA9wsAdzPuUQIAoJh555131LJlS3l4eGjlypWaP3++Zs2aZe+yAKBEISgBAFDM7NixQ1OmTNGFCxdUqVIlzZgxQ88884y9ywKAEoWhdwAAAABghckcAAAAAMAKQQkAAAAArBCUAAAAAMAKQQkAAAAArBCUAAAAAMAKQQkAAAAArBCUAAAAAMAKQQkAAAAArPw/q5Zjnui4MTsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 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[\"y_has_purchased\"].unique():\n", + " label_data = df_graph[df_graph['y_has_purchased'] == label]\n", + " values = [label_data[label_data['number_company'] == category]['opt_in'].values[0]*100 for category in categories]\n", + "\n", + " label_printed = \"achat durant la période\" if label else \"aucun achat\"\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 (train set)')\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": "43deeeb5-8092-42fc-b80b-59d2c58093de", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": 124, @@ -3347,6 +5040,221 @@ "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 58, + "id": "c7348c95-e506-4002-90d9-d3b6768af985", + "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", + "
number_companyy_has_purchasedgender_malegender_femalegender_othershare_of_women
0100.00.1718380.3339290.4942320.660243
1101.00.3121650.6833630.0044720.686433
2110.00.1511620.2732040.5756350.643794
3111.00.3284770.5976410.0738810.645318
4120.00.3345460.4336720.2317820.564517
5121.00.3660200.5066590.1273210.580579
6130.00.3142430.5032420.1825150.615598
7131.00.3517210.5049100.1433690.589414
8140.00.3179710.2963880.3856410.482434
9141.00.4512890.4851060.0636050.518057
\n", + "
" + ], + "text/plain": [ + " number_company y_has_purchased gender_male gender_female gender_other \\\n", + "0 10 0.0 0.171838 0.333929 0.494232 \n", + "1 10 1.0 0.312165 0.683363 0.004472 \n", + "2 11 0.0 0.151162 0.273204 0.575635 \n", + "3 11 1.0 0.328477 0.597641 0.073881 \n", + "4 12 0.0 0.334546 0.433672 0.231782 \n", + "5 12 1.0 0.366020 0.506659 0.127321 \n", + "6 13 0.0 0.314243 0.503242 0.182515 \n", + "7 13 1.0 0.351721 0.504910 0.143369 \n", + "8 14 0.0 0.317971 0.296388 0.385641 \n", + "9 14 1.0 0.451289 0.485106 0.063605 \n", + "\n", + " share_of_women \n", + "0 0.660243 \n", + "1 0.686433 \n", + "2 0.643794 \n", + "3 0.645318 \n", + "4 0.564517 \n", + "5 0.580579 \n", + "6 0.615598 \n", + "7 0.589414 \n", + "8 0.482434 \n", + "9 0.518057 " + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "company_genders = train_set_spectacle.groupby([\"number_company\", \"y_has_purchased\"])[[\"gender_male\", \"gender_female\", \"gender_other\"]].mean().reset_index()\n", + "company_genders[\"share_of_women\"] = company_genders[\"gender_female\"]/(1-company_genders[\"gender_other\"])\n", + "company_genders" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "799db5a6-24e3-43e9-a5ff-c8a7168a2897", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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08cff3ze+SVBuXLl7FcfnnnmmQKXyfsD0NPTU3379lXfvn31zz//6LvvvtN//vMftWnTRnv27JG/v3+B619sPVdqKKj+MmXKaN++ffnm5f1PcVGd67zt/ve//73oSIeVK1fWpEmTJP37P+dffvmlkpKSlJ2drQkTJhS4Tt6obX/88cd5t+uO4y9oQJTMzEx5e3vbr2pNmzZN3bp1U3JyssNyf//9t8qWLWufDgsLs//xdrF9XKri6ONhYWHnPS/nynsvxo4dax/wxup8IdHV+jIzM1WxYkX79NmzZ3XgwAH7H+HO9l9n+uGFLF68WH/++aeWLl1qv4okKd8w4pe6n8s9p3nrHzx40KX9SgX/rpo2bZqaN2+u8ePHO7Sfb2CPwnSxzxlXPrMuJu98lZTfZbhyEJQAi7wvovXw8LC3nTx5Up9++qlL27nY/xyfq0WLFvryyy81e/Zsh9sYpk+f7rBc9erVFR8fr40bN+b7o+5ydOjQQcnJyQoLCzvvH/klgb+/v1q0aKENGzYoISHBfnXhYsqWLat7771Xe/fuVZ8+fbRr1658t0+5st6l1CBJAQEBatSokVJSUvTmm2/Kz89P0r+jg02bNk3XXHPNZd/GeT5t2rSRp6endu7ced5bcApSrVo1vfrqq5o5c6bWr19/weWqVq2qjz/+WH379rX/r/K53HH8KSkpeuONN+z/6XH06FF98803atasmf1n3Gaz5at37ty52rt3r6699lp7W2Jiot588039/PPPDv1nxowZhVZvcfTxFi1aaNSoUdq4caPD7XfWz5ubbrpJZcuW1c8//6xnn3320g/Kifo+++wzh9txv/zyS509e9Y+Wqiz/deZfiid/6pHXpiwrmcdWtrZ/Vhd7jnNu/V0586d+ea58jsnT0F9f9OmTVq5cqViYmJcru9SFfQ548pn1rnvZ97nyrl+++03SXLqcx84F0EJsGjfvr1Gjx6tLl266Mknn9SBAwf05ptvOv2LME+dOnW0dOlSffPNN4qKilJQUNB5r/Z069ZNb7/9trp166Zhw4YpPj5e8+bN04IFC/It+8EHH6hdu3Zq06aNevTooYoVK+rgwYPaunWr1q9fr6+++srlY+7Tp49mzpypW265RS+88IISEhKUm5ur3bt3a+HCherXr58aNWrk8naLwjvvvKObb75ZzZo109NPP63Y2FgdPXpUO3bs0DfffKPFixdLkjp27KjatWurQYMGqlChgn7//XeNGTNGlStXVnx8/Hm378x6ztZQkOHDh6tVq1Zq0aKF+vfvL29vb73//vv66aef9PnnnxfKFcqCxMbG6vXXX9crr7yi3377TW3btlW5cuX0119/ac2aNQoICNDgwYO1adMmPfvss7rvvvsUHx8vb29vLV68WJs2bdLLL798wX2899576tixoxo3bqwXXnhBlSpV0u7du7VgwQJ99tlnbjl+Dw8PtWrVSn379lVubq5GjhypI0eOOHw5ZYcOHTRlyhRdd911SkhI0Lp16/TGG2/ku62qT58++vjjj9WuXTu9/vrrioiI0PTp0/XLL79Icu1WoAsp6j6edxzt27fX0KFDFRERoc8++8x+HHkCAwM1duxYde/eXQcPHtS9996r8PBw7d+/Xxs3btT+/fvzXYk4lyv1paSkyNPTU61atdKWLVv02muvqW7duurcubMk5/uv5Fw/rFOnjv1cd+/eXV5eXqpevbqaNm2qcuXKqWfPnho0aJC8vLz02WefaePGjfmOz5n9WF3uOb3mmmtUpUoVrVq1Sr1793aYV6dOHc2YMUNffPGFqlSpIl9fX/txnk+HDh00ZMgQDRo0SImJidq2bZtef/11xcXFufw9S65w5nPGlfc87zhHjhypdu3aycPDw+E/GlatWmW/9RNwibtHkwCK0/mGB7f6+OOPTfXq1Y2Pj4+pUqWKGT58uJk0aVK+UZIKGkEuT3p6urnpppuMv7+/kVTgaETn+uOPP8w999xjAgMDTVBQkLnnnnvMihUrChz2e+PGjaZz584mPDzceHl5mcjISHPrrbeaCRMmXPQcnK/mY8eOmVdffdVUr17deHt724cnfuGFFxxGA5RknnnmGYd180bueuONNxza80Zb+uqrr+xtiYmJplatWk7Xdb79Pfroo6ZixYrGy8vLVKhQwTRt2tQMHTrUvsxbb71lmjZtasqXL2+8vb1NpUqVzGOPPWZ27dp1wfPj7HrO1FDQiGbGGLNs2TJz6623moCAAOPn52caN25svvnmG4dlztdX887pxYbqLmh4cGP+HaGwRYsWJjg42Pj4+JjKlSube++91z4s8V9//WV69OhhrrvuOhMQEGACAwNNQkKCefvtt83Zs2cvuE9jjFm5cqVp166dCQkJMT4+PqZq1ar5RjS7nOPPO679+/c7tHfv3t0EBATYp/PO/ciRI83gwYPNNddcY7y9vU39+vXNggULHNY9dOiQeeyxx0x4eLjx9/c3N998s1m2bJlJTEzM93P7008/mdtuu834+vqa0NBQ89hjj5mpU6fmGxHtfP28e/fupnLlyvnqtPaRouzjxhjz888/m1atWjkcx//+978C+1ZaWppp3769CQ0NNV5eXqZixYqmffv2Dj/XBXGmvrz3c926daZjx472z78HH3zQ/PXXX/m2ebH+m8eZfjhw4EATHR1typQp43DcK1asME2aNDH+/v6mQoUK5vHHHzfr168v8H262H4KGh78cs6pMca89tprply5cg7DXxtjzK5du0zr1q1NUFCQfch1Ywr+HM5z+vRp079/f1OxYkXj6+trrr/+ejNr1qx8/dSY8496dymfUa58zjjznp8+fdo8/vjjpkKFCsZms+U7582aNcs30iDgDJsxfPsWAKB02bVrl+Li4vTGG2+cd+CTwvLkk0/q888/14EDB1y6FRP/fvnr4MGDtX//fp4fcdKff/6puLg4ffLJJ7r//vvdXU6Jt3PnTsXHx2vBggVq1aqVu8vBFYZb7wAAcNLrr7+u6OhoValSRceOHdOcOXP00Ucf6dVXXyUkoVhER0erT58+GjZsmO67775Cu+WztBo6dKhatmxJSMIlISgBAOAkLy8vvfHGG/rjjz909uxZxcfHa/To0Xr++efdXRquIq+++qr8/f21d+/eYh104Upz9uxZVa1aVQMHDnR3KbhCcesdAAAAAFhwvRYAAAAALAhKAAAAAGBBUAIAAAAAi1I/mENubq7+/PNPBQUFFdkXOQIAAAAo+YwxOnr0qKKjoy86amSpD0p//vknI8IAAAAAsNuzZ4+uueaaCy5T6oNSUFCQpH9PRnBwsJurAQAAAOAuR44cUUxMjD0jXEipD0p5t9sFBwcTlAAAAAA49UgOgzkAAAAAgAVBCQAAAAAsCEoAAAAAYFHqn1ECAAAo6YwxOnv2rHJyctxdCnBF8/DwkKenZ6F8LRBBCQAAwI2ys7O1b98+nThxwt2lAKWCv7+/oqKi5O3tfVnbISgBAAC4SW5urjIyMuTh4aHo6Gh5e3sXyv+EA1cjY4yys7O1f/9+ZWRkKD4+/qJfKnshbg1KsbGx+v333/O19+rVS++9956MMRo8eLAmTpyoQ4cOqVGjRnrvvfdUq1YtN1QLAABQuLKzs5Wbm6uYmBj5+/u7uxzgiufn5ycvLy/9/vvvys7Olq+v7yVvy62DOaxdu1b79u2zv1JTUyVJ9913nyRp1KhRGj16tMaNG6e1a9cqMjJSrVq10tGjR91ZNgAAQKG6nP/1BuCosH6e3PpTWaFCBUVGRtpfc+bMUdWqVZWYmChjjMaMGaNXXnlFnTp1Uu3atTV16lSdOHFC06dPd2fZAAAAAEq5EvPfF9nZ2Zo2bZoeffRR2Ww2ZWRkKDMzU61bt7Yv4+Pjo8TERK1YseK82zl9+rSOHDni8AIAAAAAV5SYwRxmzZqlf/75Rz169JAkZWZmSpIiIiIclouIiCjwuaY8w4cP1+DBg4usTgAAgOIQ+/LcYt3frhHti3V/V7IePXron3/+0axZs9xdCopQibmiNGnSJLVr107R0dEO7daRX4wxFxwNZuDAgTp8+LD9tWfPniKpFwAAALhUS5culc1m0z///OPuUnAeJeKK0u+//67vvvtOKSkp9rbIyEhJ/15ZioqKsrdnZWXlu8p0Lh8fH/n4+BRdsQAAAABKvRJxRWny5MkKDw9X+/b/d8k3Li5OkZGR9pHwpH+fY0pLS1PTpk3dUSYAAAD+f/Pnz9fNN9+ssmXLKiwsTB06dNDOnTvt8wu6YpKeni6bzaZdu3bZ23744QclJibK399f5cqVU5s2bXTo0CFJ/36VzJgxYxz2W69ePSUlJdmnbTabPvroI919993y9/dXfHy8Zs+efcHap02bpgYNGigoKEiRkZHq0qWLsrKyHJbZsmWL2rdvr+DgYAUFBalZs2YOxydJb775pqKiohQWFqZnnnlGZ86ccWofu3btUosWLSRJ5cqVk81msz9+gpLD7UEpNzdXkydPVvfu3eXp+X8XuGw2m/r06aPk5GR9/fXX+umnn9SjRw/5+/urS5cubqwYAAAAx48fV9++fbV27VotWrRIZcqU0d13363c3Fynt5Genq6WLVuqVq1aWrlypZYvX66OHTsqJyfHpVoGDx6szp07a9OmTbr99tvVtWtXHTx48LzLZ2dna8iQIdq4caNmzZqljIwMh6Cyd+9e3XLLLfL19dXixYu1bt06Pfroozp79qx9mSVLlmjnzp1asmSJpk6dqilTpmjKlClO7SMmJkYzZ86UJG3btk379u3TO++849Ixo+i5/da77777Trt379ajjz6ab96AAQN08uRJ9erVy/6FswsXLlRQUJAbKgUAAECee+65x2F60qRJCg8P188//6zatWs7tY1Ro0apQYMGev/99+1ttWrVcrmWHj166MEHH5QkJScna+zYsVqzZo3atm1b4PLn/t1ZpUoVvfvuu2rYsKGOHTumwMBAvffeewoJCdGMGTPk5eUlSapWrZrDNsqVK6dx48bJw8ND1113ndq3b69FixbpiSeecGofoaGhkqTw8HCVLVvW5WNG0XP7FaXWrVvLGJOv80n/XlVKSkrSvn37dOrUKaWlpTn9gwcAAICis3PnTnXp0kVVqlRRcHCw4uLiJEm7d+92eht5V5QuV0JCgv3fAQEBCgoKyncr3bk2bNigO++8U5UrV1ZQUJCaN28u6f9qT09PV7NmzewhqSC1atWSh4eHfToqKsphnxfbB0o+twclAAAAXHk6duyoAwcO6MMPP9Tq1au1evVqSf/eciZJZcr8+2emMca+zrnP8EiSn5/fBfdRpkwZh/UL2oakfIHGZrOd9xbA48ePq3Xr1goMDNS0adO0du1aff311w61X6yui+3TmX2g5CMoAQAAwCUHDhzQ1q1b9eqrr6ply5aqUaOGfQCGPBUqVJAk7du3z96Wnp7usExCQoIWLVp03v1UqFDBYf0jR44oIyPjsmr/5Zdf9Pfff2vEiBFq1qyZrrvuunxXnxISErRs2bICQ1lh7cPb21uSXH4eC8XH7c8ooRRICnF3BYUr6bC7KwAAoEQrV66cwsLCNHHiREVFRWn37t16+eWXHZa59tprFRMTo6SkJA0dOlTbt2/XW2+95bDMwIEDVadOHfXq1Us9e/aUt7e3lixZovvuu0/ly5fXrbfeqilTpqhjx44qV66cXnvtNYfb3S5FpUqV5O3trbFjx6pnz5766aefNGTIEIdlnn32WY0dO1YPPPCABg4cqJCQEK1atUoNGzZU9erVC2UflStXls1m05w5c3T77bfLz89PgYGBl3VsKFwEJQAAgBJo14j2F1/ITcqUKaMZM2aod+/eql27tqpXr653333X/hyO9O+taZ9//rmefvpp1a1bVzfeeKOGDh2q++67z75MtWrVtHDhQv3nP/9Rw4YN5efnp0aNGtkHZhg4cKB+++03dejQQSEhIRoyZMhlX1GqUKGCpkyZov/85z969913df311+vNN9/UHXfcYV8mLCxMixcv1osvvqjExER5eHioXr16uummmwptHxUrVtTgwYP18ssv65FHHlG3bt0cRs2D+9mM9cbPUubIkSMKCQnR4cOHFRwc7O5ySieuKAEAcElOnTqljIwMxcXFydfX193lAKXChX6uXMkGPKMEAAAAABYEJQAAAACwICgBAAAAgAVBCQAAAAAsCEoAAAAAYEFQAgAAAAALghIAAAAAWBCUAAAAAMCCoAQAAADgvLKzs5WcnKytW7e6u5RiRVACAABAsUtKSlK9evXctv+lS5fKZrPpn3/+cVsNl6JHjx666667inWf/fv31+bNm3XddddddNnCqK+kvDeebt07AAAACpYUUsz7O1y8+ysEu3btUlxcnDZs2ODW0FUYkpKSNGvWLKWnp7u7FAczZ87UTz/9pPnz58tms110+XfeeUfGmGKorOhxRQkAAAC4BNnZ2e4uocjdc889Wrx4sby9vS+4XE5OjnJzcxUSEqKyZcsWT3FFjKAEAAAAl82fP18333yzypYtq7CwMHXo0EE7d+50WOaPP/7QAw88oNDQUAUEBKhBgwZavXq1wzKffvqpYmNjFRISogceeEBHjx51eh9xcXGSpPr168tms6l58+bnrXfevHmqVq2a/Pz81KJFC+3atcthfkG3Ao4ZM0axsbH26bzbyoYPH67o6GhVq1ZNkjRt2jQ1aNBAQUFBioyMVJcuXZSVlWVfL+9WskWLFqlBgwby9/dX06ZNtW3bNknSlClTNHjwYG3cuFE2m002m01Tpkw577Gcy5n3wap58+Z69tln9eyzz9rXe/XVVx2uBGVnZ2vAgAGqWLGiAgIC1KhRIy1dutQ+f8qUKSpbtqzmzJmjmjVrysfHR7///nu+W+9Onz6t3r17Kzw8XL6+vrr55pu1du1ah3ou9t5I0ooVK3TLLbfIz89PMTEx6t27t44fP+7UObpUBCUAAAC47Pjx4+rbt6/Wrl2rRYsWqUyZMrr77ruVm5srSTp27JgSExP1559/avbs2dq4caMGDBhgny9JO3fu1KxZszRnzhzNmTNHaWlpGjFihNP7WLNmjSTpu+++0759+5SSklJgrXv27FGnTp10++23Kz09XY8//rhefvnlSzruRYsWaevWrUpNTdWcOXMk/RsqhgwZoo0bN2rWrFnKyMhQ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ITg569ixY+ratas+/PBDlStXzt5ujNGYMWP0yiuvqFOnTqpdu7amTp2qEydOaPr06S7vBwAAAACc5XJQuvHGGzV37lz7dF44+vDDD9WkSROXC3jmmWfUvn173XbbbQ7tGRkZyszMtH9PkyT5+PgoMTFRK1asOO/2Tp8+rSNHjji8AAAAAMAVLo96N3z4cLVt21Y///yzzp49q3feeUdbtmzRypUrlZaW5tK2ZsyYofXr12vt2rX55mVmZkqSIiIiHNojIiL0+++/X7C+wYMHu1QHAAAAAJzL5StKTZs21Q8//KATJ06oatWqWrhwoSIiIrRy5UrdcMMNTm9nz549ev755zVt2jSHQSGsrLfzGWMueIvfwIEDdfjwYftrz549TtcEAAAAANIlfo9SnTp1NHXq1Mva8bp165SVleUQrnJycvT9999r3Lhx2rZtm6R/ryxFRUXZl8nKysp3lelcPj4+8vHxuazaAAAAAFzdLikoSf8GlqysLOXm5jq0W0euO5+WLVtq8+bNDm2PPPKIrrvuOr300kuqUqWKIiMjlZqaqvr160uSsrOzlZaWppEjR15q2QAAAABwUS4HpXXr1ql79+7aunWrjDEO82w2m3JycpzaTlBQkGrXru3QFhAQoLCwMHt7nz59lJycrPj4eMXHxys5OVn+/v7q0qWLq2UDAAAAgNNcDkqPPPKIqlWrpkmTJikiIuKShgR31oABA3Ty5En16tVLhw4dUqNGjbRw4UIFBQUV2T4BAAAAwOWglJGRoZSUFF177bWFXszSpUsdpm02m5KSkpSUlFTo+wIAAACA83F51LuWLVtq48aNRVELAAAAAJQILl9R+uijj9S9e3f99NNPql27try8vBzm33HHHYVWHAAAAAC4g8tBacWKFVq+fLm+/fbbfPNcGcwBAAAAAEoql2+96927tx5++GHt27dPubm5Di9CEgAAAIDSwOWgdODAAb3wwgsX/NJXAAAAALiSuRyUOnXqpCVLlhRFLQAAAABQIrj8jFK1atU0cOBALV++XHXq1Mk3mEPv3r0LrTgAAAAAcIdLGvUuMDBQaWlpSktLc5hns9kISgAAAACueJf0hbMAAAAAUJq5/IwSAAAAAJR2Ll9RMsbov//9r5YsWaKsrCzl5uY6zE9JSSm04gAAAADAHVwOSs8//7wmTpyoFi1aKCIiQjabrSjqAgAAAAC3cTkoTZs2TSkpKbr99tuLoh4AAAAAcDuXn1EKCQlRlSpViqIWAAAAACgRXA5KSUlJGjx4sE6ePFkU9QAAAACA27l86919992nzz//XOHh4YqNjc33hbPr168vtOIAAAAAwB1cDko9evTQunXr9NBDDzGYAwAAAIBSyeWgNHfuXC1YsEA333xzUdQDAAAAAG7n8jNKMTExCg4OLopaAAAAAKBEcDkovfXWWxowYIB27dpVBOUAAAAAgPu5fOvdQw89pBMnTqhq1ary9/fPN5jDwYMHC604AAAAAHAHl4PSmDFjiqAMAAAAACg5XA5K3bt3L4o6AAAAAKDEcPkZJUnauXOnXn31VT344IPKysqSJM2fP19btmwp1OIAAAAAwB1cDkppaWmqU6eOVq9erZSUFB07dkyStGnTJg0aNKjQCwQAAACA4uZyUHr55Zc1dOhQpaamytvb297eokULrVy5slCLAwAAAAB3cDkobd68WXfffXe+9goVKujAgQOFUhQAAAAAuJPLQals2bLat29fvvYNGzaoYsWKhVIUAAAAALiTy0GpS5cueumll5SZmSmbzabc3Fz98MMP6t+/v7p161YUNQIAAABAsXI5KA0bNkyVKlVSxYoVdezYMdWsWVO33HKLmjZtqldffbUoagQAAACAYuXU9ygdOXJEwcHBkiQvLy999tlnGjJkiNavX6/c3FzVr19f8fHxRVooAAAAABQXp4JSuXLltG/fPoWHh+vWW29VSkqKqlSpoipVqhR1fQAAAABQ7Jy69S4wMNA+ot3SpUt15syZIi0KAAAAANzJqStKt912m1q0aKEaNWpIku6++26H71A61+LFiwuvOgAAAABwA6eC0rRp0zR16lTt3LlTaWlpqlWrlvz9/Yu6NgAAAABwC6eCkp+fn3r27ClJ+vHHHzVy5EiVLVu2KOsCAAAAALdxKiida8mSJUVRBwAAAACUGC5/jxIAAAAAlHYEJQAAAACwICgBAAAAgAVBCQAAAAAsLikoLVu2TA899JCaNGmivXv3SpI+/fRTLV++vFCLAwAAAAB3cDkozZw5U23atJGfn582bNig06dPS5KOHj2q5OTkQi8QAAAAAIqby0Fp6NChmjBhgj788EN5eXnZ25s2bar169cXanEAAAAA4A4uB6Vt27bplltuydceHBysf/75pzBqAgAAAAC3cjkoRUVFaceOHfnaly9fripVqhRKUQAAAADgTi4HpaeeekrPP/+8Vq9eLZvNpj///FOfffaZ+vfvr169ehVFjQAAAABQrDxdXWHAgAE6fPiwWrRooVOnTumWW26Rj4+P+vfvr2effbYoagQAAACAYuVyUJKkYcOG6ZVXXtHPP/+s3Nxc1axZU4GBgYVdGwAAAAC4xSUFJUny9/dXgwYNCrMWAAAAACgRnApKnTp1cnqDKSkpl1wMAAAAAJQETg3mEBISYn8FBwdr0aJF+vHHH+3z161bp0WLFikkJKTICgUAAACA4uLUFaXJkyfb//3SSy+pc+fOmjBhgjw8PCRJOTk56tWrl4KDg4umSgAAAAAoRi4PD/7xxx+rf//+9pAkSR4eHurbt68+/vjjQi0OAAAAANzB5aB09uxZbd26NV/71q1blZub69K2xo8fr4SEBAUHBys4OFhNmjTRt99+a59vjFFSUpKio6Pl5+en5s2ba8uWLa6WDAAAAAAucXnUu0ceeUSPPvqoduzYocaNG0uSVq1apREjRuiRRx5xaVvXXHONRowYoWuvvVaSNHXqVN15553asGGDatWqpVGjRmn06NGaMmWKqlWrpqFDh6pVq1batm2bgoKCXC0dAAAAAJziclB68803FRkZqbffflv79u2TJEVFRWnAgAHq16+fS9vq2LGjw/SwYcM0fvx4rVq1SjVr1tSYMWP0yiuv2Efdmzp1qiIiIjR9+nQ99dRTBW7z9OnTOn36tH36yJEjLtUEAAAAAC7felemTBkNGDBAe/fu1T///KN//vlHe/fu1YABAxyeW3JVTk6OZsyYoePHj6tJkybKyMhQZmamWrdubV/Gx8dHiYmJWrFixXm3M3z4cIdR+mJiYi65JgAAAABXJ5eD0rnyni26HJs3b1ZgYKB8fHzUs2dPff3116pZs6YyMzMlSREREQ7LR0RE2OcVZODAgTp8+LD9tWfPnsuqDwAAAMDVx+Vb7wpb9erVlZ6ern/++UczZ85U9+7dlZaWZp9vs9kcljfG5Gs7l4+Pj3x8fIqsXgAAAACl32VdUSoM3t7euvbaa9WgQQMNHz5cdevW1TvvvKPIyEhJynf1KCsrK99VJgAAAAAoTG4PSlbGGJ0+fVpxcXGKjIxUamqqfV52drbS0tLUtGlTN1YIAAAAoLRzOSh98sknDqPK5cnOztYnn3zi0rb+85//aNmyZdq1a5c2b96sV155RUuXLlXXrl1ls9nUp08fJScn6+uvv9ZPP/2kHj16yN/fX126dHG1bAAAAABw2iV9j1Lbtm0VHh7u0H706FE98sgj6tatm9Pb+uuvv/Twww9r3759CgkJUUJCgubPn69WrVpJkgYMGKCTJ0+qV69eOnTokBo1aqSFCxfyHUoAAAAAipTLQel8gyn88ccfCgkJcWlbkyZNuuB8m82mpKQkJSUlubRdAAAAALgcTgel+vXry2azyWazqWXLlvL0/L9Vc3JylJGRobZt2xZJkQAAAABQnJwOSnfddZckKT09XW3atFFgYKB9nre3t2JjY3XPPfcUeoEAAAAAUNycDkqDBg1STk6OKleurDZt2igqKqoo6wIAAAAAt3Fp1DsPDw/17NlTp06dKqp6AAAAAMDtXB4evE6dOvrtt9+KohYAAAAAKBFcDkrDhg1T//79NWfOHO3bt09HjhxxeAEAAADAlc7l4cHzRra74447HIYJzxs2PCcnp/CqAwAAAAA3cDkoLVmypCjqAAAAAIASw+WglJiYWBR1AAAAAECJ4XJQynPixAnt3r1b2dnZDu0JCQmXXRQAAAAAuJPLQWn//v165JFH9O233xY4n2eUAAAAAFzpXB71rk+fPjp06JBWrVolPz8/zZ8/X1OnTlV8fLxmz55dFDUCAAAAQLFy+YrS4sWL9b///U833nijypQpo8qVK6tVq1YKDg7W8OHD1b59+6KoEwAAAACKjctXlI4fP67w8HBJUmhoqPbv3y/p3y+iXb9+feFWBwAAAABu4HJQql69urZt2yZJqlevnj744APt3btXEyZMUFRUVKEXCAAAAADFzeVb7/r06aM///xTkjRo0CC1adNGn332mby9vTVlypTCrg8AAAAAip3LQalr1672f9evX1+7du3SL7/8okqVKql8+fKFWhwAAAAAuIPTt96dOHFCzzzzjCpWrKjw8HB16dJFf//9t/z9/XX99dcTkgAAAACUGk4HpUGDBmnKlClq3769HnjgAaWmpurpp58uytoAAAAAwC2cvvUuJSVFkyZN0gMPPCBJeuihh3TTTTcpJydHHh4eRVYgAAAAABQ3p68o7dmzR82aNbNPN2zYUJ6envaBHQAAAACgtHA6KOXk5Mjb29uhzdPTU2fPni30ogAA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l7Heepedna0BAwaoYsWKCggIUKNGjbR06dILnkMAKM0ISgBwBfLw8FBycrLGjh2rP/7447K2tXjxYv3555/6/vvvNXr0aCUlJalDhw4qV66cVq9erZ49e6pnz57as2ePJOnEiRNq0aKFAgMD9f3332v58uUKDAxU27ZtHa4cLVq0SFu3blVqaqrmzJmjEydOqG3btipXrpzWrl2rr776St99952effbZ89a2Z88ederUSbfffrvS09P1+OOP6+WXX3ZYZvPmzWrTpo06deqkTZs26YsvvtDy5csvuN25c+eqU6dOat++vTZs2KBFixapQYMG9vk9evTQjz/+qNmzZ2vlypUyxuj222/XmTNn7MucOHFC7777rmbMmKH58+dr6dKl6tSpk+bNm6d58+bp008/1cSJE/Xf//7XYd9vvPGGEhIStH79eg0cOFAvvPCCUlNT7fPLlCmjd999Vz/99JOmTp2qxYsXa8CAAfb5P/zwg3r27Knnn39e6enpatWqlYYNG5bvGHfu3KlZs2Zpzpw5mjNnjtLS0vLdrnmuRx55RD/88INmzJihTZs26b777lPbtm0dAiIAXFUMAOCK0r17d3PnnXcaY4xp3LixefTRR40xxnz99dfm3I/1QYMGmbp16zqs+/bbb5vKlSs7bKty5comJyfH3la9enXTrFkz+/TZs2dNQECA+fzzz40xxkyaNMlUr17d5Obm2pc5ffq08fPzMwsWLLBvNyIiwpw+fdq+zMSJE025cuXMsWPH7G1z5841ZcqUMZmZmQUe68CBA02NGjUc9vXSSy8ZSebQoUPGGGMefvhh8+STTzqst2zZMlOmTBlz8uTJArfbpEkT07Vr1wLn/frrr0aS+eGHH+xtf//9t/Hz8zNffvmlMcaYyZMnG0lmx44d9mWeeuop4+/vb44ePWpva9OmjXnqqafs05UrVzZt27Z12N/9999v2rVrV2Atxhjz5ZdfmrCwMIfl27dv77BM165dTUhIiH160KBBxt/f3xw5csTe9uKLL5pGjRrZpxMTE83zzz9vjDFmx44dxmazmb179zpst2XLlmbgwIHnrQ0ASjOuKAHAFWzkyJGaOnWqfv7550veRq1atVSmzP/9OoiIiFCdOnXs0x4eHgoLC1NWVpYkad26ddqxY4eCgoIUGBiowMBAhYaG6tSpU9q5c6d9vTp16sjb29s+vXXrVtWtW1cBAQH2tptuukm5ubnatm1bgbVt3bpVjRs3dhikokmTJg7LrFu3TlOmTLHXEhgYqDZt2ig3N1cZGRkFbjc9PV0tW7Y87z49PT3VqFEje1tYWJiqV6+urVu32tv8/f1VtWpVh/MWGxurwMBAh7a883a++ps0aeKw3SVLlqhVq1aqWLGigoKC1K1bNx04cMB+K+G2bdvUsGFDh21Yp6V/b/M79xmkqKiofLXkWb9+vYwxqlatmsN5TEtLc3hPAeBq4unuAgAAl+6WW25RmzZt9J///Ec9evRwmFemTBkZYxzazr11LI+Xl5fDtM1mK7AtNzdXkpSbm6sbbrhBn332Wb5tVahQwf7vcwORJBljzjsq3/narfUXJDc3V0899ZR69+6db16lSpUKXMfPz++82zvfPq31u3reLiRvu7///rtuv/129ezZU0OGDFFoaKiWL1+uxx57zP7eFXQeC6rZlVpyc3Pl4eGhdevWycPDw2HeucEPAK4mBCUAuMKNGDFC9erVsw+YkKdChQrKzMx0+MM6PT39svd3/fXX64svvlB4eLiCg4OdXq9mzZqaOnWqjh8/bg9RP/zwg8qUKZOv9nPXmTVrlkPbqlWr8tWzZcsWXXvttU7XkpCQoEWLFumRRx4pcJ9nz57V6tWr1bRpU0nSgQMH9Ouvv6pGjRpO7+N8rPWvWrVK1113nSTpxx9/1NmzZ/XWW2/Zr/J9+eWXDstfd911WrNmjUPbjz/+eFk11a9fXzk5OcrKylKzZs0ua1sAUFpw6x0AXOHq1Kmjrl275hs9rXnz5tq/f79GjRqlnTt36r333tO333572fvr2rWrypcvrzvvvFPLli1TRkaG0tLS9Pzzz19wYImuXbvK19dX3bt3108//aQlS5boueee08MPP6yIiIgC1+nZs6d27typvn37atu2bZo+fbqmTJnisMxLL72klStX6plnnlF6erq2b9+u2bNn67nnnjtvLYMGDdLnn3+uQYMGaevWrdq8ebNGjRolSYqPj9edd96pJ554QsuXL9fGjRv10EMPqWLFirrzzjtdP2EWP/zwg0aNGqVff/1V7733nr766is9//zzkqSqVavq7NmzGjt2rH777Td9+umnmjBhgsP6zz33nObNm6fRo0dr+/bt+uCDD/Ttt99e1ndoVatWTV27dlW3bt2UkpKijIwMrV27ViNHjtS8efMu63gB4EpFUAKAUmDIkCH5br+qUaOG3n//fb333nuqW7eu1qxZo/79+1/2vvz9/fX999+rUqVK6tSpk2rUqKFHH31UJ0+evOAVJn9/fy1YsEAHDx7UjTfeqHvvvVctW7bUuHHjzrtOpUqVNHPmTH3zzTeqW7euJkyYoOTkZIdlEhISlJaWpu3bt6tZs2aqX7++XnvtNUVFRZ13u82bN9dXX32l2bNnq169err11lu1evVq+/zJkyfrhhtuUIcOHdSkSRMZYzRv3rx8t7Ndin79+mndunWqX7++hgwZorfeektt2rSRJNWrV0+jR4/WyJEjVbt2bX322Wf5hoC/6aabNGHCBI0ePVp169bV/Pnz9cILL8jX1/ey6po8ebK6deumfv36qXr16rrjjju0evVqxcTEXNZ2AeBKZTPO3AAOAAAuW2xsrPr06ePw/UWF4YknntAvv/yiZcuWFep2AeBqxjNKAABcYd588021atVKAQEB+vbbbzV16lS9//777i4LAEoVghIAAFeYNWvWaNSoUTp69KiqVKmid999V48//ri7ywKAUoVb7wAAAADAgsEcAAAAAMCCoAQAAAAAFgQlAAAAALAgKAEAAACABUEJAAAAACwISgAAAABgQVACAAAAAAuCEgAAAABY/H+p6RTzLCL8LgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Création du barplot groupé\n", + "fig, ax = plt.subplots(figsize=(10, 6))\n", + "\n", + "categories = company_genders[\"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 company_genders[\"y_has_purchased\"].unique():\n", + " label_data = company_genders[df_graph['y_has_purchased'] == label]\n", + " values = [label_data[label_data['number_company'] == category]['share_of_women'].values[0]*100 for category in categories]\n", + "\n", + " label_printed = \"achat durant la période\" if label else \"aucun achat\"\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 femmes (%)')\n", + "ax.set_title('Part de femmes selon les compagnies de spectacle (train set)')\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 - la proportion de femmes est la même selon qu'il y ait achat sur la période ou non\n", + "plt.show()" + ] + }, { "cell_type": "code", "execution_count": 144, @@ -3459,6 +5367,178 @@ "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 60, + "id": "b459f81f-6d30-44fa-ad65-e85acbf12fd2", + "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", + "
number_companyy_has_purchasedcountry_fr
0100.00.995421
1101.00.999097
2110.00.995433
3111.00.995016
4120.00.001565
5121.00.002656
6130.00.843896
7131.00.775967
8140.00.995202
9141.00.984715
\n", + "
" + ], + "text/plain": [ + " number_company y_has_purchased country_fr\n", + "0 10 0.0 0.995421\n", + "1 10 1.0 0.999097\n", + "2 11 0.0 0.995433\n", + "3 11 1.0 0.995016\n", + "4 12 0.0 0.001565\n", + "5 12 1.0 0.002656\n", + "6 13 0.0 0.843896\n", + "7 13 1.0 0.775967\n", + "8 14 0.0 0.995202\n", + "9 14 1.0 0.984715" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# graphique sur le train set\n", + "\n", + "company_country_fr = train_set_spectacle.groupby([\"number_company\", \"y_has_purchased\"])[[\"country_fr\"]].mean().reset_index()\n", + "company_country_fr" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "357a6cd6-b1f2-41b8-9d92-155de84858cf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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00+rTp06+vDDDyXd/OtxVq5du6ZnnnlGx48f17Bhw1SiRAn99NNPeumllzLMu3LlSjVo0EBRUVGaOHGi/Pz8NHv2bL300ku6evWqzbNNt0tJSVHDhg21Zs0a9ezZU08//bRSUlK0YcMGHTlyRNWrV7f7mP3xxx+qXr26ChcurM8++0yhoaFasmSJevTooTNnzmjgwIE287/33nuqUaOGJk+erEuXLundd99V06ZNtWfPHjk7O2v8+PF6/fXXdfDgQf344482y86ePVvdunXTW2+9pU8//VROTk46cOCA/vjjjyzrS7/t6bnnntOjjz5qDQhhYWHWX3oGDBigatWqaeLEiXJyclJwcLBOnz4tSRo4cKBCQ0N15coV/fjjj6pdu7aWL1+eIRCPGzdOpUqVst4a8uGHH6pRo0ZKSEiQn5+fJGnJkiVq2rSpSpcurVGjRqlw4cI6dOiQli5dal3P8ePHFRgYqOHDhysoKEjnzp3TtGnTFBUVpW3btqlkyZJZ7mu7du20detWDR06VCVKlNCFCxe0detWnT17Nus3UNLy5cv17LPPqlq1apo9e7ZSU1M1cuRI/e9//8swb5cuXRQXF6cePXpoxIgROnfunD7++GNVr15dO3bsUEhIiBITE1WvXj0VLVpU48aNU0hIiE6ePKmVK1faPI+RmSlTpqhz586qVauWJk6cqODgYO3bt0+///67dZ6ZM2eqbdu2ql+/vmbNmqWkpCSNHDnS+t48+eSTNuts2bKlXn75ZXXp0kXLli2z/kL7yy+/qFu3burTp49mzpypd999V8WLF1eLFi1sln/vvfdUuXJlTZ48WRcvXlRMTIxq166tbdu2qVixYpJuXitKliypVq1aKSAgQCdOnNCECRP0+OOP648//lCBAgUkSTt37lS9evVUokQJTZs2TZ6enpo4caJmzJiR6fHYsWOH3nnnHfXv318hISGaPHmyXn31VRUvXlxPPfVUlsfR3utD7969NX36dA0ZMkSVKlVSYmKifv/997ueM3/88Yfq1q2riIgIxcXFydPTU+PHj9fMmTMzzBsbG6sPPvhAHTt21AcffKDk5GR98sknqlmzpjZt2qQyZcpkuR1767tx44YaNWqkLl26qH///lq3bp2GDBmiw4cPa8GCBdb57Dl/pbufhx9++KESExP1/fff2wT4sLAwSdLBgwfVpk0bFS1aVK6urtqxY4eGDh2qP//80yYI23O+Z+Zejunff/+tXbt26Y033rBpX79+/V0/rzp16qTGjRtr+vTpSkxMVL58+e7pmpXu+eef10svvaRXX31Vu3bt0oABAyQpwx8NbmXvdcae9/xOnzvpateurQEDBujChQs2ARSQATxkpk6dakgyNmzYYNy4ccO4fPmysXDhQiMoKMjw8fExTp48mWGZ1NRU48aNG8bHH39sBAYGGmlpadZpRYoUMZydnY29e/dmWM7Ly8t45ZVX7KprwoQJhiTjv//9r017586dDUnG1KlTrW2lSpUyKlWqZNy4ccNm3iZNmhhhYWFGampqltv5+uuvDUnGl19+ecd6ihQpYlN7QkJChjqio6ONRx55xLh48aLNst27dzfc3d2Nc+fOGYZhGCtXrjQkGY0aNbKZ79tvvzUkGevXr7e2NW7c2ChSpEiGerp3727kz5//jjXfaV8aN25s05Ze01NPPXXX5VNSUowbN24YdevWNZ577jlre/oxKVeunJGSkmJt37RpkyHJmDVrlrXt0UcfNR599FHj2rVrdtedkpJiJCcnG5GRkUavXr0ybPfW98Lb29vo2bOn3etOFxUVZYSHh9vUdenSJSMgIMC49SNi/fr1hiTjs88+s1n+6NGjhoeHh9GvXz/DMAxj8+bNhiRj3rx5puq4fPmy4evrazz55JM2/79ulZqaaoSHhxvlypWzOccvX75sBAcHG9WrV7e2DRw4MNN6K1asaEgy5s6da227ceOGERQUZLRo0cLaln5+VK5c2aaeQ4cOGfny5TNee+21LPclJSXFuHLliuHl5WX8+9//tra/+OKLhpeXl3H69GmbfSpTpowhyUhISLC2FylSxHB3dzcOHz5sbbt27ZoREBBgdOnSJUOdK1eutLbZe30oW7as0bx58yz3IysvvfSS4eHhYXOtTElJMUqVKmWzH0eOHDFcXFyMt956y2b5y5cvG6GhoUbLli3vuB176nvllVcMSTbH2TAMY+jQoYYkY+3atYZh2H/+2nMeGoZhvPnmm4Y9v0Klf3Z8/fXXhrOzs/WaaO920s/jdPd6TOfMmWP9/LtdVp9X6Z+Z7du3v+O6DcPcNSt930aOHGmzjm7duhnu7u53PC72XGfsfc8NI+vPnXTLli0zJBk///xzlvPg4cStfXhoPfHEE8qXL598fHzU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n3yiAgUKKCIiQqtXr9aUKVMy/EX+/fff14IFC1S3bl29//778vDw0MSJE61fAn6vt9ums/f6EBUVpSZNmqh8+fLy9/fXnj17NH369LsG0g8++EDz58/X008/rY8++kienp4aN25chi8zj4iI0Mcff6z3339ff/31lxo0aCB/f3/973//06ZNm6w9Tlmxtz5XV1d99tlnunLlih5//HHrqH0NGza0juJo7/lrz3koyfpL+IgRI9SwYUM5OzurfPnyqlevnlxdXdW6dWv169dP169f14QJEzLccmrvdm6XHcfUw8NDGzZsyPBskpnPq3T/9Jp1r+y5ztj7nqfve2afO+k2bNigwMDATP9ghIfcfR/eAshl6SMQxcfH33G+r776yihZsqTh5uZmFCtWzBg2bJgxZcqUTEfXun1EuHTbt283atSoYXh6ehqSjFq1at1xm3///bfx/PPPG97e3oaPj4/x/PPPG+vWrcsw2pFhGMaOHTuMli1bGsHBwUa+fPmM0NBQ4+mnnzYmTpx412Nw7do146OPPjIiIyMNV1dXIzAw0Hj66aeNdevW2ezX3UbtS2/v1KmTUbBgQSNfvnxGUFCQUb16dWPIkCHWedJHFvvuu+8yLHv7Os+dO2e88MILRv78+Q2LxWIdsWratGlGnTp1jJCQEMPV1dUIDw83WrZsaezcufOu+3unUftur8kwDCMpKcno06ePUbBgQcPd3d2oXLmyMW/ePOOVV16xGdkpvf5PPvkkwzokGQMHDrRpW79+vdGwYUPDx8fHkGQ8+uijNiNbnT9/3nj11VeN4OBgw9PT03jyySeNNWvWGLVq1bI5d24/btevXze6du1qlC9f3vD19TU8PDyMkiVLGgMHDjQSExPvenzmz59vlC9f3nB1dTUKFy5sDB8+PMNoYem++uorIyoqyvDy8jI8PDyMRx991Gjfvr2xefNmwzAM488//zRat25tPProo4aHh4fh5+dnVK1a1YiLi7trHYZhGIsWLTJq1apleHl5GZ6enkaZMmWMESNG2Mwzb948IyoqynB3dze8vLyMunXrGr/99pvNPOn13zpCnmHcHOXNy8srw3Zr1aplPPbYY9bX6efH9OnTjR49ehhBQUGGm5ubUbNmTeu+pkv/f+vv72/4+PgYDRo0MH7//fcM/4cMwzDWrFljREVFGW5ubkZoaKjRt29fY8SIEYYk48KFC9b5srqu3H4uZDZqn2HYd33o37+/UaVKFcPf3996nevVq5dx5syZDNu93W+//WY88cQTNvsxadKkDNdHw7j5ftWpU8fw9fU13NzcjCJFihgvvPCC8csvv9xxG/bUl/5+7ty506hdu7bh4eFhBAQEGG+88YZx5cqVDOu82/mb7m7nYVJSkvHaa68ZQUFB1utU+n4vWLDAqFChguHu7m4ULFjQ6Nu3r/Hzzz9n+j7dbTtZ/T/8p8fUMAyjXbt2RpkyZTK0Z/V5dafPzH96zbp1327/P5q+vdvPo1uZuc7Y855n9bljGIaRlpZmFClSJMNIiYBhGIbFMEz0KQMAskWHDh30zDPP6OWXX87tUpCJVatWqU6dOvruu+/0wgsv5Oi26tevr0OHDllHdIP9OnTooO+//15XrlzJ7VLyjM2bN+vxxx/Xhg0bFBUVldvlOLzly5erfv362r17t/XWSCAdt/YBwH2UPjR5UlKSvv/+e4LUQ6Z3796qVKmSChUqpHPnzumbb77RsmXLNGXKlNwuDQ+JKlWqqGXLlho8eLAWLlyY2+U4vCFDhqhTp06EKGSKIAUA99F///tfff755/L399eYMWNyuxzcZ6mpqfroo4908uRJWSwWlSlTRtOnTydQ47767LPPNGXKFF2+fPmOgxM97M6fP69atWpZvzoAuB239gEAAACASQx/DgAAAAAmEaQAAAAAwCSCFAAAAACYxGATuvnN8sePH5ePj4/1W8kBAAAAPHwMw9Dly5cVHh5+xy9LJ0hJOn78uAoVKpTbZQAAAABwEEePHtUjjzyS5XSClGQd+vPo0aPy9fXN5WoAAAAA5JZLly6pUKFCd/16AIKUZL2dz9fXlyAFAAAA4K6P/DDYBAAAAACYRJACAAAAAJMIUgAAAABgEs9IAcB9YBiGUlJSlJqamtulAHlevnz55OzsnNtlAHjIEaQAIIclJyfrxIkTunr1am6XAjwQLBaLHnnkEXl7e+d2KQAeYgQpAMhBaWlpSkhIkLOzs8LDw+Xq6soXfwP3wDAMnT59Wn///bciIyPpmQKQawhSAJCDkpOTlZaWpkKFCsnT0zO3ywEeCEFBQTp06JBu3LhBkAKQaxhsAgDuAycnLrdAdqFXF4Aj4JMdAAAAAEwiSAEAAACASTwjBQC5JKL/T/d1e4eGN76v28vLOnTooAsXLmjevHm5XQoAwEHRIwUAQA5YtWqVLBaLLly4kNulAAByAEEKAAAAAEwiSAEAMrV48WI9+eSTyp8/vwIDA9WkSRMdPHjQOj2zHpft27fLYrHo0KFD1rbffvtNtWrVkqenp/z9/RUdHa3z589LkiIiIjR69Gib7VasWFExMTHW1xaLRZMnT9Zzzz0nT09PRUZGav78+XesfcaMGapSpYp8fHwUGhqqNm3a6NSpUzbz7N69W40bN5avr698fHxUs2ZNm/2TpE8//VRhYWEKDAzUm2++qRs3bti1jUOHDqlOnTqSJH9/f1ksFnXo0OGONQMA8pZcDVK//vqrmjZtqvDwcFkslgz3ohuGoZiYGIWHh8vDw0O1a9fW7t27beZJSkrSW2+9pQIFCsjLy0vNmjXT33//fR/3AgAeTImJierdu7fi4+O1fPlyOTk56bnnnlNaWprd69i+fbvq1q2rxx57TOvXr9fatWvVtGlTpaammqpl0KBBatmypXbu3KlGjRqpbdu2OnfuXJbzJycna/DgwdqxY4fmzZunhIQEmyBz7NgxPfXUU3J3d9eKFSu0ZcsWderUSSkpKdZ5Vq5cqYMHD2rlypWaNm2a4uLiFBcXZ9c2ChUqpB9++EGStHfvXp04cUL//ve/Te0zAMCx5epgE4mJiapQoYI6duyo559/PsP0kSNHatSoUYqLi1OJEiU0ZMgQ1atXT3v37pWPj48kqWfPnlqwYIFmz56twMBAvfPOO2rSpIm2bNnCl/QBwD24/bo8ZcoUBQcH648//lDZsmXtWsfIkSNVpUoVjR8/3tr22GOPma6lQ4cOat26tSQpNjZWY8aM0aZNm9SgQYNM5+/UqZP138WKFdMXX3yhqlWr6sqVK/L29ta4cePk5+en2bNnK1++fJKkEiVK2KzD399fY8eOlbOzs0qVKqXGjRtr+fLl6ty5s13bCAgIkCQFBwcrf/78pvcZAODYcrVHqmHDhhoyZIhatGiRYZphGBo9erTef/99tWjRQmXLltW0adN09epVzZw5U5J08eJFTZkyRZ999pmeeeYZVapUSTNmzNCuXbv0yy+/3O/dAYAHysGDB9WmTRsVK1ZMvr6+Klq0qCTpyJEjdq8jvUfqXpUvX976by8vL/n4+GS4Ve9W27Zt07PPPqsiRYrIx8dHtWvXlvR/tW/fvl01a9a0hqjMPPbYYzZ/kAsLC7PZ5t22AQB4sDnsM1IJCQk6efKk6tevb21zc3NTrVq1tG7dOknSli1bdOPGDZt5wsPDVbZsWes8mUlKStKlS5dsfgAAtpo2baqzZ8/qyy+/1MaNG7Vx40ZJN29pkyQnp5sfIYZhWJe59RkiSfLw8LjjNpycnGyWz2wdkjIEHovFkuUthomJiapfv768vb01Y8YMxcfH68cff7Sp/W513W2b9mwDAPBgc9ggdfLkSUlSSEiITXtISIh12smTJ+Xq6ip/f/8s58nMsGHD5OfnZ/0pVKhQNlcPAHnb2bNntWfPHn3wwQeqW7euSpcubR0gIl1QUJAk6cSJE9a27du328xTvnx5LV++PMvtBAUF2Sx/6dIlJSQk3FPtf/75p86cOaPhw4erZs2aKlWqVIbeq/Lly2vNmjWZhrbs2oarq6skmX4eDACQNzj8F/JaLBab14ZhZGi73d3mGTBggHr37m19fenSJcJUTovxy+0KslfMxdyuAMhR/v7+CgwM1KRJkxQWFqYjR46of//+NvMUL15chQoVUkxMjIYMGaL9+/frs88+s5lnwIABKleunLp166auXbvK1dVVK1eu1IsvvqgCBQro6aefVlxcnJo2bSp/f399+OGH9/x8a+HCheXq6qoxY8aoa9eu+v333zV48GCbebp3764xY8aoVatWGjBggPz8/LRhwwZVrVpVJUuWzJZtFClSRBaLRQsXLlSjRo3k4eEhb2/ve9o3AIDjcNggFRoaKulmr1NYWJi1/dSpU9ZeqtDQUCUnJ+v8+fM2vVKnTp1S9erVs1y3m5ub3NzccqjyexfR/6fcLiHbHXLP7QrwoJ1Xh4Y3zu0S7pkj74OTk5Nmz56tHj16qGzZsipZsqS++OIL63NA0s1b32bNmqU33nhDFSpU0OOPP64hQ4boxRdftM5TokQJLV26VO+9956qVq0qDw8PRUVFWQeOGDBggP766y81adJEfn5+Gjx48D33SAUFBSkuLk7vvfeevvjiC1WuXFmffvqpmjVrZp0nMDBQK1asUN++fVWrVi05OzurYsWKqlGjRrZto2DBgho0aJD69++vjh07qn379jaj/gG4v/gcRHazGLffnJ5LLBaLfvzxRzVv3lzSzV6l8PBw9erVS/369ZN0877z4OBgjRgxQl26dNHFixcVFBSkGTNmqGXLlpJu3mLyyCOPaNGiRYqOjrZr25cuXZKfn58uXrwoX1/fHNk/Mx60/+iSdMi9TW6XkL3yYI/Ug3Ze5ZVz6rp3ISXU+ExFCwbJ3eXOvekKr3R/igLyuOvXryshIUFFixaVuzt/qYN9HrjPQYJUjrE3G+Rqj9SVK1d04MAB6+uEhARt375dAQEBKly4sHr27KnY2FhFRkYqMjJSsbGx8vT0VJs2N3+B8vPz06uvvqp33nlHgYGBCggIUJ8+fVSuXDk988wzubVbAAAAAB5wuRqkNm/ebP3md0nW55ZeeeUVxcXFqV+/frp27Zq6deum8+fPKyoqSkuXLrV+h5Qkff7553JxcVHLli117do11a1bV3FxcXyHFAAAAIAck6tBqnbt2hmGvb2VxWJRTEyMYmJispzH3d1dY8aM0ZgxY3KgQgAAAADIyGEHmwAAAACQhQdtRGQpzz2D7rDfIwUAAAAAjoogBQAAAAAmEaQAAAAAwCSCFAAAAACYRJACAOAhl5ycrNjYWO3Zsye3SwGAPIMgBQDIETExMapYsWKubX/VqlWyWCy6cOFCrtXwT3To0EHNmze/r9vs06ePdu3apVKlSt113uyoL6++NwBwK4Y/B4DcMqn2/d1eHhtWVpIOHTqkokWLatu2bbkayrJDTEyM5s2bp+3bt+d2KTZ++OEH/f7771q8eLEsFstd5//3v/99x++ABICHBT1SAABkITk5ObdLyHHPP/+8VqxYIVdX1zvOl5qaqrS0NPn5+Sl//vz3pzgAcGAEKQBAphYvXqwnn3xS+fPnV2BgoJo0aaKDBw/azPP333+rVatWCggIkJeXl6pUqaKNGzfazDN9+nRFRETIz89PrVq10uXLl+3eRtGiRSVJlSpVksViUe3atbOsd9GiRSpRooQ8PDxUp04dHTp0yGZ6Zrcajh49WhEREdbX6betDRs2TOHh4SpRooQkacaMGapSpYp8fHwUGhqqNm3a6NSpU9bl0m9VW758uapUqSJPT09Vr15de/fulSTFxcVp0KBB2rFjhywWiywWi+Li4rLcl1vZ8z7crnbt2urevbu6d+9uXe6DDz6w6UlKTk5Wv379VLBgQXl5eSkqKkqrVq2yTo+Li1P+/Pm1cOFClSlTRm5ubjp8+HCGW/uSkpLUo0cPBQcHy93dXU8++aTi4+Nt6rnbeyNJ69at01NPPSUPDw8VKlRIPXr0UGJiol3HCAByA0EKAJCpxMRE9e7dW/Hx8Vq+fLmcnJz03HPPKS0tTZJ05coV1apVS8ePH9f8+fO1Y8cO9evXzzpdkg4ePKh58+Zp4cKFWrhwoVavXq3hw4fbvY1NmzZJkn755RedOHFCc+fOzbTWo0ePqkWLFmrUqJG2b9+u1157Tf379/9H+718+XLt2bNHy5Yt08KFCyXdDB2DBw/Wjh07NG/ePCUkJKhDhw4Zln3//ff12WefafPmzXJxcVGnTp0kSS+99JLeeecdPfbYYzpx4oROnDihl156ya567naMsjJt2jS5uLho48aN+uKLL/T5559r8uTJ1ukdO3bUb7/9ptmzZ2vnzp168cUX1aBBA+3fv986z9WrVzVs2DBNnjxZu3fvVnBwcIbt9OvXTz/88IOmTZumrVu3qnjx4oqOjta5c+ck2ffe7Nq1S9HR0WrRooV27typOXPmaO3aterevbtdxwgAcgPPSAEAMvX888/bvJ4yZYqCg4P1xx9/qGzZspo5c6ZOnz6t+Ph4BQQESJKKFy9us0xaWpri4uLk4+MjSWrXrp2WL1+uoUOH2rWNoKAgSVJgYKBCQ0OzrHXChAkqVqyYPv/8c1ksFpUsWVK7du3SiBEjTO+3l5eXJk+ebHOrW3ogkqRixYrpiy++UNWqVXXlyhV5e3tbpw0dOlS1atWSJPXv31+NGzfW9evX5eHhIW9vb7m4uNxxPzJzt2OUlUKFCmU4Hp9//rk6d+6sgwcPatasWfr7778VHh4u6eaAE4sXL9bUqVMVGxsrSbpx44bGjx+vChUqZLqNxMRETZgwQXFxcWrYsKEk6csvv9SyZcs0ZcoU9e3b16735pNPPlGbNm3Us2dPSVJkZKS++OIL1apVSxMmTJC7u7upYwYA9wM9UgCATB08eFBt2rRRsWLF5Ovra73N7siRI5Kk7du3q1KlStYQlZmIiAhriJKksLAwm1vi7rYNe+3Zs0dPPPGEzWAJ1apVM7WOdOXKlcvwvNC2bdv07LPPqkiRIvLx8bHeYnh7neXLl7f+OywsTJJs9vef+KfHKLPjsX//fqWmpmrr1q0yDEMlSpSQt7e39Wf16tU2tw26urra7FNmtd24cUM1atSwtuXLl09Vq1a1DqVuz3uzZcsWxcXF2dQSHR2ttLQ0JSQk2HGUAOD+o0cKAJCppk2bqlChQvryyy8VHh6utLQ0lS1b1joAg4eHx13XkS9fPpvXFovF5pa0u23DXvaMIufk5JRhvhs3bmSYz8vLy+Z1YmKi6tevr/r162vGjBkKCgrSkSNHFB0dnaHOW/c3PTjc7Ra8u8muY3SrtLQ0OTs7a8uWLXJ2draZdmsPm4eHxx1H8ks/nrfPYxiGtc2e9yYtLU1dunRRjx49MkwrXLjwXZcHgNxAkAIAZHD27Fnt2bNH//nPf1SzZk1J0tq1a23mKV++vCZPnqxz587dsVfqXraR3jOUmpp6x3WVKVNG8+bNs2nbsGGDzeugoCCdPHnS5pd8e4Yi//PPP3XmzBkNHz5chQoVkiRt3rz5rsvdztXV9a77cTt7jlFWbt//DRs2KDIyUs7OzqpUqZJSU1N16tQp63r/ieLFi8vV1VVr165VmzZtJN0Mp5s3b7bepmfPe1O5cmXt3r07w62hAODIuLUPAJCBv7+/AgMDNWnSJB04cEArVqxQ7969beZp3bq1QkND1bx5c/3222/666+/9MMPP2j9+vXZto3g4GB5eHho8eLF+t///qeLFzP/LqyuXbvq4MGD6t27t/bu3auZM2dmGBWvdu3aOn36tEaOHKmDBw9q3Lhx+vnnn+9aZ+HCheXq6qoxY8bor7/+0vz58zV48GC79vFWERERSkhI0Pbt23XmzBklJSXddRl7jlFWjh49aj0es2bN0pgxY/T2229LkkqUKKG2bduqffv2mjt3rhISEhQfH68RI0Zo0aJFdu+Tl5eX3njjDfXt21eLFy/WH3/8oc6dO+vq1at69dVXJdn33rz77rtav3693nzzTW3fvl379+/X/Pnz9dZbb9ldCwDcbwQpAEAGTk5Omj17trZs2aKyZcuqV69e+uSTT2zmcXV11dKlSxUcHKxGjRqpXLlyGj58eIZbxe5lGy4uLvriiy/0n//8R+Hh4Xr22WczXVfhwoX1ww8/aMGCBapQoYImTpxoHTAhXenSpTV+/HiNGzdOFSpU0KZNm9SnT5+71hkUFKS4uDh99913KlOmjIYPH65PP/3Urn281fPPP68GDRqoTp06CgoK0qxZs+66jD3HKCvt27fXtWvXVLVqVb355pt666239Prrr1unT506Ve3bt9c777yjkiVLqlmzZtq4caO1181ew4cP1/PPP6927dqpcuXKOnDggJYsWSJ/f39J9r035cuX1+rVq7V//37VrFlTlSpV0ocffmh9zgwAHJHF4OvJdenSJfn5+enixYvy9fXN7XIU0f+n3C4h2x1yb5PbJWSvmMz/Ku7IHrTzKq+cU9e9CymhxmcqWjBI7i5ZP2siSQqvdH+KwgOvdu3aqlixokaPHp3bpeSI69evKyEhQUWLFmVEP9iNz8E8wEF+v7I3G9AjBQAAAAAmEaQAAAAAwCRG7QMA4AGzatWq3C4BAB549EgBAAAAgEkEKQDISf9/PB+G9QGyD+NkAXAEBCkAyEH5ks5Jqcm6eiO3KwEeHMnJyZJk91D7AJATeEYKAHKQc8pV5T/8s065viApvzzzSZasRkG/fv1+lgbkSWlpaTp9+rQ8PT3l4sKvMQByD1cgAMhhoftnSpJOFWkoObtmPWNiwn2qCMjbnJycVLhwYVmy/KsEAOQ8ghQA5DCLDIXt/0bBf83VDffArLukum++v4UBeZSrq6ucnHg6AUDuIkgBwH3inHpNzol/Zz2Du/v9KwYAANwT/pwDAAAAACYRpAAAAADAJIIUAAAAAJhEkAIAAAAAkwhSAAAAAGASQQoAAAAATCJIAQAAAIBJBCkAAAAAMIkgBQAAAAAmEaQAAAAAwCSCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMIkgBAAAAgEkEKQAAAAAwiSAFAAAAACYRpAAAAADAJIIUAAAAAJhEkAIAAAAAkwhSAAAAAGASQQoAAAAATCJIAQAAAIBJBCkAAAAAMIkgBQAAAAAmEaQAAAAAwCSX3C4AAADgVhH9f8rtErLVoeGNc7sEADmAHikAAAAAMIkgBQAAAAAmEaQAAAAAwCSCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMcugglZKSog8++EBFixaVh4eHihUrpo8//lhpaWnWeQzDUExMjMLDw+Xh4aHatWtr9+7duVg1AAAAgAedQwepESNGaOLEiRo7dqz27NmjkSNH6pNPPtGYMWOs84wcOVKjRo3S2LFjFR8fr9DQUNWrV0+XL1/OxcoBAAAAPMhccruAO1m/fr2effZZNW7cWJIUERGhWbNmafPmzZJu9kaNHj1a77//vlq0aCFJmjZtmkJCQjRz5kx16dIl0/UmJSUpKSnJ+vrSpUs5vCcAAAAAHiQO3SP15JNPavny5dq3b58kaceOHVq7dq0aNWokSUpISNDJkydVv3596zJubm6qVauW1q1bl+V6hw0bJj8/P+tPoUKFcnZHAAAAADxQHLpH6t1339XFixdVqlQpOTs7KzU1VUOHDlXr1q0lSSdPnpQkhYSE2CwXEhKiw4cPZ7neAQMGqHfv3tbXly5dIkwBAAAAsJtDB6k5c+ZoxowZmjlzph577DFt375dPXv2VHh4uF555RXrfBaLxWY5wzAytN3Kzc1Nbm5uOVY3AAAAgAebQwepvn37qn///mrVqpUkqVy5cjp8+LCGDRumV155RaGhoZJu9kyFhYVZlzt16lSGXioAAAAAyC4O/YzU1atX5eRkW6Kzs7N1+POiRYsqNDRUy5Yts05PTk7W6tWrVb169ftaKwAAAICHh0P3SDVt2lRDhw5V4cKF9dhjj2nbtm0aNWqUOnXqJOnmLX09e/ZUbGysIiMjFRkZqdjYWHl6eqpNmza5XD0AAACAB5VDB6kxY8boww8/VLdu3XTq1CmFh4erS5cu+uijj6zz9OvXT9euXVO3bt10/vx5RUVFaenSpfLx8cnFygEAAAA8yBw6SPn4+Gj06NEaPXp0lvNYLBbFxMQoJibmvtUFAAAA4OHm0M9IAQAAAIAjIkgBAAAAgEkEKQAAAAAwyaGfkQIAAMjzYvxyu4LsF3MxtysAch09UgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMIkgBAAAAgEkEKQAAAAAwiSAFAAAAACYRpAAAAADAJIIUAAAAAJhEkAIAAAAAkwhSAAAAAGASQQoAAAAATCJIAQAAAIBJLmZmvnjxon788UetWbNGhw4d0tWrVxUUFKRKlSopOjpa1atXz6k6AQAAAMBh2NUjdeLECXXu3FlhYWH6+OOPlZiYqIoVK6pu3bp65JFHtHLlStWrV09lypTRnDlzcrpmAAAAAMhVdvVIVahQQe3bt9emTZtUtmzZTOe5du2a5s2bp1GjRuno0aPq06dPthYKAAAAAI7CriC1e/duBQUF3XEeDw8PtW7dWq1bt9bp06ezpTgAAAAAcER23dp3txB1r/MDAAAAQF7yj0ftu3z5svr27avHH39clStX1ltvvaUzZ85kZ20AAAAA4JD+cZDq3Lmzzpw5o0GDBmngwIH666+/1LZt2+ysDQAAAAAckt3Dn3/++efq2bOnLBaLJCk+Pl779u2Ts7OzJKlkyZJ64okncqZKAAAAAHAgdgepAwcOKCoqSv/5z39UqVIl1atXT40bN1bz5s1148YNTZ8+XdHR0TlZKwAAAAA4BLuD1Lhx47R+/Xp16tRJderU0bBhwzRjxgwtW7ZMqampevHFF9W9e/ecrBUAAAAAHILdQUqSqlWrpvj4eA0fPlzVqlXTJ598oh9++CGnagMAAAAAh2R6sAkXFxd98MEHWrBggUaPHq0XXnhBJ0+ezInaAAAAAMAh2R2kdu3apapVq8rHx0c1atRQWlqali9frkaNGql69eqaMGFCTtYJAAAAAA7D7iDVsWNHPfnkk4qPj9eLL76orl27SpI6deqkjRs3au3atapWrVqOFQoAAAAAjsLuZ6T27t2r2bNnq3jx4oqMjNTo0aOt04KCgvTNN99o6dKlOVEjAAAAADgUu4NU7dq19frrr6tVq1ZasWKFatSokWGe+vXrZ2txAAAAAOCI7L617+uvv1blypX13//+V8WKFeOZKAAAAAAPLbt7pPz9/fXpp5/mZC0AAAAAkCfY1SN15MgRUys9duzYPyoGAAAAAPICu4LU448/rs6dO2vTpk1ZznPx4kV9+eWXKlu2rObOnZttBQIAAACAo7Hr1r49e/YoNjZWDRo0UL58+VSlShWFh4fL3d1d58+f1x9//KHdu3erSpUq+uSTT9SwYcOcrhsAAAAAco1dPVIBAQH69NNPdfz4cU2YMEElSpTQmTNntH//fklS27ZttWXLFv3222+EKAAAAAAPPLsHm5Akd3d3tWjRQi1atMipegAAAADA4dk9/DkAAAAA4CaCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwyHaSmTZumn376yfq6X79+yp8/v6pXr67Dhw9na3EAAAAA4IhMB6nY2Fh5eHhIktavX6+xY8dq5MiRKlCggHr16pXtBQIAAACAozH1PVKSdPToURUvXlySNG/ePL3wwgt6/fXXVaNGDdWuXTu76wMAAAAAh2O6R8rb21tnz56VJC1dulTPPPOMpJtf1nvt2rXsrQ4AAAAAHJDpHql69erptddeU6VKlbRv3z41btxYkrR7925FRERkd30AAAAA4HBM90iNGzdO1apV0+nTp/XDDz8oMDBQkrRlyxa1bt062wsEAAAAAEdjukcqf/78Gjt2bIb2QYMGZUtBAAAAAODo7ApSO3fuVNmyZeXk5KSdO3fecd7y5ctnS2EAAAAA4KjsClIVK1bUyZMnFRwcrIoVK8piscgwDOv09NcWi0Wpqak5ViwAAAAAOAK7glRCQoKCgoKs/wYAAACAh5ldQapIkSKZ/hsAAAAAHkamB5tI98cff+jIkSNKTk62aW/WrNk9FwUAAAAAjsx0kPrrr7/03HPPadeuXTbPSlksFkniGSkAAAAADzzT3yP19ttvq2jRovrf//4nT09P7d69W7/++quqVKmiVatW5UCJAAAAAOBYTPdIrV+/XitWrFBQUJCcnJzk5OSkJ598UsOGDVOPHj20bdu2nKgTAAAAAByG6R6p1NRUeXt7S5IKFCig48ePS7o5CMXevXuztzoAAAAAcECme6TKli2rnTt3qlixYoqKitLIkSPl6uqqSZMmqVixYjlRIwAAAAA4FNNB6oMPPlBiYqIkaciQIWrSpIlq1qypwMBAzZkzJ9sLBAAAAABHYzpIRUdHW/9drFgx/fHHHzp37pz8/f2tI/cBAAAAwIPM9DNSFy9e1Llz52zaAgICdP78eV26dCnbCgMAAAAAR2U6SLVq1UqzZ8/O0P7tt9+qVatWkqQLFy7cc2EAAAAA4KhMB6mNGzeqTp06Gdrr1KmjxYsX6+mnn9YjjzyiZs2aZUuBAAAAAOBoTD8jlZSUpJSUlAztycnJkqTp06frwoULqlKlyr1XBwAAAAAOyHSP1OOPP65JkyZlaJ84caJq1KihggULyt3dXa1bt86WAgEAAADA0ZjukRo6dKieeeYZ7dixQ3Xr1pUkLV++XPHx8Vq6dKkk6dFHH9VXX32VvZUCAAAAgIMw3SNVo0YNrV+/XoUKFdK3336rBQsWqHjx4tq5c6dq1qyZEzUCAAAAgEMxHaQkqWLFivrmm2+0e/dubd68WV999ZUiIyOzuzZJ0rFjx/Tyyy8rMDBQnp6eqlixorZs2WKdbhiGYmJiFB4eLg8PD9WuXVu7d+/OkVoAAAAAQPqHQSrdtWvXdOnSJZuf7HT+/HnVqFFD+fLl088//6w//vhDn332mfLnz2+dZ+TIkRo1apTGjh2r+Ph4hYaGql69erp8+XK21gIAAAAA6Uw/I3X16lX169dP3377rc6ePZthempqarYUJkkjRoxQoUKFNHXqVGtbRESE9d+GYWj06NF6//331aJFC0nStGnTFBISopkzZ6pLly6ZrjcpKUlJSUnW13yRMAAAAAAzTPdI9e3bVytWrND48ePl5uamyZMna9CgQQoPD9fXX3+drcXNnz9fVapU0Ysvvqjg4GBVqlRJX375pXV6QkKCTp48qfr161vb3NzcVKtWLa1bty7L9Q4bNkx+fn7Wn0KFCmVr3QAAAAAebKaD1IIFCzR+/Hi98MILcnFxUc2aNfXBBx8oNjZW33zzTbYW99dff2nChAmKjIzUkiVL1LVrV/Xo0cMa2E6ePClJCgkJsVkuJCTEOi0zAwYM0MWLF60/R48ezda6AQAAADzYTN/ad+7cORUtWlSS5Ovrq3PnzkmSnnzySb3xxhvZWlxaWpqqVKmi2NhYSVKlSpW0e/duTZgwQe3bt7fOZ7FYbJYzDCND263c3Nzk5uaWrbUCAAAAeHiY7pEqVqyYDh06JEkqU6aMvv32W0k3e6puHQQiO4SFhalMmTI2baVLl9aRI0ckSaGhoZKUoffp1KlTGXqpAAAAACC7mA5SHTt21I4dOyTdvEUu/VmpXr16qW/fvtlaXI0aNbR3716btn379qlIkSKSpKJFiyo0NFTLli2zTk9OTtbq1atVvXr1bK0FAAAAANKZvrWvV69e1n/XqVNHf/75pzZv3qxHH31UFSpUyNbievXqperVqys2NlYtW7bUpk2bNGnSJE2aNEnSzVv6evbsqdjYWEVGRioyMlKxsbHy9PRUmzZtsrUWAAAAAEhnOkjdrnDhwipcuHB21JLB448/rh9//FEDBgzQxx9/rKJFi2r06NFq27atdZ5+/frp2rVr6tatm86fP6+oqCgtXbpUPj4+OVITAAAAAPyjILV8+XItX75cp06dUlpams20r776KlsKS9ekSRM1adIky+kWi0UxMTGKiYnJ1u0CAAAAQFZMB6lBgwbp448/VpUqVRQWFnbH0fEAAAAA4EFkOkhNnDhRcXFxateuXU7UAwAAAAAOz/SofcnJyYyIBwAAAOChZjpIvfbaa5o5c2ZO1AIAAAAAeYLpW/uuX7+uSZMm6ZdfflH58uWVL18+m+mjRo3KtuIAAAAAwBGZDlI7d+5UxYoVJUm///67zTQGngAAAADwMDAVpFJTUxUTE6Ny5copICAgp2oCAAAAAIdm6hkpZ2dnRUdH6+LFizlVDwAAAAA4PNODTZQrV05//fVXTtQCAAAAAHmC6SA1dOhQ9enTRwsXLtSJEyd06dIlmx8AAAAAeNCZHmyiQYMGkqRmzZrZDC5hGIYsFotSU1OzrzoAAAAAcECmg9TKlStzog4AAAAAyDPsClItWrRQXFycfH19dfjwYb300ktyc3PL6doAAAAAwCHZ9YzUwoULlZiYKEnq2LEjo/YBAAAAeKjZ1SNVqlQpDRgwQHXq1JFhGPr222/l6+ub6bzt27fP1gIBAAAAwNHYFaQmTpyo3r1766effpLFYtEHH3xgM9BEOovFQpACAAAA8MCzK0hVr15dGzZskCQ5OTlp3759Cg4OztHCAAAAAMBRmf4eqYSEBAUFBeVELQAAAACQJ5ge/rxIkSI5UQcAAAAA5Bmme6QAAAAA4GFHkAIAAAAAkwhSAAAAAGCS6SB17do1Xb161fr68OHDGj16tJYuXZqthQEAAACAozIdpJ599ll9/fXXkqQLFy4oKipKn332mZ599llNmDAh2wsEAAAAAEdjOkht3bpVNWvWlCR9//33CgkJ0eHDh/X111/riy++yPYCAQAAAMDRmA5SV69elY+PjyRp6dKlatGihZycnPTEE0/o8OHD2V4gAAAAADga00GqePHimjdvno4ePaolS5aofv36kqRTp07J19c32wsEAAAAAEdjOkh99NFH6tOnjyIiIhQVFaVq1apJutk7ValSpWwvEAAAAAAcjYvZBV544QU9+eSTOnHihCpUqGBtr1u3rlq0aJGtxQEAAACAIzLdI9WpUyd5eXmpUqVKcnL6v8Ufe+wxjRgxIluLAwAAAABHZDpITZs2TdeuXcvQfu3aNeuw6AAAAADwILP71r5Lly7JMAwZhqHLly/L3d3dOi01NVWLFi1ScHBwjhQJAAAAAI7E7iCVP39+WSwWWSwWlShRIsN0i8WiQYMGZWtxAAAAAOCI7A5SK1eulGEYevrpp/XDDz8oICDAOs3V1VVFihRReHh4jhQJAAAAAI7E7iBVq1YtSVJCQoIKFSpkM9AEAAAAADxMTA9/XqRIEV24cEGbNm3SqVOnlJaWZjO9ffv22VYcAAAAADgi00FqwYIFatu2rRITE+Xj4yOLxWKdZrFYCFIAAAAAHnim789755131KlTJ12+fFkXLlzQ+fPnrT/nzp3LiRoBAAAAwKGYDlLHjh1Tjx495OnpmRP1AAAAAIDDMx2koqOjtXnz5pyoBQAAAADyBNPPSDVu3Fh9+/bVH3/8oXLlyilfvnw205s1a5ZtxQEAAACAIzIdpDp37ixJ+vjjjzNMs1gsSk1NvfeqAAAAAMCBmQ5Stw93DgAAAAAPm3v6Vt3r169nVx0AAAAAkGeYDlKpqakaPHiwChYsKG9vb/3111+SpA8//FBTpkzJ9gIBAAAAwNGYDlJDhw5VXFycRo4cKVdXV2t7uXLlNHny5GwtDgAAAAAckekg9fXXX2vSpElq27atnJ2dre3ly5fXn3/+ma3FAQAAAIAj+kdfyFu8ePEM7Wlpabpx40a2FAUAAAAAjsx0kHrssce0Zs2aDO3fffedKlWqlC1FAQAAAIAjMz38+cCBA9WuXTsdO3ZMaWlpmjt3rvbu3auvv/5aCxcuzIkaAQAAAMChmO6Ratq0qebMmaNFixbJYrHoo48+0p49e7RgwQLVq1cvJ2oEAAAAAIdiukdKkqKjoxUdHZ3dtQAAAABAnnBPX8gLAAAAAA8ju3qkAgICtG/fPhUoUED+/v6yWCxZznvu3LlsKw4AAAAAHJFdQerzzz+Xj4+PJGn06NE5WQ8AAAAAODy7gtQrr7yS6b8BAAAA4GFkV5C6dOmS3Sv09fX9x8UAAAAAQF5gV5DKnz//HZ+LkiTDMGSxWJSampothQEAAACAo7IrSK1cuTKn6wAAAACAPMOuIFWrVq2crgMAAAAA8gzT3yM1depUfffddxnav/vuO02bNi1bigIAAAAAR2Y6SA0fPlwFChTI0B4cHKzY2NhsKQoAAAAAHJnpIHX48GEVLVo0Q3uRIkV05MiRbCkKAAAAAByZ6SAVHBysnTt3ZmjfsWOHAgMDs6UoAAAAAHBkpoNUq1at1KNHD61cuVKpqalKTU3VihUr9Pbbb6tVq1Y5USMAAAAAOBS7Ru271ZAhQ3T48GHVrVtXLi43F09LS1P79u15RgoAAADAQ8F0kHJ1ddWcOXM0ZMgQbd++XR4eHipXrpyKFCmSE/UBAAAAgMMxHaTSRUZGKjIyMjtrAQAAAIA8wfQzUgAAAADwsCNIAQAAAIBJBCkAAAAAMIkgBQAAAAAm/aMgtWbNGr388suqVq2ajh07JkmaPn261q5dm63FAQAAAIAjMh2kfvjhB0VHR8vDw0Pbtm1TUlKSJOny5ct8jxQAAACAh4LpIDVkyBBNnDhRX375pfLly2dtr169urZu3ZqtxQEAAACAIzIdpPbu3aunnnoqQ7uvr68uXLiQHTUBAAAAgEMzHaTCwsJ04MCBDO1r165VsWLFsqUoAAAAAHBkpoNUly5d9Pbbb2vjxo2yWCw6fvy4vvnmG/Xp00fdunXLiRqthg0bJovFop49e1rbDMNQTEyMwsPD5eHhodq1a2v37t05WgcAAACAh5uL2QX69eunixcvqk6dOrp+/bqeeuopubm5qU+fPurevXtO1ChJio+P16RJk1S+fHmb9pEjR2rUqFGKi4tTiRIlNGTIENWrV0979+6Vj49PjtUDAAAA4OH1j4Y/Hzp0qM6cOaNNmzZpw4YNOn36tAYPHpzdtVlduXJFbdu21Zdffil/f39ru2EYGj16tN5//321aNFCZcuW1bRp03T16lXNnDkzx+oBAAAA8HD7x1/I6+npqSpVqqhq1ary9vbOzpoyePPNN9W4cWM988wzNu0JCQk6efKk6tevb21zc3NTrVq1tG7duizXl5SUpEuXLtn8AAAAAIC97Lq1r0WLFnavcO7cuf+4mMzMnj1bW7duVXx8fIZpJ0+elCSFhITYtIeEhOjw4cNZrnPYsGEaNGhQttYJAAAA4OFhV4+Un5+f9cfX11fLly/X5s2brdO3bNmi5cuXy8/PL1uLO3r0qN5++23NmDFD7u7uWc5nsVhsXhuGkaHtVgMGDNDFixetP0ePHs22mgEAAAA8+OzqkZo6dar13++++65atmypiRMnytnZWZKUmpqqbt26ydfXN1uL27Jli06dOqV//etf1rbU1FT9+uuvGjt2rPbu3SvpZs9UWFiYdZ5Tp05l6KW6lZubm9zc3LK1VgAAAAAPD9PPSH311Vfq06ePNURJkrOzs3r37q2vvvoqW4urW7eudu3ape3bt1t/qlSporZt22r79u0qVqyYQkNDtWzZMusyycnJWr16tapXr56ttQAAAABAOtPDn6ekpGjPnj0qWbKkTfuePXuUlpaWbYVJko+Pj8qWLWvT5uXlpcDAQGt7z549FRsbq8jISEVGRio2Nlaenp5q06ZNttYCAAAAAOlMB6mOHTuqU6dOOnDggJ544glJ0oYNGzR8+HB17Ngx2wu8m379+unatWvq1q2bzp8/r6ioKC1dupTvkAIAAACQY0wHqU8//VShoaH6/PPPdeLECUlSWFiY+vXrp3feeSfbC7zdqlWrbF5bLBbFxMQoJiYmx7cNAAAAANI/CFJOTk7q16+f+vXrZ/3+peweZAIAAAAAHJnpIHUrAhQAAACAh5HpUfsAAAAA4GFHkAIAAAAAkwhSAAAAAGCS6SD19ddfKykpKUN7cnKyvv7662wpCgAAAAAcmekg1bFjR128eDFD++XLl3Ple6QAAAAA4H4zHaQMw5DFYsnQ/vfff8vPzy9bigIAAAAAR2b38OeVKlWSxWKRxWJR3bp15eLyf4umpqYqISFBDRo0yJEiAQAAAMCR2B2kmjdvLknavn27oqOj5e3tbZ3m6uqqiIgIPf/889leIAAAAAA4GruD1MCBA5WamqoiRYooOjpaYWFhOVkXAAAAADgsU89IOTs7q2vXrrp+/XpO1QMAAAAADs/0YBPlypXTX3/9lRO1AAAAAECeYDpIDR06VH369NHChQt14sQJXbp0yeYHAAAAAB50dj8jlS59ZL5mzZrZDIOePix6ampq9lUHAAAAAA7IdJBauXJlTtQBAAAAAHmG6SBVq1atnKgDAAAAAPIM00Eq3dWrV3XkyBElJyfbtJcvX/6eiwIAAAAAR2Y6SJ0+fVodO3bUzz//nOl0npECAAAA8KAzPWpfz549df78eW3YsEEeHh5avHixpk2bpsjISM2fPz8nagQAAAAAh2K6R2rFihX673//q8cff1xOTk4qUqSI6tWrJ19fXw0bNkyNGzfOiToBAAAAwGGY7pFKTExUcHCwJCkgIECnT5+WdPOLerdu3Zq91QEAAACAAzIdpEqWLKm9e/dKkipWrKj//Oc/OnbsmCZOnKiwsLBsLxAAAAAAHI3pW/t69uyp48ePS5IGDhyo6OhoffPNN3J1dVVcXFx21wcAAAAADsd0kGrbtq3135UqVdKhQ4f0559/qnDhwipQoEC2FgcAAAAAjsjuW/uuXr2qN998UwULFlRwcLDatGmjM2fOyNPTU5UrVyZEAQAAAHho2B2kBg4cqLi4ODVu3FitWrXSsmXL9MYbb+RkbQAAAADgkOy+tW/u3LmaMmWKWrVqJUl6+eWXVaNGDaWmpsrZ2TnHCgQAAAAAR2N3j9TRo0dVs2ZN6+uqVavKxcXFOvAEAAAAADws7A5SqampcnV1tWlzcXFRSkpKthcFAAAAAI7M7lv7DMNQhw4d5ObmZm27fv26unbtKi8vL2vb3Llzs7dCAAAAAHAwdgepV155JUPbyy+/nK3FAAAAAEBeYHeQmjp1ak7WAQAAAAB5ht3PSAEAAAAAbiJIAQAAAIBJBCkAAAAAMIkgBQAAAAAmEaQAAAAAwCSCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMIkgBAAAAgEkEKQAAAAAwiSAFAAAAACYRpAAAAADAJIIUAAAAAJhEkAIAAAAAkwhSAAAAAGASQQoAAAAATCJIAQAAAIBJBCkAAAAAMIkgBQAAAAAmEaQAAAAAwCSCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMIkgBAAAAgEkEKQAAAAAwiSAFAAAAACY5dJAaNmyYHn/8cfn4+Cg4OFjNmzfX3r17beYxDEMxMTEKDw+Xh4eHateurd27d+dSxQAAAAAeBg4dpFavXq0333xTGzZs0LJly5SSkqL69esrMTHROs/IkSM1atQojR07VvHx8QoNDVW9evV0+fLlXKwcAAAAwIPMJbcLuJPFixfbvJ46daqCg4O1ZcsWPfXUUzIMQ6NHj9b777+vFi1aSJKmTZumkJAQzZw5U126dMmNsgEAAAA84By6R+p2Fy9elCQFBARIkhISEnTy5EnVr1/fOo+bm5tq1aqldevWZbmepKQkXbp0yeYHAAAAAOyVZ4KUYRjq3bu3nnzySZUtW1aSdPLkSUlSSEiIzbwhISHWaZkZNmyY/Pz8rD+FChXKucIBAAAAPHDyTJDq3r27du7cqVmzZmWYZrFYbF4bhpGh7VYDBgzQxYsXrT9Hjx7N9noBAAAAPLgc+hmpdG+99Zbmz5+vX3/9VY888oi1PTQ0VNLNnqmwsDBr+6lTpzL0Ut3Kzc1Nbm5uOVcwAAAAgAeaQ/dIGYah7t27a+7cuVqxYoWKFi1qM71o0aIKDQ3VsmXLrG3JyclavXq1qlevfr/LBQAAAPCQcOgeqTfffFMzZ87Uf//7X/n4+Fife/Lz85OHh4csFot69uyp2NhYRUZGKjIyUrGxsfL09FSbNm1yuXoAAAAADyqHDlITJkyQJNWuXdumferUqerQoYMkqV+/frp27Zq6deum8+fPKyoqSkuXLpWPj899rhYAAADAw8Khg5RhGHedx2KxKCYmRjExMTlfEAAAAADIwZ+RAgAAAABHRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMIkgBAAAAgEkEKQAAAAAwiSAFAAAAACYRpAAAAADAJIIUAAAAAJhEkAIAAAAAkwhSAAAAAGASQQoAAAAATCJIAQAAAIBJBCkAAAAAMIkgBQAAAAAmEaQAAAAAwCSCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMIkgBAAAAgEkEKQAAAAAwiSAFAAAAACYRpAAAAADAJIIUAAAAAJhEkAIAAAAAkwhSAAAAAGASQQoAAAAATCJIAQAAAIBJBCkAAAAAMIkgBQAAAAAmEaQAAAAAwCSCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMIkgBAAAAgEkEKQAAAAAwiSAFAAAAACYRpAAAAADAJIIUAAAAAJhEkAIAAAAAkwhSAAAAAGASQQoAAAAATCJIAQAAAIBJBCkAAAAAMIkgBQAAAAAmEaQAAAAAwCSCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQ9MkBo/fryKFi0qd3d3/etf/9KaNWtyuyQAAAAAD6gHIkjNmTNHPXv21Pvvv69t27apZs2aatiwoY4cOZLbpQEAAAB4AD0QQWrUqFF69dVX9dprr6l06dIaPXq0ChUqpAkTJuR2aQAAAAAeQC65XcC9Sk5O1pYtW9S/f3+b9vr162vdunWZLpOUlKSkpCTr64sXL0qSLl26lHOFmpCWdDW3S8h2lyxGbpeQvRzkXDHjQTuvHrhzSsqT51XZgUtyu4Rs9bv7q7ldQvYb8HduV2Aa16s8IA9erziv8gAHOa/SM4Fh3PkY5/kgdebMGaWmpiokJMSmPSQkRCdPnsx0mWHDhmnQoEEZ2gsVKpQjNULyy+0CstvwB26P8pwH8h3gvMp1D+Q7wHmV6x7Id4DzKtc9kO+Ag51Xly9flp9f1jXl+SCVzmKx2Lw2DCNDW7oBAwaod+/e1tdpaWk6d+6cAgMDs1wG/9ylS5dUqFAhHT16VL6+vrldDh4AnFPICZxXyAmcV8gJnFc5yzAMXb58WeHh4XecL88HqQIFCsjZ2TlD79OpU6cy9FKlc3Nzk5ubm01b/vz5c6pE/H++vr78Z0e24pxCTuC8Qk7gvEJO4LzKOXfqiUqX5webcHV11b/+9S8tW7bMpn3ZsmWqXr16LlUFAAAA4EGW53ukJKl3795q166dqlSpomrVqmnSpEk6cuSIunbtmtulAQAAAHgAPRBB6qWXXtLZs2f18ccf68SJEypbtqwWLVqkIkWK5HZp0M1bKQcOHJjhdkrgn+KcQk7gvEJO4LxCTuC8cgwW427j+gEAAAAAbOT5Z6QAAAAA4H4jSAEAAACASQQpAAAAADCJIAUAAAAAJhGkkC1+/fVXNW3aVOHh4bJYLJo3b57NdMMwFBMTo/DwcHl4eKh27dravXt37hSLPONu59XcuXMVHR2tAgUKyGKxaPv27blSJ/KWO51XN27c0Lvvvqty5crJy8tL4eHhat++vY4fP557BSNPuNv1KiYmRqVKlZKXl5f8/f31zDPPaOPGjblTLPKMu51Xt+rSpYssFotGjx593+p72BGkkC0SExNVoUIFjR07NtPpI0eO1KhRozR27FjFx8crNDRU9erV0+XLl+9zpchL7nZeJSYmqkaNGho+fPh9rgx52Z3Oq6tXr2rr1q368MMPtXXrVs2dO1f79u1Ts2bNcqFS5CV3u16VKFFCY8eO1a5du7R27VpFRESofv36On369H2uFHnJ3c6rdPPmzdPGjRsVHh5+nyqDxPDnyAEWi0U//vijmjdvLulmb1R4eLh69uypd999V5KUlJSkkJAQjRgxQl26dMnFapFX3H5e3erQoUMqWrSotm3bpooVK9732pB33em8ShcfH6+qVavq8OHDKly48P0rDnmWPefVpUuX5Ofnp19++UV169a9f8Uhz8rqvDp27JiioqK0ZMkSNW7cWD179lTPnj1zpcaHDT1SyHEJCQk6efKk6tevb21zc3NTrVq1tG7dulysDADu7uLFi7JYLMqfP39ul4IHRHJysiZNmiQ/Pz9VqFAht8tBHpaWlqZ27dqpb9++euyxx3K7nIeOS24XgAffyZMnJUkhISE27SEhITp8+HBulAQAdrl+/br69++vNm3ayNfXN7fLQR63cOFCtWrVSlevXlVYWJiWLVumAgUK5HZZyMNGjBghFxcX9ejRI7dLeSjRI4X7xmKx2Lw2DCNDGwA4ihs3bqhVq1ZKS0vT+PHjc7scPADq1Kmj7du3a926dWrQoIFatmypU6dO5XZZyKO2bNmif//734qLi+P3qVxCkEKOCw0NlfR/PVPpTp06laGXCgAcwY0bN9SyZUslJCRo2bJl9EYhW3h5eal48eJ64oknNGXKFLm4uGjKlCm5XRbyqDVr1ujUqVMqXLiwXFxc5OLiosOHD+udd95RREREbpf3UCBIIccVLVpUoaGhWrZsmbUtOTlZq1evVvXq1XOxMgDIKD1E7d+/X7/88osCAwNzuyQ8oAzDUFJSUm6XgTyqXbt22rlzp7Zv3279CQ8PV9++fbVkyZLcLu+hwDNSyBZXrlzRgQMHrK8TEhK0fft2BQQEqHDhwurZs6diY2MVGRmpyMhIxcbGytPTU23atMnFquHo7nZenTt3TkeOHLF+x8/evXsl3ewFTe8JBW53p/MqPDxcL7zwgrZu3aqFCxcqNTXV2pseEBAgV1fX3CobDu5O51VgYKCGDh2qZs2aKSwsTGfPntX48eP1999/68UXX8zFquHo7vY5ePsfevLly6fQ0FCVLFnyfpf6cDKAbLBy5UpDUoafV155xTAMw0hLSzMGDhxohIaGGm5ubsZTTz1l7Nq1K3eLhsO723k1derUTKcPHDgwV+uGY7vTeZWQkJDpNEnGypUrc7t0OLA7nVfXrl0znnvuOSM8PNxwdXU1wsLCjGbNmhmbNm3K7bLh4O72OXi7IkWKGJ9//vl9rfFhxvdIAQAAAIBJPCMFAAAAACYRpAAAAADAJIIUAAAAAJhEkAIAAAAAkwhSAAAAAGASQQoAAAAATCJIAQAAAIBJBCkAAAAAMIkgBQB44KxatUoWi0UXLlzI7VLytNq1a6tnz565XQYAOCSCFAA8gDp06CCLxaLhw4fbtM+bN08WiyWXqkJeM3fuXA0ePDi3ywAAh0SQAoAHlLu7u0aMGKHz58/ndil2SU5Ozu0ScJuAgAD5+PjkdhkA4JAIUgDwgHrmmWcUGhqqYcOGZTlPTEyMKlasaNM2evRoRUREWF936NBBzZs3V2xsrEJCQpQ/f34NGjRIKSkp6tu3rwICAvTII4/oq6++slnPsWPH9NJLL8nf31+BgYF69tlndejQoQzrHTZsmMLDw1WiRAlJ0q5du/T000/Lw8NDgYGBev3113XlypU77uuiRYtUokQJeXh4qE6dOjbbSbdu3To99dRT8vDwUKFChdSjRw8lJibecb3z589XlSpV5O7urgIFCqhFixbWaefPn1f79u3l7+8vT09PNWzYUPv377dOj4uLU/78+bVw4UKVLFlSnp6eeuGFF5SYmKhp06YpIiJC/v7+euutt5SammpdLiIiQoMHD1abNm3k7e2t8PBwjRkzxqauUaNGqVy5cvLy8lKhQoXUrVu3DMfoyy+/VKFCheTp6annnntOo0aNUv78+a3T09/76dOnKyIiQn5+fmrVqpUuX75snef2W/uSk5PVr18/FSxYUF5eXoqKitKqVavueAwB4EFFkAKAB5Szs7NiY2M1ZswY/f333/e0rhUrVuj48eP69ddfNWrUKMXExKhJkyby9/fXxo0b1bVrV3Xt2lVHjx6VJF29elV16tSRt7e3fv31V61du1be3t5q0KCBTc/T8uXLtWfPHi1btkwLFy7U1atX1aBBA/n7+ys+Pl7fffedfvnlF3Xv3j3L2o4ePaoWLVqoUaNG2r59u1577TX179/fZp5du3YpOjpaLVq00M6dOzVnzhytXbv2juv96aef1KJFCzVu3Fjbtm3T8uXLVaVKFev0Dh06aPPmzZo/f77Wr18vwzDUqFEj3bhxwzrP1atX9cUXX2j27NlavHixVq1apRYtWmjRokVatGiRpk+frkmTJun777+32fYnn3yi8uXLa+vWrRowYIB69eqlZcuWWac7OTnpiy++0O+//65p06ZpxYoV6tevn3X6b7/9pq5du+rtt9/W9u3bVa9ePQ0dOjTDPh48eFDz5s3TwoULtXDhQq1evTrD7aC36tixo3777TfNnj1bO3fu1IsvvqgGDRrYBEgAeGgYAIAHziuvvGI8++yzhmEYxhNPPGF06tTJMAzD+PHHH41bL/0DBw40KlSoYLPs559/bhQpUsRmXUWKFDFSU1OtbSVLljRq1qxpfZ2SkmJ4eXkZs2bNMgzDMKZMmWKULFnSSEtLs86TlJRkeHh4GEuWLLGuNyQkxEhKSrLOM2nSJMPf39+4cuWKte2nn34ynJycjJMnT2a6rwMGDDBKly5ts613333XkGScP3/eMAzDaNeunfH666/bLLdmzRrDycnJuHbtWqbrrVatmtG2bdtMp+3bt8+QZPz222/WtjNnzhgeHh7Gt99+axiGYUydOtWQZBw4cMA6T5cuXQxPT0/j8uXL1rbo6GijS5cu1tdFihQxGjRoYLO9l156yWjYsGGmtRiGYXz77bdGYGCgzfyNGze2madt27aGn5+f9fXAgQMNT09P49KlS9a2vn37GlFRUdbXtWrVMt5++23DMAzjwIEDhsViMY4dO2az3rp16xoDBgzIsjYAeFDRIwUAD7gRI0Zo2rRp+uOPP/7xOh577DE5Of3fR0ZISIjKlStnfe3s7KzAwECdOnVKkrRlyxYdOHBAPj4+8vb2lre3twICAnT9+nUdPHjQuly5cuXk6upqfb1nzx5VqFBBXl5e1rYaNWooLS1Ne/fuzbS2PXv26IknnrAZRKNatWo282zZskVxcXHWWry9vRUdHa20tDQlJCRkut7t27erbt26WW7TxcVFUVFR1rbAwECVLFlSe/bssbZ5enrq0UcftTluERER8vb2tmlLP25Z1V+tWjWb9a5cuVL16tVTwYIF5ePjo/bt2+vs2bPWWxX37t2rqlWr2qzj9tfSzdsIb30GKiwsLEMt6bZu3SrDMFSiRAmb47h69Wqb9xQAHhYuuV0AACBnPfXUU4qOjtZ7772nDh062ExzcnKSYRg2bbfempYuX758Nq8tFkumbWlpaZKktLQ0/etf/9I333yTYV1BQUHWf98amCTJMIwsRxXMqv32+jOTlpamLl26qEePHhmmFS5cONNlPDw8slxfVtu8vX6zx+1O0td7+PBhNWrUSF27dtXgwYMVEBCgtWvX6tVXX7W+d5kdx8xqNlNLWlqanJ2dtWXLFjk7O9tMuzUYAsDDgiAFAA+B4cOHq2LFitYBHdIFBQXp5MmTNr94b9++/Z63V7lyZc2ZM0fBwcHy9fW1e7kyZcpo2rRpSkxMtIas3377TU5OThlqv3WZefPm2bRt2LAhQz27d+9W8eLF7a6lfPnyWr58uTp27JjpNlNSUrRx40ZVr15dknT27Fnt27dPpUuXtnsbWbm9/g0bNqhUqVKSpM2bNyslJUWfffaZtZfw22+/tZm/VKlS2rRpk03b5s2b76mmSpUqKTU1VadOnVLNmjXvaV0A8CDg1j4AeAiUK1dObdu2zTD6W+3atXX69GmNHDlSBw8e1Lhx4/Tzzz/f8/batm2rAgUK6Nlnn9WaNWuUkJCg1atX6+23377jwBdt27aVu7u7XnnlFf3+++9auXKl3nrrLbVr104hISGZLtO1a1cdPHhQvXv31t69ezVz5kzFxcXZzPPuu+9q/fr1evPNN7V9+3bt379f8+fP11tvvZVlLQMHDtSsWbM0cOBA7dmzR7t27dLIkSMlSZGRkXr22WfVuXNnrV27Vjt27NDLL7+sggUL6tlnnzV/wG7z22+/aeTIkdq3b5/GjRun7777Tm+//bYk6dFHH1VKSorGjBmjv/76S9OnT9fEiRNtln/rrbe0aNEijRo1Svv379d//vMf/fzzz/f0HWIlSpRQ27Zt1b59e82dO1cJCQmKj4/XiBEjtGjRonvaXwDIiwhSAPCQGDx4cIbbu0qXLq3x48dr3LhxqlChgjZt2qQ+ffrc87Y8PT3166+/qnDhwmrRooVKly6tTp066dq1a3fsofL09NSSJUt07tw5Pf7443rhhRdUt25djR07NstlChcurB9++EELFixQhQoVNHHiRMXGxtrMU758ea1evVr79+9XzZo1ValSJX344YcKCwvLcr21a9fWd999p/nz56tixYp6+umntXHjRuv0qVOn6l//+peaNGmiatWqyTAMLVq0KMPtcv/EO++8oy1btqhSpUoaPHiwPvvsM0VHR0uSKlasqFGjRmnEiBEqW7asvvnmmwxD3NeoUUMTJ07UqFGjVKFCBS1evFi9evWSu7v7PdU1depUtW/fXu+8845KliypZs2aaePGjSpUqNA9rRcA8iKLYc/N5QAA4L6IiIhQz549bb6/KTt07txZf/75p9asWZOt6wWAhxXPSAEA8AD69NNPVa9ePXl5eennn3/WtGnTNH78+NwuCwAeGAQpAAAeQJs2bdLIkSN1+fJlFStWTF988YVee+213C4LAB4Y3NoHAAAAACYx2AQAAAAAmESQAgAAAACTCFIAAAAAYBJBCgAAAABMIkgBAAAAgEkEKQAAAAAwiSAFAAAAACYRpAAAAADApP8HPJQvO2UTcqQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Création du barplot groupé\n", + "fig, ax = plt.subplots(figsize=(10, 6))\n", + "\n", + "categories = company_country_fr[\"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 company_country_fr[\"y_has_purchased\"].unique():\n", + " label_data = company_country_fr[df_graph['y_has_purchased'] == label]\n", + " values = [label_data[label_data['number_company'] == category]['country_fr'].values[0]*100 for category in categories]\n", + "\n", + " label_printed = \"achat durant la période\" if label else \"aucun achat\"\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 clients frnaçais (%)')\n", + "ax.set_title('Part de clients français des compagnies de spectacle (train set)')\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 - la proportion de français est la même selon qu'il y ait achat sur la période ou non\n", + "# sauf compagnie 12, et peut-être 13\n", + "plt.show()" + ] + }, { "cell_type": "markdown", "id": "ecfd112e-270a-4223-b80f-7e95e57d199d",