Skip to content

VicoD3X/freight-network

Repository files navigation

Freight Network

Analyse exploratoire d'un réseau synthétique de fret aérien avec Python et NetworkX.

Python NetworkX Pandas Graph Analytics Pytest Status CI

Présentation

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.

Résultat Rapide

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.

Vue du réseau synthétique

Résultats Visuels

Les graphes ci-dessous sont générés depuis data/freight_routes.csv avec :

python scripts/build_graph_report.py

Vue globale du réseau

Cette 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.

Vue du réseau synthétique

Communautés du réseau

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.

Communautés du réseau

Hubs par volume cargo

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.

Top hubs par volume cargo

Routes les plus chargées

Ce graphique isole les routes cargo les plus importantes en volume. Il permet d'identifier rapidement les corridors structurants du réseau.

Routes les plus chargées

Centralités comparées

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.

Comparaison des centralités

Résilience par retrait de hub

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é.

Impact du retrait d'un hub

Données

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.

Méthode

  1. Chargement des routes cargo.
  2. Construction d'un graphe orienté pondéré.
  3. Calcul des centralités.
  4. Identification des hubs.
  5. Détection de communautés sur projection non orientée.
  6. Analyse simple de résilience par retrait d'un hub.
  7. Export d'un rapport JSON, Markdown et d'une visualisation statique.

Métriques Calculées

  • 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.

Structure

.
|-- 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

Installation

python -m venv .venv
pip install -r requirements.txt -r requirements-dev.txt

Sur Windows, si python n'est pas disponible :

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt -r requirements-dev.txt

Commandes

Générer le rapport :

python scripts/build_graph_report.py

Lancer les tests :

pytest -q

Lancer le lint :

ruff check src scripts tests

Rapports

Les sorties versionnées permettent de lire le résultat sans exécuter le projet :

Limites

  • 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.

Positionnement

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.

About

Synthetic air cargo network analysis with Python, NetworkX, graph metrics and resilience reporting.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages