{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# M8 - TP 3 : Statistiques bivariées\n",
    "\n",
    "## Objectif\n",
    "\n",
    "Le but de ce TP est de mettre en oeuvre des statistiques opérant sur deux variables de qualités différentes (nature/continue, et quantitative/qualitative).\n",
    "\n",
    "Pour cela, nous utiliserons les tableaux de contingence et la distance du $\\chi_2$ ainsi que les coefficients de corrélation.\n",
    "\n",
    "### Compétences associées :\n",
    "\n",
    "| Numéro        | Compétence           | \n",
    "|:------------- |:--------------------:|\n",
    "|AS201|\tConnaître la définition d’un tableau de contingence|\n",
    "|AS202|\tÊtre capable de calculer les éléments d'un tableau de contingence|\n",
    "|AS203| Savoir mesurer la dépendance linéaire de deux variable en calculant le coefficient de corrélation|\n",
    "|AS204|\tConnaître les propriétés du coefficient de corrélation|\n",
    "|AS205|\tSavoir analyser un coefficient de corrélation|\n",
    "|AS206|\tConnaître la définition de la distance du $\\chi_2$|\n",
    "|PY103|\tÊtre capable d’afficher un ensemble de nuage de points entre deux variables|\n",
    "|PY201|\tÊtre capable de calculer un tableau de contingence de deux suites de données|\n",
    "|PY202|\tÊtre capable de calculer le coefficient de corrélation entre deux variables quantitatives|\n",
    "|PY203|\tÊtre capable de calculer la distance du $\\chi_2$ de deux variables qualitatives|\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sudoku"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nous avons le tableau de contingence incomplet suivant :\n",
    "\n",
    "\\begin{array}{|c||c|c|c||c|}\n",
    "\\hline\n",
    " X \\setminus Y & y_1 = 1 & y_2 = 2 & y_3 = 8 & \\text{Marginal de }X\\ \\mathbb{P}(X) \\\\\n",
    " \\hline \\hline\n",
    " x_1 &0.1 &   &    &    \\\\\n",
    " \\hline\n",
    " x_2 &    &   &    &    \\\\\n",
    " \\hline\\hline\n",
    " \\text{Marginal de } Y\\ \\mathbb{P}(Y) &0.3&    &    &1   \\\\\n",
    " \\hline\n",
    "\\end{array}\n",
    "\n",
    "De plus, nous disposons de l’information suivante :\n",
    "\\begin{equation}\n",
    "     \\mathbb{P}(Y = y_1 |X = x_2) = \\frac{1}{2}\n",
    "\\end{equation}\n",
    "\n",
    "\\begin{equation}\n",
    "     \\mathbb{P}(Y = y_3 |X = x_1) = \\frac{1}{2}\n",
    "\\end{equation}\n",
    "\n",
    "\\begin{equation}\n",
    "     \\mathbb{E}(Y|X = x_2) = \\frac{3}{2}\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1\\. Compléter le tableau de contingence\n",
    "**Astuce**: Pour le calculer le plus rapidement, suivez l'ordre suivant :\n",
    "\n",
    "\\begin{array}{|c||c|c|c||c|}\n",
    "\\hline\n",
    " X \\setminus Y & y_1 = 1 & y_2 = 2 & y_3 = 8 & \\text{Marginal de }X\\ \\mathbb{P}(X) \\\\\n",
    " \\hline \\hline\n",
    " x_1 &0.1 & \\textbf{5}  & \\textbf{4}   &  \\textbf{3}  \\\\\n",
    " \\hline\n",
    " x_2 &  \\textbf{1}  &  \\textbf{6} &  \\textbf{7}  &  \\textbf{2}  \\\\\n",
    " \\hline\\hline\n",
    " \\text{Marginal de } Y\\ \\mathbb{P}(Y) &0.3&  \\textbf{8}  &  \\textbf{9}  &1   \\\\\n",
    " \\hline\n",
    "\\end{array}\n",
    "\n",
    "\n",
    "De plus, les variables **6 et 7** s'obtiennent en résolvant un système de deux équations à deux inconnues"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "source": [
    "\\begin{array}{|c||c|c|c||c|}\n",
    "\\hline\n",
    " X \\setminus Y & y_1 = 1 & y_2 = 2 & y_3 = 8 & \\text{Marginal de }X\\ \\mathbb{P}(X) \\\\\n",
    " \\hline \\hline\n",
    " x_1 &0.1 &  0.2 & 0.3   &  0.6  \\\\\n",
    " \\hline\n",
    " x_2 &  0.2  & 0.2   &  0.0   & 0.4   \\\\\n",
    " \\hline\\hline\n",
    " \\text{Marginal de } Y\\ \\mathbb{P}(Y) &0.3&  0.4  &  0.3   &1   \\\\\n",
    " \\hline\n",
    "\\end{array}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Les variables $X$ et $Y$ sont elles indépendantes \n",
    "1. Calculez le tableau théorique sous l'hypothèse d'indépendance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.18 0.24 0.18]\n",
      " [0.12 0.16 0.12]]\n"
     ]
    }
   ],
   "source": [
    "cont_table = [[0.1, .2 , .3],\n",
    "              [.2, 0.2, 0.0]]\n",
    "\n",
    "pro_col = np.sum(cont_table, axis=0)\n",
    "pro_lignes = np.sum(cont_table, axis=1)\n",
    "\n",
    "p_indep = np.outer(pro_lignes, pro_col)\n",
    "print(p_indep)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. Calculez la distance du $\\chi_2$ à partir du tableau de contingence et du tableau théorique"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.30555555555555547\n"
     ]
    }
   ],
   "source": [
    "print(np.sum(((cont_table - p_indep )**2 )/ p_indep))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. Vérifiez que vous obteniez bien la même chose avec scipy. \n",
    "\n",
    "NB : jetez un oeil à la doc de `chi2_contingency` du module scipy.stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.30555555555555547\n",
      "[[0.18 0.24 0.18]\n",
      " [0.12 0.16 0.12]]\n"
     ]
    }
   ],
   "source": [
    "# calcul du chi 2\n",
    "from scipy.stats import chi2_contingency\n",
    "chi2, p, dof, ex  = chi2_contingency(cont_table)\n",
    "print(chi2)\n",
    "print(ex)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Réchauffement climatique\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Le code ci dessous permet de charger les émissions de CO2 ainsi que la température globale de la Terre. Les données sont issues de https://ourworldindata.org/co2-and-other-greenhouse-gas-emissions#co2-and-greenhouse-gas-emissions-country-profiles.\n",
    "Essayez de les récupérer et de les traiter par vous mêmes. Sinon reprenez le code ci dessous.\n",
    "\n",
    "Quelle est la nature des variables ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import csv\n",
    "import numpy as np\n",
    "\n",
    "#https://ourworldindata.org/co2-and-other-greenhonuse-gas-emissions#co2-and-greenhouse-gas-emissions-country-profiles\n",
    "\n",
    "tmp = []\n",
    "min_year = 1900\n",
    "\n",
    "with open('co-emissions-per-capita.csv', newline='') as csvfile:\n",
    "    reader = csv.DictReader(csvfile)\n",
    "    for row in reader:\n",
    "        if row['Entity'] == 'World':\n",
    "            if int(int(row['Year']\n",
    "                      ) >= min_year):\n",
    "                tmp.append([float(row['Per capita CO2 emissions'])])\n",
    "data_co2 = np.array(tmp)\n",
    "\n",
    "tmp = []\n",
    "with open('temperature-anomaly.csv', newline='') as csvfile:\n",
    "    reader = csv.DictReader(csvfile)\n",
    "    for row in reader:\n",
    "        if row['Entity'] == 'Global':\n",
    "            if int(int(row['Year']) >= min_year):\n",
    "                tmp.append([float(row['Median temperature anomaly from 1961-1990 average'])])\n",
    "data_temp = np.array(tmp)\n",
    "\n",
    "np.savez('data_global_warming.npz', co2=data_co2, temp=data_temp)\n",
    "# 2 continues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "source": [
    "On a deux variables continues"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. Faites un résumé graphique du couple de variable sous forme d'un nuage de points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f8e9e1abbe0>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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SFs9NaykXYE7EMgAANIa7QrcjYJ4AIC0F65hJZV93YFABgDgKHa1CrCycjCsQyADAHAMWgUgVuTIAAAcgVYBiEdKApnly5dr4MCBysnJUVlZmWprayNuu3LlSl122WXq27ev+vbtq4qKih63BwC4nx2tAtoDhmrqD+m5ur2qqT9EGwKXsnxq6amnntLcuXO1YsUKlZWVaenSpZo4caJ27typwsLCbttv2LBBU6dO1bhx45STk6PFixfrqquu0ttvv60BAwZYfbgAABvE0iogWh6LmRwbprC8w2cYhqUhaFlZmS6++GItW7ZMkhQIBFRSUqLbb79dVVVVUfdvb29X3759tWzZMt10001Rt29paVFeXp6am5uVm5ub8PEDAKy38IW39dimD6Nu99B1I3XNyMgPtWYClOAUVtebXzDUYcm1PeK9f1s6tXT8+HFt3rxZFRUVp94wI0MVFRWqqakx9TOOHj2qEydOqKAgfFXFtrY2tbS0dPoCALhH9bYGU0GM1L1VQMfpoYdeeVe3Rcmxodu191g6tXTw4EG1t7erqKio0+tFRUXasWOHqZ9x9913q3///p2CoY4WLVqkBQsWJHysAIDUCwYW0fh0skBdx1YB4UZfwjE+33/BC++oT06vpE1hwRkcvWrp/vvv15o1a/TMM88oJyd8w6558+apubk59LVnz54UHyUAIF7RcmOCDHVuFRBphVNP+zc0H1NN/SFT29Pt2j0sHZHp16+fMjMztX///k6v79+/X36/v8d9lyxZovvvv1+vvPKKLrrooojbZWdnKzs7OynHCwBILbMBw7cvHRjKW+lpeig6c3vR7do9LB2RycrK0ujRo7Vu3brQa4FAQOvWrVN5eXnE/f7jP/5DCxcuVHV1tcaMGWPlIQIAbGQ2YLiy9NTDr9lRnHDKz+1Ht2uPsXxqae7cuVq5cqUef/xxbd++XTNnzlRra6umT58uSbrppps0b9680PaLFy/WPffco1WrVmngwIFqbGxUY2OjPvnkE6sPFQCQYmMHFcQcWMQz7RP8OZcMPpNu1x5jeSAzZcoULVmyRPfee69Gjhypuro6VVdXhxKAd+/erYaGU9UaH374YR0/flz/8A//oOLi4tDXkiVLrD5UAECKZWb4Yg4sYp326fpz6HbtLZbXkUk16sgAgPvEUqCuPWBo/OL1amw+ZirjpaefQ7dr54j3/k0gAwBwhFgCi+CqJalz+m5w6zsqztfAfr0JUFyEQOZzBDIA4B09BTe0GfCWeO/flvdaAtyAIWbAeaIFKpXDi3VlqZ//u2mOERmkPZ7qAOeJpx8SDyTuxogMEIdIH5bB3iysYABSL1o/pGC7gStL/UwzwdktCgAr0TwOcKZoBe869kOSIrcr6NgsEt5FIIO0FeuHJYDUMFvw7sCRYzyQgEAG6SuWD0sAqWO24F1hnxweSEAgg/QVy4clgNSJpW0BDyQgkEHaiqfHCwDrxdK2IN4HkvaAoZr6Q3qubq9q6g8x9eRirFpC2gp+WM58Yot8Cl8dlOZxgD2C/ZC6rkTyd1mJFHwgidSuwPf5Ph0fSFjh5C3UkUHa40MNcC4ztWGitSvoWEYhnvo0SA1aFHyOQAbxoJAW4HyJtisINpuMlBwcHL3ZePcV/P+3AQXxgARkZvhUPvhMuw8DQATJaFcQywonPg/cg0AGcDBGigDzFbijPZCwwsmbCGQAhyJ3B4ivXUEkiZZc4MHCmQhkAAeiBxRwUjKng+JZ4RTEg4VzUUcGcBhKrgOnJHM6KJb6NB3Ry8nZCGQAh6HkOnBKsitwB+vT+PM6b+/Pywk70smDhfMxtQQ4DAmJwCmJTAdFYmaFUxArnZyPQAZwGHpAAadYVYHbbMkFHiycj6klwGHoAQV0Fut0UDLxYOF8jMgADkMPKKC7WKaDksmKqS0kFyMygAPZ+QQKOFVwOuiakQNUPvjMlATzmRk+3TOpNGIQI/FgYTdGZACHsusJFMAp1dsatPDFd8L+XddO3F1RQC81CGQAB6MHFGCfSIUpg+6ZNCxiEEMBvdRhaglA2mkPGKqpP6Tn6vaqpv4QNUDQTU/1Y6ST00oLX9we9neHAnqpxYgMAMs4cWidJ2VvsPp3K976McnsDQVzCGQAWMKJAQM9rLwhFb9ba99pNLVd1/oxFNBLPaaWACSdFUPriU4HUWreG1IxbdMeMPRs3T5T23atH0MBvdRjRAZAUlkxtJ6MJ3CelM1z4pRg8LhSMW1Tu6tJTa3Ho25XcEavbvVjKKCXegQygMM49SZiVrIDhmRNB/GkbI4TpwSDUhWMmv0d+MbIAd3+b1JAL/UIZJBUbr8J283JNxGzkhkwJPMJnCfl6JyeQ5SqYNTs70BFqb/ba1TmTj1yZJA01dsaNH7xek1d+brmrKnT1JWva/zi9Y5daui0JbheWbKZzIAhlifwaOhh1TM35BClKhhN9HeFytypxYgMksLpT3JdOW3kw0tLNhMZWu86otfYkrwncJ6Ue+aGHKJUTdsk43eFytypw4gMEuaGJznp1AjMv7/wtm5z2MhHMkce7Ba8CUjq9kTb000g3Ijewt+9beo9Dx5pMzWyxpNyZE7MIeo6aioprt+teCTjd8WO3lDpiBEZJMwNT3LhRmC6snPkw4k3kUQEbwJd/80j9aaJNKLX1Hoi6ntl+E5WWA2KNrLGk3J4Tssh6mnUNJbfrUTwu+IOBDJImNNvwtH6pXRkV9DltJtIMpi9CUQrBR/UdYg/qOsAjJnpTHpYdeek1TZmpqo33n1FSgIMflecj6klJMzJN2GzN8muUh10eTUR1czQerQRvaC+Z2R1+j7SPctJ05luEu+UYLKZnaqWxLQNJKUokFm+fLkGDhyonJwclZWVqba2tsftf/Ob32jo0KHKycnRhRdeqJdeeikVh4k4OfkmbPYm2VWqgy6n3ETsYDZovGfSMP1qxiV66LqRumfSsG4jMR25KafISZyQQ+SlfDGkhuVTS0899ZTmzp2rFStWqKysTEuXLtXEiRO1c+dOFRYWdtv+T3/6k6ZOnapFixbp7//+77V69Wpde+212rJli4YPH2714SIOZjP8Jamm/lBK55rjGVmxK+iKNa/EqWKtJWQ2aPTnnR4a4n+ubq+pfdySU+QkdueFOH2qGs5jeSDzk5/8RDNmzND06dMlSStWrNCLL76oVatWqaqqqtv2Dz30kCorK/X9739fkrRw4UKtXbtWy5Yt04oVK6w+XMQp2k1YksYvXp/y5c7xjKx8fUSxbSMfdt9EEhXPsvZ4cjOcPJ3pBXbmhXBtEStLp5aOHz+uzZs3q6Ki4tQbZmSooqJCNTU1YfepqanptL0kTZw4MeL2bW1tamlp6fQFe1QOL9bGu68IDf//asYl2nj3FZJkW6G3aNNe4Tz/fw225la4dclmvAX94plWc/J0JhJj5v8s1xYdWRrIHDx4UO3t7SoqKur0elFRkRobw7dIb2xsjGn7RYsWKS8vL/RVUlKSnINHXLrehCXZWmOmp5tkJMy/xy7RWkKx5makc06R13W8tpHYOWoK53H9qqV58+apubk59LVnzx67DwkdOCFxL9JNsifMv8cmGdc50oheT/Vg7E5MhTUqhxfr1i8Pivj3j7y2yzUtO2A9S3Nk+vXrp8zMTO3fv7/T6/v375ff373ZliT5/f6Yts/OzlZ2dnZyDhhJl+zEvXibUgZzT1Zt3KUfvrQ96vbMv8cmWdc51twMt+cU4aSu/69Hn9NXz/9fz4GKW1p2wHqWBjJZWVkaPXq01q1bp2uvvVaSFAgEtG7dOs2ePTvsPuXl5Vq3bp3uuOOO0Gtr165VeXm5lYcKiyQzcS/R/khr32nUYxs/6HGbVBb98hI7EzQpWOZu4f5fF5zRq8eqzh1H+MYOKiCQTXOWr1qaO3eubr75Zo0ZM0Zjx47V0qVL1draGlrFdNNNN2nAgAFatGiRJGnOnDm6/PLL9eMf/1iTJk3SmjVr9Oc//1mPPPKI1YcKCySrWmiiTSnNVPcltyJ+TqoKC/dIpDWFdPLhZO6v6xzT/BX2sDxHZsqUKVqyZInuvfdejRw5UnV1daqurg4l9O7evVsNDaeGEMeNG6fVq1frkUce0YgRI/T000/r2WefpYaMSyUjKTPRRFKz1X3D5VZ0bVpHpdjwSL5FrOKtut3Rqk0fOqr5K+zhMwzDU5/MLS0tysvLU3Nzs3Jzc+0+HHwukWmhmvpDmrry9ajv8asZl4SdYjC7/5O3lOnSL/ZLyjGnK/7NYJbZ/5eRZPi699kKCo4Abrz7CoJnF4n3/k3TSKREIkmZiSaSmt1/3Y79oUAm0amsdGVH8m28CeCwV7wrA4PVw822qCB/yvsIZJAysSRldrw5HTzSZmqfSImkZhNMn6vbp3+bdHJ6pKepLJ+sXzHh5ptzKpNvGQFyL7P/LwvOyFJT6/HQ9/68HF093K/HNn0YdV/KKKQHAhk4Tribk5lh5EiJpGMHFURdBSFJh1qPh+qcmK2JYsUNm5uzOYyauZvZBPFXv/9Vbf7o405Bfe2uJlOBDGUU0oPrC+LBWyKVue8piJF6TiTNzPDpGyMHmHr/A0eO2dq0Lt4y/+km0QRw2M9sgnjWaRndWnbQogIdEcjAMcysYugaq5it4lpRGr6gYleFfXJsq4nCzdk8J1SMRuLirc4cyyq5VK08ZIWjfZhagmNEuzlJJ0dm7pk0TP36ZMeUOxJrnRM7aqLEcnNO9wRGO0fNksnNuVDJEm+CeDAI6joN6+8wDZuqaVqmg+1FIAPHMHvT6dcnW9eYnCoKCj7BzXxiS2jVQ1C46alYtk0Wr9ycU8HOSsLJws3vlHgTxHsKglKVQ0Wulv2YWoJjWH1zqhxerOXXf0l9z+jV6fVww9h2NCT0ws05VdyeIxEpF6qh+Zhue2KLFr7wNtMTJgWDoI45NKmapmU62BkYkYFjjB1UoPzevXT4aOTVRfm9e8V9c6re1qCFL27vtHqp4Iws3TMp/BNwqmuiUObfvFhH2JzETC7YY5s+1GObPkzbEZpEpWqalulgZ2BEBq4S720p0hPwx63HNWt15NVA4Z72rEKZ/9jYMWqWDGZywYJYrRafVE3TMh3sDIzIoBu7EhBrdzX1OBojSR8fPRHz00204d9UFLgzy0wCI06xo5JwomK5qTnt99MtUjVNy3SwMxDIoBM7ExCterpx2/CvG2/OdkplJeFkiPWm5rTfTzdI1TQt08HOwNQSQuwuxmbV040bh39TOaWF1IqWqByJk34/nS5V07RMBzsDgQwkOSP73qqVKAz/wkl6uvn1hN/P2KQqh8qtuVpewtQSJDlj+sWqlSgM/8JpIuVChcPvZ/xSNU3LdLC9CGQgKTXTL2aSiK1IdnXzUl14V8eb39p3GrVq04f8flogVTlUbsvV8hICGUiyfvolliRiK55uWA0EJwre/MoHn6mxgwoS+v2k3QHSlc8wDE+VHGxpaVFeXp6am5uVm5tr9+G4RnvA0PjF66NOv2y8+4qYPxwjlfAO/pRUziPzYQ8ni/f3k3YH8IJ4798EMggJBhxS+OHteAKOYIAUKQ8gkQAJgLMeFIBExHv/ZtUSQqzIvo8liRhAbJyw2hCwGzky6CTZ+SlurOHiNEyHIRInrDYE7EYgA0tRwyUx5D6gJzwoAAQy6CLZN05quMQvUu5DsNIyuQ/gQQEgR8bV2gOGauoP6bm6vaqpP5TwPLgVLQqilfA2JF13cYl+95d9STkHryD3wb2S/f+yJ1ZVwwbchBEZl0r2yEmsHaJjyduIVMMlr3cvSdKDr7yXlHPwEnIf3CnVU4EUewRYfu1KViy3rKk/pKkrX4+63a9mXKLmT4/H9WHdMfj54G+temjde922YcnoSc/V7dWcNXVRt3voupG6ZuQA6w8IUdm5DJpcKnhBvPdvRmRcJtaRE7PMJgO+8nkp9XjyNoJVTF/6S4N+ur57EJPoOXgJuQ/uYtX/S7Po9cPqvnRGIOMyVk05mL0hPlO3N6EP6+ptDfre6i09vgfTJiRJu40TpgLTudcPI1LpjWRfl7FquaWZpMEzz8hSU+uJiD8jWnG74FOrWem8ZDRakrRE7oOTsAzaPlYsUoC7EMi4jFVTDmZunNeM7G/qZ0X6sI721NpVuk+bWFFpGdZgKtAerO6DxNSS61g55RCtQ3Te6VlatenDqD8n0od1LE+jLBk9idwHd2Aq0B5OmNKD/QhkXMbq5ZY93TjbA0ZCH9axPI0ybXJKOuc+uAXLoO3BlB4kppZcyeoph+CN85qRA1Q++MzQh2+ieRvR8nAkKcMn/ez6L3lu2iSVRdJgD6YCU48pPUjUkXE1O5YbtgcMLVv/nn6x6UMd/vRU4q/ZFQLBxDxJYUd1fnb9KF19kbc+8FlRkV5YBpw67QFD4xevjzpKvPHuK7gGLhDv/ZtABqaFuyHnn95L0y8dpNlXnGf6gyKdbux2FkkD0kGkhyP+j7kPgcznCGTiE+0pMtk35HR4ag0+LUZKRuRpEYhNpM+NdHo48jIq+yJu0T4ErKhamg4JrG5ZUZEOQSXcL9rnFKv70heBTJqLNNLSseVA3ulZrrghO40bVlTwJAs3MPM5VTm8mM+fNMWqpTRmtphUY4vzb8hO5PQVFVREhRtQ9A7RWBrINDU1adq0acrNzVV+fr5uueUWffLJJz1uf/vtt2vIkCE6/fTTdfbZZ+uf/umf1NzcbOVhmuLF5bNmpz6aPmkz9fNY4tiZmbYPdhX+4+YAt4hlihbpydKppWnTpqmhoUFr167ViRMnNH36dN16661avXp12O337dunffv2acmSJSotLdVHH32k2267Tfv27dPTTz9t5aH2yKvD72ZHUArOyLK1aqlbczicXCTNLfk7gBumaGEvywKZ7du3q7q6Wm+++abGjBkjSfrpT3+qq6++WkuWLFH//t379gwfPlz/8z//E/p+8ODB+uEPf6gbbrhBn332mU47LfUpPWbnZt3I7AiKP+90227I4YJIf26Opo49WwP79XZ8YBOt7YNdvzvcHOAWTp+ihf0siwxqamqUn58fCmIkqaKiQhkZGXrjjTf0jW98w9TPCS7DihTEtLW1qa3t1NRHS0tLYgfegRWrdZwklv4wmRk+y27IPS2pDBtEthzTg6+8G/re6aNjTlxRwc0BbpHsPlZuHeFFZJYFMo2NjSosLOz8ZqedpoKCAjU2Npr6GQcPHtTChQt16623Rtxm0aJFWrBgQULHGonXh99jnfqw4oYcadrunknDtPDF7WE/uLpyw+iY05ab0+QQbpHMKVqvpgmku5iTfauqquTz+Xr82rFjR8IH1tLSokmTJqm0tFT33XdfxO3mzZun5ubm0NeePXsSfu+gdBh+j7U/TKQ+TPHoadXM91a/1WMQ2RHJqbFLtG9WOvJiwr9bJKOPFav0vCvmEZm77rpL3/rWt3rc5txzz5Xf79eBAwc6vf7ZZ5+pqalJfr+/x/2PHDmiyspK9enTR88884x69eoVcdvs7GxlZ2ebPv5YpMvwux1TH2ZWzcTC7aNjdnBq/o4T8SRvv0Q+p7yeJpDuYg5kzjrrLJ111llRtysvL9fhw4e1efNmjR49WpK0fv16BQIBlZWVRdyvpaVFEydOVHZ2tp5//nnl5NgXJKTT8Huqpz6iTdvFy82jY3ZwYv6O03g54d9t4v2c8nqaQLqzrI7MsGHDVFlZqRkzZqi2tlabNm3S7Nmzdd1114VWLO3du1dDhw5VbW2tpJNBzFVXXaXW1lY99thjamlpUWNjoxobG9Xe3m7VoUbE8Lt1rAo43D46ZodkThd6DfV2vCEd0gTSmaUF8Z588kkNHTpUEyZM0NVXX63x48frkUceCf39iRMntHPnTh09elSStGXLFr3xxhvaunWrzjvvPBUXF4e+kpn7EotkzM2iu1gCDjO3VTuLy8G7KMbmDemSJpCuLC3MUlBQELH4nSQNHDhQHZtvf+UrX5ETm3Ez/B5drEsazU7b3TOpVAtffKfHmwmjY7AKT/LeYPbzZvQ5fVVTf4jPeZehaaRJTls+6yTxJEJ2XFLZVcfApHJ4sSYOPxVEfniwVb+q3a3GllO1g0hOhVV4kvcGM0u4vz6iWJc/8AcSul3IZzhxCCQBLS0tysvLCxXSg7UiJUIGPxx6mn6r3tagqt9u1eGjJzq93rd3Ly36fxdG3I+CVkiV9oCh8YvXR32S33j3FfwOukCkh66vjyjWI6/tiutzDMkT7/2bERnELZEljZECIEn6uEtg0xWjY0gVJ/fLQuzCpQmMPqevLn/gDyzNdjFLk329jOJY8SdC9hQASac+ONLx3xTOQ8K/t3Rdpbf5o49J6HY5RmTiQHGsk+JNhKSmA9yGhH/vIqHb/QhkYkRxrFPiTYTkg8M70ilfiSlNbyKh2/0IZGJAmevO4q18zAeHNzAyCS9IpwruXkWOTAzcVBwrlhyeePN94q18HPzg6CnUyz+9lwKGQZ6MQ9GAD15BBXf3Y0QmBm6ZEonlSTnRp+p4Gg/2tBIk6PCnJzTt0Td4wncgRibhNTRQdTfqyMSgpv6Qpq58Pep2v5pxScrm0rvmKHzcelyzVpur65JIDZhox2EmVyJcENUVdRycx4n/D4BkSKecLyeijkwKOG0uNVwgkOELP8LR9UlZn/85WU/V8SRCBleCvF5/SLNWb9HhT7vXj+EJ33ncMjIJxIqEbnciRyYGTppLjZSj0FNKScccHqfk+2Rm+JSR4QsbxKT6WGAOydoAnIRAJkZOKI4VraBcNAeOHHPUU7WTjgXRRUvWphM5gFRiaikOdhfHijaaEk0sT8qpeKr+8OBRU9vxhO8MlO0H4CQEMnGycy413pGJrjk8seT7WJUEV72tQUtfeTem44b9WOUBwCkIZFwonpGJcE/KZp+qrSp8ZnaKzBBP+E5k98gkAEjkyLiSmYJyXe8l4XJ4zOT7WFn4zOwU2Z0VX+QJ36G6NuAjiAGQaozIuJCZHIVlU7+kvmdkR31S7ump2urCZ2anyAb2OyPmnw0ASA8EMi6VzByFSPk+VnepZhkvACBRBDIuZnWOgtXLop1WYBAA4D4EMi5n5eopq0dMWMYLAEgUyb6IKBWFz5xQYBAA4F6MyCCiVI2YXFnqV5/sXqr54KCkkyNMl5zLChgAQHR0v0ZUVtWRsfpnAwDcI977N4EMTLGism+wRk3XX8DgT2VqCQDSR7z3b6aWYEqyk4qtrlEDAEgPJPvCFrHUqIlXe8BQTf0hPVe3VzX1h9Qe8NTgIwBAjMjAJlbXqCH3BgDSAyMysIWVNWqs7A8FAHAWAhnYwqoaNdFyb6STuTdMMwGANxDIwBbBGjWSugUzidSoSUXuDQDAOQhkYBsrqvpanXsDAHAWkn1hq2Q3vqSjNgCkFwIZh7OiEJ3TJLNGDR21ASC9EMg4mFeXEFsZnNFRGwDSCy0KHMqr5ftTFZx5NQgEAK+i19LnvBDItAcMjV+8PuLqm+D0yMa7r3DVyEKqg7N0mJYDAK+g15KHxLKEOJn9j6xkR2+lZPeHAgA4D8uvHciLS4ip7wIAsIKlgUxTU5OmTZum3Nxc5efn65ZbbtEnn3xial/DMPS1r31NPp9Pzz77rJWHmbBkNyf04hJiLwZnAAD7WTq1NG3aNDU0NGjt2rU6ceKEpk+frltvvVWrV6+Ouu/SpUvl8zk/n8GKpFIvLiH2YnAGALCfZSMy27dvV3V1tR599FGVlZVp/Pjx+ulPf6o1a9Zo3759Pe5bV1enH//4x1q1apVVh5cUVjUntKp8v52s6q0EAEhvlgUyNTU1ys/P15gxY0KvVVRUKCMjQ2+88UbE/Y4eParrr79ey5cvl9/vj/o+bW1tamlp6fSVClY3J7SifL+dvBicAQDsZ9nUUmNjowoLCzu/2WmnqaCgQI2NjRH3u/POOzVu3Dhdc801pt5n0aJFWrBgQULHGo9UrCxKdvl+uwWDs65TcX7quwAA4hRzIFNVVaXFixf3uM327dvjOpjnn39e69ev11tvvWV6n3nz5mnu3Lmh71taWlRSUhLX+8ciVcmrXltCHE9wRj0YAEAkMQcyd911l771rW/1uM25554rv9+vAwcOdHr9s88+U1NTU8Qpo/Xr16u+vl75+fmdXv/mN7+pyy67TBs2bOi2T3Z2trKzs2M5haQgeTV+sQRnVOgFAPTEssq+27dvV2lpqf785z9r9OjRkqTf//73qqys1F//+lf179+/2z6NjY06ePBgp9cuvPBCPfTQQ5o8ebIGDRoU9X1TVdk3WH032soit1XfdRKvtmkAAHQX7/3bsmTfYcOGqbKyUjNmzFBtba02bdqk2bNn67rrrgsFMXv37tXQoUNVW1srSfL7/Ro+fHinL0k6++yzTQUxqUTyqrWsTqYGAHiDpQXxnnzySQ0dOlQTJkzQ1VdfrfHjx+uRRx4J/f2JEye0c+dOHT161MrDsIzXVhZZJZ6CgVQCBgCYYWlBvIKCgh6L3w0cOFDRZrac3tPSayuLki3eHBcqAQMAzKBpZBJ4bWVRskTKcQkWDOxp1IpkagCAGTSNhCUSzXGhEjAAwAwCGVgi0RwXkqkBAGYQyMASychxIZkaABANOTKwRLJyXEimBgD0hEAGYSXaFiCY4xKtYGCkHBfaEgAAzCCQQTfJaAsQzHGZ+cQW+aROwUy0HBfaEgAAzCJHBp0El0x3TdQNLpmu3tZg+mfFk+OSzPcHAHifZb2W7JKqXkuJcOq0SbB/VKTVRvH2jzJ7vla9PwDA+eK9fzO1lGJOnjaJZcl0LAUAzRYMtOr9AQDexdRSCjl92sTutgB2vz8AwH0IZFLEDd2czS6Z7ndGdsxNIJP5/rQlAAAEMbWUIm6YNjGzZDqvdy/d9Zv/U2NL8qfGEl2yDQBIP4zIpIgbpk2itQUwJB0+eqJTECMlb2qMtgQAgFgRyKSIW6ZNIi2ZLsrNVn7vXmH3SebUGG0JAACxYGopRdw0bRKuLUDAMDTt0Tci7pPMqTHaEgAAzCKQSZFEKt0mm5m6Ll2XTD9Xt9fUz07W1JjZJdsAgPRGIJNCwWmTrnVk/CmsIxNvHRu3TI0BANILgUyKBadNXq8/pJoPDko6OfJwybnWjz4E69h0ndoKJuv2lIPipqkxAED6IJCxwdp3GjuNiiz7w/uWV/eNVsfGp5PJulcMLdLmjz7uNu3kpKkxAACC6LWUYpFGRYK3f6tW5tTUH9LUla9H3a7gjCw1tR4Pfd81wHJyiwUAgHvRa8kFzI6KXFnqT/rIhtkk3I5BjNR92okVRQAAJyGQSSE7q/vGm4QbLsBiRREAwCkoiJdCdlb3DSbrxjNu0jHAAgDASQhkUsjOJcw9lf83K1yA1R4wLGkgCQCAGUwtpZDdS5gj1bEpOKOXmlpPRN2/a4BF4i8AwG6sWkqx4KolKfwS5lT0E+pa2Xf0OX11+QN/iBpgbbz7ilBSr12rrwAA3hTv/ZuppRRzQlPEYLLuNSMHqHzwmco6LSOmrtPRVl9JyWkgCQBANEwt2cCJS5hjaZ9g5+orAAA6IpCxiROXMJsNsOxcfQUAQEcEMujETIBFA0kAgFOQI4OYRatJ49PJ1Us0kAQAWI1ABjHrqSYNDSQBAKlEIIO4OGH1FQAA5Mggbk5cfQUASC8EMkiIE1dfAQDSB1NLAADAtQhkAACAaxHIAAAA17IskGlqatK0adOUm5ur/Px83XLLLfrkk0+i7ldTU6MrrrhCZ5xxhnJzc/XlL39Zn376qVWHCQAAXMyyQGbatGl6++23tXbtWv3ud7/Ta6+9pltvvbXHfWpqalRZWamrrrpKtbW1evPNNzV79mxlZDBwBAAAuvMZhpH0FsXbt29XaWmp3nzzTY0ZM0aSVF1drauvvlp//etf1b9//7D7XXLJJbryyiu1cOHCuN873jbgAADAPvHevy0Z6qipqVF+fn4oiJGkiooKZWRk6I033gi7z4EDB/TGG2+osLBQ48aNU1FRkS6//HJt3LjRikMEAAAeYEkg09jYqMLCwk6vnXbaaSooKFBjY2PYfT744ANJ0n333acZM2aourpao0aN0oQJE/Tee+9FfK+2tja1tLR0+gIAAOkhpkCmqqpKPp+vx68dO3bEdSCBQECS9N3vflfTp0/Xl770JT344IMaMmSIVq1aFXG/RYsWKS8vL/RVUlIS1/sDAAD3iamy71133aVvfetbPW5z7rnnyu/368CBA51e/+yzz9TU1CS/3x92v+Lik715SktLO70+bNgw7d69O+L7zZs3T3Pnzg1939zcrLPPPpuRGQAAXCR43441dTemQOass87SWWedFXW78vJyHT58WJs3b9bo0aMlSevXr1cgEFBZWVnYfQYOHKj+/ftr586dnV5/99139bWvfS3ie2VnZys7Ozv0/cGDByWJkRkAAFzoyJEjysvLM729Jb2Whg0bpsrKSs2YMUMrVqzQiRMnNHv2bF133XWhFUt79+7VhAkT9F//9V8aO3asfD6fvv/972v+/PkaMWKERo4cqccff1w7duzQ008/bfq9CwoKJEm7d++O6R/CzVpaWlRSUqI9e/akzUqtdDxnKT3Pm3PmnL2Kc+58zoZh6MiRIxFXNkdiWdPIJ598UrNnz9aECROUkZGhb37zm/rP//zP0N+fOHFCO3fu1NGjR0Ov3XHHHTp27JjuvPNONTU1acSIEVq7dq0GDx5s+n2DNWfy8vLS5hcjKDc3l3NOE+l43pxzeuCc00Okc45nAMKyQKagoECrV6+O+PcDBw4MOw9WVVWlqqoqqw4LAAB4CCVzAQCAa3kukMnOztb8+fM7JQB7HeecPtLxvDnn9MA5pwcrztmSFgUAAACp4LkRGQAAkD4IZAAAgGsRyAAAANcikAEAAK7lukDmtdde0+TJk9W/f3/5fD49++yzUffZsGGDRo0apezsbJ133nn65S9/aflxJlOs57xhw4awDT0jdR53okWLFuniiy9Wnz59VFhYqGuvvbZb+4pwfvOb32jo0KHKycnRhRdeqJdeeikFR5sc8ZzzL3/5y27XOScnJ0VHnLiHH35YF110Uag4Vnl5uf73f/+3x33cfI2l2M/Z7de4q/vvv18+n0933HFHj9u5/Tp3ZOacvXCd77vvvm7nMHTo0B73ScZ1dl0g09raqhEjRmj58uWmtt+1a5cmTZqkr371q6qrq9Mdd9yh73znO3r55ZctPtLkifWcg3bu3KmGhobQV2FhoUVHmHyvvvqqZs2apddff11r167ViRMndNVVV6m1tTXiPn/60580depU3XLLLXrrrbd07bXX6tprr9W2bdtSeOTxi+ecpZMVMjte548++ihFR5y4L3zhC7r//vu1efNm/fnPf9YVV1yha665Rm+//XbY7d1+jaXYz1ly9zXu6M0339TPf/5zXXTRRT1u54XrHGT2nCVvXOcLLrig0zls3Lgx4rZJu86Gi0kynnnmmR63+Zd/+Rfjggsu6PTalClTjIkTJ1p4ZNYxc85/+MMfDEnGxx9/nJJjSoUDBw4YkoxXX3014jb/+I//aEyaNKnTa2VlZcZ3v/tdqw/PEmbO+Re/+IWRl5eXuoNKgb59+xqPPvpo2L/z2jUO6umcvXKNjxw5Ynzxi1801q5da1x++eXGnDlzIm7rlescyzl74TrPnz/fGDFihOntk3WdXTciE6uamhpVVFR0em3ixImqqamx6YhSZ+TIkSouLtaVV16pTZs22X04CWlubpZ0qiloOF671mbOWZI++eQTnXPOOSopKYn6ZO9k7e3tWrNmjVpbW1VeXh52G69dYzPnLHnjGs+aNUuTJk3qdv3C8cp1juWcJW9c5/fee0/9+/fXueeeq2nTpmn37t0Rt03Wdbas15JTNDY2qqioqNNrRUVFamlp0aeffqrTTz/dpiOzTnFxsVasWKExY8aora1Njz76qL7yla/ojTfe0KhRo+w+vJgFAgHdcccduvTSSzV8+PCI20W61m7KDQoye85DhgzRqlWrdNFFF6m5uVlLlizRuHHj9Pbbb+sLX/hCCo84flu3blV5ebmOHTumv/u7v9Mzzzyj0tLSsNt65RrHcs5euMZr1qzRli1b9Oabb5ra3gvXOdZz9sJ1Lisr0y9/+UsNGTJEDQ0NWrBggS677DJt27ZNffr06bZ9sq6z5wOZdDRkyBANGTIk9P24ceNUX1+vBx98UP/93/9t45HFZ9asWdq2bVuPc61eY/acy8vLOz3Jjxs3TsOGDdPPf/5zLVy40OrDTIohQ4aorq5Ozc3Nevrpp3XzzTfr1VdfjXhj94JYztnt13jPnj2aM2eO1q5d67rk1XjFc85uv86S9LWvfS3054suukhlZWU655xz9Otf/1q33HKLZe/r+UDG7/dr//79nV7bv3+/cnNzPTkaE8nYsWNdGQjMnj1bv/vd7/Taa69FfSqJdK39fr+Vh5h0sZxzV7169dKXvvQlvf/++xYdXfJlZWXpvPPOkySNHj1ab775ph566CH9/Oc/77atV65xLOfclduu8ebNm3XgwIFOo8Ht7e167bXXtGzZMrW1tSkzM7PTPm6/zvGcc1duu87h5Ofn6/zzz494Dsm6zp7PkSkvL9e6des6vbZ27doe56O9qK6uTsXFxXYfhmmGYWj27Nl65plntH79eg0aNCjqPm6/1vGcc1ft7e3aunWrq651V4FAQG1tbWH/zu3XOJKezrkrt13jCRMmaOvWraqrqwt9jRkzRtOmTVNdXV3YG7rbr3M859yV265zOJ988onq6+sjnkPSrnNMqcEOcOTIEeOtt94y3nrrLUOS8ZOf/MR46623jI8++sgwDMOoqqoybrzxxtD2H3zwgdG7d2/j+9//vrF9+3Zj+fLlRmZmplFdXW3XKcQs1nN+8MEHjWeffdZ47733jK1btxpz5swxMjIyjFdeecWuU4jZzJkzjby8PGPDhg1GQ0ND6Ovo0aOhbW688Uajqqoq9P2mTZuM0047zViyZImxfft2Y/78+UavXr2MrVu32nEKMYvnnBcsWGC8/PLLRn19vbF582bjuuuuM3Jycoy3337bjlOIWVVVlfHqq68au3btMv7yl78YVVVVhs/nM37/+98bhuG9a2wYsZ+z269xOF1X8HjxOncV7Zy9cJ3vuusuY8OGDcauXbuMTZs2GRUVFUa/fv2MAwcOGIZh3XV2XSATXFrc9evmm282DMMwbr75ZuPyyy/vts/IkSONrKws49xzzzV+8YtfpPy4ExHrOS9evNgYPHiwkZOTYxQUFBhf+cpXjPXr19tz8HEKd76SOl27yy+/PPRvEPTrX//aOP/8842srCzjggsuMF588cXUHngC4jnnO+64wzj77LONrKwso6ioyLj66quNLVu2pP7g4/Ttb3/bOOecc4ysrCzjrLPOMiZMmBC6oRuG966xYcR+zm6/xuF0val78Tp3Fe2cvXCdp0yZYhQXFxtZWVnGgAEDjClTphjvv/9+6O+tus4+wzCM2MZwAAAAnMHzOTIAAMC7CGQAAIBrEcgAAADXIpABAACuRSADAABci0AGAAC4FoEMAABwLQIZAADgWgQyAADAtQhkAACAaxHIAAAA1yKQAQAArvX/ARThj9jXdWA8AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(data_co2,data_temp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f8e9e039780>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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SFs9NaykXYE7EMgAANIa7QrcjYJ4AIC0F65hJZV93YFABgDgKHa1CrCycjCsQyADAHAMWgUgVuTIAAAcgVYBiEdKApnly5dr4MCBysnJUVlZmWprayNuu3LlSl122WXq27ev+vbtq4qKih63BwC4nx2tAtoDhmrqD+m5ur2qqT9EGwKXsnxq6amnntLcuXO1YsUKlZWVaenSpZo4caJ27typwsLCbttv2LBBU6dO1bhx45STk6PFixfrqquu0ttvv60BAwZYfbgAABvE0iogWh6LmRwbprC8w2cYhqUhaFlZmS6++GItW7ZMkhQIBFRSUqLbb79dVVVVUfdvb29X3759tWzZMt10001Rt29paVFeXp6am5uVm5ub8PEDAKy38IW39dimD6Nu99B1I3XNyMgPtWYClOAUVtebXzDUYcm1PeK9f1s6tXT8+HFt3rxZFRUVp94wI0MVFRWqqakx9TOOHj2qEydOqKAgfFXFtrY2tbS0dPoCALhH9bYGU0GM1L1VQMfpoYdeeVe3Rcmxodu191g6tXTw4EG1t7erqKio0+tFRUXasWOHqZ9x9913q3///p2CoY4WLVqkBQsWJHysAIDUCwYW0fh0skBdx1YB4UZfwjE+33/BC++oT06vpE1hwRkcvWrp/vvv15o1a/TMM88oJyd8w6558+apubk59LVnz54UHyUAIF7RcmOCDHVuFRBphVNP+zc0H1NN/SFT29Pt2j0sHZHp16+fMjMztX///k6v79+/X36/v8d9lyxZovvvv1+vvPKKLrrooojbZWdnKzs7OynHCwBILbMBw7cvHRjKW+lpeig6c3vR7do9LB2RycrK0ujRo7Vu3brQa4FAQOvWrVN5eXnE/f7jP/5DCxcuVHV1tcaMGWPlIQIAbGQ2YLiy9NTDr9lRnHDKz+1Ht2uPsXxqae7cuVq5cqUef/xxbd++XTNnzlRra6umT58uSbrppps0b9680PaLFy/WPffco1WrVmngwIFqbGxUY2OjPvnkE6sPFQCQYmMHFcQcWMQz7RP8OZcMPpNu1x5jeSAzZcoULVmyRPfee69Gjhypuro6VVdXhxKAd+/erYaGU9UaH374YR0/flz/8A//oOLi4tDXkiVLrD5UAECKZWb4Yg4sYp326fpz6HbtLZbXkUk16sgAgPvEUqCuPWBo/OL1amw+ZirjpaefQ7dr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3LjRikMEAAAeYEkg09jYqMLCwk6vnXbaaSooKFBjY2PYfT744ANJ0n333acZM2aourpao0aN0oQJE/Tee+9FfK+2tja1tLR0+gIAAOkhpkCmqqpKPp+vx68dO3bEdSCBQECS9N3vflfTp0/Xl770JT344IMaMmSIVq1aFXG/RYsWKS8vL/RVUlIS1/sDAAD3iamy71133aVvfetbPW5z7rnnyu/368CBA51e/+yzz9TU1CS/3x92v+Lik715SktLO70+bNgw7d69O+L7zZs3T3Pnzg1939zcrLPPPpuRGQAAXCR43441dTemQOass87SWWedFXW78vJyHT58WJs3b9bo0aMlSevXr1cgEFBZWVnYfQYOHKj+/ftr586dnV5/99139bWvfS3ie2VnZys7Ozv0/cGDByWJkRkAAFzoyJEjysvLM729Jb2Whg0bpsrKSs2YMUMrVqzQiRMnNHv2bF133XWhFUt79+7VhAkT9F//9V8aO3asfD6fvv/972v+/PkaMWKERo4cqccff1w7duzQ008/bfq9CwoKJEm7d++O6R/CzVpaWlRSUqI9e/akzUqtdDxnKT3Pm3PmnL2Kc+58zoZh6MiRIxFXNkdiWdPIJ598UrNnz9aECROUkZGhb37zm/rP//zP0N+fOHFCO3fu1NGjR0Ov3XHHHTp27JjuvPNONTU1acSIEVq7dq0GDx5s+n2DNWfy8vLS5hcjKDc3l3NOE+l43pxzeuCc00Okc45nAMKyQKagoECrV6+O+PcDBw4MOw9WVVWlqqoqqw4LAAB4CCVzAQCAa3kukMnOztb8+fM7JQB7HeecPtLxvDnn9MA5pwcrztmSFgUAAACp4LkRGQAAkD4IZAAAgGsRyAAAANcikAEAAK7lukDmtdde0+TJk9W/f3/5fD49++yzUffZsGGDRo0apezsbJ133nn65S9/aflxJlOs57xhw4awDT0jdR53okWLFuniiy9Wnz59VFhYqGuvvbZb+4pwfvOb32jo0KHKycnRhRdeqJdeeikFR5sc8ZzzL3/5y27XOScnJ0VHnLiHH35YF110Uag4Vnl5uf73f/+3x33cfI2l2M/Z7de4q/vvv18+n0933HFHj9u5/Tp3ZOacvXCd77vvvm7nMHTo0B73ScZ1dl0g09raqhEjRmj58uWmtt+1a5cmTZqkr371q6qrq9Mdd9yh73znO3r55ZctPtLkifWcg3bu3KmGhobQV2FhoUVHmHyvvvqqZs2apddff11r167ViRMndNVVV6m1tTXiPn/60580depU3XLLLXrrrbd07bXX6tprr9W2bdtSeOTxi+ecpZMVMjte548++ihFR5y4L3zhC7r//vu1efNm/fnPf9YVV1yha665Rm+//XbY7d1+jaXYz1ly9zXu6M0339TPf/5zXXTRRT1u54XrHGT2nCVvXOcLLrig0zls3Lgx4rZJu86Gi0kynnnmmR63+Zd/+Rfjggsu6PTalClTjIkTJ1p4ZNYxc85/+MMfDEnGxx9/nJJjSoUDBw4YkoxXX3014jb/+I//aEyaNKnTa2VlZcZ3v/tdqw/PEmbO+Re/+IWRl5eXuoNKgb59+xqPPvpo2L/z2jUO6umcvXKNjxw5Ynzxi1801q5da1x++eXGnDlzIm7rlescyzl74TrPnz/fGDFihOntk3WdXTciE6uamhpVVFR0em3ixImqqamx6YhSZ+TIkSouLtaVV16pTZs22X04CWlubpZ0qiloOF671mbOWZI++eQTnXPOOSopKYn6ZO9k7e3tWrNmjVpbW1VeXh52G69dYzPnLHnjGs+aNUuTJk3qdv3C8cp1juWcJW9c5/fee0/9+/fXueeeq2nTpmn37t0Rt03Wdbas15JTNDY2qqioqNNrRUVFamlp0aeffqrTTz/dpiOzTnFxsVasWKExY8aora1Njz76qL7yla/ojTfe0KhRo+w+vJgFAgHdcccduvTSSzV8+PCI20W61m7KDQoye85DhgzRqlWrdNFFF6m5uVlLlizRuHHj9Pbbb+sLX/hCCo84flu3blV5ebmOHTumv/u7v9Mzzzyj0tLSsNt65RrHcs5euMZr1qzRli1b9Oabb5ra3gvXOdZz9sJ1Lisr0y9/+UsNGTJEDQ0NWrBggS677DJt27ZNffr06bZ9sq6z5wOZdDRkyBANGTIk9P24ceNUX1+vBx98UP/93/9t45HFZ9asWdq2bVuPc61eY/acy8vLOz3Jjxs3TsOGDdPPf/5zLVy40OrDTIohQ4aorq5Ozc3Nevrpp3XzzTfr1VdfjXhj94JYztnt13jPnj2aM2eO1q5d67rk1XjFc85uv86S9LWvfS3054suukhlZWU655xz9Otf/1q33HKLZe/r+UDG7/dr//79nV7bv3+/cnNzPTkaE8nYsWNdGQjMnj1bv/vd7/Taa69FfSqJdK39fr+Vh5h0sZxzV7169dKXvvQlvf/++xYdXfJlZWXpvPPOkySNHj1ab775ph566CH9/Oc/77atV65xLOfclduu8ebNm3XgwIFOo8Ht7e167bXXtGzZMrW1tSkzM7PTPm6/zvGcc1duu87h5Ofn6/zzz494Dsm6zp7PkSkvL9e6des6vbZ27doe56O9qK6uTsXFxXYfhmmGYWj27Nl65plntH79eg0aNCjqPm6/1vGcc1ft7e3aunWrq651V4FAQG1tbWH/zu3XOJKezrkrt13jCRMmaOvWraqrqwt9jRkzRtOmTVNdXV3YG7rbr3M859yV265zOJ988onq6+sjnkPSrnNMqcEOcOTIEeOtt94y3nrrLUOS8ZOf/MR46623jI8++sgwDMOoqqoybrzxxtD2H3zwgdG7d2/j+9//vrF9+3Zj+fLlRmZmplFdXW3XKcQs1nN+8MEHjWeffdZ47733jK1btxpz5swxMjIyjFdeecWuU4jZzJkzjby8PGPDhg1GQ0ND6Ovo0aOhbW688Uajqqoq9P2mTZuM0047zViyZImxfft2Y/78+UavXr2MrVu32nEKMYvnnBcsWGC8/PLLRn19vbF582bjuuuuM3Jycoy3337bjlOIWVVVlfHqq68au3btMv7yl78YVVVVhs/nM37/+98bhuG9a2wYsZ+z269xOF1X8HjxOncV7Zy9cJ3vuusuY8OGDcauXbuMTZs2GRUVFUa/fv2MAwcOGIZh3XV2XSATXFrc9evmm282DMMwbr75ZuPyyy/vts/IkSONrKws49xzzzV+8YtfpPy4ExHrOS9evNgYPHiwkZOTYxQUFBhf+cpXjPXr19tz8HEKd76SOl27yy+/PPRvEPTrX//aOP/8842srCzjggsuMF588cXUHngC4jnnO+64wzj77LONrKwso6ioyLj66quNLVu2pP7g4/Ttb3/bOOecc4ysrCzjrLPOMiZMmBC6oRuG966xYcR+zm6/xuF0val78Tp3Fe2cvXCdp0yZYhQXFxtZWVnGgAEDjClTphjvv/9+6O+tus4+wzCM2MZwAAAAnMHzOTIAAMC7CGQAAIBrEcgAAADXIpABAACuRSADAABci0AGAAC4FoEMAABwLQIZAADgWgQyAADAtQhkAACAaxHIAAAA1yKQAQAArvX/ARThj9jXdWA8AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(data_co2,data_temp,'o')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. Utilisez un bon indicateur quantitatif pour vous donner une idée si les deux variables sont dépendantes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7891945050542626\n"
     ]
    }
   ],
   "source": [
    "# à la main\n",
    "n = len(data_co2)\n",
    "mean_x = np.mean(data_co2)\n",
    "mean_y = np.mean(data_temp)\n",
    "\n",
    "std_x = np.std(data_co2)\n",
    "std_y = np.std(data_temp)\n",
    "corr = 1/n * np.sum((data_co2 - mean_x)*(data_temp - mean_y))\n",
    "corr = corr / (std_x*std_y)\n",
    "print(corr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.        , 0.78919451],\n",
       "       [0.78919451, 1.        ]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#avec numpy \n",
    "np.corrcoef(data_co2.T, data_temp.T)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "source": [
    "0.8 -> corrélé"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Matrices de contingence sur données réelles"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1\\. Récupérer le fichier DataExo1.mat sur Moodle.\n",
    "\n",
    "Les détails sur ces données sont disponibles https://archive.ics.uci.edu/ml/datasets/Student+Performance. Ces données décrivent les résultats des élèves dans l’enseignement secondaire de deux écoles portugaises."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import scipy.io as sio \n",
    "mat = sio.loadmat(\"DataExo1.mat\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2\\. On commence par s’intéresser aux deux premières variables qui codent pour l’école $x$ et le genre $g$ de la personne interviewée."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "x = mat[\"DataExo1\"][:, 0]\n",
    "g = mat[\"DataExo1\"][:, 1]\n",
    "n=len(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3\\. Construisez le tableau de contingence $O$ entre les variables $x$ et $g$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[166., 183.],\n",
       "       [ 21.,  25.]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "O = np.zeros((2,2))\n",
    "O[0,0] = np.sum(np.logical_and((x == 0), (g == 0)))\n",
    "O[0,1] = np.sum(np.logical_and((x == 0), (g == 1)))\n",
    "O[1,0] = np.sum(np.logical_and((x == 1), (g == 0)))\n",
    "O[1,1] = np.sum(np.logical_and((x == 1), (g == 1)))\n",
    "O"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[166, 183],\n",
       "       [ 21,  25]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics.cluster import contingency_matrix\n",
    "\n",
    "O =  contingency_matrix(x, g)\n",
    "O"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4\\. Construisez le tableau théorique associé en supposant l’indépendance des deux variables."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[165.22278481, 183.77721519],\n",
       "       [ 21.77721519,  24.22278481]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "M1 = np.sum(O, axis=0)\n",
    "Mc = np.sum(O, axis=1)\n",
    "T = np.outer(M1, Mc).T / n\n",
    "T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "5\\. Calculez la distance du $\\chi_2$ entre les variables $x$ et $g$. Ces deux variables sont elles liées ou sont elles indépendantes ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.059619131674428574"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D2 = np.sum(np.sum((O - T)**2/T))\n",
    "D2\n",
    "# Donné juste la valeur du chi2, cela est difficile à interpréter: on relira cette grandeur aux tests statistiques en 3eme partie du cours\n",
    "# Ceci étant dit, cette valeur est petite, donc on peut supposer une indépendance."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "6\\.Vérifiez que la fonction chi2_contingency de scipy.stats fait bien la même chose"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Chi2ContingencyResult(statistic=0.059619131674428574, pvalue=0.8070989340873198, dof=1, expected_freq=array([[165.22278481, 183.77721519],\n",
       "       [ 21.77721519,  24.22278481]]))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy.stats import chi2_contingency\n",
    "\n",
    "chi2_contingency(O, correction=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "7\\. On s’intéresse maintenant à la septième variable $Me$ qui code le niveau d’éducation des mère de la manière suivante :\n",
    "\n",
    "    * 0 - none,\n",
    "    * 1 - primary education (4th grade),\n",
    "    * 2 - 5th to 9th grade,\n",
    "    * 3 - secondary education\n",
    "    * 4 - higher education\n",
    "\n",
    "Récupérez cette variable et calculez les effectifs de chacune des modalités. Qu’en concluez vous ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4]\n",
      "[  3  59 103  99 131]\n",
      "[0 1]\n"
     ]
    }
   ],
   "source": [
    "Me = mat[\"DataExo1\"][:, 6]\n",
    "mod, eff = np.unique(np.sort(Me), return_counts=True)\n",
    "n = len(Me)\n",
    "print(mod)\n",
    "print(eff)\n",
    "print(np.unique(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "source": [
    "Peu d'effectifs pour la premiere modalité => on fusionne 0 et 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "8\\. Construisez le tableau de contingence N entre les variables $x$ et $Me$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 45.  96.  88. 120.]\n",
      " [ 17.   7.  11.  11.]]\n"
     ]
    }
   ],
   "source": [
    "N = np.zeros((2,4))\n",
    "for xi,mi in zip(x,Me):\n",
    "    if (mi==0 or mi==1): #on fusionne les deux premières colonnes car les effectifs ne sont pas assez importants\n",
    "        N[xi,0] +=  1\n",
    "    else:\n",
    "        N[xi,mi-1] +=  1\n",
    "print(N)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "9\\. Construisez le tableau théorique associé en supposant l’indépendance des deux variables."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 54.77974684,  91.00506329,  87.47088608, 115.7443038 ],\n",
       "       [  7.22025316,  11.99493671,  11.52911392,  15.2556962 ]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "M1 = np.sum(N, axis=0)\n",
    "Mc = np.sum(N, axis=1)\n",
    "T = np.outer(Mc, M1) / len(Me)\n",
    "T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "10\\. Calculez la distance du $\\chi_2$ entre les variables $x$ et $Me$. Ces deux variables $x$ et $Me$ sont elles liées ou sont elles indépendantes ? Que peut on en déduire sur le choix de l’école ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "correction"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "18.71777905171603"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D2 = np.sum(np.sum((N - T)**2/T))\n",
    "D2\n",
    "#Ici la distance est bien plus grande, donc probablement que les deux variables sont liées."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
