From 29ac99df14d050fa5043f80e9deb1b55e25145f8 Mon Sep 17 00:00:00 2001 From: frodrigue-ensae Date: Tue, 5 Mar 2024 13:34:43 +0000 Subject: [PATCH] test_anova --- Spectacle/Stat_desc.ipynb | 464 ++++++++++++++++++++++++++++++++++---- 1 file changed, 414 insertions(+), 50 deletions(-) diff --git a/Spectacle/Stat_desc.ipynb b/Spectacle/Stat_desc.ipynb index f6e5cec..52f066e 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": 1, "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 'plt' 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[1], 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 \u001b[43mplt\u001b[49m\u001b[38;5;241m.\u001b[39mbar(company_campaigns_stats[\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 'plt' is not defined" + ] } ], "source": [ @@ -4167,11 +4168,73 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "58cbe8a5-3899-4aa3-91ab-48bed9124fbd", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "#creation des base servant au test d'anova\n", + "\n", + "time_between_purchase_10 = products_purchased_reduced_spectacle.loc[products_purchased_reduced_spectacle['number_compagny'] == 10]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "f563009c-e9a8-4e09-a345-87c49cbd4485", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 581.065880\n", + "1 0.000023\n", + "2 1032.951030\n", + "3 2502.966319\n", + "4 1728.097037\n", + " ... \n", + "35217 0.000000\n", + "35218 0.000000\n", + "35219 0.000000\n", + "35220 0.000000\n", + "35221 0.000000\n", + "Name: time_between_purchase, Length: 35222, dtype: float64\n", + "0 753.75116\n", + "1 0.00000\n", + "2 0.00000\n", + "3 0.00000\n", + "4 0.00000\n", + " ... \n", + "213494 0.00000\n", + "213495 0.00000\n", + "213496 0.00000\n", + "213497 0.00000\n", + "213498 0.00000\n", + "Name: time_between_purchase, Length: 213499, dtype: float64\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Supposons que vous avez un DataFrame appelé products_purchased_reduced_spectacle\n", + "# qui contient les données de vos produits achetés avec la colonne 'number_compagny'\n", + "\n", + "# Créez une liste des identifiants d'entreprise pour lesquels vous voulez effectuer la sélection\n", + "entreprises = [11, 12, 13, 14]\n", + "\n", + "# Parcourez chaque entreprise et effectuez la sélection\n", + "for entreprise in entreprises:\n", + " nom_variable = f\"time_between_purchase_{entreprise}\"\n", + " globals()[nom_variable] = products_purchased_reduced_spectacle.loc[products_purchased_reduced_spectacle['number_compagny'] == entreprise,\"time_between_purchase\"]\n", + "\n", + "# Maintenant, les résultats pour chaque entreprise sont stockés dans des variables distinctes\n", + "# Vous pouvez y accéder directement\n", + "print(time_between_purchase_11)\n", + "print(time_between_purchase_12)\n", + "# et ainsi de suite pour les autres entreprises\n" + ] }, { "cell_type": "code", @@ -4201,11 +4264,312 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "33ef5773-a09d-4b8c-918f-1b64a9790422", + "execution_count": 23, + "id": "aa000e3e-a44d-4cb4-b44b-9794f4b711ca", "metadata": {}, - "outputs": [], - "source": [] + "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", + "
customer_idnb_ticketsnb_purchasestotal_amountnb_suppliersvente_internet_maxpurchase_date_minpurchase_date_maxtime_between_purchasenb_tickets_internetnumber_compagny
011211271.60201778.4076391197.341759581.0658800.011
122246.00101407.3659371407.3659140.0000230.011
2398261.25201461.382106428.4310761032.9510300.011
345048646.00102846.403148343.4368292502.9663190.011
45595657588442.20201732.3382414.2412041728.0970370.011
....................................
352175201442120.00100.2275120.2275120.0000000.011
352185201482192.00100.1113190.1113190.0000000.011
352195201503120.00100.0886690.0886690.0000000.011
3522052015121126.00100.0449880.0449880.0000000.011
3522152015221126.00100.0000000.0000000.0000000.011
\n", + "

35222 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " customer_id nb_tickets nb_purchases total_amount nb_suppliers \\\n", + "0 1 12 11 271.60 2 \n", + "1 2 2 2 46.00 1 \n", + "2 3 9 8 261.25 2 \n", + "3 4 50 48 646.00 1 \n", + "4 5 5956 5758 8442.20 2 \n", + "... ... ... ... ... ... \n", + "35217 520144 2 1 20.00 1 \n", + "35218 520148 2 1 92.00 1 \n", + "35219 520150 3 1 20.00 1 \n", + "35220 520151 2 1 126.00 1 \n", + "35221 520152 2 1 126.00 1 \n", + "\n", + " vente_internet_max purchase_date_min purchase_date_max \\\n", + "0 0 1778.407639 1197.341759 \n", + "1 0 1407.365937 1407.365914 \n", + "2 0 1461.382106 428.431076 \n", + "3 0 2846.403148 343.436829 \n", + "4 0 1732.338241 4.241204 \n", + "... ... ... ... \n", + "35217 0 0.227512 0.227512 \n", + "35218 0 0.111319 0.111319 \n", + "35219 0 0.088669 0.088669 \n", + "35220 0 0.044988 0.044988 \n", + "35221 0 0.000000 0.000000 \n", + "\n", + " time_between_purchase nb_tickets_internet number_compagny \n", + "0 581.065880 0.0 11 \n", + "1 0.000023 0.0 11 \n", + "2 1032.951030 0.0 11 \n", + "3 2502.966319 0.0 11 \n", + "4 1728.097037 0.0 11 \n", + "... ... ... ... \n", + "35217 0.000000 0.0 11 \n", + "35218 0.000000 0.0 11 \n", + "35219 0.000000 0.0 11 \n", + "35220 0.000000 0.0 11 \n", + "35221 0.000000 0.0 11 \n", + "\n", + "[35222 rows x 11 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "time_between_purchase_11" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "e2c51e28-6197-48f0-ab6d-9fc7b3b0de74", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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 paire de catégories.\n" + ] + } + ], + "source": [ + "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": "markdown", @@ -4217,7 +4581,7 @@ }, { "cell_type": "code", - "execution_count": 222, + "execution_count": 11, "id": "2867eceb-1f72-406c-adc2-adfedcaf60e6", "metadata": {}, "outputs": [ @@ -4240,7 +4604,7 @@ "dtype: int64" ] }, - "execution_count": 222, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" }