{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "title : \"Loi de Benford et suspicion de fraudes aux présidentielles des USA en 2016\"\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Source : problème 9 de *\"Python & Pandas et les 36 problèmes de Data Science\"*, Frédéric Bro et Chantal Remy\n",
    "\n",
    "La **loi de Benford** est une loi empirique qui concerne la distribution des premiers chiffres significatifs dans de nombreux ensembles de données réels. Elle prédit que **le premier chiffre significatif suit une distribution logarithmique,** c'est-à-dire que le chiffre 1 apparaît en premier 30% du temps, le chiffre 2 apparaît 17,6% du temps, le chiffre 3 apparaît 12,5% du temps, etc. Une loi analogue est valable pour le second chiffre significatif. \n",
    "De nos jours, pour vérifier l'authenticité des données, on peut vérifier si elles suivent la loi de Benford. Si ce n'est pas le cas, cela peut être un signe de fraude.\n",
    "\n",
    "Lors des **élections présidentielles américaines de 2016,** des chercheurs ont appliqué la loi de Benford aux résultats des élections dans les différents États. Ils ont constaté que les résultats des élections dans certains États ne suivaient pas la loi de Benford et ont suggéré que cela pourrait être dû à des fraudes électorales. Ceci incita les candidats Hilary Clinton et Jill Stein à demander un comptage manuel dans certains comtés. \n",
    "\n",
    "Dans cet exercice, vous allez vérifier si les résultats des élections dans les différents États des États-Unis en 2016 suivent la loi de Benford. Pour cela, vous allez utiliser les données des élections présidentielles américaines de 2016, disponibles dans le fichier `benford_usa.csv`.\n",
    "\n",
    "\n",
    "Quelques liens pour en savoir plus sur la loi de Benford :\n",
    "\n",
    "- [benfordonline](https://www.benfordonline.net/)  \n",
    "- [testingbenfordslaw](https://testingbenfordslaw.com/)  \n",
    "- [wikipedia](https://fr.wikipedia.org/wiki/Loi_de_Benford#:~:text=La%20loi%20de%20Benford%20stipule,premier%20qu'il%20est%20petit)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "\n",
    "## Exercice\n",
    "\n",
    "1. **Loi de Benford**  \n",
    "   Tracer la fréquence relative du **deuxième** chiffre significatif $c\\in\\{0,1,\\dots,9\\}$ dans la représentation en base $10$ prédite par la loi de Benford suivante :\n",
    "   $$\n",
    "   p(c) = \\sum_{i=1}^9 \\log_{10}\\left(1+\\frac{1}{10i+c}\\right).\n",
    "   $$\n",
    "\n",
    "2. **Ouverture et sélection des données**  \n",
    "   - Le fichier `benford_usa.csv` contient le nombre de voix remportées par trois candidats dans chaque **district** des États-Unis. Importer le fichier et analyser brièvement les données.  \n",
    "   Bonus : retrouver le **résultat** des élections en combinant avec le **nombre** de grands électeurs par **État** (cf. [Wikipedia](https://fr.wikipedia.org/wiki/%C3%89lection_pr%C3%A9sidentielle_am%C3%A9ricaine_de_2016)).\n",
    "   - Ne garder ensuite que les lignes correspondant aux **comtés** du **Michigan**, de la **Pennsylvanie** et du **Wisconsin**. Parmi ces lignes, ne garder que celles où chaque candidat **a obtenu** plus de 10 voix. Ce sont ces données que nous allons analyser.\n",
    "\n",
    "3. **Analyse des données**  \n",
    "   En théorie, la répartition des fréquences du **deuxième** chiffre des nombres de voix suit la **loi de Benford**. Pour chaque candidat, vérifier si c’est le cas.  \n",
    "   - Calculer la fréquence du **deuxième** chiffre des nombres de voix pour chaque candidat et comparer avec la loi de Benford (créer un **DataFrame** où chaque ligne correspond à un chiffre et chaque colonne à un candidat ; ajouter une colonne pour les **fréquences théoriques**).  \n",
    "   - Afficher/visualiser la distribution de chaque colonne.  \n",
    "\n",
    "4. **Bonus : simulation pour la détection d’éventuelles anomalies**  \n",
    "   Les graphes peuvent susciter des doutes quant à la **régularité** des résultats. Pour aller plus loin, introduire un indicateur **synthétique** pour résumer l’analyse.  \n",
    "   - Calculer la **distance euclidienne** entre la colonne **théorique** et la colonne **observée** pour chaque candidat.  \n",
    "   - Simuler $10^4$ votations qui suivent la **distribution théorique** de Benford et vérifier si ce résultat est effectivement **rare** ou non.\n",
    "\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Importation des bibliothèques nécessaires."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:09.474730Z",
     "iopub.status.busy": "2026-10-30T13:11:09.473651Z",
     "iopub.status.idle": "2026-10-30T13:11:10.535591Z",
     "shell.execute_reply": "2026-10-30T13:11:10.535138Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('bmh')\n",
    "import seaborn as sns\n",
    "import plotly.express as px\n",
    "\n",
    "from IPython.display import display, Markdown\n",
    "\n",
    "# Pour la génération automatique de graphiques interactifs dans le polycopié\n",
    "import plotly.io as pio\n",
    "import os\n",
    "if os.getenv(\"QUARTO_OUTPUT_FORMAT\") is not None:\n",
    "    # Export Quarto HTML\n",
    "    pio.renderers.default = \"iframe_connected\"\n",
    "else:\n",
    "    # Notebook interactif\n",
    "    pio.renderers.default = \"notebook_connected\"\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Loi de Benford"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "La fonction théorique $p$ qui donne la fréquence du second chiffre significatif dans la représentation en base $10$ prédite par la loi de Benford est donnée par:   \n",
    "$$\n",
    "p(c) = \\sum_{i=1}^9 \\log_{10}\\left(1+\\frac{1}{10i+c}\\right).\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:10.537753Z",
     "iopub.status.busy": "2026-10-30T13:11:10.537489Z",
     "iopub.status.idle": "2026-10-30T13:11:10.874763Z",
     "shell.execute_reply": "2026-10-30T13:11:10.874254Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Chiffre</th>\n",
       "      <th>Probabilité</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.119679</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.113890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>0.108821</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>0.104330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>0.100308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>0.096677</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>0.093375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "      <td>0.090352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>0.087570</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>0.084997</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Chiffre  Probabilité\n",
       "0        0     0.119679\n",
       "1        1     0.113890\n",
       "2        2     0.108821\n",
       "3        3     0.104330\n",
       "4        4     0.100308\n",
       "5        5     0.096677\n",
       "6        6     0.093375\n",
       "7        7     0.090352\n",
       "8        8     0.087570\n",
       "9        9     0.084997"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "0.9999999999999997"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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HaZOnYq4uDjY29vju+++q7d97fYfHx9v9NYnxt4bTKn2tbdnz56btk1KSgIAjB492uCxuq4YrP2Y+HYcLazFIHQTU6ZMgRACL730kt4Tk5eXpztHZ8qUKU1e/uTJkwEACxcuRHl5uW56QUEB3njjDYP2KpUK//rXv6BWqzFr1ixcv37doI1arcb58+ebXFOtwsJCbNiwAYD++UqTJ09Gq1atsHTpUr0jRbW0Wm2LfjdN7969ERISgl9//dXgvinffvstfvnlFwQHBxs978qY2je2kpISg79ajh8/jq+++qpJde7fv9/gPjgrV65EcnIyHnzwQfj5+QEA2rZti0GDBiE1NdXg45Pff/8dmzdvhrOzM0aOHKmbXnuez4YNG/TCU3p6OpYtW9akehtr3rx5qKysxJQpU4weUSksLGzQUYja/qekpGDlypV6j+3cudPoDnPEiBEICgrCqlWrEBMTY3S58fHxem/YtWP29490z549W+dfpr///jsWLVqE++67D2vWrEGnTp3w4YcfIiMjo8H3Cps3bx6A6teNsaNbGRkZ2L17d4OW1RTN9Ty5ublh7NixyMrKwssvv2xwn5rS0tJm+/j2dpg7dy4AYNq0abqbCt7o2rVruvNh6pOSkmI0TBUWFqKiouKmN6L18fFB//79kZSUhE8++UTvsd27d9d5fpCpTJw4EY6Ojli9ejUOHz5s8HhGRobu/7W3O6n9Y67WqVOn8NZbbxldfu3HkMb+YGkpZv/RWH07s9WrV+PFF1/ETz/9hJ07d6JLly4YOnSo7j5Cubm5+Pe//93gN1xjxo0bh61bt+L7779HWFgYRowYgaqqKnz77be4//77kZycbDDP4sWLcebMGaxduxa7du3CQw89BG9vb+Tm5uKvv/7C4cOHsXz5cnTo0KHBdezYsUN3o7nak6V37dqF/Px83H///Zg+fbqubevWrfHtt99i5MiR6NmzJwYMGICOHTtCoVAgLS0N8fHxyM/P1wt2zan2pluDBg3CmDFjMGLECISGhuLixYvYsWMHHBwcsGnTpgadzFrrzTffxL59+7BixQocP35cd0+frVu3YujQofj+++8bXeejjz6KkSNHYuTIkWjXrh3OnDmDmJgYuLi4YPXq1Xpt165di969e+Oll17C3r17ERERobuPkEKhwIYNG/ROnH3ggQfQv39/HDx4EA88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kVi3bh3S0tIwffp0AMD8+fORmZmJTZs26eY5ffo0AKC0tBRXrlzB6dOnYWlpiQ4dOgCo/jhs8eLF2Lx5M/z9/XWHne3t7WFvb397O0hERER3LJMHoTFjxiA/Px/Lli2DWq1GWFgYYmJi4OfnB6D6Bop/v6dQt27ddP8/ceIENm/eDD8/P93nqKtXr0ZlZSUef/xxvfmWLFmC1157rUX7Q0RERHcPkwchAJgxYwZmzJhh9LGNGzcaTLvZaU21gYiIiIioPia/szQRERGRqTAIERERkdliECIiIiKzxSBEREREZotBiIiIiMwWgxARERGZLQYhIiIiMlsMQkRERGS2GISIiIjIbDEIERERkdliECIiIiKzxSBEREREZuuO+NJVallj1u43dQn12jr9IVOXQEREZopHhIiIiMhsMQgRERGR2WIQIiIiIrPFIERERERmi0GIiIiIzBaDEBEREZktBiEiIiIyWwxCREREZLYYhIiIiMhsMQgRERGR2WIQIiIiIrPFIERERERmi0GIiIiIzBaDEBEREZktlakLIGqoMWv3m7qEOm2d/pCpSyAioibgESEiIiIyWwxCREREZLYYhIiIiMhsMQgRERGR2WIQIiIiIrPFIERERERmi0GIiIiIzBaDEBEREZktBiEiIiIyWwxCREREZLYYhIiIiMhsMQgRERGR2eKXrhLdRnfyF8cC/PJYIjI/PCJEREREZotBiIiIiMwWgxARERGZLQYhIiIiMlsMQkRERGS2GISIiIjIbDEIERERkdm6I4LQ6tWrERAQAGtra4SHh+PQoUN1tlWr1XjqqacQEhIChUKBOXPmGG23bds2dOjQAVZWVujQoQO+++67FqqeiIiI7lYmD0Jbt27FnDlzsHDhQpw6dQpRUVEYMmQI0tLSjLavqKiAm5sbFi5ciC5duhhtEx8fjzFjxmD8+PE4c+YMxo8fjyeffBK///57S3aFiIiI7jImD0IffPABpk6dimeffRbt27fHihUr4OPjgzVr1hht7+/vj48++ggTJkyAk5OT0TYrVqzAoEGDMH/+fISGhmL+/PkYMGAAVqxY0YI9ISIioruNSYNQZWUlTpw4gejoaL3p0dHROHLkSJOXGx8fb7DMwYMH33SZJSUlKC4u1v1oNVVNroGIiIjufCb9rrG8vDzIsgx3d3e96e7u7sjOzm7ycrOzs5u0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ui0adY7QH3/8gdOnT+t+j4mJwYULF/TaXL9+HV999RWCgoKapUAiIiKiltKoIPTdd9/pPvKSJKnO84BsbGywYcOGW6+OiIiIqAU1Kgj94x//wCOPPAIhBB544AFs2LDB4DJ5KysrBAUFwcbGplkLJSIiImpujQpCnp6e8PT0BAAcOHAA3bt3h4ODQ4sURkRERNTSmnwfoX79+jVnHURERES3XaOC0JQpU7B48WIEBARgypQp9baVJAmff/75LRVHRERE1JIaFYQOHDiA2bNnAwD2798PSZLqbFvfY0RERER3gkYFoZSUFN3/U1NTm7sWIiIiotuqyTdUJCIiIrrbMQgRERGR2WrUR2MBAQENPvdHkiQkJyc3qSgiIiKi26FRQahfv348CZqIiIjuGY0KQhs3bmyhMoiIiIhuP54jRERERGarUUeE0tLS4OnpCQsLC6Slpd20va+vb5MLIyIiImppjT5ZOj4+Hg888AD8/f1ver6QLMu3VBwRERFRS2pUEFq/fj2CgoJ0/+eJ00RERHQ3a1QQmjhxou7/kyZNau5aiIiIiG6rZjlZWgiBkpISCCGaY3FEREREt8UtBaHff/8dgwcPhq2tLVq1agVbW1sMHjwYv/32W3PVR0RERNRiGvXR2I3279+PIUOGwMHBAWPHjoWHhweys7Oxa9cu9OvXDzExMRgwYEBz1kpERETUrJochF5++WV069YNP//8M+zt7XXTS0pKMGDAALzyyis4duxYsxRJRERE1BKa/NHYn3/+iX//+996IQgAHBwc8PLLL+PPP/+85eKIiIiIWlKTg1CbNm2gUBifXalUws3NrclFEREREd0OTQ5C//znP/Hhhx+iqqpKb3plZSU++OAD/OMf/7jl4oiIiIhaUqPOEfrggw90/7e0tERqaioCAwMxatQo3cnS27dvh1KphI2NTbMXS0RERNScGhWEXnzxRaPT//vf/xpM+/e//40XXnihaVURERER3QaNCkIpKSktVQcRERHRbdeoIOTn59dSdRARERHdds3yFRtEREREd6Mm31ARAH755Rd8/PHHSEhIwPXr1/UekyQJycnJt1QcERERUUtq8hGhX3/9FQMGDMDVq1eRkJCA0NBQeHt7Iy0tDSqVCn379m3OOomIiIiaXZOD0JIlSzB58mTs3r0bAPDGG2/g0KFDOHnyJEpLSzFq1KgG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pVKp+/1ODkFERER060x6jpClpSXCw8MRGxurNz02Nha9evUyOk9kZKRB+7179yIiIgIWFv8LLu+99x5ef/117N69GxEREc1fPBEREd31TH7V2Lx58/DZZ59h/fr1SEhIwNy5c5GWlobp06cDAObPn48JEybo2k+fPh2XL1/GvHnzkJCQgPXr1+Pzzz/Hiy++qGvz7rvvYtGiRVi/fj38/f2RnZ2N7OxslJaW3vb+ERER0Z3LpB+NAcCYMWOQn5+PZcuWQa1WIywsDDExMfDz8wMAqNVqvXsKBQQEICYmBnPnzsWqVavg5eWFjz/+GKNHj9a1Wb16NSorK/H444/rrWvJkiV47bXXbku/iIiI6M5n8iAEADNmzMCMGTOMPrZx40aDaf369cPJkyfrXF7tVSFERERE9TH5R2NEREREpsIgRERERGaLQYiIiIjMFoMQERERmS0GISIiIjJbDEJERERkthiEiIiIyGwxCBEREZHZYhAiIiIis8UgRERERGaLQYiIiIjMFoMQERERmS0GISIiIjJbDEJERERkthiEiIiIyGwxCBEREZHZYhAiIiIis8UgRERERGaLQYiIiIjMFoMQERERmS0GISIiIjJbDEJERERkthiEiIiIyGwxCBEREZHZYhAiIiIis8UgRERERGaLQYiIiIjMFoMQERERmS0GISIiIjJbDEJERERkthiEiIiIyGwxCBEREZHZYhAiIiIis8UgRERERGaLQYiIiIjMFoMQERERmS0GISIiIjJbDEJERERkthiEiIiIyGwxCBEREZHZYhAiIiIis8UgRERERGaLQYiIiIjMFoMQERERmS0GISIiIjJbDEJERERkthiEiIiIyGzdEUFo9erVCAgIgLW1NcLDw3Ho0KF628fFxSE8PBzW1tYIDAzE2rVrDdps27YNHTp0gJWVFTp06IDvvvuupcpvEK2mCsk/b4VWU2XSOm7VvdCPe6EPAPtxJ7kX+gDcG/24F/oAsB+3k8mD0NatWzFnzhwsXLgQp06dQlRUFIYMGYK0tDSj7VNSUjB06FBERUXh1KlTWLBgAWbNmoVt27bp2sTHx2PMmDEYP348zpw5g/Hjx+PJJ5/E77//fru6ZUCrqcKl/d/c0RtDQ9wL/bgX+gCwH3eSe6EPwL3Rj3uhDwD7cTuZPAh98MEHmDp1Kp599lm0b98eK1asgI+P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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "        <script type=\"text/javascript\">\n",
       "        window.PlotlyConfig = {MathJaxConfig: 'local'};\n",
       "        if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}\n",
       "        if (typeof require !== 'undefined') {\n",
       "        require.undef(\"plotly\");\n",
       "        requirejs.config({\n",
       "            paths: {\n",
       "                'plotly': ['https://cdn.plot.ly/plotly-2.24.1.min']\n",
       "            }\n",
       "        });\n",
       "        require(['plotly'], function(Plotly) {\n",
       "            window._Plotly = Plotly;\n",
       "        });\n",
       "        }\n",
       "        </script>\n",
       "        "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>                            <div id=\"ad45dc94-9adb-4a19-a84c-c16112615122\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div>            <script type=\"text/javascript\">                require([\"plotly\"], function(Plotly) {                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById(\"ad45dc94-9adb-4a19-a84c-c16112615122\")) {                    Plotly.newPlot(                        \"ad45dc94-9adb-4a19-a84c-c16112615122\",                        [{\"alignmentgroup\":\"True\",\"hovertemplate\":\"Chiffre=%{x}\\u003cbr\\u003eProbabilit\\u00e9=%{y}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"legendgroup\":\"\",\"marker\":{\"color\":\"#636efa\",\"pattern\":{\"shape\":\"\"}},\"name\":\"\",\"offsetgroup\":\"\",\"orientation\":\"v\",\"showlegend\":false,\"textposition\":\"auto\",\"x\":[0,1,2,3,4,5,6,7,8,9],\"xaxis\":\"x\",\"y\":[0.11967926859688073,0.1138901034075564,0.10882149900550823,0.10432956023095939,0.10030820226757937,0.09667723580232243,0.09337473578303615,0.09035198926960332,0.08757005357886138,0.08499735205769224],\"yaxis\":\"y\",\"type\":\"bar\"}],                        {\"template\":{\"data\":{\"histogram2dcontour\":[{\"type\":\"histogram2dcontour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"choropleth\":[{\"type\":\"choropleth\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"histogram2d\":[{\"type\":\"histogram2d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmap\":[{\"type\":\"heatmap\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmapgl\":[{\"type\":\"heatmapgl\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"contourcarpet\":[{\"type\":\"contourcarpet\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"contour\":[{\"type\":\"contour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"surface\":[{\"type\":\"surface\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"mesh3d\":[{\"type\":\"mesh3d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"scatter\":[{\"fillpattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2},\"type\":\"scatter\"}],\"parcoords\":[{\"type\":\"parcoords\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolargl\":[{\"type\":\"scatterpolargl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"scattergeo\":[{\"type\":\"scattergeo\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolar\":[{\"type\":\"scatterpolar\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"scattergl\":[{\"type\":\"scattergl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatter3d\":[{\"type\":\"scatter3d\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattermapbox\":[{\"type\":\"scattermapbox\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterternary\":[{\"type\":\"scatterternary\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattercarpet\":[{\"type\":\"scattercarpet\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}]},\"layout\":{\"autotypenumbers\":\"strict\",\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"bgcolor\":\"#E5ECF6\",\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"ternary\":{\"bgcolor\":\"#E5ECF6\",\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]]},\"xaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"yaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"geo\":{\"bgcolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"subunitcolor\":\"white\",\"showland\":true,\"showlakes\":true,\"lakecolor\":\"white\"},\"title\":{\"x\":0.05},\"mapbox\":{\"style\":\"light\"}}},\"xaxis\":{\"anchor\":\"y\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"Chiffre\"}},\"yaxis\":{\"anchor\":\"x\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"Probabilit\\u00e9\"}},\"legend\":{\"tracegroupgap\":0},\"title\":{\"text\":\"Loi de Benford pour le deuxi\\u00e8me chiffre significatif\"},\"barmode\":\"relative\"},                        {\"responsive\": true}                    ).then(function(){\n",
       "                            \n",
       "var gd = document.getElementById('ad45dc94-9adb-4a19-a84c-c16112615122');\n",
       "var x = new MutationObserver(function (mutations, observer) {{\n",
       "        var display = window.getComputedStyle(gd).display;\n",
       "        if (!display || display === 'none') {{\n",
       "            console.log([gd, 'removed!']);\n",
       "            Plotly.purge(gd);\n",
       "            observer.disconnect();\n",
       "        }}\n",
       "}});\n",
       "\n",
       "// Listen for the removal of the full notebook cells\n",
       "var notebookContainer = gd.closest('#notebook-container');\n",
       "if (notebookContainer) {{\n",
       "    x.observe(notebookContainer, {childList: true});\n",
       "}}\n",
       "\n",
       "// Listen for the clearing of the current output cell\n",
       "var outputEl = gd.closest('.output');\n",
       "if (outputEl) {{\n",
       "    x.observe(outputEl, {childList: true});\n",
       "}}\n",
       "\n",
       "                        })                };                });            </script>        </div>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Fonction pour calculer la probabilité\n",
    "p = lambda c : sum( [ np.log10( 1+1/(10*i+c)) for i in range( 1 , 10 ) ] ) \n",
    "\n",
    "# Générer les chiffres de 0 à 9\n",
    "cc = np.arange(0,10) \n",
    "\n",
    "# Calculer les probabilités pour chaque valeur de cc\n",
    "FB = [ p(c) for c in cc ]\n",
    "\n",
    "# Affichage des résultats dans un DataFrame, utiliser la première colonne comme index\n",
    "df = pd.DataFrame({'Chiffre':cc,'Probabilité':FB})\n",
    "display(df)\n",
    "\n",
    "# Vérification que FB est normalisée\n",
    "display(df['Probabilité'].sum())\n",
    "\n",
    "\n",
    "\n",
    "# Tracer les résultats avec seaborn\n",
    "sns.barplot(x='Chiffre',y='Probabilité',data=df)\n",
    "plt.title(\"Loi de Benford pour le deuxième chiffre significatif\")\n",
    "plt.show()\n",
    "\n",
    "# Tracer les résultats avec plotly\n",
    "fig = px.bar(df, x='Chiffre', y='Probabilité', title=\"Loi de Benford pour le deuxième chiffre significatif\")\n",
    "fig.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ouverture et séléction des données"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On importe les données à partir d’un fichier `csv`. Par défaut, le séparateur d’éléments est `,` . Dans ce fichier c’est `;`, il faut donc l’indiquer explicitement."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:10.876705Z",
     "iopub.status.busy": "2026-10-30T13:11:10.876508Z",
     "iopub.status.idle": "2026-10-30T13:11:10.888934Z",
     "shell.execute_reply": "2026-10-30T13:11:10.888536Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 3143 entries, 0 to 3142\n",
      "Data columns (total 7 columns):\n",
      " #   Column   Non-Null Count  Dtype \n",
      "---  ------   --------------  ----- \n",
      " 0   State    3143 non-null   object\n",
      " 1   ST       3143 non-null   object\n",
      " 2   Fips     3143 non-null   int64 \n",
      " 3   County   3143 non-null   object\n",
      " 4   Trump    3143 non-null   int64 \n",
      " 5   Clinton  3143 non-null   int64 \n",
      " 6   Stein    3143 non-null   int64 \n",
      "dtypes: int64(4), object(3)\n",
      "memory usage: 172.0+ KB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Tot = pd.read_csv('benford_usa.csv', sep=';')\n",
    "display(Tot.info())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:10.890653Z",
     "iopub.status.busy": "2026-10-30T13:11:10.890464Z",
     "iopub.status.idle": "2026-10-30T13:11:10.897332Z",
     "shell.execute_reply": "2026-10-30T13:11:10.896770Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>State</th>\n",
       "      <th>ST</th>\n",
       "      <th>Fips</th>\n",
       "      <th>County</th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Georgia</td>\n",
       "      <td>GA</td>\n",
       "      <td>13089</td>\n",
       "      <td>DeKalb County, Georgia</td>\n",
       "      <td>47531</td>\n",
       "      <td>239131</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Texas</td>\n",
       "      <td>TX</td>\n",
       "      <td>48487</td>\n",
       "      <td>Wilbarger County, Texas</td>\n",
       "      <td>3166</td>\n",
       "      <td>807</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Virginia</td>\n",
       "      <td>VA</td>\n",
       "      <td>51111</td>\n",
       "      <td>Lunenburg County, Virginia</td>\n",
       "      <td>3206</td>\n",
       "      <td>2226</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Georgia</td>\n",
       "      <td>GA</td>\n",
       "      <td>13297</td>\n",
       "      <td>Walton County, Georgia</td>\n",
       "      <td>31093</td>\n",
       "      <td>8279</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>North Carolina</td>\n",
       "      <td>NC</td>\n",
       "      <td>37011</td>\n",
       "      <td>Avery County, North Carolina</td>\n",
       "      <td>6226</td>\n",
       "      <td>1670</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>North Carolina</td>\n",
       "      <td>NC</td>\n",
       "      <td>37069</td>\n",
       "      <td>Franklin County, North Carolina</td>\n",
       "      <td>16320</td>\n",
       "      <td>12811</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>26037</td>\n",
       "      <td>Clinton County, Michigan</td>\n",
       "      <td>21635</td>\n",
       "      <td>16490</td>\n",
       "      <td>379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Arkansas</td>\n",
       "      <td>AR</td>\n",
       "      <td>5045</td>\n",
       "      <td>Faulkner County, Arkansas</td>\n",
       "      <td>29170</td>\n",
       "      <td>14525</td>\n",
       "      <td>507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>North Carolina</td>\n",
       "      <td>NC</td>\n",
       "      <td>37025</td>\n",
       "      <td>Cabarrus County, North Carolina</td>\n",
       "      <td>53224</td>\n",
       "      <td>35048</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Idaho</td>\n",
       "      <td>ID</td>\n",
       "      <td>16025</td>\n",
       "      <td>Camas County, Idaho</td>\n",
       "      <td>410</td>\n",
       "      <td>110</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            State  ST   Fips                           County  Trump  Clinton  \\\n",
       "0         Georgia  GA  13089           DeKalb County, Georgia  47531   239131   \n",
       "1           Texas  TX  48487          Wilbarger County, Texas   3166      807   \n",
       "2        Virginia  VA  51111       Lunenburg County, Virginia   3206     2226   \n",
       "3         Georgia  GA  13297           Walton County, Georgia  31093     8279   \n",
       "4  North Carolina  NC  37011     Avery County, North Carolina   6226     1670   \n",
       "5  North Carolina  NC  37069  Franklin County, North Carolina  16320    12811   \n",
       "6        Michigan  MI  26037         Clinton County, Michigan  21635    16490   \n",
       "7        Arkansas  AR   5045        Faulkner County, Arkansas  29170    14525   \n",
       "8  North Carolina  NC  37025  Cabarrus County, North Carolina  53224    35048   \n",
       "9           Idaho  ID  16025              Camas County, Idaho    410      110   \n",
       "\n",
       "   Stein  \n",
       "0      0  \n",
       "1     13  \n",
       "2     25  \n",
       "3      0  \n",
       "4      0  \n",
       "5      0  \n",
       "6    379  \n",
       "7    507  \n",
       "8      0  \n",
       "9     15  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Tot.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Combien de valeurs uniques y a-t-il dans la colonne `State` ?\n",
    "Et dans la colonne `County` ? Ou encore dans la colonne `Fips` ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:10.899067Z",
     "iopub.status.busy": "2026-10-30T13:11:10.898884Z",
     "iopub.status.idle": "2026-10-30T13:11:10.904946Z",
     "shell.execute_reply": "2026-10-30T13:11:10.904515Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Nombre de valeurs uniques dans la colonne `State` :** 51"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**Nombre de valeurs uniques dans la colonne `County` :** 3143"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**Nombre de valeurs uniques dans la colonne `Fips` :** 3143"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for col in ['State', 'County', 'Fips']:\n",
    "    display(Markdown(f\"**Nombre de valeurs uniques dans la colonne `{col}` :** {Tot[col].nunique()}\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Les colonnes \"Fips\" et \"County\" ne sont pas utiles pour notre analyse, on peut les supprimer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:10.906742Z",
     "iopub.status.busy": "2026-10-30T13:11:10.906551Z",
     "iopub.status.idle": "2026-10-30T13:11:10.914323Z",
     "shell.execute_reply": "2026-10-30T13:11:10.913870Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>State</th>\n",
       "      <th>ST</th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Georgia</td>\n",
       "      <td>GA</td>\n",
       "      <td>47531</td>\n",
       "      <td>239131</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Texas</td>\n",
       "      <td>TX</td>\n",
       "      <td>3166</td>\n",
       "      <td>807</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Virginia</td>\n",
       "      <td>VA</td>\n",
       "      <td>3206</td>\n",
       "      <td>2226</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Georgia</td>\n",
       "      <td>GA</td>\n",
       "      <td>31093</td>\n",
       "      <td>8279</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>North Carolina</td>\n",
       "      <td>NC</td>\n",
       "      <td>6226</td>\n",
       "      <td>1670</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3138</th>\n",
       "      <td>Tennessee</td>\n",
       "      <td>TN</td>\n",
       "      <td>9525</td>\n",
       "      <td>2425</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3139</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>224589</td>\n",
       "      <td>176238</td>\n",
       "      <td>3886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3140</th>\n",
       "      <td>West Virginia</td>\n",
       "      <td>WV</td>\n",
       "      <td>3516</td>\n",
       "      <td>1315</td>\n",
       "      <td>47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3141</th>\n",
       "      <td>North Carolina</td>\n",
       "      <td>NC</td>\n",
       "      <td>6225</td>\n",
       "      <td>1585</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3142</th>\n",
       "      <td>Maryland</td>\n",
       "      <td>MD</td>\n",
       "      <td>7938</td>\n",
       "      <td>5695</td>\n",
       "      <td>94</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3143 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "               State  ST   Trump  Clinton  Stein\n",
       "0            Georgia  GA   47531   239131      0\n",
       "1              Texas  TX    3166      807     13\n",
       "2           Virginia  VA    3206     2226     25\n",
       "3            Georgia  GA   31093     8279      0\n",
       "4     North Carolina  NC    6226     1670      0\n",
       "...              ...  ..     ...      ...    ...\n",
       "3138       Tennessee  TN    9525     2425     36\n",
       "3139        Michigan  MI  224589   176238   3886\n",
       "3140   West Virginia  WV    3516     1315     47\n",
       "3141  North Carolina  NC    6225     1585      0\n",
       "3142        Maryland  MD    7938     5695     94\n",
       "\n",
       "[3143 rows x 5 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Tot.drop(columns=['Fips', 'County'],inplace=True)\n",
    "Tot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Combien d'états sont dans le fichier ? Lesquels ? Affichons la liste des états (sans doublons):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:10.916073Z",
     "iopub.status.busy": "2026-10-30T13:11:10.915869Z",
     "iopub.status.idle": "2026-10-30T13:11:10.926721Z",
     "shell.execute_reply": "2026-10-30T13:11:10.926223Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Nombre de valeurs uniques = nombre d'États**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "51"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**Combien d'occurrences de chaque valeur unique = combien de fois chaque État apparaît**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Occurrences</th>\n",
       "      <th>Proportions</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>State</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Texas</th>\n",
       "      <td>254</td>\n",
       "      <td>0.080815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Georgia</th>\n",
       "      <td>159</td>\n",
       "      <td>0.050589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Virginia</th>\n",
       "      <td>134</td>\n",
       "      <td>0.042634</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kentucky</th>\n",
       "      <td>120</td>\n",
       "      <td>0.038180</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Missouri</th>\n",
       "      <td>115</td>\n",
       "      <td>0.036589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kansas</th>\n",
       "      <td>105</td>\n",
       "      <td>0.033408</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Illinois</th>\n",
       "      <td>102</td>\n",
       "      <td>0.032453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>North Carolina</th>\n",
       "      <td>100</td>\n",
       "      <td>0.031817</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Iowa</th>\n",
       "      <td>99</td>\n",
       "      <td>0.031499</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tennessee</th>\n",
       "      <td>95</td>\n",
       "      <td>0.030226</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nebraska</th>\n",
       "      <td>93</td>\n",
       "      <td>0.029590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Indiana</th>\n",
       "      <td>92</td>\n",
       "      <td>0.029271</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ohio</th>\n",
       "      <td>88</td>\n",
       "      <td>0.027999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Minnesota</th>\n",
       "      <td>87</td>\n",
       "      <td>0.027681</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Michigan</th>\n",
       "      <td>83</td>\n",
       "      <td>0.026408</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mississippi</th>\n",
       "      <td>82</td>\n",
       "      <td>0.026090</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Oklahoma</th>\n",
       "      <td>77</td>\n",
       "      <td>0.024499</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arkansas</th>\n",
       "      <td>75</td>\n",
       "      <td>0.023863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wisconsin</th>\n",
       "      <td>72</td>\n",
       "      <td>0.022908</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pennsylvania</th>\n",
       "      <td>67</td>\n",
       "      <td>0.021317</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Florida</th>\n",
       "      <td>67</td>\n",
       "      <td>0.021317</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Alabama</th>\n",
       "      <td>67</td>\n",
       "      <td>0.021317</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>South Dakota</th>\n",
       "      <td>66</td>\n",
       "      <td>0.020999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Louisiana</th>\n",
       "      <td>64</td>\n",
       "      <td>0.020363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Colorado</th>\n",
       "      <td>64</td>\n",
       "      <td>0.020363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New York</th>\n",
       "      <td>62</td>\n",
       "      <td>0.019726</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>California</th>\n",
       "      <td>58</td>\n",
       "      <td>0.018454</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Montana</th>\n",
       "      <td>56</td>\n",
       "      <td>0.017817</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>West Virginia</th>\n",
       "      <td>55</td>\n",
       "      <td>0.017499</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>North Dakota</th>\n",
       "      <td>53</td>\n",
       "      <td>0.016863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>South Carolina</th>\n",
       "      <td>46</td>\n",
       "      <td>0.014636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Idaho</th>\n",
       "      <td>44</td>\n",
       "      <td>0.013999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Washington</th>\n",
       "      <td>39</td>\n",
       "      <td>0.012409</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Oregon</th>\n",
       "      <td>36</td>\n",
       "      <td>0.011454</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Mexico</th>\n",
       "      <td>33</td>\n",
       "      <td>0.010500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Utah</th>\n",
       "      <td>29</td>\n",
       "      <td>0.009227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Alaska</th>\n",
       "      <td>29</td>\n",
       "      <td>0.009227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Maryland</th>\n",
       "      <td>24</td>\n",
       "      <td>0.007636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wyoming</th>\n",
       "      <td>23</td>\n",
       "      <td>0.007318</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Jersey</th>\n",
       "      <td>21</td>\n",
       "      <td>0.006682</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nevada</th>\n",
       "      <td>17</td>\n",
       "      <td>0.005409</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Maine</th>\n",
       "      <td>16</td>\n",
       "      <td>0.005091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arizona</th>\n",
       "      <td>15</td>\n",
       "      <td>0.004773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Massachusetts</th>\n",
       "      <td>14</td>\n",
       "      <td>0.004454</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vermont</th>\n",
       "      <td>14</td>\n",
       "      <td>0.004454</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Hampshire</th>\n",
       "      <td>10</td>\n",
       "      <td>0.003182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Connecticut</th>\n",
       "      <td>8</td>\n",
       "      <td>0.002545</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Hawaii</th>\n",
       "      <td>5</td>\n",
       "      <td>0.001591</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rhode Island</th>\n",
       "      <td>5</td>\n",
       "      <td>0.001591</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Delaware</th>\n",
       "      <td>3</td>\n",
       "      <td>0.000955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>District of Columbia</th>\n",
       "      <td>1</td>\n",
       "      <td>0.000318</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      Occurrences  Proportions\n",
       "State                                         \n",
       "Texas                         254     0.080815\n",
       "Georgia                       159     0.050589\n",
       "Virginia                      134     0.042634\n",
       "Kentucky                      120     0.038180\n",
       "Missouri                      115     0.036589\n",
       "Kansas                        105     0.033408\n",
       "Illinois                      102     0.032453\n",
       "North Carolina                100     0.031817\n",
       "Iowa                           99     0.031499\n",
       "Tennessee                      95     0.030226\n",
       "Nebraska                       93     0.029590\n",
       "Indiana                        92     0.029271\n",
       "Ohio                           88     0.027999\n",
       "Minnesota                      87     0.027681\n",
       "Michigan                       83     0.026408\n",
       "Mississippi                    82     0.026090\n",
       "Oklahoma                       77     0.024499\n",
       "Arkansas                       75     0.023863\n",
       "Wisconsin                      72     0.022908\n",
       "Pennsylvania                   67     0.021317\n",
       "Florida                        67     0.021317\n",
       "Alabama                        67     0.021317\n",
       "South Dakota                   66     0.020999\n",
       "Louisiana                      64     0.020363\n",
       "Colorado                       64     0.020363\n",
       "New York                       62     0.019726\n",
       "California                     58     0.018454\n",
       "Montana                        56     0.017817\n",
       "West Virginia                  55     0.017499\n",
       "North Dakota                   53     0.016863\n",
       "South Carolina                 46     0.014636\n",
       "Idaho                          44     0.013999\n",
       "Washington                     39     0.012409\n",
       "Oregon                         36     0.011454\n",
       "New Mexico                     33     0.010500\n",
       "Utah                           29     0.009227\n",
       "Alaska                         29     0.009227\n",
       "Maryland                       24     0.007636\n",
       "Wyoming                        23     0.007318\n",
       "New Jersey                     21     0.006682\n",
       "Nevada                         17     0.005409\n",
       "Maine                          16     0.005091\n",
       "Arizona                        15     0.004773\n",
       "Massachusetts                  14     0.004454\n",
       "Vermont                        14     0.004454\n",
       "New Hampshire                  10     0.003182\n",
       "Connecticut                     8     0.002545\n",
       "Hawaii                          5     0.001591\n",
       "Rhode Island                    5     0.001591\n",
       "Delaware                        3     0.000955\n",
       "District of Columbia            1     0.000318"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Résumé statistique de la colonne 'State'\n",
    "# ================================================================\n",
    "\n",
    "colonne = Tot['State']\n",
    "\n",
    "display(Markdown(\"**Nombre de valeurs uniques = nombre d'États**\"))\n",
    "display(colonne.nunique())\n",
    "\n",
    "# display(Markdown(\"**Valeurs uniques = noms des États**\"))\n",
    "# display(colonne.unique())\n",
    "\n",
    "display(Markdown(\"**Combien d'occurrences de chaque valeur unique = combien de fois chaque État apparaît**\"))\n",
    "display(pd.DataFrame({\n",
    "    'Occurrences': colonne.value_counts(),\n",
    "    'Proportions': colonne.value_counts(normalize=True)\n",
    "}))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Combien de voix ont été obtenues par chaque candidat au total ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:10.928459Z",
     "iopub.status.busy": "2026-10-30T13:11:10.928267Z",
     "iopub.status.idle": "2026-10-30T13:11:11.116663Z",
     "shell.execute_reply": "2026-10-30T13:11:11.115938Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style type=\"text/css\">\n",
       "</style>\n",
       "<table id=\"T_b53a7\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th class=\"blank level0\" >&nbsp;</th>\n",
       "      <th id=\"T_b53a7_level0_col0\" class=\"col_heading level0 col0\" >Nombre de votes</th>\n",
       "      <th id=\"T_b53a7_level0_col1\" class=\"col_heading level0 col1\" >Pourcentage</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th id=\"T_b53a7_level0_row0\" class=\"row_heading level0 row0\" >Clinton</th>\n",
       "      <td id=\"T_b53a7_row0_col0\" class=\"data row0 col0\" >62426228</td>\n",
       "      <td id=\"T_b53a7_row0_col1\" class=\"data row0 col1\" >50.02 %</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th id=\"T_b53a7_level0_row1\" class=\"row_heading level0 row1\" >Trump</th>\n",
       "      <td id=\"T_b53a7_row1_col0\" class=\"data row1 col0\" >61064602</td>\n",
       "      <td id=\"T_b53a7_row1_col1\" class=\"data row1 col1\" >48.93 %</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th id=\"T_b53a7_level0_row2\" class=\"row_heading level0 row2\" >Stein</th>\n",
       "      <td id=\"T_b53a7_row2_col0\" class=\"data row2 col0\" >1311595</td>\n",
       "      <td id=\"T_b53a7_row2_col1\" class=\"data row2 col1\" >1.05 %</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n"
      ],
      "text/plain": [
       "<pandas.io.formats.style.Styler at 0x78255aa8d8b0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# On affiche le nombre total de votes pour chaque candidat, i.e. la somme des colonnes Trump, Clinton et Stein\n",
    "cols = ['Trump','Clinton','Stein'] \n",
    "\n",
    "pour_affichage = pd.DataFrame( Tot[cols].sum().sort_values(ascending=False),columns=['Nombre de votes'])\n",
    "pour_affichage['Pourcentage'] = pour_affichage / pour_affichage.sum() * 100\n",
    "\n",
    "# pour un affichage plus joli\n",
    "pour_affichage = pour_affichage.style.format({'Pourcentage':'{:.2f} %'})\n",
    "pour_affichage"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bonus : pourquoi une fraude éventuelle dans ces trois états aurait changé le résultat de l'élection ?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Aux USA, ce n’est pas la majorité qui gagne mais le candidat qui obtient le plus de **grands électeurs**. Clinton a obtenu plus de voix que Trump mais c’est ce dernier qui a été élu. En effet, chaque **État** a un nombre de grands électeurs qui lui est attribué et le candidat qui remporte la majorité des voix dans un État obtient **tous** les grands électeurs de cet État.\n",
    "\n",
    "Voici le bilan des voix puis des grands électeurs obtenus par chaque candidat :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.123472Z",
     "iopub.status.busy": "2026-10-30T13:11:11.122601Z",
     "iopub.status.idle": "2026-10-30T13:11:11.142042Z",
     "shell.execute_reply": "2026-10-30T13:11:11.141303Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "      <th>ST</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>State</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Alabama</th>\n",
       "      <td>1306925</td>\n",
       "      <td>718084</td>\n",
       "      <td>9287</td>\n",
       "      <td>AL</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Alaska</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>AK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arizona</th>\n",
       "      <td>1021154</td>\n",
       "      <td>936250</td>\n",
       "      <td>25255</td>\n",
       "      <td>AZ</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arkansas</th>\n",
       "      <td>677904</td>\n",
       "      <td>378729</td>\n",
       "      <td>9837</td>\n",
       "      <td>AR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>California</th>\n",
       "      <td>3916209</td>\n",
       "      <td>7362490</td>\n",
       "      <td>220312</td>\n",
       "      <td>CA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Colorado</th>\n",
       "      <td>1137455</td>\n",
       "      <td>1212209</td>\n",
       "      <td>33147</td>\n",
       "      <td>CO</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Connecticut</th>\n",
       "      <td>668266</td>\n",
       "      <td>884432</td>\n",
       "      <td>22793</td>\n",
       "      <td>CT</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Delaware</th>\n",
       "      <td>185103</td>\n",
       "      <td>235581</td>\n",
       "      <td>6100</td>\n",
       "      <td>DE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>District of Columbia</th>\n",
       "      <td>11553</td>\n",
       "      <td>260223</td>\n",
       "      <td>3995</td>\n",
       "      <td>DC</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Florida</th>\n",
       "      <td>4605515</td>\n",
       "      <td>4485745</td>\n",
       "      <td>64019</td>\n",
       "      <td>FL</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Georgia</th>\n",
       "      <td>2068623</td>\n",
       "      <td>1837300</td>\n",
       "      <td>0</td>\n",
       "      <td>GA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Hawaii</th>\n",
       "      <td>128815</td>\n",
       "      <td>266827</td>\n",
       "      <td>12727</td>\n",
       "      <td>HI</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Idaho</th>\n",
       "      <td>407199</td>\n",
       "      <td>189677</td>\n",
       "      <td>8464</td>\n",
       "      <td>ID</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Illinois</th>\n",
       "      <td>2118179</td>\n",
       "      <td>2977498</td>\n",
       "      <td>74112</td>\n",
       "      <td>IL</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Indiana</th>\n",
       "      <td>1556220</td>\n",
       "      <td>1031953</td>\n",
       "      <td>0</td>\n",
       "      <td>IN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Iowa</th>\n",
       "      <td>798923</td>\n",
       "      <td>650790</td>\n",
       "      <td>11119</td>\n",
       "      <td>IA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kansas</th>\n",
       "      <td>656009</td>\n",
       "      <td>414788</td>\n",
       "      <td>22698</td>\n",
       "      <td>KS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kentucky</th>\n",
       "      <td>1202942</td>\n",
       "      <td>628834</td>\n",
       "      <td>13913</td>\n",
       "      <td>KY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Louisiana</th>\n",
       "      <td>1178004</td>\n",
       "      <td>779535</td>\n",
       "      <td>14018</td>\n",
       "      <td>LA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Maine</th>\n",
       "      <td>334838</td>\n",
       "      <td>354873</td>\n",
       "      <td>14075</td>\n",
       "      <td>ME</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Maryland</th>\n",
       "      <td>873646</td>\n",
       "      <td>1497951</td>\n",
       "      <td>31839</td>\n",
       "      <td>MD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Massachusetts</th>\n",
       "      <td>1083069</td>\n",
       "      <td>1964768</td>\n",
       "      <td>46910</td>\n",
       "      <td>MA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Michigan</th>\n",
       "      <td>2279805</td>\n",
       "      <td>2268193</td>\n",
       "      <td>50700</td>\n",
       "      <td>MI</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Minnesota</th>\n",
       "      <td>1322891</td>\n",
       "      <td>1366676</td>\n",
       "      <td>36957</td>\n",
       "      <td>MN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mississippi</th>\n",
       "      <td>678457</td>\n",
       "      <td>462001</td>\n",
       "      <td>3580</td>\n",
       "      <td>MS</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Missouri</th>\n",
       "      <td>1585753</td>\n",
       "      <td>1054889</td>\n",
       "      <td>25086</td>\n",
       "      <td>MO</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Montana</th>\n",
       "      <td>274120</td>\n",
       "      <td>174521</td>\n",
       "      <td>7669</td>\n",
       "      <td>MT</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nebraska</th>\n",
       "      <td>485819</td>\n",
       "      <td>273858</td>\n",
       "      <td>8346</td>\n",
       "      <td>NE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nevada</th>\n",
       "      <td>511319</td>\n",
       "      <td>537753</td>\n",
       "      <td>0</td>\n",
       "      <td>NV</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Hampshire</th>\n",
       "      <td>345789</td>\n",
       "      <td>348521</td>\n",
       "      <td>6416</td>\n",
       "      <td>NH</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Jersey</th>\n",
       "      <td>1535513</td>\n",
       "      <td>2021756</td>\n",
       "      <td>35949</td>\n",
       "      <td>NJ</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Mexico</th>\n",
       "      <td>315875</td>\n",
       "      <td>380724</td>\n",
       "      <td>9729</td>\n",
       "      <td>NM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New York</th>\n",
       "      <td>2640570</td>\n",
       "      <td>4143874</td>\n",
       "      <td>99895</td>\n",
       "      <td>NY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>North Carolina</th>\n",
       "      <td>2339603</td>\n",
       "      <td>2162074</td>\n",
       "      <td>0</td>\n",
       "      <td>NC</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>North Dakota</th>\n",
       "      <td>216133</td>\n",
       "      <td>93526</td>\n",
       "      <td>3769</td>\n",
       "      <td>ND</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ohio</th>\n",
       "      <td>2771984</td>\n",
       "      <td>2317001</td>\n",
       "      <td>44310</td>\n",
       "      <td>OH</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Oklahoma</th>\n",
       "      <td>947934</td>\n",
       "      <td>419788</td>\n",
       "      <td>0</td>\n",
       "      <td>OK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Oregon</th>\n",
       "      <td>742506</td>\n",
       "      <td>934631</td>\n",
       "      <td>45132</td>\n",
       "      <td>OR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pennsylvania</th>\n",
       "      <td>2912941</td>\n",
       "      <td>2844705</td>\n",
       "      <td>48912</td>\n",
       "      <td>PA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rhode Island</th>\n",
       "      <td>179421</td>\n",
       "      <td>249902</td>\n",
       "      <td>6155</td>\n",
       "      <td>RI</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>South Carolina</th>\n",
       "      <td>1143611</td>\n",
       "      <td>849469</td>\n",
       "      <td>12917</td>\n",
       "      <td>SC</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>South Dakota</th>\n",
       "      <td>227460</td>\n",
       "      <td>114938</td>\n",
       "      <td>0</td>\n",
       "      <td>SD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tennessee</th>\n",
       "      <td>1517402</td>\n",
       "      <td>867110</td>\n",
       "      <td>15919</td>\n",
       "      <td>TN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Texas</th>\n",
       "      <td>4681590</td>\n",
       "      <td>3867816</td>\n",
       "      <td>71307</td>\n",
       "      <td>TX</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Utah</th>\n",
       "      <td>452086</td>\n",
       "      <td>274188</td>\n",
       "      <td>7695</td>\n",
       "      <td>UT</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vermont</th>\n",
       "      <td>95053</td>\n",
       "      <td>178179</td>\n",
       "      <td>6748</td>\n",
       "      <td>VT</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Virginia</th>\n",
       "      <td>1731156</td>\n",
       "      <td>1916845</td>\n",
       "      <td>27272</td>\n",
       "      <td>VA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Washington</th>\n",
       "      <td>1129120</td>\n",
       "      <td>1610524</td>\n",
       "      <td>51066</td>\n",
       "      <td>WA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>West Virginia</th>\n",
       "      <td>486198</td>\n",
       "      <td>187457</td>\n",
       "      <td>8000</td>\n",
       "      <td>WV</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wisconsin</th>\n",
       "      <td>1403694</td>\n",
       "      <td>1380823</td>\n",
       "      <td>30934</td>\n",
       "      <td>WI</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wyoming</th>\n",
       "      <td>174248</td>\n",
       "      <td>55949</td>\n",
       "      <td>2512</td>\n",
       "      <td>WY</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        Trump  Clinton   Stein  ST\n",
       "State                                             \n",
       "Alabama               1306925   718084    9287  AL\n",
       "Alaska                      0        0       0  AK\n",
       "Arizona               1021154   936250   25255  AZ\n",
       "Arkansas               677904   378729    9837  AR\n",
       "California            3916209  7362490  220312  CA\n",
       "Colorado              1137455  1212209   33147  CO\n",
       "Connecticut            668266   884432   22793  CT\n",
       "Delaware               185103   235581    6100  DE\n",
       "District of Columbia    11553   260223    3995  DC\n",
       "Florida               4605515  4485745   64019  FL\n",
       "Georgia               2068623  1837300       0  GA\n",
       "Hawaii                 128815   266827   12727  HI\n",
       "Idaho                  407199   189677    8464  ID\n",
       "Illinois              2118179  2977498   74112  IL\n",
       "Indiana               1556220  1031953       0  IN\n",
       "Iowa                   798923   650790   11119  IA\n",
       "Kansas                 656009   414788   22698  KS\n",
       "Kentucky              1202942   628834   13913  KY\n",
       "Louisiana             1178004   779535   14018  LA\n",
       "Maine                  334838   354873   14075  ME\n",
       "Maryland               873646  1497951   31839  MD\n",
       "Massachusetts         1083069  1964768   46910  MA\n",
       "Michigan              2279805  2268193   50700  MI\n",
       "Minnesota             1322891  1366676   36957  MN\n",
       "Mississippi            678457   462001    3580  MS\n",
       "Missouri              1585753  1054889   25086  MO\n",
       "Montana                274120   174521    7669  MT\n",
       "Nebraska               485819   273858    8346  NE\n",
       "Nevada                 511319   537753       0  NV\n",
       "New Hampshire          345789   348521    6416  NH\n",
       "New Jersey            1535513  2021756   35949  NJ\n",
       "New Mexico             315875   380724    9729  NM\n",
       "New York              2640570  4143874   99895  NY\n",
       "North Carolina        2339603  2162074       0  NC\n",
       "North Dakota           216133    93526    3769  ND\n",
       "Ohio                  2771984  2317001   44310  OH\n",
       "Oklahoma               947934   419788       0  OK\n",
       "Oregon                 742506   934631   45132  OR\n",
       "Pennsylvania          2912941  2844705   48912  PA\n",
       "Rhode Island           179421   249902    6155  RI\n",
       "South Carolina        1143611   849469   12917  SC\n",
       "South Dakota           227460   114938       0  SD\n",
       "Tennessee             1517402   867110   15919  TN\n",
       "Texas                 4681590  3867816   71307  TX\n",
       "Utah                   452086   274188    7695  UT\n",
       "Vermont                 95053   178179    6748  VT\n",
       "Virginia              1731156  1916845   27272  VA\n",
       "Washington            1129120  1610524   51066  WA\n",
       "West Virginia          486198   187457    8000  WV\n",
       "Wisconsin             1403694  1380823   30934  WI\n",
       "Wyoming                174248    55949    2512  WY"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Agréger les votes par état\n",
    "# votes_by_state = Tot.pivot_table(index='State', values=['Trump', 'Clinton', 'Stein'], aggfunc='sum')\n",
    "\n",
    "# Pour garder la colonne 'ST' (code état) on utilise groupby avec agg\n",
    "votes_by_state = Tot.groupby('State')[['Trump', 'Clinton', 'Stein', 'ST']].agg({\n",
    "    'Trump': 'sum',\n",
    "    'Clinton': 'sum', \n",
    "    'Stein': 'sum',\n",
    "    'ST': 'first'\n",
    "})\n",
    "\n",
    "votes_by_state"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On constate que, pour l’**Alaska**, les résultats des trois candidats (Trump, Clinton et Stein) sont tous à 0 ; cela signifie qu’il n’y a pas de votes enregistrés pour **cet État** dans le fichier. Y a‑t‑il d’autres **États** pour lesquels les résultats sont manquants ? Si oui, lesquels ? Pour détecter ces États, on peut filtrer les lignes où les **totaux** de votes pour ces candidats sont **égaux à zéro**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.146852Z",
     "iopub.status.busy": "2026-10-30T13:11:11.146532Z",
     "iopub.status.idle": "2026-10-30T13:11:11.157976Z",
     "shell.execute_reply": "2026-10-30T13:11:11.157250Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "      <th>ST</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>State</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Alaska</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>AK</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Trump  Clinton  Stein  ST\n",
       "State                            \n",
       "Alaska      0        0      0  AK"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filtrer les lignes où les votes sont tous à zéro pour Trump, Clinton et Stein\n",
    "# On utilise sum(axis=1) qui calcule la somme des votes pour chaque ligne (chaque état)\n",
    "mask = votes_by_state[['Trump', 'Clinton', 'Stein']].sum(axis=1) == 0\n",
    "states_with_no_votes = votes_by_state[mask]\n",
    "# Afficher les états avec 0 votes\n",
    "states_with_no_votes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nous constatons que les résultats pour 1 état sont absents dans notre jeu de données. Cependant, nous poursuivrons l'analyse en supposant que toutes les données nécessaires sont présentes, sans tenir compte de cette omission."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Ajoutons maintenant le nombre de grands électeurs par état. Pour cela, nous allons utiliser un dictionnaire qui contient le nombre de grands électeurs par état."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.162038Z",
     "iopub.status.busy": "2026-10-30T13:11:11.161718Z",
     "iopub.status.idle": "2026-10-30T13:11:11.178774Z",
     "shell.execute_reply": "2026-10-30T13:11:11.178133Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "      <th>ST</th>\n",
       "      <th>ElectoralVotes</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>State</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Alabama</th>\n",
       "      <td>1306925</td>\n",
       "      <td>718084</td>\n",
       "      <td>9287</td>\n",
       "      <td>AL</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Alaska</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>AK</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arizona</th>\n",
       "      <td>1021154</td>\n",
       "      <td>936250</td>\n",
       "      <td>25255</td>\n",
       "      <td>AZ</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arkansas</th>\n",
       "      <td>677904</td>\n",
       "      <td>378729</td>\n",
       "      <td>9837</td>\n",
       "      <td>AR</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>California</th>\n",
       "      <td>3916209</td>\n",
       "      <td>7362490</td>\n",
       "      <td>220312</td>\n",
       "      <td>CA</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Colorado</th>\n",
       "      <td>1137455</td>\n",
       "      <td>1212209</td>\n",
       "      <td>33147</td>\n",
       "      <td>CO</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Connecticut</th>\n",
       "      <td>668266</td>\n",
       "      <td>884432</td>\n",
       "      <td>22793</td>\n",
       "      <td>CT</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Delaware</th>\n",
       "      <td>185103</td>\n",
       "      <td>235581</td>\n",
       "      <td>6100</td>\n",
       "      <td>DE</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>District of Columbia</th>\n",
       "      <td>11553</td>\n",
       "      <td>260223</td>\n",
       "      <td>3995</td>\n",
       "      <td>DC</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Florida</th>\n",
       "      <td>4605515</td>\n",
       "      <td>4485745</td>\n",
       "      <td>64019</td>\n",
       "      <td>FL</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Georgia</th>\n",
       "      <td>2068623</td>\n",
       "      <td>1837300</td>\n",
       "      <td>0</td>\n",
       "      <td>GA</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Hawaii</th>\n",
       "      <td>128815</td>\n",
       "      <td>266827</td>\n",
       "      <td>12727</td>\n",
       "      <td>HI</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Idaho</th>\n",
       "      <td>407199</td>\n",
       "      <td>189677</td>\n",
       "      <td>8464</td>\n",
       "      <td>ID</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Illinois</th>\n",
       "      <td>2118179</td>\n",
       "      <td>2977498</td>\n",
       "      <td>74112</td>\n",
       "      <td>IL</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Indiana</th>\n",
       "      <td>1556220</td>\n",
       "      <td>1031953</td>\n",
       "      <td>0</td>\n",
       "      <td>IN</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Iowa</th>\n",
       "      <td>798923</td>\n",
       "      <td>650790</td>\n",
       "      <td>11119</td>\n",
       "      <td>IA</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kansas</th>\n",
       "      <td>656009</td>\n",
       "      <td>414788</td>\n",
       "      <td>22698</td>\n",
       "      <td>KS</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kentucky</th>\n",
       "      <td>1202942</td>\n",
       "      <td>628834</td>\n",
       "      <td>13913</td>\n",
       "      <td>KY</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Louisiana</th>\n",
       "      <td>1178004</td>\n",
       "      <td>779535</td>\n",
       "      <td>14018</td>\n",
       "      <td>LA</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Maine</th>\n",
       "      <td>334838</td>\n",
       "      <td>354873</td>\n",
       "      <td>14075</td>\n",
       "      <td>ME</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Maryland</th>\n",
       "      <td>873646</td>\n",
       "      <td>1497951</td>\n",
       "      <td>31839</td>\n",
       "      <td>MD</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Massachusetts</th>\n",
       "      <td>1083069</td>\n",
       "      <td>1964768</td>\n",
       "      <td>46910</td>\n",
       "      <td>MA</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Michigan</th>\n",
       "      <td>2279805</td>\n",
       "      <td>2268193</td>\n",
       "      <td>50700</td>\n",
       "      <td>MI</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Minnesota</th>\n",
       "      <td>1322891</td>\n",
       "      <td>1366676</td>\n",
       "      <td>36957</td>\n",
       "      <td>MN</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mississippi</th>\n",
       "      <td>678457</td>\n",
       "      <td>462001</td>\n",
       "      <td>3580</td>\n",
       "      <td>MS</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Missouri</th>\n",
       "      <td>1585753</td>\n",
       "      <td>1054889</td>\n",
       "      <td>25086</td>\n",
       "      <td>MO</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Montana</th>\n",
       "      <td>274120</td>\n",
       "      <td>174521</td>\n",
       "      <td>7669</td>\n",
       "      <td>MT</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nebraska</th>\n",
       "      <td>485819</td>\n",
       "      <td>273858</td>\n",
       "      <td>8346</td>\n",
       "      <td>NE</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nevada</th>\n",
       "      <td>511319</td>\n",
       "      <td>537753</td>\n",
       "      <td>0</td>\n",
       "      <td>NV</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Hampshire</th>\n",
       "      <td>345789</td>\n",
       "      <td>348521</td>\n",
       "      <td>6416</td>\n",
       "      <td>NH</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Jersey</th>\n",
       "      <td>1535513</td>\n",
       "      <td>2021756</td>\n",
       "      <td>35949</td>\n",
       "      <td>NJ</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Mexico</th>\n",
       "      <td>315875</td>\n",
       "      <td>380724</td>\n",
       "      <td>9729</td>\n",
       "      <td>NM</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New York</th>\n",
       "      <td>2640570</td>\n",
       "      <td>4143874</td>\n",
       "      <td>99895</td>\n",
       "      <td>NY</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>North Carolina</th>\n",
       "      <td>2339603</td>\n",
       "      <td>2162074</td>\n",
       "      <td>0</td>\n",
       "      <td>NC</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>North Dakota</th>\n",
       "      <td>216133</td>\n",
       "      <td>93526</td>\n",
       "      <td>3769</td>\n",
       "      <td>ND</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ohio</th>\n",
       "      <td>2771984</td>\n",
       "      <td>2317001</td>\n",
       "      <td>44310</td>\n",
       "      <td>OH</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Oklahoma</th>\n",
       "      <td>947934</td>\n",
       "      <td>419788</td>\n",
       "      <td>0</td>\n",
       "      <td>OK</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Oregon</th>\n",
       "      <td>742506</td>\n",
       "      <td>934631</td>\n",
       "      <td>45132</td>\n",
       "      <td>OR</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pennsylvania</th>\n",
       "      <td>2912941</td>\n",
       "      <td>2844705</td>\n",
       "      <td>48912</td>\n",
       "      <td>PA</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rhode Island</th>\n",
       "      <td>179421</td>\n",
       "      <td>249902</td>\n",
       "      <td>6155</td>\n",
       "      <td>RI</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>South Carolina</th>\n",
       "      <td>1143611</td>\n",
       "      <td>849469</td>\n",
       "      <td>12917</td>\n",
       "      <td>SC</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>South Dakota</th>\n",
       "      <td>227460</td>\n",
       "      <td>114938</td>\n",
       "      <td>0</td>\n",
       "      <td>SD</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tennessee</th>\n",
       "      <td>1517402</td>\n",
       "      <td>867110</td>\n",
       "      <td>15919</td>\n",
       "      <td>TN</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Texas</th>\n",
       "      <td>4681590</td>\n",
       "      <td>3867816</td>\n",
       "      <td>71307</td>\n",
       "      <td>TX</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Utah</th>\n",
       "      <td>452086</td>\n",
       "      <td>274188</td>\n",
       "      <td>7695</td>\n",
       "      <td>UT</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vermont</th>\n",
       "      <td>95053</td>\n",
       "      <td>178179</td>\n",
       "      <td>6748</td>\n",
       "      <td>VT</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Virginia</th>\n",
       "      <td>1731156</td>\n",
       "      <td>1916845</td>\n",
       "      <td>27272</td>\n",
       "      <td>VA</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Washington</th>\n",
       "      <td>1129120</td>\n",
       "      <td>1610524</td>\n",
       "      <td>51066</td>\n",
       "      <td>WA</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>West Virginia</th>\n",
       "      <td>486198</td>\n",
       "      <td>187457</td>\n",
       "      <td>8000</td>\n",
       "      <td>WV</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wisconsin</th>\n",
       "      <td>1403694</td>\n",
       "      <td>1380823</td>\n",
       "      <td>30934</td>\n",
       "      <td>WI</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wyoming</th>\n",
       "      <td>174248</td>\n",
       "      <td>55949</td>\n",
       "      <td>2512</td>\n",
       "      <td>WY</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        Trump  Clinton   Stein  ST  ElectoralVotes\n",
       "State                                                             \n",
       "Alabama               1306925   718084    9287  AL               9\n",
       "Alaska                      0        0       0  AK               3\n",
       "Arizona               1021154   936250   25255  AZ              11\n",
       "Arkansas               677904   378729    9837  AR               6\n",
       "California            3916209  7362490  220312  CA              55\n",
       "Colorado              1137455  1212209   33147  CO               9\n",
       "Connecticut            668266   884432   22793  CT               7\n",
       "Delaware               185103   235581    6100  DE               3\n",
       "District of Columbia    11553   260223    3995  DC               3\n",
       "Florida               4605515  4485745   64019  FL              29\n",
       "Georgia               2068623  1837300       0  GA              16\n",
       "Hawaii                 128815   266827   12727  HI               4\n",
       "Idaho                  407199   189677    8464  ID               4\n",
       "Illinois              2118179  2977498   74112  IL              20\n",
       "Indiana               1556220  1031953       0  IN              11\n",
       "Iowa                   798923   650790   11119  IA               6\n",
       "Kansas                 656009   414788   22698  KS               6\n",
       "Kentucky              1202942   628834   13913  KY               8\n",
       "Louisiana             1178004   779535   14018  LA               8\n",
       "Maine                  334838   354873   14075  ME               4\n",
       "Maryland               873646  1497951   31839  MD              10\n",
       "Massachusetts         1083069  1964768   46910  MA              11\n",
       "Michigan              2279805  2268193   50700  MI              16\n",
       "Minnesota             1322891  1366676   36957  MN              10\n",
       "Mississippi            678457   462001    3580  MS               6\n",
       "Missouri              1585753  1054889   25086  MO              10\n",
       "Montana                274120   174521    7669  MT               3\n",
       "Nebraska               485819   273858    8346  NE               5\n",
       "Nevada                 511319   537753       0  NV               6\n",
       "New Hampshire          345789   348521    6416  NH               4\n",
       "New Jersey            1535513  2021756   35949  NJ              14\n",
       "New Mexico             315875   380724    9729  NM               5\n",
       "New York              2640570  4143874   99895  NY              29\n",
       "North Carolina        2339603  2162074       0  NC              15\n",
       "North Dakota           216133    93526    3769  ND               3\n",
       "Ohio                  2771984  2317001   44310  OH              18\n",
       "Oklahoma               947934   419788       0  OK               7\n",
       "Oregon                 742506   934631   45132  OR               7\n",
       "Pennsylvania          2912941  2844705   48912  PA              20\n",
       "Rhode Island           179421   249902    6155  RI               4\n",
       "South Carolina        1143611   849469   12917  SC               9\n",
       "South Dakota           227460   114938       0  SD               3\n",
       "Tennessee             1517402   867110   15919  TN              11\n",
       "Texas                 4681590  3867816   71307  TX              38\n",
       "Utah                   452086   274188    7695  UT               6\n",
       "Vermont                 95053   178179    6748  VT               3\n",
       "Virginia              1731156  1916845   27272  VA              13\n",
       "Washington            1129120  1610524   51066  WA              12\n",
       "West Virginia          486198   187457    8000  WV               5\n",
       "Wisconsin             1403694  1380823   30934  WI              10\n",
       "Wyoming                174248    55949    2512  WY               3"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Dictionnaire des grands électeurs par état en 2016\n",
    "electoral_votes = {\n",
    "    \"Georgia\": 16,\n",
    "    \"Texas\": 38,\n",
    "    \"Virginia\": 13,\n",
    "    \"North Carolina\": 15,\n",
    "    \"Michigan\": 16,\n",
    "    \"Arkansas\": 6,\n",
    "    \"Idaho\": 4,\n",
    "    \"Florida\": 29,\n",
    "    \"Tennessee\": 11,\n",
    "    \"Kentucky\": 8,\n",
    "    \"Alabama\": 9,\n",
    "    \"Colorado\": 9,\n",
    "    \"Missouri\": 10,\n",
    "    \"Ohio\": 18,\n",
    "    \"Pennsylvania\": 20,\n",
    "    \"South Dakota\": 3,\n",
    "    \"Louisiana\": 8,\n",
    "    \"Wisconsin\": 10,\n",
    "    \"Minnesota\": 10,\n",
    "    \"Indiana\": 11,\n",
    "    \"Maryland\": 10,\n",
    "    \"Kansas\": 6,\n",
    "    \"New York\": 29,\n",
    "    \"Mississippi\": 6,\n",
    "    \"North Dakota\": 3,\n",
    "    \"Iowa\": 6,\n",
    "    \"California\": 55,\n",
    "    \"Wyoming\": 3,\n",
    "    \"New Mexico\": 5,\n",
    "    \"Montana\": 3,\n",
    "    \"Utah\": 6,\n",
    "    \"Oklahoma\": 7,\n",
    "    \"Alaska\": 3,\n",
    "    \"Oregon\": 7,\n",
    "    \"Illinois\": 20,\n",
    "    \"Hawaii\": 4,\n",
    "    \"South Carolina\": 9,\n",
    "    \"West Virginia\": 5,\n",
    "    \"Arizona\": 11,\n",
    "    \"Maine\": 4,\n",
    "    \"New Jersey\": 14,\n",
    "    \"Connecticut\": 7,\n",
    "    \"Nebraska\": 5,\n",
    "    \"Washington\": 12,\n",
    "    \"Nevada\": 6,\n",
    "    \"Massachusetts\": 11,\n",
    "    \"Rhode Island\": 4,\n",
    "    \"New Hampshire\": 4,\n",
    "    \"Delaware\": 3,\n",
    "    \"Vermont\": 3,\n",
    "    \"District of Columbia\": 3,\n",
    "}\n",
    "\n",
    "\n",
    "# Ajouter les grands électeurs au DataFrame\n",
    "votes_by_state['ElectoralVotes'] = electoral_votes\n",
    "votes_by_state"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Éliminons la ligne correspondant à l'Alaska, car elle n'a pas de données de vote."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.181444Z",
     "iopub.status.busy": "2026-10-30T13:11:11.181087Z",
     "iopub.status.idle": "2026-10-30T13:11:11.185475Z",
     "shell.execute_reply": "2026-10-30T13:11:11.184877Z"
    }
   },
   "outputs": [],
   "source": [
    "votes_by_state = votes_by_state.drop('Alaska', errors='ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.188818Z",
     "iopub.status.busy": "2026-10-30T13:11:11.188328Z",
     "iopub.status.idle": "2026-10-30T13:11:11.210961Z",
     "shell.execute_reply": "2026-10-30T13:11:11.210228Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "      <th>ST</th>\n",
       "      <th>ElectoralVotes</th>\n",
       "      <th>Winner</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>State</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Alabama</th>\n",
       "      <td>1306925</td>\n",
       "      <td>718084</td>\n",
       "      <td>9287</td>\n",
       "      <td>AL</td>\n",
       "      <td>9</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arizona</th>\n",
       "      <td>1021154</td>\n",
       "      <td>936250</td>\n",
       "      <td>25255</td>\n",
       "      <td>AZ</td>\n",
       "      <td>11</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Arkansas</th>\n",
       "      <td>677904</td>\n",
       "      <td>378729</td>\n",
       "      <td>9837</td>\n",
       "      <td>AR</td>\n",
       "      <td>6</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>California</th>\n",
       "      <td>3916209</td>\n",
       "      <td>7362490</td>\n",
       "      <td>220312</td>\n",
       "      <td>CA</td>\n",
       "      <td>55</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Colorado</th>\n",
       "      <td>1137455</td>\n",
       "      <td>1212209</td>\n",
       "      <td>33147</td>\n",
       "      <td>CO</td>\n",
       "      <td>9</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Connecticut</th>\n",
       "      <td>668266</td>\n",
       "      <td>884432</td>\n",
       "      <td>22793</td>\n",
       "      <td>CT</td>\n",
       "      <td>7</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Delaware</th>\n",
       "      <td>185103</td>\n",
       "      <td>235581</td>\n",
       "      <td>6100</td>\n",
       "      <td>DE</td>\n",
       "      <td>3</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>District of Columbia</th>\n",
       "      <td>11553</td>\n",
       "      <td>260223</td>\n",
       "      <td>3995</td>\n",
       "      <td>DC</td>\n",
       "      <td>3</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Florida</th>\n",
       "      <td>4605515</td>\n",
       "      <td>4485745</td>\n",
       "      <td>64019</td>\n",
       "      <td>FL</td>\n",
       "      <td>29</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Georgia</th>\n",
       "      <td>2068623</td>\n",
       "      <td>1837300</td>\n",
       "      <td>0</td>\n",
       "      <td>GA</td>\n",
       "      <td>16</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Hawaii</th>\n",
       "      <td>128815</td>\n",
       "      <td>266827</td>\n",
       "      <td>12727</td>\n",
       "      <td>HI</td>\n",
       "      <td>4</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Idaho</th>\n",
       "      <td>407199</td>\n",
       "      <td>189677</td>\n",
       "      <td>8464</td>\n",
       "      <td>ID</td>\n",
       "      <td>4</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Illinois</th>\n",
       "      <td>2118179</td>\n",
       "      <td>2977498</td>\n",
       "      <td>74112</td>\n",
       "      <td>IL</td>\n",
       "      <td>20</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Indiana</th>\n",
       "      <td>1556220</td>\n",
       "      <td>1031953</td>\n",
       "      <td>0</td>\n",
       "      <td>IN</td>\n",
       "      <td>11</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Iowa</th>\n",
       "      <td>798923</td>\n",
       "      <td>650790</td>\n",
       "      <td>11119</td>\n",
       "      <td>IA</td>\n",
       "      <td>6</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kansas</th>\n",
       "      <td>656009</td>\n",
       "      <td>414788</td>\n",
       "      <td>22698</td>\n",
       "      <td>KS</td>\n",
       "      <td>6</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Kentucky</th>\n",
       "      <td>1202942</td>\n",
       "      <td>628834</td>\n",
       "      <td>13913</td>\n",
       "      <td>KY</td>\n",
       "      <td>8</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Louisiana</th>\n",
       "      <td>1178004</td>\n",
       "      <td>779535</td>\n",
       "      <td>14018</td>\n",
       "      <td>LA</td>\n",
       "      <td>8</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Maine</th>\n",
       "      <td>334838</td>\n",
       "      <td>354873</td>\n",
       "      <td>14075</td>\n",
       "      <td>ME</td>\n",
       "      <td>4</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Maryland</th>\n",
       "      <td>873646</td>\n",
       "      <td>1497951</td>\n",
       "      <td>31839</td>\n",
       "      <td>MD</td>\n",
       "      <td>10</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Massachusetts</th>\n",
       "      <td>1083069</td>\n",
       "      <td>1964768</td>\n",
       "      <td>46910</td>\n",
       "      <td>MA</td>\n",
       "      <td>11</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Michigan</th>\n",
       "      <td>2279805</td>\n",
       "      <td>2268193</td>\n",
       "      <td>50700</td>\n",
       "      <td>MI</td>\n",
       "      <td>16</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Minnesota</th>\n",
       "      <td>1322891</td>\n",
       "      <td>1366676</td>\n",
       "      <td>36957</td>\n",
       "      <td>MN</td>\n",
       "      <td>10</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mississippi</th>\n",
       "      <td>678457</td>\n",
       "      <td>462001</td>\n",
       "      <td>3580</td>\n",
       "      <td>MS</td>\n",
       "      <td>6</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Missouri</th>\n",
       "      <td>1585753</td>\n",
       "      <td>1054889</td>\n",
       "      <td>25086</td>\n",
       "      <td>MO</td>\n",
       "      <td>10</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Montana</th>\n",
       "      <td>274120</td>\n",
       "      <td>174521</td>\n",
       "      <td>7669</td>\n",
       "      <td>MT</td>\n",
       "      <td>3</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nebraska</th>\n",
       "      <td>485819</td>\n",
       "      <td>273858</td>\n",
       "      <td>8346</td>\n",
       "      <td>NE</td>\n",
       "      <td>5</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Nevada</th>\n",
       "      <td>511319</td>\n",
       "      <td>537753</td>\n",
       "      <td>0</td>\n",
       "      <td>NV</td>\n",
       "      <td>6</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Hampshire</th>\n",
       "      <td>345789</td>\n",
       "      <td>348521</td>\n",
       "      <td>6416</td>\n",
       "      <td>NH</td>\n",
       "      <td>4</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Jersey</th>\n",
       "      <td>1535513</td>\n",
       "      <td>2021756</td>\n",
       "      <td>35949</td>\n",
       "      <td>NJ</td>\n",
       "      <td>14</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New Mexico</th>\n",
       "      <td>315875</td>\n",
       "      <td>380724</td>\n",
       "      <td>9729</td>\n",
       "      <td>NM</td>\n",
       "      <td>5</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>New York</th>\n",
       "      <td>2640570</td>\n",
       "      <td>4143874</td>\n",
       "      <td>99895</td>\n",
       "      <td>NY</td>\n",
       "      <td>29</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>North Carolina</th>\n",
       "      <td>2339603</td>\n",
       "      <td>2162074</td>\n",
       "      <td>0</td>\n",
       "      <td>NC</td>\n",
       "      <td>15</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>North Dakota</th>\n",
       "      <td>216133</td>\n",
       "      <td>93526</td>\n",
       "      <td>3769</td>\n",
       "      <td>ND</td>\n",
       "      <td>3</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ohio</th>\n",
       "      <td>2771984</td>\n",
       "      <td>2317001</td>\n",
       "      <td>44310</td>\n",
       "      <td>OH</td>\n",
       "      <td>18</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Oklahoma</th>\n",
       "      <td>947934</td>\n",
       "      <td>419788</td>\n",
       "      <td>0</td>\n",
       "      <td>OK</td>\n",
       "      <td>7</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Oregon</th>\n",
       "      <td>742506</td>\n",
       "      <td>934631</td>\n",
       "      <td>45132</td>\n",
       "      <td>OR</td>\n",
       "      <td>7</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pennsylvania</th>\n",
       "      <td>2912941</td>\n",
       "      <td>2844705</td>\n",
       "      <td>48912</td>\n",
       "      <td>PA</td>\n",
       "      <td>20</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rhode Island</th>\n",
       "      <td>179421</td>\n",
       "      <td>249902</td>\n",
       "      <td>6155</td>\n",
       "      <td>RI</td>\n",
       "      <td>4</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>South Carolina</th>\n",
       "      <td>1143611</td>\n",
       "      <td>849469</td>\n",
       "      <td>12917</td>\n",
       "      <td>SC</td>\n",
       "      <td>9</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>South Dakota</th>\n",
       "      <td>227460</td>\n",
       "      <td>114938</td>\n",
       "      <td>0</td>\n",
       "      <td>SD</td>\n",
       "      <td>3</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tennessee</th>\n",
       "      <td>1517402</td>\n",
       "      <td>867110</td>\n",
       "      <td>15919</td>\n",
       "      <td>TN</td>\n",
       "      <td>11</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Texas</th>\n",
       "      <td>4681590</td>\n",
       "      <td>3867816</td>\n",
       "      <td>71307</td>\n",
       "      <td>TX</td>\n",
       "      <td>38</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Utah</th>\n",
       "      <td>452086</td>\n",
       "      <td>274188</td>\n",
       "      <td>7695</td>\n",
       "      <td>UT</td>\n",
       "      <td>6</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vermont</th>\n",
       "      <td>95053</td>\n",
       "      <td>178179</td>\n",
       "      <td>6748</td>\n",
       "      <td>VT</td>\n",
       "      <td>3</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Virginia</th>\n",
       "      <td>1731156</td>\n",
       "      <td>1916845</td>\n",
       "      <td>27272</td>\n",
       "      <td>VA</td>\n",
       "      <td>13</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Washington</th>\n",
       "      <td>1129120</td>\n",
       "      <td>1610524</td>\n",
       "      <td>51066</td>\n",
       "      <td>WA</td>\n",
       "      <td>12</td>\n",
       "      <td>Clinton</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>West Virginia</th>\n",
       "      <td>486198</td>\n",
       "      <td>187457</td>\n",
       "      <td>8000</td>\n",
       "      <td>WV</td>\n",
       "      <td>5</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wisconsin</th>\n",
       "      <td>1403694</td>\n",
       "      <td>1380823</td>\n",
       "      <td>30934</td>\n",
       "      <td>WI</td>\n",
       "      <td>10</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wyoming</th>\n",
       "      <td>174248</td>\n",
       "      <td>55949</td>\n",
       "      <td>2512</td>\n",
       "      <td>WY</td>\n",
       "      <td>3</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        Trump  Clinton   Stein  ST  ElectoralVotes   Winner\n",
       "State                                                                      \n",
       "Alabama               1306925   718084    9287  AL               9    Trump\n",
       "Arizona               1021154   936250   25255  AZ              11    Trump\n",
       "Arkansas               677904   378729    9837  AR               6    Trump\n",
       "California            3916209  7362490  220312  CA              55  Clinton\n",
       "Colorado              1137455  1212209   33147  CO               9  Clinton\n",
       "Connecticut            668266   884432   22793  CT               7  Clinton\n",
       "Delaware               185103   235581    6100  DE               3  Clinton\n",
       "District of Columbia    11553   260223    3995  DC               3  Clinton\n",
       "Florida               4605515  4485745   64019  FL              29    Trump\n",
       "Georgia               2068623  1837300       0  GA              16    Trump\n",
       "Hawaii                 128815   266827   12727  HI               4  Clinton\n",
       "Idaho                  407199   189677    8464  ID               4    Trump\n",
       "Illinois              2118179  2977498   74112  IL              20  Clinton\n",
       "Indiana               1556220  1031953       0  IN              11    Trump\n",
       "Iowa                   798923   650790   11119  IA               6    Trump\n",
       "Kansas                 656009   414788   22698  KS               6    Trump\n",
       "Kentucky              1202942   628834   13913  KY               8    Trump\n",
       "Louisiana             1178004   779535   14018  LA               8    Trump\n",
       "Maine                  334838   354873   14075  ME               4  Clinton\n",
       "Maryland               873646  1497951   31839  MD              10  Clinton\n",
       "Massachusetts         1083069  1964768   46910  MA              11  Clinton\n",
       "Michigan              2279805  2268193   50700  MI              16    Trump\n",
       "Minnesota             1322891  1366676   36957  MN              10  Clinton\n",
       "Mississippi            678457   462001    3580  MS               6    Trump\n",
       "Missouri              1585753  1054889   25086  MO              10    Trump\n",
       "Montana                274120   174521    7669  MT               3    Trump\n",
       "Nebraska               485819   273858    8346  NE               5    Trump\n",
       "Nevada                 511319   537753       0  NV               6  Clinton\n",
       "New Hampshire          345789   348521    6416  NH               4  Clinton\n",
       "New Jersey            1535513  2021756   35949  NJ              14  Clinton\n",
       "New Mexico             315875   380724    9729  NM               5  Clinton\n",
       "New York              2640570  4143874   99895  NY              29  Clinton\n",
       "North Carolina        2339603  2162074       0  NC              15    Trump\n",
       "North Dakota           216133    93526    3769  ND               3    Trump\n",
       "Ohio                  2771984  2317001   44310  OH              18    Trump\n",
       "Oklahoma               947934   419788       0  OK               7    Trump\n",
       "Oregon                 742506   934631   45132  OR               7  Clinton\n",
       "Pennsylvania          2912941  2844705   48912  PA              20    Trump\n",
       "Rhode Island           179421   249902    6155  RI               4  Clinton\n",
       "South Carolina        1143611   849469   12917  SC               9    Trump\n",
       "South Dakota           227460   114938       0  SD               3    Trump\n",
       "Tennessee             1517402   867110   15919  TN              11    Trump\n",
       "Texas                 4681590  3867816   71307  TX              38    Trump\n",
       "Utah                   452086   274188    7695  UT               6    Trump\n",
       "Vermont                 95053   178179    6748  VT               3  Clinton\n",
       "Virginia              1731156  1916845   27272  VA              13  Clinton\n",
       "Washington            1129120  1610524   51066  WA              12  Clinton\n",
       "West Virginia          486198   187457    8000  WV               5    Trump\n",
       "Wisconsin             1403694  1380823   30934  WI              10    Trump\n",
       "Wyoming                174248    55949    2512  WY               3    Trump"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Trouver le gagnant pour chaque état\n",
    "votes_by_state['Winner'] = votes_by_state[['Trump', 'Clinton', 'Stein']].idxmax(axis=1)\n",
    "votes_by_state"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Qui a obtenu le plus d'états indépendamment du nombre total de voix ou de grands électeurs ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.213077Z",
     "iopub.status.busy": "2026-10-30T13:11:11.212867Z",
     "iopub.status.idle": "2026-10-30T13:11:11.217720Z",
     "shell.execute_reply": "2026-10-30T13:11:11.217244Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Winner\n",
       "Trump      29\n",
       "Clinton    21\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "votes_by_state['Winner'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Bonus** : on peut afficher sur une carte choroplèthe le résultat des élections. On colore chaque État selon le candidat qui a remporté le plus de voix (en effet, aux États-Unis, le président est élu par un collège électoral où chaque État dispose d’un certain nombre de grands électeurs, en général proportionnel au nombre d’habitants). "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.219708Z",
     "iopub.status.busy": "2026-10-30T13:11:11.219524Z",
     "iopub.status.idle": "2026-10-30T13:11:11.266787Z",
     "shell.execute_reply": "2026-10-30T13:11:11.266406Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>                            <div id=\"5b39fe42-ff0d-4947-93c6-e15fe69415f8\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div>            <script type=\"text/javascript\">                require([\"plotly\"], function(Plotly) {                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById(\"5b39fe42-ff0d-4947-93c6-e15fe69415f8\")) {                    Plotly.newPlot(                        \"5b39fe42-ff0d-4947-93c6-e15fe69415f8\",                        [{\"colorscale\":[[0.0,\"red\"],[1.0,\"red\"]],\"customdata\":[[\"Trump\",\"9\",\"1 306 925\",\"718 084\",\"9 287\",\"AL\"],[\"Trump\",\"11\",\"1 021 154\",\"936 250\",\"25 255\",\"AZ\"],[\"Trump\",\"6\",\"677 904\",\"378 729\",\"9 837\",\"AR\"],[\"Trump\",\"29\",\"4 605 515\",\"4 485 745\",\"64 019\",\"FL\"],[\"Trump\",\"16\",\"2 068 623\",\"1 837 300\",\"0\",\"GA\"],[\"Trump\",\"4\",\"407 199\",\"189 677\",\"8 464\",\"ID\"],[\"Trump\",\"11\",\"1 556 220\",\"1 031 953\",\"0\",\"IN\"],[\"Trump\",\"6\",\"798 923\",\"650 790\",\"11 119\",\"IA\"],[\"Trump\",\"6\",\"656 009\",\"414 788\",\"22 698\",\"KS\"],[\"Trump\",\"8\",\"1 202 942\",\"628 834\",\"13 913\",\"KY\"],[\"Trump\",\"8\",\"1 178 004\",\"779 535\",\"14 018\",\"LA\"],[\"Trump\",\"16\",\"2 279 805\",\"2 268 193\",\"50 700\",\"MI\"],[\"Trump\",\"6\",\"678 457\",\"462 001\",\"3 580\",\"MS\"],[\"Trump\",\"10\",\"1 585 753\",\"1 054 889\",\"25 086\",\"MO\"],[\"Trump\",\"3\",\"274 120\",\"174 521\",\"7 669\",\"MT\"],[\"Trump\",\"5\",\"485 819\",\"273 858\",\"8 346\",\"NE\"],[\"Trump\",\"15\",\"2 339 603\",\"2 162 074\",\"0\",\"NC\"],[\"Trump\",\"3\",\"216 133\",\"93 526\",\"3 769\",\"ND\"],[\"Trump\",\"18\",\"2 771 984\",\"2 317 001\",\"44 310\",\"OH\"],[\"Trump\",\"7\",\"947 934\",\"419 788\",\"0\",\"OK\"],[\"Trump\",\"20\",\"2 912 941\",\"2 844 705\",\"48 912\",\"PA\"],[\"Trump\",\"9\",\"1 143 611\",\"849 469\",\"12 917\",\"SC\"],[\"Trump\",\"3\",\"227 460\",\"114 938\",\"0\",\"SD\"],[\"Trump\",\"11\",\"1 517 402\",\"867 110\",\"15 919\",\"TN\"],[\"Trump\",\"38\",\"4 681 590\",\"3 867 816\",\"71 307\",\"TX\"],[\"Trump\",\"6\",\"452 086\",\"274 188\",\"7 695\",\"UT\"],[\"Trump\",\"5\",\"486 198\",\"187 457\",\"8 000\",\"WV\"],[\"Trump\",\"10\",\"1 403 694\",\"1 380 823\",\"30 934\",\"WI\"],[\"Trump\",\"3\",\"174 248\",\"55 949\",\"2 512\",\"WY\"]],\"geo\":\"geo\",\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003eWinner=%{customdata[0]}\\u003cbr\\u003eGrandes Electeurs=%{customdata[1]}\\u003cbr\\u003eTrump votes=%{customdata[2]}\\u003cbr\\u003eClinton votes=%{customdata[3]}\\u003cbr\\u003eStein votes=%{customdata[4]}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"Alabama\",\"Arizona\",\"Arkansas\",\"Florida\",\"Georgia\",\"Idaho\",\"Indiana\",\"Iowa\",\"Kansas\",\"Kentucky\",\"Louisiana\",\"Michigan\",\"Mississippi\",\"Missouri\",\"Montana\",\"Nebraska\",\"North Carolina\",\"North Dakota\",\"Ohio\",\"Oklahoma\",\"Pennsylvania\",\"South Carolina\",\"South Dakota\",\"Tennessee\",\"Texas\",\"Utah\",\"West Virginia\",\"Wisconsin\",\"Wyoming\"],\"locationmode\":\"USA-states\",\"locations\":[\"AL\",\"AZ\",\"AR\",\"FL\",\"GA\",\"ID\",\"IN\",\"IA\",\"KS\",\"KY\",\"LA\",\"MI\",\"MS\",\"MO\",\"MT\",\"NE\",\"NC\",\"ND\",\"OH\",\"OK\",\"PA\",\"SC\",\"SD\",\"TN\",\"TX\",\"UT\",\"WV\",\"WI\",\"WY\"],\"name\":\"Trump\",\"showlegend\":true,\"showscale\":false,\"z\":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],\"type\":\"choropleth\"},{\"colorscale\":[[0.0,\"blue\"],[1.0,\"blue\"]],\"customdata\":[[\"Clinton\",\"55\",\"3 916 209\",\"7 362 490\",\"220 312\",\"CA\"],[\"Clinton\",\"9\",\"1 137 455\",\"1 212 209\",\"33 147\",\"CO\"],[\"Clinton\",\"7\",\"668 266\",\"884 432\",\"22 793\",\"CT\"],[\"Clinton\",\"3\",\"185 103\",\"235 581\",\"6 100\",\"DE\"],[\"Clinton\",\"3\",\"11 553\",\"260 223\",\"3 995\",\"DC\"],[\"Clinton\",\"4\",\"128 815\",\"266 827\",\"12 727\",\"HI\"],[\"Clinton\",\"20\",\"2 118 179\",\"2 977 498\",\"74 112\",\"IL\"],[\"Clinton\",\"4\",\"334 838\",\"354 873\",\"14 075\",\"ME\"],[\"Clinton\",\"10\",\"873 646\",\"1 497 951\",\"31 839\",\"MD\"],[\"Clinton\",\"11\",\"1 083 069\",\"1 964 768\",\"46 910\",\"MA\"],[\"Clinton\",\"10\",\"1 322 891\",\"1 366 676\",\"36 957\",\"MN\"],[\"Clinton\",\"6\",\"511 319\",\"537 753\",\"0\",\"NV\"],[\"Clinton\",\"4\",\"345 789\",\"348 521\",\"6 416\",\"NH\"],[\"Clinton\",\"14\",\"1 535 513\",\"2 021 756\",\"35 949\",\"NJ\"],[\"Clinton\",\"5\",\"315 875\",\"380 724\",\"9 729\",\"NM\"],[\"Clinton\",\"29\",\"2 640 570\",\"4 143 874\",\"99 895\",\"NY\"],[\"Clinton\",\"7\",\"742 506\",\"934 631\",\"45 132\",\"OR\"],[\"Clinton\",\"4\",\"179 421\",\"249 902\",\"6 155\",\"RI\"],[\"Clinton\",\"3\",\"95 053\",\"178 179\",\"6 748\",\"VT\"],[\"Clinton\",\"13\",\"1 731 156\",\"1 916 845\",\"27 272\",\"VA\"],[\"Clinton\",\"12\",\"1 129 120\",\"1 610 524\",\"51 066\",\"WA\"]],\"geo\":\"geo\",\"hovertemplate\":\"\\u003cb\\u003e%{hovertext}\\u003c\\u002fb\\u003e\\u003cbr\\u003e\\u003cbr\\u003eWinner=%{customdata[0]}\\u003cbr\\u003eGrandes Electeurs=%{customdata[1]}\\u003cbr\\u003eTrump votes=%{customdata[2]}\\u003cbr\\u003eClinton votes=%{customdata[3]}\\u003cbr\\u003eStein votes=%{customdata[4]}\\u003cextra\\u003e\\u003c\\u002fextra\\u003e\",\"hovertext\":[\"California\",\"Colorado\",\"Connecticut\",\"Delaware\",\"District of Columbia\",\"Hawaii\",\"Illinois\",\"Maine\",\"Maryland\",\"Massachusetts\",\"Minnesota\",\"Nevada\",\"New Hampshire\",\"New Jersey\",\"New Mexico\",\"New York\",\"Oregon\",\"Rhode Island\",\"Vermont\",\"Virginia\",\"Washington\"],\"locationmode\":\"USA-states\",\"locations\":[\"CA\",\"CO\",\"CT\",\"DE\",\"DC\",\"HI\",\"IL\",\"ME\",\"MD\",\"MA\",\"MN\",\"NV\",\"NH\",\"NJ\",\"NM\",\"NY\",\"OR\",\"RI\",\"VT\",\"VA\",\"WA\"],\"name\":\"Clinton\",\"showlegend\":true,\"showscale\":false,\"z\":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],\"type\":\"choropleth\"}],                        {\"template\":{\"data\":{\"histogram2dcontour\":[{\"type\":\"histogram2dcontour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"choropleth\":[{\"type\":\"choropleth\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"histogram2d\":[{\"type\":\"histogram2d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmap\":[{\"type\":\"heatmap\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmapgl\":[{\"type\":\"heatmapgl\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"contourcarpet\":[{\"type\":\"contourcarpet\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"contour\":[{\"type\":\"contour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"surface\":[{\"type\":\"surface\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"mesh3d\":[{\"type\":\"mesh3d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"scatter\":[{\"fillpattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2},\"type\":\"scatter\"}],\"parcoords\":[{\"type\":\"parcoords\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolargl\":[{\"type\":\"scatterpolargl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"scattergeo\":[{\"type\":\"scattergeo\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolar\":[{\"type\":\"scatterpolar\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"scattergl\":[{\"type\":\"scattergl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatter3d\":[{\"type\":\"scatter3d\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattermapbox\":[{\"type\":\"scattermapbox\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterternary\":[{\"type\":\"scatterternary\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattercarpet\":[{\"type\":\"scattercarpet\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}]},\"layout\":{\"autotypenumbers\":\"strict\",\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"bgcolor\":\"#E5ECF6\",\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"ternary\":{\"bgcolor\":\"#E5ECF6\",\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]]},\"xaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"yaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"geo\":{\"bgcolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"subunitcolor\":\"white\",\"showland\":true,\"showlakes\":true,\"lakecolor\":\"white\"},\"title\":{\"x\":0.05},\"mapbox\":{\"style\":\"light\"}}},\"geo\":{\"domain\":{\"x\":[0.0,1.0],\"y\":[0.0,1.0]},\"center\":{},\"scope\":\"usa\"},\"legend\":{\"title\":{\"text\":\"Winner\"},\"tracegroupgap\":0},\"title\":{\"text\":\"R\\u00e9sultats des \\u00e9lections US 2016 par \\u00c9tat\"}},                        {\"responsive\": true}                    ).then(function(){\n",
       "                            \n",
       "var gd = document.getElementById('5b39fe42-ff0d-4947-93c6-e15fe69415f8');\n",
       "var x = new MutationObserver(function (mutations, observer) {{\n",
       "        var display = window.getComputedStyle(gd).display;\n",
       "        if (!display || display === 'none') {{\n",
       "            console.log([gd, 'removed!']);\n",
       "            Plotly.purge(gd);\n",
       "            observer.disconnect();\n",
       "        }}\n",
       "}});\n",
       "\n",
       "// Listen for the removal of the full notebook cells\n",
       "var notebookContainer = gd.closest('#notebook-container');\n",
       "if (notebookContainer) {{\n",
       "    x.observe(notebookContainer, {childList: true});\n",
       "}}\n",
       "\n",
       "// Listen for the clearing of the current output cell\n",
       "var outputEl = gd.closest('.output');\n",
       "if (outputEl) {{\n",
       "    x.observe(outputEl, {childList: true});\n",
       "}}\n",
       "\n",
       "                        })                };                });            </script>        </div>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Transformer l'index en colonne pour plotly\n",
    "votes_map = votes_by_state.reset_index()\n",
    "\n",
    "# Fonction formatage français pour l'affichage des nombres avec des espaces comme séparateurs de milliers\n",
    "fmt = lambda n: f\"{n:,}\".replace(\",\", \" \")\n",
    "\n",
    "# Carte choroplèthe\n",
    "fig = px.choropleth(\n",
    "    votes_map,\n",
    "    locations='ST',\n",
    "    locationmode='USA-states',\n",
    "    color='Winner',\n",
    "    hover_name='State',\n",
    "    hover_data={\n",
    "        'Winner': True,\n",
    "        'Grandes Electeurs': votes_map['ElectoralVotes'].apply(fmt),\n",
    "        'Trump votes': votes_map['Trump'].apply(fmt),\n",
    "        'Clinton votes': votes_map['Clinton'].apply(fmt),\n",
    "        'Stein votes': votes_map['Stein'].apply(fmt),\n",
    "        'ST': False,\n",
    "    },\n",
    "    color_discrete_map={'Trump':'red','Clinton':'blue','Stein':'green'},\n",
    "    scope='usa',\n",
    "    title='Résultats des élections US 2016 par État'\n",
    ")\n",
    "\n",
    "fig.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On regarde juste les trois lignes associées aux états du Michigan, de Pennsylvanie et du Wisconsin."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.268522Z",
     "iopub.status.busy": "2026-10-30T13:11:11.268335Z",
     "iopub.status.idle": "2026-10-30T13:11:11.274813Z",
     "shell.execute_reply": "2026-10-30T13:11:11.274290Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "      <th>ST</th>\n",
       "      <th>ElectoralVotes</th>\n",
       "      <th>Winner</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>State</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Michigan</th>\n",
       "      <td>2279805</td>\n",
       "      <td>2268193</td>\n",
       "      <td>50700</td>\n",
       "      <td>MI</td>\n",
       "      <td>16</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Wisconsin</th>\n",
       "      <td>1403694</td>\n",
       "      <td>1380823</td>\n",
       "      <td>30934</td>\n",
       "      <td>WI</td>\n",
       "      <td>10</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pennsylvania</th>\n",
       "      <td>2912941</td>\n",
       "      <td>2844705</td>\n",
       "      <td>48912</td>\n",
       "      <td>PA</td>\n",
       "      <td>20</td>\n",
       "      <td>Trump</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                Trump  Clinton  Stein  ST  ElectoralVotes Winner\n",
       "State                                                           \n",
       "Michigan      2279805  2268193  50700  MI              16  Trump\n",
       "Wisconsin     1403694  1380823  30934  WI              10  Trump\n",
       "Pennsylvania  2912941  2844705  48912  PA              20  Trump"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "votes_by_state.loc[['Michigan', 'Wisconsin', 'Pennsylvania']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.276622Z",
     "iopub.status.busy": "2026-10-30T13:11:11.276432Z",
     "iopub.status.idle": "2026-10-30T13:11:11.286823Z",
     "shell.execute_reply": "2026-10-30T13:11:11.286318Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Votes</th>\n",
       "      <th>PercentageVotes</th>\n",
       "      <th>ElectoralVotes</th>\n",
       "      <th>PercentageElectoralVotes</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Winner</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Clinton</th>\n",
       "      <td>62426228</td>\n",
       "      <td>50.551307</td>\n",
       "      <td>233</td>\n",
       "      <td>43.551402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Trump</th>\n",
       "      <td>61064602</td>\n",
       "      <td>49.448693</td>\n",
       "      <td>302</td>\n",
       "      <td>56.448598</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            Votes  PercentageVotes  ElectoralVotes  PercentageElectoralVotes\n",
       "Winner                                                                      \n",
       "Clinton  62426228        50.551307             233                 43.551402\n",
       "Trump    61064602        49.448693             302                 56.448598"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Résultats finaux\n",
    "final_results = votes_by_state.pivot_table(index='Winner', values='ElectoralVotes', aggfunc='sum')\n",
    "\n",
    "# Ajouter le nombre de votes pour chaque candidat, le pourcentage de grands électeurs et le pourcentage de votes\n",
    "final_results.insert(0, 'Votes', votes_by_state[['Trump', 'Clinton', 'Stein']].sum())\n",
    "final_results.insert(1, 'PercentageVotes' , final_results['Votes'] / final_results['Votes'].sum() * 100)\n",
    "final_results['PercentageElectoralVotes'] =  final_results['ElectoralVotes'] / final_results['ElectoralVotes'].sum() * 100\n",
    "final_results\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sur [Wikipedia](https://fr.wikipedia.org/wiki/%C3%89lection_pr%C3%A9sidentielle_am%C3%A9ricaine_de_2016) on peut trouver les résultats suivants pour les élections :\n",
    "\n",
    "- Hillary Clinton : 65 853 514 voix, 232 grands électeurs\n",
    "- Donald Trump : 62 984 828 voix, 306 grands électeurs\n",
    "\n",
    "Nos données ne sont donc pas complètes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On voit que Trump a obtenu 305 grands électeurs contre 233 pour Clinton. Il a donc été élu président des USA. Cependant, si les résultats dans les états du Michigan, de Pennsylvanie et du Wisconsin avaient été différents, Clinton aurait obtenu plus de grands électeurs (et Trump moins). Aurait-elle été élue ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.288423Z",
     "iopub.status.busy": "2026-10-30T13:11:11.288268Z",
     "iopub.status.idle": "2026-10-30T13:11:11.293736Z",
     "shell.execute_reply": "2026-10-30T13:11:11.293344Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Résultats ajustés si la triche est confirmée :**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "- Trump : 256 grands électeurs"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "- Clinton : 279 grands électeurs"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Calcul de la somme des grands électeurs des états impliqués dans la triche éventuelle\n",
    "si_triche_verifiee = electoral_votes['Michigan'] + electoral_votes['Wisconsin'] + electoral_votes['Pennsylvania']\n",
    "\n",
    "# Ajuster les résultats de Trump et Clinton\n",
    "new_Trump = final_results.loc['Trump','ElectoralVotes'] - si_triche_verifiee  # Déduire les grands électeurs pour Trump\n",
    "new_Clinton = final_results.loc['Clinton','ElectoralVotes'] + si_triche_verifiee  # Ajouter les grands électeurs à Clinton\n",
    "\n",
    "# Afficher les résultats ajustés\n",
    "display(Markdown(\"**Résultats ajustés si la triche est confirmée :**\"))\n",
    "display(Markdown(f\"- Trump : {new_Trump} grands électeurs\"))\n",
    "display(Markdown(f\"- Clinton : {new_Clinton} grands électeurs\"))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sélection des données dans les **États** du Michigan, de la **Pennsylvanie** et du **Wisconsin**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nous allons examiner les données relatives aux **États** du **Michigan**, du **Wisconsin** et de la **Pennsylvanie**. Nous nous intéressons aux **comtés** où **chaque candidat** a obtenu **plus de 10 voix**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.295498Z",
     "iopub.status.busy": "2026-10-30T13:11:11.295345Z",
     "iopub.status.idle": "2026-10-30T13:11:11.304558Z",
     "shell.execute_reply": "2026-10-30T13:11:11.304146Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>State</th>\n",
       "      <th>ST</th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>21635</td>\n",
       "      <td>16490</td>\n",
       "      <td>379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>2158</td>\n",
       "      <td>1156</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Pennsylvania</td>\n",
       "      <td>PA</td>\n",
       "      <td>22676</td>\n",
       "      <td>6849</td>\n",
       "      <td>136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>WI</td>\n",
       "      <td>17310</td>\n",
       "      <td>18524</td>\n",
       "      <td>583</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>WI</td>\n",
       "      <td>31044</td>\n",
       "      <td>17391</td>\n",
       "      <td>449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3057</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>WI</td>\n",
       "      <td>39010</td>\n",
       "      <td>26476</td>\n",
       "      <td>641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3090</th>\n",
       "      <td>Pennsylvania</td>\n",
       "      <td>PA</td>\n",
       "      <td>257488</td>\n",
       "      <td>363017</td>\n",
       "      <td>5021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3105</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>WI</td>\n",
       "      <td>46620</td>\n",
       "      <td>42506</td>\n",
       "      <td>834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3125</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>7228</td>\n",
       "      <td>3973</td>\n",
       "      <td>116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3139</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>224589</td>\n",
       "      <td>176238</td>\n",
       "      <td>3886</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>220 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             State  ST   Trump  Clinton  Stein\n",
       "6         Michigan  MI   21635    16490    379\n",
       "12        Michigan  MI    2158     1156     49\n",
       "20    Pennsylvania  PA   22676     6849    136\n",
       "26       Wisconsin  WI   17310    18524    583\n",
       "33       Wisconsin  WI   31044    17391    449\n",
       "...            ...  ..     ...      ...    ...\n",
       "3057     Wisconsin  WI   39010    26476    641\n",
       "3090  Pennsylvania  PA  257488   363017   5021\n",
       "3105     Wisconsin  WI   46620    42506    834\n",
       "3125      Michigan  MI    7228     3973    116\n",
       "3139      Michigan  MI  224589   176238   3886\n",
       "\n",
       "[220 rows x 5 columns]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mask1 = (Tot['State'] == 'Michigan') | (Tot['State'] == 'Wisconsin') | (Tot['State'] == 'Pennsylvania') \n",
    "# mask1 = Tot['State'].isin(['Michigan', 'Wisconsin', 'Pennsylvania'])\n",
    "\n",
    "mask2 = (Tot['Trump'] >= 10) & (Tot['Clinton'] >= 10) & (Tot['Stein'] >= 10)\n",
    "\n",
    "# Nouveau DataFrame avec les lignes sélectionnées\n",
    "Sel = Tot[mask1 & mask2].copy() \n",
    "Sel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Combien de bureaux de vote sont concernés par ces critères ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.306216Z",
     "iopub.status.busy": "2026-10-30T13:11:11.306057Z",
     "iopub.status.idle": "2026-10-30T13:11:11.309288Z",
     "shell.execute_reply": "2026-10-30T13:11:11.308890Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Nombre de bureaux de vote sélectionnés :** 220"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nb_bureaux = Sel.shape[0]\n",
    "display(Markdown(f\"**Nombre de bureaux de vote sélectionnés :** {nb_bureaux}\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analyse des données"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nous allons ajouter, pour **chaque candidat**, une colonne contenant le **deuxième chiffre** du **nombre de voix** :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.310990Z",
     "iopub.status.busy": "2026-10-30T13:11:11.310838Z",
     "iopub.status.idle": "2026-10-30T13:11:11.321408Z",
     "shell.execute_reply": "2026-10-30T13:11:11.320972Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>State</th>\n",
       "      <th>ST</th>\n",
       "      <th>Trump</th>\n",
       "      <th>Clinton</th>\n",
       "      <th>Stein</th>\n",
       "      <th>Trump_2chiffre</th>\n",
       "      <th>Clinton_2chiffre</th>\n",
       "      <th>Stein_2chiffre</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>21635</td>\n",
       "      <td>16490</td>\n",
       "      <td>379</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>2158</td>\n",
       "      <td>1156</td>\n",
       "      <td>49</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Pennsylvania</td>\n",
       "      <td>PA</td>\n",
       "      <td>22676</td>\n",
       "      <td>6849</td>\n",
       "      <td>136</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>WI</td>\n",
       "      <td>17310</td>\n",
       "      <td>18524</td>\n",
       "      <td>583</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>WI</td>\n",
       "      <td>31044</td>\n",
       "      <td>17391</td>\n",
       "      <td>449</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3057</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>WI</td>\n",
       "      <td>39010</td>\n",
       "      <td>26476</td>\n",
       "      <td>641</td>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3090</th>\n",
       "      <td>Pennsylvania</td>\n",
       "      <td>PA</td>\n",
       "      <td>257488</td>\n",
       "      <td>363017</td>\n",
       "      <td>5021</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3105</th>\n",
       "      <td>Wisconsin</td>\n",
       "      <td>WI</td>\n",
       "      <td>46620</td>\n",
       "      <td>42506</td>\n",
       "      <td>834</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3125</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>7228</td>\n",
       "      <td>3973</td>\n",
       "      <td>116</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3139</th>\n",
       "      <td>Michigan</td>\n",
       "      <td>MI</td>\n",
       "      <td>224589</td>\n",
       "      <td>176238</td>\n",
       "      <td>3886</td>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>220 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             State  ST   Trump  Clinton  Stein  Trump_2chiffre  \\\n",
       "6         Michigan  MI   21635    16490    379               1   \n",
       "12        Michigan  MI    2158     1156     49               1   \n",
       "20    Pennsylvania  PA   22676     6849    136               2   \n",
       "26       Wisconsin  WI   17310    18524    583               7   \n",
       "33       Wisconsin  WI   31044    17391    449               1   \n",
       "...            ...  ..     ...      ...    ...             ...   \n",
       "3057     Wisconsin  WI   39010    26476    641               9   \n",
       "3090  Pennsylvania  PA  257488   363017   5021               5   \n",
       "3105     Wisconsin  WI   46620    42506    834               6   \n",
       "3125      Michigan  MI    7228     3973    116               2   \n",
       "3139      Michigan  MI  224589   176238   3886               2   \n",
       "\n",
       "      Clinton_2chiffre  Stein_2chiffre  \n",
       "6                    6               7  \n",
       "12                   1               9  \n",
       "20                   8               3  \n",
       "26                   8               8  \n",
       "33                   7               4  \n",
       "...                ...             ...  \n",
       "3057                 6               4  \n",
       "3090                 6               0  \n",
       "3105                 2               3  \n",
       "3125                 9               1  \n",
       "3139                 7               8  \n",
       "\n",
       "[220 rows x 8 columns]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for candidat in [\"Trump\", \"Clinton\", \"Stein\"]:\n",
    "    Sel.loc[:, candidat + '_2chiffre'] = Sel[candidat].apply(lambda x: int(str(x)[1]))    \n",
    "\n",
    "Sel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On crée un DataFrame avec l'histogramme des secondes chiffres par candidat. Autrement dit, on compte le nombre de fois où chaque chiffre est apparu en deuxième position dans les nombres de votes.\n",
    "\n",
    "Pour cela on utilise `apply` qui applique une fonction donnée (ici, `pd.Series.value_counts`) à chaque colonne du DataFrame résultant. La fonction `pd.Series.value_counts` compte les occurrences uniques des valeurs dans une série (ici une colonne) et renvoie une série dont les indices sont les valeurs uniques présentes dans la colonne d'origine. Ces valeurs sont triées par défaut en ordre décroissant de fréquence. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.323158Z",
     "iopub.status.busy": "2026-10-30T13:11:11.322960Z",
     "iopub.status.idle": "2026-10-30T13:11:11.332084Z",
     "shell.execute_reply": "2026-10-30T13:11:11.331666Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Trump_histo</th>\n",
       "      <th>Clinton_histo</th>\n",
       "      <th>Stein_histo</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Chiffre</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.086364</td>\n",
       "      <td>0.109091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.140909</td>\n",
       "      <td>0.113636</td>\n",
       "      <td>0.136364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.104545</td>\n",
       "      <td>0.122727</td>\n",
       "      <td>0.063636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.095455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.113636</td>\n",
       "      <td>0.104545</td>\n",
       "      <td>0.163636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.104545</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.027273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.122727</td>\n",
       "      <td>0.109091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.095455</td>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.063636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.063636</td>\n",
       "      <td>0.095455</td>\n",
       "      <td>0.104545</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.059091</td>\n",
       "      <td>0.063636</td>\n",
       "      <td>0.127273</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Trump_histo  Clinton_histo  Stein_histo\n",
       "Chiffre                                         \n",
       "0           0.100000       0.086364     0.109091\n",
       "1           0.140909       0.113636     0.136364\n",
       "2           0.104545       0.122727     0.063636\n",
       "3           0.109091       0.090909     0.095455\n",
       "4           0.113636       0.104545     0.163636\n",
       "5           0.104545       0.090909     0.027273\n",
       "6           0.109091       0.122727     0.109091\n",
       "7           0.095455       0.109091     0.063636\n",
       "8           0.063636       0.095455     0.104545\n",
       "9           0.059091       0.063636     0.127273"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Première méthode\n",
    "# Trump_histo = Sel['Trump_2chiffre'].value_counts()\n",
    "# Clinton_histo = Sel['Clinton_2chiffre'].value_counts()\n",
    "# Stein_histo = Sel['Stein_2chiffre'].value_counts()\n",
    "\n",
    "Trump_histo = Sel['Trump_2chiffre'].value_counts(normalize=True)\n",
    "Clinton_histo = Sel['Clinton_2chiffre'].value_counts(normalize=True)\n",
    "Stein_histo = Sel['Stein_2chiffre'].value_counts(normalize=True)\n",
    "\n",
    "His = pd.DataFrame({'Trump_histo': Trump_histo, \n",
    "                    'Clinton_histo': Clinton_histo, \n",
    "                    'Stein_histo': Stein_histo})\n",
    "His = His.rename_axis('Chiffre')\n",
    "display(His)\n",
    "\n",
    "# Deuxième méthode\n",
    "# cols = ['Trump_2chiffre', 'Clinton_2chiffre', 'Stein_2chiffre']\n",
    "# # His = Sel[cols].apply(pd.Series.value_counts) / nb_bureaux\n",
    "# His = Sel[cols].apply(lambda x: x.value_counts(normalize=True))\n",
    "# His = His.rename_axis('Chiffre')\n",
    "# His = His.rename(columns={\"Trump_2chiffre\": \"Trump_histo\", \"Clinton_2chiffre\": \"Clinton_histo\", \"Stein_2chiffre\": \"Stein_histo\"})\n",
    "# display(His)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On ajoute la colonne `Benford` avec les effectifs théoriques des seconde chiffres attendus par la loi de Benford :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.333872Z",
     "iopub.status.busy": "2026-10-30T13:11:11.333715Z",
     "iopub.status.idle": "2026-10-30T13:11:11.340841Z",
     "shell.execute_reply": "2026-10-30T13:11:11.340435Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Trump_histo</th>\n",
       "      <th>Clinton_histo</th>\n",
       "      <th>Stein_histo</th>\n",
       "      <th>Benford</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Chiffre</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.086364</td>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.119679</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.140909</td>\n",
       "      <td>0.113636</td>\n",
       "      <td>0.136364</td>\n",
       "      <td>0.113890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.104545</td>\n",
       "      <td>0.122727</td>\n",
       "      <td>0.063636</td>\n",
       "      <td>0.108821</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.095455</td>\n",
       "      <td>0.104330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.113636</td>\n",
       "      <td>0.104545</td>\n",
       "      <td>0.163636</td>\n",
       "      <td>0.100308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.104545</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.027273</td>\n",
       "      <td>0.096677</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.122727</td>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.093375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.095455</td>\n",
       "      <td>0.109091</td>\n",
       "      <td>0.063636</td>\n",
       "      <td>0.090352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.063636</td>\n",
       "      <td>0.095455</td>\n",
       "      <td>0.104545</td>\n",
       "      <td>0.087570</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.059091</td>\n",
       "      <td>0.063636</td>\n",
       "      <td>0.127273</td>\n",
       "      <td>0.084997</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Trump_histo  Clinton_histo  Stein_histo   Benford\n",
       "Chiffre                                                   \n",
       "0           0.100000       0.086364     0.109091  0.119679\n",
       "1           0.140909       0.113636     0.136364  0.113890\n",
       "2           0.104545       0.122727     0.063636  0.108821\n",
       "3           0.109091       0.090909     0.095455  0.104330\n",
       "4           0.113636       0.104545     0.163636  0.100308\n",
       "5           0.104545       0.090909     0.027273  0.096677\n",
       "6           0.109091       0.122727     0.109091  0.093375\n",
       "7           0.095455       0.109091     0.063636  0.090352\n",
       "8           0.063636       0.095455     0.104545  0.087570\n",
       "9           0.059091       0.063636     0.127273  0.084997"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# On ajoute la colonne Benford avec les effectifs théoriques\n",
    "# His['Benford'] = { Chiffre : round(p(Chiffre)*nb_bureaux) for Chiffre in His.index}\n",
    "His['Benford'] = { Chiffre : p(Chiffre) for Chiffre in His.index}\n",
    "His"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On affiche la distribution des seconds chiffres par candidat. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.342506Z",
     "iopub.status.busy": "2026-10-30T13:11:11.342352Z",
     "iopub.status.idle": "2026-10-30T13:11:11.880509Z",
     "shell.execute_reply": "2026-10-30T13:11:11.880045Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHpCAYAAACful8UAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAADP4klEQVR4nOzdeXyU1d338c9kkpnJTvZ9QhZCgiBgqBIsYquNxeW2traoLVoFW5pWBWotFG0Vcan6aLSyFEtFrAj3favt0z5UxQW0gloRqJqwL9kme0L2STKZ54+EIUMWkpCQAN/36zWv18yZM9f1m19OrjPnWs5lcDqdTkRERERERERk0HkMdwAiIiIiIiIi5yoNukVERERERESGiAbdIiIiIiIiIkNEg24RERERERGRIaJBt4iIiIiIiMgQ0aBbREREREREZIho0C0iIiIiIiIyRDyHO4CzSVtbG83NzRiNRgwGw3CHIyIi5yin04nD4cBkMuHhof3jA6E+W0REhlpf+2sNuvuhubmZjz76aLjDEBGR88Sll16KxWIZ7jDOSuqzRUTkTDlVf61Bdz8YjUYAxo8f73ouIiIy2BwOB19++aX6mtOgPltERIZaX/trDbr74fjpaUajUR24iIgMuZF6WvSKFSt48sknsdlsXHDBBWRnZzN9+vRu69psNn75y1+yY8cO9u/fz9133012drZbnRdeeIF169bx5ZdfApCens6jjz7KxRdf7Krz4IMP8tBDD7l9LiIiguLi4m7Xqz5bRETOlFP117pQTERERPps48aNzJ8/nyVLlrBz506mT5/OzJkzycvL67a+3W4nLCyMJUuWMHHixG7rbNmyhZtvvpn333+f7du3Y7VayczMpLCw0K3eBRdcgM1mcz2++OKLQf9+IiIig02DbhEREemzp59+mjlz5jB37lzS0tLIzs4mLi6OlStXdlt/9OjRPPvss9x6660EBgZ2W+eVV14hKyuLSZMmkZqaygsvvEBbWxvvvvuuWz1PT08iIyNdj7CwsEH/fiIiIoNNg24RERHpk+bmZnbs2EFmZqZbeWZmJtu2bRu09TQ0NNDS0kJwcLBb+f79+4mOjiYhIYGbbrqJQ4cOnXJZtbW11NTUuB52u33Q4hQREekLXdMtIiIifVJeXo7D4SAiIsKtvLdrqwdi0aJFxMTEcOWVV7rKLrnkEtatW0dKSgolJSUsW7aMadOm8dVXXxESEtLjssaPH09DQ4Pr9e23385dd91FVFQUBw8edMXvdDopLS0FYMyYMRQUFNDY2IjFYiEuLo79+/cDEB4ejoeHh+v7JiUlUVxcTH19PWazmdGjR7N3714AQkNDMZlMFBUVAZCQkEBZWRl1dXV4eXmRnJxMbm4uAMHBwXh7e7tOqR89ejSVlZXU1NRgNBoZO3Ysubm5OJ1ORo0ahb+/P/n5+QBYrVZqamqorq7GYDCQlpbG3r17cTgcBAQEEBQUxNGjRwGIjY2loaGByspKAMaNG8e+fftobW3F39+f0NBQDh8+DEB0dDR2u52KigoAUlNTOXToEM3Nzfj6+hIREeHa8REVFUVraytlZWUApKSkkJeXR1NTE97e3sTExHDgwAFXvgFKSkoASE5OprCw0JVvq9XKvn37AAgLC8PT0xObzQZAYmIiJSUl1NfXYzKZSExMZM+ePQCEhIRgNpvd8l1eXk5tbS2enp6kpKSQk5PjyrePjw8FBQUAxMfHU1VV1WO+AwICXJdQxMXFUVtb22O+g4ODOXLkCAAxMTE0Nja68p2WlsaBAwdoaWnBz8+PsLAwt3w3NzdTXl4OwNixYzly5Ah2ux1fX18iIyNdbTYyMpK2tja3Npufn+/Kd2xsrFubNRgMrnwnJSVhs9loaGjAbDYTHx/fa75LS0upq6vrNt8Wi6XbNntyvoOCgvDz83Nrs8eOHePYsWN4eHiQmprKnj17aGtrIzAwkMDAQLd819XVUVVV1aXNdpfvpqambtusn58f4eHhvbbZo0ePYrfb8fHx0TZC24g+bSPa2troC4PT6XT2qabQ2trK1q1bmThxoiZlERGRIeNwONi9ezczZszA03Pk7B8vKioiJiaGbdu2kZGR4Sp/5JFHePnll10/bHpy+eWXM2nSpC4TqXX2xBNP8Pjjj7NlyxYuvPDCHuvV19eTlJTEfffdx8KFC7u8f7zPTkxMdLt3qtlsxmw29xqniIhIX/S1vx45PbmIiIiMaKGhoRiNxi5HtUtLS7sc/R6Ip556ikcffZR33nmn1wE3gK+vLxMmTHAdXeqJv7+/dpSLiMiw0qD7PLFqVdNwh8C8eT3fMF5EREY+k8lEeno6mzdv5oYbbnCVb968meuvv/60lv3kk0+ybNky3nrrLaZMmXLK+na7ndzc3B5vVSZDp2nVquEOAcu8ecMdgowgapMy0mnQLSIiIn22cOFCZs+ezZQpU8jIyGD16tXk5eUxr+MH5+LFiyksLGTdunWuz+zatQuAuro6ysrK2LVrFyaTiXHjxgHtp5Q/8MADrF+/ntGjR7uOpPv5+eHn5wfAvffey3XXXYfVaqW0tJRly5ZRU1PDbbfddga/vYiISP9p0C0iIiJ9NmvWLCoqKli6dCk2m43x48ezadMm4uPjAbDZbF3u2T158mTX8x07drB+/Xri4+Ndkx+tWLGC5uZmbrzxRrfP/e53v+PBBx8EoKCggJtvvpny8nLCwsKYOnUqH3/8sWu9IiIiI5UG3SIiItIvWVlZZGVldfve2rVru5Sdas7W44Pv3mzYsKEvoYmIiIw4uk+3iIiIiIiIyBDRoFtERERERERkiGjQLSIiIiIiIjJENOgWERERERERGSIadIuIiIiIiIgMEQ26RURERERERIaIBt0iIiIiIiIiQ0SDbhEREREREZEhokG3iIiIiIiIyBDxHO4ARERERKRd06pVwx0ClnnzhjsEEZFzio50i4iIiIiIiAwRDbpFREREREREhsiIGnSvWLGChIQELBYL6enpfPjhhz3Wtdls3HLLLYwdOxYPDw/mz5/fpc4LL7zA9OnTCQoKIigoiCuvvJJPP/3Urc6DDz6IwWBwe0RGRg72VxMREREREZHz0IgZdG/cuJH58+ezZMkSdu7cyfTp05k5cyZ5eXnd1rfb7YSFhbFkyRImTpzYbZ0tW7Zw88038/7777N9+3asViuZmZkUFha61bvggguw2WyuxxdffDHo309ERERERETOPyNm0P30008zZ84c5s6dS1paGtnZ2cTFxbFy5cpu648ePZpnn32WW2+9lcDAwG7rvPLKK2RlZTFp0iRSU1N54YUXaGtr491333Wr5+npSWRkpOsRFhY26N9PREREREREzj8jYtDd3NzMjh07yMzMdCvPzMxk27Ztg7aehoYGWlpaCA4Odivfv38/0dHRJCQkcNNNN3Ho0KFel1NbW0tNTY3rYbfbBy1GEREREREROXeMiFuGlZeX43A4iIiIcCuPiIiguLh40NazaNEiYmJiuPLKK11ll1xyCevWrSMlJYWSkhKWLVvGtGnT+OqrrwgJCel2OePHj6ehocH1+vbbb+euu+4iKiqKgwcPumJ3Op2UlpYCMGbMGAoKCmhsbMRisRAXF8f+/fsBCA8Px8PDw/Vdk5KSKC4upr6+HrPZzOjRo9m7dy8AoaGhmEwmioqKAEhISKCsrIy6ujq8vLxITk4mNzcXgODgYLy9vSksLMRqdVBSEou//zF8fGppazNSUJBIXNwBDAYndXWBNDb6EhbWvtzS0mh8fOrw86vB6fQgPz+J2NhDeHg4qK/3p64ugIiI9tP0y8qisFga8fevBiAvbwwxMYcxGltpaPCjpiaIyMh8cnKMREdHY7fbqaioACA1NZVDhw7R3NyMr68vERERrp0eUVFRtLa2UlZWBkBKSgp5eXk0NTXh7e1NTEwMBw4ccOUboKSkBIDk5GQKCwtd+bZarezbtw+AsLAwPD09sdlsACQmJlJSUkJ9fT0mk4nExET27NkDQEhICGaz2S3f5eXl1NbW4unpSUpKCjk5Oa58+/j4UFBQAEB8fDxVVVXU1NRgNBoZO3Ysubm5OJ1ORo0aRUBAgOvyibi4OGpra6mursZgMJCWlsbevXtxOBwEBAQQHBzMkSNHAIiJiaGxsZHKykoA0tLSOHDgAC0tLfj5+REWFsbhw4cBiI6Oprm5mfLycgDGjh3LkSNHsNvt+Pr6EhkZ6WqzkZGRtLW1ubXZ/Px8V75jY2Pd2qzBYHDlOykpCZvNRkNDA2azmfj4+F7zXVpaSl1dXbf5tlgsrktARo8eTWVlJTU1NV3yHRQUhJ+fH/n5+QBYrVaOHTvGsWPH8PDwIDU1lT179tDW1kZgYCCBgYFu+a6rq6OqqgqAcePGsW/fPlpbW7vNd1NTU7dt1s/Pj/Dw8F7b7NGjR7Hb7fj4+IzobcTJ+e6uzfr7+7vlu6ampsc2GxQUxNGjRwGIjY2loaHB1WY759vf35/Q0FC3NqtthJOAgABEROTcodsBnt8MTqfTOdxBFBUVERMTw7Zt28jIyHCVP/LII7z88suuHzc9ufzyy5k0aRLZ2dk91nniiSd4/PHH2bJlCxdeeGGP9err60lKSuK+++5j4cKFbu+1traydetWEhMT8fA4cZKA2WzGbDaf4lsOr1WrmoY7BObNswx3CCIiZwWHw8Hu3buZMWMGnp4jYv/4Wed4nz1x4kSMRuNwh9NnZ8MP87MhRjm/nA1t8myIUfqvr/31iOjJQ0NDMRqNXY5ql5aWdjn6PRBPPfUUjz76KO+8806vA24AX19fJkyY4DrC1B1/f/+zqgMXERERERGR4TEiruk2mUykp6ezefNmt/LNmzczbdq001r2k08+ycMPP8ybb77JlClTTlnfbreTm5tLVFTUaa1XREREREREZEQc6QZYuHAhs2fPZsqUKWRkZLB69Wry8vKY13EaxOLFiyksLGTdunWuz+zatQuAuro6ysrK2LVrFyaTiXHjxgHtp5Q/8MADrF+/ntGjR7uOpPv5+eHn5wfAvffey3XXXYfVaqW0tJRly5ZRU1PDbbfddga/vYiIiIiIiJyLRsyge9asWVRUVLB06VJsNhvjx49n06ZNxMfHA2Cz2brcs3vy5Mmu5zt27GD9+vXEx8e7JkBasWIFzc3N3HjjjW6f+93vfseDDz4IQEFBATfffDPl5eWEhYUxdepUPv74Y9d6RURERERERAZqxAy6AbKyssjKyur2vbVr13YpO9UccMcH373ZsGFDX0ITERERERlUwz25libWEjkzRsQ13SIiIiIiIiLnIg26RURERERERIaIBt0iIiLSLytWrCAhIQGLxUJ6ejoffvhhj3VtNhu33HILY8eOxcPDg/nz53db77XXXmPcuHGYzWbGjRvHG2+8cVrrFRERGSk06BYREZE+27hxI/Pnz2fJkiXs3LmT6dOnM3PmzC6TnR5nt9sJCwtjyZIlTJw4sds627dvZ9asWcyePZvdu3cze/ZsfvCDH/DJJ58MeL0iIiIjhQbdIiIi0mdPP/00c+bMYe7cuaSlpZGdnU1cXBwrV67stv7o0aN59tlnufXWWwkMDOy2TnZ2Nt/61rdYvHgxqampLF68mCuuuILs7OwBr1dERGSk0KBbRERE+qS5uZkdO3aQmZnpVp6Zmcm2bdsGvNzt27d3WeZVV13lWubprLe2tpaamhrXw263DzhOERGRgRhRtwwTERGRodPU1ERVVRVBQUFYLJZ+f768vByHw0FERIRbeUREBMXFxQOOq7i4uNdlns56x48fT0NDg+v17bffzl133UVUVBQHDx50LcfpdFJaWgrAmDFjKCgooLGxEYvFQlxcHPv37wcgPDwcDw8P13qTkpIoLi6mvr4es9nM6NGj2bt3LwChoaGYTCaKiooASEhIoKysjLq6Ory8vEhOTiY3NxeA4OBgvL29ybNaAYgtKeGYvz+1Pj4Y29pILCjgQFwcToOBwLo6fBsbKQoL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BsNwhyYiInLO6/e54F//+td5++23GT16NMuXL+f+++9n5cqVjB492u32HiIiIjL8li5dSlFREQaDgdTUVC699FJSU1MxGAzYbDaWLl063CGKiIic0wZ0AfaMGTPYvn07tbW15OfnU1NTw0cffcRll1022PGJiIjIaXjooYcoKCjo9r2ioiIeeuihMxyRiIjI+aXfg+477riDw4cPA+Dj40NMTAw+Pj4AHD16lDvuuGNwIxQREZEB623m8Lq6Ory8vM5gNCIiIueffl/TvXbtWubNm0dCQkKX98rLy3nppZf485//PCjByflFs0WfP/S3Fhla//nPf9i1a5fr9aZNm9izZ49bncbGRl555RWSkpLOcHQiQ0+3Pho8w53LcyWPcn7r96C7N5WVlZjN5sFcpIiIiPTTG2+84Tpt3GAw9Hjdtre3Ny+++OKZDE1EROS806dB9wcffMCWLVtcr//0pz/x5ptvutVpbGzkb3/7G+PGjRtwMCtWrODJJ5/EZrNxwQUXkJ2dzfTp07uta7PZ+OUvf8mOHTvYv38/d999N9nZ2V3qvfbaazzwwAMcPHiQpKQkHnnkEW644YYBr1dERGSk+8lPfsK1116L0+nk4osv5sUXX2T8+PFudcxmM0lJSW63/xQREZHB16dB9/vvv++2x/xPf/pTt/Xi4+NZvnz5gALZuHEj8+fPZ8WKFVx66aX88Y9/ZObMmeTk5GC1WrvUt9vthIWFsWTJEp555plul7l9+3ZmzZrFww8/zA033MAbb7zBD37wA/71r3+57ife3/WKiIiMdFFRUURFRQHtffhFF12Ev7//MEclIiJyfurTRGr33XcfZWVllJaW4nQ6eeuttygrK3N71NTUcPjwYb7xjW8MKJCnn36aOXPmMHfuXNLS0sjOziYuLo6VK1d2W3/06NE8++yz3HrrrQQGBnZbJzs7m29961ssXryY1NRUFi9ezBVXXOF2RLy/6wWora2lpqbG9bDb7QP6ziIiIkNtxowZXQbcn3zyCatWrSI3N3eYohIRETl/9OlIt7e3t+v0s8OHDxMdHT2os502NzezY8cOFi1a5FaemZnJtm3bBrzc7du3s2DBAreyq666yjXoHuh6x48fT0NDg+v1DTf8mGuvzaKiIpzo6KMAVFWFYTA4GTWqHIDCwtGEhhZjNjfR3GyhrCyKmJj2WeCrq0No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ja997WtMnz7d9V5sbCzf+973hjE6ERGRc1+/B90PPPAA1157LZMmTcJkMvHOO++43vt//+//cdFFFw04mKysLLKysrp97/itTjrry8TrN954IzfeeOOA1ysiInK2mzp1qus67s4eeuihYYhGRETk/NLvQfc3v/lNcnNz2bFjB5MmTSIxMdHtvUmTJg1mfCIiIiIiIiJnrQHd/DM+Pr7b069/+tOfnnZAIiIicnoSExN54403mDhxIgkJCb3eBtNgMHDw4MEzGJ2IiMj5ZUCDbhERERm5ZsyYQUBAgOt5b4NuERERGVp9GnQbjUa2b9/OxRdfjIeHxyn3mLe2tg5agCIiItI/L774out5d3OiiIiIyJnTp0H3b3/7W2JjY13PtcdcRERERERE5NT6NOj+3e9+53r+4IMPDlUsIiIiMgScTif//ve/OXr0KI2NjV3ev/XWW4chKhERkfODx3AHICIiIkNn3759pKWlkZGRwaxZs/jxj3/s9rj99tv7vcwVK1aQkJCAxWIhPT2dDz/8sNf6W7duJT09HYvFQmJiIqtWrXJ7//LLL8dgMHR5XHPNNa46Dz74YJf3IyMj+x27iIjImTagidRqa2v55z//2e0ec4PBwAMPPDAowYmIiMjp+fnPf05TUxMbN27kwgsvxGw2n9byNm7cyPz581mxYgWXXnopf/zjH5k5cyY5OTlYrdYu9Q8fPszVV1/NnXfeyV/+8hc++ugjsrKyCAsL43vf+x4Ar7/+Os3Nza7PVFRUMHHiRL7//e+7LeuCCy7gnXfecb02Go2n9V1ERETOhH4Puj/55BOuueYaKisru31fg24REZGR49NPP+WFF17gxhtvHJTlPf3008yZM4e5c+cCkJ2dzVtvvcXKlSt57LHHutRftWoVVquV7OxsANLS0vjss8946qmnXIPu4OBgt89s2LABHx+fLoNuT09PHd0WEZGzTr9PL1+wYAExMTF8+umnNDU10dbW5vZwOBxDEaeIiIgMgJ+fn+v2YaerubmZHTt2kJmZ6VaemZnJtm3buv3M9u3bu9S/6qqr+Oyzz2hpaen2M2vWrOGmm27C19fXrXz//v1ER0eTkJDATTfdxKFDh04Zc21tLTU1NdTU1FDb1IRdd1gREZEzrN9Hur/44gvWr1/PlClThiIeERERGUS3334769ev59vf/vZpL6u8vByH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dtasWcOrr77aZdlr1qzhO9/5TrenwN97771cd911WK1WSktLWbZsGTU1Ndx2220D/q4iIiJnQp8G3YcPHx7qOERERGSYORwObr/9dv7973/3OOieNWsWFRUVLF26FJvNxvjx49m0aZPrGjqbzUZep2v4EhIS2LRpEwsWLGD58uVER0fz3HPPuW4Xdty+ffv417/+xdtvv93tegsKCrj55pspLy8nLCyMqVOn8vHHH3e5dk9ERGSk6dOge6AdmtPp5OGHH+YnP/mJ7qspIiJyFjg+yVlvsrKyyMrK6va9tWvXdimbMWMGn3/+ea/LTElJ6XXdGzZsOGVcIiIiI1G/79PdH21tbTz00EOuadlFREREREREzidDOuiGvu0xFxERERERETkXDfmgW0REREREROR8NaIG3StWrCAhIQGLxUJ6ejoffvhhr/W3bt1Keno6FouFxMREVq1a5fb+5ZdfjsFg6PK45pprXHUefPDBLu/r+nMREREREREZDCNm0L1x40bmz5/PkiVL2LlzJ9OnT2fmzJluM6B2dvjwYa6++mqmT5/Ozp07+c1vfsPdd9/Na6+95qrz+uuvY7PZXI8vv/wSo9HI97//fbdlXXDBBW71vvjiiyH9riIiIiIiInJ+6NPs5WfC008/zZw5c5g7dy4A2dnZvPXWW6xcuZLHHnusS/1Vq1ZhtVrJzs4GIC0tjc8++4ynnnrKdRuS4OBgt89s2LABHx+fLoNuT09PHd0WERERERGRQTcijnQ3NzezY8cOMjMz3cozMzPZtm1bt5/Zvn17l/pXXXUVn332GS0tLd1+Zs2aNdx00034+vq6le/fv5/o6GgSEhK46aabOHToUK/x1tbWUlNT43q0ttpP9RVFRERGPKPRyPvvv8/YsWOHOxQREZFzxog40l1eXo7D4SAiIsKtPCIiguLi4m4/U1xc3G391tZWysvLiYqKcnvv008/5csvv2TNmjVu5Zdccgnr1q0jJSWFkpISli1bxrRp0/jqq68ICQnpdt3jx4+noaHB9fqGG37MtddmUVERTnT0UQCqqsIwGJyMGlUOQGHhaEJDizGbm2hutlBWFkVMzGEAqqtDaGvzIDi4DICioniCg8uwWBpoaTFRXBxLXFz7joBjx4JpbfUiJKSkIw9x5OWVUldXh5eXF8nJyeTm5gLtR/q9vb0pLCzEanVQUhKLv/8xfHxqaWszUlCQSFzcAQwGJ3V1gTQ2+hIW1n57t9LSaHx86vDzq8Hp9CA/P4nY2EN4eDior/enri6AiIhCAMrKorBYGvH3rwYgL28MMTGHMRpbaWjwo6YmiMjIfHJyjERHR2O326moqAAgNTWVQ4cO0dzcTHi4maqqUKKi2i8pqKwMx8PDwahR7XULChIIDy/CZLJjt3tTXh5BTMyRjnyHAhAU1DnfJZjNjTQ3myktjSY2tnO+jQQHlwJgs1kJCirHYmngwAFvEhMT2bNnDwAhISGYzWbXbe9MpmgCAqrw8anD4fCksDABq3U/ALW1o2hq8iYszAZASUkMfn41+Pp2zvdBDIY26uoCaGjwIzy8qCOH0Xh71+Pndwyn00B+frIr3w0N/tTWBhIRUdDRBqw0NjZSWVkJtJ/lceDAAVpaWvDz88NkCiAyMh+AiooIPD1bCAxsr5ufn0hkZAFeXs00NflQWRnmarOVlWF4eLS58l1YmEBYmA2TqQm73UJ5eaQr39XVoTidBoKCTrTZkJBSzOZGWlrMtLYmsm/fPgDCwsLw9PTEZmvPS2JiImFhRXh719Pa6kVRkRWr9SAANTVBNDebCQ0t7mjfsQQEVJ+U7wOAk9raQJqafFz5Li2Nwde3Fl/fE232eL7r6wOor/cnPPxEm7XZqqiqqgJg3Lhx7Nu3j9bWVgICAggODnbFVF4eiclkJyCgqqN9JxEdnYenZwuNjb5UV4e4tVmjsdWV74KCRCIiCvHyam+z/d1G5OTkABAeHo6Hh4dre5iUlERxcTFWa02fthGBgZWd8h3fkcP2Nmu3W1z5Hsg2IienHoPBQFpaGnv37sXhcBAQEEBQUBBHj7Z/19jYWBoaGlxttnO+/f39CQ0N5fDh9v/P3rYRvr6+REREuHaMRkVF0draSllZeztMSUkhLy+PpqYmvL29iYmJ4cCB9u96vL8oKWnPS3JyMoWFhTQ2NmKxWLBarb222ZKSEurr6zGZTL1uIxISEigvL6e2thZPT09SUlJcf8fg4GB8fHwoKGj/X46Pj6eqqoqamhqMRiNjx44lNzcXp9NJQEAAg6m2tpZ//vOfHD16lMbGRrf3DAYDDzzwgOv1jBkzBnXdIiIi5zuD8zTu6eV0Oqmrq8PPzw+DwdBtnaNHjxIdHY2Xl1ePyykqKiImJoZt27aRkZHhKn/kkUd4+eWXXT9uOktJSeH2229n8eLFrrKPPvqIr3/969hsti6ni//0pz9l27Ztp7xeu76+nqSkJO677z4WLlzo9l5raytbt24lMTERD48TJwmsW+fE09Pc63KH0rx5llPWWbWq6QxE0rtTxakY+0YxDg7FODj6sv2R/nM4HOzevZsZM2bg6Xl6+8c/+eQTrrnmGtdOj5MZDAYcDsdprWMkOt5nT5w4EaPRCEDTSROuDgfLvHm9vq8Y++ZciBGGP07FOHjOhTZ5NsQ40vS1vx5QT/7JJ5/w29/+lg8++IDm5mZMJhOXXXYZDz30EFOnTnWrGx8ff8rlhYaGYjQauxzVLi0t7XI0+7jIyMhu63t6enY5Qt3Q0MCGDRtYunTpKWPx9fVlwoQJ7N+/v8c6/v7+rg4cwNNz+H/4ioiIdGfBggXExMTw5ptvcuGFF2IymYY7JBERkQE5W3cM9Pua7vfee4/LLruMHTt2cNNNN3Hfffdx0003sWPHDmbMmMG7777b7yBMJhPp6els3rzZrXzz5s1Mmzat289kZGR0qf/2228zZcqULkfV//u//xu73c6PfvSjU8Zit9vJzc3tcnq6iIjI2eiLL75g2bJlTJkyRQNuERGRYdDvI92//vWvmTx5Mu+88w5+fn6u8traWq644goWLVrEv//9734HsnDhQmbPns2UKVPIyMhg9erV5OXlMa9jT8LixYspLCxk3bp1AMybN4/nn3+ehQsXcuedd7J9+3bWrFnDq6++2mXZa9as4Tvf+U6312jfe++9XHfddVitVkpLS1m2bBk1NTXcdttt/f4OIiIiI01YWNhwhyAiInJe6/eg+8svv+SVV15xG3BD+ynXv/71r/t0NLk7s2bNoqKigqVLl2Kz2Rg/fjybNm1ynZ5us9nc7tmdkJDApk2bWLBgAcuXLyc6OprnnnvOdbuw4/bt28e//vUv3n777W7XW1BQwM0330x5eTlhYWFMnTqVjz/+uE+nxYuIiIx0d911F6tWreLaa6/tcf4VERERGTr9HnQfn0W3O0aj8bT2qGdlZZGVldXte2vXru1SNmPGDD7//PNel5mSkkJvc8Vt2LChXzGKiIicTdra2tizZw+TJ0/mmmuu6XLWl8FgYMGCBcMUnYiIyLmv34Pun/70pzzzzDNcc801btdONzc38/TTT/OTn/xkUAMUERGRgfvVr37lev6f//yny/sadIuIiAytfg+6vby8OHLkCImJiXz3u991zSL++uuvYzQasVgsPP3004A6chERkeF2/B7oIiIiMjwGNJHacX/4wx+6vH/fffe5nmvQLSIiMrw0R4mIiMjw6vegW3vMRUREzj4HDhzgvffeo6KigtDQUL7xjW+QnJw83GGJiIic8/o96NYecxERkbOH0+l0zWDe1tbmKvfw8CArK4vnnntuGKMTERE593U/DbmIiIicE5555hlWrFjBT3/6Uz755BPy8/P55JNPmDdvHitWrOCZZ54Z7hBFRETOaf0+0u1wOPjDH/7AK6+8wtGjR2lqanJ732AwcOzYsUELUERERAbuT3/6E3fddRfPPvusqywmJoavfe1rGI1GXnjhBc2/IiIiMoT6PehetGgR/+f//B8mTZrEt771LUwm01DEJSIi54BVq5pOXWmIzZtnGe4QhtWhQ4e49tpru33v2muv5Y9//OMZjkhEROT80u9B9yuvvMKiRYt49NFHhyIeERERGUSBgYEcPXq02/eOHj1KQEDAGY5IRETk/NLva7obGxu58sorhyIWERERGWTf+ta3uP/++9mxY4db+a5du/jd737HVVddNUyRiYiInB/6PejOzMzkk08+GYpYREREZJA99thjeHp6cvHFFzNhwgQyMzOZMGEC6enpeHh48Nhjjw13iCIiIue0fg+6n3vuOV577TWee+45Dhw4QGVlZZeHiIiIjAxxcXHs2rWL++67D19fXw4fPoyvry+LFi1i586dxMbG9nuZK1asICEhAYvFQnp6Oh9++GGv9bdu3Up6ejoWi4XExERWrVrl9v7atWsxGAxdHidP1trf9YqIiIwE/b6mOyAggLFjx7JgwYIeZzt1OBynHZiIiIgMjtDQ0EE7or1x40bmz5/PihUruPTSS/njH//IzJkzycnJwWq1dql/+PBhrr76au68807+8pe/8NFHH5GVlUVYWBjf+973XPUCAgLYu3ev22ctlhOT4PV3vSIiIiNFvwfd8+bN47//+7+5/vrrSUtL0+zlIiJy1hvuWdaHcob1xMRE3njjDSZOnNjlvS+//JL/+q//4tChQ31e3tNPP82cOXOYO3cuANnZ2bz11lusXLmy24H9qlWrsFqtZGdnA5CWlsZnn33GU0895TboNhgMREZGDtp6RURERop+D7r/+te/8thj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6Ojobi8L68xgMPDAAw+cochERETOP/0adHt7e/O3v/1N1zuLiIiMYA8++CDf/va3iY6O7vaysM406BYRERla/T69fNKkSXz55ZdcdtllQxGPiIiInKbOl4IN5WVhIiIicmoe/f3A448/zhNPPMHWrVuHIh4RERERERGRc0afjnR/8MEHXHTRRfj5+ZGVlUVdXR3f/OY3CQoKIioqCoPB4KprMBjYvXv3kAUsIiIiIiIicrbo06D7G9/4Btu3b+fiiy8mJCSE0NDQoY5LREREBuib3/xmn+saDAbefffdIYxGRETk/NanQbfT6XQ937Jly1DFIiIiIoOgra3N7Sy03nTu40VERGTw9XsiNRERERnZtINcRERk5OjzRGp93WMuIiIiw6uqqorvfe97/OMf/+ixzj/+8Q++973vUVFRcQYjExEROf/0edD9jW98g4CAgFM+AgMDhzJeEREROYU//elP7N69m29/+9s91vn2t7/NF198wfLly89gZCIiIuefPp9efvnllxMWFjaUsYiIiMgg2LBhA3feeSeenj13856entx5551s3LiR3/72t2cwOhERkfNLnwfdv/3tb7n44ouHMhYREREZBPv27WPKlCmnrHfRRRfx8MMPn4GIREREzl99Pr1cREREzg6tra14eXmdsp6XlxctLS1nICIREZHzlwbdIiIi55ioqChycnJOWe+rr74iMjLyDEQkIiJy/tKgW0RE5BwzY8YMVqxY0etR7JaWFlauXMk3vvGNMxiZiIjI+adPg+62tjZdzy0iInKWWLBgAXv27OGGG26gqKioy/tFRUV85zvfYe/evSxYsGAYIhQRETl/6Ei3iIjIOebCCy9k+fLlvPXWWyQkJDBt2jR++MMf8sMf/pBp06aRkJDA22+/zfLly5kwYUK/l79ixQoSEhKwWCykp6fz4Ycf9lp/69atpKenY7FYSExMZNWqVW7vv/DCC0yfPp2goCCCgoK48sor+fTTT93qPPjggxgMBreHTo0XEZGzgQbdIiIi56A777yTDz74gMzMTP7zn//w6quv8uqrr/Kf//yHb3/723z44YfMnTu338vduHEj8+fPZ8mSJezcuZPp06czc+ZM8vLyuq1/+PBhrr76aqZPn87OnTv5zW9+w913381rr73mqrNlyxZuvvlm3n//fbZv347VaiUzM5PCwkK3ZV1w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MZWXR2Iy2QkIqOpo30lER+fh6dlCY6Mv1dUhbm3WaGx15bugIJGIiEK8vNrbbH+3EaealMVqrenTNiIwsLJTvuM7ctjeZu12iyvfA9lG5OTU9zopi9Xq6PM24nib9fJqduU7Pz+JyMh8V5sdyDYiJ8fY66QsFosFD4/wPm0j2vMdR1zciTbb0mJyy/dAthF795pck7I4nU4COialGYlmzZpFRUUFS5cuxWazMX78eDZt2kR8fDwANpvN7dKwhIQENm3axIIFC1i+fDnR0dE899xzrtuFQfucLs3Nzdx4441u6/rd737Hgw8+CEBBQQE333wz5eXlhIWFMXXqVD7++GPXekVEREYqg/P4bCbDqKioiJiYGLZt20ZGRoar/JFHHuHll192DYA6S0lJ4fbbb2fx4sWuso8++oivf/3r2Gy2LvfxfOKJJ3j88cfZsmVLr9eJ1dfXk5SUxH333ddlYpbW1la2bt1KYmKi2y1X1q1z4ulp7vf3Hizz5llOWWfVqqYzEEnvThWnYuwbxTg4FOPgOBdihOGP8+QYj0/MMmPGDDx1DfKAHO+zJ06ciNFoBKBp1aphjgosnSZ87Y5i7JtzIUYY/jgV4+A5F9qkYuybzjH2tb8eET35mZqY5Z133hmUiVn8/f1dHTiAp+fw/6gUERERERGRkWdEXNOtiVlERERERETkXDQiBt2giVlERERERETk3DMiTi8HTcwiIiIiIiIi554RM+gGyMrKIisrq9v31q5d26VsxowZfP755z0u78iRI6dc54YNG/oanoiIiIiIiEi/jJjTy0VERERERETONRp0i4iIiIiIiAwRDbpFREREREREhogG3SIiIiIiIiJDRINuERERERERkSGiQbeIiIiIiIjIENGgW0RERERERGSIaNAtIiIiIiIiMkQ06BYREREREREZIhp0i4iIiIiIiAwRDbpFREREREREhogG3SIiIiIiIiJDRINuERERERERkSGiQbeIiIiIiIjIENGgW0RERERERGSIaNAtIiIiIiIiMkQ06BYREREREREZIhp0i4iIiIiIiAwRDbpFREREREREhogG3cOstdXOO+88RWurfbhD6ZFiHByKcfCcDXEqxsGhGGUksbe28tQ772BvbR3uUHqkGAeHYhwcinFwKMbBMZwxjqhB94oVK0hISMBisZCens6HH37Ya/2tW7eS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6emuGQiP27x5M9OmTRumqM5OTqeTX/ziF7z++uu89957Z82PXafTid1uH+4wXK644gq++OILdu3a5XpMmTKFH/7wh+zatWtEduB2u53c3FyioqKGOxSXSy+9tMstcPbt20d8fPwwRdSzF198kfDwcK655prhDqWLhoYGPDzcuyej0Tjibj9ynK+vL1FRUVRVVfHWW29x/fXXD3dIMojUZw8O9deD42zsr0F99ulSnz14hqvP1pHuYbJw4UJmz57NlClTyMjIYPXq1eTl5TFv3rzhDs2lrq6OAwcOuF4fPnyYXbt2ERwcjNVqHcbITvj5z3/O+vXr+dvf/oa/v7/rSERgYCDe3t7DHF273/zmN8ycOZO4uDhqa2vZsGEDW7Zs4c033xzu0Fz8/f27XFfn6+tLSEjIiLne7t577+W6667DarVSWlrKsmXLqKmpGVF7URcsWMC0adN49NFH+cEPfsCnn37K6tWrWb169XCH5qatrY0XX3yR2267DU/PkdcNXHfddTzyyCNYrVYuuOACdu7cydNPP80dd9wx3KG5eeutt3A6nYwdO5YDBw7wq1/9irFjx3L77bcPd2gyyNRnnz7114PjbOivQX32YFKfPTiGvc8+I3OkS7eWL1/ujI+Pd5pMJudFF1004m6b8f777zuBLo/bbrttuENz6S4+wPniiy8Od2gud9xxh+vvHBYW5rziiiucb7/99nCHdUoj7RYks2bNckZFRTm9vLyc0dHRzu9+97vOr776arjD6uLvf/+7c/z48U6z2exMTU11rl69erhD6uKtt95yAs69e/cOdyjdqqmpcd5zzz1Oq9XqtFgszsTEROeSJUucdrt9uENzs3HjRmdiYqLTZDI5IyMjnT//+c+d1dXVwx2WDBH12adH/fXQGWn9tdOpPnswqc8eHMPdZxucTqfzzAzvRURERERERM4vuqZbREREREREZIho0C0iIiIiIiIyRDToFhERERERERkiGnSLiIiIiIiIDBENukVERERERESGiAbdIiIiIiIiIkNEg24RERERERGRIaJBt4jwn//8h9tvv52EhAQsFgt+fn5cdNFFPPHEE1RWVgIwevRorr322lMua8uWLRgMBrZs2eJW/oc//IHk5GRMJhMGg4Hq6moA7r//fqxWK56enowaNWqQv5mIiMi5RX22yNnHc7gDEJHh9cILL5CVlcXYsWP51a9+xbhx42hpaeGzzz5j1apVbN++nTfeeKPPy7vooovYvn0748aNc5Xt2rWLu+++m7lz53Lbbbfh6emJv78/f/vb33jkkUdYsmQJM2fOxGw2D8VXFBEROSeozxY5O2nQLXIe2759Oz/72c/41re+xV//+le3DvRb3/oWv/zlL3nzzTf7tcyAgACmTp3qVvbVV18BcOedd3LxxRe7yr/88ksA7r77bsLDw3tdbmNjI97e3v2KRURE5FyhPlvk7KXTy0XOY48++igGg4HVq1d3u8faZDLxX//1X25lb775JhdddBHe3t6kpqby5z//2e39k09Vu/zyy/nRj34EwCWXXILBYODHP/4xo0eP5v777wcgIiICg8HAgw8+CJw4Le71119n8uTJWCwWHnroIQCKi4v56U9/SmxsLCaTiYSEBB566CFaW1sHMzUiIiIjivpskbOXjnSLnKccDgfvvfce6enpxMXF9ekzu3fv5pe//CWLFi0iIiKCP/3pT8yZM4fk5GQuu+yybj+zYsUKXn31VZYtW8aLL75IamoqYWFh3HPPPSxfvpw1a9bw5ptvEhgYSGxsrOtzn3/+Obm5udx///0kJCTg6+tLcXExF198MR4eHvz2t78lKSmJ7du3s2zZMo4cOcKLL744KLkREREZSdRni5zdNOgWOU+Vl5fT0NBAQkJCvz7z0UcfYbVaAbjssst49913Wb9+fY8d+Lhx40hKSgJg/PjxTJkyxfXe8Q47PT2d0NBQt8+VlpaSk5NDSkqKq2zevHlUVVXx1VdfuWK44oor8Pb25t5773Vd3yYiInIuUZ8tcnbT6eUi0meTJk1ydZwAFouFlJQUjh49OujruvDCC906b4B//OMffOMb3yA6OprW1lbXY+bMmQBs3bp10OMQERE5G6nPFhk5dKRb5DwVGhqKj48Phw8f7vNnQkJCupSZzWYaGxsHMzQAoqKiupSVlJTw97//HS8vr24/U15ePuhxiIiIDDf12SJnNw26Rc5TRqORK664gn/+858UFBS4XZs1EhgMhi5loaGhXHjhhTzyyCPdfiY6OnqowxIRETnj1GeLnN006BY5jy1evJhNmzZx55138re//Q2TyeT2fktLC2+++SbXXXfdMEXo7tprr2XTpk0kJSURFBQ03OGIiIicMeqzRc5eGnSLnMcyMjJYuXIlWVlZpKen87Of/YwLLriAlpYWdu7cyerVqxk/fvyI6cCXLl3K5s2bmTZtGnfffTdjx46lqamJI0eOsGnTJlatWjXi9v6LiIgMBvXZImcvDbpFznN33nknF198Mc888wy///3vKS4uxsvLi5SUFG655RZ+8YtfDHeILlFRUXz22Wc8/PDDPPnkkxQUFODv709CQgLf/va3tSddRETOaeqzRc5OBqfT6RzuIERERERERETORbplmIiIiIiIiMgQ0aBbREREREREZIho0C0iIiIiIiIyRDToFhERERERERkiGnSLiIiIiIiIDBENukVERERERESGiAbdIiIiIiIiIkNEg24RERERERGRIaJBt4iIiIiIiMgQ0aBbREREREREZIho0C0iIiIiIiIyRDToFhERERERERkiGnSLiIiIiIiIDBENukVERERERESGiAbdIiIiIiIiIkNEg24RERERERGRIaJBt4iIiIiIiMgQ0aBbREREREREZIho0C0iIiL9smLFChISErBYLKSnp/Phhx/2WNdms3HLLbcwduxYPDw8mD9/fpc6L7zwAtOnTycoKIigoCCuvPJKPv30U7c6Dz74IAaDwe0RGRk52F9NRERk0GnQLSIiIn22ceNG5s+fz5IlS9i5cyfTp09n5syZ5OXldVvfbrcTFhbGkiVLmDhxYrd1tmzZws0338z777/P9u3bsVqtZGZmUlhY6FbvggsuwGazuR5ffPHFoH8/ERGRwWZwOp3O4Q7ibNHW1kZzczNGoxGDwTDc4YiIyDnK6XTicDgwmUx4eIys/eOXXHIJF110EStXrnSVpaWl8Z3vfIfHHnus189efvnlTJo0iezs7F7rORwOgoKCeP7557n11luB9iPdf/3rX9m1a1ef4lSfLSIiQ62v/bXnGYzprNfc3MxHH3003GGIiMh54tJLL8VisQx3GC7Nzc3s2LGDRYsWuZVnZmaybdu2QVtPQ0MDLS0tBAcHu5Xv37+f6OhozGYzl1xyCY8++iiJiYk9xqo+W0REzoRT9dcadPeD0WgEYPz48a7nIiIig83hcPDll1+OuL6mvLwch8NBRESEW3lERATFxcWDtp5FixYRExPDlVde6Sq75JJLWLduHSkpKZSUlLBs2TKmTZvGV199RUhISJdlHM/drFmzaGxsdJX/8Ic/ZN68eURERHD48GEAwsPDcTqdlJWV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ERGRXpsyZQrl5eU89thjFBUVMXr0aDZt2mTeqKuoqKjTs7MvvPBC8/WXX37J2rVriYqKMm9+NH78eNatW8fDDz/Mr3/9a+Li4li/fj2XXHJJr+sVEcfQdeci356SbhERETklaWlppKWldbluzZo1nZb15p6tN998MzfffHOf6xURERmodE23iIiIiIiIiIMo6RYRERERERFxECXdIiIiIiIiIg6ia7pFROSst2TrEqfWP/fyuU6tX0TkdObsm72BbvgmPdOZbhEREREREREHUdItIiIiIiIi4iAOTboPHTrEtGnTCAsLw8PDg/DwcKZPn86hQ4ccWa2IiIiIiIjIgOCwa7r3799PSkoKjY2NXHHFFYSFhVFYWMif//xn3n//fbZv305iYqKjqhcRERERERkQdN352c1hSfdDDz3EkCFD2Lp1K8OHDzeX5+fnc8UVV7Bo0SI2bNjgqOpFREREREREnM5h08u3bdvGo48+apdwAwwfPpzf/OY3fPLJJ46qWkRERERERGRAcFjSXV9fz5AhQ7pcFxQURENDg6OqFhERERERERkQHDa9fOTIkfzpT3/i6quv7rTurbfe0vXcIiIiIiIiA4SuO3cchyXd9913H7NmzaKqqorp06cTGhpKUVERb775Ju+++y6vvvqqo6oWERERERERGRAclnTPmDGDkpISnnjiCf7+978DYBgGXl5ePPnkk9x1112OqlpERERERERkQHBY0g2wcOFC0tLS2LlzJ+Xl5QwZMoSUlBT8/f0dWa2IiIiIiIjIgOCwpPuNN97g2muvZciQIZ2u666oqOD999/npz/9qaOqFxERERERkTPI6XrducPuXn7XXXdx6NChLtfl5ORoermIiIiIiIic8RyWdBuG0e26xsZGXFxcHFW1iIiIiIiIyIDQr9PL8/LyOHz4sPl+9+7dNDY22pVpaGhg5cqVREZG9mfVIiIiIiIiIgNOvybdq1ev5tFHH8VisWCxWEhLS+tUpuMM+B/+8If+rFpERERERERkwOnXpPvWW29l9OjRGIbBrbfeylNPPcWIESPsynh4eDB69Giio6P7s2oRERE5zhVXXNHrshaLhY8//tiB0YiIiJy9+jXpTkpKIikpCWg/633dddcxZMiQ/qxCREREesFms2GxWMz3mZmZFBcXExUVxbBhwyguLiY3N5fQ0FBGjhzpxEhFRETObA57ZNj06dM7LTty5Aj79u3joosuUjIuIiLiQFu3bjVff/DBB8yePZvt27eTkpJiLt+xYwdTpkzhgQcecEKEIiIiZweHJd0PP/wwdXV1LF68GICPPvqI66+/nqamJgICAvj0008555xzHFX9d2rJ1iVOrX/u5XOdWr/ImcjZf9egv23pPw8//DC//e1v7RJugPHjx/PII4+waNEirrnmGidFJyIicmZz2CPDNmzYwKhRo8z3Dz/8MOeddx5/+9vfiIqK4oknnnBU1SIiInKcffv2ERER0eW6yMhI9u/f/x1HJCIicvZw2JnugoIC4uPjASgvL+eLL75g06ZNXHXVVTQ2NvKLX/zCUVWLiIjIcUJCQtiwYQOpqamd1v3lL38hJCTECVGJiIicHRx2ptswDGw2GwDbt2/HxcWFyy67DIDQ0FDKysocVbWIiIgcJy0tjVdeeYVbbrmFjRs3snPnTjZu3MjNN9/Ma6+91uUjPnuybNkyYmJi8PT0JDk5mX/96189lt+2bRvJycl4enoSGxvLihUr7NZffvnl5uNGj/+59tprzTK//e1vO60fNmzYKcUtIiLiDA470x0XF8f777/PlVdeybp167j44ovx8vICoKioiICAAEdVLSIiIsd58MEHqa+v59lnn+Xtt98G2g+Oe3p6smjRIh588MFeb2v9+vXMnTuXZcuWMWHCBF5++WUmTZpEeno6kZGRncrn5ORwzTXXMHv2bN588022b99OWloawcHB3HTTTQC8/fbbNDc3m58pLy/n/PPP55ZbbrHb1jnnnMNHH31kvndxcTmldhAREXEGhyXdP//5z7nnnnt44403OHbsGK+99pq5bvv27XbXe4uIyJlJN6QbGJqbm/nNb37DvHnz2LlzJ+Xl5QwZMoRx48YxePDgU9rW888/z8yZM5k1axYAS5Ys4cMPP2T58uX87ne/61R+xYoVREZGsmTJEqD98aK7du3iueeeM5PuwMBAu8+sW7cOb2/vTkm3q6urzm6LiMhpx2HTy++++27Wrl3LHXfcweuvv273CLGGhgbuvPPOPm33VKa0FRUVcfvttzNy5EisVitz587tslzHTd88PDwYNWoUGzdu7FNsIiIiA01jYyNeXl688847+Pv7c/XVV3PHHXdw9dVXn3LC3dzczJdfftnp2vDU1FR27NjR5Wd27tzZqfxV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JbGxsdxyyy0MGzaMoqIi3n77bcrLy/nnP//p7BBFRETOWP2adK9evbo/NyciIiL94Hvf+x6bN29mwYIFLF26FMMwsFqtXHLJJbz11luMHz/e2SGKiIicsfo16Z4+fXqfP/vpp5+SnJzMoEGD+jEiERGRs9O7777LxIkT8ff3B2DixIns3LmT+vp6KisrCQgIwNvb28lRioiInPkGxJ1T2tra+P73v09mZqazQxERETkj3HDDDea4Ghsba96h3Nvbm/DwcCXcIiIi35EBkXRD756nLSIiIr3j5eVFfX09AIcPH6apqcnJEYmIiJyd+nV6uYiIiAwMSUlJLFq0iBtuuAGAtWvX8tlnn3VZ1mKxMG/evO8yPBERkbOGkm4REZEz0NNPP82UKVN48MEHsVgsvPDCC92WVdItIiLiOEq6RUREzkBXXnklZWVlFBQUEBERwcaNG7ngggucHZaIiMhZR0m3iIjIGSw8PJxHHnmEiy66iLCwMGeHIyIictZR0i0iInKGe+SRR5wdgoiIyFlLSbeIiMhZ4LPPPmPt2rXk5ubS0NBgt85isfDxxx87KTIREZEz24BIul1cXFi9ejUxMTHODkVEROSMs3r1ambOnElgYCAJCQl4eHjYrddjO0VERBzHoUm3YRh88cUXXR5VB/jpT39qvp4+fbojQxERETlrPfvss9x66628/vrrnRJuERERcSyHJd1ZWVn86Ec/4sCBA10eQbdYLHZJt4iIiDhGbm4uL774ohJuERERJ3BY0n3PPffQ2NjI+vXrOe+88zTQi4iIOElSUhIlJSXODkNEROSs5LCk+/PPP+eVV17h5ptvdlQVIiIi0gtPPfUUDzzwAJdffjnh4eHODkdEROSs4rCk28fHBz8/P0dtXkRERHpp6dKlVFVVkZCQwAUXXMCQIUPs1lssFt555x0nRSciInJmc1jSfdddd7F27VquvvpqR1UhIiIivfDf//4XFxcXhg4dSmFhIYWFhXbrLRaLkyITERE58zks6R49ejRvvfUWP/rRj7j++us7HVUHuPHGGx1VvYiIiPz/Dh8+7OwQREREzloOS7pvv/12AHJycnj//fc7rbdYLLS1tTmqehERERERERGnszpqw5988kmPP//85z8dVbWIiIicoKmpiZdffpnbbruNH/7whxw4cACAd955h+zs7FPa1rJly4iJicHT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cjfddFOnZ6WKiIhI/3FY0v3II48QFhbGxRdfzNixY7FYLNx1112MHj2aoUOHsmDBAkdVLSIictYrKytj2LBh5vuO10FBQXblhgwZQlVV1Xcam4iIyNnEYUm3r68vO3bs4PHHH8fHx4e4uDi8vb1ZuHAhn376KV5eXo6qWkRERMB8ZOeJr0VEROS747AbqQF4eXmxYMECndUWERFxgszMTFxd24f6jieJ7N+/367Mie9FRESkfzks6Y6NjWXjxo2cf/75ndZ98803/OhHPyI7O9tR1YuIiJz17rzzzk7Lpk2bZvfeMAydBRcREXEghyXdhw8fpqmpqct1jY2N5ObmOqpqERGRs97q1audHYKIiIjg4Onl3R05z87OxtfX15FVi4iInNWmT5/u7BBERESEfr6R2uuvv84VV1zBFVdcAcDdd99tvu/4SUlJ4c477yQlJaVPdSxbtoyYmBg8PT1JTk7mX//6V4/lt23bRnJyMp6ensTGxrJixQq79WvWrMFisXT6aWxs7FN8IiIiIiIiIh369Ux3fX09R48eBdrPch87dqzTFHMPDw+mTJnCo48+esrbX79+PXPnzmXZsmVMmDCBl19+mUmTJpGenk5kZGSn8jk5OVxzzTXMnj2bN998k+3bt5OWlkZwcDA33XSTWc7Pz4/MzEy7z3Y811RERERERESkr/o16b777ru5++67AYiJiWHDhg1d3kitr55//nlmzpzJrFmzAFiyZAkffvghy5cv53e/+12n8itWrCAyMpIlS5YAkJSUxK5du3juuefskm6LxWL3LFMRERERERGR/uCw53Tn5OSYCXdFRQULFizguuuu4+c//znp6emnvL3m5ma+/PJLUlNT7ZanpqayY8eOLj+zc+fOTuWvuuoqdu3aRUtLi7mstraWqKgohg8fznXXXcfu3bt7jKWmpobq6mrzp7Wl9ZS/j4iIiIiIiJz5+vVM9wMPPMCf//xn8vLyzGV1dXWMHTuW3NxcDMMAYN26dXz++eeMHDmy19suKyujra2NkJAQu+UhISEUFxd3+Zni4uIuy7e2tlJWVkZoaCiJiYmsWbOGc889l+rqav7whz8wYcIE9u7dy4gRI7rc7ujRo6mvrzff/3jKj5l02yRKbaVEWaMAOGocxYKFIEsQAIdthxlmHYYnnjTSSJGtiBhrDADlRjk2bARbggHIteUS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MGpqapg1axYbN260K1NcXEx+fj6TJ0/uz6pFREREREREBpx+v+32tddey7XXXtvt+mHDhrF3797+rlZERERERERkwOnXM90iIiIiIiIi8j9KukVEREREREQcREm3iIiIiIiIiIMo6RYRERERERFxECXdIiIickqWLVtGTEwMnp6eJCcn869//avH8tu2bSM5ORlPT09iY2NZsWKF3fpXXnmFSy+9lICAAAICAvjBD37A559/blfmt7/9LRaLxe5n2LBh/f7dRERE+puSbhEREem19evXM3fuXBYtWsTu3bu59NJLmTRpEnl5eV2Wz8nJ4ZprruHSSy9l9+7dPPTQQ9x3331s2LDBLLN161Zuu+02PvnkE3bu3ElkZCSpqakUFBTYbeucc86hqKjI/Pn6668d+l1FRET6Q78/MkxERETOXM8//zwzZ85k1qxZACxZsoQPP/yQ5cuX87vf/a5T+RUrVhAZGcmSJUsASEpKYteuXTz33HPcdNNNAPzpT3+y+8wrr7zCX//6Vz7++GN++tOfmstdXV11dltERE47OtMtIiIivdLc3MyXX35Jamqq3fLU1FR27NjR5Wd27tzZqfxVV13Frl27aGlp6fIz9fX1tLS0EBgYaLf8wIEDhIWFERMTw9SpU8nOzj5pzDU1NVRXV1NdXU1TUxOtra0n/YyIiEh/0pluERER6ZWysjLa2toICQmxWx4SEkJxcXGXnykuLu6yfGtrK2VlZYSGhnb6zIIFCwgPD+cHP/iBueySSy7hjTfeICEhgZKSEp544gnGjx/Pvn37GDJkSLcxjx49mvr6evP95MmTSU1NpaioiLi4OABKSkqwWCwMHToUaE/uhw8fjpeXF42NjRw5coQRI0YAUFpais1mM8+4Hzp0iGHDhjFo0CCampo4fPgwI0eONNurubmZsLAwoH2qfV5eHrW1tbi5uREfH09GRgYAgYGBeHl5kZSUBMDhw4cJDAzEz8+PtrY2srKySExMxGKxcOzYMWpqaoiIiAAgLy8PPz8/Bg8ejGEY7N+/n4SEBFxcXKiurqayspKoqCgA8vPz8fb2Ng9oZGRkMGLECFxdXampqaGsrIz09HQAwsLCaGpqory8HIDExESys7NJSkqirq6OkpISYmNjASgqKsLV1ZXg4GAAsrKyiIyMxNPTk4aGBgoKCoiPjzfbu6MfABw8eJDw8HCzvfPy8khISADg6NGjtLa2mv0kOzubkJAQ0tPTcXd3JzY2lv379wMwZMgQPDw8KCwsJCkpiZycHIKCgvD19aW1tZUDBw6Y7VtRUUF9fT3Dhw8HIDc3l4CAgG7bu7q6msjISACOHDmCr69vt+1dUVFBdHQ06enphIeH09DQQEVFBdA+0+PgwYO0tLTg4+ODp6cnMTExABQWFuLu7k5QUBAAmZmZREdH4+HhQV1dHcXFxWafLS4uxmq12vXZiIgIs73z8/Pt+qxhGGZ7Hzp0iNDQULy9vTl06BBRUVFkZWUBEBwcjKurK0VFRQDExsYSERGBj48Pzc3NZGdnk5iYCEB5eTmNjY2Eh4d36rMntndlZSW1tbV2fdbf3x9/f39sNhuZmZmMHDkSq9VKVVUVVVVVZnvX1NRQW1tLZWUlAKNGjSIrK4vW1lb8/PwIDAw06ykoKMDT09PcJ+zfv5/Y2Fjc3d2pra2ltLS0xz4bFRWFh4cH9fX1p7yP6Pi7GTp0KFar1dwnxsXFUVxcTFJSUq/2EcHBwfj4+NDS0sLBgwft+mxDQ0OX7d3bfUR6ejoWi4WkpCQyMzNpa2vDz8+PgIAAcnNzSUpK6tU+4vg+6+Hh0WV793UfkZ6ebvbVjn1FfHw8BQUFNDQ0EBMT06t9xKBBg7rss01NTXbt3Zd9REd/zcjIwGaz0RtKukVEROSUWCwWu/eGYXRadrLyXS0HePbZZ3nrrbfYunUrnp6e5vJJkyaZr88991xSUlKIi4vj9ddfZ/78+d3W/c0332C1tk/sW7x4MS4uLuTm5gKYCW+HjuQS2v+hPd6JZTsSAKDT9ewnlq2qqjJfdyQSHUaNGtXtZwsKCuyua+9ILrsqW1dXZyZKgJlEdVW2pqbG/GcW2hOInmI6/qBJfHw8f/3rX7vcLrQnER1ycnK6jQEwE1E4eXsfO3bMfJ2Xl8ftt9/ebbyDBw/m3XffBdoPMvS03ePf19fX97q9a2trT9rekydPBsDf39/usoiOZBigsbGxU0xHjx41X584m6OnPnsq7d3xN9AR44ltGBAQYL4+cuRIj9utrq42X5/YZ3tq77q6OgoLC833mZmZXZadPHkyvr6+dgfoOhKurrZbXV1NaWmp+f7QoUM9xn98nz2V9j6xz57YhsfP1ImKiuKtt97qdrvH7yO+TXufbB9xfIwdif/x8Xf83ZxsH3FiTH1t7676bEefBOwOqHYk+h0xnmwf0VMMx7d3X/YRHTEmJSXR1tbG3r17ORkl3SIiItIrQUFBuLi4dDqrXVpa2ulsdodhw4Z1Wd7V1bXTGernnnuOp556io8++ojzzjuvx1gGDRrEueee2+mfwRP5+vri4uICgIeHR49lRUREHEHXdIuIiEivuLu7k5yczJYtW+yWb9myhfHjx3f5mZSUlE7lN2/ezNixY3FzczOX/f73v+fxxx/ngw8+YOzYsSeNpampiYyMjC6np4uIiAwkSrpFRESk1+bPn8+rr77Ka6+9RkZGBvPmzSMvL485c+YAsHDhQrs7js+ZM4fc3Fzmz59PRkYGr732GqtWreKBBx4wyzz77LM8/PDDvPbaa0RHR1NcXExxcTG1tbVmmQceeIBt27aRk5PDf/7zH26++Waqq6uZPn36d/flRURE+kDTy0VERKTXpkyZQnl5OY899hhFRUWMHj2aTZs2mTfqKioqsrueLiYmhk2bNjFv3jyWLl1KWFgYL7zwgvm4MIBly5bR3NzMzTffbFfXI488wm9/+1ug/bq72267jbKyMoKDgxk3bhz//ve/zXpFREQGKiXdIiIickrS0tJIS0vrct2aNWs6LZs4cSJfffVVt9s78YZEXVm3bl1vwxMRERlQlHSLyHduydYlzg6BuZfPdXYIIiIiInIW0DXdIiIiIiIiIg6ipFtERERERETEQZR0i4iIiIiIiDiIkm4RERERERERB1HSLSIiIiIiIuIgSrpFREREREREHERJt4iIiIiIiIiDKOkWERERERERcRAl3SIiIiIiIiIOoqRbRERERERExEGUdIuIiIiIiIg4iJJuEREREREREQdR0i0iIiIiIiLiIEq6RURERERERBxESbeIiIiIiIiIgyjpFhEREREREXEQJd0iIiIiIiIiDqKkW0RERERERMRBlHSLiIiIiIiIOIiSbhEREREREREHUdItIiIiIiIi4iBKukVEREREREQcREm3iIiIiIiIiIMo6RYRERERERFxECXdTtba0srWdVtpbWl1dijdUoz9QzH2n9MhTsXYPxSjDCStra189tlntLYO3N+1YuwfirF/KMb+oRj7hzNjPO2S7mXLlhETE4OnpyfJycn861//6rH8tm3bSE5OxtPTk9jYWFasWNGpzIYNGxg1ahQeHh6MGjWK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",
      "text/plain": [
       "<Figure size 1000x500 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# His.plot(figsize=(15,5))\n",
    "# plt.xticks(range(10));\n",
    "# His.plot.bar(figsize=(15,5));\n",
    "\n",
    "plt.figure(figsize=(10,5))\n",
    "plt.subplot(2,2,1)\n",
    "sns.barplot(data=His, x=His.index, y='Trump_histo', color='blue', alpha=0.5)\n",
    "plt.subplot(2,2,2)\n",
    "sns.barplot(data=His, x=His.index, y='Clinton_histo', color='red', alpha=0.5)\n",
    "plt.subplot(2,2,3)\n",
    "sns.barplot(data=His, x=His.index, y='Stein_histo', color='green', alpha=0.5)\n",
    "plt.subplot(2,2,4)\n",
    "sns.barplot(data=His, x=His.index, y='Benford', color='black', alpha=0.5)\n",
    "plt.tight_layout();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pour chaque candidat, on calcule la **distance euclidienne entre les effectifs théoriques et les effectifs de chaque candidats**. Si A et B sont deux listes de même longueur, la distance euclidienne entre A et B est donnée par :\n",
    "$$\\text{dist}(A,B) = || A-B ||_2 =\\sqrt{\\sum_{c=0}^9 \\left( A_c - B_c \\right)^2}.$$\n",
    "Dans numpy, cela se calcule simplement par `np.linalg.norm(A-B)`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.882465Z",
     "iopub.status.busy": "2026-10-30T13:11:11.882198Z",
     "iopub.status.idle": "2026-10-30T13:11:11.886602Z",
     "shell.execute_reply": "2026-10-30T13:11:11.886220Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Trump_histo': 0.05398891120857391,\n",
       " 'Clinton_histo': 0.05714784909840473,\n",
       " 'Stein_histo': 0.12083530757488783}"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Dictionnaire pour stocker les distances\n",
    "D = {}\n",
    "\n",
    "# Pour chaque candidat, calculer la norme euclidienne entre les colonnes\n",
    "for candidat in [\"Trump_histo\", \"Clinton_histo\", \"Stein_histo\"]:\n",
    "    D[candidat] = np.linalg.norm(His[candidat] - His['Benford'])\n",
    "\n",
    "D"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Selon ces valeurs, le candidat Stein semble légitime à contester les résultats. Mais est-ce effectivement si rare d'obtenir une telle distance ?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bonus : Simulation pour la détection d'éventuelles anomalies\n",
    "\n",
    "Pour commencer, on simule 10 votations qui suivent la loi de Benford."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.888329Z",
     "iopub.status.busy": "2026-10-30T13:11:11.888177Z",
     "iopub.status.idle": "2026-10-30T13:11:11.905899Z",
     "shell.execute_reply": "2026-10-30T13:11:11.905499Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Distance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>test8</th>\n",
       "      <td>0.033691</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test6</th>\n",
       "      <td>0.044985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Trump_histo</th>\n",
       "      <td>0.053989</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test7</th>\n",
       "      <td>0.054228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test4</th>\n",
       "      <td>0.056988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test3</th>\n",
       "      <td>0.057119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Clinton_histo</th>\n",
       "      <td>0.057148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test5</th>\n",
       "      <td>0.057707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test10</th>\n",
       "      <td>0.058235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test1</th>\n",
       "      <td>0.066595</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test2</th>\n",
       "      <td>0.076312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>test9</th>\n",
       "      <td>0.107039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Stein_histo</th>\n",
       "      <td>0.120835</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               Distance\n",
       "test8          0.033691\n",
       "test6          0.044985\n",
       "Trump_histo    0.053989\n",
       "test7          0.054228\n",
       "test4          0.056988\n",
       "test3          0.057119\n",
       "Clinton_histo  0.057148\n",
       "test5          0.057707\n",
       "test10         0.058235\n",
       "test1          0.066595\n",
       "test2          0.076312\n",
       "test9          0.107039\n",
       "Stein_histo    0.120835"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Créer une copie de Sel et ajouter une colonne avec des chiffres simulés selon FB\n",
    "Sel_copy = Sel.copy()\n",
    "\n",
    "for test in [\"test\"+str(i) for i in range(1,11)]:\n",
    "    # Générer nb_bureaux chiffres aléatoires selon la distribution FB\n",
    "    Sel_copy[test] = np.random.choice(range(10), size=nb_bureaux, p=FB)  \n",
    "    # Calculer les effectifs pour la colonne simulée\n",
    "    # His[test] = Sel_copy[test].value_counts() \n",
    "    His[test] = Sel_copy[test].value_counts(normalize=True) \n",
    "    # Calculer la norme entre les effectifs simulés et ceux de Benford\n",
    "    D[test] = np.linalg.norm(His[test] - His['Benford'])\n",
    "\n",
    "# Affichage des distances un peu plus joli\n",
    "pd.DataFrame( index=D.keys(), data=D.values(), columns=['Distance']).sort_values(by='Distance')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Bien que la valeur semble effectivement élevée pour Stein, il est possible que cette valeur ne soit pas si rares. En effet, dans nos 10 simulations, nous avons parfois obtenu des valeurs de distance euclidienne presque aussi élevées que celles observées pour Stein. Pour comprendre s'il s'agit d'evenement rares, on simule $10^4$ fois pour voir combien de fois `D['test']>D[candidat]` :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-30T13:11:11.907776Z",
     "iopub.status.busy": "2026-10-30T13:11:11.907615Z",
     "iopub.status.idle": "2026-10-30T13:11:18.538787Z",
     "shell.execute_reply": "2026-10-30T13:11:18.538196Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sur 10000 simulations,\n",
      " • 4 fois on a obtenu une distance supérieure à celle de Stein, soit 0.04% des fois;\n",
      " • 6178 fois on a obtenu une distance supérieure à celle de Clinton, soit 61.78% des fois;\n",
      " • 6953 fois on a obtenu une distance supérieure à celle de Trump, soit 69.53% des fois.\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "distance_Stein = D['Stein_histo']\n",
    "distance_Clinton = D['Clinton_histo']\n",
    "distance_Trump = D['Trump_histo']\n",
    "\n",
    "\n",
    "cpt_Stein = 0\n",
    "cpt_Clinton = 0\n",
    "cpt_Trump = 0\n",
    "\n",
    "N = 10_000\n",
    "for i in range(N):\n",
    "    test = pd.Series(np.random.choice(range(10), size=nb_bureaux, p=FB)) # le chiffre i apparait avec une probabilité FB[i] et ce pour 220 bureaux de vote\n",
    "    # test_histo = test.value_counts()\n",
    "    test_histo = test.value_counts(normalize=True)\n",
    "    D_test = np.linalg.norm( test_histo - His['Benford'])\n",
    "    if D_test > distance_Stein:\n",
    "        cpt_Stein += 1\n",
    "    if D_test > distance_Clinton:\n",
    "        cpt_Clinton += 1\n",
    "    if D_test > distance_Trump:\n",
    "        cpt_Trump += 1\n",
    "\n",
    "print(f\"\"\"Sur {N} simulations,\n",
    " • {cpt_Stein} fois on a obtenu une distance supérieure à celle de Stein, soit {cpt_Stein/N*100:.2f}% des fois;\n",
    " • {cpt_Clinton} fois on a obtenu une distance supérieure à celle de Clinton, soit {cpt_Clinton/N*100:.2f}% des fois;\n",
    " • {cpt_Trump} fois on a obtenu une distance supérieure à celle de Trump, soit {cpt_Trump/N*100:.2f}% des fois.\n",
    "  \"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "La visualisation de la distribution des effectifs du second chiffre des résultats de vote dans les bureaux des états du pour chaque candidat à montré une anomalie. Les résultats ne sont pas conforme à la loi théorique de Benford. De plus, très peu de simulations ont donné des écarts encore plus importants pour le candidat Stein, autrement dit c'est très rare de voir une telle distribution. "
   ]
  }
 ],
 "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.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
