irve concours des bras cassés start
This commit is contained in:
parent
7bb3ca841e
commit
ce92dcacb0
18
irve_bornes_recharge/README.md
Normal file
18
irve_bornes_recharge/README.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Trophée des bras cassés de l'open data IRVE
|
||||
|
||||
Ce script récupère les données IRVE et classe les opérateurs selon le grand nombre de défaut dans leur ensemble de données.
|
||||
|
||||
Chaque donnée en mauvaise qualité fait gagner des points de mauvaise qualité aux opérateurs, les grands gagnants sont déterminés ainsi:
|
||||
|
||||
médaille de bronze: élongation des genoux de la donnée.
|
||||
médaille d'argent: épic flumble en berçant les données près du mur.
|
||||
médaille d'or: double fracture ouverte des bras avec hémorragie interne.
|
||||
|
||||
On a également une liste des mauvais points pour chacun des opérateurs.
|
||||
|
||||
## Calcul des mauvaises qualités
|
||||
On y trouve le nombre de points de recharge par opérateur, le nombre de points pour la mauvaise qualité calculé ainsi:
|
||||
|
||||
- Une ligne n'ayant rien dans une des colonnes "id_pdc_itinerance", "telephone_operateur" fait gagner 1 point.
|
||||
- Un texte dans "telephone_operateur" fait gagner 2 points.
|
||||
- Si une ligne a les mêmes coordonnées géographiques qu'une autre, on gagne 3 points pour l'opérateur.
|
68
irve_bornes_recharge/index.py
Normal file
68
irve_bornes_recharge/index.py
Normal file
@ -0,0 +1,68 @@
|
||||
import geojson
|
||||
import pandas as pd
|
||||
import dash
|
||||
import dash_table
|
||||
import requests
|
||||
from dash.dash_table.Format import Group
|
||||
import dash_html_components as html
|
||||
import os
|
||||
|
||||
# Vérifier si le fichier local existe
|
||||
local_file = "irve.geojson"
|
||||
if not os.path.exists(local_file):
|
||||
# Télécharger les données geojson si le fichier local n'existe pas
|
||||
url = "https://www.data.gouv.fr/fr/datasets/r/7eee8f09-5d1b-4f48-a304-5e99e8da1e26"
|
||||
response = requests.get(url)
|
||||
with open(local_file, 'w') as f:
|
||||
f.write(response.text)
|
||||
|
||||
# Ouvrir le fichier local pour la suite du script
|
||||
with open(local_file, 'r') as f:
|
||||
data = geojson.load(f)
|
||||
|
||||
# Convertir les données geojson en DataFrame pandas
|
||||
df = pd.DataFrame(data['features'])
|
||||
|
||||
|
||||
# Calcul des mauvaises qualités
|
||||
def calcul_mauvaise_qualite(df):
|
||||
df['mauvaise_qualite'] = 0
|
||||
|
||||
# Une ligne n'ayant rien dans une des colonnes "id_pdc_itinerance", "telephone_operateur" fait gagner 1 point
|
||||
df.loc[(df['properties']['id_pdc_itinerance'] == '') | (
|
||||
df['properties']['telephone_operateur'] == ''), 'mauvaise_qualite'] += 1
|
||||
|
||||
# Un texte dans "telephone_operateur" fait gagner 2 points
|
||||
df.loc[df['properties']['telephone_operateur'].str.contains(r'\D'), 'mauvaise_qualite'] += 2
|
||||
|
||||
# Si une ligne a les mêmes coordonnées géographiques qu'une autre, on gagne 3 points pour l'opérateur
|
||||
df['coordinates'] = df['geometry']['coordinates'].apply(lambda x: tuple(x))
|
||||
df['duplicated'] = df.duplicated(subset='coordinates', keep=False)
|
||||
df.loc[df['duplicated'], 'mauvaise_qualite'] += 3
|
||||
|
||||
return df
|
||||
|
||||
|
||||
df = calcul_mauvaise_qualite(df)
|
||||
|
||||
# Compter les mauvaises qualités par opérateur
|
||||
operator_counts = df.groupby(df['properties']['nom_amenageur'])['mauvaise_qualite'].sum().reset_index()
|
||||
operator_counts.columns = ['nom_amenageur', 'nbre_mauvaise_qualite']
|
||||
|
||||
# Ajouter le nombre de points de recharge par opérateur
|
||||
operator_counts['nbre_pdc'] = df.groupby('properties')['nom_amenageur'].size().values
|
||||
|
||||
# Créer le tableau de bord
|
||||
app = dash.Dash(__name__)
|
||||
|
||||
app.layout = html.Div([
|
||||
html.H1('Trophées de bras cassés de l\'open data'),
|
||||
dash_table.DataTable(
|
||||
id='table',
|
||||
columns=[{'name': i, 'id': i} for i in operator_counts.columns],
|
||||
data=operator_counts.to_dict('records')
|
||||
)
|
||||
])
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run_server(debug=True)
|
Loading…
Reference in New Issue
Block a user