mobility icon indicating copy to clipboard operation
mobility copied to clipboard

Add transport zones

Open Mind-the-Cap opened this issue 2 years ago • 6 comments

Deux ajouts parmi ceux décrits dans https://github.com/mobility-team/mobility/issues/83

  • [x] Fonction get_transport_zones : crée une geodataframe de zones de transport autour d'une commune donnée, à partir des données IGN. https://github.com/mobility-team/mobility/blob/stage-2-model/mobility/transport_zones.py
  • [x] Fonction get_osm : récupère les données OSM à partir de la limite des zones de transport. https://github.com/mobility-team/mobility/blob/stage-2-model/mobility/parsers/get_osm.py

Ajout de code R pour gérer les zones de transport.

Mind-the-Cap avatar Jan 16 '24 18:01 Mind-the-Cap

Codecov Report

Attention: Patch coverage is 30.05671% with 370 lines in your changes are missing coverage. Please review.

Project coverage is 74.64%. Comparing base (52276bf) to head (aff4a02).

:exclamation: Current head aff4a02 differs from pull request most recent head 74ce0ae. Consider uploading reports for the commit 74ce0ae to get more accurate results

Files Patch % Lines
mobility/parsers/osm.py 25.28% 65 Missing :warning:
mobility/gtfs.py 22.89% 64 Missing :warning:
mobility/transport_zones.py 27.58% 42 Missing :warning:
mobility/set_params.py 24.07% 41 Missing :warning:
mobility/parsers/admin_boundaries.py 23.40% 36 Missing :warning:
mobility/travel_costs.py 31.81% 30 Missing :warning:
mobility/asset.py 41.02% 23 Missing :warning:
mobility/parsers/download_file.py 22.22% 21 Missing :warning:
mobility/public_transport_travel_costs.py 40.62% 19 Missing :warning:
mobility/parsers/urban_units.py 46.66% 16 Missing :warning:
... and 1 more
Additional details and impacted files
@@             Coverage Diff             @@
##             main      #94       +/-   ##
===========================================
- Coverage   95.64%   74.64%   -21.01%     
===========================================
  Files          21       32       +11     
  Lines        1103     1629      +526     
===========================================
+ Hits         1055     1216      +161     
- Misses         48      413      +365     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Feb 13 '24 15:02 codecov[bot]

@FlxPo j'ai cette erreur en faisant tourner l'exemple trip_localizer :

