Mapa con timeline en python

Posted on by - 0 comments

Por fin llego, el último post para terminar el mapa. En este último post es el que el usuario puede tomarlo como referencia y utilizar otras librerías para construir el mapa.

Empecemos!!!

Primero se tendrán que geolocalizar todos los municipios presentes en el fichero de transacciones, para este cometido, en mi caso, utilizo Mapbox, el cual dispone de una API, con 50.000 peticiones gratuitas, para este caso más que suficientes.

#Se transforma en dataframe
df_2 = pd.DataFrame(data=table_2, columns=['Localidad', 'Longitud', 'Latitud'])

#Como se cruzara por Localidad, se hace este campo como índice
df_2.set_index('Localidad', inplace=True)

#Se unen las tables de transacciones y de localización de los municipios
df_total = pd.merge(df, df_2, right_index=True, left_index=True)

#Se reemplaza los nulos por 0
df_total.fillna(0, inplace=True)

Una vez se han localizado las localidades, se utiliza la librería folium, para generar el mapa dinámico. Se puede encontrar información de esta librería en folium. Definida la librería que se quiere utilizar, se adaptan los datos para que la libería los pueda interpretar de forma correcta, y una vez realizado esto se genera el mapa en html.

#Se define un vector
df_map = []

#Se transfroman los datos para que la libreria folium los pueda interpretar ver enlace
#https://github.com/python-visualization/folium/blob/master/examples/HeatMapWithTime.ipynb
#Se dee de crear un vector con la localización, y las transccionesa cada periodo
for i in range(len(df_total.transpose()) - 2):
    df_row = []
    for j in range(len(df_total)):
        df_row.append([df_total.iloc[j][-1], df_total.iloc[j][-2], df_total.iloc[j][i]/100000])
    df_map.append(df_row)

#Se importa la librería folium
import folium
import folium.plugins as plugins

#Se inicializa el mapa
m = folium.Map([40., -3.], tiles='stamentoner', zoom_start=6)

#Se genera el mapa con los datos creados
hm = plugins.HeatMapWithTime(
    df_map,
    index=list(df_total.columns.values[:-2].astype(str)),
    auto_play=True,
    min_opacity=0.1,
    radius=5,
)
#Se guarda el mapa en un archivo html
hm.add_to(m)

m.save('trans.html')

Y con esto se tendría en mapa que hay expuesto en Mapa de transacciones

Muchas gracias!!!


Comment




HTML Preview:


Comments

There's no comments...