Elections américaines

Dans cet exercice, vous allez développer un script Python pour traiter et afficher les résultats d'une élection américaine. Le script devra présenter les résultats état par état dans un tableau en ligne de commande avec des informations détaillées et une analyse du vainqueur potentiel. Vous utiliserez la bibliothèque Rich pour le formatage en couleurs et l'affichage en tableau.

Vous développerez ce script en plusieurs étapes progressives pour construire le tableau des résultats, calculer le gagnant actuel ou projeté, et afficher une liste des swing states.

Contexte des élections américaines

Les élections présidentielles américaines fonctionnent avec un système de "grands électeurs" : chaque état dispose d'un nombre spécifique de grands électeurs basé sur sa population. Le candidat qui remporte la majorité des voix dans un état reçoit tous les grands électeurs de cet état (sauf au Maine et au Nebraska, où le système est proportionnel). Pour être élu, un candidat doit obtenir au moins 270 des 538 grands électeurs.

Certains états, appelés "swing states", jouent un rôle décisif dans les élections. Il s'agit d'états où le vote est traditionnellement serré entre démocrates et républicains.

Récupération des données

Les données actualisées sont disponibles à l'adresse suivante: https://ttrinfo.be/elections. Vous allez développer un script qui télécharge ce fichier pour pouvoir présenter les résultats état par état.

Voici le code Python qui permet de récupérer ce fichier de données et de le charger en mémoire sous forme d'objets de type dictionnaire.

import requests
import json

# Initialisation
url = "https://ttrinfo.be/elections"  # URL du fichier JSON

# Chargement des données
response = requests.get(url)
data = response.json()
electeurs = data['electeurs']
update_time = data['update']

Structure de l'objet JSON

Le fichier JSON fourni par le script PHP contient les informations suivantes :

  • update : date et heure de la dernière mise à jour des données.
  • electeurs : liste des états, chaque état ayant les informations suivantes :
    • code : code de l'état (par exemple "MI" pour Michigan).
    • nom : nom complet de l'état.
    • 2020 : parti vainqueur en 2020 ("d" pour démocrate, "r" pour républicain).
    • vainqueur : parti vainqueur en 2024 (même codage).
    • typo_2020 : tendance de vote en 2020 (ex : "d++" pour un fort soutien démocrate, "r++" pour un fort soutien républicain).
    • grd : nombre de grands électeurs pour l'état.

Étapes de l'exercice

Prérequis

Installez les bibliothèques Rich et Request en exécutant :

pip install rich
pip install request

Vous pouvez aussi utiliser le package manager de Thonny ou PyCharm.

RAPPEL: pour voir les couleurs dans la console, il faut modifier la configuration de PyCharm ou lancer le script dans la console dans Thonny (ctrl-t).

Étape 1 : Chargement et préparation des données

  1. Chargement du JSON :

    • Utilisez requests pour charger le fichier JSON disponible en ligne.
    • Transformez le contenu JSON en un objet Python et affichez les premiers éléments pour vérifier la structure.
  2. Extraction des données nécessaires :

    • Créez un tableau d'états, chaque état étant représenté par un dictionnaire contenant :
      • le code de l'état,
      • le parti vainqueur en 2020,
      • le parti vainqueur en 2024,
      • la tendance de vote en 2020,
      • le nombre de grands électeurs.

Étape 2 : Affichage des résultats par état dans un tableau

  1. Utilisation de Rich pour créer un tableau :

    • Créez un tableau avec Rich.Table() et ajoutez des colonnes pour le nom de l'état, le vainqueur en 2020, la tendance de vote en 2020, les grands électeurs et le vainqueur en 2024.
  2. Affichage en couleur :

    • Affichez le parti vainqueur avec un code couleur : bleu pour les démocrates, rouge pour les républicains, et gris pour indéterminé.
    • Formatez le nom des états sous la forme "Michigan (MI)".
  3. Affichage des noms complets des partis :

    • Remplacez les abréviations "d" et "r" par "Démocrate" et "Républicain" respectivement.

Le tableau devra ressembler à ceci:

Dernière mise à jour : 2024-11-06 06:14:08

