· ExcelWorkflow · Python & Data Science · 6 min read
Python pour l'Analyse de Données : Le Guide Débutant à Expert (Pandas, NumPy, Matplotlib)
Apprenez Python pour la data science de zéro : Pandas pour manipuler des milliers de lignes, NumPy pour les calculs, Matplotlib et Seaborn pour des visualisations professionnelles. Tutoriel complet avec exemples.

Pourquoi Python est Devenu Indispensable pour les Analystes de Données
Python est aujourd’hui le langage de programmation le plus utilisé pour l’analyse de données. Mais ce n’est pas pour rien : là où Excel atteint ses limites (fichiers volumineux, traitements complexes, reproductibilité), Python excelle.
Les chiffres parlent d’eux-mêmes :
- Python peut traiter des fichiers de plusieurs gigaoctets en quelques secondes
- Une analyse qui prend 3h dans Excel prend 10 minutes en Python
- Python est utilisé par Netflix, Spotify, Google, Airbnb pour leurs analyses de données
Mais voici la bonne nouvelle : vous n’avez pas besoin d’être développeur pour utiliser Python. En quelques semaines, vous pouvez maîtriser les outils essentiels.
1. Installation et Premier Environnement
Anaconda : Le Kit de Démarrage Idéal
Pour commencer avec Python en data science, Anaconda est la solution recommandée. Elle installe en une fois :
- Python
- Jupyter Notebook (votre environnement de travail interactif)
- Pandas, NumPy, Matplotlib, Seaborn et 250+ librairies
Installation : Téléchargez Anaconda sur anaconda.com et lancez l’installateur. C’est tout.
Votre Premier Notebook Jupyter
# Importer les librairies essentielles
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
print("Python pour la data science — C'est parti !")
print(f"Pandas version: {pd.__version__}")
print(f"NumPy version: {np.__version__}")2. Pandas : La Révolution du Tableur
Créer et Importer des DataFrames
Un DataFrame Pandas est comme un tableau Excel, mais infiniment plus puissant. Voici comment importer vos données :
# Importer depuis Excel
df = pd.read_excel('ventes_2025.xlsx', sheet_name='Données')
# Importer depuis CSV
df = pd.read_csv('clients.csv', encoding='utf-8', sep=';')
# Importer depuis SQL
import sqlite3
conn = sqlite3.connect('ma_base.db')
df = pd.read_sql_query("SELECT * FROM ventes WHERE annee = 2025", conn)
# Aperçu rapide
print(df.head(5)) # 5 premières lignes
print(df.shape) # (lignes, colonnes)
print(df.dtypes) # Types de données
print(df.describe()) # Statistiques descriptivesNettoyage de Données : Le Vrai Travail
En data science, 80% du temps est consacré au nettoyage. Pandas rend ça rapide et reproductible.
# Identifier les valeurs manquantes
print(df.isnull().sum())
# Supprimer les lignes avec trop de valeurs manquantes
df_clean = df.dropna(thresh=len(df.columns) * 0.8)
# Remplir les valeurs manquantes de manière intelligente
df['CA'] = df['CA'].fillna(df['CA'].median())
df['Région'] = df['Région'].fillna('Inconnue')
# Supprimer les doublons
df_clean = df_clean.drop_duplicates(subset=['ID_Client', 'Date'])
# Normaliser les chaînes de caractères
df['Nom'] = df['Nom'].str.strip().str.title()
df['Email'] = df['Email'].str.lower().str.strip()
# Corriger les types
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
df['CA'] = pd.to_numeric(df['CA'], errors='coerce')
print(f"Données nettoyées : {len(df_clean)} lignes sur {len(df)} initiales")Analyse et Agrégation : GroupBy Puissant
# Ventes par région et par mois
analyse = df.groupby(['Région', df['Date'].dt.month]).agg(
CA_total=('CA', 'sum'),
Nb_transactions=('CA', 'count'),
CA_moyen=('CA', 'mean'),
CA_max=('CA', 'max')
).round(2)
print(analyse)
# Top 10 clients
top_clients = df.groupby('Client')['CA'].sum().nlargest(10)
print("\nTop 10 Clients :\n", top_clients)
# Évolution mensuelle avec calcul de croissance
monthly = df.groupby(df['Date'].dt.to_period('M'))['CA'].sum()
monthly_df = monthly.to_frame()
monthly_df['Croissance_%'] = monthly_df['CA'].pct_change() * 100
print("\nÉvolution mensuelle :\n", monthly_df.round(1))Requêtes et Filtres Avancés
# Équivalent SQL WHERE avec conditions multiples
filtre_complex = df[
(df['Région'].isin(['Paris', 'Lyon', 'Marseille'])) &
(df['CA'] > 10000) &
(df['Date'].dt.year == 2025) &
(~df['Client'].str.contains('Test', case=False))
]
# Équivalent VLOOKUP : merge (JOIN)
df_enrichi = df.merge(
df_clients[['ID', 'Segment', 'Commercial']],
left_on='ID_Client',
right_on='ID',
how='left'
)
# Pivot Table
pivot = df.pivot_table(
values='CA',
index='Région',
columns=df['Date'].dt.quarter,
aggfunc='sum',
margins=True,
margins_name='Total'
)
print(pivot.round(0))3. NumPy : La Puissance du Calcul Vectoriel
NumPy est la fondation mathématique de tous les outils data science Python. Comprendre NumPy vous permettra d’écrire du code 10 à 100x plus rapide que les boucles Python classiques.
# Création d'arrays
arr = np.array([1, 2, 3, 4, 5])
matrice = np.array([[1, 2, 3], [4, 5, 6]])
# Opérations vectorisées (ultra-rapides)
revenus = np.array([1200, 1500, 980, 2300, 1100])
couts = np.array([800, 900, 650, 1400, 750])
marge = (revenus - couts) / revenus * 100
print(f"Marges : {marge.round(1)}")
# Statistiques avancées
print(f"Marge moyenne : {np.mean(marge):.1f}%")
print(f"Marge médiane : {np.median(marge):.1f}%")
print(f"Écart-type : {np.std(marge):.1f}%")
# Génération de données pour tests
np.random.seed(42)
ventes_simulees = np.random.normal(loc=50000, scale=12000, size=1000)4. Matplotlib & Seaborn : Visualisations Professionnelles
Matplotlib : Le Contrôle Total
# Style professionnel
plt.style.use('dark_background')
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
fig.suptitle('Tableau de Bord Ventes 2025', fontsize=18, fontweight='bold', color='white')
# Graphique 1 : Évolution temporelle
axes[0, 0].plot(monthly.index.astype(str), monthly.values,
color='#10B981', linewidth=2.5, marker='o', markersize=6)
axes[0, 0].fill_between(range(len(monthly)), monthly.values, alpha=0.2, color='#10B981')
axes[0, 0].set_title('Évolution CA mensuel', color='white')
axes[0, 0].tick_params(colors='white')
# Graphique 2 : Répartition par région
regions = df.groupby('Région')['CA'].sum().sort_values(ascending=False)
bars = axes[0, 1].bar(regions.index, regions.values,
color=['#10B981', '#34D399', '#6EE7B7', '#A7F3D0', '#D1FAE5'])
axes[0, 1].set_title('CA par Région', color='white')
# Graphique 3 : Distribution des montants
axes[1, 0].hist(df['CA'], bins=50, color='#10B981', alpha=0.8, edgecolor='white', linewidth=0.5)
axes[1, 0].set_title('Distribution des Montants', color='white')
# Graphique 4 : Scatter plot Coût vs Revenu
axes[1, 1].scatter(df['Coût'], df['CA'], alpha=0.5, color='#10B981', s=20)
axes[1, 1].set_title('Corrélation Coût / CA', color='white')
plt.tight_layout()
plt.savefig('dashboard_ventes.png', dpi=150, bbox_inches='tight')
plt.show()Seaborn : Visualisations Statistiques Élégantes
# Heatmap de corrélation
fig, ax = plt.subplots(figsize=(10, 8))
corr_matrix = df[['CA', 'Coût', 'Marge', 'Volume', 'NPS']].corr()
sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='RdYlGn',
center=0, linewidths=0.5, ax=ax)
ax.set_title('Matrice de Corrélation — Indicateurs Clés', fontsize=14)
plt.tight_layout()
# Box plot par segment
fig, ax = plt.subplots(figsize=(12, 6))
sns.boxplot(data=df, x='Segment', y='CA', palette='viridis', ax=ax)
ax.set_title('Distribution du CA par Segment Client')
sns.stripplot(data=df, x='Segment', y='CA', color='white', alpha=0.3, size=3, ax=ax)5. Automatisation Complète : Un Rapport en Un Clic
Voici un script complet qui automatise entièrement un rapport de ventes :
import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path
from datetime import datetime
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
def generer_rapport_ventes(fichier_source: str, destinataires: list):
"""
Génère automatiquement un rapport de ventes complet
et l'envoie par email aux destinataires.
"""
print(f"🚀 Génération du rapport — {datetime.now().strftime('%d/%m/%Y %H:%M')}")
# 1. Chargement et nettoyage
df = pd.read_excel(fichier_source)
df['Date'] = pd.to_datetime(df['Date'])
df = df.dropna(subset=['CA', 'Région'])
# 2. Calculs KPIs
ca_total = df['CA'].sum()
ca_mois = df[df['Date'].dt.month == datetime.now().month]['CA'].sum()
top_region = df.groupby('Région')['CA'].sum().idxmax()
# 3. Génération graphiques
fig, axes = plt.subplots(1, 3, figsize=(18, 6))
# ... (graphiques)
rapport_path = f"rapport_{datetime.now().strftime('%Y%m%d')}.png"
plt.savefig(rapport_path, dpi=150, bbox_inches='tight')
print(f"✅ Rapport généré — CA Total: {ca_total:,.0f}€ | Mois en cours: {ca_mois:,.0f}€")
print(f"🏆 Top Région: {top_region}")
return rapport_path
# Exécution automatique
if __name__ == "__main__":
generer_rapport_ventes(
fichier_source="ventes_2025.xlsx",
destinataires=["direction@entreprise.com", "commercial@entreprise.com"]
)Conclusion : Vos Prochaines Étapes
Python pour la data science, ça s’apprend progressivement. Voici la roadmap recommandée :
- Semaine 1-2 : Pandas basics (import, nettoyage, groupby)
- Semaine 3-4 : Visualisations Matplotlib et Seaborn
- Semaine 5-6 : NumPy et calculs avancés
- Semaine 7-8 : Automatisation et scripts de reporting
- Mois 3 : Introduction au Machine Learning avec scikit-learn
Le plus important : pratiquez sur vos propres données. Reprenez un rapport Excel que vous faites manuellement et tentez de l’automatiser en Python. L’apprentissage sera 10x plus rapide.
👉 Rejoignez notre Python Data Science Bootcamp pour un parcours structuré avec des projets réels.

