diff --git a/0_2_Dataset_construction.py b/0_2_Dataset_construction.py index ae96532..091dd10 100644 --- a/0_2_Dataset_construction.py +++ b/0_2_Dataset_construction.py @@ -146,13 +146,22 @@ BUCKET_OUT = f'projet-bdc2324-team1/Generalization/{type_of_comp}' # Create test dataset and train dataset for sport companies +<<<<<<< HEAD #start_date, end_of_features, final_date = df_coverage_modelization(list_of_comp, coverage_features = 0.7) +======= +# start_date, end_of_features, final_date = df_coverage_modelization(list_of_comp, coverage_train = 0.7) +>>>>>>> main start_date = "2021-05-01" end_of_features = "2022-11-01" final_date = "2023-11-01" +<<<<<<< HEAD anonymous_customer = {'1' : 1_1, '2' : 2_12184, '3' : 3_1, '4' : 4_2, '101' : 101_1, '5' : 5_191835, '6' : 6_591412, '7' : 7_49632, '8' : 8_1942, '9' : 9_19683} +======= +anonymous_customer = {'1' : 1, '2' : 12184, '3' : 1, '4' : 2, '101' : 1, + '5' : 191835, '6' : 591412, '7' : 49632, '8' : 1942, '9' : 19683} +>>>>>>> main for company in list_of_comp: dataset = dataset_construction(min_date = start_date, end_features_date = end_of_features, @@ -161,6 +170,7 @@ for company in list_of_comp: # On retire le client anonyme dataset = dataset[dataset['customer_id'] != anonymous_customer[company]] +<<<<<<< HEAD #train test set np.random.seed(42) @@ -170,6 +180,10 @@ for company in list_of_comp: dataset = dataset.sample(frac=1).reset_index(drop=True) dataset_train = dataset.iloc[:split_index] dataset_test = dataset.iloc[split_index:] +======= + # On retire le client anonyme + dataset_test = dataset_test[dataset_test['customer_id'] != anonymous_customer[company]] +>>>>>>> main # Exportation FILE_KEY_OUT_S3 = "dataset_test" + company + ".csv" diff --git a/0_KPI_functions.py b/0_KPI_functions.py index 3073f3e..837e785 100644 --- a/0_KPI_functions.py +++ b/0_KPI_functions.py @@ -90,6 +90,11 @@ def tickets_kpi_function(tickets_information = None): # tickets_kpi = tickets_kpi.merge(avg_amount, how='left', on= 'event_type_id') + #Taux de ticket payé par internet selon les compagnies + + #tickets_kpi["Taux_ticket_internet"] = tickets_kpi["nb_tickets_internet"]*100 / tickets_kpi["nb_tickets"] + #tickets_kpi['Taux_ticket_internet'] = tickets_kpi['Taux_ticket_internet'].fillna(0) + return tickets_kpi def customerplus_kpi_function(customerplus_clean = None): diff --git a/Spectacle/Stat_desc.ipynb b/Spectacle/Stat_desc.ipynb index f6e5cec..1ed0aba 100644 --- a/Spectacle/Stat_desc.ipynb +++ b/Spectacle/Stat_desc.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "aa915888-cede-4eb0-8a26-7df573d29a3e", "metadata": {}, "outputs": [], @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "17949e81-c30b-4fdf-9872-d7dc2b22ba9e", "metadata": {}, "outputs": [], @@ -46,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "9c1737a2-bad8-4266-8dec-452085d8cfe7", "metadata": {}, "outputs": [ @@ -59,7 +59,7 @@ " 'projet-bdc2324-team1/0_Input/Company_10/target_information.csv']" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "a35dc2f6-2017-4b21-abd2-2c4c112c96b2", "metadata": {}, "outputs": [], @@ -89,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "40b705eb-fd18-436b-b150-61611a3c6a84", "metadata": {}, "outputs": [], @@ -109,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "id": "c56decc3-de19-4786-82a4-1386c72a6bfb", "metadata": {}, "outputs": [ @@ -265,7 +265,7 @@ "[69258 rows x 5 columns]" ] }, - "execution_count": 10, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -614,7 +614,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "id": "afd044b8-ac83-4a35-b959-700cae0b3b41", "metadata": {}, "outputs": [ @@ -629,7 +629,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -644,7 +644,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -659,7 +659,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -674,7 +674,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", @@ -686,17 +686,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "File path : projet-bdc2324-team1/0_Input/Company_11/customerplus_cleaned.csv\n", - "File path : projet-bdc2324-team1/0_Input/Company_11/campaigns_information.csv\n" + "File path : projet-bdc2324-team1/0_Input/Company_11/customerplus_cleaned.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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_430/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", + "/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" ] }, @@ -704,6 +703,7 @@ "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" ] }, @@ -711,7 +711,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -726,7 +726,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", @@ -745,7 +745,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -760,7 +760,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -775,9 +775,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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_430/3170175140.py:10: DtypeWarning: Columns (4,8,10) have mixed types. Specify dtype option on import or set low_memory=False.\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" ] }, @@ -792,7 +792,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", @@ -811,7 +811,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -826,7 +826,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -841,7 +841,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -856,7 +856,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", @@ -875,7 +875,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -890,7 +890,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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" ] }, @@ -905,9 +905,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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_430/3170175140.py:10: DtypeWarning: Columns (8,9) have mixed types. Specify dtype option on import or set low_memory=False.\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" ] }, @@ -922,7 +922,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_430/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", + "/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", ":27: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", @@ -3736,19 +3736,20 @@ }, { "cell_type": "code", - "execution_count": 213, + "execution_count": 43, "id": "d06ab865-4832-4fe9-918b-e5ff72bebee4", "metadata": {}, "outputs": [ { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApYAAAHFCAYAAABIALnOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABO10lEQVR4nO3dd3gU5f7+8XuBZBMgCSSQhpCAAkoJiCACSgClSS+CoFL1SLHQDs2DBKT7FYEDgkq34UEBPSC9KdKCVAUVkBJKQFpCDZA8vz882V82jYADuyHv13XtdTHPzM585tmZ2TtTFpsxxggAAAD4m3K5ugAAAADcHwiWAAAAsATBEgAAAJYgWAIAAMASBEsAAABYgmAJAAAASxAsAQAAYAmCJQAAACxBsAQAAIAlshwsbTZbll7r1q27i+X+fYcPH5bNZtPs2bMdbVFRUQoPD3dZTVbbu3evoqKidPjwYVeXkmXr1q3LFtsPXKdWrVqqVauWq8u4bekdc2bPni2bzZat9lErsJ9nH+Hh4erUqZOry5D0V/6IiopydRl33YkTJxQVFaWdO3fe1eWkd0yyUp6sTrhp0yan4XfeeUdr167VmjVrnNrLlCljTWW4Y3v37tWwYcNUq1at+yowA9lRSEiINm3apAcffNDVpQBZtnDhQvn6+rq6jBzlxIkTGjZsmMLDw1WxYkVXl3PHshwsn3jiCafhwoULK1euXGna4To3btyQzWa76/PPkyfLmw2Q49nt9hx1nLxy5Yry5s3r6jLwNz366KOuLgHZlKX3WE6ZMkU1a9ZUYGCg8uXLp/Lly2vcuHG6ceOG03QZnWJPfamrW7du8vLy0k8//eRoS0pK0tNPP62goCCdPHky03pOnDihNm3ayMfHR35+fmrbtq1iY2OztC7Xrl3ToEGDVLx4cXl6eqpIkSLq2bOnLly44DRdRqfoU67jrl27ZLPZNGPGjDTTLV26VDabTd9++62jbf/+/Wrfvr0CAwNlt9v1yCOPaMqUKU7vS76k9Mknn6hv374qUqSI7Ha7pk+frueee06SVLt2bcctCsmnvLPa9xnN/8CBA5KkVatW6emnn5avr6/y5s2rGjVqaPXq1bfo1b/8+uuvatCggfLmzatChQqpW7duunjxYrrTZmU5f/75p/7xj3+oaNGistvtKly4sGrUqKFVq1ZlqZZ27dopKChIdrtdxYoVU4cOHZSQkOCYd48ePVSmTBnlz59fgYGBqlOnjn744Qen+SRfWnj33Xc1duxYhYeHy9vbW7Vq1dLvv/+uGzduaODAgQoNDZWfn59atGih06dPO80jPDxcjRs31sKFCxURESEvLy+VKFFCkyZNcpru2rVr6tu3rypWrCg/Pz/5+/urWrVq+uabb9Ks34ULF9S1a1f5+/srf/78atSokf744480221UVJRsNpt++eUXtWvXTn5+fgoKClKXLl0UFxfnNE9jjD744ANVrFhR3t7eKliwoFq3bq0//vjDabodO3aocePGju04NDRUjRo10rFjxzL9TIwxGjdunMLCwuTl5aVKlSpp6dKl6U4bHx+vfv36Oe2nvXr10uXLlzNdhvTXNl+uXDlt2rRJ1atXl7e3t8LDwzVr1ixJ0pIlS1SpUiXlzZtX5cuX17Jly5zef+DAAXXu3FklS5ZU3rx5VaRIETVp0kR79uxxmi6rl53utL+S1+OHH37QE088IW9vbxUpUkRDhgxRYmKi07Tnzp1Tjx49VKRIEXl6eqpEiRJ66623HNv7rerNaLvZvn27WrdurYIFC97Rmdlt27apadOm8vf3l5eXlx599FH95z//cZrmypUrjs/ay8tL/v7+qly5sr744otbzv/48eOOY4Snp6dCQ0PVunVrnTp1yjHN0aNH9eKLLzodd9977z0lJSWl6ZucsJ+n912R1f1t/vz5qlq1qvz8/JQ3b16VKFFCXbp0ueXnFB8fr1deeUUBAQHKnz+/GjRooN9//z3dabPyPZmRW9WX/P336aefqk+fPgoODpa3t7ciIyO1Y8eONPPLyvYrZb4drlu3TlWqVJEkde7c2fHdnfz5bdu2Tc8//7xjmwsPD1e7du105MiR21pOZv5On6Zk6amngwcPqn379o6NbteuXRo5cqR+/fVXzZw587bnN2HCBG3ZskVt2rTRTz/9pAIFCmjYsGFat26dli1bppCQkAzfe/XqVT3zzDM6ceKERo8erVKlSmnJkiVq27ZtmmmjoqKcdj5jjJo3b67Vq1dr0KBBeuqpp7R7924NHTpUmzZt0qZNm2S327O8HhUqVNCjjz6qWbNmqWvXrk7jZs+ercDAQD377LOS/rqMXb16dRUrVkzvvfeegoODtXz5cr3xxhs6c+aMhg4d6vT+QYMGqVq1apo2bZpy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mVpW68voc0qu73a236xshxmJi4vT4sWLNXToUKdjQfJ9uCndyXKs6NOULDtjmbzhp/xiMcbo448/TjNteHi4du/e7dT2+++/O04ZpzR9+nR9+umnmjx5sr799ltduHDBcek4M7Vr19bFixfT3DT9+eef3/K9yQ+FfPrpp07tX3/9tS5fvuz0cEp667JmzRpdunQpzXzr1aunIkWKaNasWZo1a5a8vLycLlfkzZtXtWvX1o4dOxQREaHKlSuneaX+ay49mf31eTt9n54aNWqoQIEC2rt3b7r1Va5c2fFXenpq166tX375Rbt27XJqT/253OlyihUrptdee01169Z1uqSUWvITfvPnz8/0LzGbzZYmQO3evTvN77paJaO+8fHxcTyIZbPZ5Onp6fRlExsbm+Zp0cjISEl/ndFNad68eXdcX+PGjWWM0fHjx9P9TMqXL5/mPTabTRUqVND777+vAgUKZPq5PPHEE/Ly8tJnn33m1L5x48Y0Tz82btxYBw8eVEBAQLq13O3fcE1v21iyZEmWL/1lNt+s9leyjI51uXLlUs2aNSX9dVy7dOmSFi1a5DTd3LlzHeOlv/5g8/LySnOcSO9p5L+rdOnSKlmypHbt2pXhfu7j45PmfUFBQerUqZPatWun3377TVeuXMlwGQ0bNtTatWszPcY9/fTT2rt3b5q+njt3rmw2m2rXrn3nK5kOd9/P03Mn+5vdbldkZKTGjh0rSek+UZ0suY9T7/upvxus+p7MSn1ffPGFjDGO4SNHjmjjxo2OhzZvZ/vNynaY0Xe3zWaTMSbN8Wb69OlpfvkhK8tJzco+lSw8Y1m3bl15enqqXbt26t+/v65du6apU6fq/PnzaaZ96aWX9OKLL6pHjx5q1aqVjhw5onHjxqW59Lxnzx698cYb6tixoyNMzpgxQ61bt9aECRPUq1evDOvp0KGD3n//fXXo0EEjR45UyZIl9d1332n58uVZWpf69etrwIABio+PV40aNRxPhT/66KN66aWXnNZlyJAhevvttxUZGam9e/dq8uTJ8vPzSzPf3Llzq0OHDho/frx8fX3VsmXLNNNNnDhRTz75pJ566il1795d4eHhunjxog4cOKD//ve/t3yyTpLKlSsnSfroo4/k4+MjLy8vFS9eXAEBAVnu+4zkz59f//73v9WxY0edO3dOrVu3VmBgoP7880/t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9OhRxcTEONr37t2ruLg4PfLII3+7htT3XG7evFkPP/ywJOnHH39UWFiY3nrrLVWuXFklS5bUkSNH7mg5L7/8smbNmqWZM2fqmWeecToDCwDujGAJINv44IMPlJiYqMcff1xff/219u/fr3379mnSpEmqVq2annnmGUVEROiFF17Q9u3btXXrVnXo0EGRkZGqXLny317+/PnzNXPmTP3+++8aOnSotm7dqtdee02S9NBDD+no0aOaN2+eDh48qEmTJmnhwoV3tJwXXnhBx48f18cff6wuXbr87boB4F4hWALINooXL67t27erdu3a6tu3r8qVK6e6detq9erVmjp1qmw2mxYtWqSCBQuqZs2aeuaZZ1SiRAl9+eWXlix/2LBhmjdvniIiIjRnzhx99tlnKlOmjCSpWbNm6t27t1577TVVrFhRGzdu1JAhQ+5oOb6+vmrVqpXy58+v5s2bW1I7ANwLNpN8RzwAIEM2m00LFy68Z0Gvbt26euSRRzRp0qR7sjwAsAJPhQOAGzl37pxWrFihNWvWaPLkya4uBwBuC8ESANxIpUqVdP78eY0dO1alS5d2dTkAcFu4FA4AAABL8PAOAAAALEGwBAAAgCUIlgAAALAEwRIAAACWIFgCAADAEgRLAAAAWIJgCQAAAEsQLAEAAGAJgiUAAAAs8f8AB+iZCxGA9GcAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "NameError", + "evalue": "name 'company_campaigns_stats' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[43], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Création du barplot\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m plt\u001b[38;5;241m.\u001b[39mbar(\u001b[43mcompany_campaigns_stats\u001b[49m[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnumber_compagny\u001b[39m\u001b[38;5;124m\"\u001b[39m], \u001b[38;5;241m100\u001b[39m \u001b[38;5;241m*\u001b[39m company_campaigns_stats[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mratio_campaigns_opened\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Ajout de titres et d'étiquettes\u001b[39;00m\n\u001b[1;32m 5\u001b[0m plt\u001b[38;5;241m.\u001b[39mxlabel(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCompany\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "\u001b[0;31mNameError\u001b[0m: name 'company_campaigns_stats' is not defined" + ] } ], "source": [ @@ -3914,7 +3915,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 35, "id": "6db089d5-5517-4aee-a5fd-53f20ae3f0d7", "metadata": {}, "outputs": [], @@ -3983,6 +3984,65 @@ "plt.title(\"Boite à moustache du chiffre d'affaire selon les compagnies de spectacles\")" ] }, + { + "cell_type": "code", + "execution_count": 31, + "id": "76e08ece-0b58-4b3a-abca-53e30ccc907b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Statistique F : 0.6726212699019267\n", + "Valeur de p : 0.6108808380730608\n", + "Nombre de degrés de liberté entre les groupes : 4\n", + "Nombre de degrés de liberté à l'intérieur des groupes : 764875\n", + "Il n'y a pas de différences significatives entre les entreprises .\n" + ] + } + ], + "source": [ + "#test d'anova pour voir si la difference de chiffre d'affaire est statistiquement significative\n", + "\n", + "from scipy.stats import f_oneway\n", + "\n", + "# Créez une liste pour stocker les données de chaque groupe\n", + "groupes = []\n", + "\n", + "# Parcourez chaque modalité de la variable catégorielle et divisez les données en groupes\n", + "for modalite in products_purchased_reduced_spectacle['number_compagny'].unique():\n", + " groupe = products_purchased_reduced_spectacle[products_purchased_reduced_spectacle['number_compagny'] == modalite]['total_amount']\n", + " groupes.append(groupe)\n", + "\n", + "# Effectuez le test ANOVA\n", + "f_statistic, p_value = f_oneway(*groupes)\n", + "\n", + "# Nombre total d'observations\n", + "N = sum(len(groupe) for groupe in groupes)\n", + "\n", + "# Nombre de groupes ou de catégories\n", + "k = len(groupes)\n", + "\n", + "# Degrés de liberté entre les groupes\n", + "df_between = k - 1\n", + "\n", + "# Degrés de liberté à l'intérieur des groupes\n", + "df_within = N - k\n", + "\n", + "# Affichez les résultats\n", + "print(\"Statistique F :\", f_statistic)\n", + "print(\"Valeur de p :\", p_value)\n", + "\n", + "print(\"Nombre de degrés de liberté entre les groupes :\", df_between)\n", + "print(\"Nombre de degrés de liberté à l'intérieur des groupes :\", df_within)\n", + "\n", + "if p_value < 0.05:\n", + " print(\"Il y a des différences significatives entre au moins une des entrepries .\")\n", + "else:\n", + " print(\"Il n'y a pas de différences significatives entre les entreprises .\")" + ] + }, { "cell_type": "code", "execution_count": 54, @@ -4108,29 +4168,6 @@ "plt.show()" ] }, - { - "cell_type": "code", - "execution_count": 75, - "id": "254875ac-95e4-44fa-9f02-6cec144e4bde", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "la p-value associé à la stat de fisher est superieure à 5% donc il n y a pas de lien entre les entreprise et le taux de ticket acheté en ligne\n" - ] - } - ], - "source": [ - "#test anova entre les entreprise de spectacle et taux d'achat de ticket en ligne\n", - "import statsmodels.api as sm\n", - "from statsmodels.formula.api import ols\n", - "model = ols('Taux_ticket_internet ~ number_compagny', data=purchase_spectacle).fit()\n", - "anova_table = sm.stats.anova_lm(model, typ=2)\n", - "print(\"la p-value associé à la stat de fisher est superieure à 5% donc il n y a pas de lien entre les entreprise et le taux de ticket acheté en ligne\")\n" - ] - }, { "cell_type": "code", "execution_count": 66, @@ -4159,7 +4196,7 @@ } ], "source": [ - "#repartion Chiffre d'affaire selon le numero de la compagnie\n", + "#repartition Chiffre d'affaire selon le numero de la compagnie\n", "\n", "sns.boxplot(data=products_purchased_reduced_spectacle, y=\"time_between_purchase\",x=\"number_compagny\",showfliers=False,showmeans=True)\n", "plt.title(\"Boite à moustache du temps ecoulés entre le premier et le dernier achat selon les compagnies de spectacles\")" @@ -4167,45 +4204,121 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "58cbe8a5-3899-4aa3-91ab-48bed9124fbd", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "58f49748-e55f-4d1b-b58b-102d02a9e0eb", + "execution_count": 29, + "id": "e2c51e28-6197-48f0-ab6d-9fc7b3b0de74", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " sum_sq df F PR(>F)\n", - "number_compagny 4.108441e+09 1.0 23548.336165 0.0\n", - "Residual 1.334471e+11 764878.0 NaN NaN la p-value associé à la stat de fisher est inferieure à 5% donc il y a un lien entre les entreprise et le temps écoulés entre le premier et le dernier achat\n" + "Statistique F : 7956.05932109542\n", + "Valeur de p : 0.0\n", + "Nombre de degrés de liberté entre les groupes : 4\n", + "Nombre de degrés de liberté à l'intérieur des groupes : 764875\n", + "Il y a des différences significatives entre au moins une des entrepries .\n" ] } ], "source": [ - "#test anova entre les entreprise de spectacle et time_between_purchase\n", - "import statsmodels.api as sm\n", - "from statsmodels.formula.api import ols\n", - "model = ols('time_between_purchase ~ number_compagny', data=products_purchased_reduced_spectacle).fit()\n", - "anova_table = sm.stats.anova_lm(model, typ=2)\n", - "anova_table\n", - "print(anova_table,\"la p-value associé à la stat de fisher est inferieure à 5% donc il y a un lien entre les entreprise et le temps écoulés entre le premier et le dernier achat\" )\n" + "#test d'anova pour voir si la difference de temps entre le premier et le dernier achat est statistiquement significative\n", + "\n", + "from scipy.stats import f_oneway\n", + "\n", + "# Créez une liste pour stocker les données de chaque groupe\n", + "groupes = []\n", + "\n", + "# Parcourez chaque modalité de la variable catégorielle et divisez les données en groupes\n", + "for modalite in products_purchased_reduced_spectacle['number_compagny'].unique():\n", + " groupe = products_purchased_reduced_spectacle[products_purchased_reduced_spectacle['number_compagny'] == modalite]['time_between_purchase']\n", + " groupes.append(groupe)\n", + "\n", + "# Effectuez le test ANOVA\n", + "f_statistic, p_value = f_oneway(*groupes)\n", + "\n", + "# Nombre total d'observations\n", + "N = sum(len(groupe) for groupe in groupes)\n", + "\n", + "# Nombre de groupes ou de catégories\n", + "k = len(groupes)\n", + "\n", + "# Degrés de liberté entre les groupes\n", + "df_between = k - 1\n", + "\n", + "# Degrés de liberté à l'intérieur des groupes\n", + "df_within = N - k\n", + "\n", + "# Affichez les résultats\n", + "print(\"Statistique F :\", f_statistic)\n", + "print(\"Valeur de p :\", p_value)\n", + "\n", + "print(\"Nombre de degrés de liberté entre les groupes :\", df_between)\n", + "print(\"Nombre de degrés de liberté à l'intérieur des groupes :\", df_within)\n", + "\n", + "if p_value < 0.05:\n", + " print(\"Il y a des différences significatives entre au moins une des entrepries .\")\n", + "else:\n", + " print(\"Il n'y a pas de différences significatives entre les entreprises .\")" ] }, { "cell_type": "code", - "execution_count": null, - "id": "33ef5773-a09d-4b8c-918f-1b64a9790422", + "execution_count": 33, + "id": "74f06e96-3c25-4eca-8190-25b0a4ab0d75", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "customer_id int64\n", + "nb_tickets int64\n", + "nb_purchases int64\n", + "total_amount float64\n", + "nb_suppliers int64\n", + "vente_internet_max int64\n", + "purchase_date_min float64\n", + "purchase_date_max float64\n", + "time_between_purchase float64\n", + "nb_tickets_internet float64\n", + "number_compagny int64\n", + "dtype: object" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "products_purchased_reduced_spectacle.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "20a70ec0-38f6-470e-a442-7884a150613a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAIhCAYAAABdSTJTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABSMUlEQVR4nO3deXwNZ///8feRPUgQJKIRQe1ro4uoBrW3aG8tym0pelNK0YXcrQalKV3u9Naquu2tqmrRUkXUVkurtmotXRRRErG0Yg1Jrt8ffjlfR04ih8QxvJ6Px3k8zDXXzHzmzJzkbXLNHJsxxggAAACwoELuLgAAAAC4VoRZAAAAWBZhFgAAAJZFmAUAAIBlEWYBAABgWYRZAAAAWBZhFgAAAJZFmAUAAIBlEWYBAABgWYRZuN2MGTNks9nk6+urAwcOZJvfuHFj1axZ0w2VST179lSRIkXcsm0417hxYzVu3NjdZdw2bDabRo4c6e4yrtuuXbs0cuRI7d+/392lWMKGDRs0cuRI/f333+4uJUcjR46UzWZzdxm4CRBmcdNIS0vTyy+/7O4yANyCdu3apVGjRhFm82jDhg0aNWrUTR1m+/Tpo40bN7q7DNwECLO4abRq1Uoff/yxfvzxR3eXki+MMTp37py7ywBwCzh37pyMMe4uI0c38mfd2bNnJUl33HGH7rvvvhu2Xdy8CLO4abz44osKCgrSsGHDrtr3/PnziomJUUREhLy9vVW2bFkNGDAg21WE8uXL6+GHH9bixYtVr149+fn5qVq1alq8eLGkS0McqlWrpsKFC+uee+7R5s2bnW5v586devDBB1W4cGGVKlVKzzzzjP0HahabzaZnnnlGkyZNUrVq1eTj46OZM2dKkn777Td16dJFpUuXlo+Pj6pVq6b33nsvT+9L1nqnT5+uKlWqyM/PT/Xr19d3330nY4zeeOMNRUREqEiRImratKl+//33bOuYNm2a6tSpI19fX5UoUUKPPvqodu/ebZ//4YcfymazOb3KMXr0aHl5eenw4cP2thUrVujBBx9UQECA/P391bBhQ33zzTcOy2X9CXDnzp164oknFBgYqODgYPXq1UsnT5686n4bYzR+/HiFh4fL19dXd911l77++munfVNTU/X88887nA+DBw/WmTNnrrodSVq6dKkefPBBBQYGyt/fX9WqVVNcXJx9/ubNm9W5c2eVL19efn5+Kl++vJ544olsw2KyhsysWrVKTz/9tEqWLKmgoCD94x//cHj/JGnu3Llq0aKFypQpYz8vhw8fnq3mnIZV9OzZU+XLl7dPv/766ypUqJAWLVqUrZ+/v79++umnXN+D1NRUPfXUUwoKClKRIkXUqlUr/frrr077Xuv5XK9ePTVq1Chbe0ZGhsqWLat//OMf9rYLFy5ozJgxqlq1qnx8fFSqVCk9+eSTOnr0qMOyWZ/xpUuX6q677pKfn5+qVq2qadOm2fvMmDFDjz/+uCSpSZMmstlsstlsmjFjhr1PXs5pZ1avXi2bzaaPPvpIQ4cOVUhIiPz8/BQdHa1t27Y59HX1PFq+fLl69eqlUqVKyd/fX2lpaTnWkdfPQNbPkw8//FDVqlWTv7+/6tSpY/+ZKF367L7wwguSpIiICPv7tXr1aof3fP78+apXr558fX01atQoSVJycrL69u2rO+64Q97e3oqIiNCoUaOUnp5uX//+/ftls9k0fvx4jR07VuXKlZOvr6/q16+f48+RrVu36rHHHlPx4sVVsWJFh3mXW7lypRo3bqygoCD5+fmpXLly6tChg8PP67yeW7AQA7jZ9OnTjSTzww8/mHfeecdIMt988419fnR0tKlRo4Z9OjMz07Rs2dJ4enqaESNGmOXLl5s333zTFC5c2NSrV8+cP3/e3jc8PNzccccdpmbNmmbOnDlmyZIl5t577zVeXl7mlVdeMQ0bNjTz5883CxYsMJUrVzbBwcHm7Nmz9uV79OhhvL29Tbly5czYsWPN8uXLzciRI42np6d5+OGHHfZDkilbtqypXbu2+fjjj83KlSvNzz//bHbu3GkCAwNNrVq1zKxZs8zy5cvNc889ZwoVKmRGjhx51fdHkgkPDzdRUVEOtZYoUcIMGTLEtG/f3ixevNjMnj3bBAcHm9q1a5vMzEz78q+99pqRZJ544gnz1VdfmVmzZpkKFSqYwMBA8+uvvxpjjElLSzMhISGma9euDtu+ePGiCQ0NNY8//ri97cMPPzQ2m8088sgjZv78+WbRokXm4YcfNh4eHmbFihX2frGxsUaSqVKlinnllVdMQkKCefvtt42Pj4958sknr7rfWcv37t3bfP3112by5MmmbNmyJiQkxERHR9v7nTlzxtStW9eULFnSvP3222bFihXmnXfeMYGBgaZp06YO74UzU6ZMMTabzTRu3Nh8/PHHZsWKFWbixImmf//+9j7z5s0zr7zyilmwYIFZs2aN+eSTT0x0dLQpVaqUOXr0qL1f1rlcoUIFM3DgQLNs2TIzZcoUU7x4cdOkSROH7b766qvmP//5j/nqq6/M6tWrzaRJk0xERES2ftHR0Q77m6VHjx4mPDzcPp2ZmWnatGljihcvbvbv32+MMWbatGlGkpkyZUqu70FmZqZp0qSJ8fHxsZ/nsbGxpkKFCkaSiY2Ntfe9nvM56/Oddd5lWbJkiZFkvvzyS2OMMRkZGaZVq1amcOHCZtSoUSYhIcFMmTLFlC1b1lSvXt3hM5r1Ga9evbqZNWuWWbZsmXn88ceNJLNmzRpjjDEpKSn2z8F7771nNm7caDZu3GhSUlKMMXk/p51ZtWqVkWTCwsJM+/btzaJFi8xHH31kKlWqZAICAszevXvtfV09j8qWLWv+9a9/ma+//tp89tlnJj093WkNrnwGJJny5cube+65x3z66admyZIlpnHjxsbT09Ne68GDB83AgQONJDN//nz7+3Xy5En7e16mTBlToUIFM23aNLNq1SqzadMmk5SUZMLCwkx4eLj54IMPzIoVK8yrr75qfHx8TM+ePe017Nu3z/6e3X///ebzzz838+bNM3fffbfx8vIyGzZssPfN+jkQHh5uhg0bZhISEszChQsd5l2+Xl9fX9O8eXOzcOFCs3r1ajN79mzTrVs389dff7l8bsE6CLNwu8vDbFpamqlQoYKpX7++/QfwlWF26dKlRpIZP368w3rmzp1rJJnJkyfb28LDw42fn5/5888/7W3bt283kkyZMmXMmTNn7O0LFy50+IVqzKXAIMm88847DtsaO3askWTWrVtnb5NkAgMDzYkTJxz6tmzZ0txxxx32XwRZnnnmGePr65ut/5UkmZCQEHP69OlstdatW9fhF1V8fLyRZHbs2GGMMeavv/4yfn5+pk2bNg7rTExMND4+PqZLly72ttjYWOPt7W2OHDlib8t6T7NCwZkzZ0yJEiVM27ZtHdaXkZFh6tSpY+655x6H9Tk7Tv379ze+vr65hsy//vrL+Pr6mkcffdShff369UaSQ7iLi4szhQoVMj/88IND388++8xIMkuWLMlxO6dOnTIBAQHm/vvvv2rovVx6ero5ffq0KVy4sMO5kXUuXx6EjTFm/PjxRpJJSkpyur7MzExz8eJFs2bNGiPJ/Pjjj/Z5eQ2zxhhz7Ngxc8cdd5h77rnHbN261fj7+5t//vOfV92fr7/+Otfz/PIwez3n87Fjx4y3t7f597//7dDesWNHExwcbC5evGiMMWbOnDlGkvn8888d+v3www9Gkpk4caK9LTw83Pj6+poDBw7Y286dO2dKlChh+vbta2+bN2+ekWRWrVrlsE5XzmlnssLsXXfd5XAO7d+/33h5eZk+ffrkuOzVzqPu3bvnuu0srnwGJJng4GCTmppqb0tOTjaFChUycXFx9rY33njDSDL79u3Ltr3w8HDj4eFhfvnlF4f2vn37miJFijgcC2OMefPNN40ks3PnTmPM/4XZ0NBQc+7cOXu/1NRUU6JECdOsWTN7W9bPkVdeeSVbHVeG2az93b59u9P3yRjXzi1YB8MMcFPx9vbWmDFjtHnzZn366adO+6xcuVLSpT+fXu7xxx9X4cKFs/2Zqm7duipbtqx9ulq1apIu/fnW398/W7uzJyp07drVYbpLly6SpFWrVjm0N23aVMWLF7dPnz9/Xt98840effRR+fv7Kz093f5q06aNzp8/r++++87pfl6uSZMmKly4cLZaW7du7fBntiv3YePGjTp37ly29yosLExNmzZ1eK+efvppSdL//vc/e9u7776rWrVq6YEHHpB06aaQEydOqEePHg77kpmZqVatWumHH37I9mfNdu3aOUzXrl1b58+fV0pKSo77u3HjRp0/fz7b+x4VFaXw8HCHtsWLF6tmzZqqW7euQ00tW7Z0+NOoMxs2bFBqaqr69++f613Rp0+f1rBhw1SpUiV5enrK09NTRYoU0ZkzZxyGa+S2z5LjufXHH3+oS5cuCgkJkYeHh7y8vBQdHS1JTteZF0FBQZo7d662bt2qqKgolStXTpMmTbrqclnncU7neZbrPZ+DgoLUtm1bzZw5U5mZmZKkv/76S1988YW6d+8uT09PSZeOabFixdS2bVuHbdStW1chISHZjmndunVVrlw5+7Svr68qV67s9LN8pWs5p53p0qWLwzkUHh6uqKgoh58Rrp5HHTp0uOp2Jdc/A02aNFHRokXt08HBwSpdunSe3q8stWvXVuXKlbPV0aRJE4WGhjrU0bp1a0nSmjVrHPr/4x//kK+vr326aNGiatu2rdauXauMjAyHvnl5L+rWrStvb2/961//0syZM/XHH39k6+PquQVrIMziptO5c2fdddddeumll3Tx4sVs848fPy5PT0+VKlXKod1msykkJETHjx93aC9RooTDtLe3d67t58+fd2j39PRUUFCQQ1tISIi9lsuVKVMmW63p6emaMGGCvLy8HF5t2rSRJB07dizbPl7pWvchq74r65Kk0NBQh/qDg4PVqVMnffDBB8rIyNCOHTv07bff6plnnrH3OXLkiCTpsccey7Y/48aNkzFGJ06ccNjOle+dj4+PpNxvGMmqK+t9vtyVbUeOHNGOHTuy1VO0aFEZY3J9f7PGyN1xxx059pEuBZV3331Xffr00bJly7Rp0yb98MMPKlWqlNP9uNo+nz59Wo0aNdL333+vMWPGaPXq1frhhx80f/58h37X4t5771WNGjV0/vx5Pf300w7/CcpJ1mcqp/P88n7Xez736tVLhw4dUkJCgiRpzpw5SktLc/gP15EjR/T333/L29s723aSk5OzbePKuqVL73le3sdrOaedyelcvfwz5up55Oxzm9M+uPIZuJ73K7fajhw5okWLFmWro0aNGpKynxs5vWcXLlzQ6dOnr7q9K1WsWFErVqxQ6dKlNWDAAFWsWFEVK1bUO++841CjK+cWrMHT3QUAV7LZbBo3bpyaN2+uyZMnZ5sfFBSk9PR0HT161CHQGmOUnJysu+++O1/rSU9P1/Hjxx1+ASQnJ9trubL2yxUvXlweHh7q1q2bBgwY4HT9ERER+Vrv5bLqS0pKyjbv8OHDKlmypEPbs88+qw8//FBffPGFli5dqmLFijlcrcvqP2HChBzvIg4ODs63urPe58slJyc73PhUsmRJ+fn5Odzwc7kr9/FyWefPn3/+mWOfkydPavHixYqNjdXw4cPt7WlpaXkKOc6sXLlShw8f1urVq+1XYyU5fQySr6+v0xvmcvqlGxsbq59++kmRkZF65ZVX9PDDD6tChQq51pP1mcrpPM+SH+dzy5YtFRoaqunTp6tly5aaPn267r33XlWvXt3eJ+vGuaVLlzpdx+VXFa9Xfp3TOZ2rWe/ntZxHeX2G6vV8Bq6Vs9pKliyp2rVra+zYsU6XCQ0NdZjO6T3z9vbO9nzvvL4XjRo1UqNGjZSRkaHNmzdrwoQJGjx4sIKDg9W5c+cbem7hxiHM4qbUrFkzNW/eXKNHj1ZYWJjDvAcffFDjx4/XRx99pCFDhtjbP//8c505c0YPPvhgvtcze/ZsDRo0yD798ccfS9JVH97v7++vJk2aaNu2bapdu7b9yumN0qBBA/n5+emjjz6y380tXQpvK1eu1GOPPebQPzIyUlFRURo3bpx+/vln/etf/3K4stewYUMVK1ZMu3btcrhim9/uu+8++fr6avbs2Q5/XtywYYMOHDjgEGYffvhhvfbaawoKCnL5PwZRUVEKDAzUpEmT1LlzZ6e/MG02m4wx9qurWaZMmZLtT6F5lbWdK9f5wQcfZOtbvnx5zZs3T2lpafb+x48f14YNGxQQEODQNyEhQXFxcXr55Zc1ePBg1a1bV506ddL69etzPfeaNGmi8ePH53ieZ8mP8zkrDMfHx+vbb7/V5s2bs+33ww8/rE8++UQZGRm69957Xd6GMzn9RSC/zuk5c+Zo6NCh9mN74MABbdiwQd27d5dUMOdRluv5DOQkL39BcVbHkiVLVLFiRYfhVjmZP3++3njjDftQg1OnTmnRokVq1KiRPDw8rq3w/8/Dw0P33nuvqlatqtmzZ2vr1q3q3LlzgZxbcD/CLG5a48aNU2RkpFJSUux/ppKk5s2bq2XLlho2bJhSU1PVsGFD7dixQ7GxsapXr566deuWr3V4e3vrrbfe0unTp3X33Xdrw4YNGjNmjFq3bq3777//qsu/8847uv/++9WoUSM9/fTTKl++vE6dOqXff/9dixYtso8BLgjFihXTiBEj9O9//1vdu3fXE088oePHj2vUqFHy9fVVbGxstmWeffZZderUSTabTf3793eYV6RIEU2YMEE9evTQiRMn9Nhjj6l06dI6evSofvzxRx09elTvv//+ddddvHhxPf/88xozZoz69Omjxx9/XAcPHtTIkSOz/Wly8ODB+vzzz/XAAw9oyJAhql27tjIzM5WYmKjly5frueeey/GXVpEiRfTWW2+pT58+atasmZ566ikFBwfr999/148//qh3331XAQEBeuCBB/TGG2+oZMmSKl++vNasWaOpU6eqWLFi17R/UVFRKl68uPr166fY2Fh5eXlp9uzZTp+x3K1bN33wwQf65z//qaeeekrHjx/X+PHjswXZpKQk/fOf/1R0dLRiY2NVqFAhzZ07Vw888IBefPFFxcfH51hPixYt7P3OnDmj+vXra/369frwww+z9c2P87lXr14aN26cunTp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S7r06K3t27crMTFR0qXxrt27/9/3Nvfr108HDhzQ0KFDtXv3bk2bNk1Tp07V888/747yAQAA4GZuHTO7efNmNWnSxD49dOhQSVKPHj00Y8YMJSUl2YOtJEVERGjJkiUaMmSI3nvvPYWGhuq///1vjo/lAgAAwK3NrWG2cePG9hu4nJkxY0a2tujoaG3durUAqwIAAIBVWGrMLAAAAHA5wiwAAAAsizALAAAAyyLMAgAAwLIIswAAALAswiwAAAAsizALAAAAyyLMAgAAwLIIswAAALAswiwAAAAsizALAAAAyyLMAgAAwLIIswAAALAswiwAAAAsizALAAAAyyLMAgAAwLIIswAAALAswiwAAAAsizALAAAAyyLMAgAAwLIIswAAALAsl8Ps1KlTnbanp6crJibmugsCAAAA8srlMPvcc8+pQ4cOOnHihL1tz549uueee/Tpp5/ma3EAAABAblwOs9u2bdORI0dUq1YtJSQk6L333tNdd92lmjVravv27QVQIgAAAOCcp6sLREREaO3atRoyZIhatWolDw8PzZo1S507dy6I+gAAAIAcXdMNYIsXL9acOXMUFRWlYsWK6X//+58OHz6c37UBAAAAuXI5zPbt21cdO3bUiy++qLVr12rHjh3y8fFRrVq1GDMLAACAG8rlYQbr16/X999/rzp16kiSQkJCtGTJEr333nvq1auXOnbsmO9FAgAAAM64HGa3bNkiHx+fbO0DBgxQs2bN8qUoAAAAIC9cHmbgLMhmqVKlynUVAwAAALjimp5mYLPZcpz/xx9/XFdBAAAAQF65HGYHDx7sMH3x4kVt27ZNS5cu1QsvvJBfdQEAAABX5XKYffbZZ522v/fee9q8efN1FwQAAADk1TU9Z9aZ1q1b6/PPP8+v1QEAAABXlW9h9rPPPlOJEiXya3UAAADAVbk8zKBevXoON4AZY5ScnKyjR49q4sSJ+VocAAAAkBuXw+wjjzziMF2oUCGVKlVKjRs3VtWqVfOrLgAAAOCqXA6zsbGxBVEHAAAA4DKXw+zlzp07p4sXLzq0BQQEXFdBAAAAQF65fAPYmTNn9Mwzz6h06dIqUqSIihcv7vACAAAAbhSXw+yLL76olStXauLEifLx8dGUKVM0atQohYaGatasWQVRIwAAAOCUy8MMFi1apFmzZqlx48bq1auXGjVqpEqVKik8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6dJFw4YNU3Jysmw2mzIzM7V+/Xo9//zz6t69e0HUCAAAADjlcpgdO3asypUrp7Jly+r06dOqXr26HnjgAUVFRenll18uiBoBAAAAp1x+zqyXl5dmz56t0aNHa9u2bcrMzFS9evV05513FkR9AAAAQI5cDrOrV69W48aNVbFiRVWsWLEgagIAAADyxOVhBq1atVLFihU1ZswY/fnnnwVREwAAAJAnLofZw4cP69lnn9X8+fNVvnx5tWzZUp9++qkuXLhQEPUBAAAAOXI5zJYoUUKDBg3S1q1btXnzZlWpUkUDBgxQmTJlNGjQIP34448FUScAAACQjcth9nJ169bV8OHDNWDAAJ05c0bTpk1TZGSkGjVqpJ07d+ZXjQAAAIBT1xRmL168qM8++0xt2rRReHi4li1bpnfffVdHjhzRvn37FBYWpscffzy/awUAAAAcuBxmBw4cqDJlyqhfv36qXLmytm3bpo0bN6pPnz4qXLiwwsLC9Prrr2vPnj15Wt/EiRMVEREhX19fRUZG6ttvv821f1paml566SWFh4fLx8dHFStW1LRp01zdDQAAANwCXH40165duzRhwgR16NBB3t7eTvuEhoZq1apVV13X3LlzNXjwYE2cOFENGzbUBx98oNatW2vXrl0qV66c02U6duyoI0eOaOrUqapUqZJSUlKUnp7u6m4AAADgFuBymP3mm2+uvlJPT0VHR1+139tvv63evXurT58+kqT4+HgtW7ZM77//vuLi4rL1X7p0qdasWaM//vhDJUqUkCSVL1/etR0AAADALeOaxszu3btXAwcOVLNmzdS8eXMNGjRIe/fudWkdFy5c0JYtW9SiRQuH9hYtWmjDhg1Ol/nyyy9Vv359jR8/XmXLllXlypX1/PPP69y5czluJy0tTampqQ4vAAAA3BpcDrPLli1T9erVtWnTJtWuXVs1a9bU999/rxo1aighISHP6zl27JgyMjIUHBzs0B4cHKzk5GSny/zxxx9at26dfv75Zy1YsEDx8fH67LPPNGDAgBy3ExcXp8DAQPsrLCwszzUCAADg5ubyMIPhw4dryJAhev3117O1Dxs2TM2bN3dpfTabzWHaGJOtLUtmZqZsNptmz56twMBASZeGKjz22GN677335Ofnl22ZmJgYDR061D6dmppKoAUAALhFuHxldvfu3erdu3e29l69emnX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k50uk5yc7LR/enq6jh07pjJlymRbJi4uTqNGjcrWHhYWdh3Vw50CJ/Rzdwm4gTjetxeO9+2F4317uZbjferUKQUGBubax21hNovNZnOYNsZka7taf2ftWWJiYjR06FD7dGZmpk6cOKGgoKBct3OrSU1NVVhYmA4ePKiAgAB3l4MCxvG+vXC8by8c79vL7Xq8jTE6deqUQkNDr9rXbWG2ZMmS8vDwyHYVNiUlJdvV1ywhISFO+3t6eiooKMjpMj4+PvLx8XFoK1as2LUXbnEBAQG31Yfhdsfxvr1wvG8vHO/by+14vK92RTaL224A8/b2VmRkpBISEhzaExISFBUV5XSZBg0aZOu/fPly1a9f3+l4WQAAANza3Po0g6FDh2rKlCmaNm2adu/erSFDhigxMVH9+l0aUxETE6Pu3bvb+/fr108HDhzQ0KFDtXv3bk2bNk1Tp07V888/765dAAAAgBu5dcxsp06ddPz4cY0ePVpJSUmqWbOmlixZovDwcElSUlKSwzNnIyIitGTJEg0ZMkTvvfeeQkND9d///lcdOnRw1y5Yho+Pj2JjY7MNucCtieN9e+F431443rcXjvfV2UxennkAAAAA3ITc/nW2AAAAwLUizAIAAMCyCLMAAACwLMIsAAAALIswe4tZu3at2rZtq9DQUNlsNi1cuNBhvjFGI0eOVGhoqPz8/NS4cWPt3LnTPcXiul3teM+fP18tW7ZUyZIlZbPZtH37drfUifyR2/G+ePGihg0bplq1aqlw4cIKDQ1V9+7ddfjwYfcVjOtytc/3yJEjVbVqVRUuXFjFixdXs2bN9P3337unWFy3qx3vy/Xt21c2m03x8fE3rL6bGWH2FnPmzBnVqVNH7777rtP548eP19tvv613331XP/zwg0JCQtS8eXOdOnXqBleK/HC1433mzBk1bNhQr7/++g2uDAUht+N99uxZbd26VSNGjNDWrVs1f/58/frrr2rXrp0bKkV+uNrnu3Llynr33Xf1008/ad26dSpfvrxatGiho0eP3uBKkR+udryzLFy4UN9//32evub1tmFwy5JkFixYYJ/OzMw0ISEh5vXXX7e3nT9/3gQGBppJkya5oULkpyuP9+X27dtnJJlt27bd0JpQcHI73lk2bdpkJJkDBw7cmKJQYPJyvE+ePGkkmRUrVtyYolBgcjref/75pylbtqz5+eefTXh4uPnPf/5zw2u7GXFl9jayb98+JScnq0WLFvY2Hx8fRUdHa8OGDW6sDEBBOHnypGw2m4oVK+buUlDALly4oMmTJyswMFB16tRxdzkoAJmZmerWrZteeOEF1ahRw93l3FTc+g1guLGSk5MlScHBwQ7twcHBOnDggDtKAlBAzp8/r+HDh6tLly4KCAhwdzkoIIsXL1bnzp119uxZlSlTRgkJCSpZsqS7y0IBGDdunDw9PTVo0CB3l3LT4crsbchmszlMG2OytQGwrosXL6pz587KzMzUxIkT3V0OClCTJk20fft2bdiwQa1atVLHjh2VkpLi7rKQz7Zs2aJ33nlHM2bM4Pe1E4TZ20hISIik/7tCmyUlJSXb1VoA1nTx4kV17NhR+/btU0JCAldlb3GFCxdWpUqVdN9992nq1Kny9PTU1KlT3V0W8tm3336rlJQUlStXTp6envL09NSBAwf03HPPqXz58u4uz+0Is7eRiIgIhYSEKCEhwd524cIFrVmzRlFRUW6sDEB+yAqyv/32m1asWKGgoCB3l4QbzBijtLQ0d5eBfNatWzft2LFD27dvt79CQ0P1wgsvaNmyZe4uz+0YM3uLOX36tH7//Xf79L59+7R9+3aVKFFC5cqV0+DBg/Xaa6/pzjvv1J133qnXXntN/v7+6tKlixurxrW62vE+ceKEEhMT7c8a/eWXXyRdukqfdaUe1pHb8Q4NDdVjjz2mrVu3avHixcrIyLD/FaZEiRLy9vZ2V9m4Rrkd76CgII0dO1bt2rVTmTJldPz4cU2cOFF//vmnHn/8cTdWjWt1tZ/nV/7n1MvLSyEhIapSpcqNLvXm4+7HKSB/rVq1ykjK9urRo4cx5tLjuWJjY01ISIjx8fExDzzwgPnpp5/cWzSu2dWO9/Tp053Oj42NdWvduDa5He+sx685e61atcrdpeMa5Ha8z507Zx599FETGhpqvL29TZkyZUy7du3Mpk2b3F02rtHVfp5fiUdz/R+bMcYUbFwGAAAACgZjZgEAAGBZhFkAAABYFmEWAAAAlkWYBQAAgGURZgEAAGBZhFkAAABYFmEWAAAAlkWYBQAAgGURZgHgGjVu3FiDBw92dxkAcFsjzAIAAMCyCLMAcBPJyMhQZmamu8sAAMsgzAKwvMaNG2vQoEF68cUXVaJECYWEhGjkyJGSpP3798tms2n79u32/n///bdsNptWr14tSVq9erVsNpuWLVumevXqyc/PT02bNlVKSoq+/vprVatWTQEBAXriiSd09uxZh22np6frmWeeUbFixRQUFKSXX35Zxhj7/AsXLujFF19U2bJlVbhwYd1777327UrSjBkzVKxYMS1evFjVq1eXj4+PDhw4cNV9njZtmmrUqCEfHx+VKVNGzzzzjH1eYmKi2rdvryJFiiggIEAdO3bUkSNH7PNHjhypunXratq0aSpXrpyKFCmip59+WhkZGRo/frxCQkJUunRpjR071mGbNptN77//vlq3bi0/Pz9FRERo3rx5Dn2GDRumypUry9/fXxUqVNCIESN08eJFhz5jxoxR6dKlVbRoUfXp00fDhw9X3bp17fN79uypRx55RG+++abKlCmjoKAgDRgwwL6e0aNHq1atWtnek8jISL3yyitXfe8A3GIMAFhcdHS0CQgIMCNHjjS//vqrmTlzprHZbGb58uVm3759RpLZtm2bvf9ff/1lJJlVq1YZY4xZtWqVkWTuu+8+s27dOrN161ZTqVIlEx0dbVq0aGG2bt1q1q5da4KCgszrr7/usN0iRYqYZ5991uzZs8d89NFHxt/f30yePNnep0uXLiYqKsqsXbvW/P777+aNN94wPj4+5tdffzXGGDN9+nTj5eVloqKizPr1682ePXvM6dOnc93fiRMnGl9fXxMfH29++eUXs2nTJvOf//zHGGNMZmamqVevnrn//vvN5s2bzXfffWfuuusuEx0dbV8+NjbWFClSxDz22GNm586d5ssvvzTe3t6mZcuWZuDAgWbPnj1m2rRpRpLZuHGjfTlJJigoyPzvf/8zv/zyi3n55ZeNh4eH2bVrl73Pq6++atavX2/27dtnvvzySxMcHGzGjRtnn//RRx8ZX19fM23aNPPLL7+YUaNGmYCAAFOnTh17nx49epiAgADTr18/s3v3brNo0SKH9/XgwYOmUKFCZtOmTfZlfvzxR2Oz2czevXtzfe8A3HoIswAsLzo62tx///0ObXfffbcZNmyYS2F2xYoV9j5xcXFGkkM46tu3r2nZsqXDdqtVq2YyMzPtbcOGDTPVqlUzxhjz+++/G5vNZg4dOuRQ24MPPmhiYmKMMZfCrCSzffv2PO9vaGioeemll5zOW758ufHw8DCJiYn2tp07dxpJ9vAXGxtr/P39TWpqqr1Py5YtTfny5U1GRoa9rUqVKiYuLs4+Lcn069fPYXv33nuvefrpp3Osdfz48SYyMtKh/4ABAxz6NGzYMFuYDQ8PN+np6fa2xx9/3HTq1Mk+3bp1a4ftDh482DRu3DjHOgDcuhhmAOCWULt2bYfpMmXKKCUl5ZrXERwcbP9T+eVtV67zvvvuk81ms083aNBAv/32mzIyMrR161YZY1S5cmUVKVLE/lqzZo327t1rX8bb2ztb/TlJSUnR4cOH9eCDDzqdv3v3boWFhSksLMzeVr16dRUrVky7d++2t5UvX15FixZ12Lfq1aurUKFCDm1X7m+DBg2yTV++3s8++0z333+/QkJCVKRIEY0YMUKJiYn2+b/88ovuueceh3VcOS1JNWrUkIeHh336yuP51FNPac6cOTp//rwuXryo2bNnq1evXk7fEwC3Nk93FwAA+cHLy8th2mazKTMz0x7OzGXjWK8cw+lsHTabLcd15lVmZqY8PDy0ZcsWh2AmSUWKFLH/28/PzyEQ58bPzy/X+cYYp+u6st3Zvl3r/mat97vvvlPnzp01atQotWzZUoGBgfrkk0/01ltvOe1/eW1Xulotbdu2lY+PjxYsWCAfHx+lpaWpQ4cOV60VwK2HK7MAbmmlSpWSJCUlJdnbLr8Z7Hp999132abvvPNOeXh4qF69esrIyFBKSooqVark8AoJCbmm7RUtWlTly5fXN99843R+9erVlZiYqIMHD9rbdu3apZMnT6patWrXtM3LOdvfqlWrSpLWr1+v8PBwvfTSS6pfv77uvPPObDezValSRZs2bXJo27x5s8t1eHp6qkePHpo+fbqmT5+uzp07y9/f3+X1ALA+rswCuKX5+fnpvvvu0+uvv67y5cvr2LFjevnll/Nt/QcPHtTQoUPVt29fbd26VRMmTLBfiaxcubK6du2q7t2766233lK9evV07NgxrVy5UrVq1VKbNm2uaZsjR45Uv379VLp0abVu3VqnTp3S+vXrNXDgQDVr1ky1a9dW165dFR8fr/T0dPXv31/R0dGqX7/+de/vvHnzVL9+fd1///2aPXu2Nm3apKlTp0qSKlWqpMTERH3yySe6++679dVXX2nBggUOyw8cOFBPPfWU6tevr6ioKM2dO1c7duxwGM6RV3369LEH9PXr11/3vgGwJq7MArjlTZs2TRcvXlT9+vX17LPPasyYMfm27u7du+vcuXO65557NGDAAA0cOFD/+te/7POnT5+u7t2767nnnlOVKlXUrl07ff/99w5jWl3Vo0cPxcfHa+LEiapRo4Yefvhh/fbbb5Iu/Tl+4cKFKl68uB544AE1a9ZMFSpU0Ny5c697XyVp1KhR+uSTT1S7dm3NnDlTs2fPVvXq1SVJ7du315AhQ/TMM8+obt262rBhg0aMGOGwfNeuXRUTE6Pnn39ed911l/bt26eePXvK19fX5VruvPNORUVFqUqVKrr33nvzZf8AWI/NOBusBADAFWw2mxYsWKBHHnkkX9fbvHlzhYSE6MMPP3RpOWOMqlatqr59+2ro0KH5WhMA62CYAQDghjl79qwmTZqkli1bysPDQ3PmzNGKFSuUkJDg0npSUlL04Ycf6tChQ3ryyScLqFoAVkCYBYCbzOVPOrjS119/rUaNGt3AavKXzWbTkiVLNGbMGKWlpalKlSr6/PPP1axZM5fWExwcrJIlS2ry5MkqXrx4AVULwAoYZgAAN5nff/89x3lly5a96uO5AOB2QpgFAACAZfE0AwAAAFgWYRYAAACWRZgFAACAZRFmAQAAYFmEWQAAAFgWYRYAAACWRZgFAACAZf0/+B7g2S7P1+wAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Repartition du nombre de canaux de vente selon les entreprise\n", + "plt.figure(figsize=(8, 6))\n", + "sns.barplot(x='number_compagny', y='nb_suppliers', data=products_purchased_reduced_spectacle, ci=None) # ci=None pour ne pas afficher les intervalles de confiance\n", + "plt.title('Nombre moyen de canaux de vente par entreprise')\n", + "plt.xlabel('number_compagny')\n", + "plt.ylabel('Nombre moyen de caneaux ')\n", + "plt.show()" + ] }, { "cell_type": "markdown", @@ -4217,7 +4330,7 @@ }, { "cell_type": "code", - "execution_count": 222, + "execution_count": 11, "id": "2867eceb-1f72-406c-adc2-adfedcaf60e6", "metadata": {}, "outputs": [ @@ -4240,7 +4353,7 @@ "dtype: int64" ] }, - "execution_count": 222, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -4253,190 +4366,13 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "985b6403-3c75-420e-a4a4-d3045213e9ef", - "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", - "
idcustomer_idtarget_nametarget_type_is_importtarget_type_namenumber_compagny
01165098618562Newsletter mensuelleFalsemanual_static_filter10
11165100618559Newsletter mensuelleFalsemanual_static_filter10
21165101618561Newsletter mensuelleFalsemanual_static_filter10
31165102618560Newsletter mensuelleFalsemanual_static_filter10
41165103618558Newsletter mensuelleFalsemanual_static_filter10
.....................
77965342070826764876INSCRIPTION NL VOYAGES HUMAFalsemanual_static_filter14
77965442070836764877Inscriptions newsletters (depuis 2019)Falsemanual_static_filter14
77965542070846801322Inscriptions newsletters (depuis 2019)Falsemanual_static_filter14
77965642070856837768Inscriptions newsletters (depuis 2019)Falsemanual_static_filter14
77965742070866837769Inscriptions newsletters (depuis 2019)Falsemanual_static_filter14
\n", - "