┌───────────────────────┬──────────────────┬───────────────┬─────────────────┬──────────────────┬─────────┐
│        État           │ Vainqueur 2020   │ Tendance 2020 │ Grands électeurs│ Vainqueur 2024   │ Bascule │
├───────────────────────┼──────────────────┼───────────────┼─────────────────┼──────────────────┼─────────┤
│ Arizona (AZ)          │ Démocrate        │ d+            │ 11              │ ----             │         │
│ Georgia (GA)          │ Démocrate        │ –             │ 16              │ Républicain      │ →       │
│ Michigan (MI)         │ Démocrate        │ d+            │ 15              │ Démocrate        │         │
│ Nevada (NV)           │ Démocrate        │ d+            │ 6               │ Démocrate        │         │
│ North Carolina (NC)   │ Républicain      │ –             │ 16              │ Républicain      │         │
│ Pennsylvania (PA)     │ Démocrate        │ d+            │ 19              │ ----             │         │
│ Wisconsin (WI)        │ Démocrate        │ d+            │ 10              │ Républicain      │ →       │
│ Florida (FL)          │ Républicain      │ r++           │ 30              │ Républicain      │         │
│ Texas (TX)            │ Républicain      │ r++           │ 40              │ Républicain      │         │
│ Ohio (OH)             │ Républicain      │ r+++          │ 17              │ Républicain      │         │
└───────────────────────┴──────────────────┴───────────────┴─────────────────┴──────────────────┴─────────┘

Utilise des couleurs pour faciliter l'identification des partis

Étape 3 : Calcul du résumé des résultats

  1. Statistiques de dépouillement

    • Calculez le nombre d'états dépouillés ou non
    • Calculez le pourcentage de grands électeurs attribués
  2. Total des grands électeurs par parti :

    • Calculez le nombre total de grands électeurs pour chaque parti (démocrates et républicains) en fonction des résultats actuels de 2024.
    • Affichez le total des grands électeurs pour chaque parti.
  3. Affichage du gagnant actuel :

    • Affichez le parti ayant remporté la majorité absolue (270 grands électeurs ou plus).
    • Si aucun parti n'a atteint 270 grands électeurs, indiquez que l'élection est actuellement indéterminée.

Exemple de résultat:

Dernière mise à jour : 2024-11-06 06:14:08

Résumé des résultats :
- Etats dépouillés: 28/51 (54%)
- Total Grands Électeurs : 538
- Grands Électeurs attribués: 418/538 (78%)
- Total Démocrates : 218 grands électeurs
- Total Républicains : 200 grands électeurs

Pas de vainqueur actuellement.

Étape 4 : Projection du vainqueur potentiel

  1. Projection basée sur la tendance 2020 :

    • Si aucun vainqueur n’a encore atteint 270 grands électeurs, réalisez une projection en ajoutant aux résultats actuels les grands électeurs en fonction de la tendance en 2020 (typo_2020).
  2. Vérification de la projection :

    • Calculez si l'un des partis atteint 270 grands électeurs après projection.
    • Affichez le gagnant projeté.

Exemple de sortie mise à jour:

Dernière mise à jour : 2024-11-06 06:14:08

Résumé des résultats :
- Total Grands Électeurs : 538
- Total Démocrates : 218 grands électeurs
- Total Républicains : 200 grands électeurs

Projection : Les Démocrates pourraient remporter l'élection.

Étape 5 : Identification des Swing States

  1. Définition des Swing States :

    • Identifiez les états qui sont potentiellement indécis (swing states). Ce sont les états où la tendance 2020 est faible ou équilibrée, typiquement marqués par "d+", "r+", ou "–" dans typo_2020.
  2. Affichage des Swing States :

    • Affichez les swing states en les marquant dans le tableau avec une couleur différente ou un style en italique.
    • Ajoutez une liste des swing states sous le tableau pour mieux visualiser les états indécis.
swing_states = ["AZ","GA","MI","NV","NC","PA","WI"]

Exemple de structure de code attendue

Voici un exemple de la structure du code final que vous devriez obtenir en suivant les étapes.

import requests
import json
from rich.table import Table
from rich.console import Console
from rich import box

url = "https://ttrinfo.be/elections"  # URL du fichier JSON
console = Console()

# Fonction pour convertir le code du parti en son nom complet
def get_party_name(party_code):
    return "Démocrate" if party_code == "d" else "Républicain" if party_code == "r" else "Indéterminé"

# Fonction pour détecter les Swing States
def is_swing_state(code):
    return "..." # TODO

# Chargement des données
response = requests.get(url)
data = response.json()
electeurs = data['electeurs']
update_time = data['update']

# Préparation du tableau
table = Table(title="Résultats Élection USA 2024", box=box.SIMPLE)
table.add_column("État", style="cyan", justify="center")
table.add_column("Vainqueur 2020", justify="center")
table.add_column("Tendance 2020", justify="center")
table.add_column("Grands électeurs", justify="center")
table.add_column("Vainqueur 2024", justify="center")

# Initialisation des totaux
total_d = total_r = 0
swing_states = [] # Remplir

