Hola!,
aprovechando los datos que obtuvimos haciendo Web Scraping en la web de LEGO, vamos a intentar hacer dos cosillas:
- Conseguir las coordenadas geográficas de las tiendas que LEGO tiene dispersas por el mundo, gracias a geopy.
- Visualizarlas en un mapa con la ayuda de Qlik Sense.
Geopy es una librería de Python que nos permite acceder a servicios de geocodificación y obtener las coordenadas de paises, ciudades o direcciones. También podemos utilizarlo a la inversa, proporcionándole las coordenadas, nos devolverá una dirección. Otra función que puede ser de utilidad es la posibilidad de calcular distancias entre coordenadas.
En nuestro caso, nos aprovecharemos de la primera opción.
Con geopy podemos utilizar un número elevado de servicios de geolocalización. Por ejemplo, Google Maps, OpenStreetMap, Nominatim, Bing Maps o Yahoo BOSS. Y tiene implementada una clase para cada uno en geopy.geocoders
.
Nosotros vamos a utilizar la API de codificación geográfica de Google (V3). Para ello primero tendremos que obtener una API key, siguiendo estas instrucciones. Ojo!, que también podemos usar cualquier otro servicio en el que no es necesario una key, si nos apetece.
Una vez que tenemos la API key de Google Maps, podemos empezar con el código.
Lo primero, importar librerías, incluyendo la del geocodificador que vamos a usar.
import pandas as pd from geopy.geocoders import GoogleV3
Importamos los datos y los pasamos a un dataframe. (Descárgatelos de aquí).
df = pd.read_csv('Py_Lego_stores_2018218.csv', sep=";", encoding='utf-8')
Creamos una instancia de nuestro geocodificador
geolocator = GoogleV3(api_key = 'Aquí va la API key')
Vamos a escribir una función con la que Google Maps nos devolverá la dirección de la tienda, su latitud y su longitud. Ésta función tendrá como argumento una fila del dataframe de datos. De dicha fila utilizaremos el campo address para nuestro objetivo.
def geolego(row): address_src = row['address'] if row['country'] == 'China': address_src = eval(address_src).decode('utf-8') try: address, (latitude, longitude) = geolocator.geocode(address_src, timeout=15) except TypeError: address, latitude, longitude = 'TypeError', -91, -181 return pd.Series({"GOOGLE_address": address, "latitude": latitude, "longitude": longitude})
Recordamos que la dirección de la tienda en China estaba codificada en itf-8, así que tenemos que decodificar para pasarsela a Google. En caso de que Google no encuentre la dirección, la función nos devolverá los valores ‘TypeError’, -91 y -181 para la dirección, latitud y longitud, respectivamente.
Bien, ya solo queda aplicar nuestra función geolego a cada fila del dataframe, añadiendo a éste unas nuevas columnas ‘GOOGLE_address’, latitude y longitude.
df[['GOOGLE_address', 'latitude', 'longitude']] = df.apply(geolego, axis=1)
Ahora eliminamos las filas con las direcciones con valor ‘TypeError’.
df = df[df.GOOGLE_address != 'TypeError']
Imprimimos las 5 primeras filas.
print(df.head())
country store_url \ 0 Austria https://www.lego.com/en-us/stores/stores/at/vi... 1 Austria https://www.lego.com/en-us/stores/stores/at/vi... 2 Belgium https://www.lego.com/en-us/stores/stores/be/wi... 4 Canada https://www.lego.com/en-us/stores/stores/ca/so... 5 Canada https://www.lego.com/en-us/stores/stores/ca/gu... address \ 0 SHOPPING CITY SÜD, UNIT G103 2334 VÖSENDORF 1 WAGRAMER STRAßE 81, #928B 1220 VIENNA 2 SPACE 526, TURNHOUTSEBAAN 5 2110 WIJNEGEM 4 5015-111 ST NW SPACE #424 EDMONTON AB T6H 4M6 5 10355 152 STREET SURREY BC V3R 7C1 GOOGLE_address latitude longitude 0 Bahnhofpl. 164, 2334 Vösendorf, Austria 48.109321 16.317248 1 Wagramer Str. 81/928b, 1220 Wien, Austria 48.242361 16.434990 2 Turnhoutsebaan 5, 2110 Wijnegem, Belgium 51.223114 4.500488 4 5015 111 St #424, Edmonton, AB T6H 4M6, Canada 53.485497 -113.513713 5 10355 152 St, Surrey, BC V3R 7C1, Canada 49.190417 -122.803713
Y guardamos el dataframe en un archivo csv.
df.to_csv('lego_stores_coord.csv', sep=';', index=False, encoding='utf-8')
Y ya tenemos los datos preparados para colocar las tiendas de LEGO en un mapa, con la ayuda de Qlik.
Qlik es una plataforma que te permite hacer análitica visual. Las versiones gratuitas son dos: la versión Cloud, en la que tienes que subir tus datos a la aplicación. Y la versión Desktop, que te permite usar datos en local o conectarte a BBDD remotas, pero tienes que instalarte la aplicación en tu equipo.
Vamos a usar Qlik Sense Cloud que tiene la ventaja de poder compartir luego tus gráficos.
Una vez que nos hemos registrado e iniciado sesión, nos aparecerá una ventana con varias opciones a la izquierda. Seleccionando Mis archivos de datos podemos importar nuestro archivo csv.
Con nuestros datos importados nos vamos a la sección Mi trabajo, y creamos una nueva app.
Una vez que cargue la nueva aplicación, nos pedirá añadir los datos que vamos a usar en ella. Pinchamos en añadir datos de archivos y otras fuentes. seleccionamos nuestro archivo csv y nos mostrará información sobre él. Deseleccionamos las columnas que no vamos a usar, quedándonos con GOOGLE_Address, latitude y longitude, y pinchamos en añadir datos.
A continuación nos aparecerá una pantalla como esta:
En la que podremos elegir entre un montón de tipos de gráficos. Pinchamos en el gráfico Mapa y lo arrastramos al centro. Nos aparecerá el gráfico en modo edición, pidiéndonos que añadamos una dimensión. Pinchamos y nos aparece un menú desplegable con los distintos campos entre los que podemos elegir. Qlik ha detectado en nuestros datos que los campos latitude y longitude podrían ser datos de geoposicionamiento, y ha creado una nueva columna con el nombre longitude-latitude con el formato correcto para Qlik. Seleccionamos dicho campo.
Lo siguiente que nos pide Qlik es elegir qué campo queremos que represente a los puntos que dibujará en el mapa. Elegimos el campo Google_address, para que al colocar el ratón sobre un punto nos aparezca su dirección.
Al hacerlo, nos aparecerá el mapa del mundo con los puntos correspondientes a las tiendas. Solo queda desactivar el modo edición, haciendo click en Hecho, y ya podemos interactuar con nuestro mapa.
Si queremos utilizar nuestra visualización en nuestra web, podemos hacer click derecho sobre el gráfico y elegir la opción Compartir. Nos aparecerá un trozo de código HTML que podemos colocar en el código de nuestra página.
No te lo pienses y prueba!