Ce projet met en place un pipeline ETL automatisé permettant d'extraire, transformer et charger des données de ventes issues de l'API Kaggle dans une base PostgreSQL, puis d'analyser ces données à l'aide de Power BI.
- Python : Pandas, Requests, SQLAlchemy
- API Kaggle : Extraction automatisée des données
- PostgreSQL : Stockage des données et requêtes SQL
- Power BI : Visualisation et analyse des ventes
📍 Étapes du pipeline :
1️⃣ Extraction : Récupération des données via l’API Kaggle
2️⃣ Transformation : Nettoyage des valeurs manquantes, encodage et typage des données
3️⃣ Chargement : Stockage optimisé dans **PostgreSQL via "copy"
4️⃣ Visualisation : Connexion à Power BI** pour l'analyse interactive
Nous utilisons l'API Kaggle pour récupérer les données du dataset Retail Sales Data.
-
Créer une clé API Kaggle :
- Se rendre sur Kaggle, aller dans Account Settings et télécharger
kaggle.json. - Placer
kaggle.jsondans le dossier~/.kaggle/(ou%USERPROFILE%/.kaggle/sous Windows).
- Se rendre sur Kaggle, aller dans Account Settings et télécharger
-
Installer la bibliothèque Kaggle :
pip install kaggle- Télécharger les données depuis l'API :
import kaggledataset = "noir1112/retail-sales-data"
kaggle.api.dataset_download_files(dataset, path="data/", unzip=True)
print("✅ Données téléchargées avec succès !")
Nous utilisons Pandas pour :
- Supprimer les colonnes inutiles
- Gérer les valeurs manquantes
- Convertir les formats des données
import pandas as pdfile_path = "data/sales_100k.csv" df = pd.read_csv(file_path, encoding='utf-8')
df.drop(columns=['Unnamed: 0', 'Sales_ID'], inplace=True, errors='ignore')
df.fillna({
'Sales_Amount': df['Sales_Amount'].mean(),
'Discount': 0,
'Customer_Age': df['Customer_Age'].median(),
'Customer_Gender': "Unknown"
}, inplace=True)
df['Date_of_Sale'] = pd.to_datetime(df['Date_of_Sale'], errors='coerce')
df['Customer_Age'] = df['Customer_Age'].astype('Int64')
file_path_cleaned = "data/ventes_clean.csv"
df.to_csv(file_path_cleaned, index=False, encoding='utf-8')
print("✅ Données nettoyées et sauvegardées !")
Nous utilisons PostgreSQL pour stocker les données proprement et optimiser les requêtes.
Dans pgAdmin ou psql, exécuter :
CREATE DATABASE ventes;
\c ventes;
CREATE TABLE ventes_data (
Product_Category TEXT,
Sales_Amount FLOAT,
Discount FLOAT,
Sales_Region TEXT,
Date_of_Sale DATE,
Customer_Age INTEGER,
Customer_Gender TEXT,
Sales_Representative TEXT
);Dans psql, exécuter :
\copy ventes_data FROM 'data/ventes_clean.csv' WITH CSV HEADER ENCODING 'UTF8';
SELECT COUNT(*) FROM ventes_data;✅ Les données sont maintenant chargées dans PostgreSQL !
- Ouvrir Power BI
- Aller dans "Obtenir des données" → "Base de données PostgreSQL"
- Entrer les informations :
- Serveur :
localhost - Base de données :
ventes - Authentification :
postgres/ton_mot_de_passe
- Serveur :
- Sélectionner la table
ventes_dataet charger les données
- Ajouter un graphique en barres
- Mettre "Sales_Region" en axe X et "Sales_Amount" en axe Y
- Ajouter des filtres interactifs pour explorer les données
✅ Tu as maintenant un dashboard interactif connecté à PostgreSQL ! 🎉
SELECT Sales_Region, COUNT(*) AS nb_ventes, SUM(Sales_Amount) AS total_ventes
FROM ventes_data
GROUP BY Sales_Region
ORDER BY total_ventes DESC;📌 Ce type d’analyse permet d'identifier les meilleures performances commerciales par région.
pip install pandas kaggle sqlalchemy psycopg2python etl_postgresql.pySELECT COUNT(*) FROM ventes_data;Ce projet montre comment automatiser un pipeline ETL depuis l’API Kaggle jusqu’à Power BI, en passant par PostgreSQL. 🎯
📢 Améliorations possibles :
- Automatiser l'exécution avec Airflow
- Ajouter une API Flask pour interroger les données
- Déployer un dashboard web interactif
🚀 *N’hésitez pas à contribuer ou poser des questions !