# Remplissage du tableau et calcul des totaux
for etat in electeurs:
    # Initialisation des données
    code = etat["code"]
    nom_etat = f"..." # TODO
    vainqueur_2020 = "" # TODO
    vainqueur_2024 = get_party_name(etat["vainqueur"]) if etat["vainqueur"] else "---"
    tendance_2020 = etat["typo_2020"]
    nombre_electeurs = int(etat["grd"])

    # Vérification si l'état est un swing state
    # TODO

    # Coloration des cellules
    # TODO

    # Ajout de la ligne dans le tableau
    table.add_row(
      # TODO
    )

    # Calcul des totaux par parti

# Affichage de l'heure de mise à jour

# Affichage du tableau

# Résumé et détermination du gagnant
total_grands_electeurs = sum(int(etat["grd"]) for etat in electeurs)

console.print(f"\n[bold]Résumé des résultats :[/]")
console.print(f"- Total Grands Électeurs : {total_grands_electeurs}")
console.print(f"- Total Démocrates : {total_d} grands électeurs", style="blue")
console.print(f"- Total Républicains : {total_r} grands électeurs", style="red")

# Vérification du vainqueur
  # Affichage du vainqueur (si majorité absolue)
  # ou Projection en fonction de la tendance 2020

Résumé de la solution

Ce projet consiste à développer un script Python qui analyse et affiche les résultats d'une élection américaine en ligne de commande. L'objectif est de lire des données JSON, les traiter et les afficher sous forme de tableau en utilisant des couleurs et un format intuitif. Voici les étapes pour atteindre cet objectif.


Étape 1 : Charger les données JSON

Commencez par récupérer le fichier JSON contenant les résultats. Utilisez la bibliothèque requests pour télécharger les données depuis l’URL fournie. Ensuite, chargez ce JSON en mémoire sous forme d'objet Python (liste de dictionnaires) pour y accéder facilement. Familiarisez-vous avec les champs de l'objet, notamment les informations par état comme le nombre de grands électeurs, le vainqueur en 2020 et 2024, et la tendance 2020.

Étape 2 : Préparer le tableau pour l'affichage

Pour afficher les données de manière lisible en ligne de commande, utilisez la bibliothèque Rich. Créez un tableau Rich.Table() et ajoutez des colonnes pour les informations clés :

  • le nom et le code de l'état (formaté comme "Michigan (MI)"),
  • le parti gagnant en 2020,
  • la tendance de vote en 2020,
  • le nombre de grands électeurs,
  • le vainqueur en 2024,
  • une colonne de bascule pour indiquer si l'état a changé de parti.

Définissez un style pour chaque colonne, par exemple en colorant les partis gagnants (bleu pour Démocrates, rouge pour Républicains) et en mettant en italique les "swing states" pour les distinguer.

Étape 3 : Calculer les totaux par parti et identifier les états ayant basculé

Pour chaque état, vérifiez si le parti vainqueur en 2024 est différent de celui de 2020. Si c'est le cas, ajoutez une indication dans la colonne "Bascule" pour montrer le changement de parti. Pour les états sans changement, laissez la colonne vide.

En parallèle, calculez le nombre total de grands électeurs pour chaque parti en fonction des résultats actuels de 2024. Ajoutez les grands électeurs au total des démocrates ou des républicains en fonction du vainqueur de chaque état.

Étape 4 : Identifier les Swing States

En plus du total par parti, marquez les "swing states" dans le tableau. Ces états sont définis par leur tendance en 2020 (ex : "d+", "r+", ou "–"), indiquant qu'ils sont traditionnellement indécis. Vous pouvez aussi utiliser une liste des swing states connus pour cette élection.

Les swing states peuvent être mis en italique pour attirer l’attention sur ces états stratégiques dans l’élection.

Étape 5 : Afficher le tableau et le résumé des résultats

Après avoir construit le tableau avec Rich, affichez-le pour voir les résultats détaillés par état. Ensuite, affichez un résumé avec :

  • le nombre total de grands électeurs,
  • le total de grands électeurs obtenus par chaque parti,
  • le gagnant actuel, si l’un des partis a dépassé les 270 grands électeurs.

Si aucun parti n'a atteint 270 grands électeurs, calculez une projection basée sur la tendance 2020. Ajoutez les grands électeurs des états indécis en fonction de la tendance de 2020 pour déterminer le gagnant potentiel si les tendances se maintiennent.


Points clés

  1. Affichage clair : Utilisez des couleurs et des styles pour distinguer les informations importantes.
  2. Calculs dynamiques : Les totaux et les projections changent selon les données actuelles et la tendance passée.
  3. Visualisation des swings states et des basculements : Ces éléments ajoutent de la profondeur à l'analyse et permettent de voir d'un coup d'œil les états qui influencent le résultat de l’élection.

En suivant ces étapes, vous construirez un outil d'analyse complet et visuel pour les résultats d'une élection américaine.

Pour aller plus loin