├── .DS_Store ├── DemoBasic_Fast_API ├── TestApi.ipynb ├── __pycache__ │ └── main.cpython-310.pyc ├── appFlask.py └── main.py ├── DemoModeleRegLin_Fast_API ├── DemoApi.ipynb └── main.py ├── README.md ├── WAS11 └── Conférence Benjamin Ejzenberg Dataviz.pdf ├── WAS13_GEN_AI └── FodementsIAGénératives.pdf ├── WAS17 ├── .DS_Store ├── WAS17_Découverte_Tests_Statistiques.R ├── WAS17_La_Découverte_Des_Tests_Statistiques.pptx └── data │ ├── .DS_Store │ ├── base_de_donnees.csv │ ├── base_de_donnees_media_sociaux.csv │ ├── data_marketing.csv │ ├── donnees_marketing.csv │ ├── donnees_marketing_3_groupes.csv │ ├── recommandation_satisfaction.csv │ └── water_oxygen_data.csv ├── WAS17_A_La_Découverte_Des_Tests_Statistiques.pptx ├── WAS18 ├── WAS18_Regression_Lineaire_Dans_La_Pratique.Rmd ├── WAS18_Regression_Linéaire_Dans_La_Pratique.pptx └── data │ ├── Advertising.csv │ └── donnees_marketing.csv ├── WAS19 ├── WAS19_Regression_Logistique_Dans_La_Pratique.R ├── WAS19_Regression_Logistique_Dans_La_Pratique.Rmd ├── WAS19_Regression_Logistique_Dans_La_Pratique.docx ├── WAS19_Regression_Logistique_Dans_La_Pratique.pptx └── data │ └── heart.csv ├── WAS20 ├── Présentation1.pptx ├── WAS20_Le_Modele_ARIMA_Dans_La_Pratique.Rmd └── data │ └── airline_passengers.csv ├── WAS22 ├── ANOVA_Un_Facteur.R ├── ANOVA_Unfacteur.pptx └── WAS22_Analyse_De_La_Variance.xlsx ├── WAS23 └── WAS23_R_Python_Pour_DataScientists.pptx ├── WAS24 └── WAS24_Stratégie_Création_Contenu.pptx ├── WAS4_Bien_Demarrer_Git_Github.pptx ├── WAS8 ├── WAS8_API_Pour_Le_DataScientist.pptx ├── WAS8_Debuter_Avec_API-Copy3.ipynb └── ~$WAS8_API_Pour_Le_DataScientist.pptx ├── WAS8_API_Pour_Le_DataScientist.pptx ├── WAS_5_Scrapping_Film_Beautiful_Soup.ipynb ├── WAS_Episode1_Bien_Demarrer_Avec_Rmarkdown.Rmd ├── WAS_Episode1_Bien_Demarrer_Avec_Rmarkdown.html ├── WebScrapingBeautifulSoup.pptx ├── WebScrappingBeautifulSoup.pptx ├── temps.pptx ├── test.docx └── testlives /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/.DS_Store -------------------------------------------------------------------------------- /DemoBasic_Fast_API/TestApi.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import requests\n", 10 | "import pandas as pd" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 3, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "\n", 20 | "# Si vous exécutez l'API localement sur le port par défaut de FastAPI, utilisez ceci:\n", 21 | "BASE_URL = \"http://127.0.0.1:8000\"\n", 22 | "\n" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 4, 28 | "metadata": {}, 29 | "outputs": [ 30 | { 31 | "name": "stdout", 32 | "output_type": "stream", 33 | "text": [ 34 | "{'message': 'Bienvenue sur notre API de génération de nombres aléatoires!'}\n" 35 | ] 36 | } 37 | ], 38 | "source": [ 39 | "# Récupérer le message d'accueil\n", 40 | "response_accueil = requests.get(f\"{BASE_URL}/\")\n", 41 | "print(response_accueil.json())\n", 42 | "\n" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": 5, 48 | "metadata": {}, 49 | "outputs": [ 50 | { 51 | "name": "stdout", 52 | "output_type": "stream", 53 | "text": [ 54 | " nombre_aleatoire\n", 55 | "0 37\n" 56 | ] 57 | } 58 | ], 59 | "source": [ 60 | "# Générer un nombre aléatoire\n", 61 | "response_nombre = requests.get(f\"{BASE_URL}/nombre_aleatoire/\")\n", 62 | "df = pd.DataFrame([response_nombre.json()])\n", 63 | "print(df)" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 7, 69 | "metadata": {}, 70 | "outputs": [ 71 | { 72 | "name": "stdout", 73 | "output_type": "stream", 74 | "text": [ 75 | " detail\n", 76 | "0 Not Found\n" 77 | ] 78 | } 79 | ], 80 | "source": [ 81 | "# Générer un nombre aléatoire entre 10 et 50\n", 82 | "min_val = 10\n", 83 | "max_val = 50\n", 84 | "response_nombre_range = requests.get(f\"{BASE_URL}/nombre_aleatoire/{min_val}/{max_val}/\")\n", 85 | "df_range = pd.DataFrame([response_nombre_range.json()])\n", 86 | "print(df_range)" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 8, 92 | "metadata": {}, 93 | "outputs": [ 94 | { 95 | "name": "stdout", 96 | "output_type": "stream", 97 | "text": [ 98 | " * Serving Flask app '__main__'\n", 99 | " * Debug mode: on\n" 100 | ] 101 | }, 102 | { 103 | "name": "stderr", 104 | "output_type": "stream", 105 | "text": [ 106 | "\u001b[31m\u001b[1mWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.\u001b[0m\n", 107 | " * Running on http://127.0.0.1:5000\n", 108 | "\u001b[33mPress CTRL+C to quit\u001b[0m\n", 109 | " * Restarting with stat\n", 110 | "This version of python seems to be incorrectly compiled\n", 111 | "(internal generated filenames are not absolute).\n", 112 | "This may make the debugger miss breakpoints.\n", 113 | "Related bug: http://bugs.python.org/issue1666807\n", 114 | "/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/traitlets/traitlets.py:2548: FutureWarning: Supporting extra quotes around strings is deprecated in traitlets 5.0. You can use 'hmac-sha256' instead of '\"hmac-sha256\"' if you require traitlets >=5.\n", 115 | " warn(\n", 116 | "/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/traitlets/traitlets.py:2499: FutureWarning: Supporting extra quotes around Bytes is deprecated in traitlets 5.0. Use 'e077023c-ad6d-44d1-9217-b98e1397a266' instead of 'b\"e077023c-ad6d-44d1-9217-b98e1397a266\"'.\n", 117 | " warn(\n", 118 | "Traceback (most recent call last):\n", 119 | " File \"\", line 198, in _run_module_as_main\n", 120 | " File \"\", line 88, in _run_code\n", 121 | " File \"/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/ipykernel_launcher.py\", line 17, in \n", 122 | " app.launch_new_instance()\n", 123 | " File \"/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/traitlets/config/application.py\", line 1042, in launch_instance\n", 124 | " app.initialize(argv)\n", 125 | " File \"/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/traitlets/config/application.py\", line 113, in inner\n", 126 | " return method(app, *args, **kwargs)\n", 127 | " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", 128 | " File \"/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/ipykernel/kernelapp.py\", line 666, in initialize\n", 129 | " self.init_sockets()\n", 130 | " File \"/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/ipykernel/kernelapp.py\", line 307, in init_sockets\n", 131 | " self.shell_port = self._bind_socket(self.shell_socket, self.shell_port)\n", 132 | " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", 133 | " File \"/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/ipykernel/kernelapp.py\", line 244, in _bind_socket\n", 134 | " return self._try_bind_socket(s, port)\n", 135 | " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", 136 | " File \"/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/ipykernel/kernelapp.py\", line 220, in _try_bind_socket\n", 137 | " s.bind(\"tcp://%s:%i\" % (self.ip, port))\n", 138 | " File \"/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/zmq/sugar/socket.py\", line 302, in bind\n", 139 | " super().bind(addr)\n", 140 | " File \"zmq/backend/cython/socket.pyx\", line 564, in zmq.backend.cython.socket.Socket.bind\n", 141 | " File \"zmq/backend/cython/checkrc.pxd\", line 28, in zmq.backend.cython.checkrc._check_rc\n", 142 | "zmq.error.ZMQError: Address already in use (addr='tcp://127.0.0.1:9007')\n" 143 | ] 144 | }, 145 | { 146 | "ename": "SystemExit", 147 | "evalue": "1", 148 | "output_type": "error", 149 | "traceback": [ 150 | "An exception has occurred, use %tb to see the full traceback.\n", 151 | "\u001b[0;31mSystemExit\u001b[0m\u001b[0;31m:\u001b[0m 1\n" 152 | ] 153 | }, 154 | { 155 | "name": "stderr", 156 | "output_type": "stream", 157 | "text": [ 158 | "/Users/natachanjongwayepnga/anaconda3/envs/boost/lib/python3.11/site-packages/IPython/core/interactiveshell.py:3516: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.\n", 159 | " warn(\"To exit: use 'exit', 'quit', or Ctrl-D.\", stacklevel=1)\n" 160 | ] 161 | } 162 | ], 163 | "source": [ 164 | "from flask import Flask, jsonify\n", 165 | "import random\n", 166 | "\n", 167 | "app = Flask(__name__)\n", 168 | "\n", 169 | "@app.route('/')\n", 170 | "def accueil():\n", 171 | " return jsonify({\"message\": \"Bienvenue sur notre API de génération de nombres aléatoires!\"})\n", 172 | "\n", 173 | "@app.route('/nombre_aleatoire/')\n", 174 | "def generer_nombre():\n", 175 | " \"\"\" Génère un nombre aléatoire entre 0 et 100. \"\"\"\n", 176 | " return jsonify({\"nombre_aleatoire\": random.randint(0, 100)})\n", 177 | "\n", 178 | "@app.route('/nombre_aleatoire/_')\n", 179 | "def generer_nombre_min_max(min, max):\n", 180 | " \"\"\" Génère un nombre aléatoire entre min et max. \"\"\"\n", 181 | " return jsonify({\"nombre_aleatoire\": random.randint(min, max)})\n", 182 | "\n", 183 | "#if __name__ == '__main__':\n", 184 | "app.run(debug=True)\n" 185 | ] 186 | } 187 | ], 188 | "metadata": { 189 | "kernelspec": { 190 | "display_name": "Python 3", 191 | "language": "python", 192 | "name": "python3" 193 | }, 194 | "language_info": { 195 | "codemirror_mode": { 196 | "name": "ipython", 197 | "version": 3 198 | }, 199 | "file_extension": ".py", 200 | "mimetype": "text/x-python", 201 | "name": "python", 202 | "nbconvert_exporter": "python", 203 | "pygments_lexer": "ipython3", 204 | "version": "3.11.3" 205 | }, 206 | "orig_nbformat": 4 207 | }, 208 | "nbformat": 4, 209 | "nbformat_minor": 2 210 | } 211 | -------------------------------------------------------------------------------- /DemoBasic_Fast_API/__pycache__/main.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/DemoBasic_Fast_API/__pycache__/main.cpython-310.pyc -------------------------------------------------------------------------------- /DemoBasic_Fast_API/appFlask.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, jsonify 2 | import random 3 | 4 | app = Flask(__name__) 5 | 6 | @app.route('/') 7 | def accueil(): 8 | return jsonify({"message": "Bienvenue sur notre API de génération de nombres aléatoires!"}) 9 | 10 | @app.route('/nombre_aleatoire/') 11 | def generer_nombre(): 12 | """ Génère un nombre aléatoire entre 0 et 100. """ 13 | return jsonify({"nombre_aleatoire": random.randint(0, 100)}) 14 | 15 | @app.route('/nombre_aleatoire/_') 16 | def generer_nombre_min_max(min, max): 17 | """ Génère un nombre aléatoire entre min et max. """ 18 | return jsonify({"nombre_aleatoire": random.randint(min, max)}) 19 | 20 | #if __name__ == '__main__': 21 | app.run(debug=True) 22 | -------------------------------------------------------------------------------- /DemoBasic_Fast_API/main.py: -------------------------------------------------------------------------------- 1 | from fastapi import FastAPI 2 | import random 3 | 4 | app = FastAPI() 5 | 6 | @app.get("/") 7 | def accueil(): 8 | return {"message": "Bienvenue sur notre API de génération de nombres aléatoires!"} 9 | 10 | @app.get("/nombre_aleatoire/") 11 | def generer_nombre(): 12 | """ 13 | Génère un nombre aléatoire entre 0 et 100. 14 | """ 15 | return {"nombre_aleatoire": random.randint(0, 100)} 16 | 17 | @app.get("/nombre_aleatoire/{min}_{max}") 18 | def generer_nombre(min: int = 0, max: int = 100): 19 | """ 20 | Génère un nombre aléatoire entre min et max. 21 | """ 22 | return {"nombre_aleatoire": random.randint(min, max)} 23 | # uvicorn main:app --reload -------------------------------------------------------------------------------- /DemoModeleRegLin_Fast_API/DemoApi.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "# Importation des bibliothèques nécessaires\n", 10 | "import requests\n", 11 | "import pandas as pd\n" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 4, 17 | "metadata": {}, 18 | "outputs": [ 19 | { 20 | "name": "stdout", 21 | "output_type": "stream", 22 | "text": [ 23 | "{'message': \"Bienvenue sur notre API de prédiction de la taille d'un enfant !\"}\n" 24 | ] 25 | } 26 | ], 27 | "source": [ 28 | "\n", 29 | "# Base URL de l'API\n", 30 | "BASE_URL = \"http://127.0.0.1:8000\"\n", 31 | "\n", 32 | "# Tester la route d'accueil\n", 33 | "response = requests.get(f\"{BASE_URL}/\")\n", 34 | "print(response.json())\n" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 5, 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "data": { 44 | "text/html": [ 45 | "
\n", 46 | "\n", 59 | "\n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | "
predictionvaleurs_shap
0178.294538[-1.7072437578046098, -2.0849310754420762]
\n", 75 | "
" 76 | ], 77 | "text/plain": [ 78 | " prediction valeurs_shap\n", 79 | "0 178.294538 [-1.7072437578046098, -2.0849310754420762]" 80 | ] 81 | }, 82 | "metadata": {}, 83 | "output_type": "display_data" 84 | } 85 | ], 86 | "source": [ 87 | "\n", 88 | "# Tester la prédiction avec une entrée\n", 89 | "data_pred = {\n", 90 | " \"taille_pere\": 170,\n", 91 | " \"taille_mere\": 160\n", 92 | "}\n", 93 | "response = requests.post(f\"{BASE_URL}/predire/\", json=data_pred)\n", 94 | "df_pred = pd.DataFrame([response.json()])\n", 95 | "display(df_pred)\n" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 6, 101 | "metadata": {}, 102 | "outputs": [ 103 | { 104 | "data": { 105 | "text/html": [ 106 | "
\n", 107 | "\n", 120 | "\n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | "
noms_variablescoefficientsp_valeurssignificativite
0Intercept42.0612945.177307e-03Significatif
1taille_pere0.4269387.243874e-11Significatif
2taille_mere0.3978362.315991e-09Significatif
\n", 154 | "
" 155 | ], 156 | "text/plain": [ 157 | " noms_variables coefficients p_valeurs significativite\n", 158 | "0 Intercept 42.061294 5.177307e-03 Significatif\n", 159 | "1 taille_pere 0.426938 7.243874e-11 Significatif\n", 160 | "2 taille_mere 0.397836 2.315991e-09 Significatif" 161 | ] 162 | }, 163 | "metadata": {}, 164 | "output_type": "display_data" 165 | }, 166 | { 167 | "name": "stdout", 168 | "output_type": "stream", 169 | "text": [ 170 | "R2: 0.468958290292545\n" 171 | ] 172 | } 173 | ], 174 | "source": [ 175 | "\n", 176 | "# Obtenir les paramètres du modèle\n", 177 | "response_params = requests.get(BASE_URL + \"/parametres/\")\n", 178 | "data_params = response_params.json()\n", 179 | "df_params = pd.DataFrame({\n", 180 | " \"noms_variables\": data_params[\"noms_variables\"],\n", 181 | " \"coefficients\": data_params[\"coefficients\"],\n", 182 | " \"p_valeurs\": data_params[\"p_valeurs\"],\n", 183 | " \"significativite\": data_params[\"significativite\"]\n", 184 | "})\n", 185 | "display(df_params)\n", 186 | "print(f\"R2: {data_params['r2']}\")" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": 7, 192 | "metadata": {}, 193 | "outputs": [ 194 | { 195 | "data": { 196 | "text/html": [ 197 | "
\n", 198 | "\n", 211 | "\n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | "
noms_variablescoefficientsp_valeurssignificativite
0Intercept42.0572736.328239e-03Significatif
1taille_pere0.4268991.552670e-10Significatif
2taille_mere0.3968484.878206e-09Significatif
\n", 245 | "
" 246 | ], 247 | "text/plain": [ 248 | " noms_variables coefficients p_valeurs significativite\n", 249 | "0 Intercept 42.057273 6.328239e-03 Significatif\n", 250 | "1 taille_pere 0.426899 1.552670e-10 Significatif\n", 251 | "2 taille_mere 0.396848 4.878206e-09 Significatif" 252 | ] 253 | }, 254 | "metadata": {}, 255 | "output_type": "display_data" 256 | }, 257 | { 258 | "name": "stdout", 259 | "output_type": "stream", 260 | "text": [ 261 | "R2 mis à jour: 0.4512410639049236\n" 262 | ] 263 | } 264 | ], 265 | "source": [ 266 | "# Ajouter de nouvelles données et mettre à jour le modèle\n", 267 | "data_ajout = {\n", 268 | " \"taille_pere\": [178, 172],\n", 269 | " \"taille_mere\": [162, 168],\n", 270 | " \"taille_enfant\": [176, 170]\n", 271 | "}\n", 272 | "response_ajout = requests.post(BASE_URL + \"/ajouter_donnees/\", json=data_ajout)\n", 273 | "data_updated = response_ajout.json()[\"nouveaux_parametres\"]\n", 274 | "df_params_updated = pd.DataFrame({\n", 275 | " \"noms_variables\": data_updated[\"noms_variables\"],\n", 276 | " \"coefficients\": data_updated[\"coefficients\"],\n", 277 | " \"p_valeurs\": data_updated[\"p_valeurs\"],\n", 278 | " \"significativite\": data_updated[\"significativite\"]\n", 279 | "})\n", 280 | "display(df_params_updated)\n", 281 | "print(f\"R2 mis à jour: {data_updated['r2']}\")\n", 282 | "\n", 283 | "\n" 284 | ] 285 | }, 286 | { 287 | "cell_type": "code", 288 | "execution_count": 8, 289 | "metadata": {}, 290 | "outputs": [ 291 | { 292 | "data": { 293 | "text/html": [ 294 | "
\n", 295 | "\n", 308 | "\n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | "
noms_variablescoefficientsp_valeurssignificativite
0Intercept42.0572736.328239e-03Significatif
1taille_pere0.4268991.552670e-10Significatif
2taille_mere0.3968484.878206e-09Significatif
\n", 342 | "
" 343 | ], 344 | "text/plain": [ 345 | " noms_variables coefficients p_valeurs significativite\n", 346 | "0 Intercept 42.057273 6.328239e-03 Significatif\n", 347 | "1 taille_pere 0.426899 1.552670e-10 Significatif\n", 348 | "2 taille_mere 0.396848 4.878206e-09 Significatif" 349 | ] 350 | }, 351 | "metadata": {}, 352 | "output_type": "display_data" 353 | }, 354 | { 355 | "name": "stdout", 356 | "output_type": "stream", 357 | "text": [ 358 | "R2 après vérification: 0.4512410639049236\n" 359 | ] 360 | } 361 | ], 362 | "source": [ 363 | "# Vérifier à nouveau les paramètres pour voir s'ils ont changé après avoir ajouté de nouvelles données\n", 364 | "response_recheck = requests.get(f\"{BASE_URL}/parametres/\")\n", 365 | "data_recheck = response_recheck.json()\n", 366 | "\n", 367 | "df_recheck = pd.DataFrame({\n", 368 | " \"noms_variables\": data_recheck[\"noms_variables\"],\n", 369 | " \"coefficients\": data_recheck[\"coefficients\"],\n", 370 | " \"p_valeurs\": data_recheck[\"p_valeurs\"],\n", 371 | " \"significativite\": data_recheck[\"significativite\"]\n", 372 | "})\n", 373 | "display(df_recheck)\n", 374 | "print(f\"R2 après vérification: {data_recheck['r2']}\")\n" 375 | ] 376 | } 377 | ], 378 | "metadata": { 379 | "kernelspec": { 380 | "display_name": "boost", 381 | "language": "python", 382 | "name": "python3" 383 | }, 384 | "language_info": { 385 | "codemirror_mode": { 386 | "name": "ipython", 387 | "version": 3 388 | }, 389 | "file_extension": ".py", 390 | "mimetype": "text/x-python", 391 | "name": "python", 392 | "nbconvert_exporter": "python", 393 | "pygments_lexer": "ipython3", 394 | "version": "3.11.3" 395 | }, 396 | "orig_nbformat": 4 397 | }, 398 | "nbformat": 4, 399 | "nbformat_minor": 2 400 | } 401 | -------------------------------------------------------------------------------- /DemoModeleRegLin_Fast_API/main.py: -------------------------------------------------------------------------------- 1 | from fastapi import FastAPI 2 | from pydantic import BaseModel 3 | from sklearn.linear_model import LinearRegression 4 | import numpy as np 5 | import statsmodels.api as sm 6 | import shap 7 | 8 | app = FastAPI() 9 | 10 | # Génération de données fictives initiales 11 | np.random.seed(0) 12 | taille_pere_init = np.random.uniform(160, 190, 100) 13 | taille_mere_init = np.random.uniform(150, 180, 100) 14 | bruit = np.random.normal(0, 5, 100) 15 | taille_enfant_init = 0.5 * taille_pere_init + 0.4 * taille_mere_init + 30 + bruit 16 | 17 | data_global = { 18 | "taille_pere": taille_pere_init.tolist(), 19 | "taille_mere": taille_mere_init.tolist(), 20 | "taille_enfant": taille_enfant_init.tolist() 21 | } 22 | 23 | modele = LinearRegression() 24 | modele.fit(np.column_stack((taille_pere_init, taille_mere_init)), taille_enfant_init) 25 | 26 | X_sm = sm.add_constant(np.column_stack((taille_pere_init, taille_mere_init))) 27 | modele_sm = sm.OLS(taille_enfant_init, X_sm).fit() 28 | 29 | expliqueur = shap.Explainer(modele, shap.sample(np.column_stack((taille_pere_init, taille_mere_init)), 100)) 30 | 31 | class EntreePrediction(BaseModel): 32 | taille_pere: float 33 | taille_mere: float 34 | 35 | class NouvellesDonnees(BaseModel): 36 | taille_pere: list[float] 37 | taille_mere: list[float] 38 | taille_enfant: list[float] 39 | 40 | @app.get("/") 41 | def accueil(): 42 | return {"message": "Bienvenue sur notre API de prédiction de la taille d'un enfant !"} 43 | 44 | @app.post("/predire/") 45 | def predire(donnees: EntreePrediction): 46 | x = np.array([donnees.taille_pere, donnees.taille_mere]).reshape(1, -1) 47 | prediction = modele.predict(x)[0] 48 | valeurs_shap = expliqueur(x) 49 | 50 | return { 51 | "prediction": prediction, 52 | "valeurs_shap": valeurs_shap.values[0].tolist() 53 | } 54 | 55 | @app.get("/parametres/") 56 | def obtenir_parametres(): 57 | noms_variables = ["Intercept", "taille_pere", "taille_mere"] 58 | coeffs = modele.coef_.tolist() 59 | coeffs.insert(0, modele.intercept_) 60 | 61 | r2 = modele_sm.rsquared 62 | p_valeurs = modele_sm.pvalues.tolist() 63 | significativite = ["Significatif" if p < 0.05 else "Non significatif" for p in modele_sm.pvalues] 64 | 65 | return { 66 | "noms_variables": noms_variables, 67 | "coefficients": coeffs, 68 | "r2": r2, 69 | "p_valeurs": p_valeurs, 70 | "significativite": significativite 71 | } 72 | 73 | @app.post("/ajouter_donnees/") 74 | def ajouter_donnees(data: NouvellesDonnees): 75 | global modele, modele_sm 76 | 77 | # Mise à jour des données 78 | data_global["taille_pere"].extend(data.taille_pere) 79 | data_global["taille_mere"].extend(data.taille_mere) 80 | data_global["taille_enfant"].extend(data.taille_enfant) 81 | 82 | X = np.column_stack((data_global["taille_pere"], data_global["taille_mere"])) 83 | y = np.array(data_global["taille_enfant"]) 84 | 85 | # Entraîner un nouveau modèle 86 | modele = LinearRegression().fit(X, y) 87 | 88 | X_sm = sm.add_constant(X) 89 | modele_sm = sm.OLS(y, X_sm).fit() 90 | 91 | # Obtenir les nouveaux paramètres du modèle 92 | noms_variables = ["Intercept", "taille_pere", "taille_mere"] 93 | coeffs = modele.coef_.tolist() 94 | coeffs.insert(0, modele.intercept_) 95 | 96 | r2 = modele_sm.rsquared 97 | p_valeurs = modele_sm.pvalues.tolist() 98 | significativite = ["Significatif" if p < 0.05 else "Non significatif" for p in modele_sm.pvalues] 99 | 100 | return { 101 | "message": "Données ajoutées et modèle mis à jour", 102 | "nouveaux_parametres": { 103 | "noms_variables": noms_variables, 104 | "coefficients": coeffs, 105 | "r2": r2, 106 | "p_valeurs": p_valeurs, 107 | "significativite": significativite 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WAS: Weekly Analytics Show 2 | Ce dossier contient les codes utilisés lors des Weekly Analytics Show (WAS) sur LeCoinStat 3 | -------------------------------------------------------------------------------- /WAS11/Conférence Benjamin Ejzenberg Dataviz.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS11/Conférence Benjamin Ejzenberg Dataviz.pdf -------------------------------------------------------------------------------- /WAS13_GEN_AI/FodementsIAGénératives.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS13_GEN_AI/FodementsIAGénératives.pdf -------------------------------------------------------------------------------- /WAS17/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS17/.DS_Store -------------------------------------------------------------------------------- /WAS17/WAS17_Découverte_Tests_Statistiques.R: -------------------------------------------------------------------------------- 1 | ########################################################################### 2 | # Code Analyse des relations entre des variables 3 | #1-Quali-Quali 4 | #2-Quanti-Quanti 5 | #3-Quanti-Quali 6 | ########################################################################### 7 | 8 | 9 | 10 | ########################################################################### 11 | # Analyse de la liaison entre deux variables qualitatives ----------------- 12 | # Hypothèse nulle: il y a pas de lien 13 | # Hopytèse alternative : il y a un lien entre les deux variables 14 | ########################################################################### 15 | 16 | # Charger les données depuis un fichier CSV 17 | data <- read.csv("/Users/natachanjongwayepnga/Documents/LeCoinStat/WAS17/data/base_de_donnees_media_sociaux.csv", header = TRUE, sep = ",") 18 | 19 | #Visualiser la base de données 20 | View(data) 21 | 22 | # Question 1: Relation entre l'âge et la plateforme de média social : Y a-t-il une association entre la tranche d'âge des utilisateurs et leur préférence pour une plateforme de média social spécifique ? 23 | 24 | # Etape 1: Décrire les deux variables sur le plan univarié 25 | library(ggplot2)# librairie pour faire des graphiques 26 | # Pour la variable 'Tranche_d_age' 27 | age_table <- table(data$Tranche_d_age) 28 | 29 | #Répartition par tranche d'âge 30 | print(age_table) 31 | barplot(age_table, main="Distribution des tranches d'âge", xlab="Tranche d'âge", ylab="Fréquence") 32 | 33 | # Calcul des proportions pour la variable 'Tranche_d_age' 34 | age_counts <- table(data$Tranche_d_age) 35 | age_df <- data.frame(Age = names(age_counts), Count = as.numeric(age_counts)) 36 | age_df$Proportion <- age_df$Count / sum(age_df$Count) 37 | 38 | # Barplot pour 'Tranche_d_age' 39 | ggplot(age_df, aes(x = Age, y = Proportion, fill = Age)) + 40 | geom_bar(stat = "identity") + 41 | labs(title = "Proportion des tranches d'âge", x = "Tranche d'âge", y = "Proportion") + 42 | theme_minimal() 43 | 44 | # Pour la variable 'Plateforme_Media_Social' 45 | platform_table <- table(data$Plateforme_Media_Social) 46 | print(platform_table) 47 | barplot(platform_table, main="Distribution des plateformes de média social", xlab="Plateforme", ylab="Fréquence") 48 | 49 | 50 | # Calcul des proportions pour la variable 'Plateforme_Media_Social' 51 | platform_counts <- table(data$Plateforme_Media_Social) 52 | platform_df <- data.frame(Platform = names(platform_counts), Count = as.numeric(platform_counts)) 53 | platform_df$Proportion <- platform_df$Count / sum(platform_df$Count) 54 | 55 | # Barplot pour 'Plateforme_Media_Social' 56 | ggplot(platform_df, aes(x = Platform, y = Proportion, fill = Platform)) + 57 | geom_bar(stat = "identity") + 58 | labs(title = "Proportion des plateformes de média social", x = "Plateforme", y = "Proportion") + 59 | theme_minimal() 60 | 61 | 62 | # Étape 2 : Description bivariée des variables et formulation d'une hypothèse 63 | 64 | # Tableau de contingence 65 | contingency_table <- table(data$Tranche_d_age, data$Plateforme_Media_Social) 66 | print(contingency_table) 67 | 68 | 69 | # Conversion en dataframe pour le graphique 70 | contingency_df <- as.data.frame(contingency_table) 71 | names(contingency_df) <- c("Tranche_d_age", "Plateforme_Media_Social", "Count") 72 | 73 | # Calcul des proportions pour chaque combinaison de tranche d'âge et plateforme 74 | contingency_df$Proportion <- with(contingency_df, Count / sum(Count[Tranche_d_age == contingency_df$Tranche_d_age])) 75 | 76 | 77 | 78 | library(ggplot2) 79 | 80 | # Créer un graphique de répartition par tranche d'âge et par plateforme 81 | age_platform_plot <- ggplot(data, aes(x = Tranche_d_age, fill = Plateforme_Media_Social)) + 82 | geom_bar(position = "fill") + 83 | labs(title = "Répartition par Tranche d'âge et par Plateforme", x = "Tranche d'âge", y = "Proportion") + 84 | theme_minimal() + 85 | scale_fill_brewer(palette = "Set1") 86 | 87 | # Afficher le graphique 88 | print(age_platform_plot) 89 | 90 | # Créer un graphique de répartition par plateforme et par tranche d'âge 91 | platform_age_plot <- ggplot(data, aes(x = Plateforme_Media_Social, fill = Tranche_d_age)) + 92 | geom_bar(position = "fill") + 93 | labs(title = "Répartition par Plateforme et par Tranche d'âge", x = "Plateforme de média social", y = "Proportion") + 94 | theme_minimal() + 95 | scale_fill_brewer(palette = "Set1") 96 | 97 | # Afficher le graphique 98 | print(platform_age_plot) 99 | 100 | 101 | # Etape 3: Test de chi-deux d'indépendance 102 | ?chisq.test # Pour voir le fonctionnement 103 | # Test du Chi-deux d'indépendance 104 | chi_squared_test <- chisq.test(contingency_table) 105 | 106 | # Afficher les résultats du test 107 | print(chi_squared_test) 108 | 109 | #install.packages("vcd") 110 | library(vcd) 111 | assocstats(contingency_table) 112 | 113 | # Calcul du coefficient de Cramer (V) 114 | cramer_v <- sqrt(chi_squared_test$statistic / (nrow(data) * (min(nrow(contingency_table), ncol(contingency_table)) - 1))) 115 | cramer_v 116 | 117 | # Etape 4: Conclusion 118 | 119 | 120 | # Question 2: Influence du niveau d'éducation sur le choix de la plateforme : Le niveau d'éducation des utilisateurs affecte-t-il de manière significative leur choix de plateforme de média social ? 121 | 122 | 123 | 124 | ########################################################################### 125 | # Analyse de la corrélation entre deux variables quantitatives ----------------- 126 | # Hypothèse nulle: il y a pas de corrélation 127 | # Hopytèse alternative : il y a un corrélation entre les deux variables 128 | ########################################################################### 129 | 130 | # Importation des données 131 | data <- read.csv("/Users/natachanjongwayepnga/Documents/LeCoinStat/WAS17/data/data_marketing.csv", header = TRUE, sep = ",") 132 | 133 | View(data) 134 | 135 | # Étape 1 : Description univariée des variables Revenu et Dépenses Publicitaires 136 | # Statistiques descriptives pour Revenu et Dépenses Publicitaires 137 | summary(data$Revenu) 138 | summary(data$Depenses_Publicitaires) 139 | 140 | # Boxplot pour Revenu 141 | boxplot(data$Revenu, main = "Boxplot de Revenu", ylab = "Revenu") 142 | 143 | # Boxplot pour Dépenses Publicitaires 144 | boxplot(data$Depenses_Publicitaires, main = "Boxplot de Dépenses Publicitaires", ylab = "Dépenses Publicitaires") 145 | 146 | 147 | # Etape 2: Description bivariée des variables Reveni et Dépenses Publicitaires 148 | 149 | # Nuage de points pour Revenu et Dépenses Publicitaires 150 | plot(data$Revenu, data$Depenses_Publicitaires, 151 | main = "Nuage de points entre Revenu et Dépenses Publicitaires", 152 | xlab = "Revenu", ylab = "Dépenses Publicitaires") 153 | 154 | 155 | 156 | # Étape 3 : Corrélation de Pearson, Spearman et Kendall 157 | 158 | 159 | # Calcul de la corrélation de Pearson 160 | correlation_pearson <- cor(data$Revenu, data$Depenses_Publicitaires) 161 | 162 | # Afficher la corrélation de Pearson 163 | correlation_pearson 164 | 165 | # Calcul de la corrélation de Spearman 166 | correlation_spearman <- cor(data$Revenu, data$Depenses_Publicitaires, method = "spearman") 167 | 168 | # Afficher la corrélation de Spearman 169 | correlation_spearman 170 | 171 | 172 | # Calcul de la corrélation de Kendall 173 | correlation_kendall <- cor(data$Revenu, data$Depenses_Publicitaires, method = "kendall") 174 | 175 | # Afficher les corrélations 176 | correlation_kendall 177 | 178 | 179 | # Test de corrélation de Pearson 180 | cor_test_pearson <- cor.test(data$Revenu, data$Depenses_Publicitaires, method = "pearson") 181 | 182 | # P-valeur de la corrélation de Pearson 183 | p_value_pearson <- cor_test_pearson$p.value 184 | 185 | # Test de corrélation de Spearman 186 | cor_test_spearman <- cor.test(data$Revenu, data$Depenses_Publicitaires, method = "spearman") 187 | 188 | # P-valeur de la corrélation de Spearman 189 | p_value_spearman <- cor_test_spearman$p.value 190 | 191 | # Test de corrélation de Kendall 192 | cor_test_kendall <- cor.test(data$Revenu, data$Depenses_Publicitaires, method = "kendall") 193 | 194 | # P-valeur de la corrélation de Kendall 195 | p_value_kendall <- cor_test_kendall$p.value 196 | 197 | # Afficher les p-valeurs 198 | print(paste("P-valeur de la corrélation de Pearson : ", p_value_pearson)) 199 | print(paste("P-valeur de la corrélation de Spearman : ", p_value_spearman)) 200 | print(paste("P-valeur de la corrélation de Kendall : ", p_value_kendall)) 201 | 202 | 203 | # Exercice: Utiliser la base water_oxygen_data.csv pour analyser la relation entre la température de l'eau et le niveau d'oxygène 204 | 205 | 206 | 207 | ########################################################################### 208 | # Analyse de la liaison entre deux variables ordinales ----------------- 209 | # Hypothèse nulle: il y a pas de lien 210 | # Hopytèse alternative : il y a un lien entre les deux variables 211 | ########################################################################### 212 | 213 | 214 | 215 | 216 | 217 | 218 | # Charger les données depuis un fichier CSV 219 | data <- read.csv("/Users/natachanjongwayepnga/Documents/LeCoinStat/WAS17/data/recommandation_satisfaction.csv", header = TRUE, sep = ",") 220 | 221 | 222 | # Légende des modalités pour 'Niveau_de_Satisfaction' : 223 | # 1 - Très Insatisfait 224 | # 2 - Insatisfait 225 | # 3 - Neutre 226 | # 4 - Satisfait 227 | # 5 - Très Satisfait 228 | 229 | # Légende des modalités pour 'Probabilite_de_Recommandation' : 230 | # 1 - Très peu probable : Il est très peu probable que le client recommande le produit/service 231 | # 2 - Peu probable : Il est peu probable que le client recommande le produit/service 232 | # 3 - Probable : Il est probable que le client recommande le produit/service 233 | # 4 - Très probable : Il est très probable que le client recommande le produit/service 234 | 235 | 236 | # Etape 1: Description univariée des deux variables 237 | # Pour la variable 'Niveau_de_Satisfaction' 238 | niveau_satisfaction_table <- table(data$Niveau_de_Satisfaction) 239 | print(niveau_satisfaction_table) 240 | barplot(niveau_satisfaction_table, main="Distribution des niveaux de satisfaction", xlab="Niveau de Satisfaction", ylab="Fréquence") 241 | 242 | # Pour la variable 'Probabilite_de_Recommandation' 243 | probabilite_recommandation_table <- table(data$Probabilite_de_Recommandation) 244 | print(probabilite_recommandation_table) 245 | barplot(probabilite_recommandation_table, main="Distribution de la probabilité de recommandation", xlab="Probabilité de Recommandation", ylab="Fréquence") 246 | 247 | 248 | # Etape 2: Description bivariée des variables 249 | # Tableau de contingence 250 | contingency_table <- table(data$Niveau_de_Satisfaction, data$Probabilite_de_Recommandation) 251 | print(contingency_table) 252 | 253 | 254 | # Charger les bibliothèques nécessaires 255 | library(ggplot2) 256 | 257 | 258 | # Assurez-vous que les données sont du bon type 259 | data$Niveau_de_Satisfaction <- factor(data$Niveau_de_Satisfaction, ordered = TRUE) 260 | data$Probabilite_de_Recommandation <- factor(data$Probabilite_de_Recommandation, ordered = TRUE) 261 | 262 | # Créer un graphique de répartition de la probabilité de recommandation par niveau de satisfaction 263 | satisfaction_recommendation_plot <- ggplot(data, aes(x = Niveau_de_Satisfaction, fill = Probabilite_de_Recommandation)) + 264 | geom_bar(position = "fill") + 265 | labs(title = "Répartition de la probabilité de recommandation par niveau de satisfaction", 266 | x = "Niveau de Satisfaction", 267 | y = "Proportion") + 268 | theme_minimal() + 269 | scale_fill_brewer(palette = "Set1") 270 | 271 | # Afficher le graphique 272 | print(satisfaction_recommendation_plot) 273 | 274 | 275 | 276 | 277 | 278 | 279 | # Etape 3: Test de chi-deux d'indépendance, calcul du V de Cramer et corrélations 280 | # Test du Chi-deux d'indépendance 281 | chi_squared_test <- chisq.test(contingency_table) 282 | 283 | # Afficher les résultats du test 284 | print(chi_squared_test) 285 | 286 | # Calcul du coefficient de Cramer (V) 287 | #install.packages("vcd") 288 | library(vcd) 289 | assocstats(contingency_table) 290 | 291 | # Calcul du coefficient de Cramer (V) 292 | 293 | n <- sum(chi_squared_test$observed) # Nombre total d'observations 294 | phi2 <- chi_squared_test$statistic / n 295 | r <- nrow(contingency_table) 296 | k <- ncol(contingency_table) 297 | cramer_v <- sqrt(phi2 / (min(k-1, r-1))) 298 | print(cramer_v) 299 | 300 | # Corrélation de Spearman 301 | cor_spearman <- cor(as.numeric(data$Niveau_de_Satisfaction), as.numeric(data$Probabilite_de_Recommandation), method = "spearman") 302 | print(cor_spearman) 303 | 304 | # Corrélation de Kendall 305 | cor_kendall <- cor(as.numeric(data$Niveau_de_Satisfaction), as.numeric(data$Probabilite_de_Recommandation), method = "kendall") 306 | print(cor_kendall) 307 | 308 | # Etape 4: Conclusion 309 | 310 | 311 | 312 | 313 | ########################################################################### 314 | # Analyse de la liaison entre une variable qualitative et une variable quantitaive ----------------- 315 | # Hypothèse nulle: les moyennes/médianes par groupes de la variable quantitative sont égale 316 | # Hopytèse alternative : les moyennes/médianes sont différentes 317 | ########################################################################### 318 | 319 | 320 | 321 | ######################################################################################## 322 | # Cas avec deux modalités: les groupes sont de deux populations indépendantes 323 | ######################################################################################## 324 | 325 | 326 | 327 | 328 | # Importation des données 329 | 330 | data <- read.csv("/Users/natachanjongwayepnga/Documents/LeCoinStat/WAS17/data/donnees_marketing.csv", header = TRUE, sep = ",") 331 | 332 | 333 | # Question: Est-ce que le montant d'achat est le même chez les clients du groupe 1 ou les clients du groupe 2? 334 | 335 | #Étape 1 : Description Univariée des Variables 336 | library(ggplot2) # Librairie pour faire des graphiques 337 | 338 | # Pour la variable 'data' 339 | group_marketing_table <- table(data$Groupe) 340 | 341 | # Répartition par groupe de marketing 342 | print(group_marketing_table) 343 | barplot(group_marketing_table, main="Distribution des groupes de marketing", xlab="Groupe de Marketing", ylab="Fréquence") 344 | 345 | # Pour la variable 'Montant_Achat' 346 | ggplot(data, aes(x = Montant_Achat)) + 347 | geom_histogram(binwidth = 5, fill = "blue", color = "black") + 348 | labs(title = "Distribution des Montants d'Achat", x = "Montant d'Achat", y = "Fréquence") + 349 | theme_minimal() 350 | 351 | #Étape 2 : Description Bivariée et Formulation d'une Hypothèse 352 | # Créer un boxplot bivarié pour 'Montant_Achat' par 'Groupe_Marketing' 353 | ggplot(data, aes(x = Groupe, y = Montant_Achat, fill = Groupe)) + 354 | geom_boxplot() + 355 | labs(title = "Montant d'Achat par Groupe de Marketing", x = "Groupe de Marketing", y = "Montant d'Achat") + 356 | theme_minimal() 357 | 358 | # Étape 3 : Tests Statistiques 359 | 360 | # Test paramétrique (Test de Student et Test de Welch) 361 | #Hypothèse: le montant d'achat moyen est le même dans les deux groupes 362 | 363 | # Test de Student 364 | t_test <- t.test(Montant_Achat ~ Groupe, data = data, var.equal = TRUE) 365 | print(t_test) 366 | 367 | 368 | 369 | # Vérification des hypothèses: égalité de la variance avec le test de levene 370 | 371 | # install.packages("car") 372 | library(car) 373 | 374 | # Test de Levene 375 | levene_test <- leveneTest(Montant_Achat ~ Groupe, data = data) 376 | print(levene_test) 377 | 378 | 379 | # Test de Welch (Si les variances sont inégales) 380 | welch_test <- t.test(Montant_Achat ~ Groupe, data = data) 381 | print(welch_test) 382 | 383 | 384 | # Vérifier la normalité 385 | # Test de Shapiro-Wilk pour la variable 'Montant_Achat' 386 | shapiro_test_total <- shapiro.test(data$Montant_Achat) 387 | print(shapiro_test_total) 388 | 389 | 390 | # Test non paramétrique (Test de wilcoxon et kolmogorov smirnov): si la normalité n'est pas vérifié 391 | 392 | 393 | # Séparation des données par groupe de marketing 394 | montant_achat_A <- data$Montant_Achat[data$Groupe == 'A'] 395 | montant_achat_B <- data$Montant_Achat[data$Groupe== 'B'] 396 | 397 | # Test de Wilcoxon pour deux échantillons indépendants 398 | # Hypothèse: la médiane est la même dans les deux groupes 399 | wilcoxon_test <- wilcox.test(montant_achat_A, montant_achat_B) 400 | print(wilcoxon_test) 401 | 402 | # Test de Kolmogorov-Smirnov pour comparer les distributions des deux groupes 403 | ks_test <- ks.test(montant_achat_A, montant_achat_B) 404 | print(ks_test) 405 | 406 | 407 | 408 | ######################################################################################## 409 | # Cas avec plus de deux modalités: les groupes sont de deux population indépendantes 410 | ######################################################################################## 411 | 412 | # Chargement des bibliothèques nécessaires 413 | library(tidyverse) 414 | library(car) 415 | 416 | # Importation des données 417 | data <- read.csv("/Users/natachanjongwayepnga/Documents/LeCoinStat/WAS17/data/donnees_marketing_3_groupes.csv", header = TRUE, sep = ",") 418 | 419 | # Étape 1 : Description Univariée des Variables 420 | # Distribution des groupes de marketing 421 | group_marketing_table <- table(data$Groupe_Marketing) 422 | barplot(group_marketing_table, main="Répartition des groupes de marketing", xlab="Groupe de Marketing", ylab="Fréquence") 423 | 424 | # Distribution des Montants d'Achat 425 | ggplot(data, aes(x = Montant_Achat)) + 426 | geom_histogram(binwidth = 5, fill = "blue", color = "black") + 427 | labs(title = "Distribution des Montants d'Achat", x = "Montant d'Achat", y = "Fréquence") + 428 | theme_minimal() 429 | 430 | # Étape 2 : Description Bivariée et Formulation d'une Hypothèse 431 | # Boxplot Montant d'Achat par Groupe de Marketing 432 | ggplot(data, aes(x = Groupe_Marketing, y = Montant_Achat, fill = Groupe_Marketing)) + 433 | geom_boxplot() + 434 | labs(title = "Montant d'Achat par Groupe de Marketing", x = "Groupe de Marketing", y = "Montant d'Achat") + 435 | theme_minimal() 436 | 437 | # Étape 3 : Tests Statistiques 438 | # Vérification de la normalité 439 | shapiro_test_total <- shapiro.test(data$Montant_Achat) 440 | shapiro_test_total 441 | # Test d'égalité des variances (Levene) 442 | levene_test <- leveneTest(Montant_Achat ~ Groupe_Marketing, data = data) 443 | levene_test 444 | # Tests paramétriques et non-paramétriques 445 | # Test ANOVA (si les variances sont égales et les données normalement distribuées) 446 | anova_test <- aov(Montant_Achat ~ Groupe_Marketing, data = data) 447 | summary(anova_test) 448 | 449 | 450 | # Test de Kruskal-Wallis (si les hypothèses de l'ANOVA ne sont pas respectées) 451 | kruskal_test <- kruskal.test(Montant_Achat ~ Groupe_Marketing, data = data) 452 | kruskal_test 453 | 454 | 455 | 456 | #Etape 4: Interprétation 457 | 458 | 459 | 460 | -------------------------------------------------------------------------------- /WAS17/WAS17_La_Découverte_Des_Tests_Statistiques.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS17/WAS17_La_Découverte_Des_Tests_Statistiques.pptx -------------------------------------------------------------------------------- /WAS17/data/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS17/data/.DS_Store -------------------------------------------------------------------------------- /WAS17/data/base_de_donnees.csv: -------------------------------------------------------------------------------- 1 | "Identifiant","Niveau_de_Satisfaction","Probabilite_de_Recommandation" 2 | 1,"Très Insatisfait",1 3 | 2,"Très Insatisfait",4 4 | 3,"Très Insatisfait",1 5 | 4,"Insatisfait",2 6 | 5,"Insatisfait",1 7 | 6,"Neutre",3 8 | 7,"Insatisfait",3 9 | 8,"Très Insatisfait",2 10 | 9,"Très Insatisfait",3 11 | 10,"Très Insatisfait",3 12 | 11,"Très Satisfait",1 13 | 12,"Très Insatisfait",2 14 | 13,"Insatisfait",2 15 | 14,"Neutre",4 16 | 15,"Satisfait",4 17 | 16,"Très Insatisfait",1 18 | 17,"Neutre",2 19 | 18,"Très Insatisfait",2 20 | 19,"Insatisfait",3 21 | 20,"Très Insatisfait",1 22 | 21,"Satisfait",3 23 | 22,"Insatisfait",3 24 | 23,"Satisfait",4 25 | 24,"Très Insatisfait",1 26 | 25,"Très Insatisfait",3 27 | 26,"Très Insatisfait",3 28 | 27,"Neutre",2 29 | 28,"Insatisfait",4 30 | 29,"Insatisfait",1 31 | 30,"Neutre",1 32 | 31,"Insatisfait",3 33 | 32,"Insatisfait",2 34 | 33,"Insatisfait",1 35 | 34,"Très Insatisfait",1 36 | 35,"Très Insatisfait",3 37 | 36,"Neutre",3 38 | 37,"Neutre",3 39 | 38,"Satisfait",4 40 | 39,"Satisfait",4 41 | 40,"Neutre",2 42 | 41,"Insatisfait",2 43 | 42,"Très Insatisfait",1 44 | 43,"Insatisfait",1 45 | 44,"Neutre",4 46 | 45,"Satisfait",4 47 | 46,"Satisfait",2 48 | 47,"Très Satisfait",4 49 | 48,"Très Insatisfait",2 50 | 49,"Très Insatisfait",2 51 | 50,"Insatisfait",3 52 | 51,"Insatisfait",2 53 | 52,"Très Insatisfait",1 54 | 53,"Satisfait",1 55 | 54,"Très Insatisfait",1 56 | 55,"Satisfait",4 57 | 56,"Très Insatisfait",3 58 | 57,"Neutre",3 59 | 58,"Neutre",2 60 | 59,"Neutre",2 61 | 60,"Neutre",1 62 | 61,"Très Insatisfait",4 63 | 62,"Très Satisfait",4 64 | 63,"Neutre",3 65 | 64,"Très Satisfait",4 66 | 65,"Très Insatisfait",2 67 | 66,"Très Insatisfait",3 68 | 67,"Insatisfait",1 69 | 68,"Très Insatisfait",4 70 | 69,"Très Satisfait",3 71 | 70,"Satisfait",3 72 | 71,"Très Insatisfait",3 73 | 72,"Satisfait",2 74 | 73,"Neutre",3 75 | 74,"Insatisfait",1 76 | 75,"Neutre",3 77 | 76,"Neutre",2 78 | 77,"Insatisfait",2 79 | 78,"Insatisfait",2 80 | 79,"Satisfait",2 81 | 80,"Très Insatisfait",2 82 | 81,"Très Insatisfait",3 83 | 82,"Neutre",4 84 | 83,"Neutre",3 85 | 84,"Très Insatisfait",1 86 | 85,"Insatisfait",2 87 | 86,"Neutre",4 88 | 87,"Insatisfait",4 89 | 88,"Satisfait",4 90 | 89,"Neutre",3 91 | 90,"Insatisfait",1 92 | 91,"Très Insatisfait",4 93 | 92,"Insatisfait",3 94 | 93,"Très Insatisfait",2 95 | 94,"Très Insatisfait",1 96 | 95,"Insatisfait",3 97 | 96,"Neutre",3 98 | 97,"Satisfait",4 99 | 98,"Insatisfait",1 100 | 99,"Insatisfait",2 101 | 100,"Très Insatisfait",1 102 | 101,"Neutre",3 103 | 102,"Insatisfait",4 104 | 103,"Insatisfait",1 105 | 104,"Satisfait",2 106 | 105,"Neutre",4 107 | 106,"Neutre",3 108 | 107,"Très Insatisfait",3 109 | 108,"Très Insatisfait",1 110 | 109,"Très Satisfait",2 111 | 110,"Très Satisfait",4 112 | 111,"Neutre",4 113 | 112,"Très Insatisfait",1 114 | 113,"Très Insatisfait",2 115 | 114,"Insatisfait",2 116 | 115,"Insatisfait",1 117 | 116,"Très Insatisfait",4 118 | 117,"Neutre",4 119 | 118,"Très Insatisfait",4 120 | 119,"Neutre",2 121 | 120,"Très Satisfait",3 122 | 121,"Satisfait",4 123 | 122,"Neutre",4 124 | 123,"Très Insatisfait",3 125 | 124,"Très Insatisfait",4 126 | 125,"Très Satisfait",3 127 | 126,"Très Insatisfait",3 128 | 127,"Très Satisfait",2 129 | 128,"Insatisfait",2 130 | 129,"Insatisfait",1 131 | 130,"Satisfait",1 132 | 131,"Très Insatisfait",1 133 | 132,"Insatisfait",2 134 | 133,"Très Insatisfait",3 135 | 134,"Très Insatisfait",1 136 | 135,"Neutre",3 137 | 136,"Insatisfait",1 138 | 137,"Insatisfait",2 139 | 138,"Très Satisfait",4 140 | 139,"Satisfait",3 141 | 140,"Insatisfait",2 142 | 141,"Neutre",1 143 | 142,"Très Insatisfait",1 144 | 143,"Insatisfait",1 145 | 144,"Très Insatisfait",1 146 | 145,"Très Insatisfait",1 147 | 146,"Très Insatisfait",1 148 | 147,"Très Insatisfait",1 149 | 148,"Insatisfait",4 150 | 149,"Neutre",4 151 | 150,"Neutre",3 152 | 151,"Insatisfait",3 153 | 152,"Satisfait",2 154 | 153,"Neutre",3 155 | 154,"Très Insatisfait",1 156 | 155,"Insatisfait",2 157 | 156,"Insatisfait",1 158 | 157,"Insatisfait",2 159 | 158,"Très Satisfait",4 160 | 159,"Très Insatisfait",1 161 | 160,"Insatisfait",2 162 | 161,"Satisfait",4 163 | 162,"Très Insatisfait",1 164 | 163,"Neutre",2 165 | 164,"Neutre",4 166 | 165,"Insatisfait",1 167 | 166,"Satisfait",2 168 | 167,"Très Insatisfait",2 169 | 168,"Satisfait",3 170 | 169,"Neutre",4 171 | 170,"Insatisfait",1 172 | 171,"Très Insatisfait",2 173 | 172,"Insatisfait",1 174 | 173,"Très Insatisfait",1 175 | 174,"Insatisfait",3 176 | 175,"Très Satisfait",4 177 | 176,"Très Insatisfait",1 178 | 177,"Insatisfait",4 179 | 178,"Très Satisfait",4 180 | 179,"Très Insatisfait",3 181 | 180,"Neutre",2 182 | 181,"Satisfait",4 183 | 182,"Neutre",2 184 | 183,"Très Insatisfait",2 185 | 184,"Insatisfait",1 186 | 185,"Neutre",4 187 | 186,"Très Insatisfait",2 188 | 187,"Très Satisfait",4 189 | 188,"Neutre",4 190 | 189,"Très Insatisfait",2 191 | 190,"Neutre",2 192 | 191,"Neutre",3 193 | 192,"Très Insatisfait",2 194 | 193,"Neutre",4 195 | 194,"Satisfait",1 196 | 195,"Très Satisfait",1 197 | 196,"Neutre",2 198 | 197,"Neutre",4 199 | 198,"Insatisfait",2 200 | 199,"Insatisfait",3 201 | 200,"Très Insatisfait",1 202 | 201,"Très Satisfait",4 203 | 202,"Neutre",3 204 | 203,"Neutre",2 205 | 204,"Très Insatisfait",1 206 | 205,"Très Insatisfait",1 207 | 206,"Insatisfait",2 208 | 207,"Très Insatisfait",1 209 | 208,"Neutre",3 210 | 209,"Insatisfait",1 211 | 210,"Très Insatisfait",2 212 | 211,"Insatisfait",2 213 | 212,"Neutre",4 214 | 213,"Très Insatisfait",4 215 | 214,"Très Insatisfait",2 216 | 215,"Insatisfait",3 217 | 216,"Très Insatisfait",1 218 | 217,"Très Insatisfait",4 219 | 218,"Neutre",4 220 | 219,"Insatisfait",3 221 | 220,"Insatisfait",1 222 | 221,"Très Insatisfait",3 223 | 222,"Neutre",4 224 | 223,"Très Satisfait",2 225 | 224,"Très Insatisfait",2 226 | 225,"Satisfait",3 227 | 226,"Très Insatisfait",3 228 | 227,"Très Insatisfait",1 229 | 228,"Insatisfait",2 230 | 229,"Très Satisfait",4 231 | 230,"Très Insatisfait",2 232 | 231,"Neutre",4 233 | 232,"Très Satisfait",4 234 | 233,"Insatisfait",2 235 | 234,"Neutre",3 236 | 235,"Insatisfait",3 237 | 236,"Insatisfait",2 238 | 237,"Satisfait",2 239 | 238,"Très Insatisfait",2 240 | 239,"Très Insatisfait",2 241 | 240,"Satisfait",3 242 | 241,"Très Insatisfait",1 243 | 242,"Neutre",3 244 | 243,"Très Insatisfait",4 245 | 244,"Satisfait",1 246 | 245,"Satisfait",2 247 | 246,"Très Satisfait",2 248 | 247,"Insatisfait",4 249 | 248,"Neutre",3 250 | 249,"Très Insatisfait",1 251 | 250,"Très Insatisfait",3 252 | 251,"Satisfait",3 253 | 252,"Satisfait",4 254 | 253,"Insatisfait",2 255 | 254,"Neutre",3 256 | 255,"Insatisfait",4 257 | 256,"Très Insatisfait",1 258 | 257,"Neutre",4 259 | 258,"Insatisfait",3 260 | 259,"Très Insatisfait",3 261 | 260,"Satisfait",3 262 | 261,"Neutre",4 263 | 262,"Très Satisfait",4 264 | 263,"Insatisfait",1 265 | 264,"Très Insatisfait",2 266 | 265,"Neutre",4 267 | 266,"Très Insatisfait",4 268 | 267,"Très Insatisfait",3 269 | 268,"Très Satisfait",4 270 | 269,"Très Insatisfait",2 271 | 270,"Très Insatisfait",1 272 | 271,"Très Insatisfait",1 273 | 272,"Insatisfait",1 274 | 273,"Très Insatisfait",4 275 | 274,"Très Insatisfait",1 276 | 275,"Satisfait",2 277 | 276,"Satisfait",2 278 | 277,"Satisfait",4 279 | 278,"Insatisfait",1 280 | 279,"Insatisfait",2 281 | 280,"Très Insatisfait",2 282 | 281,"Insatisfait",1 283 | 282,"Très Satisfait",4 284 | 283,"Insatisfait",1 285 | 284,"Insatisfait",2 286 | 285,"Insatisfait",4 287 | 286,"Très Insatisfait",2 288 | 287,"Insatisfait",4 289 | 288,"Très Insatisfait",1 290 | 289,"Neutre",2 291 | 290,"Insatisfait",1 292 | 291,"Très Insatisfait",1 293 | 292,"Satisfait",4 294 | 293,"Très Insatisfait",1 295 | 294,"Insatisfait",1 296 | 295,"Très Satisfait",4 297 | 296,"Très Insatisfait",1 298 | 297,"Très Insatisfait",3 299 | 298,"Très Satisfait",4 300 | 299,"Neutre",4 301 | 300,"Très Satisfait",1 302 | 301,"Insatisfait",1 303 | 302,"Très Satisfait",4 304 | 303,"Très Insatisfait",2 305 | 304,"Neutre",3 306 | 305,"Neutre",1 307 | 306,"Très Insatisfait",2 308 | 307,"Insatisfait",3 309 | 308,"Neutre",3 310 | 309,"Satisfait",4 311 | 310,"Insatisfait",2 312 | 311,"Insatisfait",1 313 | 312,"Très Insatisfait",3 314 | 313,"Insatisfait",1 315 | 314,"Neutre",2 316 | 315,"Neutre",3 317 | 316,"Très Satisfait",4 318 | 317,"Très Insatisfait",3 319 | 318,"Neutre",4 320 | 319,"Très Insatisfait",1 321 | 320,"Insatisfait",2 322 | 321,"Neutre",2 323 | 322,"Insatisfait",2 324 | 323,"Insatisfait",2 325 | 324,"Neutre",4 326 | 325,"Insatisfait",3 327 | 326,"Très Insatisfait",2 328 | 327,"Insatisfait",1 329 | 328,"Très Insatisfait",3 330 | 329,"Très Insatisfait",1 331 | 330,"Insatisfait",2 332 | 331,"Très Insatisfait",1 333 | 332,"Très Insatisfait",1 334 | 333,"Neutre",2 335 | 334,"Neutre",3 336 | 335,"Neutre",2 337 | 336,"Très Insatisfait",1 338 | 337,"Très Insatisfait",2 339 | 338,"Satisfait",3 340 | 339,"Satisfait",1 341 | 340,"Satisfait",3 342 | 341,"Neutre",4 343 | 342,"Très Insatisfait",4 344 | 343,"Satisfait",2 345 | 344,"Satisfait",3 346 | 345,"Très Insatisfait",2 347 | 346,"Très Insatisfait",3 348 | 347,"Insatisfait",1 349 | 348,"Insatisfait",3 350 | 349,"Insatisfait",3 351 | 350,"Insatisfait",2 352 | 351,"Neutre",1 353 | 352,"Très Satisfait",4 354 | 353,"Très Insatisfait",3 355 | 354,"Neutre",3 356 | 355,"Insatisfait",1 357 | 356,"Très Insatisfait",2 358 | 357,"Très Insatisfait",1 359 | 358,"Très Insatisfait",2 360 | 359,"Très Insatisfait",4 361 | 360,"Insatisfait",2 362 | 361,"Insatisfait",2 363 | 362,"Neutre",3 364 | 363,"Très Insatisfait",3 365 | 364,"Très Satisfait",2 366 | 365,"Insatisfait",1 367 | 366,"Très Insatisfait",2 368 | 367,"Insatisfait",3 369 | 368,"Neutre",3 370 | 369,"Neutre",4 371 | 370,"Insatisfait",2 372 | 371,"Très Satisfait",2 373 | 372,"Insatisfait",2 374 | 373,"Très Insatisfait",1 375 | 374,"Insatisfait",4 376 | 375,"Insatisfait",1 377 | 376,"Très Insatisfait",4 378 | 377,"Satisfait",4 379 | 378,"Insatisfait",3 380 | 379,"Très Insatisfait",2 381 | 380,"Satisfait",3 382 | 381,"Insatisfait",3 383 | 382,"Très Insatisfait",1 384 | 383,"Satisfait",4 385 | 384,"Insatisfait",1 386 | 385,"Satisfait",4 387 | 386,"Très Insatisfait",1 388 | 387,"Insatisfait",4 389 | 388,"Neutre",4 390 | 389,"Très Insatisfait",1 391 | 390,"Neutre",3 392 | 391,"Insatisfait",2 393 | 392,"Très Insatisfait",1 394 | 393,"Très Insatisfait",1 395 | 394,"Insatisfait",2 396 | 395,"Satisfait",4 397 | 396,"Satisfait",1 398 | 397,"Très Insatisfait",2 399 | 398,"Insatisfait",2 400 | 399,"Neutre",3 401 | 400,"Satisfait",3 402 | 401,"Neutre",3 403 | 402,"Neutre",4 404 | 403,"Très Insatisfait",1 405 | 404,"Satisfait",4 406 | 405,"Très Satisfait",4 407 | 406,"Insatisfait",1 408 | 407,"Très Insatisfait",4 409 | 408,"Neutre",3 410 | 409,"Neutre",1 411 | 410,"Insatisfait",1 412 | 411,"Très Satisfait",4 413 | 412,"Neutre",3 414 | 413,"Très Insatisfait",2 415 | 414,"Très Insatisfait",3 416 | 415,"Très Satisfait",1 417 | 416,"Très Insatisfait",2 418 | 417,"Insatisfait",3 419 | 418,"Insatisfait",1 420 | 419,"Neutre",2 421 | 420,"Insatisfait",1 422 | 421,"Insatisfait",1 423 | 422,"Très Satisfait",3 424 | 423,"Insatisfait",4 425 | 424,"Insatisfait",2 426 | 425,"Neutre",4 427 | 426,"Insatisfait",1 428 | 427,"Très Insatisfait",3 429 | 428,"Très Satisfait",3 430 | 429,"Insatisfait",2 431 | 430,"Neutre",2 432 | 431,"Neutre",4 433 | 432,"Insatisfait",1 434 | 433,"Très Insatisfait",1 435 | 434,"Neutre",3 436 | 435,"Très Insatisfait",1 437 | 436,"Insatisfait",1 438 | 437,"Très Insatisfait",4 439 | 438,"Neutre",1 440 | 439,"Très Insatisfait",2 441 | 440,"Neutre",4 442 | 441,"Neutre",3 443 | 442,"Très Insatisfait",3 444 | 443,"Très Insatisfait",2 445 | 444,"Très Insatisfait",2 446 | 445,"Très Insatisfait",1 447 | 446,"Très Satisfait",4 448 | 447,"Très Insatisfait",1 449 | 448,"Très Insatisfait",1 450 | 449,"Insatisfait",2 451 | 450,"Insatisfait",1 452 | 451,"Très Satisfait",4 453 | 452,"Insatisfait",1 454 | 453,"Très Insatisfait",1 455 | 454,"Neutre",4 456 | 455,"Très Satisfait",4 457 | 456,"Satisfait",4 458 | 457,"Neutre",4 459 | 458,"Très Insatisfait",2 460 | 459,"Neutre",3 461 | 460,"Insatisfait",1 462 | 461,"Très Insatisfait",4 463 | 462,"Neutre",3 464 | 463,"Satisfait",4 465 | 464,"Très Insatisfait",1 466 | 465,"Insatisfait",2 467 | 466,"Insatisfait",4 468 | 467,"Très Insatisfait",3 469 | 468,"Très Insatisfait",2 470 | 469,"Insatisfait",1 471 | 470,"Très Insatisfait",1 472 | 471,"Très Insatisfait",2 473 | 472,"Très Insatisfait",1 474 | 473,"Insatisfait",3 475 | 474,"Insatisfait",3 476 | 475,"Insatisfait",1 477 | 476,"Insatisfait",2 478 | 477,"Neutre",3 479 | 478,"Très Insatisfait",1 480 | 479,"Très Satisfait",3 481 | 480,"Insatisfait",4 482 | 481,"Très Insatisfait",2 483 | 482,"Insatisfait",2 484 | 483,"Neutre",4 485 | 484,"Très Insatisfait",2 486 | 485,"Satisfait",3 487 | 486,"Très Insatisfait",1 488 | 487,"Très Insatisfait",4 489 | 488,"Neutre",2 490 | 489,"Très Insatisfait",3 491 | 490,"Neutre",2 492 | 491,"Neutre",4 493 | 492,"Très Insatisfait",1 494 | 493,"Insatisfait",1 495 | 494,"Satisfait",2 496 | 495,"Neutre",4 497 | 496,"Très Satisfait",2 498 | 497,"Satisfait",1 499 | 498,"Très Insatisfait",2 500 | 499,"Neutre",3 501 | 500,"Très Insatisfait",1 502 | 501,"Très Satisfait",4 503 | 502,"Neutre",3 504 | 503,"Neutre",2 505 | 504,"Insatisfait",1 506 | 505,"Neutre",3 507 | 506,"Insatisfait",2 508 | 507,"Neutre",4 509 | 508,"Neutre",4 510 | 509,"Satisfait",3 511 | 510,"Insatisfait",3 512 | 511,"Très Insatisfait",4 513 | 512,"Très Insatisfait",1 514 | 513,"Très Insatisfait",2 515 | 514,"Très Insatisfait",1 516 | 515,"Neutre",3 517 | 516,"Neutre",4 518 | 517,"Insatisfait",1 519 | 518,"Neutre",4 520 | 519,"Insatisfait",3 521 | 520,"Insatisfait",1 522 | 521,"Neutre",4 523 | 522,"Neutre",3 524 | 523,"Neutre",4 525 | 524,"Très Insatisfait",2 526 | 525,"Insatisfait",2 527 | 526,"Satisfait",3 528 | 527,"Insatisfait",2 529 | 528,"Très Insatisfait",3 530 | 529,"Insatisfait",4 531 | 530,"Satisfait",2 532 | 531,"Très Satisfait",4 533 | 532,"Insatisfait",3 534 | 533,"Neutre",3 535 | 534,"Insatisfait",2 536 | 535,"Satisfait",2 537 | 536,"Très Insatisfait",2 538 | 537,"Insatisfait",3 539 | 538,"Neutre",4 540 | 539,"Très Satisfait",3 541 | 540,"Satisfait",4 542 | 541,"Très Satisfait",4 543 | 542,"Très Insatisfait",4 544 | 543,"Neutre",3 545 | 544,"Neutre",3 546 | 545,"Neutre",1 547 | 546,"Satisfait",1 548 | 547,"Insatisfait",2 549 | 548,"Satisfait",2 550 | 549,"Insatisfait",1 551 | 550,"Très Insatisfait",3 552 | 551,"Insatisfait",4 553 | 552,"Très Insatisfait",2 554 | 553,"Insatisfait",3 555 | 554,"Insatisfait",3 556 | 555,"Très Satisfait",3 557 | 556,"Insatisfait",3 558 | 557,"Insatisfait",2 559 | 558,"Très Insatisfait",1 560 | 559,"Insatisfait",2 561 | 560,"Très Insatisfait",2 562 | 561,"Insatisfait",2 563 | 562,"Très Satisfait",3 564 | 563,"Insatisfait",1 565 | 564,"Insatisfait",2 566 | 565,"Insatisfait",2 567 | 566,"Très Satisfait",1 568 | 567,"Très Insatisfait",1 569 | 568,"Insatisfait",4 570 | 569,"Très Insatisfait",2 571 | 570,"Très Satisfait",2 572 | 571,"Insatisfait",3 573 | 572,"Insatisfait",2 574 | 573,"Insatisfait",2 575 | 574,"Insatisfait",4 576 | 575,"Très Insatisfait",3 577 | 576,"Très Insatisfait",3 578 | 577,"Très Insatisfait",1 579 | 578,"Très Insatisfait",1 580 | 579,"Insatisfait",2 581 | 580,"Neutre",4 582 | 581,"Neutre",2 583 | 582,"Très Insatisfait",2 584 | 583,"Satisfait",4 585 | 584,"Très Insatisfait",3 586 | 585,"Insatisfait",4 587 | 586,"Insatisfait",1 588 | 587,"Satisfait",4 589 | 588,"Très Satisfait",2 590 | 589,"Insatisfait",2 591 | 590,"Insatisfait",1 592 | 591,"Insatisfait",2 593 | 592,"Neutre",3 594 | 593,"Neutre",3 595 | 594,"Très Insatisfait",1 596 | 595,"Très Insatisfait",2 597 | 596,"Très Satisfait",1 598 | 597,"Insatisfait",2 599 | 598,"Neutre",1 600 | 599,"Très Satisfait",4 601 | 600,"Très Insatisfait",2 602 | 601,"Très Insatisfait",1 603 | 602,"Neutre",3 604 | 603,"Insatisfait",1 605 | 604,"Très Satisfait",3 606 | 605,"Très Insatisfait",2 607 | 606,"Très Insatisfait",3 608 | 607,"Neutre",2 609 | 608,"Très Insatisfait",2 610 | 609,"Neutre",1 611 | 610,"Insatisfait",1 612 | 611,"Neutre",3 613 | 612,"Insatisfait",2 614 | 613,"Très Insatisfait",2 615 | 614,"Insatisfait",1 616 | 615,"Insatisfait",2 617 | 616,"Neutre",4 618 | 617,"Très Insatisfait",2 619 | 618,"Insatisfait",2 620 | 619,"Insatisfait",1 621 | 620,"Satisfait",2 622 | 621,"Satisfait",3 623 | 622,"Très Insatisfait",2 624 | 623,"Insatisfait",1 625 | 624,"Neutre",4 626 | 625,"Neutre",3 627 | 626,"Insatisfait",4 628 | 627,"Très Insatisfait",1 629 | 628,"Très Insatisfait",1 630 | 629,"Insatisfait",1 631 | 630,"Très Insatisfait",2 632 | 631,"Neutre",3 633 | 632,"Neutre",4 634 | 633,"Très Insatisfait",1 635 | 634,"Insatisfait",2 636 | 635,"Très Insatisfait",3 637 | 636,"Très Insatisfait",2 638 | 637,"Très Satisfait",3 639 | 638,"Neutre",3 640 | 639,"Neutre",3 641 | 640,"Insatisfait",2 642 | 641,"Très Insatisfait",1 643 | 642,"Satisfait",4 644 | 643,"Très Insatisfait",4 645 | 644,"Très Insatisfait",2 646 | 645,"Satisfait",3 647 | 646,"Neutre",1 648 | 647,"Satisfait",4 649 | 648,"Très Insatisfait",1 650 | 649,"Insatisfait",2 651 | 650,"Très Insatisfait",3 652 | 651,"Très Satisfait",2 653 | 652,"Très Satisfait",4 654 | 653,"Très Satisfait",4 655 | 654,"Très Insatisfait",3 656 | 655,"Très Insatisfait",4 657 | 656,"Neutre",3 658 | 657,"Insatisfait",2 659 | 658,"Neutre",3 660 | 659,"Très Insatisfait",3 661 | 660,"Neutre",3 662 | 661,"Très Insatisfait",2 663 | 662,"Très Insatisfait",3 664 | 663,"Neutre",4 665 | 664,"Très Insatisfait",4 666 | 665,"Insatisfait",1 667 | 666,"Neutre",4 668 | 667,"Insatisfait",1 669 | 668,"Insatisfait",1 670 | 669,"Insatisfait",2 671 | 670,"Très Insatisfait",3 672 | 671,"Très Insatisfait",3 673 | 672,"Très Insatisfait",2 674 | 673,"Neutre",4 675 | 674,"Très Insatisfait",4 676 | 675,"Très Insatisfait",4 677 | 676,"Très Insatisfait",2 678 | 677,"Insatisfait",4 679 | 678,"Très Satisfait",3 680 | 679,"Insatisfait",1 681 | 680,"Insatisfait",1 682 | 681,"Insatisfait",2 683 | 682,"Insatisfait",4 684 | 683,"Satisfait",4 685 | 684,"Satisfait",2 686 | 685,"Très Insatisfait",2 687 | 686,"Neutre",4 688 | 687,"Très Insatisfait",3 689 | 688,"Satisfait",1 690 | 689,"Très Insatisfait",3 691 | 690,"Satisfait",4 692 | 691,"Très Insatisfait",1 693 | 692,"Insatisfait",1 694 | 693,"Très Insatisfait",1 695 | 694,"Insatisfait",1 696 | 695,"Neutre",4 697 | 696,"Satisfait",4 698 | 697,"Très Insatisfait",2 699 | 698,"Très Satisfait",2 700 | 699,"Neutre",4 701 | 700,"Satisfait",4 702 | 701,"Insatisfait",1 703 | 702,"Neutre",4 704 | 703,"Très Insatisfait",4 705 | 704,"Neutre",4 706 | 705,"Très Insatisfait",4 707 | 706,"Satisfait",2 708 | 707,"Très Satisfait",4 709 | 708,"Très Satisfait",4 710 | 709,"Très Satisfait",2 711 | 710,"Insatisfait",2 712 | 711,"Satisfait",3 713 | 712,"Insatisfait",1 714 | 713,"Insatisfait",4 715 | 714,"Insatisfait",2 716 | 715,"Très Insatisfait",3 717 | 716,"Satisfait",4 718 | 717,"Très Insatisfait",2 719 | 718,"Très Insatisfait",4 720 | 719,"Neutre",4 721 | 720,"Insatisfait",2 722 | 721,"Satisfait",2 723 | 722,"Très Insatisfait",1 724 | 723,"Insatisfait",1 725 | 724,"Satisfait",1 726 | 725,"Très Satisfait",4 727 | 726,"Satisfait",3 728 | 727,"Neutre",3 729 | 728,"Très Insatisfait",1 730 | 729,"Très Insatisfait",2 731 | 730,"Très Insatisfait",1 732 | 731,"Insatisfait",3 733 | 732,"Neutre",3 734 | 733,"Satisfait",4 735 | 734,"Insatisfait",1 736 | 735,"Très Satisfait",4 737 | 736,"Insatisfait",4 738 | 737,"Neutre",1 739 | 738,"Neutre",4 740 | 739,"Neutre",1 741 | 740,"Très Satisfait",4 742 | 741,"Insatisfait",3 743 | 742,"Très Insatisfait",1 744 | 743,"Très Insatisfait",4 745 | 744,"Très Insatisfait",1 746 | 745,"Satisfait",3 747 | 746,"Neutre",2 748 | 747,"Très Insatisfait",1 749 | 748,"Très Insatisfait",1 750 | 749,"Très Insatisfait",3 751 | 750,"Insatisfait",1 752 | 751,"Neutre",2 753 | 752,"Très Insatisfait",2 754 | 753,"Très Insatisfait",4 755 | 754,"Insatisfait",1 756 | 755,"Très Insatisfait",1 757 | 756,"Insatisfait",2 758 | 757,"Très Insatisfait",2 759 | 758,"Satisfait",4 760 | 759,"Neutre",2 761 | 760,"Insatisfait",1 762 | 761,"Neutre",3 763 | 762,"Très Insatisfait",4 764 | 763,"Neutre",4 765 | 764,"Insatisfait",4 766 | 765,"Neutre",2 767 | 766,"Insatisfait",3 768 | 767,"Neutre",4 769 | 768,"Très Insatisfait",4 770 | 769,"Neutre",3 771 | 770,"Insatisfait",1 772 | 771,"Très Insatisfait",3 773 | 772,"Insatisfait",4 774 | 773,"Insatisfait",4 775 | 774,"Insatisfait",1 776 | 775,"Insatisfait",1 777 | 776,"Très Satisfait",2 778 | 777,"Neutre",2 779 | 778,"Très Insatisfait",1 780 | 779,"Très Insatisfait",1 781 | 780,"Insatisfait",3 782 | 781,"Insatisfait",1 783 | 782,"Neutre",4 784 | 783,"Très Insatisfait",4 785 | 784,"Satisfait",4 786 | 785,"Très Satisfait",2 787 | 786,"Insatisfait",1 788 | 787,"Très Satisfait",3 789 | 788,"Très Insatisfait",1 790 | 789,"Neutre",2 791 | 790,"Satisfait",3 792 | 791,"Très Insatisfait",1 793 | 792,"Insatisfait",2 794 | 793,"Neutre",3 795 | 794,"Insatisfait",4 796 | 795,"Très Satisfait",3 797 | 796,"Insatisfait",4 798 | 797,"Insatisfait",1 799 | 798,"Neutre",2 800 | 799,"Très Insatisfait",3 801 | 800,"Très Satisfait",4 802 | 801,"Très Insatisfait",4 803 | 802,"Insatisfait",2 804 | 803,"Très Insatisfait",1 805 | 804,"Très Insatisfait",2 806 | 805,"Neutre",3 807 | 806,"Neutre",2 808 | 807,"Insatisfait",4 809 | 808,"Satisfait",3 810 | 809,"Insatisfait",1 811 | 810,"Satisfait",4 812 | 811,"Satisfait",4 813 | 812,"Insatisfait",3 814 | 813,"Neutre",3 815 | 814,"Très Satisfait",4 816 | 815,"Satisfait",4 817 | 816,"Très Insatisfait",2 818 | 817,"Très Insatisfait",1 819 | 818,"Satisfait",4 820 | 819,"Insatisfait",4 821 | 820,"Neutre",4 822 | 821,"Insatisfait",4 823 | 822,"Insatisfait",3 824 | 823,"Neutre",4 825 | 824,"Très Satisfait",3 826 | 825,"Très Insatisfait",3 827 | 826,"Insatisfait",3 828 | 827,"Neutre",3 829 | 828,"Très Insatisfait",2 830 | 829,"Neutre",3 831 | 830,"Insatisfait",1 832 | 831,"Neutre",2 833 | 832,"Insatisfait",1 834 | 833,"Neutre",3 835 | 834,"Très Satisfait",3 836 | 835,"Insatisfait",1 837 | 836,"Insatisfait",4 838 | 837,"Très Satisfait",4 839 | 838,"Insatisfait",1 840 | 839,"Neutre",2 841 | 840,"Très Satisfait",3 842 | 841,"Insatisfait",1 843 | 842,"Insatisfait",1 844 | 843,"Très Satisfait",2 845 | 844,"Neutre",4 846 | 845,"Neutre",4 847 | 846,"Neutre",2 848 | 847,"Neutre",3 849 | 848,"Très Insatisfait",2 850 | 849,"Très Insatisfait",2 851 | 850,"Très Insatisfait",4 852 | 851,"Satisfait",1 853 | 852,"Très Insatisfait",1 854 | 853,"Insatisfait",2 855 | 854,"Très Insatisfait",1 856 | 855,"Très Satisfait",3 857 | 856,"Insatisfait",1 858 | 857,"Insatisfait",3 859 | 858,"Satisfait",4 860 | 859,"Insatisfait",1 861 | 860,"Neutre",2 862 | 861,"Neutre",3 863 | 862,"Très Insatisfait",2 864 | 863,"Très Insatisfait",3 865 | 864,"Insatisfait",3 866 | 865,"Neutre",2 867 | 866,"Neutre",3 868 | 867,"Neutre",4 869 | 868,"Satisfait",2 870 | 869,"Très Insatisfait",3 871 | 870,"Insatisfait",3 872 | 871,"Neutre",4 873 | 872,"Très Insatisfait",3 874 | 873,"Très Insatisfait",1 875 | 874,"Très Insatisfait",1 876 | 875,"Neutre",2 877 | 876,"Très Satisfait",4 878 | 877,"Insatisfait",1 879 | 878,"Très Insatisfait",3 880 | 879,"Très Insatisfait",1 881 | 880,"Satisfait",2 882 | 881,"Insatisfait",4 883 | 882,"Neutre",4 884 | 883,"Satisfait",4 885 | 884,"Neutre",2 886 | 885,"Très Insatisfait",3 887 | 886,"Satisfait",4 888 | 887,"Neutre",3 889 | 888,"Très Insatisfait",1 890 | 889,"Neutre",3 891 | 890,"Très Satisfait",4 892 | 891,"Très Insatisfait",3 893 | 892,"Satisfait",4 894 | 893,"Très Insatisfait",1 895 | 894,"Très Insatisfait",1 896 | 895,"Très Insatisfait",1 897 | 896,"Insatisfait",2 898 | 897,"Neutre",4 899 | 898,"Neutre",4 900 | 899,"Insatisfait",4 901 | 900,"Très Insatisfait",1 902 | 901,"Satisfait",3 903 | 902,"Insatisfait",1 904 | 903,"Neutre",3 905 | 904,"Très Insatisfait",2 906 | 905,"Très Satisfait",4 907 | 906,"Neutre",4 908 | 907,"Satisfait",3 909 | 908,"Insatisfait",3 910 | 909,"Insatisfait",4 911 | 910,"Neutre",2 912 | 911,"Neutre",4 913 | 912,"Insatisfait",2 914 | 913,"Très Satisfait",3 915 | 914,"Insatisfait",1 916 | 915,"Satisfait",3 917 | 916,"Neutre",3 918 | 917,"Neutre",4 919 | 918,"Neutre",4 920 | 919,"Neutre",1 921 | 920,"Neutre",1 922 | 921,"Très Insatisfait",1 923 | 922,"Insatisfait",2 924 | 923,"Neutre",1 925 | 924,"Très Insatisfait",1 926 | 925,"Neutre",4 927 | 926,"Très Insatisfait",2 928 | 927,"Neutre",1 929 | 928,"Satisfait",3 930 | 929,"Neutre",4 931 | 930,"Neutre",2 932 | 931,"Insatisfait",3 933 | 932,"Très Insatisfait",3 934 | 933,"Insatisfait",3 935 | 934,"Très Insatisfait",1 936 | 935,"Neutre",4 937 | 936,"Insatisfait",3 938 | 937,"Insatisfait",1 939 | 938,"Insatisfait",1 940 | 939,"Très Insatisfait",2 941 | 940,"Insatisfait",3 942 | 941,"Insatisfait",3 943 | 942,"Très Satisfait",4 944 | 943,"Très Insatisfait",1 945 | 944,"Très Insatisfait",2 946 | 945,"Très Insatisfait",2 947 | 946,"Satisfait",3 948 | 947,"Insatisfait",4 949 | 948,"Neutre",1 950 | 949,"Très Insatisfait",1 951 | 950,"Insatisfait",1 952 | 951,"Très Insatisfait",3 953 | 952,"Neutre",1 954 | 953,"Très Satisfait",3 955 | 954,"Très Insatisfait",1 956 | 955,"Très Insatisfait",1 957 | 956,"Très Satisfait",4 958 | 957,"Très Insatisfait",1 959 | 958,"Neutre",4 960 | 959,"Insatisfait",3 961 | 960,"Très Insatisfait",1 962 | 961,"Satisfait",3 963 | 962,"Très Insatisfait",2 964 | 963,"Neutre",1 965 | 964,"Insatisfait",2 966 | 965,"Neutre",4 967 | 966,"Très Insatisfait",1 968 | 967,"Très Satisfait",4 969 | 968,"Très Insatisfait",1 970 | 969,"Très Insatisfait",3 971 | 970,"Très Insatisfait",1 972 | 971,"Neutre",4 973 | 972,"Insatisfait",3 974 | 973,"Très Insatisfait",2 975 | 974,"Très Insatisfait",3 976 | 975,"Insatisfait",4 977 | 976,"Insatisfait",2 978 | 977,"Satisfait",3 979 | 978,"Très Insatisfait",4 980 | 979,"Très Satisfait",1 981 | 980,"Très Insatisfait",2 982 | 981,"Neutre",4 983 | 982,"Très Insatisfait",2 984 | 983,"Très Insatisfait",3 985 | 984,"Très Insatisfait",1 986 | 985,"Très Insatisfait",2 987 | 986,"Satisfait",1 988 | 987,"Satisfait",4 989 | 988,"Insatisfait",2 990 | 989,"Très Insatisfait",1 991 | 990,"Neutre",4 992 | 991,"Insatisfait",2 993 | 992,"Insatisfait",1 994 | 993,"Très Satisfait",3 995 | 994,"Très Insatisfait",4 996 | 995,"Très Satisfait",3 997 | 996,"Très Insatisfait",1 998 | 997,"Très Satisfait",2 999 | 998,"Très Insatisfait",2 1000 | 999,"Insatisfait",1 1001 | 1000,"Neutre",3 1002 | -------------------------------------------------------------------------------- /WAS17/data/recommandation_satisfaction.csv: -------------------------------------------------------------------------------- 1 | "Identifiant","Niveau_de_Satisfaction","Probabilite_de_Recommandation" 2 | 1,"1",1 3 | 2,"1",4 4 | 3,"1",1 5 | 4,"2",2 6 | 5,"2",1 7 | 6,"3",3 8 | 7,"2",3 9 | 8,"1",2 10 | 9,"1",3 11 | 10,"1",3 12 | 11,"5",1 13 | 12,"1",2 14 | 13,"2",2 15 | 14,"3",4 16 | 15,"4",4 17 | 16,"1",1 18 | 17,"3",2 19 | 18,"1",2 20 | 19,"2",3 21 | 20,"1",1 22 | 21,"4",3 23 | 22,"2",3 24 | 23,"4",4 25 | 24,"1",1 26 | 25,"1",3 27 | 26,"1",3 28 | 27,"3",2 29 | 28,"2",4 30 | 29,"2",1 31 | 30,"3",1 32 | 31,"2",3 33 | 32,"2",2 34 | 33,"2",1 35 | 34,"1",1 36 | 35,"1",3 37 | 36,"3",3 38 | 37,"3",3 39 | 38,"4",4 40 | 39,"4",4 41 | 40,"3",2 42 | 41,"2",2 43 | 42,"1",1 44 | 43,"2",1 45 | 44,"3",4 46 | 45,"4",4 47 | 46,"4",2 48 | 47,"5",4 49 | 48,"1",2 50 | 49,"1",2 51 | 50,"2",3 52 | 51,"2",2 53 | 52,"1",1 54 | 53,"4",1 55 | 54,"1",1 56 | 55,"4",4 57 | 56,"1",3 58 | 57,"3",3 59 | 58,"3",2 60 | 59,"3",2 61 | 60,"3",1 62 | 61,"1",4 63 | 62,"5",4 64 | 63,"3",3 65 | 64,"5",4 66 | 65,"1",2 67 | 66,"1",3 68 | 67,"2",1 69 | 68,"1",4 70 | 69,"5",3 71 | 70,"4",3 72 | 71,"1",3 73 | 72,"4",2 74 | 73,"3",3 75 | 74,"2",1 76 | 75,"3",3 77 | 76,"3",2 78 | 77,"2",2 79 | 78,"2",2 80 | 79,"4",2 81 | 80,"1",2 82 | 81,"1",3 83 | 82,"3",4 84 | 83,"3",3 85 | 84,"1",1 86 | 85,"2",2 87 | 86,"3",4 88 | 87,"2",4 89 | 88,"4",4 90 | 89,"3",3 91 | 90,"2",1 92 | 91,"1",4 93 | 92,"2",3 94 | 93,"1",2 95 | 94,"1",1 96 | 95,"2",3 97 | 96,"3",3 98 | 97,"4",4 99 | 98,"2",1 100 | 99,"2",2 101 | 100,"1",1 102 | 101,"3",3 103 | 102,"2",4 104 | 103,"2",1 105 | 104,"4",2 106 | 105,"3",4 107 | 106,"3",3 108 | 107,"1",3 109 | 108,"1",1 110 | 109,"5",2 111 | 110,"5",4 112 | 111,"3",4 113 | 112,"1",1 114 | 113,"1",2 115 | 114,"2",2 116 | 115,"2",1 117 | 116,"1",4 118 | 117,"3",4 119 | 118,"1",4 120 | 119,"3",2 121 | 120,"5",3 122 | 121,"4",4 123 | 122,"3",4 124 | 123,"1",3 125 | 124,"1",4 126 | 125,"5",3 127 | 126,"1",3 128 | 127,"5",2 129 | 128,"2",2 130 | 129,"2",1 131 | 130,"4",1 132 | 131,"1",1 133 | 132,"2",2 134 | 133,"1",3 135 | 134,"1",1 136 | 135,"3",3 137 | 136,"2",1 138 | 137,"2",2 139 | 138,"5",4 140 | 139,"4",3 141 | 140,"2",2 142 | 141,"3",1 143 | 142,"1",1 144 | 143,"2",1 145 | 144,"1",1 146 | 145,"1",1 147 | 146,"1",1 148 | 147,"1",1 149 | 148,"2",4 150 | 149,"3",4 151 | 150,"3",3 152 | 151,"2",3 153 | 152,"4",2 154 | 153,"3",3 155 | 154,"1",1 156 | 155,"2",2 157 | 156,"2",1 158 | 157,"2",2 159 | 158,"5",4 160 | 159,"1",1 161 | 160,"2",2 162 | 161,"4",4 163 | 162,"1",1 164 | 163,"3",2 165 | 164,"3",4 166 | 165,"2",1 167 | 166,"4",2 168 | 167,"1",2 169 | 168,"4",3 170 | 169,"3",4 171 | 170,"2",1 172 | 171,"1",2 173 | 172,"2",1 174 | 173,"1",1 175 | 174,"2",3 176 | 175,"5",4 177 | 176,"1",1 178 | 177,"2",4 179 | 178,"5",4 180 | 179,"1",3 181 | 180,"3",2 182 | 181,"4",4 183 | 182,"3",2 184 | 183,"1",2 185 | 184,"2",1 186 | 185,"3",4 187 | 186,"1",2 188 | 187,"5",4 189 | 188,"3",4 190 | 189,"1",2 191 | 190,"3",2 192 | 191,"3",3 193 | 192,"1",2 194 | 193,"3",4 195 | 194,"4",1 196 | 195,"5",1 197 | 196,"3",2 198 | 197,"3",4 199 | 198,"2",2 200 | 199,"2",3 201 | 200,"1",1 202 | 201,"5",4 203 | 202,"3",3 204 | 203,"3",2 205 | 204,"1",1 206 | 205,"1",1 207 | 206,"2",2 208 | 207,"1",1 209 | 208,"3",3 210 | 209,"2",1 211 | 210,"1",2 212 | 211,"2",2 213 | 212,"3",4 214 | 213,"1",4 215 | 214,"1",2 216 | 215,"2",3 217 | 216,"1",1 218 | 217,"1",4 219 | 218,"3",4 220 | 219,"2",3 221 | 220,"2",1 222 | 221,"1",3 223 | 222,"3",4 224 | 223,"5",2 225 | 224,"1",2 226 | 225,"4",3 227 | 226,"1",3 228 | 227,"1",1 229 | 228,"2",2 230 | 229,"5",4 231 | 230,"1",2 232 | 231,"3",4 233 | 232,"5",4 234 | 233,"2",2 235 | 234,"3",3 236 | 235,"2",3 237 | 236,"2",2 238 | 237,"4",2 239 | 238,"1",2 240 | 239,"1",2 241 | 240,"4",3 242 | 241,"1",1 243 | 242,"3",3 244 | 243,"1",4 245 | 244,"4",1 246 | 245,"4",2 247 | 246,"5",2 248 | 247,"2",4 249 | 248,"3",3 250 | 249,"1",1 251 | 250,"1",3 252 | 251,"4",3 253 | 252,"4",4 254 | 253,"2",2 255 | 254,"3",3 256 | 255,"2",4 257 | 256,"1",1 258 | 257,"3",4 259 | 258,"2",3 260 | 259,"1",3 261 | 260,"4",3 262 | 261,"3",4 263 | 262,"5",4 264 | 263,"2",1 265 | 264,"1",2 266 | 265,"3",4 267 | 266,"1",4 268 | 267,"1",3 269 | 268,"5",4 270 | 269,"1",2 271 | 270,"1",1 272 | 271,"1",1 273 | 272,"2",1 274 | 273,"1",4 275 | 274,"1",1 276 | 275,"4",2 277 | 276,"4",2 278 | 277,"4",4 279 | 278,"2",1 280 | 279,"2",2 281 | 280,"1",2 282 | 281,"2",1 283 | 282,"5",4 284 | 283,"2",1 285 | 284,"2",2 286 | 285,"2",4 287 | 286,"1",2 288 | 287,"2",4 289 | 288,"1",1 290 | 289,"3",2 291 | 290,"2",1 292 | 291,"1",1 293 | 292,"4",4 294 | 293,"1",1 295 | 294,"2",1 296 | 295,"5",4 297 | 296,"1",1 298 | 297,"1",3 299 | 298,"5",4 300 | 299,"3",4 301 | 300,"5",1 302 | 301,"2",1 303 | 302,"5",4 304 | 303,"1",2 305 | 304,"3",3 306 | 305,"3",1 307 | 306,"1",2 308 | 307,"2",3 309 | 308,"3",3 310 | 309,"4",4 311 | 310,"2",2 312 | 311,"2",1 313 | 312,"1",3 314 | 313,"2",1 315 | 314,"3",2 316 | 315,"3",3 317 | 316,"5",4 318 | 317,"1",3 319 | 318,"3",4 320 | 319,"1",1 321 | 320,"2",2 322 | 321,"3",2 323 | 322,"2",2 324 | 323,"2",2 325 | 324,"3",4 326 | 325,"2",3 327 | 326,"1",2 328 | 327,"2",1 329 | 328,"1",3 330 | 329,"1",1 331 | 330,"2",2 332 | 331,"1",1 333 | 332,"1",1 334 | 333,"3",2 335 | 334,"3",3 336 | 335,"3",2 337 | 336,"1",1 338 | 337,"1",2 339 | 338,"4",3 340 | 339,"4",1 341 | 340,"4",3 342 | 341,"3",4 343 | 342,"1",4 344 | 343,"4",2 345 | 344,"4",3 346 | 345,"1",2 347 | 346,"1",3 348 | 347,"2",1 349 | 348,"2",3 350 | 349,"2",3 351 | 350,"2",2 352 | 351,"3",1 353 | 352,"5",4 354 | 353,"1",3 355 | 354,"3",3 356 | 355,"2",1 357 | 356,"1",2 358 | 357,"1",1 359 | 358,"1",2 360 | 359,"1",4 361 | 360,"2",2 362 | 361,"2",2 363 | 362,"3",3 364 | 363,"1",3 365 | 364,"5",2 366 | 365,"2",1 367 | 366,"1",2 368 | 367,"2",3 369 | 368,"3",3 370 | 369,"3",4 371 | 370,"2",2 372 | 371,"5",2 373 | 372,"2",2 374 | 373,"1",1 375 | 374,"2",4 376 | 375,"2",1 377 | 376,"1",4 378 | 377,"4",4 379 | 378,"2",3 380 | 379,"1",2 381 | 380,"4",3 382 | 381,"2",3 383 | 382,"1",1 384 | 383,"4",4 385 | 384,"2",1 386 | 385,"4",4 387 | 386,"1",1 388 | 387,"2",4 389 | 388,"3",4 390 | 389,"1",1 391 | 390,"3",3 392 | 391,"2",2 393 | 392,"1",1 394 | 393,"1",1 395 | 394,"2",2 396 | 395,"4",4 397 | 396,"4",1 398 | 397,"1",2 399 | 398,"2",2 400 | 399,"3",3 401 | 400,"4",3 402 | 401,"3",3 403 | 402,"3",4 404 | 403,"1",1 405 | 404,"4",4 406 | 405,"5",4 407 | 406,"2",1 408 | 407,"1",4 409 | 408,"3",3 410 | 409,"3",1 411 | 410,"2",1 412 | 411,"5",4 413 | 412,"3",3 414 | 413,"1",2 415 | 414,"1",3 416 | 415,"5",1 417 | 416,"1",2 418 | 417,"2",3 419 | 418,"2",1 420 | 419,"3",2 421 | 420,"2",1 422 | 421,"2",1 423 | 422,"5",3 424 | 423,"2",4 425 | 424,"2",2 426 | 425,"3",4 427 | 426,"2",1 428 | 427,"1",3 429 | 428,"5",3 430 | 429,"2",2 431 | 430,"3",2 432 | 431,"3",4 433 | 432,"2",1 434 | 433,"1",1 435 | 434,"3",3 436 | 435,"1",1 437 | 436,"2",1 438 | 437,"1",4 439 | 438,"3",1 440 | 439,"1",2 441 | 440,"3",4 442 | 441,"3",3 443 | 442,"1",3 444 | 443,"1",2 445 | 444,"1",2 446 | 445,"1",1 447 | 446,"5",4 448 | 447,"1",1 449 | 448,"1",1 450 | 449,"2",2 451 | 450,"2",1 452 | 451,"5",4 453 | 452,"2",1 454 | 453,"1",1 455 | 454,"3",4 456 | 455,"5",4 457 | 456,"4",4 458 | 457,"3",4 459 | 458,"1",2 460 | 459,"3",3 461 | 460,"2",1 462 | 461,"1",4 463 | 462,"3",3 464 | 463,"4",4 465 | 464,"1",1 466 | 465,"2",2 467 | 466,"2",4 468 | 467,"1",3 469 | 468,"1",2 470 | 469,"2",1 471 | 470,"1",1 472 | 471,"1",2 473 | 472,"1",1 474 | 473,"2",3 475 | 474,"2",3 476 | 475,"2",1 477 | 476,"2",2 478 | 477,"3",3 479 | 478,"1",1 480 | 479,"5",3 481 | 480,"2",4 482 | 481,"1",2 483 | 482,"2",2 484 | 483,"3",4 485 | 484,"1",2 486 | 485,"4",3 487 | 486,"1",1 488 | 487,"1",4 489 | 488,"3",2 490 | 489,"1",3 491 | 490,"3",2 492 | 491,"3",4 493 | 492,"1",1 494 | 493,"2",1 495 | 494,"4",2 496 | 495,"3",4 497 | 496,"5",2 498 | 497,"4",1 499 | 498,"1",2 500 | 499,"3",3 501 | 500,"1",1 502 | 501,"5",4 503 | 502,"3",3 504 | 503,"3",2 505 | 504,"2",1 506 | 505,"3",3 507 | 506,"2",2 508 | 507,"3",4 509 | 508,"3",4 510 | 509,"4",3 511 | 510,"2",3 512 | 511,"1",4 513 | 512,"1",1 514 | 513,"1",2 515 | 514,"1",1 516 | 515,"3",3 517 | 516,"3",4 518 | 517,"2",1 519 | 518,"3",4 520 | 519,"2",3 521 | 520,"2",1 522 | 521,"3",4 523 | 522,"3",3 524 | 523,"3",4 525 | 524,"1",2 526 | 525,"2",2 527 | 526,"4",3 528 | 527,"2",2 529 | 528,"1",3 530 | 529,"2",4 531 | 530,"4",2 532 | 531,"5",4 533 | 532,"2",3 534 | 533,"3",3 535 | 534,"2",2 536 | 535,"4",2 537 | 536,"1",2 538 | 537,"2",3 539 | 538,"3",4 540 | 539,"5",3 541 | 540,"4",4 542 | 541,"5",4 543 | 542,"1",4 544 | 543,"3",3 545 | 544,"3",3 546 | 545,"3",1 547 | 546,"4",1 548 | 547,"2",2 549 | 548,"4",2 550 | 549,"2",1 551 | 550,"1",3 552 | 551,"2",4 553 | 552,"1",2 554 | 553,"2",3 555 | 554,"2",3 556 | 555,"5",3 557 | 556,"2",3 558 | 557,"2",2 559 | 558,"1",1 560 | 559,"2",2 561 | 560,"1",2 562 | 561,"2",2 563 | 562,"5",3 564 | 563,"2",1 565 | 564,"2",2 566 | 565,"2",2 567 | 566,"5",1 568 | 567,"1",1 569 | 568,"2",4 570 | 569,"1",2 571 | 570,"5",2 572 | 571,"2",3 573 | 572,"2",2 574 | 573,"2",2 575 | 574,"2",4 576 | 575,"1",3 577 | 576,"1",3 578 | 577,"1",1 579 | 578,"1",1 580 | 579,"2",2 581 | 580,"3",4 582 | 581,"3",2 583 | 582,"1",2 584 | 583,"4",4 585 | 584,"1",3 586 | 585,"2",4 587 | 586,"2",1 588 | 587,"4",4 589 | 588,"5",2 590 | 589,"2",2 591 | 590,"2",1 592 | 591,"2",2 593 | 592,"3",3 594 | 593,"3",3 595 | 594,"1",1 596 | 595,"1",2 597 | 596,"5",1 598 | 597,"2",2 599 | 598,"3",1 600 | 599,"5",4 601 | 600,"1",2 602 | 601,"1",1 603 | 602,"3",3 604 | 603,"2",1 605 | 604,"5",3 606 | 605,"1",2 607 | 606,"1",3 608 | 607,"3",2 609 | 608,"1",2 610 | 609,"3",1 611 | 610,"2",1 612 | 611,"3",3 613 | 612,"2",2 614 | 613,"1",2 615 | 614,"2",1 616 | 615,"2",2 617 | 616,"3",4 618 | 617,"1",2 619 | 618,"2",2 620 | 619,"2",1 621 | 620,"4",2 622 | 621,"4",3 623 | 622,"1",2 624 | 623,"2",1 625 | 624,"3",4 626 | 625,"3",3 627 | 626,"2",4 628 | 627,"1",1 629 | 628,"1",1 630 | 629,"2",1 631 | 630,"1",2 632 | 631,"3",3 633 | 632,"3",4 634 | 633,"1",1 635 | 634,"2",2 636 | 635,"1",3 637 | 636,"1",2 638 | 637,"5",3 639 | 638,"3",3 640 | 639,"3",3 641 | 640,"2",2 642 | 641,"1",1 643 | 642,"4",4 644 | 643,"1",4 645 | 644,"1",2 646 | 645,"4",3 647 | 646,"3",1 648 | 647,"4",4 649 | 648,"1",1 650 | 649,"2",2 651 | 650,"1",3 652 | 651,"5",2 653 | 652,"5",4 654 | 653,"5",4 655 | 654,"1",3 656 | 655,"1",4 657 | 656,"3",3 658 | 657,"2",2 659 | 658,"3",3 660 | 659,"1",3 661 | 660,"3",3 662 | 661,"1",2 663 | 662,"1",3 664 | 663,"3",4 665 | 664,"1",4 666 | 665,"2",1 667 | 666,"3",4 668 | 667,"2",1 669 | 668,"2",1 670 | 669,"2",2 671 | 670,"1",3 672 | 671,"1",3 673 | 672,"1",2 674 | 673,"3",4 675 | 674,"1",4 676 | 675,"1",4 677 | 676,"1",2 678 | 677,"2",4 679 | 678,"5",3 680 | 679,"2",1 681 | 680,"2",1 682 | 681,"2",2 683 | 682,"2",4 684 | 683,"4",4 685 | 684,"4",2 686 | 685,"1",2 687 | 686,"3",4 688 | 687,"1",3 689 | 688,"4",1 690 | 689,"1",3 691 | 690,"4",4 692 | 691,"1",1 693 | 692,"2",1 694 | 693,"1",1 695 | 694,"2",1 696 | 695,"3",4 697 | 696,"4",4 698 | 697,"1",2 699 | 698,"5",2 700 | 699,"3",4 701 | 700,"4",4 702 | 701,"2",1 703 | 702,"3",4 704 | 703,"1",4 705 | 704,"3",4 706 | 705,"1",4 707 | 706,"4",2 708 | 707,"5",4 709 | 708,"5",4 710 | 709,"5",2 711 | 710,"2",2 712 | 711,"4",3 713 | 712,"2",1 714 | 713,"2",4 715 | 714,"2",2 716 | 715,"1",3 717 | 716,"4",4 718 | 717,"1",2 719 | 718,"1",4 720 | 719,"3",4 721 | 720,"2",2 722 | 721,"4",2 723 | 722,"1",1 724 | 723,"2",1 725 | 724,"4",1 726 | 725,"5",4 727 | 726,"4",3 728 | 727,"3",3 729 | 728,"1",1 730 | 729,"1",2 731 | 730,"1",1 732 | 731,"2",3 733 | 732,"3",3 734 | 733,"4",4 735 | 734,"2",1 736 | 735,"5",4 737 | 736,"2",4 738 | 737,"3",1 739 | 738,"3",4 740 | 739,"3",1 741 | 740,"5",4 742 | 741,"2",3 743 | 742,"1",1 744 | 743,"1",4 745 | 744,"1",1 746 | 745,"4",3 747 | 746,"3",2 748 | 747,"1",1 749 | 748,"1",1 750 | 749,"1",3 751 | 750,"2",1 752 | 751,"3",2 753 | 752,"1",2 754 | 753,"1",4 755 | 754,"2",1 756 | 755,"1",1 757 | 756,"2",2 758 | 757,"1",2 759 | 758,"4",4 760 | 759,"3",2 761 | 760,"2",1 762 | 761,"3",3 763 | 762,"1",4 764 | 763,"3",4 765 | 764,"2",4 766 | 765,"3",2 767 | 766,"2",3 768 | 767,"3",4 769 | 768,"1",4 770 | 769,"3",3 771 | 770,"2",1 772 | 771,"1",3 773 | 772,"2",4 774 | 773,"2",4 775 | 774,"2",1 776 | 775,"2",1 777 | 776,"5",2 778 | 777,"3",2 779 | 778,"1",1 780 | 779,"1",1 781 | 780,"2",3 782 | 781,"2",1 783 | 782,"3",4 784 | 783,"1",4 785 | 784,"4",4 786 | 785,"5",2 787 | 786,"2",1 788 | 787,"5",3 789 | 788,"1",1 790 | 789,"3",2 791 | 790,"4",3 792 | 791,"1",1 793 | 792,"2",2 794 | 793,"3",3 795 | 794,"2",4 796 | 795,"5",3 797 | 796,"2",4 798 | 797,"2",1 799 | 798,"3",2 800 | 799,"1",3 801 | 800,"5",4 802 | 801,"1",4 803 | 802,"2",2 804 | 803,"1",1 805 | 804,"1",2 806 | 805,"3",3 807 | 806,"3",2 808 | 807,"2",4 809 | 808,"4",3 810 | 809,"2",1 811 | 810,"4",4 812 | 811,"4",4 813 | 812,"2",3 814 | 813,"3",3 815 | 814,"5",4 816 | 815,"4",4 817 | 816,"1",2 818 | 817,"1",1 819 | 818,"4",4 820 | 819,"2",4 821 | 820,"3",4 822 | 821,"2",4 823 | 822,"2",3 824 | 823,"3",4 825 | 824,"5",3 826 | 825,"1",3 827 | 826,"2",3 828 | 827,"3",3 829 | 828,"1",2 830 | 829,"3",3 831 | 830,"2",1 832 | 831,"3",2 833 | 832,"2",1 834 | 833,"3",3 835 | 834,"5",3 836 | 835,"2",1 837 | 836,"2",4 838 | 837,"5",4 839 | 838,"2",1 840 | 839,"3",2 841 | 840,"5",3 842 | 841,"2",1 843 | 842,"2",1 844 | 843,"5",2 845 | 844,"3",4 846 | 845,"3",4 847 | 846,"3",2 848 | 847,"3",3 849 | 848,"1",2 850 | 849,"1",2 851 | 850,"1",4 852 | 851,"4",1 853 | 852,"1",1 854 | 853,"2",2 855 | 854,"1",1 856 | 855,"5",3 857 | 856,"2",1 858 | 857,"2",3 859 | 858,"4",4 860 | 859,"2",1 861 | 860,"3",2 862 | 861,"3",3 863 | 862,"1",2 864 | 863,"1",3 865 | 864,"2",3 866 | 865,"3",2 867 | 866,"3",3 868 | 867,"3",4 869 | 868,"4",2 870 | 869,"1",3 871 | 870,"2",3 872 | 871,"3",4 873 | 872,"1",3 874 | 873,"1",1 875 | 874,"1",1 876 | 875,"3",2 877 | 876,"5",4 878 | 877,"2",1 879 | 878,"1",3 880 | 879,"1",1 881 | 880,"4",2 882 | 881,"2",4 883 | 882,"3",4 884 | 883,"4",4 885 | 884,"3",2 886 | 885,"1",3 887 | 886,"4",4 888 | 887,"3",3 889 | 888,"1",1 890 | 889,"3",3 891 | 890,"5",4 892 | 891,"1",3 893 | 892,"4",4 894 | 893,"1",1 895 | 894,"1",1 896 | 895,"1",1 897 | 896,"2",2 898 | 897,"3",4 899 | 898,"3",4 900 | 899,"2",4 901 | 900,"1",1 902 | 901,"4",3 903 | 902,"2",1 904 | 903,"3",3 905 | 904,"1",2 906 | 905,"5",4 907 | 906,"3",4 908 | 907,"4",3 909 | 908,"2",3 910 | 909,"2",4 911 | 910,"3",2 912 | 911,"3",4 913 | 912,"2",2 914 | 913,"5",3 915 | 914,"2",1 916 | 915,"4",3 917 | 916,"3",3 918 | 917,"3",4 919 | 918,"3",4 920 | 919,"3",1 921 | 920,"3",1 922 | 921,"1",1 923 | 922,"2",2 924 | 923,"3",1 925 | 924,"1",1 926 | 925,"3",4 927 | 926,"1",2 928 | 927,"3",1 929 | 928,"4",3 930 | 929,"3",4 931 | 930,"3",2 932 | 931,"2",3 933 | 932,"1",3 934 | 933,"2",3 935 | 934,"1",1 936 | 935,"3",4 937 | 936,"2",3 938 | 937,"2",1 939 | 938,"2",1 940 | 939,"1",2 941 | 940,"2",3 942 | 941,"2",3 943 | 942,"5",4 944 | 943,"1",1 945 | 944,"1",2 946 | 945,"1",2 947 | 946,"4",3 948 | 947,"2",4 949 | 948,"3",1 950 | 949,"1",1 951 | 950,"2",1 952 | 951,"1",3 953 | 952,"3",1 954 | 953,"5",3 955 | 954,"1",1 956 | 955,"1",1 957 | 956,"5",4 958 | 957,"1",1 959 | 958,"3",4 960 | 959,"2",3 961 | 960,"1",1 962 | 961,"4",3 963 | 962,"1",2 964 | 963,"3",1 965 | 964,"2",2 966 | 965,"3",4 967 | 966,"1",1 968 | 967,"5",4 969 | 968,"1",1 970 | 969,"1",3 971 | 970,"1",1 972 | 971,"3",4 973 | 972,"2",3 974 | 973,"1",2 975 | 974,"1",3 976 | 975,"2",4 977 | 976,"2",2 978 | 977,"4",3 979 | 978,"1",4 980 | 979,"5",1 981 | 980,"1",2 982 | 981,"3",4 983 | 982,"1",2 984 | 983,"1",3 985 | 984,"1",1 986 | 985,"1",2 987 | 986,"4",1 988 | 987,"4",4 989 | 988,"2",2 990 | 989,"1",1 991 | 990,"3",4 992 | 991,"2",2 993 | 992,"2",1 994 | 993,"5",3 995 | 994,"1",4 996 | 995,"5",3 997 | 996,"1",1 998 | 997,"5",2 999 | 998,"1",2 1000 | 999,"2",1 1001 | 1000,"3",3 1002 | -------------------------------------------------------------------------------- /WAS17_A_La_Découverte_Des_Tests_Statistiques.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS17_A_La_Découverte_Des_Tests_Statistiques.pptx -------------------------------------------------------------------------------- /WAS18/WAS18_Regression_Lineaire_Dans_La_Pratique.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "WAS 18: Régression linéaire dans la pratique" 3 | author: "Natacha NJONGWA YEPNGA" 4 | date: "`r Sys.Date()`" 5 | output: 6 | word_document: 7 | toc: true 8 | header-includes: 9 | - "\\usepackage{hyperref}" # Importation du package hyperref pour les liens 10 | --- 11 | 12 | # [LeCoinStat](https://youtube.com/c/LeCoinStat?sub_confirmation=1) 13 | 14 | 15 | ```{r setup, include=FALSE} 16 | knitr::opts_chunk$set(echo = TRUE) 17 | ``` 18 | 19 | # Régression linéaire simple 20 | Construire un modèle qui permet de prédire les ventes à partir des dépenses publicitaires. 21 | 22 | ## Etape 1: Importation des données et descriptions des données 23 | 24 | ```{r} 25 | # 26 | donnees_marketing<-read.csv("/Users/natachanjongwayepnga/Documents/GitHub/Sans titre/WAS18/data/donnees_marketing.csv") 27 | head(donnees_marketing) 28 | ``` 29 | ```{r summary-stats, results='asis'} 30 | #install.packages("kableExtra") 31 | # Résumé statistique des variables 32 | summary(donnees_marketing) 33 | 34 | 35 | 36 | ``` 37 | ```{r} 38 | library(ggplot2) 39 | # Création des boxplots 40 | boxplot_plot <- ggplot(donnees_marketing, aes(x = "", y = Depenses_Publicitaires)) + 41 | geom_boxplot(fill = "lightblue") + 42 | labs(title = "Boxplot des Dépenses Publicitaires", y = "Valeurs") + 43 | theme_minimal() + 44 | theme(axis.text.x = element_blank()) 45 | 46 | boxplot_plot2 <- ggplot(donnees_marketing, aes(x = "", y = Ventes)) + 47 | geom_boxplot(fill = "lightgreen") + 48 | labs(title = "Boxplot des Ventes", y = "Valeurs") + 49 | theme_minimal() + 50 | theme(axis.text.x = element_blank()) 51 | 52 | # Afficher les graphiques côte à côte 53 | library(gridExtra) 54 | grid.arrange(boxplot_plot, boxplot_plot2, ncol = 2) 55 | ``` 56 | 57 | ## Etape 2: Analyse bivariée 58 | 59 | ```{r scatter-plot, echo=FALSE, fig.width=8, fig.height=6} 60 | # Chargement de la bibliothèque ggplot2 61 | library(ggplot2) 62 | 63 | # Création du nuage de points 64 | scatter_plot <- ggplot(donnees_marketing, aes(x = Depenses_Publicitaires, y = Ventes)) + 65 | geom_point(color = "blue") + 66 | labs(title = "Nuage de Points entre Dépenses Publicitaires et Ventes", 67 | x = "Dépenses Publicitaires", 68 | y = "Ventes") + 69 | theme_minimal() 70 | 71 | # Afficher le nuage de points 72 | print(scatter_plot) 73 | ``` 74 | ## Etape 3: Construction du modèle 75 | ```{r regression-lineaire, echo=TRUE} 76 | # Réalisation d'une régression linéaire simple 77 | modele_regression <- lm(Ventes ~ Depenses_Publicitaires, data = donnees_marketing) 78 | 79 | # Résumé de la régression 80 | summary(modele_regression) 81 | ``` 82 | 83 | ## Etape 4: Vérification des hypothèse du modèle 84 | 85 | ### H1: Linéarité 86 | 87 | L'hypothèse de linéarité suppose que la relation entre la variable indépendante (Dépenses Publicitaires) et la variable dépendante (Ventes) est linéaire. 88 | 89 | ```{r linearite-hypothese, echo=TRUE, fig.width=6, fig.height=4} 90 | 91 | # Chargement de la bibliothèque ggplot2 92 | library(ggplot2) 93 | 94 | # Création du nuage de points 95 | scatter_plot <- ggplot(donnees_marketing, aes(x = Depenses_Publicitaires, y = Ventes)) + 96 | geom_point(color = "blue") + 97 | labs(title = "Nuage de Points entre Dépenses Publicitaires et Ventes", 98 | x = "Dépenses Publicitaires", 99 | y = "Ventes") + 100 | theme_minimal() 101 | 102 | # Afficher le nuage de points 103 | print(scatter_plot) 104 | ``` 105 | 106 | 107 | ### H2: Nullité de l'espérance des erreurs 108 | L'hypothèse de nullité de l'espérance des erreurs suppose que la moyenne des résidus (erreurs de prédiction) est nulle. Nous pouvons vérifier cela en examinant la moyenne des résidus. 109 | ```{r} 110 | #Calcul de la moyenne des résidus 111 | moyenne_residus <- mean(residuals(modele_regression)) 112 | moyenne_residus 113 | ``` 114 | 115 | ### H3: Absence d'autocorrélation 116 | 117 | L'hypothèse d'absence d'autocorrélation suppose que les résidus ne sont pas corrélés les uns avec les autres. 118 | 119 | Le test de Durbin-Watson permet de vérifier la présence d'autocorrélation positive ou négative des résidus dans un modèle de régression. Voici comment interpréter les résultats du test : 120 | 121 | Statistique de Durbin-Watson (DW) : 122 | 123 | - Si DW est proche de 2, cela suggère l'absence d'autocorrélation. 124 | - Si DW est significativement inférieur à 2, cela suggère une autocorrélation positive (les résidus sont corrélés positivement). 125 | - Si DW est significativement supérieur à 2, cela suggère une autocorrélation négative (les résidus sont corrélés négativement). 126 | 127 | ```{r} 128 | # Chargement de la bibliothèque lmtest 129 | library(lmtest) 130 | 131 | # Test de Durbin-Watson 132 | durbin_watson_test <- dwtest(modele_regression) 133 | durbin_watson_test 134 | ``` 135 | 136 | ### H4: Homoscédasticité 137 | L'hypothèse d'homoscédasticité suppose que la variance des résidus est constante. 138 | Pour valider l'homoscédasticité on peut: 139 | -Effectuer une analyse graphique. 140 | -Effectuer le test de White ou le test de Breusch-Pagan. 141 | 142 | ```{r} 143 | library(ggplot2) 144 | # Graphique des résidus en fonction des valeurs prédites 145 | homoscedasticite_plot <- ggplot(data.frame(Predicted = fitted(modele_regression), Residus = residuals(modele_regression)), aes(x = Predicted, y = Residus)) + 146 | geom_point() + 147 | geom_hline(yintercept = 0, color = "red", linetype = "dashed") + 148 | labs(title = "Vérification de l'hypothèse d'homoscédasticité", 149 | x = "Valeurs prédites", 150 | y = "Résidus") + 151 | theme_minimal() 152 | print(homoscedasticite_plot) 153 | ``` 154 | 155 | 156 | ### H5: Normalité (optionnel) 157 | 158 | L'hypothèse de normalité suppose que les résidus suivent une distribution normale. 159 | 160 | ```{r} 161 | # Extraction des résidus 162 | residus <- residuals(modele_regression) 163 | 164 | # Histogramme des résidus 165 | hist(residus, main = "Histogramme des Résidus", xlab = "Résidus", ylab = "Fréquence") 166 | ``` 167 | 168 | 169 | ```{r} 170 | # QQ-plot des résidus 171 | qqnorm(residus) 172 | qqline(residus) 173 | 174 | ``` 175 | ```{r} 176 | 177 | # Test de normalité de Shapiro-Wilk 178 | shapiro_test <- shapiro.test(residus) 179 | shapiro_test 180 | 181 | ``` 182 | 183 | ```{r} 184 | #install.packages("moments") 185 | library(moments) 186 | # Test de Jarque-Bera 187 | jarque_bera_test <- jarque.test(residus) 188 | jarque_bera_test 189 | ``` 190 | 191 | 192 | ```{r} 193 | # Test de Kolmogorov-Smirnov 194 | ks_test <- ks.test(residus, "pnorm", mean = mean(residus), sd = sd(residus)) 195 | ks_test 196 | ``` 197 | ```{r} 198 | # Test de Kolmogorov-Smirnov 199 | ks_test <- ks.test(residus, "pnorm", mean = mean(residus), sd = sd(residus)) 200 | ks_test 201 | ``` 202 | 203 | ## Etape 5: Evaluation du pouvoir prédictif 204 | ```{r} 205 | 206 | # Prédictions sur l'ensemble de données d'entraînement 207 | predictions_train <- predict(modele_regression, newdata = donnees_marketing) 208 | 209 | # Calcul de l'erreur quadratique moyenne (RMSE) 210 | rmse <- sqrt(mean((donnees_marketing$Ventes - predictions_train)^2)) 211 | rmse 212 | ``` 213 | ```{r} 214 | library(ggplot2) 215 | 216 | 217 | # Création d'un dataframe pour les données réelles et prédites 218 | donnees_graphique <- data.frame(Depenses_Publicitaires = donnees_marketing$Depenses_Publicitaires, Reel = donnees_marketing$Ventes, Prédit = predictions_train) 219 | 220 | # Création du graphique en nuage de points 221 | graphique_nuage_points <- ggplot(donnees_graphique, aes(x = Depenses_Publicitaires, y = Reel)) + 222 | geom_point(aes(color = "Réelles"), size = 3, alpha = 0.6) + 223 | geom_point(aes(x = Depenses_Publicitaires, y = Prédit, color = "Prédites"), size = 3, alpha = 0.6) + 224 | labs(title = "Nuage de Points des Valeurs Réelles et Prédites", 225 | x = "Dépenses Publicitaires", 226 | y = "Valeurs") + 227 | scale_color_manual(values = c("Réelles" = "blue", "Prédites" = "red")) + 228 | theme_minimal() + 229 | xlim(0, max(donnees_graphique$Depenses_Publicitaires)) + 230 | ylim(0, max(max(donnees_graphique$Reel), max(donnees_graphique$Prédit))) 231 | 232 | print(graphique_nuage_points) 233 | ``` 234 | 235 | 236 | 237 | 238 | ## Etape 6: Prédiction sur de nouvelles données 239 | 240 | 241 | 242 | Vous pouvez utiliser le modèle de régression que nous avons construit pour faire des prédictions sur de nouvelles données. Pour cela, assurez-vous d'avoir des nouvelles données avec les mêmes variables que celles utilisées dans le modèle (dans notre cas, "Dépenses Publicitaires"). 243 | 244 | ```{r prediction-nouvelles-donnees, echo=TRUE} 245 | # Nouvelles données avec les valeurs de Dépenses Publicitaires 246 | nouvelles_donnees <- data.frame(Depenses_Publicitaires = c(3000, 4000, 5000)) 247 | 248 | # Prédiction avec le modèle de régression 249 | predictions <- predict(modele_regression, nouvelles_donnees) 250 | 251 | # Affichage des prédictions 252 | predictions 253 | ``` 254 | 255 | 256 | # Régression linéaire multiple 257 | 258 | Construire un modèle de régression linéaire pour la prédiction des ventes en fonction des dépenses publicitaires suivant plusieurs canaux: la télé, la radio, les journaux. 259 | 260 | ## Etape 1: Descrpiton des données 261 | 262 | ```{r} 263 | advertisement <- read.csv("/Users/natachanjongwayepnga/Documents/GitHub/Sans titre/WAS18/data/Advertising.csv",sep = ";") 264 | head(advertisement) 265 | ``` 266 | 267 | 268 | 269 | ### Statistique descriptive univarié 270 | ```{r} 271 | summary(advertisement) 272 | ``` 273 | 274 | ### Boxplot des variables 275 | ```{r} 276 | par(mfrow=c(1,4)) 277 | boxplot(advertisement$TV, main="TV") 278 | boxplot(advertisement$Radio, main="Radio") 279 | boxplot(advertisement$Newspaper, main="Newspaper") 280 | boxplot(advertisement$Sales, main="Sales") 281 | ``` 282 | 283 | ## Etape 2: Analyes bivariées 284 | ### Nuage de points entre les variables 285 | ```{r} 286 | pairs(advertisement) 287 | ``` 288 | 289 | ### Matrice de corrélation 290 | 291 | # Calculate the correlation matrix 292 | ```{r} 293 | #install.packages("corrplot") 294 | library(corrplot) 295 | correlation_matrix <- cor(advertisement) 296 | # HeatMap des corrélation 297 | corrplot(correlation_matrix, method = "color", type = "upper", 298 | tl.col = "black", tl.srt = 45, addCoef.col = "black", 299 | number.cex = 0.7, number.digits = 2) 300 | ``` 301 | 302 | 303 | 304 | ## Etape 3: Modélisation 305 | 306 | ```{r} 307 | model <- lm(Sales ~ TV + Radio + Newspaper, data=advertisement) 308 | summary(model) 309 | ``` 310 | 311 | 312 | ## Etape 4: Vérification des hypothèses 313 | 314 | ### H1: Linéarité 315 | ```{r} 316 | par(mfrow=c(2,2)) 317 | plot(model) 318 | ``` 319 | 320 | ### H2: Nullité de l'espérance des erreurs 321 | ```{r} 322 | mean(residuals(model)) 323 | ``` 324 | 325 | ### H3: Non autocorrélation 326 | ```{r} 327 | library(lmtest) 328 | dwtest(model) 329 | ``` 330 | 331 | ### H4: Homoscédasticité 332 | ```{r} 333 | bptest(model) 334 | ``` 335 | 336 | ### H5: Absence de multicolinéarité 337 | ```{r} 338 | library(car) 339 | vif(model) 340 | ``` 341 | 342 | ### H6: Normalité (optionnel) 343 | 344 | ```{r} 345 | # Histogramme des résidus 346 | hist(residuals(model), breaks=20, main="Histogramme des résidus", xlab="Résidus") 347 | ``` 348 | 349 | 350 | ```{r} 351 | # Q-Q plot des résidus 352 | qqnorm(residuals(model)) 353 | qqline(residuals(model), col = "red") 354 | ``` 355 | 356 | 357 | ```{r} 358 | shapiro.test(residuals(model)) 359 | ``` 360 | 361 | -------------------------------------------------------------------------------- /WAS18/WAS18_Regression_Linéaire_Dans_La_Pratique.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS18/WAS18_Regression_Linéaire_Dans_La_Pratique.pptx -------------------------------------------------------------------------------- /WAS18/data/Advertising.csv: -------------------------------------------------------------------------------- 1 | TV;Radio;Newspaper;Sales 2 | 230.1;37.8;69.2;22.1 3 | 44.5;39.3;45.1;10.4 4 | 17.2;45.9;69.3;9.3 5 | 151.5;41.3;58.5;18.5 6 | 180.8;10.8;58.4;12.9 7 | 8.7;48.9;75;7.2 8 | 57.5;32.8;23.5;11.8 9 | 120.2;19.6;11.6;13.2 10 | 8.6;2.1;1;4.8 11 | 199.8;2.6;21.2;10.6 12 | 66.1;5.8;24.2;8.6 13 | 214.7;24;4;17.4 14 | 23.8;35.1;65.9;9.2 15 | 97.5;7.6;7.2;9.7 16 | 204.1;32.9;46;19 17 | 195.4;47.7;52.9;22.4 18 | 67.8;36.6;114;12.5 19 | 281.4;39.6;55.8;24.4 20 | 69.2;20.5;18.3;11.3 21 | 147.3;23.9;19.1;14.6 22 | 218.4;27.7;53.4;18 23 | 237.4;5.1;23.5;12.5 24 | 13.2;15.9;49.6;5.6 25 | 228.3;16.9;26.2;15.5 26 | 62.3;12.6;18.3;9.7 27 | 262.9;3.5;19.5;12 28 | 142.9;29.3;12.6;15 29 | 240.1;16.7;22.9;15.9 30 | 248.8;27.1;22.9;18.9 31 | 70.6;16;40.8;10.5 32 | 292.9;28.3;43.2;21.4 33 | 112.9;17.4;38.6;11.9 34 | 97.2;1.5;30;9.6 35 | 265.6;20;0.3;17.4 36 | 95.7;1.4;7.4;9.5 37 | 290.7;4.1;8.5;12.8 38 | 266.9;43.8;5;25.4 39 | 74.7;49.4;45.7;14.7 40 | 43.1;26.7;35.1;10.1 41 | 228;37.7;32;21.5 42 | 202.5;22.3;31.6;16.6 43 | 177;33.4;38.7;17.1 44 | 293.6;27.7;1.8;20.7 45 | 206.9;8.4;26.4;12.9 46 | 25.1;25.7;43.3;8.5 47 | 175.1;22.5;31.5;14.9 48 | 89.7;9.9;35.7;10.6 49 | 239.9;41.5;18.5;23.2 50 | 227.2;15.8;49.9;14.8 51 | 66.9;11.7;36.8;9.7 52 | 199.8;3.1;34.6;11.4 53 | 100.4;9.6;3.6;10.7 54 | 216.4;41.7;39.6;22.6 55 | 182.6;46.2;58.7;21.2 56 | 262.7;28.8;15.9;20.2 57 | 198.9;49.4;60;23.7 58 | 7.3;28.1;41.4;5.5 59 | 136.2;19.2;16.6;13.2 60 | 210.8;49.6;37.7;23.8 61 | 210.7;29.5;9.3;18.4 62 | 53.5;2;21.4;8.1 63 | 261.3;42.7;54.7;24.2 64 | 239.3;15.5;27.3;15.7 65 | 102.7;29.6;8.4;14 66 | 131.1;42.8;28.9;18 67 | 69;9.3;0.9;9.3 68 | 31.5;24.6;2.2;9.5 69 | 139.3;14.5;10.2;13.4 70 | 237.4;27.5;11;18.9 71 | 216.8;43.9;27.2;22.3 72 | 199.1;30.6;38.7;18.3 73 | 109.8;14.3;31.7;12.4 74 | 26.8;33;19.3;8.8 75 | 129.4;5.7;31.3;11 76 | 213.4;24.6;13.1;17 77 | 16.9;43.7;89.4;8.7 78 | 27.5;1.6;20.7;6.9 79 | 120.5;28.5;14.2;14.2 80 | 5.4;29.9;9.4;5.3 81 | 116;7.7;23.1;11 82 | 76.4;26.7;22.3;11.8 83 | 239.8;4.1;36.9;12.3 84 | 75.3;20.3;32.5;11.3 85 | 68.4;44.5;35.6;13.6 86 | 213.5;43;33.8;21.7 87 | 193.2;18.4;65.7;15.2 88 | 76.3;27.5;16;12 89 | 110.7;40.6;63.2;16 90 | 88.3;25.5;73.4;12.9 91 | 109.8;47.8;51.4;16.7 92 | 134.3;4.9;9.3;11.2 93 | 28.6;1.5;33;7.3 94 | 217.7;33.5;59;19.4 95 | 250.9;36.5;72.3;22.2 96 | 107.4;14;10.9;11.5 97 | 163.3;31.6;52.9;16.9 98 | 197.6;3.5;5.9;11.7 99 | 184.9;21;22;15.5 100 | 289.7;42.3;51.2;25.4 101 | 135.2;41.7;45.9;17.2 102 | 222.4;4.3;49.8;11.7 103 | 296.4;36.3;100.9;23.8 104 | 280.2;10.1;21.4;14.8 105 | 187.9;17.2;17.9;14.7 106 | 238.2;34.3;5.3;20.7 107 | 137.9;46.4;59;19.2 108 | 25;11;29.7;7.2 109 | 90.4;0.3;23.2;8.7 110 | 13.1;0.4;25.6;5.3 111 | 255.4;26.9;5.5;19.8 112 | 225.8;8.2;56.5;13.4 113 | 241.7;38;23.2;21.8 114 | 175.7;15.4;2.4;14.1 115 | 209.6;20.6;10.7;15.9 116 | 78.2;46.8;34.5;14.6 117 | 75.1;35;52.7;12.6 118 | 139.2;14.3;25.6;12.2 119 | 76.4;0.8;14.8;9.4 120 | 125.7;36.9;79.2;15.9 121 | 19.4;16;22.3;6.6 122 | 141.3;26.8;46.2;15.5 123 | 18.8;21.7;50.4;7 124 | 224;2.4;15.6;11.6 125 | 123.1;34.6;12.4;15.2 126 | 229.5;32.3;74.2;19.7 127 | 87.2;11.8;25.9;10.6 128 | 7.8;38.9;50.6;6.6 129 | 80.2;0;9.2;8.8 130 | 220.3;49;3.2;24.7 131 | 59.6;12;43.1;9.7 132 | 0.7;39.6;8.7;1.6 133 | 265.2;2.9;43;12.7 134 | 8.4;27.2;2.1;5.7 135 | 219.8;33.5;45.1;19.6 136 | 36.9;38.6;65.6;10.8 137 | 48.3;47;8.5;11.6 138 | 25.6;39;9.3;9.5 139 | 273.7;28.9;59.7;20.8 140 | 43;25.9;20.5;9.6 141 | 184.9;43.9;1.7;20.7 142 | 73.4;17;12.9;10.9 143 | 193.7;35.4;75.6;19.2 144 | 220.5;33.2;37.9;20.1 145 | 104.6;5.7;34.4;10.4 146 | 96.2;14.8;38.9;11.4 147 | 140.3;1.9;9;10.3 148 | 240.1;7.3;8.7;13.2 149 | 243.2;49;44.3;25.4 150 | 38;40.3;11.9;10.9 151 | 44.7;25.8;20.6;10.1 152 | 280.7;13.9;37;16.1 153 | 121;8.4;48.7;11.6 154 | 197.6;23.3;14.2;16.6 155 | 171.3;39.7;37.7;19 156 | 187.8;21.1;9.5;15.6 157 | 4.1;11.6;5.7;3.2 158 | 93.9;43.5;50.5;15.3 159 | 149.8;1.3;24.3;10.1 160 | 11.7;36.9;45.2;7.3 161 | 131.7;18.4;34.6;12.9 162 | 172.5;18.1;30.7;14.4 163 | 85.7;35.8;49.3;13.3 164 | 188.4;18.1;25.6;14.9 165 | 163.5;36.8;7.4;18 166 | 117.2;14.7;5.4;11.9 167 | 234.5;3.4;84.8;11.9 168 | 17.9;37.6;21.6;8 169 | 206.8;5.2;19.4;12.2 170 | 215.4;23.6;57.6;17.1 171 | 284.3;10.6;6.4;15 172 | 50;11.6;18.4;8.4 173 | 164.5;20.9;47.4;14.5 174 | 19.6;20.1;17;7.6 175 | 168.4;7.1;12.8;11.7 176 | 222.4;3.4;13.1;11.5 177 | 276.9;48.9;41.8;27 178 | 248.4;30.2;20.3;20.2 179 | 170.2;7.8;35.2;11.7 180 | 276.7;2.3;23.7;11.8 181 | 165.6;10;17.6;12.6 182 | 156.6;2.6;8.3;10.5 183 | 218.5;5.4;27.4;12.2 184 | 56.2;5.7;29.7;8.7 185 | 287.6;43;71.8;26.2 186 | 253.8;21.3;30;17.6 187 | 205;45.1;19.6;22.6 188 | 139.5;2.1;26.6;10.3 189 | 191.1;28.7;18.2;17.3 190 | 286;13.9;3.7;15.9 191 | 18.7;12.1;23.4;6.7 192 | 39.5;41.1;5.8;10.8 193 | 75.5;10.8;6;9.9 194 | 17.2;4.1;31.6;5.9 195 | 166.8;42;3.6;19.6 196 | 149.7;35.6;6;17.3 197 | 38.2;3.7;13.8;7.6 198 | 94.2;4.9;8.1;9.7 199 | 177;9.3;6.4;12.8 200 | 283.6;42;66.2;25.5 201 | 232.1;8.6;8.7;13.4 -------------------------------------------------------------------------------- /WAS18/data/donnees_marketing.csv: -------------------------------------------------------------------------------- 1 | "Depenses_Publicitaires","Ventes" 2 | 4159.28653017168,20486.2621408124 3 | 4654.73376577508,21884.2912097929 4 | 7338.06247122369,31978.2269325177 5 | 5105.76258713686,25052.9374956971 6 | 5193.93160274142,20483.1092587234 7 | 7572.59748032492,34798.9393524135 8 | 5691.3743089838,27573.5743989218 9 | 3102.4081480902,24139.6391905673 10 | 3969.72072215971,23279.5586425813 11 | 4331.50704485006,22100.6025166262 12 | 6836.12269615919,36103.1503823938 13 | 5539.72074058605,32283.6142695892 14 | 5601.15717589108,24366.0478950929 15 | 5166.02407391768,26436.1361336639 16 | 4166.23829786889,22076.2210563424 17 | 7680.36970520462,33415.2114087219 18 | 5746.77571734386,27695.4126091692 19 | 2050.07426505554,13626.4218694285 20 | 6052.03385234553,28727.2807175217 21 | 4290.8128884081,26370.9333915079 22 | 3398.26444101973,19866.6133147896 23 | 4673.03762801256,23693.2594626408 24 | 3460.99332753914,23180.1239952924 25 | 3906.66315606329,23516.7819495558 26 | 4062.44109822612,18890.3336579158 27 | 2469.96003388638,17866.9940481835 28 | 6256.68056674179,32077.1361695808 29 | 5230.05967675477,28520.7317301026 30 | 3292.79459448208,20718.2869910747 31 | 6880.72238160489,32084.6087590405 32 | 5639.69633221522,24525.2185722683 33 | 4557.39277551159,24272.4414602975 34 | 6342.68849156753,27119.167604327 35 | 6317.20023129956,28035.5645577048 36 | 6232.37162245623,30568.3222349279 37 | 6032.96038115014,25825.0949200681 38 | 5830.87648030638,28026.4659426653 39 | 4907.13243413492,25578.0613813478 40 | 4541.05600439013,23732.9919528496 41 | 4429.29349848143,26932.2581391151 42 | 3957.93953161923,19829.1239377072 43 | 4688.1240829706,25276.632771783 44 | 3101.9054726476,19127.8552830415 45 | 8253.43394800777,34238.6373563555 46 | 6811.94299745749,31364.0114600772 47 | 3315.33712519498,17905.2101942171 48 | 4395.67274705139,20560.1164081173 49 | 4300.01696956517,21911.0891577287 50 | 6169.94767750448,32013.3573320243 51 | 4874.94640029226,24736.3687501018 52 | 5379.97777099213,26802.8021094322 53 | 4957.17986697695,24491.8463255758 54 | 4935.69431406303,25748.0684060967 55 | 7052.90342602169,29255.3511920308 56 | 4661.3435215111,26299.8514976706 57 | 7274.70590664431,32993.5282404156 58 | 2676.87079365467,16417.7067355806 59 | 5876.9206244541,27739.8683649863 60 | 5185.78136576692,26990.007336299 61 | 5323.91235311596,27087.1990234571 62 | 5569.45922413982,29672.2457041732 63 | 4246.51482033605,21513.5689512184 64 | 4500.18892449587,25732.8400044684 65 | 3472.13692533937,22489.5067959005 66 | 3392.31316028663,19851.9732170542 67 | 5455.29296210639,24414.0255006754 68 | 5672.31466794414,24838.6536220634 69 | 5079.50634009576,26154.0929361772 70 | 6383.40120181961,29007.950138017 71 | 8075.12702844072,37783.586419025 72 | 4263.4532509152,23860.635673738 73 | 1536.24668653878,13864.8503092894 74 | 6508.60778669338,27474.7388630859 75 | 3936.19885612641,20643.7932191687 76 | 3967.98707529896,22589.7380116916 77 | 6538.35705454505,28713.2018695218 78 | 4572.84048942349,24746.9817087318 79 | 3168.9234316182,18838.094190515 80 | 5271.95521962373,25604.7458412822 81 | 4791.66295634143,22913.9695234086 82 | 5008.64627884983,28836.0260063669 83 | 5577.9206016895,27399.0052680093 84 | 4444.00995231139,23793.2971379331 85 | 5966.56482277825,24515.9696385666 86 | 4669.27015727187,25327.3942709143 87 | 5497.67294587355,24445.7716598612 88 | 6645.25851972402,28152.7324104635 89 | 5652.7722362507,28794.9990507954 90 | 4511.10262170316,22627.906572093 91 | 6723.21142767664,26672.8897230236 92 | 6490.25578394318,33010.5755716082 93 | 5822.5954392621,22712.9724670013 94 | 5358.09760266716,27219.9158677207 95 | 4058.14088594094,24208.921155992 96 | 7040.97867279501,29861.000285064 97 | 4099.61061927931,23187.405960661 98 | 8280.99948952486,35721.2592453517 99 | 7298.91593927778,33977.9941236624 100 | 4646.44946134928,24907.5471599529 101 | 3460.36864953983,19891.3383904344 102 | 3934.39015445105,23635.1545792336 103 | 5385.32556373479,27757.2214042239 104 | 4629.96218230644,22016.7484786477 105 | 4478.6861009034,20634.4834347187 106 | 3572.57214910248,21038.2715272938 107 | 4932.45841278662,24249.4504888095 108 | 3822.64329581439,19496.8516623186 109 | 2498.0870951178,17662.1226443835 110 | 4429.66021956836,20648.9876057313 111 | 6378.49491359115,29457.9374434258 112 | 4136.97955608741,21161.0818931784 113 | 5911.94648333755,29650.1679983976 114 | 2573.17593756625,22568.5060950218 115 | 4916.65705171319,22918.012667766 116 | 5779.11080591519,29452.6607596315 117 | 5451.73004325007,28005.4895852868 118 | 5158.51429122342,25335.1544250595 119 | 4038.94098754194,21209.5302145118 120 | 3725.44348094963,24326.9458565238 121 | 3463.80681409263,16380.5048058054 122 | 5176.46989565019,24243.0201037632 123 | 3578.7880787228,17862.6773488528 124 | 4264.163834449,25583.1183812391 125 | 4615.86171170263,23466.1782698182 126 | 7765.79300784831,32248.0366246056 127 | 4022.07514745681,28434.3143905031 128 | 5353.07985842729,25959.1650395066 129 | 5116.94127434557,24463.3251993037 130 | 3557.21504880481,21271.3756466867 131 | 4893.0378708146,21542.2643709339 132 | 7166.82628763502,32481.0841482492 133 | 5677.25607961882,26839.4418366965 134 | 5061.84938298941,26122.5983940285 135 | 4366.25475149056,21134.022982596 136 | 1920.12916768923,13714.4198187718 137 | 6697.00582012126,28704.1881338114 138 | 2809.03989361277,16891.1405346527 139 | 6109.921266316,30927.8637323152 140 | 7863.65535382623,36749.2571850949 141 | 2834.1602585423,18188.6968695488 142 | 6052.67650306207,27440.1563880168 143 | 4606.7037658963,23162.0336368456 144 | 2641.78376128177,18063.8242395513 145 | 2727.99851932737,18377.8040253842 146 | 2597.69573963811,18373.1559944455 147 | 4203.64021674455,21117.5627681411 148 | 2807.36662250615,16728.3070898778 149 | 6031.87515946374,30489.7808058834 150 | 8150.16341078851,33353.2355101589 151 | 3069.45428594723,19814.4542482926 152 | 6181.60827121277,28430.8837460316 153 | 6153.56336150136,26544.9913002028 154 | 5498.30386842518,27677.0354240985 155 | 3487.43508758449,20808.5150097394 156 | 4820.82109005401,27262.0299825871 157 | 4579.40699724463,23973.1401609879 158 | 5844.48429983072,26870.3613830905 159 | 4441.34186584426,23880.6154241435 160 | 6465.46008002843,27025.1969420146 161 | 4438.12871334948,21642.5980332612 162 | 6579.067198369,30757.7480973859 163 | 3426.2344900009,19612.4616675548 164 | 3109.76713286283,19197.3795058836 165 | 9861.55990241361,39354.2362883969 166 | 4374.71361775935,21823.115615729 167 | 5447.34138731107,22304.6468437684 168 | 5954.85451105077,28562.2334735055 169 | 4274.32906143688,24346.2661996044 170 | 5775.29306647041,24748.446728711 171 | 5553.44679107763,29625.1458101501 172 | 4676.92923853746,24801.0973629868 173 | 5097.93955028797,27977.0992408517 174 | 4948.8991193923,22932.3564156923 175 | 8192.67784852427,34911.5961222813 176 | 3887.99585559076,21463.9596488947 177 | 3356.005599388,21605.0316619276 178 | 5056.68259875662,24018.3286604445 179 | 5465.72112416471,26376.9680285892 180 | 5654.78521836527,23407.0373576079 181 | 4312.45200093334,21382.113117059 182 | 3405.01079904321,20465.1001644599 183 | 6894.77776413424,29271.6903076263 184 | 4475.52441806967,23339.434282586 185 | 3701.73070601994,20169.3401702094 186 | 4645.58064658836,25150.602212088 187 | 4704.23615847717,26449.6850929306 188 | 6664.88043457046,28349.6384780963 189 | 5127.10593829579,24767.2446976979 190 | 6131.08067777678,31272.7645500698 191 | 4251.06197424161,18355.3394143574 192 | 5321.6679643724,25325.3283096357 193 | 4512.97113276375,27668.3219665779 194 | 5141.87529226036,29812.8060149096 195 | 3656.95496303369,21284.0555358014 196 | 3033.79770000804,17374.1751987968 197 | 7995.82007712195,34318.3750703467 198 | 5901.06323550863,26397.6409146318 199 | 3123.09295756258,22274.9134372707 200 | 4083.25112497937,20636.788063532 201 | 3221.77987310403,20411.1628097296 202 | 8298.21552332558,36134.3467191141 203 | 6968.61946465027,29390.8380725591 204 | 4602.28241495547,25509.8966078788 205 | 5814.79108884813,25948.5133247118 206 | 4378.49007812171,24395.9498936731 207 | 4285.62965807663,25050.212240437 208 | 3817.09574322464,19474.4013849075 209 | 4108.07409881073,24540.2123783914 210 | 7476.36120100503,31450.0178605903 211 | 4918.95781237184,25345.5802139895 212 | 5178.86785464138,25940.2785085017 213 | 5365.53114439864,25242.2006605195 214 | 6848.71381772801,31082.3471931796 215 | 4225.90425358283,20216.8509099008 216 | 3511.23927441194,20261.4440788659 217 | 7513.54539860479,34192.2178591447 218 | 4338.25517464207,18666.5162254676 219 | 3915.40104509019,18770.3507605541 220 | 3145.59032167506,17112.8958498312 221 | 3072.9264165233,16040.5998612791 222 | 4139.03978105302,23256.2854217518 223 | 5926.97872574979,25795.0794777374 224 | 6664.77220839458,25665.2224545258 225 | 6061.38253075338,26909.0100620992 226 | 4454.51405435712,22582.2716601218 227 | 5089.6249060769,26982.4456657869 228 | 3943.1053044799,19621.811641442 229 | 3924.17275763898,24095.0967843943 230 | 6326.97574846538,29777.6526766533 231 | 3476.61113209468,21154.5377115551 232 | 7932.9409482387,32093.7715040871 233 | 4864.52060905122,28500.8975869497 234 | 5321.80823994382,25636.8830556372 235 | 3892.20844289064,18026.8301603153 236 | 4138.4169653551,22007.5379532803 237 | 3024.47580154214,15204.5392631623 238 | 4725.61191744091,23555.8155207494 239 | 5628.4736073867,26040.9668157809 240 | 5486.45651624207,27823.028929533 241 | 3827.69526941787,23502.0781797286 242 | 3817.067043719,19998.9912013547 243 | 4246.70192248571,24352.3235042072 244 | 7244.09100476953,34580.9192336461 245 | 3294.04456900138,18313.8456973189 246 | 4731.4226084297,22889.4590922904 247 | 7853.54273251839,34862.1849238625 248 | 4848.53767200679,24911.7089559082 249 | 2960.23894426791,19978.2667536923 250 | 4002.84584708891,24817.9061303618 251 | 5728.18996835732,27958.7361442247 252 | 4436.59569249534,25413.1896178368 253 | 4157.18545467533,23717.3672887004 254 | 4484.12414880731,24319.6132260396 255 | 5135.74497070883,26179.4037884953 256 | 7397.76315671874,34775.9360790724 257 | 4867.15233179167,22596.9372479537 258 | 6621.19924422728,27653.2322743668 259 | 5946.13117347585,29022.285527222 260 | 4829.54015674079,24249.2411419561 261 | 2700.6469956641,18249.9514103622 262 | 4218.32402367122,24137.5268253565 263 | 4265.19432029229,24302.173056575 264 | 5070.73164914229,24686.8539407033 265 | 6950.29801650023,30225.8063115065 266 | 8439.61846074664,35466.0526002557 267 | 7321.37158847565,34090.1503440165 268 | 4800.27355350658,25252.8616338778 269 | 2365.20890666354,19961.641741637 270 | 4416.83020389238,23235.2168708372 271 | 5133.81083460994,27652.7677142713 272 | 6267.51950610115,30568.563140338 273 | 6443.79195272641,30555.5427799794 274 | 6026.4641441247,28908.793845931 275 | 2907.0884753008,18161.5006316174 276 | 6274.46456845003,28605.3186870116 277 | 4330.16417535917,23449.2835174944 278 | 5262.20405024188,25884.3899320842 279 | 5111.8267657606,27221.9292340542 280 | 5642.25014745576,26708.1161959944 281 | 5037.01247423921,24970.283579542 282 | 2498.78735362151,16527.7238857332 283 | 6104.74394716016,28037.5591843938 284 | 5579.03985252451,26599.5882729659 285 | 4601.52256208267,19177.0961384492 286 | 5177.21676657002,22801.9869052814 287 | 5201.0579680527,25458.2000842542 288 | 5331.5292028415,25464.0200587955 289 | 7461.26924896623,29982.0690904838 290 | 4671.42443159979,20031.1969427133 291 | 5252.09807582699,25047.5557876541 292 | 6752.57580960364,31564.7189601995 293 | 6581.27153506538,33290.2918690513 294 | 6717.89466557054,30076.7704092929 295 | 4133.79799841067,25387.7636764874 296 | 8003.72409543924,34177.2166015897 297 | 5100.05130639527,25531.2181277049 298 | 7800.27776706029,34050.4839278784 299 | 2973.64597095393,17179.78342234 300 | 5031.47537953136,24990.9897128043 301 | 6874.87185645382,32441.510966946 302 | 3927.13671916581,20281.958583793 303 | 3870.96654767339,20969.6875032442 304 | 3592.19194458966,18481.0343328505 305 | 3421.2300809919,20972.3946358744 306 | 4344.2607002294,23882.3816654662 307 | 5496.76875943847,27787.0009807636 308 | 1978.68425311892,13496.432696323 309 | 5317.97065005844,26168.3820196848 310 | 6855.01256962486,28676.9223255749 311 | 8056.36102736065,34168.3137846499 312 | 6951.76398830088,33540.5398049148 313 | 6135.16214569394,27398.4358632133 314 | 2409.90440132851,18663.0798458632 315 | 4097.73993798983,20793.8826458021 316 | 4471.93031512607,22458.7345244776 317 | 6055.28585413534,29043.3010635793 318 | 4841.49299899434,23166.2544560673 319 | 3112.02705790974,15930.1515034384 320 | 7526.65356214117,35110.2975568502 321 | 6367.08693769394,29821.9752888415 322 | 5356.14540873654,24901.1573450894 323 | 6827.16291548872,26493.331171805 324 | 2991.83856914754,22779.9352502412 325 | 5991.2304466847,34754.4329825972 326 | 4215.63143552987,23061.8551213005 327 | 6025.61828277607,29776.4681433506 328 | 4908.76706800989,27175.421828178 329 | 5949.44106954718,26444.7143415643 330 | 7003.27642258909,30307.4368086542 331 | 5010.93513547535,21578.5633331357 332 | 6526.33795542814,28105.8574017407 333 | 3217.34894727803,20896.8664076063 334 | 3917.59333934598,21171.3480395562 335 | 7278.82656708227,31408.0566328806 336 | 5566.08195953589,26473.1267756027 337 | 1921.66576934941,12037.663343057 338 | 2953.94382187644,20537.0913340927 339 | 4698.82847661632,21209.4996519781 340 | 6298.66910650173,28478.8669946739 341 | 4847.17511642717,23664.3984251638 342 | 5936.28120803098,27371.6559903805 343 | 6438.50806668174,32235.4560895168 344 | 7506.58224329441,31355.6268940525 345 | 5084.02509991244,23685.8801083135 346 | 4922.02714072865,21726.7734322983 347 | 2370.1439612866,15499.0357206373 348 | 5148.99139113174,23114.6047586597 349 | 4142.22491315666,23242.5671319666 350 | 3538.98562579386,18890.9483853658 351 | 4730.14065342869,24798.5060303423 352 | 6522.41475911549,29274.3893016506 353 | 2010.87726696713,13165.5074410798 354 | 4359.08106919186,21496.0276361302 355 | 5174.95592537406,27295.0926862375 356 | 3660.18864491757,22786.7181066618 357 | 5500.85441374884,30513.7097898478 358 | 5617.1448809236,26844.2740259712 359 | 4950.44576108601,21859.6836552938 360 | 1301.15270935996,12366.6240740496 361 | 8857.18721879996,37388.5386660802 362 | 4692.0511137977,27876.4260111825 363 | 5976.78992238151,28150.388014024 364 | 5410.64973655482,28512.7228599214 365 | 6537.00985222753,31147.1921660671 366 | 6226.48916956113,26343.2842644487 367 | 4685.31024315724,23713.705424942 368 | 5567.25165831276,29312.2780476336 369 | 3581.88675331416,22497.8524791343 370 | 6285.38451634898,29783.7458321825 371 | 4308.44249167347,23879.5559657742 372 | 8625.16003068232,34892.6694916281 373 | 2523.42665646772,14931.5093427148 374 | 4304.01913555098,25502.9089883155 375 | 6238.06979413886,25873.7703990827 376 | 5765.198820318,25417.8046215423 377 | 4115.7784422275,23605.2653117222 378 | 3504.82888668872,17990.0975612869 379 | 5216.71355706604,24546.3998446525 380 | 4978.53888024963,22570.0176271839 381 | 2314.57814410391,18185.0615477696 382 | 5051.82660070078,26048.1058353785 383 | 5285.34547353869,26699.8058071634 384 | 5262.08959547276,26671.1983307096 385 | 3417.47443609598,21366.9148010458 386 | 5714.19991745394,28421.3127363029 387 | 7067.85520543886,27266.2425029681 388 | 5684.35460476972,26755.4310915894 389 | 3296.61729443849,20114.7795084193 390 | 4346.53179546214,24488.9477916819 391 | 5519.15542933041,24182.4941359807 392 | 4029.4315530226,21089.094279436 393 | 1763.53049747708,13143.3055109289 394 | 6326.37623004231,31093.6091155463 395 | 3755.78358256322,23825.4959141083 396 | 4139.65959384758,23994.3322322612 397 | 7255.8509135068,29322.7459753664 398 | 3838.78260559189,22420.252050249 399 | 6268.59731028394,31106.6903036137 400 | 3108.97568177184,19662.8090067884 401 | 4468.18639538903,22272.3405203752 402 | 4889.66597129528,22496.7614326631 403 | 3247.02286336347,18410.4629989701 404 | 4047.87760263664,23573.3295198086 405 | 4956.73767060753,24006.8908110587 406 | 6006.0439531009,28473.3617391829 407 | 2524.18018486234,20162.4321459276 408 | 4475.3686411831,24582.7758044882 409 | 6134.60965781823,31133.1745364018 410 | 4191.78626003361,19172.19917478 411 | 5340.93788250941,25461.4610881007 412 | 5738.34285509665,27345.1646042743 413 | 5401.75252299752,27362.4361522096 414 | 5979.88651920707,25601.2463145633 415 | 4815.93700853393,26060.1807364964 416 | 4379.48522961182,23753.2358411601 417 | 1035.27657195653,13633.441743079 418 | 4860.58847228079,25598.7350000525 419 | 5645.42704453998,26703.564253866 420 | 5803.09826130223,29260.3869809049 421 | 4167.08247303012,23797.7069665533 422 | 7669.25436466272,32707.3443456528 423 | 5429.63662944324,28369.6639270111 424 | 5189.47378768833,26153.5387329573 425 | 6908.40016920278,32062.7033064873 426 | 3922.30066802111,20578.5467208149 427 | 4324.49206411293,26134.3398663106 428 | 8596.17872007464,35780.558271524 429 | 5016.69378083133,26745.766880281 430 | 7450.35263211246,32150.824844552 431 | 2842.24003262822,17967.4602839234 432 | 4714.22479693565,25711.550881367 433 | 5567.63585545525,23533.6742771834 434 | 5450.0578178087,27306.9057490142 435 | 3491.54561073374,21261.7695781909 436 | 5028.88891193806,19696.0079975651 437 | 3383.86902033203,20888.3617180626 438 | 6069.05498786642,23870.3294689053 439 | 6627.16263479097,31201.0966581583 440 | 1662.51845526888,14079.7278990443 441 | 6853.54019345022,29170.7469298809 442 | 3138.43325478726,19401.6071580165 443 | 5682.15390347395,29792.5658003898 444 | 5989.85395721391,26698.915717206 445 | 4700.16525784785,25216.7023614411 446 | 4032.32906471031,22779.3029309747 447 | 5247.98153186308,23384.9073373061 448 | 5658.22805107168,23492.6401185471 449 | 6324.95422992306,24989.6911472909 450 | 1921.49452414707,16867.031995377 451 | 2545.43109791146,17566.8091706718 452 | 7145.60351178227,35137.9539425681 453 | 6569.94327066732,30857.180028528 454 | 5652.93342336152,28658.1920522498 455 | 6072.76761066659,30887.0700026697 456 | 6375.7623764615,28125.8489334546 457 | 1008.61580230148,14046.0432633614 458 | 6665.41564495823,31733.833475363 459 | 4272.51860515651,25556.2591914756 460 | 5345.9252459468,27563.0780304931 461 | 4557.26329867463,24514.0842420986 462 | 6307.94743111812,27187.3941988119 463 | 4477.29132656658,24890.9947016151 464 | 5777.75564883237,28333.7986913337 465 | 4413.97253204153,24510.4181035384 466 | 3360.81918634774,20929.7476501877 467 | 6815.0157656604,30041.3712075612 468 | 6111.35001691141,28180.3182538662 469 | 7586.39335873468,34133.9083027671 470 | 5097.73089886895,25636.4557104559 471 | 6687.50411874226,28402.2952075728 472 | 7963.12858102862,33309.0675034745 473 | 4577.77682744155,21095.0790339716 474 | 3015.57333086718,17112.6561872637 475 | 4640.97264929283,23633.6958076074 476 | 4678.93814002193,20440.5493073159 477 | 5227.52075676398,22305.4773211088 478 | 7568.45746597892,34910.5027968089 479 | 4510.78416124198,22379.1146353031 480 | 5559.50698370737,22975.1374920191 481 | 4658.4739026567,23749.6952291122 482 | 5030.67606278755,27734.1667228057 483 | 5471.08649525939,27737.7680796475 484 | 6992.32204405548,31859.7325288737 485 | 5181.97756623617,27913.4245232682 486 | 6069.26348004667,26664.7875579382 487 | 6168.2900446753,29964.24851673 488 | 6372.15990628345,27942.3084872926 489 | 4138.40817172342,22416.7528878953 490 | 7440.32182129202,36749.8961025563 491 | 4428.56489105898,25224.5634645955 492 | 4841.32374852537,26059.9866730105 493 | 7106.07540157126,29101.5703810775 494 | 6941.12585921837,29250.9057376657 495 | 3365.01219138314,24663.2695346726 496 | 3690.3934993738,18884.5789701748 497 | 2962.88141094408,19317.6029834024 498 | 5272.77078892975,27603.4544860634 499 | 5247.2613018777,27779.2998503176 500 | 5546.17203103259,28816.7401149363 501 | 5828.23657132784,27158.4517342131 502 | 4097.16073102248,20649.5087988274 503 | 3509.45211335193,19913.8418740785 504 | 6540.17758411236,27816.3367352581 505 | 6126.59195390948,29633.9133479584 506 | 2736.25019400695,20449.4606388731 507 | 4857.27882372607,28826.2635761653 508 | 3656.07826586525,21700.4635634592 509 | 1893.87339418705,13932.0574281738 510 | 5225.18019678221,27724.4903163331 511 | 4881.18243611212,26453.065095727 512 | 4853.94609873038,24085.3409043855 513 | 5324.22881270185,22856.9766303609 514 | 6323.69774659488,30493.7130305725 515 | 5308.39625672508,28183.4775614585 516 | 4075.34623568971,21635.8230456573 517 | 3897.80112211808,22765.8890030703 518 | 4802.29581043823,23855.1064818137 519 | 5465.02547986843,27759.7069298803 520 | 3440.47947094694,20086.8569834111 521 | 4723.53669673642,23481.2583623691 522 | 6450.90089025187,29575.94366715 523 | 4837.57986314827,23945.9289594802 524 | 3952.36899860841,20675.0726669167 525 | 4586.08224736169,23126.3728796003 526 | 6671.97281804297,29999.6141494778 527 | 5825.0659418212,27890.1881069006 528 | 6855.01370012241,33629.8883436189 529 | 5208.64678574266,22909.944695321 530 | 5615.41264473564,26446.999833101 531 | 4162.3146314778,23749.9901499951 532 | 5908.0560033955,31248.2098170722 533 | 4240.49968671614,23573.5277853794 534 | 2869.15174295638,18579.9483959183 535 | 5191.98944852619,24960.8545263858 536 | 7918.77682659715,34584.946808008 537 | 6201.37150935959,30582.2303684716 538 | 6747.88008491939,29875.9236336661 539 | 5538.28358463973,26942.3735676123 540 | 4087.16423252566,22695.3653858658 541 | 4696.63871733457,25548.471420423 542 | 4590.12783978211,25993.1443333957 543 | 4296.95033032687,23449.1726248599 544 | 6056.25092589457,28016.4114345894 545 | 3203.95474645188,22401.1905037728 546 | 6299.54919816916,29227.7158297187 547 | 6296.22872933884,32044.3901456035 548 | 3202.06646139688,19482.3540689515 549 | 5959.2379968508,29105.5599189398 550 | 8645.33997851676,32843.8427470598 551 | 4164.17677708759,22267.7464085879 552 | 6267.35636211211,28758.4800064146 553 | 3826.6972315709,19963.4008598796 554 | 6666.0671273042,27926.415613068 555 | 5374.73707988984,28020.5298447732 556 | 7477.87308743475,34261.9367301597 557 | 2811.54390719463,15837.167731891 558 | 4923.05317081196,25617.9171023046 559 | 4209.6122358116,20403.7460675246 560 | 4704.10269638555,22010.1616367935 561 | 4055.63188597099,23217.7205544457 562 | 3749.2346291975,19875.6558874064 563 | 5868.08356192467,29591.2106500184 564 | 3368.62892888461,20182.9339848045 565 | 7226.04639733442,32750.4371435747 566 | 3220.69012202937,18614.8169703158 567 | 5151.61872709292,23152.4135113916 568 | 5799.48393023972,29227.9562727247 569 | 5880.10300863894,28116.4520090422 570 | 4547.38000420043,23164.0044936919 571 | 5119.2529929926,25496.2296320693 572 | 6441.89622771452,31977.505368342 573 | 2815.30112438536,17049.5701039159 574 | 3827.39043270188,19983.3544091793 575 | 5480.60347147492,25202.58030901 576 | 4332.82703249451,19828.4985610638 577 | 7055.0059909565,32804.274247877 578 | 6009.88079503225,28414.3816785853 579 | 5108.25012862213,25739.0943343023 580 | 2738.36402369498,18128.3973623896 581 | 5039.15033798936,24097.1301311199 582 | 4525.37619770451,21929.2913655611 583 | 4846.4802297191,26243.1534957427 584 | 3227.66115941647,16830.6141324091 585 | 5747.98706574489,28124.5590811655 586 | 3441.56533953945,18739.472717103 587 | 4660.66702783639,24546.6215126001 588 | 5572.13874417703,25235.0351881508 589 | 3824.72631648043,20427.4955840732 590 | 5874.4871085201,31162.1931596143 591 | 3025.23439752246,20412.2684304344 592 | 785.337981559188,8066.21989612625 593 | 5697.45198617878,27345.180790737 594 | 6260.8097404415,27878.80334881 595 | 4571.23186461292,21440.4432182834 596 | 5756.18938188741,27688.1399265246 597 | 3266.12521237449,20058.3066691622 598 | 4809.27708976151,23770.8181241484 599 | 2087.72243593907,20208.5744424921 600 | 6771.77133715778,25817.9338778402 601 | 7789.86629231474,35046.0376515012 602 | 6611.01839042299,29255.0086303438 603 | 4958.97955037939,26189.9654722969 604 | 4950.00448658612,23942.018058481 605 | 2725.89856527335,16989.9665709299 606 | 6185.57801583234,25135.9747147078 607 | 4683.89872896234,23632.7993303415 608 | 4014.88561195839,27002.1484385893 609 | 2881.96131101254,20625.2883492963 610 | 4550.35625503059,27002.2130767454 611 | 3726.40829747494,23009.1555290529 612 | 4404.45421950824,25501.8880744484 613 | 3173.6000183546,21326.552884062 614 | 7531.38422441855,33544.9375367858 615 | 4975.99620918805,23762.9310795701 616 | 6612.41761590858,28771.3833730788 617 | 1097.45049461352,10090.67149109 618 | 4320.20325500774,22948.9743372632 619 | 3986.77656261189,23759.0410395491 620 | 3165.61073095113,21560.6773059055 621 | 7319.91373133614,32150.0066029193 622 | 2877.07712034576,17535.9761265935 623 | 5477.58539061204,33013.7910584732 624 | 6269.65442836954,30282.3343476095 625 | 5267.28528262703,28643.0064576394 626 | 3687.11678375673,20385.9890699355 627 | 6411.74871008625,29159.3308761496 628 | 5255.88212276126,26664.8605636972 629 | 3404.75314042693,23567.3040451774 630 | 2917.92642859691,18130.8301948785 631 | 8130.07615173972,36097.4597887853 632 | 3982.24528187234,17757.1065769766 633 | 2216.64251912294,15635.4186892056 634 | 5799.88904413048,24815.6489788648 635 | 5465.34538409134,28622.7615869882 636 | 2969.2484964161,18578.8393126878 637 | 2085.56537962707,15475.9479748677 638 | 4825.54622426209,27214.8383651834 639 | 6709.09443756413,32359.8290291725 640 | 5954.18605277322,26066.5157513847 641 | 4260.59386375703,23637.5145664904 642 | 3748.71765262343,18789.2638208458 643 | 5406.60013512582,25268.5703569551 644 | 5236.03002082424,28941.2453367666 645 | 5944.56762003909,30733.9587627782 646 | 4406.30307456666,25436.9467346336 647 | 6349.03107980465,27905.2854667533 648 | 3753.78270899563,17498.4851864358 649 | 4504.18294982006,21161.1524814118 650 | 6111.22178558886,30238.7784060216 651 | 6484.95741294067,28873.7364664918 652 | 2092.24294781993,11951.5125523238 653 | 5160.78561052423,25121.9818561398 654 | 5913.16851760194,30559.983995055 655 | 2823.76352976405,19758.2278703312 656 | 5720.93839981283,25520.2981123796 657 | 3757.7385944048,18181.3824790844 658 | 6530.37951824664,27938.0441034664 659 | 5807.72304815396,27492.2244871049 660 | 6153.57844249341,30236.8827293044 661 | 5181.07899393055,21663.3566722111 662 | 6295.47265123663,30932.8214642581 663 | 7070.77179247181,31223.2308305915 664 | 7949.37202318345,34987.674008762 665 | 4957.4074178764,21565.7111271595 666 | 1626.42336450139,13545.9613332598 667 | 5047.28900689099,24245.3986421419 668 | 5308.34181267496,28012.8081346429 669 | 4766.9819792834,26357.294032641 670 | 5852.43293116561,28427.4797119935 671 | 6516.0169467714,32756.475203562 672 | 4223.02635474827,21638.2566647541 673 | 4558.85700926583,25701.6454153454 674 | 5596.76331320051,26718.4098800201 675 | 4174.66438776629,21189.3089709461 676 | 5136.90107523235,27257.4633023587 677 | 2057.43860167205,18934.5164667151 678 | 3320.15041790356,21716.9520860804 679 | 3008.36678659381,18006.2934489369 680 | 3719.56445490914,20219.1180964172 681 | 3960.043208104,24635.481317924 682 | 5573.45771381955,27426.0259542942 683 | 6473.16950378396,31078.6564699941 684 | 3908.9247063687,21049.3701517775 685 | 3504.74152643299,23036.2944522283 686 | 3437.46671151574,18694.8898446228 687 | 4378.11691045449,24385.0537730967 688 | 4641.45639777115,22290.0192621772 689 | 5725.4263007574,22251.1288691007 690 | 4518.01273674742,20868.1231888829 691 | 1882.26609670997,15919.3886885502 692 | 4862.84858667479,26354.391259276 693 | 6780.78021597733,26839.7364817424 694 | 6787.40190276549,27859.3567704574 695 | 3816.55517283316,24978.7575116504 696 | 2678.33518454364,17167.2068539844 697 | 8687.09073779791,37072.6724772549 698 | 4756.36708628087,23215.230616088 699 | 4853.82312484157,23964.3036042217 700 | 5630.86128304722,27067.0722623521 701 | 2578.94081507132,17758.746130812 702 | 3907.67133321307,21337.8935775551 703 | 2689.33639206499,17128.4162059075 704 | 3960.35807898411,15785.3524573549 705 | 5178.27414950684,29272.1334491879 706 | 2952.93581301963,22439.655855545 707 | 5884.97401905097,25452.7585737144 708 | 5434.016043226,25965.8330854581 709 | 3643.67746156904,23681.5829941321 710 | 5339.4874135716,28015.0422868192 711 | 6122.12174374076,30919.5684687138 712 | 6591.64287989261,27631.4348033582 713 | 4680.72758203021,29196.7189384866 714 | 4859.54480913343,22311.7145078596 715 | 4869.92879752711,26117.6190763479 716 | 7162.19263408257,31769.1298631391 717 | 6687.60783841699,29255.4028793269 718 | 6251.60235163556,27995.9754585446 719 | 4568.98880023896,21724.1727756549 720 | 5559.86215124961,29924.9060452624 721 | 5604.93549683104,26993.8329460186 722 | 3437.49005856602,20830.9060741268 723 | 2407.54322701889,17641.8953471787 724 | 5962.74504147742,27137.8936183105 725 | 2706.03420322937,15850.060120178 726 | 5002.52553272631,25515.0292175469 727 | 5375.3717320225,21938.8362961496 728 | 5845.80108545882,24700.2693707052 729 | 5284.13935627222,23699.6246789399 730 | 3900.71929055431,19544.8001463182 731 | 6479.54878984319,29653.0240026637 732 | 7607.95065035937,36020.8270477276 733 | 6321.76821338816,25934.6563520346 734 | 2084.52364801404,17120.9229852353 735 | 7099.36427810442,33097.1823409553 736 | 4915.9160807206,22768.683837584 737 | 5787.37141897894,27256.5154538918 738 | 5933.04985380659,29446.3713666639 739 | 4854.97089018994,24053.894465475 740 | 4887.10520352691,24219.9469160783 741 | 6528.73560399635,30201.6603944103 742 | 6067.40288372937,28082.1821445216 743 | 6485.39336906635,28344.8743273206 744 | 8574.39004284549,35445.9400896147 745 | 5996.62379554113,31755.5509713963 746 | 5311.07173607796,27680.5525674459 747 | 1684.05033413657,13222.9568567545 748 | 9037.57100486917,34622.8777699449 749 | 4275.98476730554,22107.9898205514 750 | 8562.10207264309,38343.8556198252 751 | 5561.96535200748,27271.2542928563 752 | 7307.64529834519,30519.9254213543 753 | 4835.43451823564,26270.772690343 754 | 5767.20613204719,27034.8776186958 755 | 5320.93696946339,23721.4539098073 756 | 4720.81895093976,25084.8417612428 757 | 4819.40926306626,27506.5134095564 758 | 6519.25150376638,30426.6911075648 759 | 4697.81277954275,24477.4390809061 760 | 1943.4762583388,14517.9425181823 761 | 4706.16612675526,25255.2954420048 762 | 5809.68590830441,25287.9166551325 763 | 5924.68357452716,24467.7526746197 764 | 5924.85172621615,27687.8496416609 765 | 2461.84771869638,17316.3561444911 766 | 5553.11308701679,31389.450325056 767 | 6451.7888149206,26922.671828978 768 | 6914.86802220148,31086.4167133025 769 | 4662.55809343383,25597.7804675459 770 | 4517.1611207258,25652.6690504092 771 | 7231.75674781706,31673.8212741325 772 | 2498.10793133102,16007.8115111346 773 | 4344.75503463031,22902.697000151 774 | 5686.19311903618,30938.0913409829 775 | 2573.33935192816,18685.4960721361 776 | 5419.44179364764,22169.3712358268 777 | 7816.79603157829,36297.3063520354 778 | 4993.90901984549,26062.7323813666 779 | 4582.31896255462,23679.8133439888 780 | 5712.36757105108,27101.375470933 781 | 4581.39174381904,23444.5957918703 782 | 6220.1005611186,29173.4206452663 783 | 6356.65319667454,28062.2257239496 784 | 5004.03749184518,25566.1349788556 785 | 3234.96176337541,17842.1732404847 786 | 3022.66890881137,19468.3004769836 787 | 4110.50395151702,24545.186695884 788 | 6196.07075082475,29606.6244797819 789 | 2062.69223801461,18255.5760669461 790 | 2170.51226190118,14329.7992620983 791 | 4019.33026285985,22167.5763575247 792 | 5591.59227197088,28009.2774213568 793 | 3629.65092775251,18752.943047791 794 | 6330.12355564409,32121.9993410492 795 | 5500.05495523277,24430.5488437278 796 | 4744.04057264208,24561.1591349379 797 | 6228.24220479767,28988.3912751032 798 | 5582.54774422905,26990.9838366209 799 | 4331.09745918177,22572.4432102584 800 | 5346.67240162724,26939.8907791741 801 | 5971.27003696639,25851.4811271042 802 | 5534.42501729307,24024.5466754328 803 | 4012.98468807578,20729.8167880009 804 | 6282.80330759629,28733.7617150933 805 | 6729.40433833792,32701.7086557279 806 | 5414.411834815,29418.1437841741 807 | 5216.15699369328,26287.4339061693 808 | 4886.56237883024,25422.870381877 809 | 8242.12376945418,34239.0815410837 810 | 5414.47329820369,26339.5260627171 811 | 4762.55895695008,21478.5851486467 812 | 1238.12329670412,14294.2373479039 813 | 2652.0773524542,16885.1248927751 814 | 4883.49019908415,25319.8281434536 815 | 5309.44106726465,25236.3605234849 816 | 5415.30868829242,24922.6945952044 817 | 6232.26017067293,28258.5577584147 818 | 4708.77138601932,23392.5043367905 819 | 6821.88319172384,32654.8059908563 820 | 3617.72593569563,21271.5939719612 821 | 3187.3359193354,20426.9906103126 822 | 3156.52073366928,16987.8550294063 823 | 6113.44553627978,31333.9800280954 824 | 4875.62008649116,24945.601141795 825 | 6184.72688273075,26841.6178413857 826 | 4598.44036766437,24413.4143938868 827 | 4112.16184668078,24077.3535997321 828 | 4447.47113731024,20575.0591353276 829 | 2221.07476363741,20043.4382309733 830 | 3245.57710937883,19420.6699177798 831 | 2836.94803046232,20753.1856526843 832 | 6581.48340796302,29888.9728620669 833 | 4104.0048629558,21647.1688997339 834 | 6184.18977918527,24882.7292443021 835 | 7274.73590253794,29623.8632704394 836 | 4712.33778633509,24054.3327591704 837 | 5425.81835952853,27933.1601688199 838 | 2373.39872090588,13356.8388544085 839 | 3771.9953337203,24066.8682258094 840 | 5084.32227407426,28050.9477508287 841 | 5448.63035500423,24059.2585531908 842 | 3860.90282405168,22527.3095965413 843 | 9027.2884988402,35014.5870698122 844 | 4312.41479136142,22686.8444167077 845 | 5096.36533494506,27146.4214825285 846 | 5974.68780073028,29660.7426975884 847 | 4960.97204783901,23184.5669362501 848 | 4034.64891945933,21330.6738494269 849 | 6567.95849594496,27751.5483458405 850 | 7423.3179848108,32949.0412742422 851 | 4955.45904342525,21748.2268014082 852 | 5843.4010181046,22271.5521712111 853 | 4853.88125224605,27501.2683204839 854 | 6524.68282655324,34120.9943056492 855 | 3265.74890861022,18887.179645353 856 | 8481.29033599171,36966.0759821649 857 | 4094.70312831749,22269.103817533 858 | 2811.72587834286,21383.8052344606 859 | 4473.6232592104,24529.1576427699 860 | 5220.0627262175,26067.5161088848 861 | 7435.43181152034,28708.0225310293 862 | 6366.81451515698,31266.3549070664 863 | 5213.68764806868,24939.3557141123 864 | 2915.77471401776,15940.3439726232 865 | 3700.94338299183,20699.2368191488 866 | 4755.07260165606,24011.6614853836 867 | 8829.53917019089,38607.031255905 868 | 2209.65863867238,14294.1838514891 869 | 6696.58197776903,28974.4586786702 870 | 4209.14861414912,25603.6856992137 871 | 7498.98634998113,35214.2905874834 872 | 3291.19904003989,22200.0262079244 873 | 5215.43485199412,28969.3524466781 874 | 3350.67358744587,20460.0827219974 875 | 6355.27463954251,27902.056544888 876 | 7225.66923310713,32787.4158230482 877 | 7926.08150960173,35895.690780457 878 | 6196.40098638428,33416.4695020949 879 | 7764.89938186673,29364.7334801778 880 | 6869.63586299247,31155.378995111 881 | 4802.18763226398,25716.1520625312 882 | 5715.55585742705,27037.4702615604 883 | 3542.0086827861,17510.3815513881 884 | 4722.19674589851,25649.592021868 885 | 6831.44556252323,28936.1652050419 886 | 5811.92621522353,28447.5016433316 887 | 5686.035997438,28873.2114043497 888 | 3442.80344046919,22896.3243423568 889 | 4093.23015449882,19163.9628687253 890 | 3853.09097936965,23722.7566344672 891 | 5592.94380502025,25264.8687011687 892 | 3514.23855430016,17964.6767152026 893 | 5843.06208514858,30157.8275872846 894 | 3325.37538209969,22268.646092829 895 | 7742.79568720305,32743.2205261991 896 | 5690.88702421716,28591.7424851282 897 | 3948.4945816201,20124.8322620142 898 | 5361.56889875184,25782.6435381514 899 | 4471.32020115807,23226.5141359525 900 | 5556.72193963949,26108.6857099104 901 | 5365.29907814045,27564.0947074158 902 | 3478.82874100779,23511.1412940153 903 | 3813.0291817708,20527.5454197546 904 | 5449.39052710935,26282.8546766166 905 | 7458.57786312734,35649.248287713 906 | 6626.92551300638,29222.6925979661 907 | 4063.14878957286,16981.3700275044 908 | 6238.88435247124,29744.6206303096 909 | 4927.14747086557,23008.5063903742 910 | 5451.97047757761,24358.834620725 911 | 5390.54223610484,29013.2603354842 912 | 8863.17464558509,41485.5199507857 913 | 3222.06678411916,17586.6352695504 914 | 5151.37978851929,27516.1897288914 915 | 2330.03406804858,16801.8065274065 916 | 5884.75388443814,27937.8765717553 917 | 6644.91270758211,32379.2115256591 918 | 7168.49336165173,31932.8291218373 919 | 2112.28212224432,14634.1156590114 920 | 5619.15424579105,25916.6449878874 921 | 7390.05492707548,33542.4352918242 922 | 4378.97620543655,18465.0339525898 923 | 4681.77420187708,26235.8113693282 924 | 4945.19416669289,21701.2823024142 925 | 5547.52812714955,26686.4465070854 926 | 5997.73981361895,27612.5014856729 927 | 6976.73132556722,33516.3329487504 928 | 4856.76861433251,24948.0044731108 929 | 5294.4170682087,26087.1294744365 930 | 8731.99681583219,37592.2620652138 931 | 5646.64839217249,25285.9160641366 932 | 5283.12966399475,25457.5912798515 933 | 2986.63531207483,21315.07476384 934 | 5004.28407143334,26379.7994562597 935 | 4668.01077024968,21453.038897244 936 | 4983.43125528594,26226.2065006796 937 | 4136.87353809325,19655.4413650723 938 | 3969.77652133595,20712.7079565685 939 | 3918.83955226982,24178.3594245235 940 | 4678.24322690034,19532.6393298093 941 | 7052.19897204294,27598.5685343672 942 | 6573.62993983899,32323.6351651698 943 | 4460.03732308542,21750.5264011509 944 | 2471.12531819189,19900.7899917335 945 | 3733.12485719607,20862.874170076 946 | 4313.35920013924,23795.6289571436 947 | 5155.45700634246,27092.9287982858 948 | 4006.08908644878,20715.8435206262 949 | 8010.02103624784,33420.8812624503 950 | 4591.59869837247,22944.6017558261 951 | 3179.08329464074,25169.418435967 952 | 4788.10736407623,24616.6162304238 953 | 3491.93362760988,21421.4017290518 954 | 5234.23356091299,25021.1936008571 955 | 5350.4504211348,25567.7699780952 956 | 5533.38141744258,29357.6535900424 957 | 2567.21261131368,17023.8704948663 958 | 5331.06693645597,26033.4734148894 959 | 5465.67512081247,27150.9496907195 960 | 2868.33732874327,17741.5644961541 961 | 6433.04845959562,33217.2736911409 962 | 6176.25631864151,25671.8497314822 963 | 8449.42904173167,39370.8730848863 964 | 5235.05448106359,25001.9796654324 965 | 5070.100291277,27924.54016753 966 | 5144.87875112365,21436.281431356 967 | 5104.64934635045,27226.1092819083 968 | 2227.2908369935,18434.7350409342 969 | 2493.30941203663,14937.4942929897 970 | 4883.6915498132,23114.4268924603 971 | 4128.39892915025,22772.2464783912 972 | 5082.10478758614,27533.9852203524 973 | 1833.1874401092,13967.5637122703 974 | 2751.95261820986,17807.605856523 975 | 3347.77484159189,23186.0183947303 976 | 6479.08733159037,27182.5675130681 977 | 3352.26498936483,21952.3829295282 978 | 3800.7290696352,22299.7235873754 979 | 5119.81072801108,23147.8031269206 980 | 4515.88045726234,22211.9056874394 981 | 5219.62576800194,27225.4323246102 982 | 8457.59297306854,35870.6977846299 983 | 3313.09449311265,22789.4800342729 984 | 4541.79554013529,22421.8186962227 985 | 4224.8608253844,19245.6070833943 986 | 7268.59314024868,33901.4332737026 987 | 3845.77261566458,20320.0746101255 988 | 4876.86964433642,24871.2899866544 989 | 6180.70042148406,31980.1848921558 990 | 3412.1141960774,19735.5144836098 991 | 7482.76372361301,35547.401825633 992 | 6013.64362321137,25846.6515697692 993 | 3388.69008570447,22017.0927293459 994 | 5681.86671358661,27539.1985645018 995 | 4680.0392851504,22566.5747767483 996 | 5469.8431579915,23849.5115961952 997 | 4865.0372044765,24748.3989406185 998 | 6605.77405516752,30327.6516904107 999 | 2973.349421445,19474.9418984044 1000 | 4216.07495420613,23721.9369070815 1001 | 4626.2139833669,22957.6708181473 1002 | -------------------------------------------------------------------------------- /WAS19/WAS19_Regression_Logistique_Dans_La_Pratique.R: -------------------------------------------------------------------------------- 1 | ######################################################## 2 | #Code du WAS19: Régression Logistique dans la pratique 3 | #Par: Natacha NJONGWA YEPNGA 4 | #Vidéo Disponbible Sur LeCoinStat:https://www.youtube.com/watch?v=XOfyd7DuFbw&list=PLyh35eYRez8fPQY7ujGjWI4lusS4jxp2N&index=18 5 | ######################################################## 6 | 7 | 8 | 9 | 10 | #Etape 1: Définition du problème -Développer un modèle qui permet de prédire la présence d'une maladie cardiarques chez les patients 11 | 12 | # Quels sont les principaux facteurs prédictifs d'une maladie cardiaque? 13 | 14 | 15 | #Etape 2: Collecte des données 16 | 17 | # Source: Les informations pour la démonstration proviennent du dépôt de machine learning de l'Université de Californie à Irvine (UCI). 18 | # http://archive.ics.uci.edu/ml/index.php 19 | #Il s'agit plus précisément du jeu de données sur les maladies cardiaques. 20 | #Vous pouvez accéder à ces données en visitant le site de l'UCI dédié au machine learning 21 | # et en cherchant le jeu de données en question: http://archive.ics.uci.edu/ml/datasets/Heart+Disease 22 | # La base est disponible sur Kaggle en cliquant sur le lien suivant: https://www.kaggle.com/datasets/fedesoriano/heart-failure-prediction 23 | 24 | 25 | 26 | url <- "https://raw.githubusercontent.com/LeCoinStat/WAS/main/WAS19/data/heart.csv" 27 | data <- read.csv(url, header=TRUE) 28 | 29 | # Etape 3: prétraitement des données 30 | 31 | # Etape 4: Sélection des Caractéristiques pertinentes 32 | 33 | # Etape 5: Partitionnement des données 34 | 35 | # Etape 6: Entrainement 36 | 37 | # Etape 7: Interprétation des résultats 38 | 39 | # Etape 8: Evaluation et prédiction 40 | 41 | 42 | library(ggplot2) 43 | library(cowplot) 44 | ##################################### 45 | ## 46 | ## Reformat the data so that it is 47 | ## 1) Easy to use (add nice column names) 48 | ## 2) Interpreted correctly by glm().. 49 | ## 50 | ##################################### 51 | head(data) # you see data, but no column names 52 | 53 | colnames(data) <- c( 54 | "age", 55 | "sex",# 0 = female, 1 = male 56 | "cp", # chest pain 57 | # 1 = typical angina, 58 | # 2 = atypical angina, 59 | # 3 = non-anginal pain, 60 | # 4 = asymptomatic 61 | "trestbps", # resting blood pressure (in mm Hg) 62 | "chol", # serum cholestoral in mg/dl 63 | "fbs", # fasting blood sugar if less than 120 mg/dl, 1 = TRUE, 0 = FALSE 64 | "restecg", # resting electrocardiographic results 65 | # 1 = normal 66 | # 2 = having ST-T wave abnormality 67 | # 3 = showing probable or definite left ventricular hypertrophy 68 | "thalach", # maximum heart rate achieved 69 | "exang", # exercise induced angina, 1 = yes, 0 = no 70 | "oldpeak", # ST depression induced by exercise relative to rest 71 | "slope", # the slope of the peak exercise ST segment 72 | # 1 = upsloping 73 | # 2 = flat 74 | # 3 = downsloping 75 | "ca", # number of major vessels (0-3) colored by fluoroscopy 76 | "thal", # this is short of thalium heart scan 77 | # 3 = normal (no cold spots) 78 | # 6 = fixed defect (cold spots during rest and exercise) 79 | # 7 = reversible defect (when cold spots only appear during exercise) 80 | "hd" # (the predicted attribute) - diagnosis of heart disease 81 | # 0 if less than or equal to 50% diameter narrowing 82 | # 1 if greater than 50% diameter narrowing 83 | ) 84 | 85 | head(data) # now we have data and column names 86 | 87 | str(data) # this shows that we need to tell R which columns contain factors 88 | # it also shows us that there are some missing values. There are "?"s 89 | # in the dataset. These are in the "ca" and "thal" columns... 90 | 91 | ## First, convert "?"s to NAs... 92 | data[data == "?"] <- NA 93 | 94 | ## Now add factors for variables that are factors and clean up the factors 95 | ## that had missing data... 96 | data[data$sex == 0,]$sex <- "F" 97 | data[data$sex == 1,]$sex <- "M" 98 | data$sex <- as.factor(data$sex) 99 | 100 | data$cp <- as.factor(data$cp) 101 | data$fbs <- as.factor(data$fbs) 102 | data$restecg <- as.factor(data$restecg) 103 | data$exang <- as.factor(data$exang) 104 | data$slope <- as.factor(data$slope) 105 | 106 | data$ca <- as.integer(data$ca) # since this column had "?"s in it 107 | # R thinks that the levels for the factor are strings, but 108 | # we know they are integers, so first convert the strings to integers... 109 | data$ca <- as.factor(data$ca) # ...then convert the integers to factor levels 110 | 111 | data$thal <- as.integer(data$thal) # "thal" also had "?"s in it. 112 | data$thal <- as.factor(data$thal) 113 | 114 | ## This next line replaces 0 and 1 with "Healthy" and "Unhealthy" 115 | data$hd <- ifelse(test=data$hd == 0, yes="Healthy", no="Unhealthy") 116 | data$hd <- as.factor(data$hd) # Now convert to a factor 117 | 118 | str(data) ## this shows that the correct columns are factors 119 | 120 | ## Now determine how many rows have "NA" (aka "Missing data"). If it's just 121 | ## a few, we can remove them from the dataset, otherwise we should consider 122 | ## imputing the values with a Random Forest or some other imputation method. 123 | nrow(data[is.na(data$ca) | is.na(data$thal),]) 124 | data[is.na(data$ca) | is.na(data$thal),] 125 | ## so 6 of the 303 rows of data have missing values. This isn't a large 126 | ## percentage (2%), so we can just remove them from the dataset 127 | ## NOTE: This is different from when we did machine learning with 128 | ## Random Forests. When we did that, we imputed values. 129 | nrow(data) 130 | data <- data[!(is.na(data$ca) | is.na(data$thal)),] 131 | nrow(data) 132 | 133 | ##################################### 134 | ## 135 | ## Now we can do some quality control by making sure all of the factor 136 | ## levels are represented by people with and without heart disease (hd) 137 | ## 138 | ## NOTE: We also want to exclude variables that only have 1 or 2 samples in 139 | ## a category since +/- one or two samples can have a large effect on the 140 | ## odds/log(odds) 141 | ## 142 | ## 143 | ##################################### 144 | xtabs(~ hd + sex, data=data) 145 | xtabs(~ hd + cp, data=data) 146 | xtabs(~ hd + fbs, data=data) 147 | xtabs(~ hd + restecg, data=data) 148 | xtabs(~ hd + exang, data=data) 149 | xtabs(~ hd + slope, data=data) 150 | xtabs(~ hd + ca, data=data) 151 | xtabs(~ hd + thal, data=data) 152 | 153 | ##################################### 154 | ## 155 | ## Now we are ready for some logistic regression. First we'll create a very 156 | ## simple model that uses sex to predict heart disease 157 | ## 158 | ##################################### 159 | 160 | ## let's start super simple and see if sex (female/male) is a good 161 | ## predictor... 162 | ## First, let's just look at the raw data... 163 | xtabs(~ hd + sex, data=data) 164 | # sex 165 | # hd F M 166 | # Healthy 71 89 167 | # Unhealthy 25 112 168 | ## Most of the females are healthy and most of the males are unhealthy. 169 | ## Being female is likely to decrease the odds in being unhealthy. 170 | ## In other words, if a sample is female, the odds are against it that it 171 | ## will be unhealthy 172 | ## Being male is likely to increase the odds in being unhealthy... 173 | ## In other words, if a sample is male, the odds are for it being unhealthy 174 | 175 | ########### 176 | ## 177 | ## Now do the actual logistic regression 178 | ## 179 | ########### 180 | 181 | logistic <- glm(hd ~ sex, data=data, family="binomial") 182 | summary(logistic) 183 | ## (Intercept) -1.0438 0.2326 -4.488 7.18e-06 *** 184 | ## sexM 1.2737 0.2725 4.674 2.95e-06 *** 185 | 186 | ## Let's start by going through the first coefficient... 187 | ## (Intercept) -1.0438 0.2326 -4.488 7.18e-06 *** 188 | ## 189 | ## The intercept is the log(odds) a female will be unhealthy. This is because 190 | ## female is the first factor in "sex" (the factors are ordered, 191 | ## alphabetically by default,"female", "male") 192 | female.log.odds <- log(25 / 71) 193 | female.log.odds 194 | 195 | ## Now let's look at the second coefficient... 196 | ## sexM 1.2737 0.2725 4.674 2.95e-06 *** 197 | ## 198 | ## sexM is the log(odds ratio) that tells us that if a sample has sex=M, the 199 | ## odds of being unhealthy are, on a log scale, 1.27 times greater than if 200 | ## a sample has sex=F. 201 | male.log.odds.ratio <- log((112 / 89) / (25/71)) 202 | male.log.odds.ratio 203 | 204 | ## Now calculate the overall "Pseudo R-squared" and its p-value 205 | 206 | ## NOTE: Since we are doing logistic regression... 207 | ## Null devaince = 2*(0 - LogLikelihood(null model)) 208 | ## = -2*LogLikihood(null model) 209 | ## Residual deviacne = 2*(0 - LogLikelihood(proposed model)) 210 | ## = -2*LogLikelihood(proposed model) 211 | ll.null <- logistic$null.deviance/-2 212 | ll.proposed <- logistic$deviance/-2 213 | 214 | ## McFadden's Pseudo R^2 = [ LL(Null) - LL(Proposed) ] / LL(Null) 215 | (ll.null - ll.proposed) / ll.null 216 | 217 | ## chi-square value = 2*(LL(Proposed) - LL(Null)) 218 | ## p-value = 1 - pchisq(chi-square value, df = 2-1) 219 | 1 - pchisq(2*(ll.proposed - ll.null), df=1) 220 | 1 - pchisq((logistic$null.deviance - logistic$deviance), df=1) 221 | 222 | ## Lastly, let's see what this logistic regression predicts, given 223 | ## that a patient is either female or male (and no other data about them). 224 | predicted.data <- data.frame( 225 | probability.of.hd=logistic$fitted.values, 226 | sex=data$sex) 227 | 228 | ## We can plot the data... 229 | ggplot(data=predicted.data, aes(x=sex, y=probability.of.hd)) + 230 | geom_point(aes(color=sex), size=5) + 231 | xlab("Sex") + 232 | ylab("Predicted probability of getting heart disease") 233 | 234 | ## Since there are only two probabilities (one for females and one for males), 235 | ## we can use a table to summarize the predicted probabilities. 236 | xtabs(~ probability.of.hd + sex, data=predicted.data) 237 | 238 | ##################################### 239 | ## 240 | ## Now we will use all of the data available to predict heart disease 241 | ## 242 | ##################################### 243 | 244 | logistic <- glm(hd ~ ., data=data, family="binomial") 245 | summary(logistic) 246 | 247 | ## Now calculate the overall "Pseudo R-squared" and its p-value 248 | ll.null <- logistic$null.deviance/-2 249 | ll.proposed <- logistic$deviance/-2 250 | 251 | ## McFadden's Pseudo R^2 = [ LL(Null) - LL(Proposed) ] / LL(Null) 252 | (ll.null - ll.proposed) / ll.null 253 | 254 | ## The p-value for the R^2 255 | 1 - pchisq(2*(ll.proposed - ll.null), df=(length(logistic$coefficients)-1)) 256 | 257 | ## now we can plot the data 258 | predicted.data <- data.frame( 259 | probability.of.hd=logistic$fitted.values, 260 | hd=data$hd) 261 | 262 | predicted.data <- predicted.data[ 263 | order(predicted.data$probability.of.hd, decreasing=FALSE),] 264 | predicted.data$rank <- 1:nrow(predicted.data) 265 | 266 | ## Lastly, we can plot the predicted probabilities for each sample having 267 | ## heart disease and color by whether or not they actually had heart disease 268 | ggplot(data=predicted.data, aes(x=rank, y=probability.of.hd)) + 269 | geom_point(aes(color=hd), alpha=1, shape=4, stroke=2) + 270 | xlab("Index") + 271 | ylab("Predicted probability of getting heart disease") 272 | 273 | ggsave("heart_disease_probabilities.pdf") 274 | -------------------------------------------------------------------------------- /WAS19/WAS19_Regression_Logistique_Dans_La_Pratique.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "WAS 19: Régression Logistique dans la pratique" 3 | author: "Natacha NJONGWA YEPNGA" 4 | date: "`r Sys.Date()`" 5 | output: 6 | word_document: 7 | toc: true 8 | header-includes: 9 | - "\\usepackage{hyperref}" # Importation du package hyperref pour les liens 10 | --- 11 | 12 | # [LeCoinStat](https://youtube.com/c/LeCoinStat?sub_confirmation=1) 13 | 14 | 15 | ```{r setup, include=FALSE} 16 | knitr::opts_chunk$set(echo = TRUE) 17 | ``` 18 | 19 | 20 | 21 | [![Vidéo disponible sur LeCoinStat](https://www.youtube.com/watch?v=XOfyd7DuFbw&list=PLyh35eYRez8fPQY7ujGjWI4lusS4jxp2N&index=18)](https://www.youtube.com/watch?v=XOfyd7DuFbw&list=PLyh35eYRez8fPQY7ujGjWI4lusS4jxp2N&index=18) 22 | 23 | 24 | 25 | # Etape 1: Définition du problème 26 | Développer un modèle qui permet de prédire la présence d'une maladie cardiaque chez les patients. 27 | 28 | Quels sont les principaux facteurs prédictifs d'une maladie cardiaque? 29 | 30 | # Etape 2: Collecte des données 31 | Les informations pour la démonstration proviennent du dépôt de machine learning de l'Université de Californie à Irvine (UCI). 32 | [UCI Machine Learning Repository](http://archive.ics.uci.edu/ml/index.php) 33 | 34 | Il s'agit plus précisément du jeu de données sur les maladies cardiaques. 35 | Vous pouvez accéder à ces données en visitant le site de l'UCI dédié au machine learning et en cherchant le jeu de données en question: [Heart Disease Data Set](http://archive.ics.uci.edu/ml/datasets/Heart+Disease) 36 | 37 | La base est également disponible sur Kaggle: [Heart Failure Prediction](https://www.kaggle.com/datasets/fedesoriano/heart-failure-prediction) 38 | 39 | ```{r} 40 | url <- "https://raw.githubusercontent.com/LeCoinStat/WAS/main/WAS19/data/heart.csv" 41 | data <- read.csv(url, header=TRUE) 42 | ``` 43 | ```{r} 44 | head(data) 45 | ``` 46 | 47 | 48 | ```{r} 49 | # Renommer les colonnes 50 | colnames(data) <- c( 51 | "Age", # Âge 52 | "Sexe", # Sexe 53 | "TypeDouleurThoracique", # Type de Douleur Thoracique 54 | "TensionRepos", # Tension au Repos 55 | "Cholesterol", # Cholestérol 56 | "GlycemieAJeun", # Glycémie à Jeun 57 | "ECGRepos", # Electrocardiogramme au repos 58 | "FreqCardiaqueMax",# Fréquence Cardiaque Maximale 59 | "AngineExercice", # Angine d'Exercice 60 | "DepressionST", # Dépression ST 61 | "PenteST", # Pente ST (aspect de l'électrocardiogramme) 62 | "MaladieCardiaque" # Maladie Cardiaque 63 | ) 64 | 65 | # Afficher la structure des données pour vérifier les nouveaux noms de colonnes 66 | str(data) 67 | ``` 68 | 69 | 70 | 71 | ```{r} 72 | # Afficher la structure du cadre de données pour voir le type de chaque variable 73 | str(data) 74 | ``` 75 | ```{r} 76 | # Convertir la variable 'MaladieCardiaque' en facteur 77 | data$MaladieCardiaque <- factor(data$MaladieCardiaque) 78 | 79 | # Vérifier la modification 80 | str(data$MaladieCardiaque) 81 | ``` 82 | 83 | 84 | 85 | # Etape 3: prétraitement des données 86 | Ici il faut analyser la distribution des variables, analyser les valeurs manquantes, analyser les valeurs aberrantes etc. 87 | 88 | ## Analyse exploratoire 89 | ```{r} 90 | 91 | # Analyse des valeurs manquantes 92 | summary(data) # Résumé basique pour voir les valeurs manquantes 93 | ``` 94 | 95 | 96 | ## Analyse des valeurs manquantes 97 | 98 | ```{r} 99 | # Charger la bibliothèque pour la gestion des données manquantes 100 | if (!require("naniar")) { 101 | # Si elle n'est pas installée, installer la bibliothèque 102 | install.packages("naniar") 103 | } 104 | 105 | 106 | library(naniar) 107 | # Analyse des valeurs manquantes 108 | vis_miss(data) # Visualisation des données manquantes 109 | ``` 110 | 111 | ## Analyse des distributions des variables quantitatives 112 | ```{r} 113 | # Histogramme pour l'Age 114 | hist(data$Age, main = "Distribution de l'Âge", xlab = "Âge", col = "blue") 115 | 116 | # Histogramme pour la Tension au Repos 117 | hist(data$TensionRepos, main = "Distribution de la Tension au Repos", xlab = "Tension Artérielle (mm Hg)", col = "green") 118 | 119 | # Histogramme pour le Cholesterol 120 | hist(data$Cholesterol, main = "Distribution du Cholestérol", xlab = "Cholestérol (mg/dl)", col = "red") 121 | 122 | # Histogramme pour la Glycemie à Jeun 123 | hist(data$GlycemieAJeun, main = "Glycémie à Jeun", xlab = "Glycémie (mg/dl)", col = "orange") 124 | 125 | # Histogramme pour la Fréquence Cardiaque Maximale 126 | hist(data$FreqCardiaqueMax, main = "Fréquence Cardiaque Maximale", xlab = "Fréquence Cardiaque (bpm)", col = "purple") 127 | 128 | # Histogramme pour la Depression ST 129 | hist(data$DepressionST, main = "Dépression ST", xlab = "Dépression ST (mm)", col = "brown") 130 | 131 | ``` 132 | 133 | ## Analyse des boxplots des variables numériques 134 | 135 | ```{r} 136 | # Tracer les boxplots 137 | par(mfrow = c(3, 2)) # Organiser les graphiques en 3 lignes et 2 colonnes 138 | 139 | # Boxplot pour l'Age 140 | boxplot(data$Age, main = "Boxplot de l'Âge", ylab = "Âge") 141 | 142 | # Boxplot pour la Tension au Repos 143 | boxplot(data$TensionRepos, main = "Boxplot de la Tension au Repos", ylab = "Tension Artérielle (mm Hg)") 144 | 145 | # Boxplot pour le Cholesterol 146 | boxplot(data$Cholesterol, main = "Boxplot du Cholestérol", ylab = "Cholestérol (mg/dl)") 147 | 148 | # Boxplot pour la Glycemie à Jeun 149 | boxplot(data$GlycemieAJeun, main = "Boxplot de la Glycémie à Jeun", ylab = "Glycémie (mg/dl)") 150 | 151 | # Boxplot pour la Fréquence Cardiaque Maximale 152 | boxplot(data$FreqCardiaqueMax, main = "Boxplot de la Fréquence Cardiaque Maximale", ylab = "Fréquence Cardiaque (bpm)") 153 | 154 | # Boxplot pour la Depression ST 155 | boxplot(data$DepressionST, main = "Boxplot de la Dépression ST", ylab = "Dépression ST (mm)") 156 | ``` 157 | 158 | ## Analyse des variables qualitatives 159 | ```{r} 160 | 161 | # Table et proportions pour 'MaladieCardiaque' 162 | maladieCardiaqueTable <- table(data$MaladieCardiaque) 163 | proportionsMaladieCardiaque <- round(prop.table(maladieCardiaqueTable) * 100, 1) 164 | labels <- paste(names(maladieCardiaqueTable), "\n", proportionsMaladieCardiaque, "%", sep="") 165 | 166 | # Diagramme en camembert avec proportions 167 | pie(maladieCardiaqueTable, labels = labels, main = "Répartition de la Maladie Cardiaque", col = c("red", "green")) 168 | 169 | ``` 170 | ```{r} 171 | # Fonction pour créer un barplot de proportion avec valeurs 172 | barplot_proportion <- function(variable, data, title) { 173 | table_var <- table(data[[variable]]) 174 | prop_table <- prop.table(table_var) 175 | bp <- barplot(prop_table, main = title, xlab = variable, col = rainbow(length(prop_table)), ylim = c(0, max(prop_table) + 0.1)) 176 | 177 | # Ajouter les valeurs sur les barres 178 | text(bp, prop_table + 0.02, round(prop_table*100, 1), cex = 0.8, pos = 3) 179 | } 180 | 181 | # Barplot pour 'Sexe' 182 | barplot_proportion("Sexe", data, "Proportion par Sexe") 183 | 184 | # Barplot pour 'TypeDouleurThoracique' 185 | barplot_proportion("TypeDouleurThoracique", data, "Proportion de Type de Douleur Thoracique") 186 | 187 | # Barplot pour 'ECGRepos' 188 | barplot_proportion("ECGRepos", data, "Proportion d'ECG au Repos") 189 | 190 | # Barplot pour 'AngineExercice' 191 | barplot_proportion("AngineExercice", data, "Proportion d'Angine d'Exercice") 192 | 193 | # Barplot pour 'PenteST' 194 | barplot_proportion("PenteST", data, "Proportion de Pente ST") 195 | ``` 196 | 197 | 198 | # Etape 4: Sélection des Caractéristiques pertinentes 199 | 200 | ## Sélection des variables qualitatives 201 | -Faire les analyses graphiques 202 | -Faire des analyses de liaison via le test de chi deux, le v de cramer, analyser l'IV, le WOE et 203 | 204 | ### Analyse de barplot bivarié 205 | ```{r} 206 | if (!require("ggplot2")) { 207 | # Si elle n'est pas installée, installer la bibliothèque 208 | install.packages("ggplot2") 209 | } 210 | 211 | library(ggplot2) 212 | # Création des barplots bivariés 213 | # Assurez-vous que les variables qualitatives sont du bon type 214 | data$Sexe <- factor(data$Sexe, ordered = TRUE) 215 | data$TypeDouleurThoracique <- factor(data$TypeDouleurThoracique, ordered = TRUE) 216 | data$ECGRepos <- factor(data$ECGRepos, ordered = TRUE) 217 | data$AngineExercice <- factor(data$AngineExercice, ordered = TRUE) 218 | data$PenteST <- factor(data$PenteST, ordered = TRUE) 219 | 220 | # Créer des barplots pour chaque variable qualitative par rapport à MaladieCardiaque 221 | barplot_plots <- lapply(names(data)[sapply(data, is.factor)], 222 | function(variable) { 223 | ggplot(data, aes(x = factor(MaladieCardiaque), fill = .data[[variable]])) + 224 | geom_bar(position = "fill") + 225 | labs(title = paste("Répartition de", variable, "par Maladie Cardiaque"), 226 | x = "Maladie Cardiaque", 227 | y = "Proportion") + 228 | theme_minimal() + 229 | scale_fill_brewer(palette = "Set1") 230 | }) 231 | 232 | # Afficher les barplots dans une grille (2 par ligne) 233 | library(gridExtra) 234 | do.call(grid.arrange, c(barplot_plots, ncol = 2)) 235 | 236 | ``` 237 | ```{r} 238 | # Création du tableau pour les résultats des tests 239 | results <- data.frame(Variable = character(), Chi_square = numeric(), P_value = numeric(), Cramers_V = numeric()) 240 | 241 | # Variables qualitatives 242 | variables_qualitatives <- c("Sexe", "TypeDouleurThoracique", "ECGRepos", "AngineExercice", "PenteST") 243 | 244 | for (var in variables_qualitatives) { 245 | # Création du tableau de contingence 246 | contingency_table <- table(data[[var]], data$MaladieCardiaque) 247 | 248 | # Test du chi-carré 249 | chi_squared_test <- chisq.test(contingency_table) 250 | 251 | # Calcul du V de Cramer 252 | cramer_v <- sqrt(chi_squared_test$statistic / (nrow(data) * (min(nrow(contingency_table), ncol(contingency_table)) - 1))) 253 | 254 | # Ajouter les résultats au tableau 255 | results <- rbind(results, data.frame(Variable = var, Chi_square = chi_squared_test$statistic, P_value = chi_squared_test$p.value, Cramers_V = cramer_v)) 256 | } 257 | 258 | # Trier les résultats par V de Cramer croissant 259 | results <- results[order(-results$Cramers_V), ] 260 | 261 | # Afficher les résultats 262 | print(results) 263 | 264 | ``` 265 | 266 | ## Sélection des caractéristiques numérique 267 | ```{r} 268 | # Charger la bibliothèque ggplot2 si ce n'est pas déjà fait 269 | if (!require(ggplot2)) { 270 | install.packages("ggplot2") 271 | library(ggplot2) 272 | } 273 | 274 | # Créer une fonction pour générer des boxplots bivariés 275 | boxplot_bivarie <- function(data, variable_x, variable_y) { 276 | ggplot(data, aes(x = factor(variable_x), y = variable_y)) + 277 | geom_boxplot(fill = factor(variable_x)) + 278 | labs(title = paste("Boxplot de", variable_y, "par", variable_x), 279 | x = variable_x, y = variable_y) + 280 | theme_minimal() + 281 | theme(axis.text.x = element_text(angle = 45, hjust = 1)) 282 | } 283 | 284 | # Variables quantitatives à explorer 285 | variables_quantitatives <- c("Age", "TensionRepos", "Cholesterol", "GlycemieAJeun", "FreqCardiaqueMax", "DepressionST") 286 | 287 | 288 | # Créer des boxplots bivariés pour chaque variable quantitative 289 | #Charger la bibliothèque ggplot2 si ce n'est pas déjà fait 290 | if (!require(ggplot2)) { 291 | install.packages("ggplot2") 292 | library(ggplot2) 293 | } 294 | 295 | # Créer un boxplot bivarié pour chaque variable quantitative par rapport à MaladieCardiaque 296 | boxplot_plots <- lapply(names(data)[sapply(data, is.numeric)], 297 | function(variable) { 298 | ggplot(data, aes(x = factor(MaladieCardiaque), y = .data[[variable]], fill = factor(MaladieCardiaque))) + 299 | geom_boxplot() + 300 | labs(title = paste("Boxplot de", variable, "par Maladie Cardiaque"), 301 | x = "Maladie Cardiaque", y = variable) + 302 | theme_minimal() 303 | }) 304 | 305 | # Afficher les boxplots dans une grille (2 par ligne) 306 | library(gridExtra) 307 | do.call(grid.arrange, c(boxplot_plots, ncol = 2)) 308 | ``` 309 | 310 | ```{r} 311 | # Variables numériques 312 | variables_numeriques <- c("Age", "TensionRepos", "Cholesterol", "GlycemieAJeun", "FreqCardiaqueMax", "DepressionST") 313 | 314 | # Créer un tableau pour les résultats 315 | results <- data.frame(Variable = character(), Kruskal_Wallis = numeric(), P_value = numeric()) 316 | 317 | for (var in variables_numeriques) { 318 | # Effectuer le test de Kruskal-Wallis 319 | kruskal_test <- kruskal.test(data[[var]] ~ data$MaladieCardiaque) 320 | 321 | # Ajouter les résultats au tableau 322 | results <- rbind(results, data.frame(Variable = var, Kruskal_Wallis = kruskal_test$statistic, P_value = kruskal_test$p.value)) 323 | } 324 | 325 | # Trier les résultats par la statistique de test décroissant 326 | results <- results[order(results$Kruskal_Wallis, decreasing = TRUE), ] 327 | 328 | # Afficher les résultats 329 | print(results) 330 | ``` 331 | 332 | 333 | ## Analyse de la multicolinéarité 334 | 335 | ### Corrélation entre les grandeur numérique 336 | ```{r} 337 | # Sélectionner les variables numériques 338 | variables_numeriques <- data[, c("Age", "TensionRepos", "Cholesterol", "GlycemieAJeun", "FreqCardiaqueMax", "DepressionST")] 339 | 340 | # Calculer la matrice de corrélation 341 | correlation_matrix <- cor(variables_numeriques, use = "complete.obs") 342 | 343 | # Installer et charger corrplot 344 | if (!require(corrplot)) install.packages("corrplot") 345 | library(corrplot) 346 | 347 | # Créer la heatmap de corrélation 348 | corrplot(correlation_matrix, method = "color", type = "upper", 349 | tl.col = "black", tl.srt = 45, addCoef.col = "black", 350 | number.cex = 0.7, number.digits = 2) 351 | ``` 352 | 353 | 354 | 355 | # Etape 5: Partitionnement des données 356 | 357 | ```{r} 358 | # Installer et charger le package caret si nécessaire 359 | if (!require(caret)) install.packages("caret") 360 | library(caret) 361 | 362 | # Définir la proportion de données à garder dans l'ensemble d'entraînement (par exemple, 70%) 363 | proportion_entrainement <- 0.7 364 | 365 | # Créer des indices pour un partitionnement stratifié 366 | set.seed(123) # Pour la reproductibilité 367 | indices_entrainement <- createDataPartition(data$MaladieCardiaque, p = proportion_entrainement, list = FALSE) 368 | 369 | # Créer les ensembles d'entraînement et de test 370 | data_entrainement <- data[indices_entrainement, ] 371 | data_test <- data[-indices_entrainement, ] 372 | 373 | # Fonction pour créer un pie chart avec proportions 374 | creer_pie_chart <- function(data_subset, title) { 375 | counts <- table(data_subset$MaladieCardiaque) 376 | proportions <- round(100 * counts / sum(counts), 1) 377 | labels <- paste(names(counts), "\n", proportions, "%", sep="") 378 | 379 | pie(counts, labels = labels, main = title, col = c("red", "green")) 380 | } 381 | 382 | # Créer un pie chart pour l'ensemble d'entraînement 383 | par(mfrow = c(1, 2)) # Pour afficher les deux diagrammes côte à côte 384 | creer_pie_chart(data_entrainement, "Répartition de Maladie Cardiaque (Entraînement)") 385 | 386 | # Créer un pie chart pour l'ensemble de test 387 | creer_pie_chart(data_test, "Répartition de Maladie Cardiaque (Test)") 388 | 389 | ``` 390 | 391 | 392 | 393 | # Etape 6: Entrainement du modèle 394 | ```{r} 395 | # Entraînement du modèle de régression logistique avec glm 396 | modele_logistique <- glm(MaladieCardiaque ~ ., data = data_entrainement, family = binomial) 397 | 398 | # Afficher le résumé du modèle 399 | summary(modele_logistique) 400 | ``` 401 | ```{r} 402 | #install.packages("lmtest") 403 | library(lmtest) 404 | 405 | # Effectuer le test du rapport de vraisemblance (Likelihood Ratio Test) 406 | test_lr <- lrtest(modele_logistique) 407 | 408 | # Afficher les résultats du test 409 | print(test_lr) 410 | 411 | ``` 412 | 413 | 414 | ```{r} 415 | # Calculer les déviations nulles et proposées 416 | ll.null <- modele_logistique$null.deviance / -2 417 | ll.proposed <- modele_logistique$deviance / -2 418 | 419 | # Calculer le pseudo R-carré de McFadden 420 | pseudo_r_squared_mcfadden <- 1 - (ll.proposed / ll.null) 421 | 422 | # Afficher le pseudo R-carré de McFadden 423 | print(pseudo_r_squared_mcfadden) 424 | ``` 425 | 426 | 427 | 428 | 429 | # Etape 7: Interprétation des résultats 430 | 431 | ```{r} 432 | # Obtenir les coefficients estimés du modèle 433 | coefficients <- coef(modele_logistique) 434 | 435 | # Calculer les rapports de cotes en exponentiant les coefficients 436 | odds_ratios <- exp(coefficients) 437 | 438 | # Créer un tableau avec les noms des variables et leurs rapports de cotes 439 | variables <- names(coefficients) 440 | tableau_odds_ratios <- data.frame(Variable = variables, OddsRatio = odds_ratios) 441 | 442 | # Afficher le tableau des rapports de cotes 443 | tableau_odds_ratios 444 | ``` 445 | 446 | # Etape 8: Evaluation et prédiction 447 | 448 | ## Evaluation du modèle 449 | ```{r} 450 | # Vérifier si la bibliothèque pROC est déjà installée, sinon l'installer 451 | if (!require(pROC)) { 452 | install.packages("pROC") 453 | library(pROC) 454 | } 455 | 456 | 457 | probas_train <- predict(modele_logistique, data_entrainement, type = "response") 458 | probas_test <- predict(modele_logistique, data_test, type = "response") 459 | 460 | roc_train <- roc(response = data_entrainement$MaladieCardiaque, predictor = probas_train) 461 | roc_test <- roc(response = data_test$MaladieCardiaque, predictor = probas_test) 462 | 463 | # Afficher les courbes ROC avec AUC 464 | par(mfrow=c(1,2)) # Afficher deux graphiques côte à côte 465 | plot(roc_train, main = "Courbe ROC - Base d'Entraînement", col = "blue", print.auc = TRUE) 466 | plot(roc_test, main = "Courbe ROC - Base Test", col = "red", print.auc = TRUE) 467 | 468 | auc_train <- auc(roc_train) 469 | auc_test <- auc(roc_test) 470 | 471 | auc_table <- data.frame(Base = c("Entraînement", "Test"), AUC = c(auc_train, auc_test)) 472 | 473 | print(auc_table) 474 | ``` 475 | ```{r} 476 | # Installer et charger la bibliothèque ggplot2 si elle n'est pas déjà installée 477 | if (!require(ggplot2)) { 478 | install.packages("ggplot2") 479 | library(ggplot2) 480 | } 481 | 482 | 483 | # Prédire les probabilités sur la base d'entraînement 484 | probas_train <- predict(modele_logistique, data_entrainement, type = "response") 485 | 486 | # Créer un data frame avec les probabilités prédites et les étiquettes de maladie cardiaque 487 | predicted_data <- data.frame(Probabilite = probas_train, MaladieCardiaque = data_entrainement$MaladieCardiaque) 488 | 489 | # Remplacer les valeurs de MaladieCardiaque (0 par "Non Malade" et 1 par "Malade") 490 | predicted_data$MaladieCardiaque <- factor(predicted_data$MaladieCardiaque, levels = c(0, 1), labels = c("Non Malade", "Malade")) 491 | 492 | # Créer un graphique de densité pour les malades et les non malades 493 | ggplot(predicted_data, aes(x = Probabilite, fill = MaladieCardiaque)) + 494 | geom_density(alpha = 0.5) + 495 | labs(title = "Densité de Probabilité Prédite - Malades vs. Non Malades", x = "Probabilité Prédite") + 496 | scale_fill_manual(values = c("Non Malade" = "blue", "Malade" = "red")) + 497 | theme_minimal() + 498 | theme(legend.title = element_blank()) + # Supprimer le titre de la légende 499 | labs(fill = "Maladie Cardiaque") # Renommer la légende 500 | ``` 501 | 502 | 503 | 504 | ```{r} 505 | # Installer et charger la bibliothèque caret si elle n'est pas déjà installée 506 | if (!require(caret)) { 507 | install.packages("caret") 508 | library(caret) 509 | } 510 | 511 | # Prédire les classes en utilisant un seuil de probabilité de 0.5 pour la base d'entraînement 512 | seuil <- 0.5 513 | predictions_train <- ifelse(probas_train >= seuil, 1, 0) 514 | predictions_train <- factor(predictions_train, levels = c(0, 1)) 515 | 516 | # Créer la matrice de confusion pour la base d'entraînement 517 | confusion_matrix_train <- confusionMatrix(predictions_train, data_entrainement$MaladieCardiaque) 518 | 519 | # Prédire les classes en utilisant un seuil de probabilité de 0.5 pour la base de test 520 | predictions_test <- ifelse(probas_test >= seuil, 1, 0) 521 | predictions_test <- factor(predictions_test, levels = c(0, 1)) 522 | # Créer la matrice de confusion pour la base de test 523 | confusion_matrix_test <- confusionMatrix(predictions_test, data_test$MaladieCardiaque) 524 | 525 | # Afficher les matrices de confusion 526 | confusion_matrix_train 527 | confusion_matrix_test 528 | ``` 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | -------------------------------------------------------------------------------- /WAS19/WAS19_Regression_Logistique_Dans_La_Pratique.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS19/WAS19_Regression_Logistique_Dans_La_Pratique.docx -------------------------------------------------------------------------------- /WAS19/WAS19_Regression_Logistique_Dans_La_Pratique.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS19/WAS19_Regression_Logistique_Dans_La_Pratique.pptx -------------------------------------------------------------------------------- /WAS20/Présentation1.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS20/Présentation1.pptx -------------------------------------------------------------------------------- /WAS20/WAS20_Le_Modele_ARIMA_Dans_La_Pratique.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "WAS 20: Le Modèle ARIMA dans la pratique" 3 | author: "Natacha NJONGWA YEPNGA" 4 | date: "`r Sys.Date()`" 5 | output: 6 | word_document: 7 | toc: true 8 | header-includes: 9 | - "\\usepackage{hyperref}" # Importation du package hyperref pour les liens 10 | --- 11 | 12 | # [LeCoinStat](https://youtube.com/c/LeCoinStat?sub_confirmation=1) 13 | 14 | 15 | ```{r setup, include=FALSE} 16 | knitr::opts_chunk$set(echo = TRUE) 17 | ``` 18 | 19 | 20 | 21 | [![Vidéo disponible sur LeCoinStat](https://www.youtube.com/watch?v=XOfyd7DuFbw&list=PLyh35eYRez8fPQY7ujGjWI4lusS4jxp2N&index=18)](https://www.youtube.com/watch?v=XOfyd7DuFbw&list=PLyh35eYRez8fPQY7ujGjWI4lusS4jxp2N&index=18) 22 | 23 | 24 | # Présentation du modèle ARIMA 25 | 26 | Le modèle ARIMA (AutoRegressive Integrated Moving Average) est une méthode couramment utilisée pour modéliser et prévoir les séries temporelles. Il combine les composantes de l'autorégression (AR) et de la moyenne mobile (MA) avec une différenciation (I) pour prendre en compte les tendances et les comportements saisonniers dans les données. 27 | 28 | ## Composantes du modèle ARIMA 29 | 30 | - **AR (Autorégression)** : L'AR fait référence à la régression linéaire des valeurs actuelles sur les valeurs précédentes de la série temporelle. Il capture les effets de dépendance linéaire à partir des valeurs passées. 31 | - **MA (Moyenne mobile)** : Le MA utilise la moyenne mobile des erreurs précédentes pour modéliser la relation entre les résidus et les observations actuelles de la série temporelle. Il capture les effets de dépendance entre les résidus. 32 | - **I (Différenciation)** : La différenciation est utilisée pour rendre les données stationnaires en supprimant les tendances et les comportements saisonniers. Elle consiste à prendre la différence entre les observations consécutives jusqu'à obtenir une série stationnaire. 33 | 34 | ## Ordres du modèle ARIMA 35 | 36 | Le modèle ARIMA est défini par trois ordres : p, d et q. 37 | 38 | - **p (Ordre AR)** : L'ordre AR spécifie le nombre de termes autorégressifs à inclure dans le modèle. Il indique combien de valeurs passées sont utilisées pour prédire la valeur actuelle. 39 | - **d (Ordre de différenciation)** : L'ordre de différenciation indique combien de fois la série doit être différenciée pour rendre les données stationnaires. 40 | - **q (Ordre MA)** : L'ordre MA spécifie le nombre de termes de la moyenne mobile à inclure dans le modèle. Il indique combien de résidus passés sont utilisés pour prédire l'observation actuelle. 41 | 42 | # Méthodologie de Box-Jenkins le modèle ARIMA 43 | 44 | La méthodologie de Box-Jenkins est une approche couramment utilisée pour modéliser et prévoir les séries temporelles. Elle comprend les étapes suivantes : 45 | 46 | 1. **Identification du modèle** 47 | 48 | - Analyse des données : Examiner les données de la série temporelle pour détecter les tendances, les saisonnalités et les comportements anormaux. 49 | - Différenciation : Si la série temporelle présente une tendance ou une saisonnalité, appliquer une différenciation pour rendre les données stationnaires. 50 | - Identification des ordres : Utiliser les graphiques ACF (fonction d'autocorrélation) et PACF (fonction d'autocorrélation partielle) pour déterminer les ordres p, d et q du modèle ARIMA. 51 | 52 | 2. **Estimation du modèle** 53 | 54 | - Estimation des paramètres : Utiliser les méthodes d'estimation (telles que la méthode des moindres carrés) pour estimer les paramètres du modèle ARIMA. 55 | 56 | 3. **Vérification du modèle** 57 | 58 | - Diagnostic du modèle : Vérifier si les résidus du modèle ARIMA sont bruit blanc (c'est-à-dire s'ils ne présentent pas de structure ou de corrélation significative). 59 | - Réajustement : Si le modèle ne satisfait pas les critères de bruit blanc, ajuster les ordres du modèle ARIMA et répéter les étapes précédentes. 60 | - Validation : Valider les performances du modèle en effectuant des prédictions sur des données de validation ou en utilisant des mesures d'évaluation telles que l'erreur quadratique moyenne (RMSE) ou le critère d'information d'Akaike (AIC). 61 | 62 | La méthodologie de Box-Jenkins est itérative, ce qui signifie que les étapes d'identification, d'estimation et de vérification peuvent être répétées plusieurs fois pour améliorer le modèle. L'objectif est de trouver le meilleur modèle ARIMA qui capture les motifs et les caractéristiques importantes de la série temporelle, et qui peut être utilisé pour effectuer des prédictions précises. 63 | 64 | # Description de la base de données 65 | 66 | La base de données AirPassengers est une série temporelle classique qui représente le nombre mensuel de passagers aériens internationaux. Elle est souvent utilisée comme exemple pour illustrer les modèles de prévision, y compris les modèles ARIMA. 67 | 68 | 69 | La base de données AirPassengers contient les colonnes suivantes : 70 | 71 | - **Month** : La date (mois et année) de chaque observation. 72 | - **Passengers** : Le nombre de passagers aériens internationaux pour chaque mois. 73 | 74 | 75 | Les données de la base AirPassengers couvrent la période de janvier 1949 à décembre 1960, soit 12 années de données mensuelles. 76 | 77 | Vous pouvez télécharger la base de données AirPassengers en utilisant le lien suivant : 78 | 79 | [**AirPassengers.csv**](https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv) 80 | 81 | 82 | # Etape 0: Définition de la problématique et importation des données 83 | ```{r} 84 | # Chargement des packages nécessaires 85 | # Installer et charger pacman pour gérer les packages 86 | if (!require(pacman)) install.packages("pacman") 87 | pacman::p_load(pacman, readr, lubridate, tseries, forecast,ggplot2,plotly,lmtest) 88 | 89 | # URL du fichier CSV brut 90 | url <- "https://raw.githubusercontent.com/LeCoinStat/WAS/main/WAS20/data/airline_passengers.csv" 91 | 92 | # Importer les données depuis l'URL 93 | df <- read_csv(url) 94 | 95 | # Afficher les premières lignes de la base de données pour vérifier 96 | head(df) 97 | ``` 98 | ```{r} 99 | # Afficher la structure du dataframe pour voir les types de données 100 | str(df) 101 | ``` 102 | ```{r} 103 | # Conversion de la colonne 'Month' en datetime 104 | # Adaptez la fonction selon le format de votre date (ymd, mdy, dmy, etc.) 105 | df$Month <- ym(df$Month) 106 | ``` 107 | 108 | 109 | 110 | 111 | # Etape 1: Identification 112 | 113 | ## Analyse de l'évolution de la série 114 | ```{r} 115 | # Créer un graphique ggplot 116 | p <- ggplot(df, aes(x=Month, y=Passengers)) + 117 | geom_line(color="blue") + 118 | theme_minimal() + 119 | labs(title="Évolution du nombre de passagers aériens", x="Temps", y="Passagers") + 120 | scale_x_date(date_labels = "%Y-%m", date_breaks = "1 year") + 121 | theme(axis.text.x = element_text(angle = 45, hjust = 1)) 122 | 123 | # Convertir en graphique plotly pour l'interactivité 124 | ggplotly(p) 125 | ``` 126 | ## ACF et PACF 127 | ```{r} 128 | # Convertir les données en série temporelle 129 | ts_data <- ts(df$Passengers, start=c(year(min(df$Month)), month(min(df$Month))), frequency=12) 130 | plot(decompose(ts_data)) # time series decomposition 131 | ``` 132 | 133 | 134 | L'ACF (Autocorrelation Function) et la PACF (Partial Autocorrelation Function) sont deux outils essentiels en analyse de séries temporelles. Elles permettent de comprendre les dépendances temporelles dans une série de données. 135 | 136 | ### ACF (Autocorrelation Function) 137 | 138 | L'ACF mesure la corrélation entre une séquence et elle-même à différentes périodes de temps. Autrement dit, elle permet d'évaluer la similitude entre les observations en fonction du décalage de temps entre elles. 139 | 140 | **Pour un décalage 'k', l'ACF mesure la corrélation entre la série temporelle et elle-même décalée de 'k' périodes.** 141 | 142 | Par exemple, **une ACF de 0,9 à un décalage de 2 signifie que les données sont très similaires à elles-mêmes il y a deux périodes de temps**. 143 | 144 | ### PACF (Partial Autocorrelation Function) 145 | 146 | La PACF est une corrélation qui exclut l'effet des termes intermédiaires. C'est-à-dire qu'elle est une mesure de la corrélation entre des observations à un certain intervalle, en tenant compte des valeurs à des intervalles plus courts. 147 | 148 | Pour un décalage 'k', **la PACF est la corrélation entre la série temporelle et elle-même décalée de 'k' périodes, mais après avoir soustrait les effets des décalages 1 à 'k-1'**. 149 | 150 | Par exemple, une PACF de 0,5 à un décalage de 3 signifie que les données sont moyennement similaires à elles-mêmes il y a trois périodes de temps, après avoir pris en compte les décalages 1 et 2. 151 | 152 | ### Utilisations 153 | 154 | Les graphiques ACF et PACF sont couramment utilisés pour aider à choisir les paramètres d'un modèle ARIMA en analyse de séries temporelles. Par exemple, **le graphique ACF peut être utilisé pour identifier le terme MA (moyenne mobile)** du modèle, tandis que le graphique **PACF peut aider à identifier le terme AR (auto-régressif).** 155 | 156 | 157 | ```{r} 158 | # Convertir les données en série temporelle 159 | ts_data <- ts(df$Passengers, start=c(year(min(df$Month)), month(min(df$Month))), frequency=12) 160 | 161 | # Calcul et affichage de l'ACF 162 | acf(ts_data, main="Autocorrelation Function") 163 | 164 | # Calcul et affichage de la PACF 165 | pacf(ts_data, main="Partial Autocorrelation Function") 166 | ``` 167 | 168 | 169 | ## Identification de l'ordre d (différentiation) 170 | 171 | ### Test de dickey fuller pour la stationnarité 172 | ```{r} 173 | # Effectuer le test Augmented Dickey-Fuller 174 | adf_test_result <- adf.test(ts_data,k=12) 175 | adf_test_result 176 | ``` 177 | ## Différencier la série 178 | ```{r} 179 | # Différencier la série temporelle 180 | diff_ts_data <- diff(ts_data) 181 | # Tracer la série différenciée 182 | plot(diff_ts_data, main="Série temporelle différenciée", xlab="Temps", ylab="Différence") 183 | 184 | # Calculer et afficher l'ACF 185 | acf(diff_ts_data, main="Autocorrelation Function (ACF)") 186 | 187 | # Calculer et afficher la PACF 188 | pacf(diff_ts_data, main="Partial Autocorrelation Function (PACF)") 189 | 190 | # Effectuer le test de Dickey-Fuller augmenté 191 | adf_test_result <- adf.test(diff_ts_data,k=12) 192 | 193 | ``` 194 | 195 | 196 | 197 | ## Analyse de l'ordre p et q 198 | 199 | En modélisant une série temporelle avec un modèle ARIMA (AutoRegressive Integrated Moving Average), les paramètres `p` et `q` sont déterminés en examinant les graphiques de la fonction d'autocorrélation (ACF) et de la fonction d'autocorrélation partielle (PACF) : 200 | 201 | 1. **Détermination de `p` (Ordre du composant autorégressif AR) :** 202 | - Pour déterminer `p`, observez le graphique de la fonction d'autocorrélation partielle (PACF). 203 | - Le paramètre `p` correspond au dernier décalage significatif dans le graphique PACF. Autrement dit, après le décalage `p`, les autocorrélations partielles devraient être non significatives (proches de zéro). 204 | - En pratique, cela signifie que vous cherchez le nombre de barres (lags) dans le graphique PACF qui sont significativement différentes de zéro. 205 | 206 | 2. **Détermination de `q` (Ordre du composant de moyenne mobile MA) :** 207 | - Pour déterminer `q`, examinez le graphique de la fonction d'autocorrélation (ACF). 208 | - Le paramètre `q` correspond au dernier décalage significatif dans le graphique ACF. Cela signifie que vous cherchez le nombre de barres (lags) dans le graphique ACF qui sont significativement différentes de zéro. 209 | 210 | 211 | ```{r} 212 | # Calculer et afficher la PACF: détermination de p 213 | pacf(diff_ts_data, lag.max=15, main="Partial Autocorrelation Function (PACF)") 214 | 215 | 216 | 217 | 218 | 219 | # Calculer et afficher l'ACF détermination de q 220 | acf(diff_ts_data, lag.max=15, main="Autocorrelation Function (ACF)") 221 | 222 | 223 | ``` 224 | # Quiz 225 | 226 | 227 | #### Question 1: Stationnarité 228 | Qu'est-ce qu'une série temporelle stationnaire ? 229 | 230 | a) Une série dont la moyenne et la variance changent au fil du temps. 231 | b) Une série qui ne montre aucune tendance ou saisonnalité. 232 | c) Une série qui montre une tendance croissante sur une longue période. 233 | d) Une série dont les valeurs sont aléatoires et non prévisibles. 234 | 235 | #### Question 2: Procédure de Box-Jenkins 236 | Quelles sont les trois étapes principales de la méthodologie de Box-Jenkins pour l'analyse et la modélisation des séries temporelles ? 237 | 238 | a) Prévision, estimation, et différenciation. 239 | b) Identification, estimation, et vérification. 240 | c) Visualisation, régression, et prédiction. 241 | d) Normalisation, corrélation, et régression. 242 | 243 | 244 | 245 | # Etape 2: Estimation 246 | 247 | 248 | ## Estimation automatique 249 | ```{r} 250 | # Utiliser auto.arima pour trouver le meilleur modèle ARIMA 251 | model <- auto.arima(ts_data) 252 | 253 | # Afficher le résumé du modèle 254 | summary(model) 255 | ``` 256 | ```{r} 257 | fit <- arima(ts_data, order=c(2, 1, 1)) 258 | summary(fit) 259 | ``` 260 | 261 | 262 | # Etape 3: Validation 263 | 264 | 265 | 266 | Après avoir ajusté un modèle ARIMA, il est crucial de vérifier les résidus du modèle pour s'assurer de la qualité de l'ajustement. Les résidus sont la différence entre les valeurs observées et les valeurs prédites par le modèle. Si le modèle est bien ajusté, les résidus doivent se comporter comme un bruit blanc, c'est-à-dire être une série temporelle aléatoire à distribution normale, avec une moyenne de zéro et sans autocorrélation. Voici quelques points clés à vérifier : 267 | 268 | ## Test de Ljung-Box 269 | 270 | Le test de Ljung-Box teste l'absence d'autocorrélation dans les résidus. Nous voulons que les résidus soient indépendants les uns des autres. Une faible valeur p (p < 0,05) indique une preuve d'autocorrélation. 271 | 272 | ## Hétéroscédasticité 273 | 274 | L'hétéroscédasticité se réfère à la situation dans laquelle la variabilité de l'erreur de prédiction (ou résidu) n'est pas constante à travers toutes les observations. Nous préférons avoir une erreur de prédiction constante, donc la vérification de l'hétéroscédasticité est importante. Un bon modèle devrait présenter une homoscédasticité, c'est-à-dire une variance constante des résidus. 275 | 276 | ## Normalité 277 | 278 | L'aspect de normalité fait référence à la distribution des résidus. Dans un bon modèle, nous attendons que les résidus suivent une distribution normale. Pour vérifier cela, nous pouvons utiliser un graphique Q-Q ou effectuer un test statistique, comme le test de Shapiro-Wilk, pour vérifier la normalité. 279 | 280 | ## Graphiques des résidus 281 | 282 | En plus des tests statistiques, il est utile de tracer les résidus au fil du temps, ainsi que leur autocorrélation (ACF et PACF), pour vérifier visuellement les suppositions précédentes. Dans un modèle bien ajusté, les résidus devraient ressembler à un bruit blanc lorsqu'ils sont tracés dans le temps, et l'ACF et le PACF devraient montrer peu ou pas de corrélation significative. 283 | 284 | Rappelez-vous, aucun modèle n'est parfait, et tous ces tests et graphiques sont des outils pour vous aider à comprendre si votre modèle est "suffisamment bon" pour répondre à vos besoins spécifiques. 285 | 286 | ```{r} 287 | # Calculer les résidus 288 | residuals <- residuals(fit) 289 | 290 | # Test de Ljung-Box 291 | 292 | # Initialiser un tableau pour stocker les résultats du test de Ljung-Box 293 | ljung_box_results <- data.frame(Order = integer(), Test_Statistic = numeric(), P_Value = numeric()) 294 | 295 | # Appliquer le test de Ljung-Box pour chaque ordre de 1 à 12 296 | for (i in 1:12) { 297 | test_result <- Box.test(residuals, lag = i, type = "Ljung-Box") 298 | ljung_box_results <- rbind(ljung_box_results, data.frame(Order = i, Test_Statistic = test_result$statistic, P_Value = test_result$p.value)) 299 | } 300 | 301 | ljung_box_results 302 | 303 | 304 | 305 | # Test de normalité (Test de Shapiro-Wilk) 306 | qqnorm(residuals) 307 | qqline(residuals) 308 | shapiro.test(residuals) 309 | 310 | # Tracer les résidus 311 | plot(residuals, main = "Residuals") 312 | 313 | # ACF et PACF des résidus 314 | acf(residuals, main = "ACF of Residuals") 315 | pacf(residuals, main = "PACF of Residuals") 316 | ``` 317 | 318 | ```{r} 319 | # Calculer les résidus 320 | residuals <- residuals(model) 321 | 322 | # Test de Ljung-Box 323 | # Initialiser un tableau pour stocker les résultats du test de Ljung-Box 324 | ljung_box_results <- data.frame(Order = integer(), Test_Statistic = numeric(), P_Value = numeric()) 325 | 326 | # Appliquer le test de Ljung-Box pour chaque ordre de 1 à 12 327 | for (i in 1:12) { 328 | test_result <- Box.test(residuals, lag = i, type = "Ljung-Box") 329 | ljung_box_results <- rbind(ljung_box_results, data.frame(Order = i, Test_Statistic = test_result$statistic, P_Value = test_result$p.value)) 330 | } 331 | 332 | ljung_box_results 333 | 334 | # Test de normalité (Test de Shapiro-Wilk) 335 | qqnorm(residuals) 336 | qqline(residuals) 337 | shapiro.test(residuals) 338 | 339 | # Tracer les résidus 340 | plot(residuals, main = "Residuals") 341 | 342 | # ACF et PACF des résidus 343 | acf(residuals, main = "ACF of Residuals") 344 | pacf(residuals, main = "PACF of Residuals") 345 | ``` 346 | 347 | 348 | # Etape 4: Prédiction 349 | 350 | ```{r} 351 | 352 | # Effectuer des prévisions pour les 24 périodes suivantes avec le modèle ARIMA 353 | fore <- forecast(model, h=24) 354 | 355 | # Calculer les intervalles de prédiction supérieur (U) et inférieur (L) 356 | # Ces intervalles représentent une marge d'erreur autour des prévisions 357 | U <- fore$upper[, "95%"] # Intervalle de prédiction supérieur à 95% 358 | L <- fore$lower[, "95%"] # Intervalle de prédiction inférieur à 95% 359 | 360 | # Tracer les données observées et les prévisions 361 | # Les lignes continues représentent les données observées et les prévisions 362 | # Les lignes en pointillés représentent les intervalles de prédiction 363 | ts.plot(ts_data, fore$mean, U, L, col=c(1, 2, 4, 4), lty=c(1, 1, 2, 2)) 364 | 365 | # Ajouter une légende sur le graphique 366 | # La légende aide à distinguer les différents éléments du graphique 367 | legend("topleft", c("Données observées", "Prédictions", "Intervalles de prédiction (95%)"), 368 | col=c(1, 2, 4), lty=c(1, 1, 2)) 369 | 370 | ``` 371 | 372 | 373 | 374 | #### Question 1 : Bruit Blanc 375 | Qu'est-ce que le "bruit blanc" dans le contexte des séries temporelles ? 376 | 377 | a) Un terme utilisé pour décrire des séries temporelles avec des modèles ARIMA. 378 | b) Un type de série temporelle qui ne présente aucune variation ou tendance. 379 | c) Le bruit sonore de fond enregistré dans les données audio. 380 | d) Un modèle de régression linéaire appliqué aux données temporelles. 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | -------------------------------------------------------------------------------- /WAS20/data/airline_passengers.csv: -------------------------------------------------------------------------------- 1 | "Month","Passengers" 2 | "1949-01",112 3 | "1949-02",118 4 | "1949-03",132 5 | "1949-04",129 6 | "1949-05",121 7 | "1949-06",135 8 | "1949-07",148 9 | "1949-08",148 10 | "1949-09",136 11 | "1949-10",119 12 | "1949-11",104 13 | "1949-12",118 14 | "1950-01",115 15 | "1950-02",126 16 | "1950-03",141 17 | "1950-04",135 18 | "1950-05",125 19 | "1950-06",149 20 | "1950-07",170 21 | "1950-08",170 22 | "1950-09",158 23 | "1950-10",133 24 | "1950-11",114 25 | "1950-12",140 26 | "1951-01",145 27 | "1951-02",150 28 | "1951-03",178 29 | "1951-04",163 30 | "1951-05",172 31 | "1951-06",178 32 | "1951-07",199 33 | "1951-08",199 34 | "1951-09",184 35 | "1951-10",162 36 | "1951-11",146 37 | "1951-12",166 38 | "1952-01",171 39 | "1952-02",180 40 | "1952-03",193 41 | "1952-04",181 42 | "1952-05",183 43 | "1952-06",218 44 | "1952-07",230 45 | "1952-08",242 46 | "1952-09",209 47 | "1952-10",191 48 | "1952-11",172 49 | "1952-12",194 50 | "1953-01",196 51 | "1953-02",196 52 | "1953-03",236 53 | "1953-04",235 54 | "1953-05",229 55 | "1953-06",243 56 | "1953-07",264 57 | "1953-08",272 58 | "1953-09",237 59 | "1953-10",211 60 | "1953-11",180 61 | "1953-12",201 62 | "1954-01",204 63 | "1954-02",188 64 | "1954-03",235 65 | "1954-04",227 66 | "1954-05",234 67 | "1954-06",264 68 | "1954-07",302 69 | "1954-08",293 70 | "1954-09",259 71 | "1954-10",229 72 | "1954-11",203 73 | "1954-12",229 74 | "1955-01",242 75 | "1955-02",233 76 | "1955-03",267 77 | "1955-04",269 78 | "1955-05",270 79 | "1955-06",315 80 | "1955-07",364 81 | "1955-08",347 82 | "1955-09",312 83 | "1955-10",274 84 | "1955-11",237 85 | "1955-12",278 86 | "1956-01",284 87 | "1956-02",277 88 | "1956-03",317 89 | "1956-04",313 90 | "1956-05",318 91 | "1956-06",374 92 | "1956-07",413 93 | "1956-08",405 94 | "1956-09",355 95 | "1956-10",306 96 | "1956-11",271 97 | "1956-12",306 98 | "1957-01",315 99 | "1957-02",301 100 | "1957-03",356 101 | "1957-04",348 102 | "1957-05",355 103 | "1957-06",422 104 | "1957-07",465 105 | "1957-08",467 106 | "1957-09",404 107 | "1957-10",347 108 | "1957-11",305 109 | "1957-12",336 110 | "1958-01",340 111 | "1958-02",318 112 | "1958-03",362 113 | "1958-04",348 114 | "1958-05",363 115 | "1958-06",435 116 | "1958-07",491 117 | "1958-08",505 118 | "1958-09",404 119 | "1958-10",359 120 | "1958-11",310 121 | "1958-12",337 122 | "1959-01",360 123 | "1959-02",342 124 | "1959-03",406 125 | "1959-04",396 126 | "1959-05",420 127 | "1959-06",472 128 | "1959-07",548 129 | "1959-08",559 130 | "1959-09",463 131 | "1959-10",407 132 | "1959-11",362 133 | "1959-12",405 134 | "1960-01",417 135 | "1960-02",391 136 | "1960-03",419 137 | "1960-04",461 138 | "1960-05",472 139 | "1960-06",535 140 | "1960-07",622 141 | "1960-08",606 142 | "1960-09",508 143 | "1960-10",461 144 | "1960-11",390 145 | "1960-12",432 -------------------------------------------------------------------------------- /WAS22/ANOVA_Un_Facteur.R: -------------------------------------------------------------------------------- 1 | # Création des données 2 | publicite_tv <- c(291.94, 324.45, 304.17, 319.53, 307.13, 314.13, 300.21) 3 | publicite_radio <- c(315.72, 282.54, 288.04, 317.66, 253.04, 254.59, 299.39) 4 | publicite_rs <- c(326.54, 388.87, 341.73, 335.05, 388.46, 379.61, 387.35) 5 | 6 | # Combinaison des données dans un data frame 7 | donnees <- data.frame( 8 | vente = c(publicite_tv, publicite_radio, publicite_rs), 9 | groupe = factor(rep(c("TV", "Radio", "RS"), each = 7)) 10 | ) 11 | 12 | View(donnees) 13 | 14 | # Réalisation de l'ANOVA 15 | resultats_anova <- aov(vente ~ groupe, data = donnees) 16 | 17 | # Affichage du tableau de l'ANOVA 18 | summary(resultats_anova) 19 | 20 | 21 | # Test de Bartlett pour l'égalité des variances 22 | test_bartlett <- bartlett.test(vente ~ groupe, data = donnees) 23 | 24 | # Affichage des résultats du test de Bartlett 25 | print(test_bartlett) 26 | 27 | 28 | 29 | 30 | # Test de normalité de Shapiro-Wilk pour chaque groupe 31 | test_normalite_tv <- shapiro.test(publicite_tv) 32 | test_normalite_radio <- shapiro.test(publicite_radio) 33 | test_normalite_rs <- shapiro.test(publicite_rs) 34 | 35 | # Affichage des résultats des tests de normalité 36 | print(test_normalite_tv) 37 | print(test_normalite_radio) 38 | print(test_normalite_rs) 39 | 40 | 41 | # ANOVA dans la pratique 42 | # Étape 0: Installation et chargement des packages nécessaires 43 | if (!require(ggplot2)) install.packages("ggplot2") 44 | if (!require(dplyr)) install.packages("dplyr") 45 | 46 | library(ggplot2) 47 | library(dplyr) 48 | 49 | # Étape 1: Nettoyage des données et analyse univariée 50 | publicite_tv <- c(291.94, 324.45, 304.17, 319.53, 307.13, 314.13, 300.21) 51 | publicite_radio <- c(315.72, 282.54, 288.04, 317.66, 253.04, 254.59, 299.39) 52 | publicite_rs <- c(326.54, 388.87, 341.73, 335.05, 388.46, 379.61, 387.35) 53 | 54 | # Combinaison des données dans un data frame 55 | donnees <- data.frame( 56 | vente = c(publicite_tv, publicite_radio, publicite_rs), 57 | groupe = factor(rep(c("TV", "Radio", "RS"), each = 7)) 58 | ) 59 | 60 | # Analyse univariée (ici, simple résumé statistique pour chaque groupe) 61 | summary(donnees$vente) 62 | summary(donnees$groupe) 63 | 64 | 65 | 66 | # Histogramme des ventes 67 | ggplot(donnees, aes(x = vente)) + 68 | geom_histogram(binwidth = 10, fill = "blue", alpha = 0.7) + 69 | labs(title = "Histogramme des ventes", 70 | x = "Ventes", 71 | y = "Fréquence") 72 | 73 | # Diagramme en barres pour la variable qualitative (groupe de publicité) 74 | ggplot(donnees, aes(x = groupe, fill = groupe)) + 75 | geom_bar() + 76 | labs(title = "Nombre d'observations par type de publicité", 77 | x = "Type de publicité", 78 | y = "Nombre d'observations") 79 | 80 | 81 | 82 | 83 | 84 | # Étape 2: Création d'un boxplot bivarié 85 | ggplot(donnees, aes(x = groupe, y = vente, fill = groupe)) + 86 | geom_boxplot() + 87 | theme_minimal() + 88 | labs(title = "Boxplot des ventes par type de publicité", 89 | x = "Type de publicité", 90 | y = "Ventes") 91 | 92 | # Étape 3: Réalisation de l'ANOVA et analyse du résumé 93 | resultats_anova <- aov(vente ~ groupe, data = donnees) 94 | summary(resultats_anova) 95 | 96 | # Étape 4: Validation de l'ANOVA avec des tests statistiques de normalité et d'égalité de variances 97 | # Test de normalité de Shapiro-Wilk pour chaque groupe 98 | test_normalite_tv <- shapiro.test(donnees$vente[donnees$groupe == "TV"]) 99 | test_normalite_radio <- shapiro.test(donnees$vente[donnees$groupe == "Radio"]) 100 | test_normalite_rs <- shapiro.test(donnees$vente[donnees$groupe == "RS"]) 101 | 102 | # Affichage des résultats des tests de normalité 103 | print(test_normalite_tv) 104 | print(test_normalite_radio) 105 | print(test_normalite_rs) 106 | 107 | # Test de Bartlett pour l'égalité des variances 108 | test_bartlett <- bartlett.test(vente ~ groupe, data = donnees) 109 | print(test_bartlett) 110 | 111 | # Effectuer le test de Tukey 112 | tukey_results <- TukeyHSD(resultats_anova) 113 | print(tukey_results) 114 | 115 | # Réalisation des tests post hoc de Bonferroni 116 | # Effectuer le test de Bonferroni 117 | bonferroni_results <- pairwise.t.test(donnees$vente, donnees$groupe, p.adjust.method = "bonferroni") 118 | print(bonferroni_results) 119 | -------------------------------------------------------------------------------- /WAS22/ANOVA_Unfacteur.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS22/ANOVA_Unfacteur.pptx -------------------------------------------------------------------------------- /WAS22/WAS22_Analyse_De_La_Variance.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS22/WAS22_Analyse_De_La_Variance.xlsx -------------------------------------------------------------------------------- /WAS23/WAS23_R_Python_Pour_DataScientists.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS23/WAS23_R_Python_Pour_DataScientists.pptx -------------------------------------------------------------------------------- /WAS24/WAS24_Stratégie_Création_Contenu.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS24/WAS24_Stratégie_Création_Contenu.pptx -------------------------------------------------------------------------------- /WAS4_Bien_Demarrer_Git_Github.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS4_Bien_Demarrer_Git_Github.pptx -------------------------------------------------------------------------------- /WAS8/WAS8_API_Pour_Le_DataScientist.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS8/WAS8_API_Pour_Le_DataScientist.pptx -------------------------------------------------------------------------------- /WAS8/~$WAS8_API_Pour_Le_DataScientist.pptx: -------------------------------------------------------------------------------- 1 | Natacha NJONGWA Natacha NJONGWA -------------------------------------------------------------------------------- /WAS8_API_Pour_Le_DataScientist.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WAS8_API_Pour_Le_DataScientist.pptx -------------------------------------------------------------------------------- /WAS_Episode1_Bien_Demarrer_Avec_Rmarkdown.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "WAS episode 1" 3 | output: 4 | html_document: 5 | toc: yes 6 | number_sections: yes 7 | word_document: 8 | toc: yes 9 | date: "2023-07-09" 10 | --- 11 | 12 | ```{r setup, include=FALSE} 13 | knitr::opts_chunk$set(echo = TRUE) 14 | ``` 15 | 16 | # Travailler avec du texte 17 | 18 | ## Rmarkdown permet de faire la documentation automatique 19 | ## Flexibilité 20 | 21 | Bienvenu sur LeCoinStat 22 | 23 | ## Ecrire en gras 24 | **Ceci est un texte en gras** 25 | 26 | ## Metre un texte en italique 27 | *Ceci est un texte en italique* 28 | 29 | ## Mettre à la fois en gras et en italique 30 | 31 | ***Ceci est un texte en gras et en italique*** 32 | 33 | ## Intégrer une image dans la doc 34 | Voici le début du challege ![WAS](/Users/natachanjongwayepnga/Documents/LeCoinStat_WAS/WAS1/WAS.png) 35 | 36 | ## Mettre des formule mathématique 37 | 38 | Un exemple $a+b=c$ 39 | 40 | ## Ajout des liens 41 | Abonnez-vous à la chaine [ici](https://www.youtube.com/@LeCoinStat) 42 | 43 | 44 | 45 | # Intégrer le code avec Rmarkdown 46 | ```{r} 47 | data(iris) 48 | head(iris) 49 | 50 | ``` 51 | 52 | ## Statistique descriptive sur la base 53 | ```{r} 54 | #Ceci est le résumé de ma base iris 55 | summary(iris) 56 | ``` 57 | 58 | ## Afficher la base 59 | ```{r} 60 | iris 61 | ``` 62 | 63 | 64 | ## Enlever les codes dans le rendu 65 | ```{r echo=FALSE} 66 | summary(iris) 67 | ``` 68 | 69 | 70 | ## Enlever les résultats 71 | ```{r message=TRUE, paged.print=TRUE} 72 | iris 73 | ``` 74 | 75 | ## Améliorer l'affichage des tableaux 76 | ```{r paged.print=TRUE} 77 | library(knitr) 78 | kable(summary(iris)) 79 | ``` 80 | 81 | ## Mettre en place des graphiques 82 | ```{r} 83 | plot(iris$Sepal.Length,iris$Petal.Length) 84 | ``` 85 | 86 | ## Mettre en place des graphiques 87 | ```{r fig.height=6, fig.width=6} 88 | plot(iris$Sepal.Length,iris$Petal.Length) 89 | ``` 90 | 91 | 92 | ## Flextable pour améliorer les tableaux 93 | le lien [ici](https://ardata-fr.github.io/flextable-book/) 94 | 95 | ## Kableextra 96 | le lien [ici](https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html) 97 | 98 | ## Lien vers la documentation markdown 99 | Le lien [ici](https://bookdown.org/yihui/rmarkdown/) 100 | 101 | ## Pour télécharger automatiquement un fichier pdf 102 | Utiliser la librairie tinytex 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /WebScrapingBeautifulSoup.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WebScrapingBeautifulSoup.pptx -------------------------------------------------------------------------------- /WebScrappingBeautifulSoup.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/WebScrappingBeautifulSoup.pptx -------------------------------------------------------------------------------- /temps.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/temps.pptx -------------------------------------------------------------------------------- /test.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeCoinStat/WAS/b8173a3a2cc5f03abe3f1b1394eec17c3ac1682b/test.docx -------------------------------------------------------------------------------- /testlives: -------------------------------------------------------------------------------- 1 | Ceci est est test 2 | --------------------------------------------------------------------------------