Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,38 @@ Les données open data semblent être mises à jour tous les jours. Le présent
Les données consolidées ici sont utilisées par [l'analyse Osmose 8410](https://osmose.openstreetmap.fr/en/issues/open?item=8410).

La correspondance entre les attributs est documentée sur le [wiki](https://wiki.openstreetmap.org/wiki/France/data.gouv.fr/Bornes_de_Recharge_pour_V%C3%A9hicules_%C3%89lectriques) et accessible dans le [code source d'Osmose](https://github.com/osm-fr/osmose-backend/blob/master/analysers/analyser_merge_charging_station_FR.py).

## Installation

### Créer le dossier de sortie

Les scripts génèrent des fichiers dans le dossier `output/`. Créez ce dossier avant d'exécuter les scripts :

```bash
mkdir -p output
```

### Récupérer le jeu de données IRVE depuis data.gouv.fr

Le fichier `opendata_irve.csv` doit être téléchargé depuis data.gouv.fr.

https://www.data.gouv.fr/fr/datasets/fichier-consolide-des-bornes-de-recharge-pour-vehicules-electriques

**URL de téléchargement direct actuelle** (peut changer) :
```
https://www.data.gouv.fr/fr/datasets/r/2729b192-40ab-4454-904d-735084dca3a3
```

Pour télécharger le fichier avec curl:

```bash
curl -L https://www.data.gouv.fr/fr/datasets/r/2729b192-40ab-4454-904d-735084dca3a3 -o opendata_irve.csv
```

L'ID dans l'URL peut changer si le jeu de données est mis à jour. Vérifiez régulièrement la page du jeu de données pour obtenir l'URL la plus récente.

Contrairement à ce que son nom laisse entendre, le jeu de données open data ne contient pas d'informations sur les bornes : il contient des points de recharge, ainsi que des informations sur les stations.


### Exécuter le retraitement
`python group_opendata_by_station.py`
18 changes: 18 additions & 0 deletions group_opendata_by_station.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,24 @@ def transformRef(refIti, refLoc):
else :
station['attributes']['accessibilite_pmr_grouped'] = list(accessibilite_pmr)[0]

# Regroupement de la puissance nominale
puissances = []
for elem in station['pdc_list']:
puissance_str = elem['puissance_nominale'].strip() if elem['puissance_nominale'] else ''
if puissance_str and puissance_str.lower() != 'null':
try:
puissances.append(float(puissance_str))
except ValueError:
pass
station['attributes']['puissance_nominale'] = elem['puissance_nominale']
station['attributes']['puissance_nominale_grouped'] = max(puissances) if puissances else None

if len(puissances) > 1:
errors.append({"station_id" : station_id,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c'est vraiment une erreur d'avoir des puissances nominales différentes sur les différents points de charge d'une station ? (c'est une vraie question, désolée si c'est une question bête 😋 )

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Très bonne question, d'un point de vue utilisateur la valeur la plus haute est la plus pertinente car les puissances d'un point de charge ne se cumulent pas, elles sont limitées au max parmi celles disponibles et qui peut le plus peut le moins.
Donc si quelqu'un a un véhicule qui prend de la haute puissance, il pourra cibler une station dont au moins un point de charge est capable de délivrer la plus haute en priorité pour savoir où charger le moins longtemps possible. Car souvent, quand on a une puissance max importante, ça veut dire que la station est moderne et qu'on aura plus de facilités à s'y charger, et que y'aura souvent plusieurs points de charge de cette haute puissance. On pourrait aussi garder l'info de l'énumération mais ça me semble plus pertinent d'avoir seulement le max.

On pourrait tenter de faire ensuite un mapping entre les tags des sockets et ceux de la puissance nominale, mais pour faire simple je pensais plutôt ajouter une info dont je connais l'avantage utilisateur et avec un résultat moins hasardeux.

Ce serait bien si les producteurs de données faisaient les choses dans le détail et pouvaient donner clairement les puissances de chaque socket mais bon, on n'y est pas encore et le csv ne permet pas d'avoir clairement l'info. :)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

d'ailleurs tu m'as donné une idée, on peut avoir une colonne avec la valeur de base et la valeur qui n'a que le max, comme ça les gens qui réutilisent auront le choix.

"source": station['attributes']['source_grouped'],
"error": "plusieurs puissances nominales différentes pour une même station",
"detail": puissances})

if len(station['pdc_list']) != int(station['attributes']['nbre_pdc']):
errors.append({"station_id" : station_id,
"source": station['attributes']['source_grouped'],
Expand Down