Premiers pas

Installer Mobility

Utilisez pypi pour installer le package dans votre environnement de travail :

pip install mobility-tools

Générer un échantillon de déplacements pour un usager

Mobility permet de générer des échantillons de déplacements en fonction de plusieurs informations sur les usagers :

  • Catégorie socioprofessionnelle.

  • Catégorie professionnelle du ménage.

  • Catégorie d’unité urbaine de son lieu de résidence principale.

  • Taille du ménage.

  • Nombre de voitures du ménage.

Pour générer un an de déplacements d’un usager, il est nécessaire auparavant de créer un TripSampler, puis d’utiliser sa méthode get_trips, pour récuperer une dataframe pandas contenant les déplacements échantillonés. Par exemple pour un retraité vivant seul, dans une ville centre, sans voiture :

import mobility

trip_sampler = mobility.TripSampler()

retiree_trips = trip_sampler.get_trips(
  csp="7",
  csp_household="7",
  urban_unit_category="C",
  n_pers="1",
  n_cars="0",
  n_years=1
)

Pour un ouvrier vivant avec une employée an banlieue, avec deux voitures :

worker_trips = trip_sampler.get_trips(
  csp="6",
  csp_household="5",
  urban_unit_category="B",
  n_pers="3",
  n_cars="2",
  n_years=1
)

Générer un échantillon de déplacements pour un groupe d’usagers

Etant donné que Mobility procède par échantillonnage, les déplacements de chaque profil vont varier à chaque exécution du code. Il convient donc de générer un nombre suffisant de profils avant de pour comparer deux profils ou deux populations, en vérifiant la convergence des indicateurs étudiés : nombre total de déplacements, distance totale parcourue, détail par mode, par motif…

Reprenons nos deux profils précédents, en échantillonnant cette fois (de manière arbitraire) 100 personnes de chaque profil :

def sample_n_persons(n, csp, csp_household, urban_unit_category, n_pers, n_cars, n_years):

    all_trips = []
    
    for i in range(n):
        
        trips = trip_sampler.get_trips(
          csp,
          csp_household,
          urban_unit_category,
          n_pers,
          n_cars
        )
        
        trips["individual_id"] = i
        
        all_trips.append(trips)

    all_trips = pd.concat(all_trips)
    
    return all_trips

group_A_trips = sample_n_persons(
    n=100,
    csp="7",
    csp_household="7",
    urban_unit_category="C",
    n_pers="1",
    n_cars="0",
    n_years=1
)

group_B_trips = sample_n_persons(
    n=100,
    csp="6",
    csp_household="5",
    urban_unit_category="B",
    n_pers="3",
    n_cars="2",
    n_years=1
)

group_A_trips["group"] = "A"
group_B_trips["group"] = "B"

trips = pd.concat([group_A_trips, group_B_trips])

On peut maintenant comparer les comportements de mobilité de nos deux profils.

# Compute and plot the total distance travelled, for each individual in each group
total_distance = trips.groupby(["group", "individual_id"], as_index=False)["distance"].sum()
sns.catplot(data=total_distance, x="group", y="distance", kind="box")

# Group modes and motives by broad category
trips["mode_group"] = trips["mode_id"].str[0:1]
trips["motive_group"] = trips["motive"].str[0:1]

# Compute and plot the total distance travelled by mode, for each individual in each group
total_distance_by_mode = trips.groupby(["group", "mode_group", "individual_id"], as_index=False)["distance"].sum()
sns.catplot(data=total_distance_by_mode, x="mode_group", y="distance", hue="group", kind="box")

# Compute and plot the total distance travelled by motive, for each individual in each group
total_distance_by_motive = trips.groupby(["group", "motive_group", "individual_id"], as_index=False)["distance"].sum()
sns.catplot(data=total_distance_by_motive, x="motive_group", y="distance", hue="group", kind="box")

Dans notre premier profil de retraité, la plupart des personnes parcourraient environ 6000 km/an, contre 17 000 km/an pour notre second profil de 17 000 km/an. Certains retraités se déplaceraient cependant plus de 20 000 km/an, plus que la plupart des ouvriers !

La plus grosse différence vient de l’utilisation de la voiture (mode 3) : 2000 km/an pour le premier profil, 13 000 km/an pour le second. Et sans surprise ce sont les déplacements liés au travail (motif 9 “professionnels”) qui font la différence : 8 000 km/an pour les ouvriers.

Distance totale par groupe

Distance totale par groupe et par mode

Distance totale par groupe et par motif