🚀 Bootcamp Data Science — 4 Semaines

Transformez des données brutes en insights actionnables

Club D.I.A.M 💎
Focus : Données Africaines Réelles 🌍

📚 Introduction au Programme

Votre parcours de 4 semaines pour maîtriser la Data Science

🌍 Pourquoi des données africaines ?

Ce programme est unique car il utilise exclusivement des données africaines réelles. Vous travaillerez sur des problématiques locales concrètes : éducation, santé publique, agriculture, économie.

Objectif : Développer des compétences directement applicables dans notre contexte.

🎯 Objectifs du Bootcamp

📅 Structure du Programme

SemaineThème PrincipalMini-Projet
Semaine 1NumPy & Pandas — FondationsAnalyse démographique Afrique
Semaine 2Pandas Avancé — ManipulationDonnées éducatives africaines
Semaine 3Visualisation & EDASanté publique (Paludisme)
Semaine 4Analyse Avancée & ProjetsProjet final complet

🛠️ Prérequis

Connaissances nécessaires :

  • Bases en Python (variables, boucles, fonctions)
  • Compréhension des concepts mathématiques de base
  • Installation de Python 3.8+ et Jupyter Notebook

📦 Installation de l'environnement

terminal
# Installation des bibliothèques nécessaires
pip install numpy pandas matplotlib seaborn jupyter scikit-learn

# Vérification des installations
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

print(f"NumPy version: {np.__version__}")
print(f"Pandas version: {pd.__version__}")

📊 SEMAINE 1 : NumPy & Pandas — Les Fondations

Maîtriser les outils essentiels de manipulation de données

Semaine 1/4

📅 Jour 1 : NumPy — Calcul Vectoriel

💡 Qu'est-ce que NumPy ?

NumPy (Numerical Python) est la bibliothèque fondamentale pour le calcul scientifique en Python. Elle fournit des arrays multidimensionnels et des opérations vectorielles ultra-rapides.

Pourquoi NumPy ? 50x à 100x plus rapide que les listes Python natives !

📖
Cours — Arrays NumPy : création, opérations, indexation
numpy_bases.py
import numpy as np

# === CRÉATION D'ARRAYS ===

# Array 1D (vecteur) — températures en Afrique
temperatures = np.array([28, 29, 27, 30, 31, 29, 28])
print("Températures:", temperatures)

# Array 2D (matrice) — [température, humidité]
donnees_stations = np.array([
    [28, 85],  # Station 1
    [26, 90],  # Station 2
    [24, 75]   # Station 3
])

# Attributs essentiels
print(f"Shape: {temperatures.shape}")     # (7,)
print(f"Dimensions: {temperatures.ndim}")  # 1
print(f"Type: {temperatures.dtype}")       # int64
print(f"Taille: {temperatures.size}")      # 7

# === GÉNÉRATION D'ARRAYS ===
zeros       = np.zeros(5)                # [0. 0. 0. 0. 0.]
ones        = np.ones((3, 4))            # Matrice 3x4 de 1
arange_arr  = np.arange(0, 10, 2)       # [0 2 4 6 8]
linspace_arr= np.linspace(0, 1, 5)      # 5 valeurs entre 0 et 1

np.random.seed(42)
random_arr  = np.random.rand(5)          # 5 flottants aléatoires
random_int  = np.random.randint(0, 100, 10) # 10 entiers 0-100

# === OPÉRATIONS VECTORIELLES ===
celsius           = np.array([25, 28, 30, 27, 29])
fahrenheit        = celsius * 9/5 + 32   # Conversion sans boucle !
print(f"Moyenne: {np.mean(celsius)}°C")
print(f"Écart-type: {np.std(celsius):.2f}")

# === INDEXATION & SLICING ===
arr = np.array([10, 20, 30, 40, 50])
print(arr[0])      # 10
print(arr[-1])     # 50
print(arr[1:4])    # [20 30 40]
print(arr[::2])    # [10 30 50]

# Indexation booléenne (très puissant !)
jours_chauds = celsius[celsius > 27]
print("Températures > 27°C:", jours_chauds)

