Tutorial: escribe tu primer programa con Python
Starbucks comenzó como una empresa minorista de tostado de grano entero, café molido, té y especias con una sola tienda en el mercado Pike Place de Seattle en 1971. La compañía ahora opera más de 24,000 tiendas minoristas en 70 países.
En https://www.kaggle.com/starbucks/store-locations se encuentra un conjunto de datos que incluye registros sobre cada tienda o subsidiaria actualmente en funcionamiento. Para esta entrada, vamos a tomar sólo los datos de México para que a partir de nuestra posición actual encontremos las cinco sucursales de Starbucks más cercanas.
Fuente de datos
Comenzamos analizando la fuente de datos. La fuente de datos se encuentra en formato CSV. Este formato, junto con JSON, son ampliamente utilizados para intercambiar información, por ejemplo, entre sistemas de cómputo como celulares y servidores o para comunicarnos con una base de datos.
Los campos que incluye nuestra fuente de datos son:
Brand
Store Number
Store Name
Ownership Type
Street Address
City
State/Province
Country
Postcode
Phone Number
Timezone
Longitude
Latitude
Los campos que nos interesan son la Longitud y Latitud. Esta información la cargaremos directamente en un sistema gestor de bases de datos.
Sistema Gestor de Bases de Datos
Un sistema gestor de bases de datos es un conjunto de programas que permiten almacenar, modificar y obtener datos de una base de datos. El acceso a estos datos se logra mediante herramientas específicas llamadas clientes.
El uso de este tipo de sistemas es importante y sobre todo útil pues permiten gestionar datos de manera eficiente y permiten a los usuarios ejecutar distintas tareas de forma sencilla. Proveen además métodos para manipular distintos tipos de datos que facilitan el trabajo en muchas empresas, por ejemplo: manejar registros de estudiantes, de pagos, administración de proyectos, manejo de inventarios, bibliotecas, etc.
Sin el uso de este tipo de sistemas las labores del día a día en distintas empresas alrededor del mundo tomarían demasiado tiempo, pues tendrían que ser hechas a mano.
En esta entrada haremos uso de MongoDB. Este Sistema Gestor de Bases de Datos se basa en un modelo no relacional que en pocas palabras permite definir los registros de la base (documentos) sin una estructura fija. Para representar documentos y realizar consultas se usa JSON. Por ejemplo los documentos de nuestra base lucen así:
Para conectarnos a la base de datos creada en MongoDB, usamos un cliente llamado Compass.
Conexión a la base de datos
Podríamos usar Compass para consultar los datos y resolver el problema de encontrar las sucursales más cercanas, sin embargo si lo que queremos es realizar un análisis más detallado, nos conviene más hacer esto desde un lenguaje de programación.
En análisis de datos los lenguajes de programación más utilizado son R debido a las herramientas de estadística que incluye y Python por sus bibliotecas para en análisis de datos. En este ejemplo usaremos Python.
Para escribir código, usaremos Jupyter. Esta plataforma permite definir programas y generar reportes de análisis de datos a la vez, mediante los que se conoce como notebook. Estos cuadernos permiten incluir texto en formato Markdown y código a la vez.
Para importar los datos desde nuestra base en MongoDB usaremos una biblioteca llamada pymongo y para analizar los datos usaremos otras bibliotecas como math y pandas.
import pandas as pd
from math import sqrt
from pymongo import MongoClient
Para realizar la conexión con el servidor de bases de datos, usaremos la clase MongoClient indicando la cadena de conexión(string connection).
sc = 'mongodb://user:password@host'
c = MongoClient(sc) # conexión
Una vez conectados al servidor, elegimos la base de datos y la colección que queremos consultar. En este caso, nuestra base de datos es starbucks y la colección es mexico.
db = c\['starbucks'\] # base de datos
col = db\['mexico'\] # colección
Para obtener los documentos de la colección usamos el método find que obtiene todos los documentos. También podemos pasarle una consulta a la colección. Una vez obtenidos estos elementos hacemos una conversión a un dataframe de Pandas.
Pandas es una biblioteca para la manipulación y análisis de datos en Python. Permite usar estructuras de datos especializadas llamadas Dataframes y series de forma simple y con operaciones de uso común ya definidas facilitando la vida del analista de datos.
docs = col.find()
elems = list(docs)
df = pd.DataFrame(elems)
Obteniendo un resultado similar a:
Análisis de datos
Ahora, para encontrar las sucursales más cercanas necesitamos:
- Obtener las latitudes y longitudes de la base de datos, en este caso del dataframe.
- Definir un punto a partir del cual realizar la búsqueda mediante su latitud y longitud.
- Calcular la distancia de dicho punto con todas las latitudes y longitudes originales.
- Elegir los cinco registros con la menor distancia.
Para obtener las latitudes y longitudes, obtenemos las columnas respectivas y las convertimos a lista.
latitudes = df\['Latitude'\].tolist()
longitudes = df\['Longitude'\].tolist()
El punto a partir del cual buscar lo puedes obtener desde Google Maps. Por ejemplo, podemos usar las siguientes coordenadas.
latact = 19.36635
lonact = -99.1728792
Para calcular la distancia, definiremos dicha función primero y la aplicaremos con cada coordenada del dataframe original. Este valor lo guardamos en una lista y posteriormente lo convertiremos a serie y agregamos al dataframe original poniendo como nombre a la columna Distancia.
def distancia(x1,y1,x2,y2):
return sqrt((x2-x1)**2 + (y2-y1)**2)
distancias = \[\]
for i in range(len(latitudes)):
d = distancia(latact,lonact,float(latitudes\[i\]),float(longitudes\[i\]))
distancias.append(d)
serie_d = pd.Series(distancias, name='Distancia')
df = df.join(serie_d)
Finalmente encontramos los cinco locales más cercanos (con la distancia más pequeña) usando el método nsmallest de Pandas.
df.nsmallest(5, 'Distancia')
Obteniendo los siguientes elementos:
De esta forma, vemos que con unas cuantas líneas de código y por supuesto, con los conocimientos necesarios, realizamos un análisis de datos simple pero bastante útil. Esto y más lo puedes aprender en el curso de Data Analysis. ¡No te lo pierdas!