2024-02-28 10:53:23.175 INFO     Clustering network vertices...
Traceback (most recent call last):

  File ~\AppData\Local\miniforge3\envs\mobility\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File c:\users\dubrocac\documents\github\mobility\examples\trip_localizer\example.py:25
    loc_trips = mobility.LocalizedTrips(trips)

  File ~\Documents\GitHub\mobility\mobility\localized_trips.py:20 in __init__
    car_travel_costs = TravelCosts(transport_zones, "car")

  File ~\Documents\GitHub\mobility\mobility\travel_costs.py:54 in __init__
    super().__init__(inputs, cache_path)

  File ~\Documents\GitHub\mobility\mobility\asset.py:45 in __init__
    self.get()

  File ~\Documents\GitHub\mobility\mobility\asset.py:76 in get
    asset = self.create_and_get_asset()

  File ~\Documents\GitHub\mobility\mobility\travel_costs.py:83 in create_and_get_asset
    costs = self.dodgr_costs(transport_zones, graph)

  File ~\Documents\GitHub\mobility\mobility\travel_costs.py:131 in dodgr_costs
    costs = pd.read_parquet(self.cache_path)

  File ~\AppData\Local\miniforge3\envs\mobility\Lib\site-packages\pandas\io\parquet.py:503 in read_parquet
    return impl.read(

  File ~\AppData\Local\miniforge3\envs\mobility\Lib\site-packages\pandas\io\parquet.py:244 in read
    path_or_handle, handles, kwargs["filesystem"] = _get_path_or_handle(

  File ~\AppData\Local\miniforge3\envs\mobility\Lib\site-packages\pandas\io\parquet.py:102 in _get_path_or_handle
    handles = get_handle(

  File ~\AppData\Local\miniforge3\envs\mobility\Lib\site-packages\pandas\io\common.py:865 in get_handle
    handle = open(handle, ioargs.mode)

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\dubrocac\\.mobility\\data\\projects\\97b07ce9913cc025ed6e5d2037bcf9e8-dodgr_travel_costs_car.parquet'

Est-ce que ça te dit quelque chose ?

Mind-the-Cap avatar Feb 28 '24 10:02 Mind-the-Cap

Le fichier 97b07ce9913cc025ed6e5d2037bcf9e8-dodgr_travel_costs_car.parquet devrait être généré par la fonction dodgr_costs de la classe TravelCosts, qui est appelée ici dans la classe LocalizedTrips.

Les bugs dans R n’arrêtent pas l’exécution du code, donc tout continue comme si le fichier de sortie du script R allait être disponible ensuite. Il faudrait probablement tester que le fichier existe bien et stopper le code si ce n'est pas le cas.

Tu peux modifier la classe RScript ici pour logger tout l'output de R et vérifier que le code s’exécute bien. On pourrait ajouter une variable d'environnement "MOBILITY_LOG" et ajuster le niveau de verbosité en fonction (debug, warn, info...).

FlxPo avatar Feb 28 '24 15:02 FlxPo

L'erreur R que je vois en faisant ça est :

2024-02-28 17:07:52.335 INFO     Error in sample.int(m, k) : invalid first argument

2024-02-28 17:07:52.336 INFO     Calls: [ ... [.data.table -> cluster_vertices -> kmeans -> sample.int

2024-02-28 17:07:52.336 INFO     Execution halted

C'est lié au fait que dans la vertices_table qui est préparée, toutes les transport_zone_id sont NA. J'ai l'impression que cela vient du spatial join qui semble ne pas fonctionner chez moi : https://github.com/mobility-team/mobility/blob/baf83ec9b103c62939e73c7393592f2ac84cd64d/mobility/prepare_dodgr_costs.R#L35

@FlxPo : codes INSEE testés : 25307, 64102, 64546

Mind-the-Cap avatar Feb 28 '24 16:02 Mind-the-Cap

@FlxPo avant de faire le st_join à la ligne indiquée, en faisant tourner le code sur le code INSEE 64256 avec un rayon de 10 km, j'ai :

  • côté vertices
2024-03-05 18:11:52.102 INFO                id component n                 geometry

2024-03-05 18:11:52.102 INFO     1  2955548371         1 0 POINT (833418.8 6518730)

2024-03-05 18:11:52.103 INFO     2  1635859109         1 1 POINT (839384.7 6502962)

2024-03-05 18:11:52.103 INFO     3   443697815         1 2 POINT (839277.7 6502921)

2024-03-05 18:11:52.104 INFO     4  3868074749         1 3 POINT (845827.8 6522287)

2024-03-05 18:11:52.104 INFO     5   346678567         1 4 POINT (852843.4 6521450)

2024-03-05 18:11:52.104 INFO     6  3060622108         1 5 POINT (852832.6 6521547)

2024-03-05 18:11:52.105 INFO     7   910391477         1 6 POINT (834128.1 6531371)

2024-03-05 18:11:52.105 INFO     8   910391518         1 7 POINT (834133.5 6531305)

2024-03-05 18:11:52.106 INFO     9   279631461         1 8 POINT (849148.6 6515121)

2024-03-05 18:11:52.106 INFO     10  298632265         1 9   POINT (849175 6515057)
  • côté transport_zones :

2024-03-05 18:11:52.127 INFO     1                 0    64134          Bonloc        city                   R

2024-03-05 18:11:52.127 INFO     2                 1    64147        Briscous        city                   R

2024-03-05 18:11:52.128 INFO     3                 2    64160 Cambo-les-Bains        city                   B

2024-03-05 18:11:52.128 INFO     4                 3    64255          Halsou        city                   B

2024-03-05 18:11:52.128 INFO     5                 4    64282          Jatxou        city                   B

2024-03-05 18:11:52.129 INFO     6                 5    64256       Hasparren        city                   I`

Ensuite il y a le st_join et ça ne se passe pas très bien :

2024-03-05 18:11:52.505 INFO                id component n 2024-03-05 18:11:52.505 INFO                id component n transport_zone_id admin_id name admin_level

2024-03-05 18:11:52.505 INFO     1  2955548371         1 0                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.506 INFO     2  1635859109         1 1                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.507 INFO     3   443697815         1 2                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.508 INFO     4  3868074749         1 3                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.508 INFO     5   346678567         1 4                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.509 INFO     6  3060622108         1 5                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.509 INFO     7   910391477         1 6                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.510 INFO     8   910391518         1 7                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.510 INFO     9   279631461         1 8                NA     <NA> <NA>        <NA>

2024-03-05 18:11:52.511 INFO     10  298632265         1 9                NA     <NA> <NA>        <NA>

Manifestement que des NA dans transport_zone_id, puisqu'après le !is.na ça donne 2024-03-05 18:11:52.682 INFO Empty data.table (0 rows and 5 cols): id,transport_zone_id,area,X,Y

J'imagine que c'est ça qui cause l'erreur ensuite, mais il va sans dire que je ne suis pas sûre de moi sur ce coup.

Mind-the-Cap avatar Mar 05 '24 17:03 Mind-the-Cap

@Mind-the-Cap Je viens de faire un commit avec plusieurs corrections :

  • Les GTFS mal formatés sont ignorés (zip corrompu).
  • Les erreurs d'encodage sont (un peu) moins possibles lors de la lecture des logs R dans Python.
  • Les flux égaux à zéro en sortie du modèle de radiation faisaient planter l'échantillonnage avec pandas (destinations avec une probabilité de sélection de zéro).

Ca tourne sur mon poste pour les communes 25307, 64102, 64546, 69382.

FlxPo avatar Mar 18 '24 16:03 FlxPo