🎯 Objectifs de la séance

1. Qu'est-ce que la Data Analysis ?

📖 Définition

La Data Analysis (analyse de données) est le processus d'inspection, de nettoyage, de transformation et de modélisation de données dans le but de découvrir des informations utiles, de tirer des conclusions et de soutenir la prise de décision.

🎯 Objectifs de l'analyse de données

💼 Rôle du Data Analyst en entreprise

Le Data Analyst est le traducteur entre les données et le business. Il doit :

🌍 Exemples concrets d'application

E-commerce

  • Analyser le comportement d'achat des clients
  • Identifier les produits les plus rentables
  • Optimiser les campagnes marketing

Santé

  • Analyser les données patient pour améliorer les diagnostics
  • Prédire les risques de maladies
  • Optimiser la gestion des lits d'hôpital

Finance

  • Détecter les fraudes
  • Analyser les risques de crédit
  • Optimiser les portefeuilles d'investissement

2. Le cycle de vie de la donnée

1. COLLECTE
2. STOCKAGE
3. NETTOYAGE
4. ANALYSE
5. VISUALISATION
6. DÉCISION

Définition : Rassembler les données depuis différentes sources.

Sources communes :

  • Bases de données (SQL, NoSQL)
  • Fichiers (CSV, Excel, JSON, Parquet)
  • APIs (REST, GraphQL)
  • Web scraping
  • Capteurs IoT
# Collecte depuis un fichier CSV
import pandas as pd
data = pd.read_csv("ventes.csv")

Définition : Organiser et conserver les données de manière structurée et accessible.

Solutions de stockage :

  • Bases de données relationnelles : PostgreSQL, MySQL
  • Data Warehouses : Snowflake, BigQuery
  • Fichiers locaux : CSV, Parquet, JSON
  • DuckDB : Base de données analytique embarquée

Pourquoi DuckDB ?

  • ✅ Pas de serveur à configurer
  • ✅ Très rapide pour l'analytique
  • ✅ Lecture directe de CSV/Parquet
  • ✅ Compatible SQL standard

Définition : Corriger les erreurs, traiter les valeurs manquantes et standardiser les formats.

Problèmes courants :

  • Valeurs manquantes (NaN, NULL)
  • Doublons
  • Formats incohérents (dates, devise)
  • Outliers (valeurs aberrantes)
# Supprimer les doublons
data = data.drop_duplicates()

# Remplir les valeurs manquantes
data["age"].fillna(data["age"].mean(), inplace=True)

# Convertir les types
data["date"] = pd.to_datetime(data["date"])

Définition : Appliquer des techniques statistiques et algorithmiques pour extraire des insights.

Types d'analyse :

  • Descriptive : Que s'est-il passé ? (moyenne, médiane, distribution)
  • Diagnostique : Pourquoi cela s'est-il passé ? (corrélation, causalité)
  • Prédictive : Que va-t-il se passer ? (machine learning, séries temporelles)
  • Prescriptive : Que devons-nous faire ? (optimisation, simulation)

Définition : Représenter graphiquement les données pour faciliter la compréhension.

Types de graphiques courants :

  • Barres : Comparer des catégories
  • Lignes : Évolution temporelle
  • Scatter : Corrélations
  • Heatmap : Matrices de corrélation
  • Pie chart : Proportions

Définition : Utiliser les insights pour guider les actions business.

Exemple concret :

L'analyse montre que 60% des clients abandonnent leur panier après 3 jours.
Action : Mettre en place un email de relance automatique à J+2.

3. Les outils du Data Analyst

Outil Rôle Usage
SQL Interrogation de données Requêtes, jointures, agrégations
DuckDB Moteur analytique Analyse rapide de gros volumes
Python Analyse et transformation Nettoyage, statistiques, ML
Pandas Manipulation de données DataFrames, transformations
Streamlit Restitution interactive Dashboards, applications web

🆚 SQL vs Python : Quand utiliser quoi ?

Utiliser SQL (DuckDB) quand :

  • Filtrer de gros volumes de données
  • Faire des jointures complexes
  • Agréger des données (SUM, AVG, COUNT)
  • Extraire un sous-ensemble de données

Utiliser Python (Pandas) quand :

  • Nettoyage complexe de données
  • Calculs statistiques avancés
  • Machine learning
  • Visualisations personnalisées

4. Python pour la Data Analysis

🐍 Pourquoi Python ?

📚 Bibliothèques essentielles

Pandas : Manipulation de données

import pandas as pd

# Créer un DataFrame
data = {
    "nom": ["Alice", "Bob", "Charlie"],
    "age": [25, 30, 35],
    "ville": ["Paris", "Lyon", "Marseille"]
}
df = pd.DataFrame(data)

print(df)
--       nom  age      ville
-- 0   Alice   25      Paris
-- 1     Bob   30       Lyon
-- 2 Charlie   35  Marseille

NumPy : Calculs numériques

import numpy as np

# Calculs vectorisés (rapides)
ages = np.array([25, 30, 35, 40, 45])
print(ages.mean())  # 35.0
print(ages.std())   # 7.91

Matplotlib : Visualisation

import matplotlib.pyplot as plt

# Graphique simple
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Mon premier graphique")
plt.show()

5. Introduction à DuckDB

🦆 Qu'est-ce que DuckDB ?

DuckDB est une base de données analytique embarquée conçue pour l'analyse de données.

🎯 Caractéristiques principales

🔧 Premiers pas avec DuckDB

import duckdb

# Créer une connexion en mémoire
con = duckdb.connect()

# Exécuter une requête simple
result = con.execute("SELECT 42 AS answer").fetchall()
print(result)  # [(42,)]

# Lire un CSV directement
result = con.execute("SELECT * FROM "data/ventes.csv" LIMIT 5").fetchdf()
print(result)

💡 Avantages pour l'analyse

  1. Pas de configuration : Pas de serveur à installer
  2. Performance : Plus rapide que Pandas pour les gros fichiers
  3. SQL familier : Utilisation du langage SQL standard
  4. Intégration Python : Facile à utiliser avec Pandas

6. Connexion Python ↔ DuckDB

Python Script
DuckDB (en mémoire ou fichier)
Fichiers (CSV, Parquet) ou Tables
Résultats → Pandas DataFrame

📝 Exemple complet d'intégration

import duckdb
import pandas as pd

# 1. Créer une connexion
con = duckdb.connect("ma_base.db")

# 2. Créer une table depuis un CSV
con.execute("""
    CREATE TABLE ventes AS 
    SELECT * FROM read_csv_auto("data/ventes.csv")
""")

# 3. Requête SQL et conversion en Pandas
query = """
    SELECT 
        produit,
        SUM(montant) as total_ventes,
        COUNT(*) as nb_transactions
    FROM ventes
    GROUP BY produit
    ORDER BY total_ventes DESC
"""

df = con.execute(query).fetchdf()

# 4. Manipulation avec Pandas
print(df.head())
print(f"Ventes totales : {df["total_ventes"].sum():.2f} €")

# 5. Fermer la connexion
con.close()

🎯 Quiz de validation des connaissances

Testez vos connaissances sur cette séance ! 10 questions pour valider votre compréhension.

🎓 Points clés à retenir

📚 Ressources complémentaires

📄 Support de cours - Python ADD