# === MATRICES ===
matrice = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.sum(matrice, axis=0))  # [12 15 18] — somme colonnes
print(np.sum(matrice, axis=1))  # [ 6 15 24] — somme lignes
print(matrice.T)                 # Transposée
print(matrice.reshape(9, 1))    # Vecteur colonne 9x1
Exercice 1.1 ✏️ Analyse des précipitations en Afrique

Contexte : Vous avez collecté les précipitations (en mm) pendant 12 mois dans une ville africaine.

exercice_1_1.py
import numpy as np

# Précipitations mensuelles (mm) — données africaines
precipitations = np.array([200, 180, 220, 150, 80, 20, 10, 15, 50, 160, 240, 210])
mois = ['Jan','Fév','Mar','Avr','Mai','Jun',
        'Jul','Aoû','Sep','Oct','Nov','Déc']
  1. Calculez la précipitation totale annuelle
  2. Trouvez le mois le plus sec et le mois le plus pluvieux
  3. Calculez la moyenne mensuelle
  4. Identifiez les mois avec précipitations > 150 mm (saison des pluies)
  5. Calculez la différence max − min

📅 Jour 2 : Pandas — Introduction aux DataFrames

💡 Qu'est-ce que Pandas ?

Pandas est la bibliothèque de manipulation de données en Python. Un DataFrame est une table bidimensionnelle — pensez à un tableur Excel, mais infiniment plus puissant.

📖
Cours — Series & DataFrames : création, lecture, exploration
pandas_intro.py
import pandas as pd
import numpy as np

# === CRÉER UN DATAFRAME ===
data = {
    'Pays'    : ['Gabon', 'Cameroun', 'Congo', "Côte d'Ivoire", 'Sénégal'],
    'PIB_Mds' : [20.3, 44.1, 14.9, 61.4, 27.6],
    'Pop_M'   : [2.3, 27.9, 5.8, 26.9, 17.2],
    'Scolarisation': [88, 78, 72, 62, 57]
}
df = pd.DataFrame(data)

# === EXPLORER LE DATAFRAME ===
print(df.head())        # 5 premières lignes
print(df.info())        # Types + valeurs non-nulles
print(df.describe())   # Statistiques descriptives
print(df.shape)          # (5, 4)
print(df.columns)        # Index des colonnes

# === SÉLECTIONNER ===
print(df['Pays'])                         # Colonne entière
print(df[['Pays', 'PIB_Mds']])            # Plusieurs colonnes
print(df.loc[0])                           # Ligne par label
print(df.loc[0, 'Pays'])                  # Cellule spécifique
print(df.iloc[0:3, 0:2])                  # Slicing par position

# === FILTRER ===
grands = df[df['PIB_Mds'] > 30]           # PIB > 30 Mds
scol   = df[(df['Scolarisation'] > 70) & (df['Pop_M'] > 5)]

# === AJOUTER / MODIFIER ===
df['PIB_par_habitant'] = df['PIB_Mds'] / df['Pop_M'] * 1000
df['Pays'] = df['Pays'].str.upper()

# === TRIER ===
df_trie = df.sort_values('PIB_par_habitant', ascending=False)
print(df_trie)
Exercice 1.2 ✏️ Analyse des données économiques africaines

Contexte : Créez un DataFrame avec les données de 6 pays africains (PIB, population, taux de scolarisation, espérance de vie) et répondez aux questions :

  1. Quel pays a le PIB par habitant le plus élevé ?
  2. Quels pays ont un taux de scolarisation > 75% ?
  3. Quelle est la corrélation entre PIB et scolarisation ?
  4. Ajoutez une colonne Catégorie : "Riche" si PIB/hab > 5000, sinon "Émergent"
  5. Triez par espérance de vie décroissante

🔍 SEMAINE 2 : Pandas Avancé — Manipulation

Groupby, merge, pivot, nettoyage — les techniques pro de la Data Science

Semaine 2/4

📅 Jour 1 : Groupby & Agrégations

