Datos de Partida
El API de Google Places nos permite conocer el número de establecimientos para cada categoría, así como su valoración social media en un área determinada. La petición unitaria a Places nos devuelve, a partir de una categoría, centro geográfico y radio determinado, la lista completa de establecimientos en esa zona, acompañados de información tal como su valoración social (de 1 a 5), localización exacta, precio medio, etc. Lamentablemente, en esta información, no se cuenta con el código postal de cada establecimiento, ni es posible pasar el código en la consulta. Para conseguir esta información ligada a los códigos postales hemos seguido el siguiente proceso:
- Preparar una rejilla de puntos para cada ciudad. Para Madrid, 22500 puntos; en Barcelona, 16900 puntos
- Pedir los establecimientos para cada punto y categoría, con el radio adecuado para cubrir toda la rejilla
- Usando un algoritmo de 'point in polygon', asociar un código postal a cada establecimiento devuelto
- Consolidar la información por cada código postal y categoría de establecimiento, obteniendo el agregado de número de establecimientos y valoración media, así como el número de valoraciones
El número final de establecimientos analizados para Madrid es el siguiente: 21817 establecimientos de 'food', 12747 de 'fashion' y 3301 de 'hotel'
El número final de establecimientos analizados para Barcelona es el siguiente: 18299 establecimientos de 'food', 10979 de 'fashion' y 3004 de 'hotel'
El mapeo de tipos de 'place' a los tipos de establecimiento de BBVA son los siguientes:
- 'fashion' (BBVA): 'beauty_salon|clothing_store|hair_care|jewelry_store|shoe_store|shopping_mall' (Google Places)
- 'food' + 'bars-restaurantes' (BBVA): 'cafe|bar|food|meal_delivery|meal_takeaway|restaurant' (Google Places)
- 'hotel' (BBVA): 'lodging' (Google Places)
- Hemos consultado el API provista por el consurso BBVA Innova Big Data para obtener la media de transacciones diaria por cada código postal y categoría
- Hemos normalizado el número de pagos por establecimiento y código postal al área en km cuadrados de cada código postal
- Finalmente, hemos fusionado el dataset consolidado de Google Places con el del punto anterior, junto con una columna con la geometría (polígono o multipolígono, feature GeoJSON) de cada código postal, para generar mapas de manera cómoda en CartoDB
- El número de pagos por unidad de área geográfica (densidad de pagos: "numPaymentsDensity")
- El número de establecimientos por unidad de área geográfica (densidad de "places": "numPlacesDensity")
- El número de valoraciones totales ("valuedPlaces")
- La media de estas valoraciones ("valueAvg")
- La medida tentativa de 'éxito local': El resultado de dividir el número de pagos por el número de "places" ("paymentsPerPlace")
Herramientas usadas
- Python para la conexión con el API de Google Places y la de BBVA Innova
- Python+librería shapely para el cálculo de áreas y puntos en polígono; y para la conversión a geoJSON desde formato ESRI
- MongoDB para la persistencia temporal de los datos de los establecimientos
- D3.js para pruebas de concepto de los mapas choropleth
- Open Refine para la normalización, consolidación y limpieza de datasets finales
- Mapshaper para la reducción de los polígonos
- CartoDB para la visualización de mapas
- R para el análisis estadístico
Equipo
- Alberto González Paje [Bestiario]: Descarga y consolidación de datasets BBVA Innova y análisis estadístico a fondo con R
- Alejandro González Díez y Rubén Abad [Outliers Collective]: Descarga y consolidación de datasets BBVA Innova
- Óscar Marín Miró [Outliers Collective]: Concepto, Acceso a Google Places API, información geográfica, consolidación de datos, visualización de mapas, maquetación web, y pruebas estadísticas de concepto con R
- Rafael Höhr [Prodigioso Volcán]: Infografías e iconos
