diff --git a/._intro Pandas.ipynb b/._intro Pandas.ipynb new file mode 100644 index 0000000..5bbaf93 Binary files /dev/null and b/._intro Pandas.ipynb differ diff --git a/Algebre lineaire-checkpoint.ipynb b/Algebre lineaire-checkpoint.ipynb new file mode 100644 index 0000000..7f4e356 --- /dev/null +++ b/Algebre lineaire-checkpoint.ipynb @@ -0,0 +1,439 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vecteurs, matrices, algèbre linéaire\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Le but de ce notebook est de se familiariser avec l'algèbre linéaire. Et de poursuivre l'utilisation de numpy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Préliminaires sur l'algebre" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En mathématiques on aime bien regrouper les objets mathématiques par famille. Cela permettre des propriétés d'un objet juste en connaissant la famille auquel il appartient.\n", + "\n", + "Par exemple les nombres entiers naturels (positifs) ou les nombres rationnels (fractions) forment chacun une famille. \n", + "\n", + "Il existe d'autres familles comme les matrices, les fonctions linaires, les vecteurs et tout un tas de choses. \n", + "\n", + "Maintenant considérons la chose suivante : \n", + "\n", + "Quand vous additionnez deux nombres entiers, le résultat est un un nombre entier, n'est-ce pas ? Il est en de même quand vous multipliez deux nombres entiers. \n", + "\n", + "Inversement, quand vous divisez un nombre entier par un autre (10 / 3 par exemple), vous n'obtenez pas forcément un nombre entier.\n", + "\n", + "Ainsi pour une famille d'éléments donnée, il existe des manières de combiner les éléments dont le resultat est encore un membre de la famille. Il existe d'autres opérations dont le resultat n'est plus un membre de la famille.\n", + "\n", + "A peu de chose près, on appelle une famille d'éléments couplés à une opération qui conserve cette appartenance un monoïde. Ainsi les nombres entiers munis de l'opération d'addition (notée +) est un monoïd. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pour prouver qu'une propriété est vraie, on va se contenter de dire qu'une propriété est vraie si elle vraie pour des valeurs générées aléatoirement. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "coder la fonction is_number() qui retourne si objet est bien un nombre entier. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def is_number(x):\n", + " # a remplir\n", + " \n", + "print(is_number(2), is_number(6), is_number(6.5))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A l'aide de numpy.random coder une fonction génère des nombres alétoires entiers entre -10000 et + 10000." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def generate_random_integer(n_number_to_generate):\n", + " # a remplir\n", + "print(generate_random_number(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vérifier \"statistiquement\" que la multiplication de deux nombres entre 0 et 1 reste entre 0 et 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vecteur " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On a vu que la combinaison de deux éléments d'une famille selon une opération pouvait ou non rester dans la famille originale. Mais peut-on généraliser cette notion à deux éléments ? La réponse est oui. Nous allons nous au cas des espaces vectoriels dont les membres sont des vecteurs. En plus d'être stable par une opération, on veut que quand on multiplie un élément de la famille par un nombre entier (réel), ce dernier reste dans la famille. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Considérons la famille des tableaux 1D contenant 5 éléments. Avec numpy créer le un tableau 1D contenant (1, 1, 1, 1, 1)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Multiplier cet élément par 2, 6, $\\pi$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Proposer une opération (et la coder avec numpy) qui combine des vecteurs de taille 3 dont le resultat n'est pas un vecteur de taille trois" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On voit que les éléments de la famille des tableau de dimension (quelque soit la taille) restent dans la famille quand on les additionne et quand on les multiplie par un nombre quelconque. Il s'agit donc d'un espace vectoriel et on appelera désormais ses éléments des vecteurs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Colinearité de vecteurs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On dit que deux vecteurs v et w sont colinéaires si $w = \\alpha v$. Afficher le vecteur (1, 1) et le vecteur (-1, 1). Sont ils colinéaires ? Coder une fonction qui renvoie un booleen indiquant si deux vecteurs sont colinéaires où non" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def are_vector_colinear(v1, v2)\n", + " #a remplir\n", + "are_vector_colinear(np.array([1, 1, 1]), np.array([-1, 1, 1]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Combinaison linéaire" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Si on considère une famille de vecteur $v_1, v_2, v_3, ..., v_n$ et suite une suite de nombe $a_1, a_2, ..., a_n$. On appelle combinaison linéaire le $vecteur$ $\\sum_i a_i v_i$. Coder la fonction `linear_comb` qui calcule la combinaison linéaire d'une famille de vecteur par une famille de nombre" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def linear_comb(vector_familly, coeffcients):\n", + " # a remplir\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Regarder les chapitres 1 à 3 : https://www.youtube.com/watch?v=kjBOesZCoqc&t=0s&index=1&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Notions sur les bases (et non pas notions de base)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Saviez-vous que tout nombre entier peut se décomper en produit de nombre premier ? Par exemple, $9 = 3^2$ et $45 = 3^2 * 2^2$. Cela veut dire qu'on peut en fait représenter tout nombre compliqué par des \"atome\" ou des nombres élémentaires simples. Pour les vecteurs c'est pareil, on peut toujours représenter un vecteur compliqué comme la combinaison de vecteurs simples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On s'intéresse pour le moment aux vecteurs de dimension 2. Soit $v = (2, -1)$. Proposer une combinaison linéaire de vecteurs non colinéaires le resultat vaut $v$ " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Matrices " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En première approximation on va considérer que les matrices sont simplement des tableaux 2D de nombres. \n", + "Considérons \n", + "\n", + "$A = \\begin{pmatrix}\n", + " 1 & 1 \\\\\n", + " 1 & 1 \n", + "\\end{pmatrix}$\n", + "\n", + "et \n", + "\n", + "$B = \\begin{pmatrix}\n", + " -1 & 1 \\\\\n", + " 2 & 2 \n", + "\\end{pmatrix}$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Avec numpy.matmul caluler A * B, puis B * A" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Avec l'opérateur * calculer $A * B$, puis $B * A$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui calculer la somme de toutes les valeurs d'un tableau\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui calcule le produit d'une matrice et d'un vecteur" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Regarder les vidéos 4 et 5 de https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Matrice de rotations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Afficher le vecteur $(1, 1, 1)$ et le multiplier par la matrice \n", + "$\n", + "\\begin{pmatrix}\n", + " cos(\\theta) & -sin(\\theta) \\\\\n", + " sin(\\theta) & cos(\\theta) \n", + "\\end{pmatrix}\n", + "$\n", + "et le réafficher\n", + "\n", + "Faire une fonction qui retourne une matrice de rotation `create_rotation_matrix(theta)`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "unexpected EOF while parsing (, line 3)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m3\u001b[0m\n\u001b[0;31m \u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m unexpected EOF while parsing\n" + ] + } + ], + "source": [ + "def create_rotation_matrix(theta):\n", + " # a completer\n", + " \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Multiplier le vecteur (1, 0) par la matrice de rotation définie par $\\theta = \\pi / 2$, afficher le vecteur original et après la rotation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Produit scalaire entre deux vecteurs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Quand on dispose d'un vecteur, on peut définir une opération que l'on appelle un vecteur. Pour les éléments de $\\mathcal{R}^n$ (les tableau 1D de taille n) il s'agit simplement de la somme du produit deux à deux des éléments.\n", + "\n", + "On définit le produit scalaire entre v et w par $\\sum_i v_i * w_i$\n", + "\n", + "Faire une fonction `scalar_product` qui calcule le produit scalaire entre deux vecteurs v1 et v2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def scalar_product(v1, v2):\n", + " \"\"\"\n", + " \"\"\"\n", + "\n", + "v1 = np.array([0 1])\n", + "v2 = np.array([1 0])\n", + "scalar_product(v1, v2)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Algebre lineaire.ipynb b/Algebre lineaire.ipynb new file mode 100644 index 0000000..3a23674 --- /dev/null +++ b/Algebre lineaire.ipynb @@ -0,0 +1,576 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vecteurs, matrices, algèbre linéaire\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Le but de ce notebook est de se familiariser avec l'algèbre linéaire. Et de poursuivre l'utilisation de numpy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Préliminaires sur l'algebre" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En mathématiques on aime bien regrouper les objets mathématiques par famille. Cela permettre des propriétés d'un objet juste en connaissant la famille auquel il appartient.\n", + "\n", + "Par exemple les nombres entiers naturels (positifs) ou les nombres rationnels (fractions) forment chacun une famille. \n", + "\n", + "Il existe d'autres familles comme les matrices, les fonctions linaires, les vecteurs et tout un tas de choses. \n", + "\n", + "Maintenant considérons la chose suivante : \n", + "\n", + "Quand vous additionnez deux nombres entiers, le résultat est un un nombre entier, n'est-ce pas ? Il est en de même quand vous multipliez deux nombres entiers. \n", + "\n", + "Inversement, quand vous divisez un nombre entier par un autre (10 / 3 par exemple), vous n'obtenez pas forcément un nombre entier.\n", + "\n", + "Ainsi pour une famille d'éléments donnée, il existe des manières de combiner les éléments dont le resultat est encore un membre de la famille. Il existe d'autres opérations dont le resultat n'est plus un membre de la famille.\n", + "\n", + "A peu de chose près, on appelle une famille d'éléments couplés à une opération qui conserve cette appartenance un monoïde. Ainsi les nombres entiers munis de l'opération d'addition (notée +) est un monoïd. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pour prouver qu'une propriété est vraie, on va se contenter de dire qu'une propriété est vraie si elle vraie pour des valeurs générées aléatoirement. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "coder la fonction is_number() qui retourne si objet est bien un nombre entier. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True True False\n" + ] + } + ], + "source": [ + "def is_number(x):\n", + " # a remplir\n", + " if type(x) == int:\n", + " return True\n", + " else:\n", + " return False\n", + " \n", + "print(is_number(2), is_number(6), is_number(6.5))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A l'aide de numpy.random coder une fonction génère des nombres alétoires entiers entre -10000 et + 10000." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 642 6248 -2846 181 842 -8823 -5315 3244 -9410 2189]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Abdoulaye\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:4: DeprecationWarning: This function is deprecated. Please call randint(-10000, 10000 + 1) instead\n", + " after removing the cwd from sys.path.\n" + ] + } + ], + "source": [ + "def generate_random_integer(n_number_to_generate):\n", + " # a remplir\n", + " import numpy\n", + " generate_random_integer = numpy.random.random_integers(-10000, 10000, n_number_to_generate)\n", + " return generate_random_integer\n", + "print(generate_random_integer(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vérifier \"statistiquement\" que la multiplication de deux nombres entre 0 et 1 reste entre 0 et 1" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.30405719 0.50284882 0.24285596 0.06124574 0.92402132 0.00201745\n", + " 0.04648266 0.32881122 0.17676481 0.33982579]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "def generate_random(n_number_to_generate):\n", + " # a remplir\n", + " generate_random = np.random.uniform(low=0.0, high=1.0, size=n_number_to_generate)\n", + " return generate_random * generate_random\n", + "print(generate_random(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vecteur " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On a vu que la combinaison de deux éléments d'une famille selon une opération pouvait ou non rester dans la famille originale. Mais peut-on généraliser cette notion à deux éléments ? La réponse est oui. Nous allons nous au cas des espaces vectoriels dont les membres sont des vecteurs. En plus d'être stable par une opération, on veut que quand on multiplie un élément de la famille par un nombre entier (réel), ce dernier reste dans la famille. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Considérons la famille des tableaux 1D contenant 5 éléments. Avec numpy créer le un tableau 1D contenant (1, 1, 1, 1, 1)." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 1, 1, 1, 1])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "D1 = np.array([1, 1, 1, 1, 1])\n", + "D1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Multiplier cet élément par 2, 6, $\\pi$" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2 2 2 2 2]\n", + "[6 6 6 6 6]\n", + "[3.14159265 3.14159265 3.14159265 3.14159265 3.14159265]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "m1_D1 = 2 * D1\n", + "print (m1_D1)\n", + "m2_D1 = 6 * D1\n", + "print (m2_D1)\n", + "m3_D1 = np.pi * D1\n", + "print (m3_D1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Proposer une opération (et la coder avec numpy) qui combine des vecteurs de taille 3 dont le resultat n'est pas un vecteur de taille trois" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 1 1] [1 0 1]\n", + "(3,) (3,)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([1, 1, 1, 1, 0, 1])" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "E1 = np.array([1, 1, 1])\n", + "F1 = np.array([1, 0, 1])\n", + "print(E1, F1)\n", + "print(E1.shape, F1.shape)\n", + "E_F = np.concatenate([E1,F1])\n", + "E_F" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On voit que les éléments de la famille des tableau de dimension (quelque soit la taille) restent dans la famille quand on les additionne et quand on les multiplie par un nombre quelconque. Il s'agit donc d'un espace vectoriel et on appelera désormais ses éléments des vecteurs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Colinearité de vecteurs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On dit que deux vecteurs v et w sont colinéaires si $w = \\alpha v$. Afficher le vecteur (1, 1) et le vecteur (-1, 1). Sont ils colinéaires ? Coder une fonction qui renvoie un booleen indiquant si deux vecteurs sont colinéaires où non" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 1]\n", + "[-1 1]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Abdoulaye\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:5: RuntimeWarning: divide by zero encountered in true_divide\n", + " \"\"\"\n" + ] + }, + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(np.array([1, 1]))\n", + "print(np.array([-1, 1]))\n", + "def are_vector_colinear(v1, v2):\n", + " #a remplir\n", + " return np.unique(v1/v2).size == 1\n", + "are_vector_colinear(np.array([1, 1, 0]), np.array([0, 1, 1]))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Combinaison linéaire" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Si on considère une famille de vecteur $v_1, v_2, v_3, ..., v_n$ et suite une suite de nombe $a_1, a_2, ..., a_n$. On appelle combinaison linéaire le $vecteur$ $\\sum_i a_i v_i$. Coder la fonction `linear_comb` qui calcule la combinaison linéaire d'une famille de vecteur par une famille de nombre" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def linear_comb(vector_familly, coeffcients):\n", + " # a remplir\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Regarder les chapitres 1 à 3 : https://www.youtube.com/watch?v=kjBOesZCoqc&t=0s&index=1&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Notions sur les bases (et non pas notions de base)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Saviez-vous que tout nombre entier peut se décomper en produit de nombre premier ? Par exemple, $9 = 3^2$ et $45 = 3^2 * 2^2$. Cela veut dire qu'on peut en fait représenter tout nombre compliqué par des \"atome\" ou des nombres élémentaires simples. Pour les vecteurs c'est pareil, on peut toujours représenter un vecteur compliqué comme la combinaison de vecteurs simples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On s'intéresse pour le moment aux vecteurs de dimension 2. Soit $v = (2, -1)$. Proposer une combinaison linéaire de vecteurs non colinéaires le resultat vaut $v$ " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Matrices " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En première approximation on va considérer que les matrices sont simplement des tableaux 2D de nombres. \n", + "Considérons \n", + "\n", + "$A = \\begin{pmatrix}\n", + " 1 & 1 \\\\\n", + " 1 & 1 \n", + "\\end{pmatrix}$\n", + "\n", + "et \n", + "\n", + "$B = \\begin{pmatrix}\n", + " -1 & 1 \\\\\n", + " 2 & 2 \n", + "\\end{pmatrix}$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Avec numpy.matmul caluler A * B, puis B * A" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Avec l'opérateur * calculer $A * B$, puis $B * A$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui calculer la somme de toutes les valeurs d'un tableau\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui calcule le produit d'une matrice et d'un vecteur" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Regarder les vidéos 4 et 5 de https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Matrice de rotations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Afficher le vecteur $(1, 1, 1)$ et le multiplier par la matrice \n", + "$\n", + "\\begin{pmatrix}\n", + " cos(\\theta) & -sin(\\theta) \\\\\n", + " sin(\\theta) & cos(\\theta) \n", + "\\end{pmatrix}\n", + "$\n", + "et le réafficher\n", + "\n", + "Faire une fonction qui retourne une matrice de rotation `create_rotation_matrix(theta)`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "unexpected EOF while parsing (, line 3)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m3\u001b[0m\n\u001b[0;31m \u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m unexpected EOF while parsing\n" + ] + } + ], + "source": [ + "def create_rotation_matrix(theta):\n", + " # a completer\n", + " \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Multiplier le vecteur (1, 0) par la matrice de rotation définie par $\\theta = \\pi / 2$, afficher le vecteur original et après la rotation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Produit scalaire entre deux vecteurs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Quand on dispose d'un vecteur, on peut définir une opération que l'on appelle un vecteur. Pour les éléments de $\\mathcal{R}^n$ (les tableau 1D de taille n) il s'agit simplement de la somme du produit deux à deux des éléments.\n", + "\n", + "On définit le produit scalaire entre v et w par $\\sum_i v_i * w_i$\n", + "\n", + "Faire une fonction `scalar_product` qui calcule le produit scalaire entre deux vecteurs v1 et v2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def scalar_product(v1, v2):\n", + " \"\"\"\n", + " \"\"\"\n", + "\n", + "v1 = np.array([0 1])\n", + "v2 = np.array([1 0])\n", + "scalar_product(v1, v2)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Dictionnaire.ipynb b/Dictionnaire.ipynb new file mode 100644 index 0000000..fde2946 --- /dev/null +++ b/Dictionnaire.ipynb @@ -0,0 +1,154 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dictionnaires" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Executer le code suivant." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'key1': 1, 'key2': 'hello', 'name': 'john'}\n", + "john\n", + "dict_keys(['key1', 'key2', 'name'])\n", + "dict_values([1, 'hello', 'john'])\n" + ] + } + ], + "source": [ + "a = {\n", + " 'key1': 1,\n", + " 'key2': 'hello',\n", + " 'name': 'john'\n", + "}\n", + "\n", + "print(a)\n", + "print(a['name'])\n", + "print(a.keys())\n", + "print(a.values())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Avec la synthaxe `a['key_name']` ajouter un élément au dictionnaire et vérifier que ce dernier est bien dans le dictionnaire. Mettre à jour `key1` avec une valeur au choix de la même manière." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ap" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Chercher dans la documentation ou sur internet pour supprimer un élément d'un dictionnaire et supprimer la clé `name`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer un second dictionnaire b et fusionner les deux dictionnaires a et b (pareil chercher comment faire)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On va créer un dictionnaire à partir d'une liste de clé et une liste de valeur. Créer une liste contenant les clés du dictionnaire (mettre ce que vous voulez) et créer une liste contenant les valeur" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "à l'aide de la fonction zip créer une liste de tuple ('key', 'value')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer le dictionnaire à l'aide du tuple" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Python_advanced (1).ipynb b/Python_advanced (1).ipynb new file mode 100644 index 0000000..5876e2b --- /dev/null +++ b/Python_advanced (1).ipynb @@ -0,0 +1,1569 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python avancé" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "lien vers la doc Python https://docs.python.org/3.5/tutorial/datastructures.html#sets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> Python also includes a data type for sets. A set is an unordered collection with no duplicate elements. Basic uses include membership testing and eliminating duplicate entries. \n", + "\n", + "> Set objects also support mathematical operations like union, intersection, difference, and symmetric difference.\n", + "\n", + "> Curly braces or the set() function can be used to create sets. Note: to create an empty set you have to use set(), not {}; the latter creates an empty dictionary, a data structure that we discuss in the next section." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'mango', 'pear', 'orange', 'banana', 'apple'}\n" + ] + } + ], + "source": [ + "fruit = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana', 'mango'}\n", + "print(fruit)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'pineapple', 'banana'}\n" + ] + } + ], + "source": [ + "basket = {'pineapple' , 'banana'}\n", + "print(basket)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'pear', 'orange', 'banana', 'apple'}\n" + ] + } + ], + "source": [ + "# idem\n", + "print(set(['apple', 'orange', 'apple', 'pear', 'orange', 'banana']))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "'pineapple' in basket" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "'crabgrass' in basket" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "'crabgrass' in basket" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'mango', 'pear', 'orange', 'banana', 'apple'}\n", + "{'pineapple', 'banana'}\n" + ] + } + ], + "source": [ + "exotic = {'pineapple','banana'}\n", + "print(fruit)\n", + "print(exotic)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'apple', 'mango', 'orange', 'pear'}" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#exercice : interpréter\n", + "fruit - exotic" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'apple', 'banana', 'mango', 'orange', 'pear', 'pineapple'}" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercice : interpreter\n", + "fruit | exotic" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'apple', 'mango', 'orange', 'pear', 'pineapple'}" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercice interpreter\n", + "fruit ^ exotic" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'banana'}" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercice interpreter\n", + "fruit & exotic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### méthodes de l'API" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### difference : set_A.difference(set_B)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice écrire la différence des 2 ensembles suivants:\n", + "set1 = set(['a','b','c'])\n", + "set2 = set(['c','d','z'])" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'d', 'z'}" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# votre code ici\n", + "set1.difference(set2)\n", + "set2.difference(set1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### union : set_A.union(set_B)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice écrire l'union des 2 ensembles \n", + "# votre code ici" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### intersection : set_A.intersection(set_B)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice écrire l'union des 2 ensembles \n", + "# votre code ici" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### autres méthodes https://docs.python.org/3.5/library/stdtypes.html#set" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "{'b', 'c', 'a'}\n", + "{'c', 'z', 'd'}\n" + ] + } + ], + "source": [ + "print(set1.issubset(set2))\n", + "print(set1)\n", + "print(set2)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "# interpréter" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'b', 'c', 'a'}\n", + "{'x', 'b', 'c', 'a'}\n" + ] + } + ], + "source": [ + "print(set1)\n", + "set1.add('x')\n", + "print(set1)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "#interpréter" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'x', 'b', 'c', 'a'}\n", + "{'x', 'c', 'a'}\n" + ] + } + ], + "source": [ + "print(set1)\n", + "set1.remove('b')\n", + "print(set1)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "# interpreter" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'x'" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set1.pop()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "# interpreter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## List comprehension" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]\n" + ] + } + ], + "source": [ + "squares = []\n", + "for x in range(10):\n", + " squares.append(x**2)\n", + "print (squares)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# idem\n", + "[x**2 for x in range(10)]" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3, 4, 5, 6]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[x +1 for x in range(6)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exceptions\n", + "* Une exception est un événement qui se produit lors de l'exécution d'un programme.\n", + "* Si cet événement n'est pas prévu (et donc pas géré par le développeur) => c'est une erreur, un bug\n", + "* Lorsque l'événement est géré (à l’intérieur d’un bloc try), le développeur fournit un code alternatif pour chaque événement qui peut se produire dans certaines parties du code.\n", + "* La gestion des événements est un moyen d'augmenter la sûreté de fonctionnement d'un programme.\n", + "\n", + "\n", + "https://docs.python.org/fr/3.5/library/exceptions.html#bltin-exceptions" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [], + "source": [ + "# syntaxe :\n", + "try:\n", + " #instructions fonctionnement normal\n", + " pass\n", + "except evenement:\n", + " # instruction si evenenment se produit\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "# plusieurs évenements :\n", + "# syntaxe :\n", + "try:\n", + " #instructions fonctionnement normal\n", + " pass\n", + "except (evenement , evenement2):\n", + " # instruction si evenenment se produit\n", + " pass\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Vous avez enfin réussi à saisir un entier\n" + ] + } + ], + "source": [ + "while True:\n", + " try:\n", + " n = int(input(\"Entrez un entier : \"))\n", + " break\n", + " except ValueError as e:\n", + " print(str(e))\n", + " print(\"Ce n'est pas un entier! Essayez à nouveau ...\")\n", + "print(\"Vous avez enfin réussi à saisir un entier\")" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "int" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n = int(input(\"\"))\n", + "type(n)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# comment fabriquer ses propres exceptions et les utiliser ensuite ?\n", + "# il faut faire hériter de la classe mère (Exception)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "# votre code ici" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Les Fonctions. Notions Avancées" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### une fonction " + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "def ma_fonction():\n", + " \"\"\"ma_fonction\"\"\"\n", + " print(\"hi\")" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'ma_function' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mma_function\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'ma_function' is not defined" + ] + } + ], + "source": [ + "print(ma_function)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En Python, les noms de fonction sont des références sur les fonctions.\n", + "Plusieurs noms (références) peuvent désigner le même objet " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "func = ma_fonction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(func)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(ma_fonction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### une fonction dans une fonction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def outer():\n", + " print(\"outer\")\n", + " def inner():\n", + " print(\"inner\")\n", + "outer()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "outer()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "inner()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "oups, l'appel de la fonction inner() produit une erreur ......" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice expliquer pourquoi l'appel de la fonction inner() produit une erreur\n", + "# ....." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# comment appeler la fonction inner() ?\n", + "# votre code ici\n", + "#----------------- outer\n", + "def outer():\n", + "#----------- inner\n", + " def inner():\n", + " print(\"inner\")\n", + "#---------- inner fin \n", + " print(\"outer\") \n", + "#....votre code ici\n", + " inner()\n", + "#----------------- outer fin\n", + "outer()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En Python, Tout est objet \n", + "\n", + "* Accès via référence\n", + "* paramêtre d'une fonction = référence sur un objet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### fonction en paramètre d'une fonction " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def petit_carton():\n", + " pass\n", + "def moyen_carton():\n", + " pass\n", + "def gros_carton(func):\n", + " print(func.__name__)\n", + " func()\n", + "#========================\n", + "# client moyenne boite\n", + "gros_carton(moyen_carton)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice : appeler grosse_boite en lui passant une fonction \n", + "# en parametre (petite_boite)\n", + "# votre code ici\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice : appeler f en lui passant la fonction suivante en parametre\n", + " \n", + "def h():\n", + " print (\"coucou\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Le nom de la fonction en cours d execution est accessible via nom_function._ _name_ _\n", + "\n", + "Modifier les 2 fonctions suivantes afin d'afficher le nom de la fonction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def g():\n", + " print(\"Hi, it's me \")\n", + " print(\"Thanks for calling me\")\n", + " \n", + "def f(func):\n", + " print(\"Hi, it's me \")\n", + " print(\"I will call 'func' now\")\n", + " func()\n", + " print(\"func's real name is \") \n", + " \n", + "f(g)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Un exemple avec l'API Python standard" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "\n", + "def foo(func):\n", + " print(\"The function \" + func.__name__ + \" was passed to foo\")\n", + " x = 0\n", + " res = func(x)\n", + " return res\n", + "\n", + "print(foo(math.sin))\n", + "print(foo(math.cos))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fonction retournant une fonction " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Output fonction = référence sur un objet \n", + "\n", + "Grace à cela, une fonction peut retourner \n", + "* une variable\n", + "* une référence sur une fonction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# écrire le code d'une fonction retournant la valeur d'une variable\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def g():\n", + " print(\"Hi, it's me \")\n", + " print(\"Thanks for calling me\")\n", + " \n", + "def fonc(): \n", + " return g\n", + "nf = fonc() # <- g\n", + "nf()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "avec des parametres ..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# recopier le code dans un IDE\n", + "# executer la commande print(nf1(1))\n", + "# en PAS A PAS (debug)\n", + "def f(x):\n", + " def g(y):\n", + " return y + x + 3 \n", + " return g\n", + "\n", + "nf1 = f(1)\n", + "nf2 = f(3)\n", + "\n", + "print(nf1(1))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def polynomial_creator(a, b):\n", + " def polynomial(x):\n", + " return a * x + b \n", + " return polynomial\n", + " \n", + "p1 = polynomial_creator(2, 3)\n", + "p2 = polynomial_creator(-1, 2)\n", + "\n", + "for x in range(2):\n", + " print(x, p1(x), p2(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Decorator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tous les éléments précédents vont nous servir à construire un \"decorator\"\n", + "* en Python tout est \"objet\"\n", + "* référence\n", + "* fonction dans fonction \n", + "* fonction retournant une fonction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice:\n", + "# ajouter un commentaire dans le code où les éléments précédents sont présents :\n", + "# func ?\n", + "def our_decorator(func): \n", + " def function_wrapper(x):\n", + " print(\"\")\n", + " # func.__name__ ?\n", + " print(\"Before calling \" + func.__name__)\n", + " # func() ?\n", + " func(x)\n", + " print(\"After calling \" + func.__name__)\n", + " return function_wrapper" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@our_decorator\n", + "def foo():\n", + " print(\"Hi, foo has been called with \")\n", + "\n", + "foo()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# 1) executer pas a pas\n", + "# (copier coller les 2 cellules précédentes dans un IDE)\n", + "\n", + "# 2) commenter le code\n", + "\n", + "# 3) écrire la pile d'appel (là où passe le code)\n", + "# exemple de pile d'appel:\n", + "# fonction1(arg = 0)\n", + "# fonction2(arg = \"blabla\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice:\n", + "# 1) ecrire une fonction (simple) à un paramètre d'entrée\n", + "@our_decorator\n", + "def ma_fonction_simple(x):\n", + " print(\"coucou\")\n", + "\n", + "ma_fonction_simple(\"hi\")\n", + "\n", + "# 2) décorer cette fonction à l'aide du décorateur \"our_decorator\"\n", + "# 3) exécuter le code (pas à pas dans IDE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### décoration des fonctions de l'API Python " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On peut également décorer des fonctions de la bibliothèque standard Python.\n", + "\n", + "Dans ce cas on n'utilise PAS le @" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from math import sin, cos, pi\n", + "\n", + "def our_decorator(func):\n", + " def function_wrapper(x):\n", + " print(\"Before calling \" + func.__name__)\n", + " res = func(x)\n", + " print('x= {0} resultat = {1}'.format(str(x),str(res)))\n", + " print(\"After calling \" + func.__name__)\n", + " print(\"\")\n", + " return function_wrapper\n", + "\n", + "print (pi)\n", + "print(\"\")\n", + "sin_ = our_decorator(sin)\n", + "cos_ = our_decorator(cos)\n", + "\n", + "for f in [sin_]:\n", + " f(pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Summarizing we can say that a decorator in Python is a __callable object__ that is used to __modify__ a function, method or class definition. \n", + "\n", + "The original object, the one which is going to be modified, \n", + "* is passed to a decorator as an argument. \n", + "* the decorator returns a modified object, e.g. a modified function, \n", + "* which is bound to the name used in the definition. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Usage du decorator : contrôle de parametres d'entrée" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from math import sqrt\n", + "# sens ?\n", + "sqrt(4)\n", + "raise Exception(\"attention !\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice (avancé)\n", + "# écrire le code d'un decorator (deco_arg_control) qui controle l'entrée de la fonction 'racine'\n", + "# le décorateur lance une exception (code : raise Exception(\"attention !\")) quand le paramètre d'entrée\n", + "# n'est pas de type approprié" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Décorateur avancé (facultatif)\n", + "\n", + "#### 1) Decorator de fonction dont le nombre d'arguments est variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from random import random, randint, choice\n", + "\n", + "def our_decorator(func):\n", + " def function_wrapper(*args, **kwargs):\n", + " print(\"Before calling \" + func.__name__)\n", + " res = func(*args, **kwargs)\n", + " print(res)\n", + " print(\"After calling \" + func.__name__)\n", + " return function_wrapper\n", + "\n", + "random = our_decorator(random)\n", + "randint = our_decorator(randint)\n", + "choice = our_decorator(choice)\n", + "\n", + "# sens ?\n", + "random()\n", + "# sens ?\n", + "randint(3, 8) \n", + "# sens ?\n", + "choice([10, 20, 30])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# 1) executer pas a pas\n", + "# (copier coller dans un IDE)\n", + "\n", + "# 2) commenter le code\n", + "\n", + "# 3) écrire la pile d'appel (là où passe le code)\n", + "# exemple de pile d'appel:\n", + "# fonction1(arg = 0)\n", + "# fonction2(arg = \"blabla\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Voici 2 decorators (presque) identiques" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def evening_greeting(func):\n", + " def function_wrapper():\n", + " print(\"Good evening mister \" + func.__name__)\n", + " func()\n", + " return function_wrapper\n", + "\n", + "def morning_greeting(func):\n", + " def function_wrapper():\n", + " print(\"Good morning mister \" + func.__name__ )\n", + " func()\n", + " return function_wrapper\n", + "\n", + "@evening_greeting\n", + "def bond():\n", + " pass\n", + "bond()\n", + "\n", + "@morning_greeting\n", + "def bond():\n", + " pass\n", + "\n", + "bond()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Problème__ : \n", + "Le code est dupliqué et presque identique (morning vs evening).... \n", + "Pas bon !\n", + "\n", + "__Solution__ : \n", + "Il faudrait ajouter un parametre (hi) au décorateur afin de rendre le code + simple \n", + "\n", + "C'est ce qui est fait dans le code qui suit :\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def greeting(expr):\n", + " def greeting_decorator(func):\n", + " def function_wrapper():\n", + " print(expr + \" mister \" + func.__name__ )\n", + " func()\n", + " return function_wrapper\n", + " return greeting_decorator\n", + "\n", + "hi = \"Good evening \"\n", + "@greeting(hi)\n", + "def bond():\n", + " pass\n", + "\n", + "bond()\n", + "\n", + "\n", + "hi = \"Good morning \"\n", + "@greeting(hi)\n", + "def bond():\n", + " pass\n", + "\n", + "bond()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# 1) executer pas a pas\n", + "# (copier coller dans un IDE)\n", + "\n", + "# 2) commenter le code\n", + "\n", + "# 3) écrire la pile d'appel (là où passe le code)\n", + "# exemple de pile d'appel:\n", + "# fonction1(arg = 0)\n", + "# fonction2(arg = \"blabla\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2) Decorateur de fonction implémentant une mémoire cache" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En se basant sur le code du point précédent (nombre variable d'argument):" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def our_decorator(func):\n", + " def function_wrapper(*args):\n", + " print(\"Before calling \" + func.__name__)\n", + " res = func(*args)\n", + " print(res)\n", + " print(\"After calling \" + func.__name__)\n", + " return function_wrapper" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Before calling function_wrapper\n", + "Before calling foo\n", + "None\n", + "After calling foo\n", + "None\n", + "After calling function_wrapper\n", + "None\n" + ] + } + ], + "source": [ + "@our_decorator\n", + "def foo(arg1):\n", + " pass\n", + "foo_ = our_decorator(foo)\n", + "print (foo_(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Décorateur mémoire cache\n", + "En s'inspirant du code précédent, voici le pseudo-code d'un décorateur qui implémente une mémoire cache : \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def memoize(func):\n", + " cache = dict()\n", + "\n", + " def memoized_func(*args):\n", + " # si arg dans le cache\n", + " # ne PAS refaire le calcul. \n", + " # Juste renvoyer la valeur stockée , c'est le principe du cache ;-)\n", + " # sinon faire calcul\n", + " cache[args] = \"faire le calcul ici (c'est le cas si données pas encore en cache)\"\n", + " #retourner resultat\n", + "\n", + " return memoized_func" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice avancé : compléter le code précédent \n", + "# ========= mémoire cache ========\n", + "\"\"\"\n", + "def memoize(func):\n", + " cache = dict()\n", + "\n", + " def memoized_func(args):\n", + " if args in cache:\n", + " return cache[args]\n", + " result = func(args)\n", + " cache[args] = result\n", + " return result\n", + "\n", + " return memoized_func\n", + " \"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "La suite de Fibonacci (https://en.wikipedia.org/wiki/Fibonacci_number)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice écrire une fonction implémentant le calcul de la suite de Fibonacci\n", + "# votre code ici\n", + "def fibonacci(n):\n", + " # compléter ....\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calcul du temps d'exécution (en seconde)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import timeit\n", + "timeit.timeit('fibonacci(35)', globals=globals(), number=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Très lent .... \n", + "solution on utilise la mémoire cache à l'aide du décorateur \"memoize\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "memoized_fibonacci = memoize(fibonacci)\n", + "timeit.timeit('memoized_fibonacci(10)', globals=globals(), number=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3) Solution de production (bien meilleure) :\n", + "@functools.lru_cache(maxsize = ...)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "#décorer la fonction de fibonacci\n", + "import functools\n", + "\n", + "@functools.lru_cache(maxsize=128)\n", + "def fibonacci(n):\n", + " # compléter ....\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Autres :" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CacheInfo(hits=0, misses=0, maxsize=128, currsize=0)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#fibonacci.cache_clear()\n", + "fibonacci.cache_info()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Python_advanced.ipynb b/Python_advanced.ipynb new file mode 100644 index 0000000..b4f96fc --- /dev/null +++ b/Python_advanced.ipynb @@ -0,0 +1,1434 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python avancé" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "lien vers la doc Python https://docs.python.org/3.5/tutorial/datastructures.html#sets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> Python also includes a data type for sets. A set is an unordered collection with no duplicate elements. Basic uses include membership testing and eliminating duplicate entries. \n", + "\n", + "> Set objects also support mathematical operations like union, intersection, difference, and symmetric difference.\n", + "\n", + "> Curly braces or the set() function can be used to create sets. Note: to create an empty set you have to use set(), not {}; the latter creates an empty dictionary, a data structure that we discuss in the next section." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "fruit = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana', 'mango'}" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'pineapple', 'banana'}\n" + ] + } + ], + "source": [ + "basket = {'pineapple' , 'banana'}\n", + "print(basket)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'banana', 'apple', 'pear', 'orange'}\n" + ] + } + ], + "source": [ + "# idem\n", + "print(set(['apple', 'orange', 'apple', 'pear', 'orange', 'banana']))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "'pineapple' in basket" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "'crabgrass' in basket" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "'crabgrass' in basket" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'banana', 'mango', 'apple', 'pear', 'orange'}\n", + "{'pineapple', 'banana'}\n" + ] + } + ], + "source": [ + "exotic = {'pineapple','banana'}\n", + "print(fruit)\n", + "print(exotic)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'apple', 'mango', 'orange', 'pear'}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#exercice : interpréter\n", + "fruit - exotic" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'apple', 'banana', 'mango', 'orange', 'pear', 'pineapple'}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercice : interpreter\n", + "fruit | exotic" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'apple', 'mango', 'orange', 'pear', 'pineapple'}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercice interpreter\n", + "fruit ^ exotic" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'banana'}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercice interpreter\n", + "fruit & exotic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### méthodes de l'API" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### difference : set_A.difference(set_B)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'a', 'b'}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exercice écrire la différence des 2 ensembles suivants:\n", + "set1 = set(['a','b','c'])\n", + "set2 = set(['c','d','z'])" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'a', 'b'}" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# votre code ici\n", + "set1.difference(set2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### union : set_A.union(set_B)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice écrire l'union des 2 ensembles \n", + "# votre code ici" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### intersection : set_A.intersection(set_B)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice écrire l'union des 2 ensembles \n", + "# votre code ici" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### autres méthodes https://docs.python.org/3.5/library/stdtypes.html#set" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set1.issubset(set2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# interpréter" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "set1.add('x')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#interpréter" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "set1.remove('b')" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "# interpreter" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'c'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "set1.pop()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# interpreter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## List comprehension" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]\n" + ] + } + ], + "source": [ + "squares = []\n", + "for x in range(10):\n", + " squares.append(x**2)\n", + "print (squares)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# idem\n", + "[x**2 for x in range(10)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exceptions\n", + "* Une exception est un événement qui se produit lors de l'exécution d'un programme.\n", + "* Si cet événement n'est pas prévu (et donc pas géré par le développeur) => c'est une erreur, un bug\n", + "* Lorsque l'événement est géré (à l’intérieur d’un bloc try), le développeur fournit un code alternatif pour chaque événement qui peut se produire dans certaines parties du code.\n", + "* La gestion des événements est un moyen d'augmenter la sûreté de fonctionnement d'un programme.\n", + "\n", + "\n", + "https://docs.python.org/fr/3.5/library/exceptions.html#bltin-exceptions" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# syntaxe :\n", + "try:\n", + " #instructions fonctionnement normal\n", + " pass\n", + "except evenement:\n", + " # instruction si evenenment se produit\n", + " pass\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# plusieurs évenements :\n", + "# syntaxe :\n", + "try:\n", + " #instructions fonctionnement normal\n", + " pass\n", + "except (evenement , evenement2):\n", + " # instruction si evenenment se produit\n", + " pass " + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Entrez un entier : 1\n", + "Vous avez enfin réussi à saisir un entier\n" + ] + } + ], + "source": [ + "while True:\n", + " try:\n", + " n = int(input(\"Entrez un entier : \"))\n", + " break\n", + " except ValueError as e:\n", + " print(str(e))\n", + " print(\"Ce n'est pas un entier! Essayez à nouveau ...\")\n", + "print(\"Vous avez enfin réussi à saisir un entier\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fonctions " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### une fonction " + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "def ma_fonction():\n", + " \"\"\"ma_fonction\"\"\"\n", + " print(\"hi\")\n", + " \n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En Python, les noms de fonction sont des références sur les fonctions.\n", + "Plusieurs noms (références) peuvent désigner le même objet " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "func = ma_fonction" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(func)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(ma_fonction)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### une fonction dans une fonction" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "def outer():\n", + " print(\"outer\")\n", + " def inner():\n", + " print(\"inner\")" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "outer\n" + ] + } + ], + "source": [ + "outer()" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'inner' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0minner\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'inner' is not defined" + ] + } + ], + "source": [ + "inner()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "oups, l'appel de la fonction inner() produit une erreur ......" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice expliquer pourquoi l'appel de la fonction inner() produit une erreur\n", + "# ....." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "outer\n", + "inner\n" + ] + } + ], + "source": [ + "# comment appeler la fonction inner() ?\n", + "# votre code ici\n", + "def outer():\n", + " #-----------------inner\n", + " def inner():\n", + " print(\"inner\")\n", + " #-----------------inner fin\n", + " print(\"outer\") \n", + " inner()\n", + " #-----------------outer fin\n", + "outer()\n", + "#...." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En Python, Tout est objet \n", + "\n", + "* Accès via référence\n", + "* paramêtre d'une fonction = référence sur un objet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### fonction en paramètre d'une fonction " + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "def g():\n", + " print(\"Hi, it's me 'g'\")\n", + " print(\"Thanks for calling me\")\n", + " \n", + "def f(func):\n", + " print(\"Hi, it's me 'f'\")\n", + " print(\"I will call 'func' now\")\n", + " func()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi, it's me 'f'\n", + "I will call 'func' now\n", + "Hi, it's me 'g'\n", + "Thanks for calling me\n" + ] + } + ], + "source": [ + "# exercice : appeler grosse_boite en lui passant une fonction en parametre\n", + "# votre code ici\n", + "f(g)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi, it's me 'f'\n", + "I will call 'func' now\n", + "coucou\n" + ] + } + ], + "source": [ + "# exercice : appeler f en lui passant la fonction suivante en parametre\n", + " \n", + "def h():\n", + " print (\"coucou\")\n", + " \n", + "f(h)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Le nom de la fonction en cours d execution est accessible via nom_function._ _name_ _\n", + "\n", + "Modifier les 2 fonctions suivantes afin d'afficher le nom de la fonction" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi, it's me \n", + "I will call 'func' now\n", + "Hi, it's me \n", + "Thanks for calling me\n", + "func's real name is g\n" + ] + } + ], + "source": [ + "def g():\n", + " print(\"Hi, it's me \")\n", + " print(\"Thanks for calling me\")\n", + " \n", + "def f(func):\n", + " print(\"Hi, it's me \")\n", + " print(\"I will call 'func' now\")\n", + " func()\n", + " print(\"func's real name is \" + func.__name__) \n", + " \n", + "f(g)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "Un autre exemple ..." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The function sin was passed to foo\n", + "2.3492405557375347\n", + "The function cos was passed to foo\n", + "-0.6769881462259364\n" + ] + } + ], + "source": [ + "import math\n", + "\n", + "def foo(func):\n", + " print(\"The function \" + func.__name__ + \" was passed to foo\")\n", + " res = 0\n", + " for x in [1, 2, 2.5]:\n", + " res += func(x)\n", + " #-----------------------------------------\n", + " #méthode 2 : x = 0\n", + " #res = func(x)\n", + " #-----------------------------------------\n", + " return res\n", + "\n", + "print(foo(math.sin))\n", + "print(foo(math.cos))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fonction retournant une fonction " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Output fonction = référence sur un objet \n", + "\n", + "Grace à cela, une fonction peut retourner \n", + "* une variable\n", + "* une référence sur une fonction" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [], + "source": [ + "# écrire le code d'une fonction retournant la valeur d'une variable\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi, it's me \n", + "Thanks for calling me\n" + ] + } + ], + "source": [ + "def g():\n", + " print(\"Hi, it's me \")\n", + " print(\"Thanks for calling me\")\n", + " \n", + "def fonc(): \n", + " return g\n", + "nf = fonc() # <- g\n", + "nf()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "avec des parametres ..." + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# recopier le code dans un IDE\n", + "# executer la commande print(nf1(1))\n", + "# en PAS A PAS (debug)\n", + "def f(x):\n", + " def g(y):\n", + " return y + x + 3 \n", + " return g\n", + "\n", + "nf1 = f(1)\n", + "nf2 = f(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 3 2\n", + "1 5 1\n" + ] + } + ], + "source": [ + "def polynomial_creator(a, b):\n", + " def polynomial(x):\n", + " return a * x + b \n", + " return polynomial\n", + " \n", + "p1 = polynomial_creator(2, 3)\n", + "p2 = polynomial_creator(-1, 2)\n", + "\n", + "for x in range(2):\n", + " print(x, p1(x), p2(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Decorator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tous les éléments précédents vont nous servir à construire un \"decorator\"\n", + "* en Python tout est \"objet\"\n", + "* référence\n", + "* fonction dans fonction \n", + "* fonction retournant une fonction" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice:\n", + "# ajouter un commentaire dans le code où les éléments précédents sont présents :\n", + "# func ?\n", + "def our_decorator(func): \n", + " # x ?\n", + " def function_wrapper(x):\n", + " print(\"\")\n", + " # func.__name__ ?\n", + " print(\"Before calling \" + func.__name__)\n", + " # func(x) ?\n", + " func(x)\n", + " print(\"After calling \" + func.__name__)\n", + " return function_wrapper" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Before calling foo\n", + "Hi, foo has been called with Hi\n", + "After calling foo\n" + ] + } + ], + "source": [ + "@our_decorator\n", + "def foo(x):\n", + " print(\"Hi, foo has been called with \" + str(x))\n", + "\n", + "foo(\"Hi\")" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# 1) executer pas a pas\n", + "# (copier coller les 2 cellules précédentes dans un IDE)\n", + "\n", + "# 2) commenter le code\n", + "\n", + "# 3) écrire la pile d'appel (là où passe le code)\n", + "# exemple de pile d'appel:\n", + "# fonction1(arg = 0)\n", + "# fonction2(arg = \"blabla\")" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'hi' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"coucou\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mma_fonction_simple\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mhi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 8\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;31m# 2) décorer cette fonction à l'aide du décorateur \"our_decorator\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'hi' is not defined" + ] + } + ], + "source": [ + "# exercice:\n", + "# 1) ecrire une fonction (simple) à un paramètre d'entrée\n", + "@our_decorator\n", + "def ma_fonction_simple():\n", + " print(\"coucou\")\n", + " \n", + "ma_fonction_simple(hi)\n", + " \n", + "# 2) décorer cette fonction à l'aide du décorateur \"our_decorator\"\n", + "# 3) exécuter le code (pas à pas dans IDE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### décoration des fonctions de l'API Python " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On peut également décorer des fonctions de la bibliothèque standard Python.\n", + "\n", + "Dans ce cas on n'utilise PAS le @" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.141592653589793\n", + "\n", + "Before calling sin\n", + "x= 3.141592653589793 resultat = 1.2246467991473532e-16\n", + "After calling sin\n", + "\n", + "Before calling cos\n", + "x= 3.141592653589793 resultat = -1.0\n", + "After calling cos\n", + "\n" + ] + } + ], + "source": [ + "from math import sin, cos, pi\n", + "\n", + "def our_decorator(func):\n", + " def function_wrapper(x):\n", + " print(\"Before calling \" + func.__name__)\n", + " res = func(x)\n", + " print('x= {0} resultat = {1}'.format(str(x),str(res)))\n", + " print(\"After calling \" + func.__name__)\n", + " print(\"\")\n", + " return function_wrapper\n", + "\n", + "print (pi)\n", + "print(\"\")\n", + "sin = our_decorator(sin)\n", + "cos = our_decorator(cos)\n", + "\n", + "for f in [sin, cos]:\n", + " f(pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Summarizing we can say that a decorator in Python is a __callable object__ that is used to __modify__ a function, method or class definition. \n", + "\n", + "The original object, the one which is going to be modified, \n", + "* is passed to a decorator as an argument. \n", + "* the decorator returns a modified object, e.g. a modified function, \n", + "* which is bound to the name used in the definition. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Usage du decorator : contrôle de parametres d'entrée" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0" + ] + }, + "execution_count": 146, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from math import sqrt\n", + "# sens ?\n", + "sqrt(4)" + ] + }, + { + "cell_type": "code", + "execution_count": 156, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice (avancé)\n", + "# écrire le code d'un decorator (deco_arg_control) qui controle l'entrée de la fonction 'racine'\n", + "# le décorateur lance une exception (code : raise Exception(\"attention !\")) quand le paramètre d'entrée\n", + "# n'est pas de type approprié" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Décorateur avancé (facultatif)\n", + "\n", + "#### 1) Decorator de fonction dont le nombre d'arguments est variable" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Before calling random\n", + "0.588308118520863\n", + "After calling random\n", + "Before calling randint\n", + "4\n", + "After calling randint\n", + "Before calling choice\n", + "30\n", + "After calling choice\n" + ] + } + ], + "source": [ + "from random import random, randint, choice\n", + "\n", + "def our_decorator(func):\n", + " def function_wrapper(*args, **kwargs):\n", + " print(\"Before calling \" + func.__name__)\n", + " res = func(*args, **kwargs)\n", + " print(res)\n", + " print(\"After calling \" + func.__name__)\n", + " return function_wrapper\n", + "\n", + "random = our_decorator(random)\n", + "randint = our_decorator(randint)\n", + "choice = our_decorator(choice)\n", + "\n", + "# sens ?\n", + "random()\n", + "# sens ?\n", + "randint(3, 8) \n", + "# sens ?\n", + "choice([10, 20, 30])" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# 1) executer pas a pas\n", + "# (copier coller dans un IDE)\n", + "\n", + "# 2) commenter le code\n", + "\n", + "# 3) écrire la pile d'appel (là où passe le code)\n", + "# exemple de pile d'appel:\n", + "# fonction1(arg = 0)\n", + "# fonction2(arg = \"blabla\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Voici 2 decorators (presque) identiques" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Good evening mister bond\n", + "Good morning mister bond\n" + ] + } + ], + "source": [ + "def evening_greeting(func):\n", + " def function_wrapper():\n", + " print(\"Good evening mister \" + func.__name__)\n", + " func()\n", + " return function_wrapper\n", + "\n", + "def morning_greeting(func):\n", + " def function_wrapper():\n", + " print(\"Good morning mister \" + func.__name__ )\n", + " func()\n", + " return function_wrapper\n", + "\n", + "@evening_greeting\n", + "def bond():\n", + " pass\n", + "bond()\n", + "\n", + "@morning_greeting\n", + "def bond():\n", + " pass\n", + "\n", + "bond()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Problème__ : \n", + "Le code est dupliqué et presque identique (morning vs evening).... \n", + "Pas bon !\n", + "\n", + "__Solution__ : \n", + "Il faudrait ajouter un parametre (hi) au décorateur afin de rendre le code + simple" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Good evening mister bond\n", + "Good morning mister bond\n" + ] + } + ], + "source": [ + "def greeting(expr):\n", + " def greeting_decorator(func):\n", + " def function_wrapper():\n", + " print(expr + \" mister \" + func.__name__ )\n", + " func()\n", + " return function_wrapper\n", + " return greeting_decorator\n", + "\n", + "hi = \"Good evening \"\n", + "@greeting(hi)\n", + "def bond():\n", + " pass\n", + "\n", + "bond()\n", + "\n", + "\n", + "hi = \"Good morning \"\n", + "@greeting(hi)\n", + "def bond():\n", + " pass\n", + "\n", + "bond()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice :\n", + "# 1) executer pas a pas\n", + "# (copier coller dans un IDE)\n", + "\n", + "# 2) commenter le code\n", + "\n", + "# 3) écrire la pile d'appel (là où passe le code)\n", + "# exemple de pile d'appel:\n", + "# fonction1(arg = 0)\n", + "# fonction2(arg = \"blabla\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/decouvrir_t-sne_3D_to_2D_solution.py b/decouvrir_t-sne_3D_to_2D_solution.py new file mode 100644 index 0000000..d9f9d56 --- /dev/null +++ b/decouvrir_t-sne_3D_to_2D_solution.py @@ -0,0 +1,55 @@ +# ============================================================================= +# COMPRENDRE T-SNE: Passer de 2D à 1D +# Le but de cet exemple est de generer quatre "blobs". +# On appelle "blob" un amas de points generes par une gaussienne. +# Puis, on realise une visualisation qui passe de 2D Ä‚ 1D +# grâce à l'utilisation de l'algorithme T-SNE +# ============================================================================= + +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib.ticker import NullFormatter +from sklearn import manifold, datasets +from time import time + +from sklearn.datasets.samples_generator import make_blobs + +plt.close('all') + +# Voici les centres des 4 blobs (PS: ne pas tenir compte de la variable shift) +shift = 20 +centers = [(5, 5, 5+shift), (15, 5, 5+shift), (15, 5, 15+shift), (15, 15, 15+shift)] +n_samples = 1000 + +# Par blobs, on souhaite creer 1000 observations qui contiennent 3 "features" +# On mettra les observations dans X, les targets dans y +X, y = make_blobs(n_samples=n_samples, centers=centers, n_features=3, random_state=0) + +# Premiere figure : on visualise les blobs en 3D +# Lorsque l'on affichera les blobs en couleur, quelle variable utilisera-t-on pour +# la couleur ? +fig = plt.figure() +ax = fig.add_subplot(111, projection='3d') +ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y) + +ax.set_xlabel('X Label') +ax.set_ylabel('Y Label') +ax.set_zlabel('Z Label') + +# Sur la premiere figure, on rajoute une projection 2D des blobs sur le plan au sol (z=0) +# On utilise le marker "x" pour la projection au sol +# Que peut-on observer au sol ? +ax.scatter(X[:, 0], X[:, 1], np.zeros(n_samples), c=y, marker="x") +plt.show() + +# Deuxieme figure : on visualise les blobs en 2D grâce a l'algorithme T-SNE +tsne = manifold.TSNE(n_components=2, perplexity=30, init='random', + random_state=0) +Y = tsne.fit_transform(X) +print(Y.shape) + +plt.figure() +plt.scatter(Y[:, 0], Y[:, 1], c=y) +plt.show() + diff --git a/fonctions.ipynb b/fonctions.ipynb new file mode 100644 index 0000000..91e7798 --- /dev/null +++ b/fonctions.ipynb @@ -0,0 +1,207 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fonctions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Executer le code suivant : " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def identity(x):\n", + " return x\n", + "identity(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder une fonction pour le polynome $f(x) = x^2$" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def x_square(x):\n", + " #a remplir\n", + " return x**2\n", + "x_square(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Executer le code suivant. Ici `sum_functions` prend non pas des nombres en paramètre mais d'autres fonctions pythons ! " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def sum_functions(f1, f2, x):\n", + " return f1(x) + f2(x)\n", + "sum_functions(x_square, x_square, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "coder la fonction `multiply_function` qui calculer $(f1*f2)(x)$" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "16" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def multiply_function(f1, f2, x):\n", + " return f1(x) * f2(x)\n", + "multiply_function(x_square, x_square, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Composition de fonction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On a vu qu'une fonction mathématique était une machine qui transformait des objects mathématiques en d'autres objets, typiquement des nombres. On peut bien sur utiliser le résultat d'une première fonction dans une autre. On peut aussi les composer ensemble. Par exemple la fonction $h: x \\rightarrow e^{x^2}$ est la composition de la fonction $f(x) = x^2$ et $g(x) = exp(x)$. Ainsi h(x) = g(f(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder la fonction `compose_two_functions` qui calcule f(g(x)) en utilisant des fonctions en tant que paramètre" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def compose_two_functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A l'aide de la fonction `x_square` et une fonction `exp_x` à coder et `compose_two_functions` calculer h(x) pour x = 0, 1, 4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Taux de variation, maintenant que vous comprenez un peu mieux comment utiliser des fonctions en tant que paramètre. Recoder la fonction taux de variation et utilisez la pour calculer le taux de variation de exp_x en 0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/intro Pandas.ipynb b/intro Pandas.ipynb new file mode 100644 index 0000000..33cd7de --- /dev/null +++ b/intro Pandas.ipynb @@ -0,0 +1,7850 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "copyright Franck Bardol 2018" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data \n", + ">## Exploration\n", + "## Cleaning\n", + "## Preparation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "________________________________________________" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## AGENDA \n", + ">1. Analyse exploratoire des données\n", + ">2. Python : un survol\n", + ">3. Comprendre ses données\n", + ">4. Visualiser un data-set\n", + "##### Data cleaning & Data preparation\n", + "> 1. Traiter les données manquantes\n", + "> 2. Encoder les descripteurs non-numériques\n", + "> 3. Normaliser & standardiser les données\n", + "##### Features engineering\n", + "> 1. Apprendre à sélectionner les bonnes variables explicatives\n", + "> 2. Augmenter les descripteurs et en construire de nouveaux\n", + "> 3. Comprendre le problème lié à la dimension des données\n", + "> 4. Apprendre les méthodes usuelles de réduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "________________________________________________" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Structure des données en Python\n", + "## Type des données \n", + "### Type élémentaire\n", + "* Numeric\n", + "* Integer\n", + "* Logical\n", + "* Character\n", + "* None\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 219, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#ceci est une variable numérique\n", + "a = 1.23456\n", + "\n", + "# int\n", + "a = 3\n", + "\n", + "# logical\n", + "a = True\n", + "\n", + "# string\n", + "a = \"azerty\"\n", + "\n", + "#none\n", + "a = None" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Type composé\n", + "* liste\n", + "* tuple\n", + "* dictionnaire\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### liste" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" + ] + } + ], + "source": [ + "# liste vide\n", + "my_liste = []\n", + "print (my_liste)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" + ] + } + ], + "source": [ + "#liste vide\n", + "my_liste = list()\n", + "print (my_liste)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a', 'b']\n" + ] + } + ], + "source": [ + "my_liste = ['a','b']\n", + "print (my_liste)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a', 'b']\n" + ] + } + ], + "source": [ + "my_liste = list(['a','b'])\n", + "print (my_liste)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a', 'b', 1234]\n" + ] + } + ], + "source": [ + "#empiler -> append\n", + "my_liste.append(1234)\n", + "print (my_liste)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "ename": "IndexError", + "evalue": "pop from empty list", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# dépiler -> pop\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0melmt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmy_liste\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mprint\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m\"element depile = \"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0melmt\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mprint\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m\"elements restant = \"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mmy_liste\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mIndexError\u001b[0m: pop from empty list" + ] + } + ], + "source": [ + "# dépiler -> pop\n", + "elmt = my_liste.pop()\n", + "print (\"element depile = \",elmt)\n", + "print (\"elements restant = \",my_liste)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mmy_tuple\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;31m# indice commence à 0 pas à 1\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mmy_tuple\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m3\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" + ] + } + ], + "source": [ + "my_tuple = (2,3,4)\n", + "# indice commence à 0 pas à 1\n", + "my_tuple[0] = 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### dictionnaire\n", + "* key : value" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'key1': 1, 'key2': 99999}\n" + ] + } + ], + "source": [ + "my_dict = {'key1':1 , \"key2\":99999}\n", + "print (my_dict)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#extraction d'une valeur à partir de sa clé\n", + "my_dict[\"key1\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "99999" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#extraction d'une valeur à partir de sa clé\n", + "my_dict.get(\"key2\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_keys(['key1', 'key2'])\n", + "dict_values([1, 99999])\n" + ] + } + ], + "source": [ + "#affiche toutes les clés du dictionnaire :\n", + "print (my_dict.keys())\n", + "\n", + "# affiche toutes les valeurs :\n", + "print (my_dict.values())" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "#une clé présente (true / false) ?\n", + "#print (my_dict.has_key(\"key1\"))\n", + "#print (my_dict.has_key(\"pas_du_tout\"))\n", + "print (\"key1\" in my_dict)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cle : key1 - valeur : 1\n", + "cle : key2 - valeur : 99999\n" + ] + } + ], + "source": [ + "# pour parcourir tout le dictionnaire : boucle (for)\n", + "for k,v in my_dict.items():\n", + " str_val = \"cle : {0} - valeur : {1}\".format(k,v)\n", + " print (str_val)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'key1': 1, 'key2': 99999, 'key3': 3.1415}\n", + "1\n", + "99999\n" + ] + } + ], + "source": [ + "# ajout\n", + "my_dict[\"key3\"] = 3.1415\n", + "print (my_dict)\n", + "\n", + "print(min(my_dict.values()))\n", + "print(max(my_dict.values()))" + ] + }, + { + "cell_type": "code", + "execution_count": 234, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'key3': 3.1415, 'key1': 1}\n" + ] + } + ], + "source": [ + "#suppression\n", + "del my_dict[\"key2\"]\n", + "print my_dict" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "pour en savoir plus sur Python\n", + "https://learnxinyminutes.com/docs/python/\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Structure des données\n", + "* Vecteurs \n", + "* matrices\n", + "* trames / data frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### vecteurs , matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "http://www.numpy.org/\n" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2]\n", + "(2,)\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# vecteur colonnne (array)\n", + "ar = np.array([1,2])\n", + "print (ar)\n", + "\n", + "# dimension ?\n", + "print (ar.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "matrice (1x2) :\n", + "[[1 2]]\n", + "dimension (1, 2)\n", + "matrice (3x2) :\n", + "[list([1, 2, 999]) list([10, 20]) list([100, 0])]\n", + "dimension (3,)\n", + "[[1. 2. 3. ]\n", + " [4.2 5. 6. ]]\n" + ] + } + ], + "source": [ + "# matrice ligne\n", + "print (\"matrice (1x2) :\")\n", + "ar = np.array([[1,2]])\n", + "print (ar)\n", + "\n", + "# dimension ? (shape)\n", + "print (\"dimension\", ar.shape)\n", + "print\n", + "print (\"matrice (3x2) :\")\n", + "ar = np.array([[1,2,999],[10,20],[100,0]])\n", + "print (ar)\n", + "\n", + "# dimension ?\n", + "print (\"dimension\",ar.shape)\n", + "\n", + "ar1 = np.array([[1, 2, 3],[4.2,5,6]])\n", + "print (ar1)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[9.51196471e-03 1.66772686e+00 8.13935921e+00]\n", + " [4.80600168e+00 1.51080311e+00 3.95689634e+00]\n", + " [3.38877345e+00 1.05190519e+00 7.07741712e+00]\n", + " [5.79285248e+00 5.36394255e+00 1.48717428e+00]\n", + " [7.56526074e+00 6.40399144e+00 6.98372423e+00]\n", + " [1.51298428e-01 1.05643330e+00 6.49387787e+00]\n", + " [3.30376953e+00 1.28262287e+00 7.16572029e+00]\n", + " [5.21676240e+00 8.01987919e+00 3.12321687e+00]\n", + " [2.44780482e-02 1.16608653e+00 5.43220711e+00]\n", + " [4.73664797e+00 1.23457661e+00 3.80668610e+00]\n", + " [6.78269224e+00 9.92225378e+00 4.51718579e+00]\n", + " [8.84733573e+00 2.64832075e+00 3.28529244e+00]\n", + " [3.45486353e+00 5.56174812e+00 5.07298190e-01]\n", + " [2.62064615e+00 7.13393033e+00 8.72087062e+00]\n", + " [8.81561189e-01 3.27496696e-01 6.14429769e+00]\n", + " [9.26739304e+00 3.09293753e-01 2.50828777e+00]\n", + " [2.04248303e+00 8.66761502e+00 8.78419447e+00]\n", + " [5.82880769e+00 7.49161454e+00 3.28079519e+00]\n", + " [8.62777252e+00 2.46950698e+00 4.91798872e+00]\n", + " [5.96331912e+00 6.12093140e+00 4.92651640e+00]\n", + " [1.08995367e+00 3.13816170e+00 7.40453170e+00]\n", + " [8.85466517e-01 5.03693004e+00 9.45293088e+00]\n", + " [6.76141365e+00 6.87148863e+00 9.94921751e+00]\n", + " [2.14129850e+00 1.14070379e+00 2.72827526e+00]\n", + " [1.75814092e+00 2.74234615e+00 1.33039388e+00]\n", + " [8.55752647e+00 5.07546184e+00 2.68539378e+00]\n", + " [7.66671941e+00 6.15023101e+00 6.84131785e+00]\n", + " [5.15711925e+00 8.21047727e+00 2.43151456e+00]\n", + " [7.23315883e-01 2.63841370e+00 3.09955357e+00]\n", + " [6.81980637e+00 2.22552922e-01 7.07704377e+00]\n", + " [4.06929436e+00 8.22908028e+00 5.74328965e+00]\n", + " [5.86344396e+00 1.22035126e+00 8.07103790e+00]\n", + " [5.17947662e+00 2.38718352e+00 5.50189869e+00]\n", + " [8.34690613e-01 2.65387435e+00 3.41177681e+00]\n", + " [9.59603281e+00 7.68814635e+00 1.40571503e+00]\n", + " [6.23182324e+00 2.27805335e+00 9.13236678e+00]\n", + " [5.76932441e+00 3.79744919e-01 3.77379731e+00]\n", + " [9.88281658e+00 2.31106030e+00 6.89752265e+00]\n", + " [6.60415603e+00 5.72714926e+00 8.45108913e+00]\n", + " [1.33963946e+00 1.19388562e+00 8.73395858e+00]\n", + " [8.53126225e+00 6.58709658e+00 5.69023562e+00]\n", + " [5.54700427e-01 7.97298066e+00 8.48455908e+00]\n", + " [2.18403505e+00 7.08173210e+00 2.89563423e+00]\n", + " [8.56620358e+00 5.61154477e+00 8.32635774e+00]\n", + " [5.62903951e+00 6.44624525e+00 9.76808645e+00]\n", + " [9.03508707e+00 2.64302007e+00 6.61086754e+00]\n", + " [5.91053373e-01 6.96327620e+00 2.79798696e+00]\n", + " [6.39539860e+00 5.69213883e+00 9.44882832e+00]\n", + " [9.26572459e+00 3.91169314e+00 8.01669433e+00]\n", + " [9.98040735e+00 2.82225335e+00 2.42767557e+00]\n", + " [7.05842254e-01 2.49071841e+00 8.37085911e+00]\n", + " [8.62953746e-01 5.53761057e+00 9.91753194e+00]\n", + " [1.79437463e+00 6.50570073e+00 6.15726322e+00]\n", + " [7.07689322e+00 6.16242362e+00 9.35652050e+00]\n", + " [9.71358578e+00 2.13036855e+00 2.35242111e+00]\n", + " [2.96026939e+00 8.97282769e+00 3.92695766e+00]\n", + " [7.64929624e+00 5.05537885e+00 5.37881892e+00]\n", + " [5.11877787e+00 1.02392009e+00 4.04654872e+00]\n", + " [6.92946031e+00 4.56056740e+00 8.88544333e+00]\n", + " [2.00277519e+00 8.91212358e+00 1.67371405e+00]\n", + " [5.81461806e+00 8.73591138e+00 6.76836328e+00]\n", + " [3.80143891e+00 4.33638651e+00 9.20652712e+00]\n", + " [6.65649858e+00 5.39421489e+00 3.82323280e+00]\n", + " [3.09803841e+00 1.64160594e+00 1.30302807e+00]\n", + " [6.70896671e-01 4.62123492e+00 9.48270935e+00]\n", + " [8.97745408e+00 7.90600089e+00 4.58449118e+00]\n", + " [9.96390221e+00 5.86037019e+00 1.31245246e+00]\n", + " [2.27696345e+00 6.29359896e-01 8.56700542e+00]\n", + " [2.99792319e+00 9.71187694e+00 7.23992521e+00]\n", + " [2.11794453e+00 3.37009140e+00 8.49569537e+00]\n", + " [3.31478748e+00 3.44796916e+00 4.58313618e+00]\n", + " [6.30224815e+00 2.22502790e+00 9.42337080e+00]\n", + " [7.53352387e+00 8.37915516e+00 7.58065487e+00]\n", + " [9.76445122e+00 8.74665654e+00 7.20539332e+00]\n", + " [2.25348759e+00 1.96312648e-01 8.86423906e+00]\n", + " [1.82823164e+00 1.90955106e-01 2.14605894e+00]\n", + " [5.16553947e+00 1.90229100e+00 9.51652058e-01]\n", + " [7.55953767e+00 4.48152746e+00 3.42725928e+00]\n", + " [2.23145759e+00 2.03436396e-01 4.35459583e-01]\n", + " [5.37789738e+00 2.83085929e+00 3.43397718e+00]\n", + " [4.26429826e+00 3.79138193e+00 6.91614333e+00]\n", + " [9.97374200e+00 9.97735341e+00 7.77063499e+00]\n", + " [6.68945152e+00 8.33171117e+00 3.02606676e+00]\n", + " [9.97392115e+00 8.84660208e+00 9.53018096e+00]\n", + " [6.61078804e-02 7.75092022e+00 9.45145850e+00]\n", + " [8.49942904e+00 9.04180266e+00 3.95041108e+00]\n", + " [6.13822627e+00 9.19748301e+00 9.09986993e+00]\n", + " [8.62698658e-01 6.12384072e+00 1.58622129e+00]\n", + " [4.18403576e+00 3.52686933e+00 3.13739972e+00]\n", + " [9.82589184e+00 5.37386100e-01 3.94259913e+00]\n", + " [7.46018883e+00 4.20032411e-01 8.03293117e+00]\n", + " [9.48811358e+00 7.49509434e+00 7.23375643e+00]\n", + " [2.71917963e+00 6.90551504e+00 3.10285917e+00]\n", + " [8.51648330e+00 1.48448763e+00 1.48787518e+00]\n", + " [1.90167539e+00 1.19716093e+00 8.14971015e+00]\n", + " [1.72440297e+00 1.02107667e+00 3.22578074e-01]\n", + " [1.22714071e+00 9.66834922e-01 3.69566473e+00]\n", + " [5.81307221e+00 1.83612453e+00 8.55458515e+00]\n", + " [9.24185912e+00 1.50384554e+00 3.67377656e+00]\n", + " [4.68888309e+00 2.58978685e+00 1.33821992e+00]]\n" + ] + } + ], + "source": [ + "from numpy import random\n", + "#numpy.random. uniform (low=0.0, high=1.0, size=None)\n", + "rnd_lst = np.random. uniform (low=0.0, high=10.0, size=(100,3))\n", + "print (rnd_lst)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.00951196, 1.66772686, 8.13935921],\n", + " [4.80600168, 1.51080311, 3.95689634],\n", + " [3.38877345, 1.05190519, 7.07741712],\n", + " [5.79285248, 5.36394255, 1.48717428],\n", + " [7.56526074, 6.40399144, 6.98372423]])" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#extraction (slice)\n", + "# 5 premières lignes, toutes les colonnes\n", + "rnd_lst[0:5,:]" + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 8.84481287, 3.33769542, 7.23264798]])" + ] + }, + "execution_count": 239, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#dernière ligne\n", + "rnd_lst[-1:]" + ] + }, + { + "cell_type": "code", + "execution_count": 240, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2.30418218, 9.42227552, 6.02593709],\n", + " [ 8.84481287, 3.33769542, 7.23264798]])" + ] + }, + "execution_count": 240, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 2 dernières lignes\n", + "rnd_lst[-2:]" + ] + }, + { + "cell_type": "code", + "execution_count": 241, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# question : 3 dernières lignes ? " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### pandas data frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "http://pandas.pydata.org/" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []\n" + ] + } + ], + "source": [ + "print (pd.DataFrame())" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " col_1\n", + "0 10\n", + "1 20\n", + "2 30\n", + "3 40\n" + ] + } + ], + "source": [ + "a = [10,20,30,40]\n", + "b = ['un','deux',np.NaN,None]\n", + "c = [1, 2, 3, 4]\n", + "print (pd.DataFrame(a , columns=[\"col_1\"]))" + ] + }, + { + "cell_type": "code", + "execution_count": 245, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " col1\n", + "0 10\n", + "1 20\n", + "2 30\n", + "3 40\n" + ] + } + ], + "source": [ + "print pd.DataFrame(a , columns=[\"col1\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 1 2 3\n", + "0 10 20 30.0 40.0\n", + "1 un deux NaN NaN\n", + "2 1 2 3.0 4.0\n" + ] + } + ], + "source": [ + "#dataframe a partir de 2 listes\n", + "print (pd.DataFrame([a,b, c]))" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " col_1 col_2 col_autre col_en\n", + "0 10 20 30.0 40.0\n", + "1 un deux NaN NaN\n" + ] + } + ], + "source": [ + "#creer un dataframe et nommer les colonnes\n", + "df = pd.DataFrame([a,b], columns=[\"col_1\",\"col_2\",\"col_autre\",\"col_en\"])\n", + "print (df)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['col_1', 'col_2', 'col_autre', 'col_en'], dtype='object')\n" + ] + } + ], + "source": [ + "# obtenir toutes les colonnes\n", + "print (df.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2, 4)\n" + ] + } + ], + "source": [ + "#dimension (shape)\n", + "df = pd.DataFrame([a,b])\n", + "print (df.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(100, 3)\n", + " 0 1 2\n", + "0 0.009512 1.667727 8.139359\n", + "1 4.806002 1.510803 3.956896\n", + " 0 1 2\n", + "95 1.724403 1.021077 0.322578\n", + "96 1.227141 0.966835 3.695665\n", + "97 5.813072 1.836125 8.554585\n", + "98 9.241859 1.503846 3.673777\n", + "99 4.688883 2.589787 1.338220\n" + ] + } + ], + "source": [ + "# dataframe avec valeurs aleatoires\n", + "print (rnd_lst.shape)\n", + "df = pd.DataFrame(rnd_lst)\n", + "#vues / extract\n", + "#debut\n", + "print (df.head(2))\n", + "print\n", + "#fin\n", + "print (df.tail())" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
012
09999NaNNaN
11011.0202.0
\n", + "
" + ], + "text/plain": [ + " 0 1 2\n", + "0 9999 NaN NaN\n", + "1 10 11.0 202.0" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# dataframe a partir d’un array numpy ... et d’une liste \n", + "df = pd.DataFrame([list([9999]), list([10,11,202])])\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "question \n", + "* que signifie Nan ?" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [], + "source": [ + "df.to_csv('data_cleaned.csv' , sep = '\\t')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importer des data \n", + "> Toutes les source sont possibles !\n", + "* csv\n", + " web\n", + "BDD\n", + "NoSQL\n", + "JSON\n", + "XML\n", + "Excel\n", + "..." + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": {}, + "outputs": [], + "source": [ + "df_titanic = pd.read_csv('titanic_train.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* instructions pour obtenir \n", + ">* dimension du data frame ?\n", + ">* nom des colonnes ? \n", + "> * vue du début ?\n", + "> * vue de la fin ?" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(891, 12)\n" + ] + } + ], + "source": [ + "#dimension du data frame ?\n", + "print(df_titanic.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',\n", + " 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "#nom des colonnes ?\n", + "print(df_titanic.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 173, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#vue du début ?\n", + "df_titanic.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
88688702Montvila, Rev. Juozasmale27.00021153613.00NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.00B42S
88888903Johnston, Miss. Catherine Helen \"Carrie\"femaleNaN12W./C. 660723.45NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.00C148C
89089103Dooley, Mr. Patrickmale32.0003703767.75NaNQ
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass Name \\\n", + "886 887 0 2 Montvila, Rev. Juozas \n", + "887 888 1 1 Graham, Miss. Margaret Edith \n", + "888 889 0 3 Johnston, Miss. Catherine Helen \"Carrie\" \n", + "889 890 1 1 Behr, Mr. Karl Howell \n", + "890 891 0 3 Dooley, Mr. Patrick \n", + "\n", + " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", + "886 male 27.0 0 0 211536 13.00 NaN S \n", + "887 female 19.0 0 0 112053 30.00 B42 S \n", + "888 female NaN 1 2 W./C. 6607 23.45 NaN S \n", + "889 male 26.0 0 0 111369 30.00 C148 C \n", + "890 male 32.0 0 0 370376 7.75 NaN Q " + ] + }, + "execution_count": 174, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#vue de la fin ?\n", + "df_titanic.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Modifier un data set" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "#### renommer une colonne (temporaire)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "syntaxe :\n", + "dataframe_name.rename(columns={\"old_columnname\":\"new_columnname\"})\n", + "\n", + "Explication :\n", + "cette commande prend un dataFrame existant puis renomme la colonne et produit un nouveau data frame\n", + "\n", + "Exercice : renommer la colonne \"Cabin\" en \"num_cabin\" " + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFarenum_cabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
6701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
7803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
8913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
91012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.7000G6S
111211Bonnell, Miss. Elizabethfemale58.00011378326.5500C103S
121303Saundercock, Mr. William Henrymale20.000A/5. 21518.0500NaNS
131403Andersson, Mr. Anders Johanmale39.01534708231.2750NaNS
141503Vestrom, Miss. Hulda Amanda Adolfinafemale14.0003504067.8542NaNS
151612Hewlett, Mrs. (Mary D Kingcome)female55.00024870616.0000NaNS
161703Rice, Master. Eugenemale2.04138265229.1250NaNQ
171812Williams, Mr. Charles EugenemaleNaN0024437313.0000NaNS
181903Vander Planke, Mrs. Julius (Emelia Maria Vande...female31.01034576318.0000NaNS
192013Masselmani, Mrs. FatimafemaleNaN0026497.2250NaNC
202102Fynney, Mr. Joseph Jmale35.00023986526.0000NaNS
212212Beesley, Mr. Lawrencemale34.00024869813.0000D56S
222313McGowan, Miss. Anna \"Annie\"female15.0003309238.0292NaNQ
232411Sloper, Mr. William Thompsonmale28.00011378835.5000A6S
242503Palsson, Miss. Torborg Danirafemale8.03134990921.0750NaNS
252613Asplund, Mrs. Carl Oscar (Selma Augusta Emilia...female38.01534707731.3875NaNS
262703Emir, Mr. Farred ChehabmaleNaN0026317.2250NaNC
272801Fortune, Mr. Charles Alexandermale19.03219950263.0000C23 C25 C27S
282913O'Dwyer, Miss. Ellen \"Nellie\"femaleNaN003309597.8792NaNQ
293003Todoroff, Mr. LaliomaleNaN003492167.8958NaNS
.......................................
86186202Giles, Mr. Frederick Edwardmale21.0102813411.5000NaNS
86286311Swift, Mrs. Frederick Joel (Margaret Welles Ba...female48.0001746625.9292D17S
86386403Sage, Miss. Dorothy Edith \"Dolly\"femaleNaN82CA. 234369.5500NaNS
86486502Gill, Mr. John Williammale24.00023386613.0000NaNS
86586612Bystrom, Mrs. (Karolina)female42.00023685213.0000NaNS
86686712Duran y More, Miss. Asuncionfemale27.010SC/PARIS 214913.8583NaNC
86786801Roebling, Mr. Washington Augustus IImale31.000PC 1759050.4958A24S
86886903van Melkebeke, Mr. PhilemonmaleNaN003457779.5000NaNS
86987013Johnson, Master. Harold Theodormale4.01134774211.1333NaNS
87087103Balkic, Mr. Cerinmale26.0003492487.8958NaNS
87187211Beckwith, Mrs. Richard Leonard (Sallie Monypeny)female47.0111175152.5542D35S
87287301Carlsson, Mr. Frans Olofmale33.0006955.0000B51 B53 B55S
87387403Vander Cruyssen, Mr. Victormale47.0003457659.0000NaNS
87487512Abelson, Mrs. Samuel (Hannah Wizosky)female28.010P/PP 338124.0000NaNC
87587613Najib, Miss. Adele Kiamie \"Jane\"female15.00026677.2250NaNC
87687703Gustafsson, Mr. Alfred Ossianmale20.00075349.8458NaNS
87787803Petroff, Mr. Nedeliomale19.0003492127.8958NaNS
87887903Laleff, Mr. KristomaleNaN003492177.8958NaNS
87988011Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)female56.0011176783.1583C50C
88088112Shelley, Mrs. William (Imanita Parrish Hall)female25.00123043326.0000NaNS
88188203Markun, Mr. Johannmale33.0003492577.8958NaNS
88288303Dahlberg, Miss. Gerda Ulrikafemale22.000755210.5167NaNS
88388402Banfield, Mr. Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
88488503Sutehall, Mr. Henry Jrmale25.000SOTON/OQ 3920767.0500NaNS
88588603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen \"Carrie\"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ
\n", + "

891 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "5 6 0 3 \n", + "6 7 0 1 \n", + "7 8 0 3 \n", + "8 9 1 3 \n", + "9 10 1 2 \n", + "10 11 1 3 \n", + "11 12 1 1 \n", + "12 13 0 3 \n", + "13 14 0 3 \n", + "14 15 0 3 \n", + "15 16 1 2 \n", + "16 17 0 3 \n", + "17 18 1 2 \n", + "18 19 0 3 \n", + "19 20 1 3 \n", + "20 21 0 2 \n", + "21 22 1 2 \n", + "22 23 1 3 \n", + "23 24 1 1 \n", + "24 25 0 3 \n", + "25 26 1 3 \n", + "26 27 0 3 \n", + "27 28 0 1 \n", + "28 29 1 3 \n", + "29 30 0 3 \n", + ".. ... ... ... \n", + "861 862 0 2 \n", + "862 863 1 1 \n", + "863 864 0 3 \n", + "864 865 0 2 \n", + "865 866 1 2 \n", + "866 867 1 2 \n", + "867 868 0 1 \n", + "868 869 0 3 \n", + "869 870 1 3 \n", + "870 871 0 3 \n", + "871 872 1 1 \n", + "872 873 0 1 \n", + "873 874 0 3 \n", + "874 875 1 2 \n", + "875 876 1 3 \n", + "876 877 0 3 \n", + "877 878 0 3 \n", + "878 879 0 3 \n", + "879 880 1 1 \n", + "880 881 1 2 \n", + "881 882 0 3 \n", + "882 883 0 3 \n", + "883 884 0 2 \n", + "884 885 0 3 \n", + "885 886 0 3 \n", + "886 887 0 2 \n", + "887 888 1 1 \n", + "888 889 0 3 \n", + "889 890 1 1 \n", + "890 891 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "5 Moran, Mr. James male NaN 0 \n", + "6 McCarthy, Mr. Timothy J male 54.0 0 \n", + "7 Palsson, Master. Gosta Leonard male 2.0 3 \n", + "8 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 \n", + "9 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 \n", + "10 Sandstrom, Miss. Marguerite Rut female 4.0 1 \n", + "11 Bonnell, Miss. Elizabeth female 58.0 0 \n", + "12 Saundercock, Mr. William Henry male 20.0 0 \n", + "13 Andersson, Mr. Anders Johan male 39.0 1 \n", + "14 Vestrom, Miss. Hulda Amanda Adolfina female 14.0 0 \n", + "15 Hewlett, Mrs. (Mary D Kingcome) female 55.0 0 \n", + "16 Rice, Master. Eugene male 2.0 4 \n", + "17 Williams, Mr. Charles Eugene male NaN 0 \n", + "18 Vander Planke, Mrs. Julius (Emelia Maria Vande... female 31.0 1 \n", + "19 Masselmani, Mrs. Fatima female NaN 0 \n", + "20 Fynney, Mr. Joseph J male 35.0 0 \n", + "21 Beesley, Mr. Lawrence male 34.0 0 \n", + "22 McGowan, Miss. Anna \"Annie\" female 15.0 0 \n", + "23 Sloper, Mr. William Thompson male 28.0 0 \n", + "24 Palsson, Miss. Torborg Danira female 8.0 3 \n", + "25 Asplund, Mrs. Carl Oscar (Selma Augusta Emilia... female 38.0 1 \n", + "26 Emir, Mr. Farred Chehab male NaN 0 \n", + "27 Fortune, Mr. Charles Alexander male 19.0 3 \n", + "28 O'Dwyer, Miss. Ellen \"Nellie\" female NaN 0 \n", + "29 Todoroff, Mr. Lalio male NaN 0 \n", + ".. ... ... ... ... \n", + "861 Giles, Mr. Frederick Edward male 21.0 1 \n", + "862 Swift, Mrs. Frederick Joel (Margaret Welles Ba... female 48.0 0 \n", + "863 Sage, Miss. Dorothy Edith \"Dolly\" female NaN 8 \n", + "864 Gill, Mr. John William male 24.0 0 \n", + "865 Bystrom, Mrs. (Karolina) female 42.0 0 \n", + "866 Duran y More, Miss. Asuncion female 27.0 1 \n", + "867 Roebling, Mr. Washington Augustus II male 31.0 0 \n", + "868 van Melkebeke, Mr. Philemon male NaN 0 \n", + "869 Johnson, Master. Harold Theodor male 4.0 1 \n", + "870 Balkic, Mr. Cerin male 26.0 0 \n", + "871 Beckwith, Mrs. Richard Leonard (Sallie Monypeny) female 47.0 1 \n", + "872 Carlsson, Mr. Frans Olof male 33.0 0 \n", + "873 Vander Cruyssen, Mr. Victor male 47.0 0 \n", + "874 Abelson, Mrs. Samuel (Hannah Wizosky) female 28.0 1 \n", + "875 Najib, Miss. Adele Kiamie \"Jane\" female 15.0 0 \n", + "876 Gustafsson, Mr. Alfred Ossian male 20.0 0 \n", + "877 Petroff, Mr. Nedelio male 19.0 0 \n", + "878 Laleff, Mr. Kristo male NaN 0 \n", + "879 Potter, Mrs. Thomas Jr (Lily Alexenia Wilson) female 56.0 0 \n", + "880 Shelley, Mrs. William (Imanita Parrish Hall) female 25.0 0 \n", + "881 Markun, Mr. Johann male 33.0 0 \n", + "882 Dahlberg, Miss. Gerda Ulrika female 22.0 0 \n", + "883 Banfield, Mr. Frederick James male 28.0 0 \n", + "884 Sutehall, Mr. Henry Jr male 25.0 0 \n", + "885 Rice, Mrs. William (Margaret Norton) female 39.0 0 \n", + "886 Montvila, Rev. Juozas male 27.0 0 \n", + "887 Graham, Miss. Margaret Edith female 19.0 0 \n", + "888 Johnston, Miss. Catherine Helen \"Carrie\" female NaN 1 \n", + "889 Behr, Mr. Karl Howell male 26.0 0 \n", + "890 Dooley, Mr. Patrick male 32.0 0 \n", + "\n", + " Parch Ticket Fare num_cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S \n", + "5 0 330877 8.4583 NaN Q \n", + "6 0 17463 51.8625 E46 S \n", + "7 1 349909 21.0750 NaN S \n", + "8 2 347742 11.1333 NaN S \n", + "9 0 237736 30.0708 NaN C \n", + "10 1 PP 9549 16.7000 G6 S \n", + "11 0 113783 26.5500 C103 S \n", + "12 0 A/5. 2151 8.0500 NaN S \n", + "13 5 347082 31.2750 NaN S \n", + "14 0 350406 7.8542 NaN S \n", + "15 0 248706 16.0000 NaN S \n", + "16 1 382652 29.1250 NaN Q \n", + "17 0 244373 13.0000 NaN S \n", + "18 0 345763 18.0000 NaN S \n", + "19 0 2649 7.2250 NaN C \n", + "20 0 239865 26.0000 NaN S \n", + "21 0 248698 13.0000 D56 S \n", + "22 0 330923 8.0292 NaN Q \n", + "23 0 113788 35.5000 A6 S \n", + "24 1 349909 21.0750 NaN S \n", + "25 5 347077 31.3875 NaN S \n", + "26 0 2631 7.2250 NaN C \n", + "27 2 19950 263.0000 C23 C25 C27 S \n", + "28 0 330959 7.8792 NaN Q \n", + "29 0 349216 7.8958 NaN S \n", + ".. ... ... ... ... ... \n", + "861 0 28134 11.5000 NaN S \n", + "862 0 17466 25.9292 D17 S \n", + "863 2 CA. 2343 69.5500 NaN S \n", + "864 0 233866 13.0000 NaN S \n", + "865 0 236852 13.0000 NaN S \n", + "866 0 SC/PARIS 2149 13.8583 NaN C \n", + "867 0 PC 17590 50.4958 A24 S \n", + "868 0 345777 9.5000 NaN S \n", + "869 1 347742 11.1333 NaN S \n", + "870 0 349248 7.8958 NaN S \n", + "871 1 11751 52.5542 D35 S \n", + "872 0 695 5.0000 B51 B53 B55 S \n", + "873 0 345765 9.0000 NaN S \n", + "874 0 P/PP 3381 24.0000 NaN C \n", + "875 0 2667 7.2250 NaN C \n", + "876 0 7534 9.8458 NaN S \n", + "877 0 349212 7.8958 NaN S \n", + "878 0 349217 7.8958 NaN S \n", + "879 1 11767 83.1583 C50 C \n", + "880 1 230433 26.0000 NaN S \n", + "881 0 349257 7.8958 NaN S \n", + "882 0 7552 10.5167 NaN S \n", + "883 0 C.A./SOTON 34068 10.5000 NaN S \n", + "884 0 SOTON/OQ 392076 7.0500 NaN S \n", + "885 5 382652 29.1250 NaN Q \n", + "886 0 211536 13.0000 NaN S \n", + "887 0 112053 30.0000 B42 S \n", + "888 2 W./C. 6607 23.4500 NaN S \n", + "889 0 111369 30.0000 C148 C \n", + "890 0 370376 7.7500 NaN Q \n", + "\n", + "[891 rows x 12 columns]" + ] + }, + "execution_count": 175, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# renommer \"Cabin\"\n", + "df_titanic.rename(columns={\"Cabin\":\"num_cabin\"})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercice : vérifier que le data frame \"original\" n'est pas modifié. \n", + "hint : \n", + "1 - utiliser une commande listant les noms de colonne\n", + "2 - afficher les 5 premières lignes du data frame" + ] + }, + { + "cell_type": "code", + "execution_count": 176, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',\n", + " 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],\n", + " dtype='object')" + ] + }, + "execution_count": 176, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#utiliser une commande listant les noms de colonne\n", + "df_titanic.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 177, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#afficher les 5 premières lignes du data frame\n", + "df_titanic.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### renommer une colonne (définitif)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "syntaxe :\n", + "dataframe_name.rename(columns={\"old_columnname\":\"new_columnname\" , inplace = True)\n", + "\n", + "Explication :\n", + "cette commande prend un dataFrame existant puis renomme la colonne\n", + "\n", + "Exercice : renommer la colonne \"Cabin\" en \"num_cabin\". Cette fois en modifiant le data frame original" + ] + }, + { + "cell_type": "code", + "execution_count": 178, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFarenum_cabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
6701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
7803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
8913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
91012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.7000G6S
111211Bonnell, Miss. Elizabethfemale58.00011378326.5500C103S
121303Saundercock, Mr. William Henrymale20.000A/5. 21518.0500NaNS
131403Andersson, Mr. Anders Johanmale39.01534708231.2750NaNS
141503Vestrom, Miss. Hulda Amanda Adolfinafemale14.0003504067.8542NaNS
151612Hewlett, Mrs. (Mary D Kingcome)female55.00024870616.0000NaNS
161703Rice, Master. Eugenemale2.04138265229.1250NaNQ
171812Williams, Mr. Charles EugenemaleNaN0024437313.0000NaNS
181903Vander Planke, Mrs. Julius (Emelia Maria Vande...female31.01034576318.0000NaNS
192013Masselmani, Mrs. FatimafemaleNaN0026497.2250NaNC
202102Fynney, Mr. Joseph Jmale35.00023986526.0000NaNS
212212Beesley, Mr. Lawrencemale34.00024869813.0000D56S
222313McGowan, Miss. Anna \"Annie\"female15.0003309238.0292NaNQ
232411Sloper, Mr. William Thompsonmale28.00011378835.5000A6S
242503Palsson, Miss. Torborg Danirafemale8.03134990921.0750NaNS
252613Asplund, Mrs. Carl Oscar (Selma Augusta Emilia...female38.01534707731.3875NaNS
262703Emir, Mr. Farred ChehabmaleNaN0026317.2250NaNC
272801Fortune, Mr. Charles Alexandermale19.03219950263.0000C23 C25 C27S
282913O'Dwyer, Miss. Ellen \"Nellie\"femaleNaN003309597.8792NaNQ
293003Todoroff, Mr. LaliomaleNaN003492167.8958NaNS
.......................................
86186202Giles, Mr. Frederick Edwardmale21.0102813411.5000NaNS
86286311Swift, Mrs. Frederick Joel (Margaret Welles Ba...female48.0001746625.9292D17S
86386403Sage, Miss. Dorothy Edith \"Dolly\"femaleNaN82CA. 234369.5500NaNS
86486502Gill, Mr. John Williammale24.00023386613.0000NaNS
86586612Bystrom, Mrs. (Karolina)female42.00023685213.0000NaNS
86686712Duran y More, Miss. Asuncionfemale27.010SC/PARIS 214913.8583NaNC
86786801Roebling, Mr. Washington Augustus IImale31.000PC 1759050.4958A24S
86886903van Melkebeke, Mr. PhilemonmaleNaN003457779.5000NaNS
86987013Johnson, Master. Harold Theodormale4.01134774211.1333NaNS
87087103Balkic, Mr. Cerinmale26.0003492487.8958NaNS
87187211Beckwith, Mrs. Richard Leonard (Sallie Monypeny)female47.0111175152.5542D35S
87287301Carlsson, Mr. Frans Olofmale33.0006955.0000B51 B53 B55S
87387403Vander Cruyssen, Mr. Victormale47.0003457659.0000NaNS
87487512Abelson, Mrs. Samuel (Hannah Wizosky)female28.010P/PP 338124.0000NaNC
87587613Najib, Miss. Adele Kiamie \"Jane\"female15.00026677.2250NaNC
87687703Gustafsson, Mr. Alfred Ossianmale20.00075349.8458NaNS
87787803Petroff, Mr. Nedeliomale19.0003492127.8958NaNS
87887903Laleff, Mr. KristomaleNaN003492177.8958NaNS
87988011Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)female56.0011176783.1583C50C
88088112Shelley, Mrs. William (Imanita Parrish Hall)female25.00123043326.0000NaNS
88188203Markun, Mr. Johannmale33.0003492577.8958NaNS
88288303Dahlberg, Miss. Gerda Ulrikafemale22.000755210.5167NaNS
88388402Banfield, Mr. Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
88488503Sutehall, Mr. Henry Jrmale25.000SOTON/OQ 3920767.0500NaNS
88588603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen \"Carrie\"femaleNaN12W./C. 660723.4500NaNS
88989011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ
\n", + "

891 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "5 6 0 3 \n", + "6 7 0 1 \n", + "7 8 0 3 \n", + "8 9 1 3 \n", + "9 10 1 2 \n", + "10 11 1 3 \n", + "11 12 1 1 \n", + "12 13 0 3 \n", + "13 14 0 3 \n", + "14 15 0 3 \n", + "15 16 1 2 \n", + "16 17 0 3 \n", + "17 18 1 2 \n", + "18 19 0 3 \n", + "19 20 1 3 \n", + "20 21 0 2 \n", + "21 22 1 2 \n", + "22 23 1 3 \n", + "23 24 1 1 \n", + "24 25 0 3 \n", + "25 26 1 3 \n", + "26 27 0 3 \n", + "27 28 0 1 \n", + "28 29 1 3 \n", + "29 30 0 3 \n", + ".. ... ... ... \n", + "861 862 0 2 \n", + "862 863 1 1 \n", + "863 864 0 3 \n", + "864 865 0 2 \n", + "865 866 1 2 \n", + "866 867 1 2 \n", + "867 868 0 1 \n", + "868 869 0 3 \n", + "869 870 1 3 \n", + "870 871 0 3 \n", + "871 872 1 1 \n", + "872 873 0 1 \n", + "873 874 0 3 \n", + "874 875 1 2 \n", + "875 876 1 3 \n", + "876 877 0 3 \n", + "877 878 0 3 \n", + "878 879 0 3 \n", + "879 880 1 1 \n", + "880 881 1 2 \n", + "881 882 0 3 \n", + "882 883 0 3 \n", + "883 884 0 2 \n", + "884 885 0 3 \n", + "885 886 0 3 \n", + "886 887 0 2 \n", + "887 888 1 1 \n", + "888 889 0 3 \n", + "889 890 1 1 \n", + "890 891 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "5 Moran, Mr. James male NaN 0 \n", + "6 McCarthy, Mr. Timothy J male 54.0 0 \n", + "7 Palsson, Master. Gosta Leonard male 2.0 3 \n", + "8 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 \n", + "9 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 \n", + "10 Sandstrom, Miss. Marguerite Rut female 4.0 1 \n", + "11 Bonnell, Miss. Elizabeth female 58.0 0 \n", + "12 Saundercock, Mr. William Henry male 20.0 0 \n", + "13 Andersson, Mr. Anders Johan male 39.0 1 \n", + "14 Vestrom, Miss. Hulda Amanda Adolfina female 14.0 0 \n", + "15 Hewlett, Mrs. (Mary D Kingcome) female 55.0 0 \n", + "16 Rice, Master. Eugene male 2.0 4 \n", + "17 Williams, Mr. Charles Eugene male NaN 0 \n", + "18 Vander Planke, Mrs. Julius (Emelia Maria Vande... female 31.0 1 \n", + "19 Masselmani, Mrs. Fatima female NaN 0 \n", + "20 Fynney, Mr. Joseph J male 35.0 0 \n", + "21 Beesley, Mr. Lawrence male 34.0 0 \n", + "22 McGowan, Miss. Anna \"Annie\" female 15.0 0 \n", + "23 Sloper, Mr. William Thompson male 28.0 0 \n", + "24 Palsson, Miss. Torborg Danira female 8.0 3 \n", + "25 Asplund, Mrs. Carl Oscar (Selma Augusta Emilia... female 38.0 1 \n", + "26 Emir, Mr. Farred Chehab male NaN 0 \n", + "27 Fortune, Mr. Charles Alexander male 19.0 3 \n", + "28 O'Dwyer, Miss. Ellen \"Nellie\" female NaN 0 \n", + "29 Todoroff, Mr. Lalio male NaN 0 \n", + ".. ... ... ... ... \n", + "861 Giles, Mr. Frederick Edward male 21.0 1 \n", + "862 Swift, Mrs. Frederick Joel (Margaret Welles Ba... female 48.0 0 \n", + "863 Sage, Miss. Dorothy Edith \"Dolly\" female NaN 8 \n", + "864 Gill, Mr. John William male 24.0 0 \n", + "865 Bystrom, Mrs. (Karolina) female 42.0 0 \n", + "866 Duran y More, Miss. Asuncion female 27.0 1 \n", + "867 Roebling, Mr. Washington Augustus II male 31.0 0 \n", + "868 van Melkebeke, Mr. Philemon male NaN 0 \n", + "869 Johnson, Master. Harold Theodor male 4.0 1 \n", + "870 Balkic, Mr. Cerin male 26.0 0 \n", + "871 Beckwith, Mrs. Richard Leonard (Sallie Monypeny) female 47.0 1 \n", + "872 Carlsson, Mr. Frans Olof male 33.0 0 \n", + "873 Vander Cruyssen, Mr. Victor male 47.0 0 \n", + "874 Abelson, Mrs. Samuel (Hannah Wizosky) female 28.0 1 \n", + "875 Najib, Miss. Adele Kiamie \"Jane\" female 15.0 0 \n", + "876 Gustafsson, Mr. Alfred Ossian male 20.0 0 \n", + "877 Petroff, Mr. Nedelio male 19.0 0 \n", + "878 Laleff, Mr. Kristo male NaN 0 \n", + "879 Potter, Mrs. Thomas Jr (Lily Alexenia Wilson) female 56.0 0 \n", + "880 Shelley, Mrs. William (Imanita Parrish Hall) female 25.0 0 \n", + "881 Markun, Mr. Johann male 33.0 0 \n", + "882 Dahlberg, Miss. Gerda Ulrika female 22.0 0 \n", + "883 Banfield, Mr. Frederick James male 28.0 0 \n", + "884 Sutehall, Mr. Henry Jr male 25.0 0 \n", + "885 Rice, Mrs. William (Margaret Norton) female 39.0 0 \n", + "886 Montvila, Rev. Juozas male 27.0 0 \n", + "887 Graham, Miss. Margaret Edith female 19.0 0 \n", + "888 Johnston, Miss. Catherine Helen \"Carrie\" female NaN 1 \n", + "889 Behr, Mr. Karl Howell male 26.0 0 \n", + "890 Dooley, Mr. Patrick male 32.0 0 \n", + "\n", + " Parch Ticket Fare num_cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S \n", + "5 0 330877 8.4583 NaN Q \n", + "6 0 17463 51.8625 E46 S \n", + "7 1 349909 21.0750 NaN S \n", + "8 2 347742 11.1333 NaN S \n", + "9 0 237736 30.0708 NaN C \n", + "10 1 PP 9549 16.7000 G6 S \n", + "11 0 113783 26.5500 C103 S \n", + "12 0 A/5. 2151 8.0500 NaN S \n", + "13 5 347082 31.2750 NaN S \n", + "14 0 350406 7.8542 NaN S \n", + "15 0 248706 16.0000 NaN S \n", + "16 1 382652 29.1250 NaN Q \n", + "17 0 244373 13.0000 NaN S \n", + "18 0 345763 18.0000 NaN S \n", + "19 0 2649 7.2250 NaN C \n", + "20 0 239865 26.0000 NaN S \n", + "21 0 248698 13.0000 D56 S \n", + "22 0 330923 8.0292 NaN Q \n", + "23 0 113788 35.5000 A6 S \n", + "24 1 349909 21.0750 NaN S \n", + "25 5 347077 31.3875 NaN S \n", + "26 0 2631 7.2250 NaN C \n", + "27 2 19950 263.0000 C23 C25 C27 S \n", + "28 0 330959 7.8792 NaN Q \n", + "29 0 349216 7.8958 NaN S \n", + ".. ... ... ... ... ... \n", + "861 0 28134 11.5000 NaN S \n", + "862 0 17466 25.9292 D17 S \n", + "863 2 CA. 2343 69.5500 NaN S \n", + "864 0 233866 13.0000 NaN S \n", + "865 0 236852 13.0000 NaN S \n", + "866 0 SC/PARIS 2149 13.8583 NaN C \n", + "867 0 PC 17590 50.4958 A24 S \n", + "868 0 345777 9.5000 NaN S \n", + "869 1 347742 11.1333 NaN S \n", + "870 0 349248 7.8958 NaN S \n", + "871 1 11751 52.5542 D35 S \n", + "872 0 695 5.0000 B51 B53 B55 S \n", + "873 0 345765 9.0000 NaN S \n", + "874 0 P/PP 3381 24.0000 NaN C \n", + "875 0 2667 7.2250 NaN C \n", + "876 0 7534 9.8458 NaN S \n", + "877 0 349212 7.8958 NaN S \n", + "878 0 349217 7.8958 NaN S \n", + "879 1 11767 83.1583 C50 C \n", + "880 1 230433 26.0000 NaN S \n", + "881 0 349257 7.8958 NaN S \n", + "882 0 7552 10.5167 NaN S \n", + "883 0 C.A./SOTON 34068 10.5000 NaN S \n", + "884 0 SOTON/OQ 392076 7.0500 NaN S \n", + "885 5 382652 29.1250 NaN Q \n", + "886 0 211536 13.0000 NaN S \n", + "887 0 112053 30.0000 B42 S \n", + "888 2 W./C. 6607 23.4500 NaN S \n", + "889 0 111369 30.0000 C148 C \n", + "890 0 370376 7.7500 NaN Q \n", + "\n", + "[891 rows x 12 columns]" + ] + }, + "execution_count": 178, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# renommer \"Cabin\" \n", + "df_titanic.rename(columns={\"Cabin\":\"num_cabin\"}, inplace=True)\n", + "df_titanic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercice : vérifier que le data frame \"original\" est modifié. \n", + "hint : \n", + "1 - utiliser une commande listant les noms de colonne\n", + "2 - afficher les 5 premières lignes du data frame" + ] + }, + { + "cell_type": "code", + "execution_count": 179, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',\n", + " 'Parch', 'Ticket', 'Fare', 'num_cabin', 'Embarked'],\n", + " dtype='object')" + ] + }, + "execution_count": 179, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#utiliser une commande listant les noms de colonne\n", + "df_titanic.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFarenum_cabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare num_cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 180, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#afficher les 5 premières lignes du data frame\n", + "df_titanic.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Extraire des valeurs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### sub data frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But : extraire les colonnes col_1 et col_2 d'un data frame\n", + "syntaxe:\n", + "nom_dataframe[['col_1','col_2']]\n", + "Exercice : extraire les colonnes 'Survived' et 'Sex' " + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Survivednum_cabin
00NaN
11C85
21NaN
31C123
40NaN
50NaN
60E46
70NaN
81NaN
91NaN
101G6
111C103
120NaN
130NaN
140NaN
151NaN
160NaN
171NaN
180NaN
191NaN
200NaN
211D56
221NaN
231A6
240NaN
251NaN
260NaN
270C23 C25 C27
281NaN
290NaN
.........
8610NaN
8621D17
8630NaN
8640NaN
8651NaN
8661NaN
8670A24
8680NaN
8691NaN
8700NaN
8711D35
8720B51 B53 B55
8730NaN
8741NaN
8751NaN
8760NaN
8770NaN
8780NaN
8791C50
8801NaN
8810NaN
8820NaN
8830NaN
8840NaN
8850NaN
8860NaN
8871B42
8880NaN
8891C148
8900NaN
\n", + "

891 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " Survived num_cabin\n", + "0 0 NaN\n", + "1 1 C85\n", + "2 1 NaN\n", + "3 1 C123\n", + "4 0 NaN\n", + "5 0 NaN\n", + "6 0 E46\n", + "7 0 NaN\n", + "8 1 NaN\n", + "9 1 NaN\n", + "10 1 G6\n", + "11 1 C103\n", + "12 0 NaN\n", + "13 0 NaN\n", + "14 0 NaN\n", + "15 1 NaN\n", + "16 0 NaN\n", + "17 1 NaN\n", + "18 0 NaN\n", + "19 1 NaN\n", + "20 0 NaN\n", + "21 1 D56\n", + "22 1 NaN\n", + "23 1 A6\n", + "24 0 NaN\n", + "25 1 NaN\n", + "26 0 NaN\n", + "27 0 C23 C25 C27\n", + "28 1 NaN\n", + "29 0 NaN\n", + ".. ... ...\n", + "861 0 NaN\n", + "862 1 D17\n", + "863 0 NaN\n", + "864 0 NaN\n", + "865 1 NaN\n", + "866 1 NaN\n", + "867 0 A24\n", + "868 0 NaN\n", + "869 1 NaN\n", + "870 0 NaN\n", + "871 1 D35\n", + "872 0 B51 B53 B55\n", + "873 0 NaN\n", + "874 1 NaN\n", + "875 1 NaN\n", + "876 0 NaN\n", + "877 0 NaN\n", + "878 0 NaN\n", + "879 1 C50\n", + "880 1 NaN\n", + "881 0 NaN\n", + "882 0 NaN\n", + "883 0 NaN\n", + "884 0 NaN\n", + "885 0 NaN\n", + "886 0 NaN\n", + "887 1 B42\n", + "888 0 NaN\n", + "889 1 C148\n", + "890 0 NaN\n", + "\n", + "[891 rows x 2 columns]" + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#extraction colonnes\n", + "df_titanic[['Survived','num_cabin']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### filtrer des colonnes " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But : n'afficher que les valeurs (lignes) d'un data frame respectant une condition (vraie / faux)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### syntaxe :\n", + "\n", + "nom_dataframe[condition_logique vrai / faux] -> data frame filtré\n", + "\n", + "Exemple:\n", + "filtrer le dataset selon le sexe des passagers. Par exemple, n'afficher que les hommes ou les femmes\n", + "\n", + "1 - condition logique\n", + "\n", + "\n", + "condition = df_titanic['Sex'] == 'female'\n", + "\n", + "2 - on applique la condition logique sur le data frame\n", + "\n", + "df_titanic[condition]" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFarenum_cabinEmbarked
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
8913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
91012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.7000G6S
111211Bonnell, Miss. Elizabethfemale58.00011378326.5500C103S
141503Vestrom, Miss. Hulda Amanda Adolfinafemale14.0003504067.8542NaNS
151612Hewlett, Mrs. (Mary D Kingcome)female55.00024870616.0000NaNS
181903Vander Planke, Mrs. Julius (Emelia Maria Vande...female31.01034576318.0000NaNS
192013Masselmani, Mrs. FatimafemaleNaN0026497.2250NaNC
222313McGowan, Miss. Anna \"Annie\"female15.0003309238.0292NaNQ
242503Palsson, Miss. Torborg Danirafemale8.03134990921.0750NaNS
252613Asplund, Mrs. Carl Oscar (Selma Augusta Emilia...female38.01534707731.3875NaNS
282913O'Dwyer, Miss. Ellen \"Nellie\"femaleNaN003309597.8792NaNQ
313211Spencer, Mrs. William Augustus (Marie Eugenie)femaleNaN10PC 17569146.5208B78C
323313Glynn, Miss. Mary AgathafemaleNaN003356777.7500NaNQ
383903Vander Planke, Miss. Augusta Mariafemale18.02034576418.0000NaNS
394013Nicola-Yarred, Miss. Jamilafemale14.010265111.2417NaNC
404103Ahlin, Mrs. Johan (Johanna Persdotter Larsson)female40.01075469.4750NaNS
414202Turpin, Mrs. William John Robert (Dorothy Ann ...female27.0101166821.0000NaNS
434412Laroche, Miss. Simonne Marie Anne Andreefemale3.012SC/Paris 212341.5792NaNC
444513Devaney, Miss. Margaret Deliafemale19.0003309587.8792NaNQ
474813O'Driscoll, Miss. BridgetfemaleNaN00143117.7500NaNQ
495003Arnold-Franchi, Mrs. Josef (Josefine Franchi)female18.01034923717.8000NaNS
525311Harper, Mrs. Henry Sleeper (Myna Haxtun)female49.010PC 1757276.7292D33C
535412Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkin...female29.010292626.0000NaNS
565712Rugg, Miss. Emilyfemale21.000C.A. 3102610.5000NaNS
585912West, Miss. Constance Miriumfemale5.012C.A. 3465127.7500NaNS
616211Icard, Miss. Ameliefemale38.00011357280.0000B28NaN
.......................................
80780803Pettersson, Miss. Ellen Nataliafemale18.0003470877.7750NaNS
80981011Chambers, Mrs. Norman Campbell (Bertha Griggs)female33.01011380653.1000E8S
81381403Andersson, Miss. Ebba Iris Alfridafemale6.04234708231.2750NaNS
81681703Heininen, Miss. Wendla Mariafemale23.000STON/O2. 31012907.9250NaNS
82082111Hays, Mrs. Charles Melville (Clara Jennings Gr...female52.0111274993.5000B69S
82382413Moor, Mrs. (Beila)female27.00139209612.4750E121S
82983011Stone, Mrs. George Nelson (Martha Evelyn)female62.00011357280.0000B28NaN
83083113Yasbeck, Mrs. Antoni (Selini Alexander)female15.010265914.4542NaNC
83583611Compton, Miss. Sara Rebeccafemale39.011PC 1775683.1583E49C
84284311Serepeca, Miss. Augustafemale30.00011379831.0000NaNC
84985011Goldenberg, Mrs. Samuel L (Edwiga Grabowska)femaleNaN101745389.1042C92C
85285303Boulos, Miss. Nourelainfemale9.011267815.2458NaNC
85385411Lines, Miss. Mary Conoverfemale16.001PC 1759239.4000D28S
85485502Carter, Mrs. Ernest Courtenay (Lilian Hughes)female44.01024425226.0000NaNS
85585613Aks, Mrs. Sam (Leah Rosen)female18.0013920919.3500NaNS
85685711Wick, Mrs. George Dennick (Mary Hitchcock)female45.01136928164.8667NaNS
85885913Baclini, Mrs. Solomon (Latifa Qurban)female24.003266619.2583NaNC
86286311Swift, Mrs. Frederick Joel (Margaret Welles Ba...female48.0001746625.9292D17S
86386403Sage, Miss. Dorothy Edith \"Dolly\"femaleNaN82CA. 234369.5500NaNS
86586612Bystrom, Mrs. (Karolina)female42.00023685213.0000NaNS
86686712Duran y More, Miss. Asuncionfemale27.010SC/PARIS 214913.8583NaNC
87187211Beckwith, Mrs. Richard Leonard (Sallie Monypeny)female47.0111175152.5542D35S
87487512Abelson, Mrs. Samuel (Hannah Wizosky)female28.010P/PP 338124.0000NaNC
87587613Najib, Miss. Adele Kiamie \"Jane\"female15.00026677.2250NaNC
87988011Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)female56.0011176783.1583C50C
88088112Shelley, Mrs. William (Imanita Parrish Hall)female25.00123043326.0000NaNS
88288303Dahlberg, Miss. Gerda Ulrikafemale22.000755210.5167NaNS
88588603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88788811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88888903Johnston, Miss. Catherine Helen \"Carrie\"femaleNaN12W./C. 660723.4500NaNS
\n", + "

314 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "8 9 1 3 \n", + "9 10 1 2 \n", + "10 11 1 3 \n", + "11 12 1 1 \n", + "14 15 0 3 \n", + "15 16 1 2 \n", + "18 19 0 3 \n", + "19 20 1 3 \n", + "22 23 1 3 \n", + "24 25 0 3 \n", + "25 26 1 3 \n", + "28 29 1 3 \n", + "31 32 1 1 \n", + "32 33 1 3 \n", + "38 39 0 3 \n", + "39 40 1 3 \n", + "40 41 0 3 \n", + "41 42 0 2 \n", + "43 44 1 2 \n", + "44 45 1 3 \n", + "47 48 1 3 \n", + "49 50 0 3 \n", + "52 53 1 1 \n", + "53 54 1 2 \n", + "56 57 1 2 \n", + "58 59 1 2 \n", + "61 62 1 1 \n", + ".. ... ... ... \n", + "807 808 0 3 \n", + "809 810 1 1 \n", + "813 814 0 3 \n", + "816 817 0 3 \n", + "820 821 1 1 \n", + "823 824 1 3 \n", + "829 830 1 1 \n", + "830 831 1 3 \n", + "835 836 1 1 \n", + "842 843 1 1 \n", + "849 850 1 1 \n", + "852 853 0 3 \n", + "853 854 1 1 \n", + "854 855 0 2 \n", + "855 856 1 3 \n", + "856 857 1 1 \n", + "858 859 1 3 \n", + "862 863 1 1 \n", + "863 864 0 3 \n", + "865 866 1 2 \n", + "866 867 1 2 \n", + "871 872 1 1 \n", + "874 875 1 2 \n", + "875 876 1 3 \n", + "879 880 1 1 \n", + "880 881 1 2 \n", + "882 883 0 3 \n", + "885 886 0 3 \n", + "887 888 1 1 \n", + "888 889 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "8 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 \n", + "9 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 \n", + "10 Sandstrom, Miss. Marguerite Rut female 4.0 1 \n", + "11 Bonnell, Miss. Elizabeth female 58.0 0 \n", + "14 Vestrom, Miss. Hulda Amanda Adolfina female 14.0 0 \n", + "15 Hewlett, Mrs. (Mary D Kingcome) female 55.0 0 \n", + "18 Vander Planke, Mrs. Julius (Emelia Maria Vande... female 31.0 1 \n", + "19 Masselmani, Mrs. Fatima female NaN 0 \n", + "22 McGowan, Miss. Anna \"Annie\" female 15.0 0 \n", + "24 Palsson, Miss. Torborg Danira female 8.0 3 \n", + "25 Asplund, Mrs. Carl Oscar (Selma Augusta Emilia... female 38.0 1 \n", + "28 O'Dwyer, Miss. Ellen \"Nellie\" female NaN 0 \n", + "31 Spencer, Mrs. William Augustus (Marie Eugenie) female NaN 1 \n", + "32 Glynn, Miss. Mary Agatha female NaN 0 \n", + "38 Vander Planke, Miss. Augusta Maria female 18.0 2 \n", + "39 Nicola-Yarred, Miss. Jamila female 14.0 1 \n", + "40 Ahlin, Mrs. Johan (Johanna Persdotter Larsson) female 40.0 1 \n", + "41 Turpin, Mrs. William John Robert (Dorothy Ann ... female 27.0 1 \n", + "43 Laroche, Miss. Simonne Marie Anne Andree female 3.0 1 \n", + "44 Devaney, Miss. Margaret Delia female 19.0 0 \n", + "47 O'Driscoll, Miss. Bridget female NaN 0 \n", + "49 Arnold-Franchi, Mrs. Josef (Josefine Franchi) female 18.0 1 \n", + "52 Harper, Mrs. Henry Sleeper (Myna Haxtun) female 49.0 1 \n", + "53 Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkin... female 29.0 1 \n", + "56 Rugg, Miss. Emily female 21.0 0 \n", + "58 West, Miss. Constance Mirium female 5.0 1 \n", + "61 Icard, Miss. Amelie female 38.0 0 \n", + ".. ... ... ... ... \n", + "807 Pettersson, Miss. Ellen Natalia female 18.0 0 \n", + "809 Chambers, Mrs. Norman Campbell (Bertha Griggs) female 33.0 1 \n", + "813 Andersson, Miss. Ebba Iris Alfrida female 6.0 4 \n", + "816 Heininen, Miss. Wendla Maria female 23.0 0 \n", + "820 Hays, Mrs. Charles Melville (Clara Jennings Gr... female 52.0 1 \n", + "823 Moor, Mrs. (Beila) female 27.0 0 \n", + "829 Stone, Mrs. George Nelson (Martha Evelyn) female 62.0 0 \n", + "830 Yasbeck, Mrs. Antoni (Selini Alexander) female 15.0 1 \n", + "835 Compton, Miss. Sara Rebecca female 39.0 1 \n", + "842 Serepeca, Miss. Augusta female 30.0 0 \n", + "849 Goldenberg, Mrs. Samuel L (Edwiga Grabowska) female NaN 1 \n", + "852 Boulos, Miss. Nourelain female 9.0 1 \n", + "853 Lines, Miss. Mary Conover female 16.0 0 \n", + "854 Carter, Mrs. Ernest Courtenay (Lilian Hughes) female 44.0 1 \n", + "855 Aks, Mrs. Sam (Leah Rosen) female 18.0 0 \n", + "856 Wick, Mrs. George Dennick (Mary Hitchcock) female 45.0 1 \n", + "858 Baclini, Mrs. Solomon (Latifa Qurban) female 24.0 0 \n", + "862 Swift, Mrs. Frederick Joel (Margaret Welles Ba... female 48.0 0 \n", + "863 Sage, Miss. Dorothy Edith \"Dolly\" female NaN 8 \n", + "865 Bystrom, Mrs. (Karolina) female 42.0 0 \n", + "866 Duran y More, Miss. Asuncion female 27.0 1 \n", + "871 Beckwith, Mrs. Richard Leonard (Sallie Monypeny) female 47.0 1 \n", + "874 Abelson, Mrs. Samuel (Hannah Wizosky) female 28.0 1 \n", + "875 Najib, Miss. Adele Kiamie \"Jane\" female 15.0 0 \n", + "879 Potter, Mrs. Thomas Jr (Lily Alexenia Wilson) female 56.0 0 \n", + "880 Shelley, Mrs. William (Imanita Parrish Hall) female 25.0 0 \n", + "882 Dahlberg, Miss. Gerda Ulrika female 22.0 0 \n", + "885 Rice, Mrs. William (Margaret Norton) female 39.0 0 \n", + "887 Graham, Miss. Margaret Edith female 19.0 0 \n", + "888 Johnston, Miss. Catherine Helen \"Carrie\" female NaN 1 \n", + "\n", + " Parch Ticket Fare num_cabin Embarked \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "8 2 347742 11.1333 NaN S \n", + "9 0 237736 30.0708 NaN C \n", + "10 1 PP 9549 16.7000 G6 S \n", + "11 0 113783 26.5500 C103 S \n", + "14 0 350406 7.8542 NaN S \n", + "15 0 248706 16.0000 NaN S \n", + "18 0 345763 18.0000 NaN S \n", + "19 0 2649 7.2250 NaN C \n", + "22 0 330923 8.0292 NaN Q \n", + "24 1 349909 21.0750 NaN S \n", + "25 5 347077 31.3875 NaN S \n", + "28 0 330959 7.8792 NaN Q \n", + "31 0 PC 17569 146.5208 B78 C \n", + "32 0 335677 7.7500 NaN Q \n", + "38 0 345764 18.0000 NaN S \n", + "39 0 2651 11.2417 NaN C \n", + "40 0 7546 9.4750 NaN S \n", + "41 0 11668 21.0000 NaN S \n", + "43 2 SC/Paris 2123 41.5792 NaN C \n", + "44 0 330958 7.8792 NaN Q \n", + "47 0 14311 7.7500 NaN Q \n", + "49 0 349237 17.8000 NaN S \n", + "52 0 PC 17572 76.7292 D33 C \n", + "53 0 2926 26.0000 NaN S \n", + "56 0 C.A. 31026 10.5000 NaN S \n", + "58 2 C.A. 34651 27.7500 NaN S \n", + "61 0 113572 80.0000 B28 NaN \n", + ".. ... ... ... ... ... \n", + "807 0 347087 7.7750 NaN S \n", + "809 0 113806 53.1000 E8 S \n", + "813 2 347082 31.2750 NaN S \n", + "816 0 STON/O2. 3101290 7.9250 NaN S \n", + "820 1 12749 93.5000 B69 S \n", + "823 1 392096 12.4750 E121 S \n", + "829 0 113572 80.0000 B28 NaN \n", + "830 0 2659 14.4542 NaN C \n", + "835 1 PC 17756 83.1583 E49 C \n", + "842 0 113798 31.0000 NaN C \n", + "849 0 17453 89.1042 C92 C \n", + "852 1 2678 15.2458 NaN C \n", + "853 1 PC 17592 39.4000 D28 S \n", + "854 0 244252 26.0000 NaN S \n", + "855 1 392091 9.3500 NaN S \n", + "856 1 36928 164.8667 NaN S \n", + "858 3 2666 19.2583 NaN C \n", + "862 0 17466 25.9292 D17 S \n", + "863 2 CA. 2343 69.5500 NaN S \n", + "865 0 236852 13.0000 NaN S \n", + "866 0 SC/PARIS 2149 13.8583 NaN C \n", + "871 1 11751 52.5542 D35 S \n", + "874 0 P/PP 3381 24.0000 NaN C \n", + "875 0 2667 7.2250 NaN C \n", + "879 1 11767 83.1583 C50 C \n", + "880 1 230433 26.0000 NaN S \n", + "882 0 7552 10.5167 NaN S \n", + "885 5 382652 29.1250 NaN Q \n", + "887 0 112053 30.0000 B42 S \n", + "888 2 W./C. 6607 23.4500 NaN S \n", + "\n", + "[314 rows x 12 columns]" + ] + }, + "execution_count": 182, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#la condition logique vrai / faux\n", + "filtre_sexe = df_titanic['Sex'] == 'female'\n", + "filtre_sexe\n", + "is_femmes = df_titanic[filtre_sexe]\n", + "is_femmes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3 - on peut ajouter d'autres conditions. Chaque condition entre '()' \n", + "\n", + "C est à dire :\n", + "(condition_1) & (condition_2)\n", + "\n", + "exemple : afficher tous les femmes survivantes.\n", + "\n", + "condition = (df_titanic['Sex'] == 'female') & (df_titanic['Survived'] == 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['male', 'female', '123456'], dtype=object)" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#exercice afficher tous les hommes morts\n", + "df_men_died = (df_titanic['Sex'] == 'male') & (df_titanic['Survived'] == 0)\n", + "df_titanic[df_men_died]\n", + "df_titanic['Sex'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFarenum_cabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.25NaNS
4503Allen, Mr. William Henrymale35.0003734508.05NaNS
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass Name Sex Age SibSp \\\n", + "0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 \n", + "4 5 0 3 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare num_cabin Embarked \n", + "0 0 A/5 21171 7.25 NaN S \n", + "4 0 373450 8.05 NaN S " + ] + }, + "execution_count": 184, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# afficher les 2 1ère ligne\n", + "df_titanic[df_men_died].head(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vue agrégée d'un data set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Groupby\n", + "##### sum() et count()\n", + "Permet d'avoir une vue agrégée\n", + "\n", + "syntaxe:\n", + "nom_dataframe.goupby('nom_col')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#exemple:\n", + "regrouper les femmmes survivantes selon la classe\n" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": {}, + "outputs": [], + "source": [ + "# condition logique pour filtrer le data set :\n", + "condition_women_survived = (df_titanic['Sex'] == 'female') & (df_titanic['Survived'] == 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": {}, + "outputs": [], + "source": [ + "# appliquer le filter sur le data set et stocker le résultat\n", + "df_women_survived = df_titanic[condition_women_survived]" + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedNameSexAgeSibSpParchTicketFarenum_cabinEmbarked
Pclass
19191919182919191917889
2707070706870707070970
3727272724772727272472
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Name Sex Age SibSp Parch Ticket Fare \\\n", + "Pclass \n", + "1 91 91 91 91 82 91 91 91 91 \n", + "2 70 70 70 70 68 70 70 70 70 \n", + "3 72 72 72 72 47 72 72 72 72 \n", + "\n", + " num_cabin Embarked \n", + "Pclass \n", + "1 78 89 \n", + "2 9 70 \n", + "3 4 72 " + ] + }, + "execution_count": 187, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# agreger les valeurs avec la fonction sum()\n", + "df_women_survived_by = df_women_survived.groupby('Pclass')\n", + "df_group = df_women_survived['Pclass'].unique()\n", + "df_women_survived_by.sum()\n", + "df_women_survived_by.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": {}, + "outputs": [], + "source": [ + "# interpréter le résultat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#exemple:\n", + "regrouper les hommes morts selon la classe\n" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "metadata": {}, + "outputs": [], + "source": [ + "# condition logique pour filtrer le data set : \n", + "condition_man_died = (df_titanic['Sex'] == 'male') & (df_titanic['Survived'] == 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFarenum_cabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
5603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
6701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
7803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
121303Saundercock, Mr. William Henrymale20.000A/5. 21518.0500NaNS
131403Andersson, Mr. Anders Johanmale39.01534708231.2750NaNS
161703Rice, Master. Eugenemale2.04138265229.1250NaNQ
202102Fynney, Mr. Joseph Jmale35.00023986526.0000NaNS
262703Emir, Mr. Farred ChehabmaleNaN0026317.2250NaNC
272801Fortune, Mr. Charles Alexandermale19.03219950263.0000C23 C25 C27S
293003Todoroff, Mr. LaliomaleNaN003492167.8958NaNS
303101Uruchurtu, Don. Manuel Emale40.000PC 1760127.7208NaNC
333402Wheadon, Mr. Edward Hmale66.000C.A. 2457910.5000NaNS
343501Meyer, Mr. Edgar Josephmale28.010PC 1760482.1708NaNC
353601Holverson, Mr. Alexander Oskarmale42.01011378952.0000NaNS
373803Cann, Mr. Ernest Charlesmale21.000A./5. 21528.0500NaNS
424303Kraeff, Mr. TheodormaleNaN003492537.8958NaNC
454603Rogers, Mr. William JohnmaleNaN00S.C./A.4. 235678.0500NaNS
484903Samaan, Mr. YoussefmaleNaN20266221.6792NaNC
505103Panula, Master. Juha Niilomale7.041310129539.6875NaNS
515203Nosworthy, Mr. Richard Catermale21.000A/4. 398867.8000NaNS
545501Ostby, Mr. Engelhart Corneliusmale65.00111350961.9792B30C
575803Novel, Mr. Mansouermale28.50026977.2292NaNC
596003Goodwin, Master. William Frederickmale11.052CA 214446.9000NaNS
606103Sirayanian, Mr. Orsenmale22.00026697.2292NaNC
626301Harris, Mr. Henry Birkhardtmale45.0103697383.4750C83S
636403Skoog, Master. Haraldmale4.03234708827.9000NaNS
646501Stewart, Mr. Albert AmaleNaN00PC 1760527.7208NaNC
676803Crease, Mr. Ernest Jamesmale19.000S.P. 34648.1583NaNS
.......................................
83483503Allum, Mr. Owen Georgemale18.00022238.3000NaNS
83683703Pasic, Mr. Jakobmale21.0003150978.6625NaNS
83783803Sirota, Mr. MauricemaleNaN003920928.0500NaNS
84084103Alhomaki, Mr. Ilmari Rudolfmale20.000SOTON/O2 31012877.9250NaNS
84184202Mudd, Mr. Thomas Charlesmale16.000S.O./P.P. 310.5000NaNS
84384403Lemberopolous, Mr. Peter Lmale34.50026836.4375NaNC
84484503Culumovic, Mr. Jesomale17.0003150908.6625NaNS
84584603Abbing, Mr. Anthonymale42.000C.A. 55477.5500NaNS
84684703Sage, Mr. Douglas BullenmaleNaN82CA. 234369.5500NaNS
84784803Markoff, Mr. Marinmale35.0003492137.8958NaNC
84884902Harper, Rev. Johnmale28.00124872733.0000NaNS
85085103Andersson, Master. Sigvard Harald Eliasmale4.04234708231.2750NaNS
85185203Svensson, Mr. Johanmale74.0003470607.7750NaNS
85986003Razi, Mr. RaihedmaleNaN0026297.2292NaNC
86086103Hansen, Mr. Claus Petermale41.02035002614.1083NaNS
86186202Giles, Mr. Frederick Edwardmale21.0102813411.5000NaNS
86486502Gill, Mr. John Williammale24.00023386613.0000NaNS
86786801Roebling, Mr. Washington Augustus IImale31.000PC 1759050.4958A24S
86886903van Melkebeke, Mr. PhilemonmaleNaN003457779.5000NaNS
87087103Balkic, Mr. Cerinmale26.0003492487.8958NaNS
87287301Carlsson, Mr. Frans Olofmale33.0006955.0000B51 B53 B55S
87387403Vander Cruyssen, Mr. Victormale47.0003457659.0000NaNS
87687703Gustafsson, Mr. Alfred Ossianmale20.00075349.8458NaNS
87787803Petroff, Mr. Nedeliomale19.0003492127.8958NaNS
87887903Laleff, Mr. KristomaleNaN003492177.8958NaNS
88188203Markun, Mr. Johannmale33.0003492577.8958NaNS
88388402Banfield, Mr. Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
88488503Sutehall, Mr. Henry Jrmale25.000SOTON/OQ 3920767.0500NaNS
88688702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
89089103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ
\n", + "

467 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Pclass Name \\\n", + "0 1 0 3 Braund, Mr. Owen Harris \n", + "4 5 0 3 Allen, Mr. William Henry \n", + "5 6 0 3 Moran, Mr. James \n", + "6 7 0 1 McCarthy, Mr. Timothy J \n", + "7 8 0 3 Palsson, Master. Gosta Leonard \n", + "12 13 0 3 Saundercock, Mr. William Henry \n", + "13 14 0 3 Andersson, Mr. Anders Johan \n", + "16 17 0 3 Rice, Master. Eugene \n", + "20 21 0 2 Fynney, Mr. Joseph J \n", + "26 27 0 3 Emir, Mr. Farred Chehab \n", + "27 28 0 1 Fortune, Mr. Charles Alexander \n", + "29 30 0 3 Todoroff, Mr. Lalio \n", + "30 31 0 1 Uruchurtu, Don. Manuel E \n", + "33 34 0 2 Wheadon, Mr. Edward H \n", + "34 35 0 1 Meyer, Mr. Edgar Joseph \n", + "35 36 0 1 Holverson, Mr. Alexander Oskar \n", + "37 38 0 3 Cann, Mr. Ernest Charles \n", + "42 43 0 3 Kraeff, Mr. Theodor \n", + "45 46 0 3 Rogers, Mr. William John \n", + "48 49 0 3 Samaan, Mr. Youssef \n", + "50 51 0 3 Panula, Master. Juha Niilo \n", + "51 52 0 3 Nosworthy, Mr. Richard Cater \n", + "54 55 0 1 Ostby, Mr. Engelhart Cornelius \n", + "57 58 0 3 Novel, Mr. Mansouer \n", + "59 60 0 3 Goodwin, Master. William Frederick \n", + "60 61 0 3 Sirayanian, Mr. Orsen \n", + "62 63 0 1 Harris, Mr. Henry Birkhardt \n", + "63 64 0 3 Skoog, Master. Harald \n", + "64 65 0 1 Stewart, Mr. Albert A \n", + "67 68 0 3 Crease, Mr. Ernest James \n", + ".. ... ... ... ... \n", + "834 835 0 3 Allum, Mr. Owen George \n", + "836 837 0 3 Pasic, Mr. Jakob \n", + "837 838 0 3 Sirota, Mr. Maurice \n", + "840 841 0 3 Alhomaki, Mr. Ilmari Rudolf \n", + "841 842 0 2 Mudd, Mr. Thomas Charles \n", + "843 844 0 3 Lemberopolous, Mr. Peter L \n", + "844 845 0 3 Culumovic, Mr. Jeso \n", + "845 846 0 3 Abbing, Mr. Anthony \n", + "846 847 0 3 Sage, Mr. Douglas Bullen \n", + "847 848 0 3 Markoff, Mr. Marin \n", + "848 849 0 2 Harper, Rev. John \n", + "850 851 0 3 Andersson, Master. Sigvard Harald Elias \n", + "851 852 0 3 Svensson, Mr. Johan \n", + "859 860 0 3 Razi, Mr. Raihed \n", + "860 861 0 3 Hansen, Mr. Claus Peter \n", + "861 862 0 2 Giles, Mr. Frederick Edward \n", + "864 865 0 2 Gill, Mr. John William \n", + "867 868 0 1 Roebling, Mr. Washington Augustus II \n", + "868 869 0 3 van Melkebeke, Mr. Philemon \n", + "870 871 0 3 Balkic, Mr. Cerin \n", + "872 873 0 1 Carlsson, Mr. Frans Olof \n", + "873 874 0 3 Vander Cruyssen, Mr. Victor \n", + "876 877 0 3 Gustafsson, Mr. Alfred Ossian \n", + "877 878 0 3 Petroff, Mr. Nedelio \n", + "878 879 0 3 Laleff, Mr. Kristo \n", + "881 882 0 3 Markun, Mr. Johann \n", + "883 884 0 2 Banfield, Mr. Frederick James \n", + "884 885 0 3 Sutehall, Mr. Henry Jr \n", + "886 887 0 2 Montvila, Rev. Juozas \n", + "890 891 0 3 Dooley, Mr. Patrick \n", + "\n", + " Sex Age SibSp Parch Ticket Fare num_cabin \\\n", + "0 male 22.0 1 0 A/5 21171 7.2500 NaN \n", + "4 male 35.0 0 0 373450 8.0500 NaN \n", + "5 male NaN 0 0 330877 8.4583 NaN \n", + "6 male 54.0 0 0 17463 51.8625 E46 \n", + "7 male 2.0 3 1 349909 21.0750 NaN \n", + "12 male 20.0 0 0 A/5. 2151 8.0500 NaN \n", + "13 male 39.0 1 5 347082 31.2750 NaN \n", + "16 male 2.0 4 1 382652 29.1250 NaN \n", + "20 male 35.0 0 0 239865 26.0000 NaN \n", + "26 male NaN 0 0 2631 7.2250 NaN \n", + "27 male 19.0 3 2 19950 263.0000 C23 C25 C27 \n", + "29 male NaN 0 0 349216 7.8958 NaN \n", + "30 male 40.0 0 0 PC 17601 27.7208 NaN \n", + "33 male 66.0 0 0 C.A. 24579 10.5000 NaN \n", + "34 male 28.0 1 0 PC 17604 82.1708 NaN \n", + "35 male 42.0 1 0 113789 52.0000 NaN \n", + "37 male 21.0 0 0 A./5. 2152 8.0500 NaN \n", + "42 male NaN 0 0 349253 7.8958 NaN \n", + "45 male NaN 0 0 S.C./A.4. 23567 8.0500 NaN \n", + "48 male NaN 2 0 2662 21.6792 NaN \n", + "50 male 7.0 4 1 3101295 39.6875 NaN \n", + "51 male 21.0 0 0 A/4. 39886 7.8000 NaN \n", + "54 male 65.0 0 1 113509 61.9792 B30 \n", + "57 male 28.5 0 0 2697 7.2292 NaN \n", + "59 male 11.0 5 2 CA 2144 46.9000 NaN \n", + "60 male 22.0 0 0 2669 7.2292 NaN \n", + "62 male 45.0 1 0 36973 83.4750 C83 \n", + "63 male 4.0 3 2 347088 27.9000 NaN \n", + "64 male NaN 0 0 PC 17605 27.7208 NaN \n", + "67 male 19.0 0 0 S.P. 3464 8.1583 NaN \n", + ".. ... ... ... ... ... ... ... \n", + "834 male 18.0 0 0 2223 8.3000 NaN \n", + "836 male 21.0 0 0 315097 8.6625 NaN \n", + "837 male NaN 0 0 392092 8.0500 NaN \n", + "840 male 20.0 0 0 SOTON/O2 3101287 7.9250 NaN \n", + "841 male 16.0 0 0 S.O./P.P. 3 10.5000 NaN \n", + "843 male 34.5 0 0 2683 6.4375 NaN \n", + "844 male 17.0 0 0 315090 8.6625 NaN \n", + "845 male 42.0 0 0 C.A. 5547 7.5500 NaN \n", + "846 male NaN 8 2 CA. 2343 69.5500 NaN \n", + "847 male 35.0 0 0 349213 7.8958 NaN \n", + "848 male 28.0 0 1 248727 33.0000 NaN \n", + "850 male 4.0 4 2 347082 31.2750 NaN \n", + "851 male 74.0 0 0 347060 7.7750 NaN \n", + "859 male NaN 0 0 2629 7.2292 NaN \n", + "860 male 41.0 2 0 350026 14.1083 NaN \n", + "861 male 21.0 1 0 28134 11.5000 NaN \n", + "864 male 24.0 0 0 233866 13.0000 NaN \n", + "867 male 31.0 0 0 PC 17590 50.4958 A24 \n", + "868 male NaN 0 0 345777 9.5000 NaN \n", + "870 male 26.0 0 0 349248 7.8958 NaN \n", + "872 male 33.0 0 0 695 5.0000 B51 B53 B55 \n", + "873 male 47.0 0 0 345765 9.0000 NaN \n", + "876 male 20.0 0 0 7534 9.8458 NaN \n", + "877 male 19.0 0 0 349212 7.8958 NaN \n", + "878 male NaN 0 0 349217 7.8958 NaN \n", + "881 male 33.0 0 0 349257 7.8958 NaN \n", + "883 male 28.0 0 0 C.A./SOTON 34068 10.5000 NaN \n", + "884 male 25.0 0 0 SOTON/OQ 392076 7.0500 NaN \n", + "886 male 27.0 0 0 211536 13.0000 NaN \n", + "890 male 32.0 0 0 370376 7.7500 NaN \n", + "\n", + " Embarked \n", + "0 S \n", + "4 S \n", + "5 Q \n", + "6 S \n", + "7 S \n", + "12 S \n", + "13 S \n", + "16 Q \n", + "20 S \n", + "26 C \n", + "27 S \n", + "29 S \n", + "30 C \n", + "33 S \n", + "34 C \n", + "35 S \n", + "37 S \n", + "42 C \n", + "45 S \n", + "48 C \n", + "50 S \n", + "51 S \n", + "54 C \n", + "57 C \n", + "59 S \n", + "60 C \n", + "62 S \n", + "63 S \n", + "64 C \n", + "67 S \n", + ".. ... \n", + "834 S \n", + "836 S \n", + "837 S \n", + "840 S \n", + "841 S \n", + "843 C \n", + "844 S \n", + "845 S \n", + "846 S \n", + "847 C \n", + "848 S \n", + "850 S \n", + "851 S \n", + "859 C \n", + "860 S \n", + "861 S \n", + "864 S \n", + "867 S \n", + "868 S \n", + "870 S \n", + "872 S \n", + "873 S \n", + "876 S \n", + "877 S \n", + "878 S \n", + "881 S \n", + "883 S \n", + "884 S \n", + "886 S \n", + "890 Q \n", + "\n", + "[467 rows x 12 columns]" + ] + }, + "execution_count": 194, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# appliquer le filter sur le data set et stocker le résultat\n", + "df_men_died = df_titanic[condition_man_died]\n", + "df_men_died" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PassengerIdSurvivedNameSexAgeSibSpParchTicketFarenum_cabinEmbarked
Pclass
17777777761777777775677
2919191918491919191291
32992992992992152992992992994299
\n", + "
" + ], + "text/plain": [ + " PassengerId Survived Name Sex Age SibSp Parch Ticket Fare \\\n", + "Pclass \n", + "1 77 77 77 77 61 77 77 77 77 \n", + "2 91 91 91 91 84 91 91 91 91 \n", + "3 299 299 299 299 215 299 299 299 299 \n", + "\n", + " num_cabin Embarked \n", + "Pclass \n", + "1 56 77 \n", + "2 2 91 \n", + "3 4 299 " + ] + }, + "execution_count": 204, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# agreger les valeurs avec la fonction count()\n", + "df_men_died_died_by = df_men_died.groupby('Pclass')\n", + "df_men_died_died_by.count()" + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": {}, + "outputs": [], + "source": [ + "# interpréter le résultat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## appliquer une fonction a un sub data frame\n", + "### appliquer à chaque élément d'une colonne\n", + "\n", + "syntaxe:\n", + "\n", + "nom_dataframe['col_4'].map(lambda x : x + 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'nom_dataframe' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#exercice :\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;31m#interpréter :\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mnom_dataframe\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'col_4'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmap\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m:\u001b[0m\u001b[0mx\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'nom_dataframe' is not defined" + ] + } + ], + "source": [ + "#exercice :\n", + "#interpréter :\n", + "nom_dataframe['col_4'].map(lambda x:x + 1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# exercice concaténer \"name_\" devant chaque nom" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# dans quelle colonne se trouve les noms ? " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# concater" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## appliquer une fonction à une ou plusieurs colonnes\n", + "\n", + "syntaxe :\n", + "\n", + "nom_data_frame[['col_1' , 'col_2']].apply(fonction_a_appliquer)\n", + "\n", + "exemple:\n", + "\n", + "nom_data_frame[['col_1' , 'col_2']].apply(sum)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#exercice\n", + "#appliquer la fonction sum à 1 colonne du data set" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## appliquer une fonction à toutes les colonnes du data frame\n", + "\n", + "syntaxe :\n", + "\n", + "nom_data_frame[['col_1' , 'col_2']].applymap(fonction_a_appliquer)\n", + "\n", + "exemple:\n", + "\n", + "nom_data_frame[['col_1' , 'col_2']].applymap(sum)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Combiner des data set entre eux" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "syntax:\n", + "pd.concat([data_frame_1 , data_frame_2])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 2]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
00
11
22
01000
1999
2998
\n", + "
" + ], + "text/plain": [ + " 0\n", + "0 0\n", + "1 1\n", + "2 2\n", + "0 1000\n", + "1 999\n", + "2 998" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#exercice générer 2 dataframe puis les concaténer\n", + "import pandas as pd\n", + "\n", + "x = list(range(3))\n", + "print (x)\n", + "\n", + "df_1 = pd.DataFrame(x)\n", + "\n", + "x = list(range(1000 , 997, -1))\n", + "df_2 = pd.DataFrame(x)\n", + "\n", + "#solution 1\n", + "pd.concat([df_1 , df_2])\n", + "# solution 2\n", + "#df_1.append\n", + "# solution 3\n", + "np.hstack([npar_x , npar_y])\n", + "# solution 4\n", + "pd.DataFrame(np.hstack([npar_x , npar_y]))\n", + "df_1.values.shape\n", + "# solution 5\n", + "pd.DataFrame(np.vstack([df_1.values , df_2.values])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 1 - générer le data frame 1 (vue plus haut : générateur random. Par exemple, 2 lignes x 3 colonnes)\n", + "# afficher le data frame\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# appliquer la fonction int() à tout le data frame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# int() := ? " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# hint : utiliser applymap" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# stocker dans \"df1\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# afficher df1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " # 2 - générer le data frame 2 (vue plus haut : générateur random 2 lignes x 3 colonnes)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# stocker dans \"df2\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# afficher df2\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# concatener les data frames" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Statistiques sur un data set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Fonction describe() de l'API Pandas\n", + "usage :\n", + "\n", + "print nom_data_frame.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# utiliser la fonction describe() sur le data frame concaténé" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/math_with_python.ipynb b/math_with_python.ipynb new file mode 100644 index 0000000..fbc92f0 --- /dev/null +++ b/math_with_python.ipynb @@ -0,0 +1,1261 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Mathématiques en codant\n", + "\n", + "Aujourd'hui et pendant probablement plusieurs séances, on va apprendre et revoir des maths en codant ! Les maths c'est cool, si si ! C'est juste qu'on ne vous l'avait pas dit. Il faut juste voir ça comme un langage. C'est un langage très pratique pour décrire de manière précise de nombreux phénomènes, notamment celui d'apprentissage. Alors haut les coeurs !\n", + "\n", + "On gardera bien en tête la distinction entre fonction informatique (procédure) et fonction mathématique\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fonction et dérivées" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder une fonction permettant de calculer $y = ax + b$" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def affine_function(a, b, x):\n", + " \"\"\"\n", + " \"\"\"\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Utiliser affine_function pour remplir une liste de valeur et le tracer en utilisant la librairie matplotlib. \n", + "plt.plot(x,y) pour dessiner\n", + "plt.show() pour afficher" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "def showPlot(x, y):\n", + " plt.plot(x, y)\n", + " plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire de même pour une fonciton polynomiale $y = ax^2 + bx + c$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def polynome(arguments):\n", + " \"\"\"\n", + " \"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "afficher le polynome $-x^2$. On pourra soit définir une autre fonction polynome. Soit faire une fonction polynome_generator(a,b,c) qui retourne une fonction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Si on dispose de deux points on peut tracer une droite. A l'aide de matplotlib coder la fonction draw_line_between_points qui trace une droite en deux points ayant pour coordonnée p1 et p2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "unexpected EOF while parsing (, line 2)", + "output_type": "error", + "traceback": [ + "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m2\u001b[0m\n\u001b[1;33m \u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m unexpected EOF while parsing\n" + ] + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder la fonction variation_rate qui calcule le taux de variation d'une fonction à un point donné. $variation = \\frac{f(x+h) - f(x)}{h}$. Cette fonction variation_rate prendra pour argument une fonction f sur laquelle calculer le taux de variation, le point x et h." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def variation_rate(f, x, h):\n", + " return (f(x+h)-f(x))/h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculer le taux de variation pour h=0.1 avec x = 1, 2 et 4. Faire de même avec le polynôme $f(x) = -x^2$. Commenter" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ecrire une fonction qui test si f(x1) est plus grand ou moins grande que f(x2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def is_higher(f, x1, x2):\n", + " \"\"\"\n", + " \"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Un des grands but du Machine Learning est de trouver le minimum de fonctions. En effet, on veut minimiser l'erreur de notre modèle. En général ces fonctions sont très compliquées et on ne peut pas calculer leur valeur pour beaucoup de point comme on le fait pour des fonction simple comme des polynome. Par contre on connait souvent leur valeur. On va ici utiliser la fonction variation_rate pour descendre le long des pentes comme au ski. A l'aide de la fonction variation_rate faire une fonction retourne un point x' tel que x' < x." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "def lower_point(f, x, h):\n", + " xprime = x\n", + " cpt=0\n", + " while(cpt<100):\n", + " cpt+=1\n", + " if (variation_rate(f, xprime, h) < 0):\n", + " xprime = xprime+h\n", + " print(\"x:\", xprime)\n", + " elif (variation_rate(f, xprime, h) > 0):\n", + " xprime = xprime-h\n", + " print(\"x:\", xprime)\n", + " else:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En partant de x = 4. utiliser la fonction lower_point pour descendre le long de la fonction $f(x) = x²$. Stocker les différents x et l'afficher en rouge au dessus du polynome" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x: 3.9\n", + "x: 3.8\n", + "x: 3.6999999999999997\n", + "x: 3.5999999999999996\n", + "x: 3.4999999999999996\n", + "x: 3.3999999999999995\n", + "x: 3.2999999999999994\n", + "x: 3.1999999999999993\n", + "x: 3.099999999999999\n", + "x: 2.999999999999999\n", + "x: 2.899999999999999\n", + "x: 2.799999999999999\n", + "x: 2.699999999999999\n", + "x: 2.5999999999999988\n", + "x: 2.4999999999999987\n", + "x: 2.3999999999999986\n", + "x: 2.2999999999999985\n", + "x: 2.1999999999999984\n", + "x: 2.0999999999999983\n", + "x: 1.9999999999999982\n", + "x: 1.8999999999999981\n", + "x: 1.799999999999998\n", + "x: 1.699999999999998\n", + "x: 1.5999999999999979\n", + "x: 1.4999999999999978\n", + "x: 1.3999999999999977\n", + "x: 1.2999999999999976\n", + "x: 1.1999999999999975\n", + "x: 1.0999999999999974\n", + "x: 0.9999999999999974\n", + "x: 0.8999999999999975\n", + "x: 0.7999999999999975\n", + "x: 0.6999999999999975\n", + "x: 0.5999999999999975\n", + "x: 0.49999999999999756\n", + "x: 0.3999999999999976\n", + "x: 0.2999999999999976\n", + "x: 0.1999999999999976\n", + "x: 0.09999999999999759\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n", + "x: -0.10000000000000242\n", + "x: -2.4147350785597155e-15\n" + ] + } + ], + "source": [ + "lower_point(lambda x:x**2, 4, 0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Listes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder une fonction multiply_liste qui prend en argument une liste et retourne une liste dont tous les éléments sont multiplié par un coefficient $\\alpha$" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def multiply_liste(l, alpha):\n", + " return [x*alpha for x in l]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 3, 6, 9, 12]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x=range(5)\n", + "multiply_liste(x,3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder une fonction add_lists qui prend en argument deux listes l1 et l2 et qui retourne la somme des deux" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "def add_lists(l1, l2):\n", + " return [x+y for x, y in zip(l1,l2)]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[-3.0, 1.5, 6.0, 10.5, 15.0, 19.5, 24.0, 28.5, 33.0, 37.5]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "l1=[2*x-3 for x in range(10)]\n", + "l2=[x*2.5 for x in range(10)]\n", + "add_lists(l1,l2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Un peu de géométrie" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On considère les points aux coordonnées suivantes :\n", + "- A: (1, 1)\n", + "- B: (2, 2)\n", + "- C: (1, 2)\n", + "\n", + "En utilisant matplotlib, tracer le triangle formé par ces points." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "showPlot([1,2,1,1], [1,2,2,1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculer la distance entre A et B en utilisant pythagore. Faire une fonction qui calcule la distance entre deux points" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "def euclidian_distance(p1, p2):\n", + " return math.sqrt((p1.x-p2.x)**2+(p1.y-p2.y)**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Bon maintenant un point dans l'espace, Il a trois coordonnées (x1, y1, z1) et (x2, y2, z2). Ecrire une fonction euclidian_distance pour la 3D" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "def euclidian_distance3D(p1, p2):\n", + " return math.sqrt((p1.x-p2.x)**2+(p1.y-p2.y)**2+(p1.z-p2.z)**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Et si on imaginez qu'il puisse avoir autant de dimension qu'on veut ? " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "class Point:\n", + " def __init__(self, coords):\n", + " self.coords = coords" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "def euclidien_distanceND(p1, p2):\n", + " d = 0\n", + " for i in range(len(p1.coords)):\n", + " d+=(p1.coords[i]-p2.coords[i])**2\n", + " return math.sqrt(d)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Les lois de probabilités\n", + "\n", + "Qu'est ce que le hasard ? Est-ce simplement le reflet de notre ignorance ou est ce un phénomène qui existe vraiment ? Dieu joue-t-il au dé ? Nous ne répondrons pas à ces questions dans ce notebook. Néanmoins la notions de probabilités et l'arsenal mathématique qui l'accompagne nous sera très utile. Nous allons les introduire par la pratique. Par la même occasion nous commencerons à manipuler la librairy numpy.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Introduction à numpy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On a vu qu'utiliser des listes pour manipuler des séries de nombres (vecteurs) n'était pas très pratique. A chaque opération qui nous intéresse on est obligé de faire des boucles. Il existe une librairie qui s'appelle numpy qui facilite grandement la manipulation de nombre. Comme vous avez peut être remarqué pour importer une librairie on utilise l'instruction import. Si vous regardez comment matplotlib a été importé vous remarquerez la présence du mot clé \"as\". Il s'agit d'un alias permettant de raccourcir le nom de la fonction. importer numpy avec l'alias np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A l'aide de la fonction np.ones définir un vecteur remplis de taille 10 et l'affichier" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "v=np.ones(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Multiplier ce vecteur par 2 et l'afficher. " + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2., 2., 2., 2., 2., 2., 2., 2., 2., 2.])" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v*2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Définir un second vecteur et faire leur somme et leur multiplication. " + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]\n", + "[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]\n" + ] + } + ], + "source": [ + "v2=range(10)\n", + "s=v+v2\n", + "print(s)\n", + "m=v*v2\n", + "print(m)" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "range(0, 10)" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v2" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[x+y for x, y in zip(v,v2)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On va simuler le jeté de dé. A l'aide de la fonction numpy.random.randint qui crée un vecteur de nombre aléatoire compris entre une limite basse et une limite haute, créer un vecteur remplis aléatoirement de 0 et 1 de taille n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "def flip_coin(number_of_flip):\n", + " return np.random.randint(2,size=number_of_flip)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Indexation et masks en numpy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "executer les lignes suivantes et expliquer brievement ce qu'elles font" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2]\n", + "[3 0]\n", + "[0 1 2]\n" + ] + } + ], + "source": [ + "a = np.array([1, 2, 3, 0, 0, 1, 2])\n", + "print(a[:2])\n", + "print(a[2:4])\n", + "print(a[4:])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "## sous listes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Executer les lignes suivantes et expliquer à quoi ça sert: " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ True True True False False True True]\n", + "[1 2 3 1 2]\n" + ] + } + ], + "source": [ + "mask = a > 0\n", + "print(mask)\n", + "print(a[mask])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui calcule la proportion de 0 et de 1." + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": {}, + "outputs": [], + "source": [ + "def one_and_zero_rate(vector_of_flip):\n", + " c = collections.Counter(vector_of_flip)\n", + " return c[0]/len(vector_of_flip)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculer sur un vecteur de taille 10. Remarques ?" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 1, 0, 1, 1, 1, 0, 0, 1, 0])" + ] + }, + "execution_count": 152, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "flip_coin(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 0 0 1 1 0 0 0 0 0]\n" + ] + }, + { + "data": { + "text/plain": [ + "0.7" + ] + }, + "execution_count": 153, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = flip_coin(10)\n", + "print(a)\n", + "one_and_zero_rate(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculer le taux de 0 pour un vecteur de taille 1000. " + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "metadata": {}, + "outputs": [], + "source": [ + "v=one_and_zero_rate(flip_coin(1000))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculer la moyenne de ce vecteur" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.522" + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculer la variance de la somme" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "def variance(n):\n", + " return np.std(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Afficher ces écarts sur un histogram. Ohoh, cela vous-fait-il penser à quelque chose ?" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.4989098114890104" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variance(flip_coin(1000))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Des statistiques sur du texte" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui retourne un dictionnaire comptant l'occurance de chaque mot dans une chaine de caractère. Conseil utiliser l'object Counter de la librairie collection." + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [], + "source": [ + "f=open(\"legorafi.txt\")\n", + "def count_words(text):\n", + " c= collections.Counter(text.split())\n", + " return c\n", + "c = count_words(f.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({':': 1,\n", + " ';': 1,\n", + " 'Aujourd’hui,': 1,\n", + " 'Beaux-Arts': 1,\n", + " 'C’est': 1,\n", + " 'C’était': 1,\n", + " 'Elizabeth,': 1,\n", + " 'En': 1,\n", + " 'Le': 2,\n", + " 'Lycée,': 1,\n", + " 'Michel': 1,\n", + " 'On': 1,\n", + " 'Pour': 2,\n", + " 'Pourtant,': 1,\n", + " 'Quand': 1,\n", + " 'RER': 1,\n", + " 'S': 2,\n", + " 'Steve': 4,\n", + " 'Steve,': 1,\n", + " 'Steve.': 1,\n", + " 'Un': 1,\n", + " 'Xanax.': 1,\n", + " 'a': 2,\n", + " 'affinité': 1,\n", + " 'affronter': 1,\n", + " 'air': 1,\n", + " 'alors': 1,\n", + " 'artistiques.': 1,\n", + " 'aucune': 1,\n", + " 'aujourd’hui': 1,\n", + " 'autre': 1,\n", + " 'avaient': 1,\n", + " 'avalant': 1,\n", + " 'avec': 2,\n", + " 'aîné': 1,\n", + " 'beau': 1,\n", + " 'carrière': 1,\n", + " 'ce': 2,\n", + " 'certain': 1,\n", + " 'cet': 1,\n", + " 'cette': 2,\n", + " 'choix': 2,\n", + " 'classe': 1,\n", + " 'clochard': 1,\n", + " 'comme': 1,\n", + " 'commerce': 1,\n", + " 'complètement': 1,\n", + " 'confie': 2,\n", + " 'coule': 1,\n", + " 'c’est': 1,\n", + " 'c’était': 1,\n", + " 'dangereuses': 1,\n", + " 'dans': 3,\n", + " 'de': 15,\n", + " 'des': 1,\n", + " 'dessinateur,': 1,\n", + " 'deux': 2,\n", + " 'deuxième': 1,\n", + " 'devienne': 1,\n", + " 'devrait': 1,\n", + " 'disant': 1,\n", + " 'disent': 1,\n", + " 'dont': 1,\n", + " 'du': 2,\n", + " 'décide': 1,\n", + " 'découragé': 1,\n", + " 'd’ailleurs': 2,\n", + " 'd’avance': 1,\n", + " 'd’embrasser': 1,\n", + " 'd’intégrer': 1,\n", + " 'd’être': 1,\n", + " 'effet,': 1,\n", + " 'en': 4,\n", + " 'encore': 1,\n", + " 'enfants': 1,\n", + " 'enfin': 1,\n", + " 'ennuyeuse': 1,\n", + " 'et': 6,\n", + " 'eux,': 1,\n", + " 'existence': 1,\n", + " 'faire': 3,\n", + " 'faire.': 1,\n", + " 'fait': 2,\n", + " 'famille,': 1,\n", + " 'finirait': 1,\n", + " 'finit': 1,\n", + " 'gagnée': 1,\n", + " 'grisâtre': 1,\n", + " 'il': 4,\n", + " 'ils': 1,\n", + " 'important': 1,\n", + " 'intégrer': 1,\n", + " 'jour': 2,\n", + " 'la': 5,\n", + " 'lambda,': 1,\n", + " 'larme': 1,\n", + " 'le': 7,\n", + " 'lequel': 1,\n", + " 'les': 3,\n", + " 'loin': 1,\n", + " 'long': 1,\n", + " 'lorsqu’il': 1,\n", + " 'lui': 1,\n", + " 'lui.': 1,\n", + " 'l’a': 2,\n", + " 'l’intéressé': 1,\n", + " 'ma': 1,\n", + " 'mais': 1,\n", + " 'manifeste': 1,\n", + " 'marier': 1,\n", + " 'mine': 1,\n", + " 'moment': 1,\n", + " 'monde': 1,\n", + " 'monotonie': 1,\n", + " 'motivation': 1,\n", + " 'moule': 1,\n", + " 'mère': 1,\n", + " 'métier': 1,\n", + " 'ne': 2,\n", + " 'nous': 2,\n", + " 'nul': 1,\n", + " 'n’a': 1,\n", + " 'n’est': 1,\n", + " 'obligé': 1,\n", + " 'on': 3,\n", + " 'ont': 1,\n", + " 'où': 2,\n", + " 'par': 2,\n", + " 'parent': 1,\n", + " 'parents': 2,\n", + " 'parents.': 1,\n", + " 'partie': 1,\n", + " 'partir': 1,\n", + " 'pas': 2,\n", + " 'payer.': 1,\n", + " 'personne': 1,\n", + " 'peu': 1,\n", + " 'peu,': 1,\n", + " 'pieds': 1,\n", + " 'place,': 1,\n", + " 'plus': 2,\n", + " 'porte': 1,\n", + " 'pour': 5,\n", + " 'première': 1,\n", + " 'puis': 1,\n", + " 'que': 4,\n", + " 'qui': 1,\n", + " 'qu’apparaît': 1,\n", + " 'qu’au': 1,\n", + " 'qu’il': 7,\n", + " 'qu’ils': 1,\n", + " 'rangée': 1,\n", + " 'regrette': 1,\n", + " 'rentrant': 1,\n", + " 'rentre': 1,\n", + " 'réalise.': 1,\n", + " 'résigné': 1,\n", + " 'résiste,': 1,\n", + " 'rêve': 1,\n", + " 'rêvé': 2,\n", + " 'sa': 3,\n", + " 'sape': 1,\n", + " 'se': 4,\n", + " 'seconde,': 1,\n", + " 'sens.': 1,\n", + " 'sentira': 1,\n", + " 'ses': 2,\n", + " 'son': 2,\n", + " 'sur': 1,\n", + " 'sûr': 1,\n", + " 't-elle.': 1,\n", + " 'talent': 1,\n", + " 'terminale': 1,\n", + " 'toujours': 2,\n", + " 'tout': 2,\n", + " 'toute': 1,\n", + " 'travail': 1,\n", + " 'travail.': 1,\n", + " 'travaille': 1,\n", + " 'traîne': 1,\n", + " 'un': 3,\n", + " 'une': 6,\n", + " 'univers': 1,\n", + " 'velléités': 1,\n", + " 'vide': 1,\n", + " 'vie': 2,\n", + " 'vie!': 1,\n", + " 'vient': 1,\n", + " 'visage': 2,\n", + " 'vive': 2,\n", + " 'vu': 1,\n", + " '«': 4,\n", + " '»': 3,\n", + " '»,': 1,\n", + " 'Ã': 4,\n", + " 'école': 1,\n", + " 'épanouis': 1,\n", + " 'était': 2})" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f=open(\"legorafi.txt\")\n", + "t=f.read()\n", + "l=t.split()\n", + "c=collections.Counter(l)\n", + "c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ordonner la fréquence par ordre décroissant et l'afficher." + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#for label, value in c.most_common():\n", + "# print(label, value)\n", + " \n", + "labels, values = zip(*c.most_common())\n", + "indexes = np.arange(len(labels))\n", + "width = 1\n", + "\n", + "plt.bar(indexes[:10], values[:10], width)\n", + "plt.xticks(indexes[:10] + width * 0.5 - 0.5, labels[:10])\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": {}, + "outputs": [], + "source": [ + "def lop(op, l):\n", + " return op(l)" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0" + ] + }, + "execution_count": 146, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lop(np.mean, [1,2,3])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/plot_faces_olivetti__with_tsne_solution.py b/plot_faces_olivetti__with_tsne_solution.py new file mode 100644 index 0000000..4fb56f4 --- /dev/null +++ b/plot_faces_olivetti__with_tsne_solution.py @@ -0,0 +1,107 @@ +# ============================================================================= +# T-SNE sur un dataset classique d'images : Olivetti Faces +# Premiere etape: +# - recuperer le programme plot_faces_decomposition puis ne conserver que le debut +# http://scikit-learn.org/stable/auto_examples/decomposition/plot_faces_decomposition.html +# ============================================================================= +import numpy as np +import math +import logging +from time import time + +from numpy.random import RandomState +import matplotlib.pyplot as plt + +from sklearn.datasets import fetch_olivetti_faces +from sklearn.cluster import MiniBatchKMeans +from sklearn import decomposition + +from matplotlib.ticker import NullFormatter +from sklearn import manifold, datasets +from time import time + + +# Display progress logs on stdout +logging.basicConfig(level=logging.INFO, + format='%(asctime)s %(levelname)s %(message)s') + +# modifier le nombre de rangees et de colonnes pour voir tout le dataset +n_row, n_col = 16, 25 +n_components = n_row * n_col +image_shape = (64, 64) +rng = RandomState(0) + +# ############################################################################# +# Load faces data +dataset = fetch_olivetti_faces(shuffle=True, random_state=rng) +faces = dataset.data + +n_samples, n_features = faces.shape + +# global centering +#faces_centered = faces - faces.mean(axis=0) +# Il est inutile de centrer les faces +faces_centered = faces + +# local centering +#faces_centered -= faces_centered.mean(axis=1).reshape(n_samples, -1) + +print("Dataset consists of %d faces" % n_samples) + + +# bien conserver plot_gallery +def plot_gallery(title, images, n_col=n_col, n_row=n_row): + plt.figure(figsize=(2. * n_col, 2.26 * n_row)) + plt.suptitle(title, size=16) + for i, comp in enumerate(images): + plt.subplot(n_row, n_col, i + 1) + vmax = max(comp.max(), -comp.min()) + plt.imshow(comp.reshape(image_shape), cmap=plt.cm.gray, + vmin=-vmax, vmax=vmax) + plt.xticks(()) + plt.yticks(()) + plt.subplots_adjust(0.01, 0.05, 0.99, 0.93, 0.04, 0.) + + +# Premiere figure: afficher les 400 faces +plot_gallery("The 400 Olivetti faces", faces_centered[:n_components]) +plt.show() + +# utiliser TSNE pour reduire la dimension a 2D +tsne = manifold.TSNE(n_components=2, perplexity=30, init='random', + random_state=0) + +# mettre les resultats de TSNE dans Y +Y = tsne.fit_transform(faces_centered) + +# visualiser la deuxieme figure (avec les points) +plt.figure() +plt.scatter(Y[:, 0], Y[:, 1]) +plt.show() + +#%% +# Troisieme figure : Pour faciliter le tracé, on recopie les petites images des faces dans une grande + +# ----------------------------------------------------------------- +# # il n'y a rien à faire ici (PS: could be much more clever!) +size_picture = 3000 +shift = 200 +dilatation = math.ceil(size_picture / (Y.max() - Y.min())) + +Y = Y - Y.min() +Y = Y * dilatation +Y[:,1] = size_picture - Y[:,1] +a = Y.astype(int) + +multiple_faces = np.ones((size_picture+shift, size_picture+shift)) + +plt.figure() +for i, comp in enumerate(faces_centered): + img = comp.reshape(image_shape) + multiple_faces[a[i,1]:a[i,1]+image_shape[0],a[i,0]:a[i,0]+image_shape[1]] = img +# ----------------------------------------------------------------- + +# Troisieme figure: afficher l'image stockee dans multiple_faces avec l'option origin='upper' +plt.imshow(multiple_faces, origin='upper', cmap=plt.cm.gray) +plt.show() + diff --git a/regression_lin.ipynb b/regression_lin.ipynb new file mode 100644 index 0000000..660c429 --- /dev/null +++ b/regression_lin.ipynb @@ -0,0 +1,239 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Regression linéaire et logistique" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder une fonction `linear_regression(theta, x)` qui retoure $y = \\sum_{i=0}^n \\theta_i x_i$. On prendra $x_0 = 1$" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn import linear_model\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "def linear_regression(theta, x): #~proto de la fonction\n", + " sum_linear_regression = 0\n", + " for (theta_i, x_j) in zip(theta, x):\n", + " sum_linear_regression = sum_linear_regression + (theta_i * x_j)\n", + " return sum_linear_regression\n", + "# linear_regression([2, 2, 2], [1, 2, 3])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder la fonction `linear_regression_cost(model, X, Y)` qui prend argument un modèle, un ensemble d'exemple et de labels et qui calcule son erreur. " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.25" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def linear_regression_cost(theta, X, Y):\n", + " partial_linear_regression_cost = 0\n", + " for (theta_i, X_j, Y_k) in zip(theta, X, Y):\n", + " partial_linear_regression_cost = (1/(2*len(theta)))*(linear_regression(theta, X_j) - Y_k) ** 2\n", + " return partial_linear_regression_cost\n", + "# linear_regression_cost(np.array([1, 2]), np.array([[1, 2], [1, 3]]), np.array([3, 8]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On note $J(\\theta)$ la fonction de coût de du modèle (qui mesure sa performance sur l'ensemble de train). Calculer $\\frac{\\partial J}{\\partial \\theta_i} $. Coder la fonction `get_cost_derivative(model, X, Y)` qui retourne les dérivée partielles de la fonction de coût" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def get_cost_derivative(theta, X, Y): # Pour la fonction linear_regression_cost(model, X, Y), remplacez 'model', par 'theta'\n", + " # linear_regression_cost(theta, X, Y) = 1/2 poop\n", + " theta0_get_cost_derivative = 0\n", + " theta1_get_cost_derivative = 0\n", + " for (theta_i, X_j, Y_k) in zip(theta, X, Y):\n", + " theta0_get_cost_derivative = (theta0 + theta1 * X - Y) / len(theta0)\n", + " theta1_get_cost_derivative = (theta0 + theta1 * X - Y) * X / len(theta1)\n", + " get_cost_derivative = theta0_get_cost_derivative + theta1_get_cost_derivative\n", + " return get_cost_derivative" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder une fonction `gradient_descent(initial_model, X, Y, max_iteration)` qui effectue la descente de gradient pour la régression linéaire. \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " \"\"\" #equivalent descente gradient par le taux de variation d'une fonction à un point donné#\n", + " def variation_rate(f, x, h):\n", + " return (f(x+h)-f(x))/h\n", + " \n", + " def lower_point(f, x, h):\n", + " xprime = x\n", + " cpt=0\n", + " while(cpt<100):\n", + " cpt+=1\n", + " if (variation_rate(f, xprime, h) < 0):\n", + " xprime = xprime+h\n", + " print(\"x:\", xprime)\n", + " elif (variation_rate(f, xprime, h) > 0):\n", + " xprime = xprime-h\n", + " print(\"x:\", xprime)\n", + " else:\n", + " break\"\"\"\n", + " \n", + " def gradient_descent(initial_theta, X, Y): #pour la descente de gradient remplacez \"initial_model\" par \"initial_theta\"\n", + " \n", + " for i in range(max_iteration):\n", + " # use previous functions!\n", + " theta = initial_theta\n", + " cpt=0\n", + " while(cpt<10):\n", + " cpt+=1\n", + " if (get_cost_derivative(theta, X, Y) < 0):\n", + " temp0 := theta0 - alpha * theta0_get_cost_derivative\n", + " temp1 := theta1 - alpha * theta1_get_cost_derivative\n", + " theta0 := temp0\n", + " theta1 := temp1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Génerer un jeux de donnée simple et tester votre approche. Vous pourrez afficher le sur un graphique les données initiale et les prédictions de votre modèle après l'inférence" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Régression logistique" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder la fonction `sigmoid`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder la fonction `logistic_regression_cost(model, X, Y)`. On (ra)pelle que la fonction de coût pour la régression logistique est différente de la fonction de coût de la régression linéaire." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Coder la fonction `gradient_descent(initial_model, X, Y)` qui effectue la descente de gradient pour la régression logistique" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/revision.ipynb b/revision.ipynb new file mode 100644 index 0000000..1333a0e --- /dev/null +++ b/revision.ipynb @@ -0,0 +1,218 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Révisions et approfondissement numpy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Abandonnez la boucle for quand c'est inutile, s'il vous plaît :'(" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Définir deux vecteurs numpy $a = (a_1, ..., a_{100})$ et $b = (a_1, ..., a_n)$ de taille 100 avec les valeurs que vous voulez. Sans boucle `for` calculer $\\sum_{i=0}^{100} a_i * b_i$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Executer le code suivant. Que fait-il ? " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2, 4],\n", + " [ 6, 8],\n", + " [10, 12],\n", + " [14, 16]])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])\n", + "b = np.array([2, 2])\n", + "\n", + "b * a\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ce phénomène s'appelle le broadcasting. C'est très utile dans beaucoup de cas. Cela vous sert à un endroit dans le notebook sur la regression linéaire. Où ça ?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En utilisant ce phénomène soustraire 2 à chaque élément de a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Transposition" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Transposer une matrice c'est inverser ses lignes et ses colonnes. Toutes les matrices numpy ont l'attribut T permettant de transposer une matrice. Afficher la transposer de la matrice ci-dessous. Vous pouvez aussi chercher \"transpose matrix numpy\" si cet énoncer n'est pas clair." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Opération Sur les colonnes et sur les lignes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "calculer la moyenne de a avec numpy. Que cela fait-il ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maintenant supposez que vous souhaitiez faire une opération non pas sur tous les éléments mais colonne par colonne ou ligne par ligne. Vous pouvez utiliser sur les fonction de calcul numpy (np.mean, np.sum, np.max, etc.) l'argument `axis=0` (ligne par ligne) et `axis=1` (colonne par colonne). Utiliser deux fonctions pour faire une opération sur les lignes de a et les colonnes de a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Différence multiplication matrice et terme à terme." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Définir deux matrices a et b. Calculer a * b et np.matmul(a, b). Quelle est la différence ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Définir une matrice (3, 3) et un vecteur de taille 3 et créer une matrice en concaténant le vecteur et la matrice selon la colonne et ensuite selon les lignes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}