# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # 2A.eco - Mise en pratique des séances 1 et 2 - Utilisation de pandas et visualisation - correction
#
# Correction de l'exercice 3 et disponibilités des velibs.

# %matplotlib inline

from jyquickhelper import add_notebook_menu
add_notebook_menu()

from pyensae.datasource import download_data
files = download_data("td2a_eco_exercices_de_manipulation_de_donnees.zip",
                      url="https://github.com/sdpython/ensae_teaching_cs/raw/master/_doc/notebooks/td2a_eco/data/")
files

# ## Exercice 3 - Disponibilité des vélibs
#
# Durée : 30 minutes
#
# 1. Importer les données sous la forme d'un dataFrame 
#
#     - `velib_t1.txt` - avec les données des stations à un instant $t$
#     - `velib_t2.txt` - avec les données des stations à un instant $t + 1$
#
# 2. Représenter la localisation des stations vélib dans Paris
#
#     - représenter les stations en fonction du nombre de places avec un gradient
#
# 3. Comparer pour une station donnée l'évolution de la disponibilité (en fusionnant les deux bases $t$ et $t+1$)
#
#     - représenter les stations qui ont connu une évolution significative (plus de 5 changements) avec un gradient de couleurs 

import pandas as pd
import json
import matplotlib.pyplot as plt

# Importer le fichier sous forme d'un dataframe

with open("velib_t1.txt") as f:
    dic = json.load(f)
df = pd.DataFrame.from_dict(dic)
df.head(n=2)

# Tracer la latitude et la longitude (elles sont dans un dico : il faut les récupérer)

df['lat']=df['position'].map(lambda x : x['lat'])
df['lng']=df['position'].map(lambda x : x['lng'])
plt.scatter(df.lng, df.lat) 
plt.scatter(2.342529,48.892931, color="#CA9912") # Maison
plt.scatter(2.329119,48.872243,  color="r") #Bureau
plt.title("Les stations de vélib")
#plt.show()

plt.scatter(df.lng, df.lat, c=df.bike_stands, cmap="YlOrRd") 
plt.colorbar()
plt.title("Les plus grosses stations de vélib")

# +
import json
import pandas as pd


file = 'velib_t2.txt'
with open(file) as file_stations_t2:
    data_stations_t2 = json.loads(file_stations_t2.read())

df_stations_t2 = pd.DataFrame(data_stations_t2)
liste_stations = df_stations_t2['number'].tolist()
# -

evolutions_stations = pd.merge(left = df, right = df_stations_t2,   on = 'number')  
evolutions_stations.columns

# +
evolutions_stations = evolutions_stations[['address_x', 'number',
                                           'available_bike_stands_x','available_bike_stands_y','lng','lat']]

evolutions_stations['variation'] = evolutions_stations['available_bike_stands_x'] - \
                                    evolutions_stations['available_bike_stands_y']
# -

lng_var = evolutions_stations[evolutions_stations['variation']>5]["lng"].tolist()
lat_var = evolutions_stations[evolutions_stations['variation']>5]["lat"].tolist()
valeurs = evolutions_stations[evolutions_stations['variation']>5]["variation"].tolist()
labels = evolutions_stations[evolutions_stations['variation']>5]["address_x"].tolist()

# +
lng_var = evolutions_stations[evolutions_stations['variation']>5]["lng"].tolist()
lat_var = evolutions_stations[evolutions_stations['variation']>5]["lat"].tolist()

valeurs = evolutions_stations[evolutions_stations['variation']>5]["variation"].tolist()

labels = evolutions_stations[evolutions_stations['variation']>5]["address_x"].tolist()
scaled_z = []
for value in valeurs : 
    scaled_z.append((value - min(valeurs)) / (max(valeurs) - min(valeurs)))
    
colors = plt.cm.coolwarm(scaled_z)

fig = plt.figure(figsize=(20,15))

for label, x, y in zip(labels, lng_var, lat_var):
    plt.annotate(label, xy = (x, y),)

plt.scatter(x = lng_var , y = lat_var, c = colors, marker = "o", s = 100)
# -

valeurs



StarcoderdataJupyterScriptsDedupFiltered