Open IT Experts for Enterprise

Zylk empresa de desarrollo de ecommerce

Creando mapas personalizados para el análisis de datos

Gustavo Fernández
Gustavo Fernández
Apache Spark-Zeppelin

Como crear mapas personalizados usando zeppelin/spark y plotly

Una de las cosas que se suelen hacer cuando se está haciendo un análisis avanzado de datos es representar los mismos, tanto desde el punto de vista de la fase exploratoria como desde el punto de vista del uso de los resultados de los modelos aplicados. Dentro de este contexto hay una librería/proyteco que es muy interesante y se se está usando bastante. Este proyecto es plotly, es un proyecto bastante más interesante que una mera librería gráfica, aunque en este caso lo vamos usar solo como una librería desde python.

Supongamos que tenemos desarrollado un modelo de forecast de venta de un producto por municipio de euskadi y que queremos ver en un mapa las ventas predichas por el modelo con un código de color (gradientes de rojos por ejemplo). Esto se puede hacer usando, spark, zeppelin y plotly. Para ello necesitaremos tres cosas

  • Modelo del forecast que genere un dataset resultado con una columna que contenga el código postal del municipio asociado a su predicción
  • Un geojson con los municipios de euskadi una propiedad que tenga el código postal, para poder juntarlo con el dataset del forecast
  • Unas cuantas lineas de python, integradas en el notebook zeppelin

En el caso que no ocupa el dataset resultado será algo similar a lo siguiente

«name»,»zip»,»total»
«FORUA»,»48906″,»116″
«EZKIO-ITSASO»,»20035″,»125″
«LAPUEBLA DE LABARCA»,»01033″,»119″
«LIZARTZA»,»20054″,»653″
«GAZTELU»,»20907″,»771″
«ERRIGOITI»,»48079″,»696″
«SAN MILLN/DONEMILIAGA»,»01053″,»263″
«GEES»,»48045″,»561″
«ERREZIL»,»20066″,»476″

donde podemos ver una linea por cada municipio, con su código postal y su predicción de ventas

Luego necesitamos el geojson con los municipios de euskadi, yo he usado el siguiente el resumen de cómo es cada una de sus features es el siguiente

{ «type»: «Feature», «properties»: { «ud_kodea»: «48906», «fazeria»: «0», «ad_kod»: «ES21», «he_kod»: «48», «es_kod»: «E22», «ud_iz_e»: «Forua», «ud_iz_gf»: «Forua», «iz_ofizial»: «Forua», «iz_ofiz_ma»: «FORUA», «iz_euskal»: «Forua», «iz_eus_ma»: «FORUA» }, «geometry»: { «type»: «MultiPolygon», «coordinates»: [ [ [ [ -2.703491650128758, 43.344268066332241 ] ….

Donde podemos ver la propiedad ud_kode que contiene el valor del código postal del municipio.

Por último usaremos el siguiente código python dentro del párrafo de zepplin para poder visualizar el mapa en el mismo

import plotly.graph_objects as go
import pandas as pd
df = SPARK_DATA_FRAME.toPandas()
fig = go.Figure(data=go.Choropleth(
    geojson = ‘https://raw.githubusercontent.com/montera34/airbnbeuskadi/master/data/municipios-euskadi.geojson’,
    featureidkey=’properties.ud_kodea’,
    locations=df[‘zip’],
    z = df[‘total’].astype(float),
    locationmode = ‘geojson-id’,
    colorscale = ‘Reds’,
    colorbar_title = «Total»,
))
fig.update_layout(
    title_text = ‘Numero de datos’,
    geo_scope=’europe’,
    geo = dict(
        scope = ‘europe’,
        lonaxis = dict(
            range= [-3.2340083, -1.6675741]
        ),
        lataxis = dict (
            range= [42.8157961, 43.3767174]
        )
    )
)

Una vez construido el mapa podemos incrustarlo en el párrafo usando el siguiente código

print(‘%%angular %s’ % (fig.to_html(full_html=False)))

Al hacerlo u ejecutar el párrafo podremos ver el siguiente mapa en zeppelin

Creando mapas personalizados para el análisis de datos

O podríamos  guardar el html en un fichero usando el siguiente código

text_file = open(«/tmp/mapa.html», «w»)
text_file.write(fig.to_html(full_html=True))
text_file.close()

Si te ha parecido interesante comparte este post en RRS

Facebook
LinkedIn
Telegram
Email

Leer más sobre temas relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *