De nombreuses entreprises du secteur digital souhaitent automatiser l'analyse des performances de contenu YouTube pour optimiser leurs stratégies marketing et comprendre les tendances du marché.
Ce projet a pour objectif de concevoir un pipeline ELT complet permettant d’extraire, transformer, charger et valider les données YouTube automatiquement.
- Data Engineer : Orchestrer l'extraction quotidienne des données YouTube via des DAGs Airflow.
- Analyste de données : Accéder aux données structurées dans PostgreSQL via pgAdmin, DBeaver ou Airflow.
- DevOps : Déployer et monitorer le pipeline via Docker et Astro CLI.
- Data Quality Manager : Valider automatiquement la qualité des données avec Soda Core.
- Développeur : Lancer le pipeline localement et le déployer avec GitHub Actions.
- Business Analyst (bonus) : Visualiser les données via un dashboard Streamlit.
- Python : Scripts ETL et DAGs Airflow
- Apache Airflow & Astro CLI : Orchestration et planification
- PostgreSQL : Data Warehouse avec schémas
stagingetcore - Docker : Containerisation
- Soda Core : Validation qualité des données
- GitHub Actions : CI/CD automatisé
- Bonus : Streamlit pour dashboard et multi-chaînes YouTube
flowchart TB
%% ⚙️ Pipeline YouTube - version simplifiée
%% Users & Roles
subgraph USERS["👥 Users & Rôles"]
DE([Data Engineer : orchestrer DAGs])
ANALYST([Analyste : accès données PostgreSQL])
DEVOPS([DevOps : déployer & monitorer])
DQM([Data Quality Manager : valider données])
DEV([Développeur : exécuter & déployer pipeline])
BA([Business Analyst : visualiser dashboard])
end
%% Pipeline DAGs
subgraph DAG["⚙️ DAGs Airflow"]
DAG1([produce_JSON : extraction YouTube, JSON horodaté])
DAG2([update_db : staging → core, nettoyage, doublons])
DAG3([data_quality : validation Soda Core, alertes])
end
%% Technologies
subgraph TECH["🛠️ Technologies"]
PYTHON([Python])
AIRFLOW([Airflow & Astro CLI])
POSTGRES([PostgreSQL])
DOCKER([Docker])
SODA([Soda Core])
GHA([GitHub Actions])
STREAMLIT([Streamlit])
end
%% Flux principaux
DE --> DAG1
DAG1 --> DAG2 --> POSTGRES --> STREAMLIT
DAG2 --> DAG3
DEVOPS --> DAG1
DEVOPS --> DAG2
DEVOPS --> DAG3
DQM --> DAG3
DEV --> DAG1
DEV --> DAG2
DEV --> DAG3
ANALYST --> POSTGRES
BA --> STREAMLIT
%% Liaisons technologies
DAG1 --> PYTHON
DAG2 --> PYTHON
DAG3 --> PYTHON
DAG1 --> AIRFLOW
DAG2 --> AIRFLOW
DAG3 --> AIRFLOW
DAG3 --> SODA
DEVOPS --> DOCKER
DEV --> GHA
graph TB
subgraph "Data Sources"
YT[YouTube API v3]
end
subgraph "Orchestration Layer"
AF[Apache Airflow]
DAG1[produce_JSON]
DAG2[update_db]
DAG3[data_quality]
DAG4[data_validation_pipeline]
end
subgraph "Processing Layer"
EXT[Extract Module]
TRANS[Transform Module]
LOAD[Load Module]
end
subgraph "Storage Layer"
STAGING[(staging_data)]
CORE[(core_data)]
HISTORY[(history_data)]
end
subgraph "Quality Layer"
SODA[Soda Core]
VALID[Data Validation]
end
subgraph "Infrastructure"
DOCKER[Docker Containers]
MONGO[MongoDB 7.0]
API[FastAPI Service]
end
YT --> EXT
EXT --> AF
AF --> DAG1
AF --> DAG2
AF --> DAG3
AF --> DAG4
DAG1 --> STAGING
DAG2 --> TRANS
TRANS --> CORE
TRANS --> HISTORY
DAG3 --> SODA
DAG4 --> VALID
STAGING --> MONGO
CORE --> MONGO
HISTORY --> MONGO
MONGO --> DOCKER
AF --> DOCKER
API --> DOCKER
-
DAG
produce_JSON:- Extraction des données YouTube (video_id, titre, date, durée, vues, likes, commentaires)
- Gestion de la pagination et quotas API
- Sauvegarde en JSON horodaté
- Retry logic en cas d'erreurs
-
DAG
update_db:- Chargement des JSON dans le schéma
staging - Transformation et nettoyage des données
- Chargement en
core - Gestion des doublons et historique
- Chargement des JSON dans le schéma
-
DAG
data_quality:- Validation automatique avec Soda Core
- Tests de complétude, cohérence et format
- Alertes en cas d’anomalies
- Docker et Docker Compose
- Astro CLI
- Clé API YouTube v3
- PostgreSQL
# Cloner le dépôt
git clone https://github.com/votre-utilisateur/youtube-elt-pipeline.git
cd youtube-elt-pipeline
# Créer un fichier .env avec vos clés API
cp .env.example .env
# Éditer .env avec vos clés YouTube API
# Démarrer le projet Airflow avec Astro
astro dev start
# Si le build échoue à cause de timeouts réseau, essayer:
# 1. Attendre et relancer: astro dev start
# 2. Ou installer les dépendances optionnelles après le démarrage:
# astro dev bash
# python /opt/airflow/scripts/install_optional_deps.py
# Lancer les DAGs depuis l'UI AirflowSi vous rencontrez des timeouts lors de l'installation des dépendances Python:
- Le fichier
requirements.txtcontient uniquement les dépendances essentielles - Les dépendances optionnelles (soda-core, streamlit, etc.) sont dans
requirements-optional.txt - Vous pouvez les installer après le démarrage du container avec le script fourni
- Workflow GitHub Actions : build Docker, tests unitaires et intégration, vérification DAGs.
- Soda Core vérifie row_count, cohérence et format des données
- Rapports automatiques disponibles dans les logs
- Dashboard Streamlit pour visualisation des vues, likes et commentaires
- Support multi-chaînes YouTube
youtube-elt-pipeline/
├─ dags/
│ ├─ produce_json.py
│ ├─ update_db.py
│ └─ data_quality.py
├─ modules/
│ └─ utils.py
├─ tests/
│ └─ test_pipeline.py
├─ docker/
│ └─ Dockerfile
├─ .github/workflows/ci.yml
└─ README.md
- Pipeline ELT opérationnel avec DAGs et validation qualité
- Dépôt GitHub structuré et documenté
- Captures d’écran Airflow, PostgreSQL et Soda Core
- (Bonus) Dashboard Streamlit et multi-chaînes YouTube