📖
Cours — groupby(), agg(), pivot_table()
groupby.py
import pandas as pd

# Données scolaires africaines
df = pd.DataFrame({
    'Region'  : ['Nord', 'Sud', 'Nord', 'Est', 'Sud', 'Est'],
    'Matiere' : ['Maths', 'Maths', 'Science', 'Maths', 'Science', 'Science'],
    'Score'   : [72, 68, 81, 75, 70, 79],
    'Nb_eleves': [120, 95, 110, 88, 102, 115]
})

# === GROUPBY SIMPLE ===
moy_region = df.groupby('Region')['Score'].mean()
print(moy_region)

# === GROUPBY MULTI-COLONNES ===
stats = df.groupby(['Region', 'Matiere']).agg({
    'Score'    : ['mean', 'std', 'count'],
    'Nb_eleves': 'sum'
})
print(stats)

# === PIVOT TABLE ===
pivot = df.pivot_table(
    values='Score',
    index='Region',
    columns='Matiere',
    aggfunc='mean'
)
print(pivot)

# === VALEURS MANQUANTES ===
print(df.isnull().sum())               # Nb NaN par colonne
df_clean   = df.dropna()               # Supprimer lignes NaN
df_filled  = df.fillna(df.mean(numeric_only=True))  # Remplir par moyenne
Exercice 2.1 ✏️ Analyse des résultats scolaires par région

Contexte : Dataset des résultats scolaires de plusieurs pays africains par région et matière.

  1. Calculez la moyenne par région pour chaque matière
  2. Identifiez la région avec le meilleur taux de réussite
  3. Créez une pivot_table Score × Région × Matière
  4. Gérez les valeurs manquantes (remplacez par la médiane)
  5. Triez les régions par score moyen décroissant

📅 Jour 2 : Merge & Join

📖
Cours — merge(), concat(), join()
merge_join.py
import pandas as pd

# Deux datasets africains à fusionner
df_pop = pd.DataFrame({
    'Pays'  : ['Gabon', 'Cameroun', 'Congo', 'Mali'],
    'Pop_M': [2.3, 27.9, 5.8, 22.4]
})
df_eco = pd.DataFrame({
    'Pays'  : ['Gabon', 'Cameroun', 'Sénégal', 'Mali'],
    'PIB'   : [20.3, 44.1, 27.6, 18.1]
})

# INNER JOIN — seulement les pays présents dans les 2
inner = pd.merge(df_pop, df_eco, on='Pays', how='inner')

# LEFT JOIN — tous les pays de df_pop
left  = pd.merge(df_pop, df_eco, on='Pays', how='left')

# OUTER JOIN — tous les pays
outer = pd.merge(df_pop, df_eco, on='Pays', how='outer')

# CONCAT — empiler verticalement
df_afrique = pd.concat([df_pop, df_eco], ignore_index=True)

print("INNER:\n", inner)
print("LEFT:\n", left)
Exercice 2.2 ✏️ Fusion de datasets économiques et sanitaires

Contexte : Vous avez deux fichiers : un avec les données économiques et un avec les indicateurs de santé de pays africains.

  1. Effectuez un inner join sur le nom du pays
  2. Effectuez un left join et identifiez les pays sans données sanitaires
  3. Calculez le PIB par médecin après fusion
  4. Analysez la corrélation entre dépenses santé et espérance de vie

📈 SEMAINE 3 : Visualisation & EDA

Créer des visualisations impactantes et analyser les données en profondeur

Semaine 3/4

📅 Jour 1 : Matplotlib — Les Bases

📖
Cours — Graphiques avec Matplotlib : bar, line, scatter, pie
matplotlib_bases.py
import matplotlib.pyplot as plt
import numpy as np

# Données santé — cas de paludisme en Afrique
pays   = ['Gabon', 'Cameroun', 'Congo', 'Sénégal', "C. d'Ivoire"]
cas    = [1250, 890, 650, 720, 580]
couleurs = ['#009e60', '#3a75c4', '#fcd116', '#009e60', '#3a75c4']