6240166 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " id customer_id target_name \\\n", - "0 1165098 618562 Newsletter mensuelle \n", - "1 1165100 618559 Newsletter mensuelle \n", - "2 1165101 618561 Newsletter mensuelle \n", - "3 1165102 618560 Newsletter mensuelle \n", - "4 1165103 618558 Newsletter mensuelle \n", - "... ... ... ... \n", - "779653 4207082 6764876 INSCRIPTION NL VOYAGES HUMA \n", - "779654 4207083 6764877 Inscriptions newsletters (depuis 2019) \n", - "779655 4207084 6801322 Inscriptions newsletters (depuis 2019) \n", - "779656 4207085 6837768 Inscriptions newsletters (depuis 2019) \n", - "779657 4207086 6837769 Inscriptions newsletters (depuis 2019) \n", - "\n", - " target_type_is_import target_type_name number_compagny \n", - "0 False manual_static_filter 10 \n", - "1 False manual_static_filter 10 \n", - "2 False manual_static_filter 10 \n", - "3 False manual_static_filter 10 \n", - "4 False manual_static_filter 10 \n", - "... ... ... ... \n", - "779653 False manual_static_filter 14 \n", - "779654 False manual_static_filter 14 \n", - "779655 False manual_static_filter 14 \n", - "779656 False manual_static_filter 14 \n", - "779657 False manual_static_filter 14 \n", - "\n", - "[6240166 rows x 6 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "target_information_spectacle" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "93a8ae1f-6fbd-4210-a857-728ae472d1c5", + "execution_count": 47, + "id": "561f361d-7d39-430a-9e27-a32f6c2f7b50", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# pas exploitable" + ] }, { "cell_type": "code",