Système automatisé d'analyse et de visualisation des questions parlementaires françaises avec classification ML et dashboard BI interactif.
Ce projet collecte, analyse et visualise automatiquement les questions parlementaires de l'Assemblée Nationale Sénégalaise (XIVe législature). Il utilise un modèle de Machine Learning (CamemBERT) pour classifier les questions par thématique et génère des insights via un dashboard Apache Superset.
Cas d'usage :
- 📈 Suivi de l'activité parlementaire en temps réel
- 🔍 Analyse des sujets prioritaires par ministère
- 📊 Visualisation des délais de réponse gouvernementaux
- 🗺️ Cartographie des questions par région/département
- 🤖 Classification automatique des thématiques (ML)
┌─────────────────────────────────────────────────────────────┐
│ GitHub Repository │
│ (questions-assemblee) │
└───────────┬──────────────────────────────┬──────────────────┘
│ │
│ GitHub Actions (ETL Cron) │
│ ↓ Tous les jours à 2h │
│ │
↓ ↓
┌───────────────────────┐ ┌──────────────────────────┐
│ PostgreSQL (Render) │◄────►│ Superset (Web Service) │
│ - questions │ │ - Dashboard BI │
│ - deputes │ │ - Charts & Metrics │
│ - ministeres │ └──────────┬───────────────┘
└───────────────────────┘ │ iframe embed
↓
┌──────────────────────────┐
│ Flask App (Web Service) │
│ - Dashboard Public │
│ - Lecture seule │
└──────────────────────────┘
| Composant | Technologie | Hébergement | Rôle |
|---|---|---|---|
| ETL Pipeline | Python + asyncio | GitHub Actions | Extraction, transformation, classification ML |
| Base de données | PostgreSQL 15 | Render (Free) | Stockage des données structurées |
| Dashboard BI | Apache Superset | Render (Docker) | Création et visualisation des métriques |
| Interface publique | Flask | Render (Docker) | Dashboard public en lecture seule |
| Classification ML | CamemBERT (BERT FR) | Local / HuggingFace | Classification thématique des questions |
Données collectées :
- ✅ 250+ questions parlementaires analysées
- ✅ 165 députés suivis
- ✅ 26 ministères couverts
- ✅ Classification en 12+ thématiques principales
Métriques clés :
- 📊 Nombre de députés actifs : 33
- 📈 Taux de réponse : < 2%
- 🏆 Top 3 thématiques : Santé, Éducation, Culture
- 🗺️ Couverture géographique : 13/14 régions
Le dashboard est accessible publiquement en lecture seule. Aucun téléchargement de données brutes n'est possible pour les visiteurs.
# Cloner le repo
git clone https://github.com/NandoDP/questions-assemblee.git
cd questions-assemblee
# Démarrer avec Docker Compose
docker-compose up -d
# Accéder aux services
open http://localhost:5000 # Dashboard public
open http://localhost:8088 # Superset admin (admin/admin123)- Python 3.10 - Langage principal
- asyncio / aiohttp - Requêtes asynchrones API
- asyncpg - PostgreSQL async driver
- Pydantic - Validation des données
- SQLAlchemy - ORM
- CamemBERT (camembert-base) - Modèle BERT français
- Transformers (HuggingFace) - Framework ML
- SpaCy - NLP (entités nommées, lemmatisation)
- Torch - Deep Learning
- Apache Superset - Dashboard BI
- Flask - Interface web publique
- PostgreSQL 15 - Base de données
- Docker - Conteneurisation
- GitHub Actions - ETL automatisé (cron)
- Render - Hébergement cloud
- Git LFS / HuggingFace Hub - Gestion modèles ML
La plateforme de visualisation offre plusieurs types de graphiques et tableaux de bord pour exploiter les données collectées :
- Indicateurs KPI : Affichage des métriques clés (nombre total de questions, taux de réponse global, nombre de députés actifs) sous forme de cartes numériques pour un suivi rapide des performances.
- Évolution temporelle : Graphiques en barres et courbes montrant l'évolution mensuelle du nombre de questions et de réponses, permettant d'identifier les périodes de forte activité parlementaire.
- Répartition par secteur : Graphiques en secteurs (camembert) illustrant la distribution des questions par domaine (santé, éducation, économie, etc.), révélant les préoccupations prioritaires des députés.
- Nuage de mots-clés : Visualisation des termes les plus fréquents dans les questions, facilitant l'identification des sujets récurrents et des tendances émergentes.
- Classement des plus actifs : Tableaux de bord avec ranking des députés par nombre de questions posées et taux de réponse, permettant d'évaluer l'engagement parlementaire.
- Analyse par groupe parlementaire : Graphiques comparatifs de l'activité par parti politique ou coalition.
- Cartographie interactive : Cartes choroplèthes du Sénégal montrant la répartition géographique des questions par région ou département, identifiant les zones les plus représentées dans les débats parlementaires.
- Heatmaps régionales : Visualisation de l'intensité des préoccupations par zone géographique.
- Extraction automatique via API 👉 Vie Publique
- Pipeline ETL asynchrone optimisé
- Classification ML avec CamemBERT fine-tuné
- Extraction des entités nommées (ministères, lieux, dates)
- [-] Analyse de sentiment et score d'urgence
- Base de données PostgreSQL avec vues optimisées
- Dashboard Superset avec charts interactifs
- Interface publique Flask (lecture seule)
- ETL automatisé via GitHub Actions (cron quotidien)
- Docker Compose pour dev local
- Déploiement Render (Infrastructure as Code)
- Alertes temps réel (webhook Discord/Slack)
- API REST publique pour accès aux données
- Analyse de séries temporelles (prédictions)
- Intégration d'autres sources (Sénat, débats)
- Authentification SSO (Google/GitHub)
- Tests unitaires et d'intégration (pytest)
- Monitoring avec Sentry
- Cache Redis pour Superset
question-assemblee/
├── .github/workflows/ # GitHub Actions (CI/CD)
│ ├── cron_etl.yml # ETL automatisé quotidien
│ ├── ci.yml # Tests automatiques
│ └── build_and_push.yml # Build images Docker
├── src/ # Code source
│ ├── extractors/ # Extraction API
│ ├── transformers/ # Transformation & ML
│ ├── loaders/ # Chargement DB
│ ├── models/ # Modèles Pydantic
│ └── utils/ # Utilitaires
├── models/ # Modèles ML
│ └── camembert_model/ # CamemBERT fine-tuné
├── Dockerfile.etl # Image Docker ETL
├── Dockerfile.superset # Image Docker Superset
├── Dockerfile.flask # Image Docker Flask
├── docker-compose.yml # Orchestration locale
├── render.yaml # Déploiement Render
├── db-init.sql # Schéma PostgreSQL
├── requirements.txt # Dépendances Python
└── README.md # Ce fichier
Nando DP
- GitHub : @NandoDP
- Portfolio : [À venir]
- Vie Publique - Plateforme citoyenne du sénégal
⭐ Si ce projet vous plaît, n'hésitez pas à lui donner une étoile !