From 299e16576dfaba5468fb3cb61be9eecf6cf475b2 Mon Sep 17 00:00:00 2001 From: johanleroy Date: Mon, 15 Sep 2025 12:15:13 +0200 Subject: [PATCH] TP1 --- M02_TD01_Exercice.ipynb | 330 +++++++++++++++++++++++ M03_TP01_Exercice.ipynb | 562 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 892 insertions(+) create mode 100644 M02_TD01_Exercice.ipynb create mode 100644 M03_TP01_Exercice.ipynb diff --git a/M02_TD01_Exercice.ipynb b/M02_TD01_Exercice.ipynb new file mode 100644 index 0000000..c4fd577 --- /dev/null +++ b/M02_TD01_Exercice.ipynb @@ -0,0 +1,330 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d6453138", + "metadata": {}, + "source": [ + "# TD : Prise en main de Jupyter Notebook\n", + "\n", + "Objectif :\n", + "- Découvrir les principales fonctionnalités d'un notebook\n", + "- Modifier et créer des cellules de texte\n", + "- Découvrir la syntaxe Markdown\n", + "- Savoir créer, modifier et exécuter des cellules de code Python\n", + "\n", + "Une première fonctionnalité de découverte : vous avez réussi à ouvrir ce notebook !\n" + ] + }, + { + "cell_type": "markdown", + "id": "0b2f4495", + "metadata": {}, + "source": [ + "## Première partie : prise en main des cellules de code\n", + "Dans les cellules de code, on écrit du code Python... selon la syntaxe Python !\n", + "Pour éxecuter une cellule, on se place dedans en cliquant dessus, puis on fait `shift + entrée`. Le résultat de l'exécution s'affiche ensuite juste en dessus de la cellule s'il y en a un. Essayez sur le bloc de code suivant :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "168301b9", + "metadata": {}, + "outputs": [], + "source": [ + "# On peut faire un joli commentaire : le code suivant doit afficher la chaine de caractère Hello World\n", + "print(\"Hello world\")" + ] + }, + { + "cell_type": "markdown", + "id": "2470b22b", + "metadata": {}, + "source": [ + "Par défaut, si l'on termine un bloc de code avec uniquement le nom d'une variable, ou un calcul sans le stocker dans une variable, alors cela sera affiché en dessous de la cellule après l'exécution, même sans instruction `print`. Testez avec l'exemple des deux blocsci-dessous :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "37802d6f", + "metadata": {}, + "outputs": [], + "source": [ + "# La cellule se termine par un résultat qui n'est pas stocké dans une variable : le résultat s'affiche en-dessous\n", + "1 + 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7f5cc2e", + "metadata": {}, + "outputs": [], + "source": [ + "# Le résultat est stocké dans une variable : aucun affichage\n", + "c = 42* 176" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e9982cc9", + "metadata": {}, + "outputs": [], + "source": [ + "# On termine la cellule par un nom de variable : son contenu s'affiche en-dessous\n", + "c" + ] + }, + { + "cell_type": "markdown", + "id": "f48d4aa9", + "metadata": {}, + "source": [ + "Un point essentiel à comprendre : l'ordre d'exécution a son importance ! C'est pour cela que l'ordre est bien indiqué à gauche d'une cellule de code. Prenons l'exemple ci-dessous : \n", + "* Commencez par executer les cellules dans leur ordre d'apparition, et constatez ce qu'il se passe.\n", + "* Exécutez-les ensuite en suivant l'ordre indiqué en commentaire du code. Que constatez-vous ?\n", + "* Modifier le contenu de la variable var, puis réexécutez le calcul a * var pour constater si les variables sont bien mises à jour." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5abcc3cf", + "metadata": {}, + "outputs": [], + "source": [ + "# A executer en deuxième\n", + "a = 12 * var\n", + "print(\"Le résultat du calcul \", 12, \"*\", var, \"est \", a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f9f7e419", + "metadata": {}, + "outputs": [], + "source": [ + "# A executer en premier\n", + "var = 56" + ] + }, + { + "cell_type": "markdown", + "id": "99301668", + "metadata": {}, + "source": [ + "### A vous de jouer :\n", + "Insérez ci-dessous une nouvelle cellule de code. Créez une liste de cinq nombre, et multiplier chacun de ces nombres par 5 avant d'en afficher le résultat." + ] + }, + { + "cell_type": "markdown", + "id": "5d0c722a", + "metadata": {}, + "source": [ + "### Quelques astuces :\n", + "* Pour réinitialiser le notebook, on peut redémarrer le kernel (`kernel -> restart`)\n", + "* On peut aussi effacer tous les résultats des cellules de code (`cell - > all output -> clear`)\n", + "* Une fois une cellule sélectionnée, on peut la déplacer vers le haut ou le bas avec les flèches à gauche de l'instruction `exécuter`\n", + "* Pensez à sauvegarder régulièrement (`ctrl + s` suffit)\n", + "* Une fois terminé, vous pouvez exporter votre notebook sous différents formats, notament `html` pour le publier en ligne." + ] + }, + { + "cell_type": "markdown", + "id": "625f7f9a", + "metadata": {}, + "source": [ + "## Deuxième partie : prise en main des cellules markdown" + ] + }, + { + "cell_type": "markdown", + "id": "088e726a", + "metadata": {}, + "source": [ + "Pour modifier une cellule de markdown, il suffit de double-cliquer sur la cellule, ce qui la bascule alors en mode édition. Testons avec cette cellule : modifiez le texte ci-dessous pour qu'il fasse apparaitre vos informations personnelles.\n", + "\n", + "Prénom NOM, promo CDAXXX." + ] + }, + { + "cell_type": "markdown", + "id": "9c7e730d", + "metadata": {}, + "source": [ + "### Les bases de Markdown\n", + "En cas de besoin, le plus simple est de se référer à un résumé de la syntaxe *markdown* : https://www.christopheducamp.com/2014/09/18/love-markdown/#code\n", + "\n", + "En résumé, vous trouverez ci-dessous la liste des principales fonctionnalités utiles pour un notebook.\n", + "**Consigne** : Pour chacune, créer une cellule markdown pour tester et valider l'utilisation de la syntaxe.\n", + "\n", + "* Titres" + ] + }, + { + "cell_type": "raw", + "id": "65813099", + "metadata": {}, + "source": [ + "Les titres s'écrivent grâce au symbole #\n", + "# Titre de niveau 1\n", + "## Titre de niveau 2\n", + "### Titre de niveau 3\n", + "\n", + "(et ce genre de block dans un notebook correspond à du texte brut !)" + ] + }, + { + "cell_type": "markdown", + "id": "3feaa3c6", + "metadata": {}, + "source": [ + "* Emphase (**gras**, *italique*, ~~barré~~)" + ] + }, + { + "cell_type": "raw", + "id": "2cbf458e", + "metadata": {}, + "source": [ + "**gras**, *italique*, ~~barré~~" + ] + }, + { + "cell_type": "markdown", + "id": "1693882e", + "metadata": {}, + "source": [ + "* Sauts de ligne, lignes horizontales et blocs de texte" + ] + }, + { + "cell_type": "raw", + "id": "5aa0a45e", + "metadata": {}, + "source": [ + "Le saut de ligne s'obtient avec la balise
\n", + "La ligne horizontale avec au moins trois astérisques ou underscore :\n", + "***\n", + "ou\n", + "___\n", + "\n", + "Les blocs de texte s'obtiennent avec la balise >" + ] + }, + { + "cell_type": "markdown", + "id": "cef21a9e", + "metadata": {}, + "source": [ + "* Listes ordonnées et non ordonnées" + ] + }, + { + "cell_type": "raw", + "id": "16fceda9", + "metadata": {}, + "source": [ + "On organise une liste ordonnée avec des numéros :\n", + "1. Premier item\n", + "2. Deuxième item\n", + " 1. Premier sous-item\n", + " 2. Deuxième sous-item\n", + " \n", + "Pour le non-ordonnée, on utilise au choix +, - ou *\n", + "+ Premier item\n", + "- Deuxième item\n", + "* Troisième item" + ] + }, + { + "cell_type": "markdown", + "id": "7baac6a8", + "metadata": {}, + "source": [ + "* Tableau" + ] + }, + { + "cell_type": "raw", + "id": "ea81e0d5", + "metadata": {}, + "source": [ + "Les | séparent les colonnes et il doit y avoir au moins trois tirets entre l'entête et le contenu du tableau ( --- ).\n", + "| Col 1 | Col2 | Col 3 |\n", + "| ------ | ----- | ------ |\n", + "| A | B | C |\n", + "| D | E | F |" + ] + }, + { + "cell_type": "markdown", + "id": "214c481b", + "metadata": {}, + "source": [ + "* Liens URL et images" + ] + }, + { + "cell_type": "raw", + "id": "a65839e8", + "metadata": {}, + "source": [ + "[Description de l'URL : lien ENI Ecole](https://www.eni-ecole.fr/)\n", + "![Description de l'image : logo ENI](https://www.eni-ecole.fr/wp-content/uploads/2022/08/logo_eni.png)" + ] + }, + { + "cell_type": "markdown", + "id": "de5da1c4", + "metadata": {}, + "source": [ + "* Blocs de texte et blocs de code" + ] + }, + { + "cell_type": "raw", + "id": "c553a46d", + "metadata": {}, + "source": [ + "```Ceci est un bloc```" + ] + }, + { + "cell_type": "markdown", + "id": "6cf514d9", + "metadata": {}, + "source": [ + "## Conclusion\n", + "\n", + "Vous avez découvert les premières manipulations de base d'un notebook Jupyter ! Il ne vous reste plus qu'à les mettre en pratique dans des notebook qui iront plus loin en terme de code Python, et qui à terme présenteront vos analyses de données et les résultats produits par vos algorithmes d'apprentissage." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/M03_TP01_Exercice.ipynb b/M03_TP01_Exercice.ipynb new file mode 100644 index 0000000..e03862d --- /dev/null +++ b/M03_TP01_Exercice.ipynb @@ -0,0 +1,562 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "55d19678", + "metadata": {}, + "source": [ + "# TP1 du module 3 : les librairies Python pour le ML\n", + "\n", + "Dans ce TP, nous allons explorer les quatre librairies présentées dans le cours. Objectifs :\n", + "* Savoir créer et récupérer des données avec Numpy et Pandas\n", + "* Savoir interroger les données avec Pandas\n", + "* Savoir calculer des statistiques de base\n", + "* Produire des visualisations avec Matplotlib et Seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4ceeadf3", + "metadata": {}, + "outputs": [], + "source": [ + "# Insérer ici l'import des librairies dont vous avez besoin\n" + ] + }, + { + "cell_type": "markdown", + "id": "06617af8", + "metadata": {}, + "source": [ + "## Première partie : s'échauffer avec Numpy\n", + "Commencons avec quelques exercices sur Numpy, qui vous permettront également de réviser certaines fonctionnalités de Python. Pour rappel, toute la documentation Numpy est disponible en cliquant sur ce [lien](https://numpy.org/doc/stable/user/index.html)\n", + "\n", + "**Question 1 :** créer une matrice `mat` 3*3 contenant tous les chiffres de 1 à 9, à l'aide des méthodes `arange` et `reshape`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f4bbe51d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "b7a6cbc4", + "metadata": {}, + "source": [ + "**Question 2 :** écrire une fonction prenant en paramètre une matrice carré (de taille n*n, où n est un entier), et qui renvoie sa trace (la somme des nombres sur la diagonale de la matrice), sans utiliser la méthode `trace` de numpy. Appliquez votre fonction à la matrice `mat` créée à la question précédente, et comparez le résultat avec la méthode `trace` de numpy pour valider votre fonction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f646cc15", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "05c9d50e", + "metadata": {}, + "source": [ + "**Question 3 :** créez une deuxième matrice `mat2`, de dimension 3*3 également, qui ne contient que des 1." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d09bc99f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "81406a80", + "metadata": {}, + "source": [ + "**Question 4 :** créez la matrice `vert`, qui consiste à empiler verticalement `mat` sur `mat2`. Résultat attendu :\n", + "\n", + "| | | |\n", + "|---|---|---|\n", + "| 1 | 2 | 3 |\n", + "| 4 | 5 | 6 |\n", + "| 7 | 8 | 9 |\n", + "| 1 | 1 | 1 |\n", + "| 1 | 1 | 1 |\n", + "| 1 | 1 | 1 |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e79b59fd", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "4d168af1", + "metadata": {}, + "source": [ + "**Question 5 :** créez la matrice `hori`, qui consiste à coller horizontalement `mat` à `mat2`. Résultat attendu :\n", + "\n", + "| | | | | | |\n", + "|---|---|---|---|---|---|\n", + "| 1 | 2 | 3 | 1 | 1 | 1 |\n", + "| 4 | 5 | 6 | 1 | 1 | 1 |\n", + "| 7 | 8 | 9 | 1 | 1 | 1 |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "041d438b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "c37d28f6", + "metadata": {}, + "source": [ + "**Question 5 :** écrire une fonction qui prend en paramètre une matrice et un nombre, et qui renvoie le nombre d'éléments de la matrice qui sont strictement inférieurs à ce nombre. Vous pouvez utiliser la méthode `count_nonzero` de numpy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f916be17", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "a6a6b43b", + "metadata": {}, + "source": [ + "## Partie 2 : manipuler un jeu de données\n", + "Après cet échauffement, nous allons passer à la manipulation d'un jeu de données, pour en commencer l'analyse, et pour produire des visualisations.\n", + "\n", + "### Présentation du jeu de données\n", + "Pour ce TP (et les suivants), nous allons analyser les données d'un jeu de données sur les passagers du Titanic. Pour rappel, le RMS Titanic est un paquebot transatlantique britannique qui fait naufrage dans l'océan Atlantique Nord en 1912 à la suite d'une collision avec un iceberg, lors de son voyage inaugural de Southampton à New York. Entre 1 490 et 1 520 personnes trouvent la mort, ce qui fait de cet événement l'une des plus grandes catastrophes maritimes survenues en temps de paix et la plus grande pour l'époque. \n", + "\n", + "![Le Titanic à Southampton le 10 avril 1912. ](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/RMS_Titanic_3.jpg/420px-RMS_Titanic_3.jpg)\n", + "\n", + "Ce jeu de données est assez utilisé pour débuter dans le machine learning. Nous irons plus loin sur le prochain TP (module 4) dans son analyse, sur cette partie l'objectif est simplement de prendre en main Pandas, Matplotlib et Seaborn.\n", + "\n", + "Les données contiennent un ensemble d'information sur ces passages (genre, age, etc), ainsi qu'un atribut sépcifiant s'ils ont ou non survécu au naufrage. Pour vous aider, voilà un bref descriptifs des attributs du jeu de données : \n", + "\n", + "| Attribut | Explication | \n", + "| ------------- |:-------------: | \n", + "| Survived | 0 = Décédé, 1 = Survivant| \n", + "| PClass | 1 = cabine 1ere classe, 2= cabine 2e classe, 3=cabine 3e classe | \n", + "| Sex | 0=femme, 1=homme |\n", + "| sibsp | Nombre de frères, soeurs, et/ou conjoint à bord |\n", + "|parch | Nombre de parents et/ou enfants à bord |\n", + "| ticket | Numéro du ticket |\n", + "|cabin | Numéro de cabine |\n", + "|embarked | Port d'embarquement (C = Cherbourg; Q = Queenstown; S = Southampton) |" + ] + }, + { + "cell_type": "markdown", + "id": "5e1c586f", + "metadata": {}, + "source": [ + "### Pandas\n", + "Dans cette partie, chaque question ne nécessite qu'une seule ligne de code. \n", + "\n", + "**Question 1 :** charger le jeu de données dans un Dataframe depuis l'adresse suivante : https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "96ab19ad", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "539c23f2", + "metadata": {}, + "source": [ + "**Question 2 :** combien de lignes comporte ce dataset ? Combien de colonnes ? Contient-il des valeurs nulles dans certaines colonnes ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "72c8a945", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "292c712a", + "metadata": {}, + "source": [ + "**Question 3 :** calculez les statistiques de base sur les colonnes numériques ce jeu de données" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b8aea3e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "805559e2", + "metadata": {}, + "source": [ + "**Question 4 :** sélectionnez uniquement les colonnes `Survived` et `Age`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b984a966", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "899df8dc", + "metadata": {}, + "source": [ + "**Question 5 :** sélectionner les informations sur le passager ayant occupé la cabine B78. Résultat attendu : \n", + "\n", + "| | PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |\n", + "|---:|------------:|---------:|-------:|-----------------------------------------------:|-------:|----:|------:|------:|---------:|---------:|------:|---------:|\n", + "| 31 | 32 | 1 | 1 | Spencer, Mrs. William Augustus (Marie Eugenie) | female | NaN | 1 | 0 | PC 17569 | 146.5208 | B78 | C |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4f6fd760", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "3c6ac11b", + "metadata": {}, + "source": [ + "**Question 6 :** Sélectionnez uniquement les passagers âgés de plus de 30 ans (strictement), qui sont des femmes, qui voyageaient en première classe, et qui n'ont pas survécu.\n", + "\n", + "Résultat attendu :\n", + "\n", + "| | PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |\n", + "|----:|------------:|---------:|-------:|---------------------------:|-------:|-----:|------:|------:|---------:|--------:|------:|---------:|\n", + "| 177 | 178 | 0 | 1 | Isham, Miss. Ann Elizabeth | female | 50.0 | 0 | 0 | PC 17595 | 28.7125 | C49 | C |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7da8b14", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "5fbf471a", + "metadata": {}, + "source": [ + "**Question 7 :** trouver le nom des passagers qui sont montés à Cherbourg ou à Queenstown, qui voyageaient en 1e classe, avec au moins deux frère/soeurs/conjoints? Résultat attendu :\n", + "\n", + "| | PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |\n", + "|----:|------------:|---------:|-------:|--------------------------------------:|-------:|-----:|------:|------:|---------:|--------:|----------------:|---------:|\n", + "| 245 | 246 | 0 | 1 | Minahan, Dr. William Edward | male | 44.0 | 2 | 0 | 19928 | 90.000 | C78 | Q |\n", + "| 311 | 312 | 1 | 1 | Ryerson, Miss. Emily Borie | female | 18.0 | 2 | 2 | PC 17608 | 262.375 | B57 B59 B63 B66 | C |\n", + "| 742 | 743 | 1 | 1 | Ryerson, Miss. Susan Parker \"Suzette\" | female | 21.0 | 2 | 2 | PC 17608 | 262.375 | B57 B59 B63 B66 | C |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eb6cf581", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "ec2f5672", + "metadata": {}, + "source": [ + "**Question 8 :** compter le nombre de femmes et d'hommes ayant survécu. (rappel : en une seule ligne de code !). Résultat attendu :\n", + "\n", + "| Sex | |\n", + "|-------------:|----:|\n", + "| female | 233 |\n", + "| male | 109 |\n", + "| dtype: int64 | |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bfeb02c2", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "48f48106", + "metadata": {}, + "source": [ + "**Question 9** : pour chaque classe, calculer la moyenne d'âge. Résultat attendu :\n", + "\n", + "| Pclass | |\n", + "|:-------------------------:|----------:|\n", + "| 1 | 38.233441 |\n", + "| 2 | 29.877630 |\n", + "| 3 | 25.140620 |\n", + "| Name: Age, dtype: float64 | |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd7b6d5c", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "78cd99eb", + "metadata": {}, + "source": [ + "**Question 10 :** ajouter une colonne au datframe contenant les données du titanic, qui représente le nombre total de personnes accompagnant chaque passager (somme de `SibSp` et `Parch`)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "722450a8", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "10c01d50", + "metadata": {}, + "source": [ + "### Matplotlib\n", + "Il est à présent temps de proposer quelques visualisations sur ce jeu de données. Pour les questions suivantes, il vous est demandé d'utiliser uniquement matplotlib (pyplot), même si des équivalences peuvent exister avec seaborn.\n", + "\n", + "La documentation matplotlib est accessible à l'adresse suivante : https://matplotlib.org/stable/index.html\n", + "\n", + "**Question 1 :** afficher un graphe, de type scatterplot, affichant l'âge des passagers en fonction du prix de leur ticket. Pensez à bien afficher un texte sur chaque axe, et ajouter un titre." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34f1fe70", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "92a0c112", + "metadata": {}, + "source": [ + "**Question 2 :** afficher un histogramme (barplot) montrant, pour chaque classe (1e, 2e et 3e), le nombre de passagers à bord du bateau. Pensez à nommer vos axes et votre figure. Sur l'abscisse, seules les classes 1, 2 et 3 doivent apparaitre (pas de nombre décimal) : si nécessaire, regarder dans la documention comment utiliser `xticks`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b5c4552f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "6f811c0d", + "metadata": {}, + "source": [ + "**Question 3 :** proposez un graphique similaire au précédent, en représentant séparement pour chaque classe le nombre d'hommes et le nombre de femmes, sur deux barres côte à côte. Pensez à nommer vos axes, votre figure, et à afficher une légende expliquant quelle couleur représente les hommes, et laquelle représente les femmes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e32ab09", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "aed1e423", + "metadata": {}, + "source": [ + "**Question 4 :** proposez un scatterplot montrant le nombre total de membres de la famille voyageant avec le passsagers (calculé à la question 10 de la section sur pandas), en fonction du prix du ticket (sur l'axe y, ordonnée). Colorez chaque point du graphique en fonction de si le passager a survécu ou non. Affichez une légende expliquant ce code couleur, donnez un titre à vos axes, et ajoutez un titre à votre graphique." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ab3e1e93", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "35d5fe49", + "metadata": {}, + "source": [ + "**Question 5 :** proposez une figure composée de six sous-graphes, répartis sur deux lignes et 3 colonnes. Chaque colonne représente un port d'embarquement. Sur la première, pour chaque port, représentez sur un scatterplot l'âge des passagers (abscisse) en fonction du prix de leur billet (ordonnée). Sur la deuxième ligne, pour chaque port, représentez un barplot représentant le nombre de passagers de chaque genre." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f3662f1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "d2845c23", + "metadata": {}, + "source": [ + "### Seaborn\n", + "\n", + "Vous allez cette fois générer des visualisations uniquement avec Seaborn. La documentation est accessible à l'adresse suivante : https://seaborn.pydata.org/api.html\n", + "\n", + "\n", + "**Question 1 :** proposez un scatterplot de l'âge des passagers en fonction du prix de leur ticket. Colorez chaque point en fonction du port dans lequel le passager à embarqué. Affichez une légende, nommez vos axes, et affichez un titre pour votre graphique." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0068c9f7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "565aad2c", + "metadata": {}, + "source": [ + "**Question 2 :** faire un barplot représentant le nombre de passagers par genre. Indice : utilisez un `histplot`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c8cb3730", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "a12b94fb", + "metadata": {}, + "source": [ + "**Question 3 :** reproduire l'histogramme de la question 3 de la partie matplot lib - histogramme du nombre et de femmes pour chaque classe." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f58d3ff7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "5dbf5040", + "metadata": {}, + "source": [ + "**Question 4 :** proposer un pairplot pour les colonnes suivantes : Age et Fare. Colorer chaque point en fonction de si le passager a survécu ou non." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2cfc979b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "8a3e5008", + "metadata": {}, + "source": [ + "**Question 5 :** en utilisant la fonction `corr` de pandas, et la fonction `heatmap` de seaborn, proposez une *heatmap* représentant la corrélation entre les attributs suivants : Survived, Age, Pclass, FamilyMembers(calculé par vos soins dans la partie pandas), et Fare." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "862165a1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "e0735b47", + "metadata": {}, + "source": [ + "# Fin du TP !" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}