Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
29 changes: 29 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,35 @@ Retraitement des données open data des points de recharge pour véhicules élec

Le fichier open data utilisé est le fichier consolidé des bornes de rechage pour véhicules électriques, publié sur [datagouv](https://www.data.gouv.fr/fr/datasets/fichier-consolide-des-bornes-de-recharge-pour-vehicules-electriques). Il s'agit d'un jeu de données qui regroupe l'ensemble des données produites par les différents acteurs territoriaux.

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

est-ce que tu peux déplacer les instructions d'installation à la fin du fichier readme ? je préfèrerais que le début reste lisible par un non codeur qui tomberait sur ce repo depuis Osmose ou le wiki.

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.

ok j'ai bougé les instructions d'install en fin de readme


### 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
```

**Note** : 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.

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.

tant qu'à faire, ajouter un paragraphe "Exécuter le retraitement" avec python group_opendata_by_station.py

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.

ajouté une partie pour lancer le script

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.

![définition des termes borne/station/point de charge](https://afirev.fr/wp-content/uploads/2019/08/Archi-station-borne-point-Fr-1024x610.jpg)
Expand Down
22 changes: 22 additions & 0 deletions group_opendata_by_station.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,28 @@ 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

if len(puissances) == 0:
station['attributes']['puissance_nominale_grouped'] = None
elif len(set(puissances)) == 1:
station['attributes']['puissance_nominale_grouped'] = puissances[0]
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.

est-ce que ce elif est vraiment utile ? on pourrait prendre le max dès que la liste est non vide, non ?

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.

tout à fait, j'ai mis à jour les enchaînements de conditions

else:
# Si plusieurs puissances différentes, on prend la valeur la plus haute
station['attributes']['puissance_nominale_grouped'] = max(puissances)
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