Explorer des données ouvertes
Télécharge des données publiques (Open Data), analyse-les avec Python et crée des visualisations pour mieux les comprendre.
Objectifs pédagogiques
- Comprendre le format CSV et les données structurées
- Trouver et télécharger des données ouvertes (Open Data)
- Manipuler des données avec la bibliothèque Pandas
- Nettoyer et filtrer des données
- Créer des graphiques avec Matplotlib
Prérequis
- Python installé (ou Google Colab)
- Bibliothèques : pandas, matplotlib (pip install pandas matplotlib)
- Connaissances de base en Python
Où trouver des données ?
data.gouv.fr
Plateforme officielle des données ouvertes de l'État français.
Exemples : prénoms des bébés, accidents de la route, établissements scolaires...
data.education.gouv.fr
Données sur l'éducation nationale.
Exemples : effectifs par académie, résultats au bac, équipements...
INSEE
Statistiques sur la population, l'économie, la société.
Exemples : population par commune, revenus, emploi...
Kaggle
Plateforme internationale avec des jeux de données variés.
Exemples : films, jeux vidéo, sports, santé...
Les étapes du projet
Télécharger un jeu de données
Pour ce projet, on va utiliser les données des prénoms donnés aux bébés en France. Télécharge le fichier sur data.gouv.fr ou utilise les données d'exemple ci-dessous.
annee,sexe,prenom,nombre
2020,M,Gabriel,4125
2020,F,Jade,3814
2020,M,Leo,3712
2020,F,Louise,3674
2020,M,Raphael,3553
2020,F,Emma,3410
2020,M,Louis,3258
2020,F,Alice,3157
2020,M,Adam,3089
2020,F,Lina,2899
2019,M,Gabriel,4087
2019,F,Emma,3945
2019,M,Leo,3622
2019,F,Jade,3512Format CSV : CSV signifie "Comma-Separated Values". C'est un format simple où chaque ligne est un enregistrement et les colonnes sont séparées par des virgules.
Charger les données avec Pandas
Pandas est LA bibliothèque Python pour manipuler des données. Elle permet de lire des CSV et de les analyser facilement.
import pandas as pd
# Charger le fichier CSV
df = pd.read_csv("prenoms.csv")
# Afficher les premières lignes
print("Aperçu des données :")
print(df.head(10))
# Informations sur le jeu de données
print("\nInformations sur les données :")
print(f"Nombre de lignes : {len(df)}")
print(f"Colonnes : {list(df.columns)}")
print(f"\nTypes de données :")
print(df.dtypes)Résultat attendu :
annee sexe prenom nombre 0 2020 M Gabriel 4125 1 2020 F Jade 3814 2 2020 M Leo 3712 3 2020 F Louise 3674 4 2020 M Raphael 3553
Explorer et filtrer les données
Apprenons à extraire des informations spécifiques des données.
# Statistiques descriptives
print("Statistiques sur le nombre de naissances :")
print(df['nombre'].describe())
# Filtrer : seulement les garçons en 2020
garcons_2020 = df[(df['sexe'] == 'M') & (df['annee'] == 2020)]
print("\nTop 5 prénoms masculins en 2020 :")
print(garcons_2020.nlargest(5, 'nombre')[['prenom', 'nombre']])
# Filtrer : seulement les filles en 2020
filles_2020 = df[(df['sexe'] == 'F') & (df['annee'] == 2020)]
print("\nTop 5 prénoms féminins en 2020 :")
print(filles_2020.nlargest(5, 'nombre')[['prenom', 'nombre']])
# Rechercher un prénom spécifique
prenom_recherche = "Emma"
emma = df[df['prenom'] == prenom_recherche]
print(f"\nÉvolution du prénom {prenom_recherche} :")
print(emma[['annee', 'nombre']])Créer un graphique en barres
Visualisons les prénoms les plus populaires avec Matplotlib.
import matplotlib.pyplot as plt
# Top 10 prénoms en 2020 (tous sexes confondus)
top_2020 = df[df['annee'] == 2020].nlargest(10, 'nombre')
# Créer le graphique
plt.figure(figsize=(12, 6))
couleurs = ['#3498db' if s == 'M' else '#e74c3c' for s in top_2020['sexe']]
plt.barh(top_2020['prenom'], top_2020['nombre'], color=couleurs)
plt.xlabel('Nombre de naissances')
plt.ylabel('Prénom')
plt.title('Top 10 des prénoms en France en 2020')
plt.gca().invert_yaxis() # Mettre le plus populaire en haut
# Légende
from matplotlib.patches import Patch
legend = [Patch(color='#3498db', label='Garçons'),
Patch(color='#e74c3c', label='Filles')]
plt.legend(handles=legend)
plt.tight_layout()
plt.savefig('top_prenoms_2020.png', dpi=150)
plt.show()Créer un graphique d'évolution
Traçons l'évolution d'un prénom au fil des années.
# Comparer l'évolution de plusieurs prénoms
prenoms_comparer = ["Emma", "Gabriel", "Jade", "Leo"]
plt.figure(figsize=(12, 6))
for prenom in prenoms_comparer:
donnees = df[df['prenom'] == prenom].sort_values('annee')
plt.plot(donnees['annee'], donnees['nombre'],
marker='o', linewidth=2, label=prenom)
plt.xlabel('Année')
plt.ylabel('Nombre de naissances')
plt.title('Évolution des prénoms populaires')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('evolution_prenoms.png', dpi=150)
plt.show()Créer un camembert
Visualisons la répartition garçons/filles.
# Répartition garçons/filles en 2020
data_2020 = df[df['annee'] == 2020]
repartition = data_2020.groupby('sexe')['nombre'].sum()
plt.figure(figsize=(8, 8))
couleurs = ['#3498db', '#e74c3c']
labels = ['Garçons', 'Filles']
plt.pie(repartition, labels=labels, colors=couleurs,
autopct='%1.1f%%', startangle=90,
explode=(0.02, 0.02))
plt.title('Répartition des naissances par sexe (2020)')
plt.tight_layout()
plt.savefig('repartition_sexe.png', dpi=150)
plt.show()Analyser et interpréter
La dernière étape est de rédiger une analyse de tes découvertes.
# Questions à te poser pour ton analyse :
# 1. Quel est le prénom le plus donné ?
top_prenom = df.nlargest(1, 'nombre')
print(f"Prénom le plus donné : {top_prenom['prenom'].values[0]}")
# 2. Y a-t-il plus de naissances de garçons ou de filles ?
total_par_sexe = df.groupby('sexe')['nombre'].sum()
print(f"\nTotal par sexe :\n{total_par_sexe}")
# 3. Quels prénoms montent ou descendent ?
# Comparer les données sur plusieurs années...
# 4. Y a-t-il des prénoms mixtes ?
prenoms_mixtes = df.groupby('prenom')['sexe'].nunique()
mixtes = prenoms_mixtes[prenoms_mixtes > 1].index.tolist()
print(f"\nPrénoms donnés aux deux sexes : {mixtes[:5]}")- - Quelles tendances observes-tu ?
- - Y a-t-il des surprises dans les données ?
- - Comment expliquer certaines évolutions ?
- - Que pourrais-tu prédire pour les prochaines années ?
Critères d'évaluation
| Critère | Points |
|---|---|
| Chargement correct du fichier CSV | 2 pts |
| Filtrage et manipulation des données avec Pandas | 4 pts |
| Création d'au moins 2 graphiques différents | 4 pts |
| Graphiques lisibles et bien présentés | 3 pts |
| Analyse écrite des résultats | 4 pts |
| Originalité (données personnelles ou questions innovantes) | 3 pts |
| Total | 20 pts |
Pour aller plus loin
Variante 1 : Données locales
Utilise les données de ta commune ou région (accidents, équipements, transports).
Variante 2 : Corrélations
Croise plusieurs jeux de données pour trouver des corrélations.
Variante 3 : Dashboard
Crée un dashboard interactif avec Plotly ou Streamlit.
Variante 4 : Carte
Visualise des données géographiques sur une carte avec Folium.
