Analyse exploratoire d'un réseau synthétique de fret aérien avec Python et NetworkX.
Ce projet modélise un réseau fictif de fret aérien sous forme de graphe orienté pondéré. Les aéroports sont représentés comme des nœuds, les routes cargo comme des arêtes, et les volumes de fret comme poids.
L'objectif est simple : transformer un problème logistique en objet graphe, calculer des métriques interprétables, puis produire une synthèse exploitable sans utiliser de données sensibles.
Le dataset synthétique contient :
- 21 aéroports ;
- 35 routes cargo ;
- 1 composante connexe principale ;
- un top hub par volume pondéré :
SIN; - une analyse de résilience par retrait du hub
SIN.
Le retrait de SIN conserve une seule composante connexe, mais réduit le réseau de 21 à 20 nœuds et de 35 à 29 routes. Dans ce jeu synthétique, SIN concentre un volume important sans fragmenter totalement le réseau.
Les graphes ci-dessous sont générés depuis data/freight_routes.csv avec :
python scripts/build_graph_report.pyCette vue représente le réseau cargo synthétique sous forme de graphe orienté pondéré. Les aéroports sont les nœuds, les routes sont les arêtes, et l'épaisseur des routes augmente avec le volume cargo_tons.
Cette visualisation projette le réseau en non orienté pour identifier des groupes d'aéroports plus fortement reliés entre eux. Elle aide à lire la structure régionale du réseau fictif.
Ce graphique classe les aéroports selon leur degré pondéré par volume cargo. Il met en avant les hubs qui concentrent le plus de flux dans ce jeu synthétique.
Ce graphique isole les routes cargo les plus importantes en volume. Il permet d'identifier rapidement les corridors structurants du réseau.
Cette vue compare deux rôles différents : les nœuds avec une forte centralité d'intermédiarité, qui servent de ponts, et les nœuds avec un PageRank pondéré élevé, qui reçoivent ou redistribuent beaucoup de flux.
Cette analyse retire le hub le plus chargé et compare la connectivité avant/après. L'objectif n'est pas de simuler une situation réelle, mais de montrer comment un graphe permet de tester simplement une hypothèse de vulnérabilité.
Le fichier data/freight_routes.csv contient un petit réseau synthétique de routes cargo.
Colonnes principales :
origin,destination: codes aéroport ;origin_country,destination_country: pays associés aux aéroports ;region: zone ou corridor de la route ;flights_per_week: fréquence synthétique ;cargo_tons: volume fictif utilisé comme poids ;avg_delay_minutes: délai moyen fictif ;distance_km: distance approximative.
Les données sont synthétiques et ne représentent pas des flux réels de fret aérien. Elles sont utilisées uniquement pour démontrer une démarche d'analyse de graphes.
- Chargement des routes cargo.
- Construction d'un graphe orienté pondéré.
- Calcul des centralités.
- Identification des hubs.
- Détection de communautés sur projection non orientée.
- Analyse simple de résilience par retrait d'un hub.
- Export d'un rapport JSON, Markdown et d'une visualisation statique.
- centralité de degré ;
- in-degree et out-degree ;
- degré pondéré par
cargo_tons; - betweenness centrality ;
- PageRank pondéré sans dépendance SciPy ;
- routes les plus chargées ;
- taille des composantes avant et après retrait d'un hub.
.
|-- data/ # Dataset synthétique
|-- reports/ # Rapports générés et visualisation
|-- scripts/ # Script de génération du rapport
|-- src/freight_network/ # Code Python réutilisable
|-- tests/ # Tests unitaires légers
|-- requirements.txt
|-- requirements-dev.txt
`-- README.md
python -m venv .venv
pip install -r requirements.txt -r requirements-dev.txtSur Windows, si python n'est pas disponible :
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt -r requirements-dev.txtGénérer le rapport :
python scripts/build_graph_report.pyLancer les tests :
pytest -qLancer le lint :
ruff check src scripts testsLes sorties versionnées permettent de lire le résultat sans exécuter le projet :
reports/freight_network_report.mdreports/freight_network_report.jsonreports/freight_network_overview.pngreports/freight_network_communities.pngreports/top_hubs_by_cargo.pngreports/top_routes_by_cargo.pngreports/centrality_comparison.pngreports/hub_resilience_impact.png
- Données synthétiques.
- Pas de données temps réel.
- Pas de tracking opérationnel.
- Pas de données sensibles.
- Pas de modélisation de capacité avion.
- Pas d'optimisation de routes.
- Analyse exploratoire uniquement.
Ce projet est une première base pratique sur NetworkX. Il montre comment construire un graphe depuis des données tabulaires, calculer des métriques pertinentes, interpréter les résultats et documenter les limites.
Il complète des projets plus orientés qualité de données, SQL, Spark, NLP et séries temporelles en ajoutant une brique graph analytics simple et testable.