# === GRAPHIQUE EN BARRES ===
plt.figure(figsize=(10, 6))
bars = plt.bar(pays, cas, color=couleurs, edgecolor='white')
plt.title('Cas de Paludisme — Afrique 2024', fontsize=14, fontweight='bold')
plt.xlabel('Pays'); plt.ylabel('Nombre de cas')
for bar, val in zip(bars, cas):
    plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 10,
             str(val), ha='center', fontweight='bold')
plt.tight_layout(); plt.show()

# === GRAPHIQUE EN LIGNE ===
mois   = range(1, 13)
precip = [200, 180, 220, 150, 80, 20, 10, 15, 50, 160, 240, 210]
plt.figure(figsize=(10, 5))
plt.plot(mois, precip, color='#009e60', linewidth=2, marker='o', markersize=6)
plt.fill_between(mois, precip, alpha=0.15, color='#009e60')
plt.title('Précipitations mensuelles'); plt.grid(alpha=0.3)
plt.tight_layout(); plt.show()

# === SCATTER PLOT ===
pib = np.random.uniform(10, 80, 20)
scol = 50 + pib * 0.4 + np.random.normal(0, 5, 20)
plt.figure(figsize=(8, 6))
plt.scatter(pib, scol, c='#3a75c4', s=80, alpha=0.7)
plt.xlabel('PIB (Mds $)'); plt.ylabel('Taux scolarisation (%)')
plt.title('Corrélation PIB ↔ Scolarisation')
plt.tight_layout(); plt.show()
Exercice 3.1 ✏️ Dashboard Santé Publique Africaine

Contexte : Créez un dashboard complet sur la santé publique en Afrique (paludisme, vaccination, mortalité infantile).

  1. Graphique en barres : cas de paludisme par pays
  2. Pie chart : répartition des budgets santé
  3. Line chart : évolution des cas sur 10 ans
  4. Scatter plot : budget santé vs espérance de vie
  5. Ajoutez titres, labels, légendes et exportez en PNG

📅 Jour 2 : Seaborn & EDA Complète

📖
Cours — Seaborn : heatmap, pairplot, boxplot + Méthodologie EDA

✅ Les 6 étapes d'une EDA professionnelle

  1. Chargement : importer et inspecter les données
  2. Nettoyage : NaN, doublons, types incorrects
  3. Statistiques : describe(), distributions
  4. Visualisations : univariées, bivariées, multivariées
  5. Corrélations : heatmap, pairplot
  6. Conclusions : insights actionnables
seaborn_eda.py
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

sns.set_theme(style='whitegrid', palette='viridis')

# Dataset africain simulé
df = pd.DataFrame({
    'PIB'       : [20, 44, 61, 27, 18, 42, 15, 33],
    'Scolarisa.': [88, 78, 62, 57, 52, 72, 48, 68],
    'Esperance' : [65, 59, 58, 62, 55, 61, 53, 60],
    'Sante_Dep' : [4.2, 3.1, 2.8, 3.5, 2.2, 3.8, 2.0, 3.3]
})

# HEATMAP — matrice de corrélations
plt.figure(figsize=(8, 6))
sns.heatmap(df.corr(), annot=True, cmap='RdYlGn', fmt='.2f', linewidths=0.5)
plt.title('Corrélations — Indicateurs Africains'); plt.tight_layout(); plt.show()

# PAIRPLOT — relations entre toutes les variables
sns.pairplot(df, corner=True)
plt.show()

# BOXPLOT — distribution par catégorie
plt.figure(figsize=(10, 5))
sns.boxplot(data=df, orient='h', palette='Set2')
plt.title('Distribution des indicateurs'); plt.tight_layout(); plt.show()

# DÉTECTION D'OUTLIERS — méthode IQR
Q1  = df['PIB'].quantile(0.25)
Q3  = df['PIB'].quantile(0.75)
IQR = Q3 - Q1
outliers = df[(df['PIB'] < Q1 - 1.5*IQR) | (df['PIB'] > Q3 + 1.5*IQR)]
print(f"Outliers PIB: {len(outliers)}")
Exercice 3.2 ✏️ EDA Complète — Données Éducatives Africaines

