From 957eb70b2f5950f26884ac187f9aa503d9a20ddd Mon Sep 17 00:00:00 2001 From: 016e8af3d60c5fec2a134c4615746371 <016e8af3d60c5fec2a134c4615746371@app-learninglab.inria.fr> Date: Sun, 10 Nov 2024 18:54:52 +0000 Subject: [PATCH] Update exercice.ipynb --- module3/exo3/exercice.ipynb | 158 +++++++++++++++++++++++++++++++++++- 1 file changed, 154 insertions(+), 4 deletions(-) diff --git a/module3/exo3/exercice.ipynb b/module3/exo3/exercice.ipynb index 0bbbe37..bfdeb64 100644 --- a/module3/exo3/exercice.ipynb +++ b/module3/exo3/exercice.ipynb @@ -1,5 +1,156 @@ { - "cells": [], + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Analyse des données de tabagisme et de mortalité\n", + "Ce notebook réalise une analyse des données issues d'une étude longitudinale sur le tabagisme et la mortalité chez les femmes, en prenant en compte des classes d'âge et en appliquant une régression logistique." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Importation des données\n", + "Tout d'abord, nous allons importer les données depuis un fichier CSV. Assurez-vous que votre fichier est bien placé dans le répertoire du notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "# Charger les données depuis un fichier CSV\n", + "df = pd.read_csv('Subject6_smoking.csv')\n", + "df.head() # Afficher les 5 premières lignes pour vérifier" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Calcul des effectifs vivants et décédés en fonction du statut de fumeur\n", + "Nous allons maintenant calculer le nombre total de femmes vivantes et décédées en fonction de leur statut de fumeur (fumeuse ou non)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# Calcul des effectifs vivants et décédés en fonction du statut de fumeur\n", + "grouped = df.groupby(['Smoker', 'Status']).size().unstack(fill_value=0)\n", + "grouped" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Calcul du taux de mortalité\n", + "Le taux de mortalité est défini comme le nombre de décès divisé par le nombre total de personnes dans chaque groupe." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Calcul du taux de mortalité\n", + "grouped['Mortality Rate'] = grouped['Dead'] / (grouped['Alive'] + grouped['Dead'])\n", + "grouped" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Introduction des classes d'âge\n", + "Nous allons maintenant diviser les femmes en classes d'âge et calculer les effectifs et taux de mortalité dans chaque groupe." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Définition des tranches d'âge\n", + "bins = [0, 34, 54, 64, 100] # Tranches d'âge\n", + "labels = ['18-34', '34-54', '55-64', '65+']\n", + "df['Age Group'] = pd.cut(df['Age'], bins=bins, labels=labels, right=False)\n", + "\n", + "# Comptage des effectifs par statut de fumeur, statut de vie/mort et groupe d'âge\n", + "grouped_age = df.groupby(['Smoker', 'Age Group', 'Status']).size().unstack(fill_value=0)\n", + "\n", + "# Calcul du taux de mortalité dans chaque groupe d'âge et statut de fumeur\n", + "grouped_age['Mortality Rate'] = grouped_age['Dead'] / (grouped_age['Alive'] + grouped_age['Dead'])\n", + "grouped_age" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Régression logistique\n", + "Pour analyser la probabilité de décès en fonction de l'âge et du statut de fumeur, nous allons utiliser la régression logistique." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import statsmodels.api as sm\n", + "\n", + "# Création de la variable binaire 'Death' où 1 = mort et 0 = vivant\n", + "df['Death'] = df['Status'].apply(lambda x: 1 if x == 'Dead' else 0)\n", + "\n", + "# Modèle de régression logistique : 'Death' ~ 'Age' + 'Smoker'\n", + "X = pd.get_dummies(df[['Age', 'Smoker']], drop_first=True) # Convertir 'Smoker' en variables binaires\n", + "y = df['Death']\n", + "\n", + "# Ajouter une constante pour l'interception\n", + "X = sm.add_constant(X)\n", + "\n", + "# Créer et ajuster le modèle\n", + "model = sm.Logit(y, X)\n", + "result = model.fit()\n", + "\n", + "# Résultats du modèle\n", + "result.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. Visualisation des résultats\n", + "Enfin, nous allons visualiser les résultats de l'analyse sous forme de graphiques pour mieux comprendre les tendances." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Graphique des taux de mortalité par statut de fumeur et classe d'âge\n", + "sns.barplot(data=df, x='Age Group', y='Mortality Rate', hue='Smoker')\n", + "plt.title('Taux de mortalité par groupe d\'âge et statut de fumeur')\n", + "plt.show()" + ] + } + ], "metadata": { "kernelspec": { "display_name": "Python 3", @@ -15,11 +166,10 @@ "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.8.8" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 5 } -- 2.18.1