Tecnología

Tutorial: escribe tu primer programa con Python

Avatar deManuel Soto Romero
Manuel Soto Romero

Programar 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

Base de datos para Python

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

Mongo DB

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í:

Codigo en Python

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.

Programacion con 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.

Programar con Jupyter

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

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:

Codigo en Pandas

Análisis de datos

Ahora, para encontrar las sucursales más cercanas necesitamos:

  1. Obtener las latitudes y longitudes de la base de datos, en este caso del dataframe.
  2. Definir un punto a partir del cual realizar la búsqueda mediante su latitud y longitud.
  3. Calcular la distancia de dicho punto con todas las latitudes y longitudes originales.
  4. 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:

Codigo con Pandas

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!

Comparte este artículo:
Avatar deManuel Soto Romero
Manuel Soto Romero Profesor especialista en lenguajes de programación, lógica computacional con experiencia en administración y desarrollo de bases de datos e implementación de servicios web. Experto BEDU en el curso de Data Analysis.