Contexte : Réalisez une EDA complète en 6 étapes sur un dataset éducatif africain (taux de scolarisation, budget, résultats, région).

  1. Chargement & inspection : shape, dtypes, head()
  2. Nettoyage : gérer les NaN, doublons, types
  3. Statistiques descriptives : describe(), value_counts()
  4. Visualisations : histogrammes, boxplots, barres
  5. Heatmap des corrélations
  6. Rapport : 5 insights actionnables pour les décideurs

🎯 SEMAINE 4 : Analyse Avancée & Projets Finaux

Combiner toutes les compétences — régression, pipeline complet, présentation

Semaine 4/4 ✓

📅 Jours 1-2 : Pipeline EDA → Régression Simple

📖
Cours — Régression linéaire avec NumPy & Scipy
regression.py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats

# Données : PIB vs Espérance de vie (Afrique)
pib         = np.array([15, 20, 27, 33, 42, 44, 61, 75])
esperance   = np.array([52, 55, 60, 62, 61, 59, 58, 64])

# Régression linéaire
slope, intercept, r_value, p_value, std_err = stats.linregress(pib, esperance)
print(f"Pente       : {slope:.4f}")
print(f"Intercept   : {intercept:.2f}")
print(f"R²          : {r_value**2:.3f}")
print(f"p-value     : {p_value:.4f}")

# Prédiction
pib_pred = np.linspace(min(pib), max(pib), 100)
y_pred   = slope * pib_pred + intercept

# Visualisation
plt.figure(figsize=(9, 6))
plt.scatter(pib, esperance, color='#009e60', s=80, zorder=3, label='Données')
plt.plot(pib_pred, y_pred, color='#3a75c4', linewidth=2, label=f'R² = {r_value**2:.3f}')
plt.xlabel('PIB (Mds $)'); plt.ylabel('Espérance de vie (ans)')
plt.title('Régression : PIB ↔ Espérance de vie — Afrique')
plt.legend(); plt.grid(alpha=0.3); plt.tight_layout(); plt.show()
Exercice 4.1 ✏️ Régression : Précipitations → Rendements Agricoles

Contexte : Analysez la relation entre les précipitations annuelles et les rendements agricoles dans différentes régions africaines.

  1. Calculez la corrélation de Pearson entre précipitations et rendements
  2. Construisez un modèle de régression linéaire
  3. Visualisez avec droite de régression et intervalle de confiance
  4. Interprétez le : votre modèle est-il fiable ?
  5. Prédisez le rendement pour 800mm de précipitations

🏆 Projets Finaux — Données Africaines

Mettez en pratique toutes vos compétences sur des problèmes africains réels

📊 Projet 1 : Analyse Démographique — Afrique

Analysez l'évolution de la population, de l'urbanisation et des indicateurs socio-économiques de plusieurs pays africains de 1960 à aujourd'hui.

Livrables :

  • Notebook Jupyter complet avec 10 visualisations annotées
  • Rapport narratif avec au moins 5 insights
  • Présentation de 5 minutes au groupe
NumPy Pandas Matplotlib Seaborn

🏥 Projet 2 : Santé Publique — Paludisme en Afrique Centrale

Analysez les taux de prévalence du paludisme, la couverture vaccinale et les ressources sanitaires dans 5 pays d'Afrique centrale.

Livrables :

  • EDA complète suivant la méthodologie des 6 étapes
  • Dashboard de visualisations (Matplotlib + Seaborn)
  • 3 recommandations de politique sanitaire basées sur les données
Pandas Seaborn EDA Rapport

🌱 Projet 3 : Agriculture & Sécurité Alimentaire

Étudiez les rendements agricoles et la sécurité alimentaire en lien avec les données climatiques (précipitations, températures).

Livrables :

  • Analyse de corrélation climat / rendements
  • Modèle de régression linéaire commenté
  • Visualisations géographiques si possible
NumPy Pandas Scipy Visualisation