- Repositorio
- Extracción
- Transformación
- Interacción
- Puesta en producción (En progreso ...)
--------------------------------------------------------------------------------------------
.
├── data/shp # Archivos necesarios para desplegar los límites por Código Postal en CDMX
│
├── media
│ └── demo_halfsize.gif # GIF al inicio de este README.md, para mostrar las capacidades del bot
│ └── map.png # Última magen solicitada del mapa de disponibilidad
│
├── scripts
│ ├── __init__.py # Para que el directorio se trabaje de forma modular
│ ├── etl.py # Cuenta con la clase EcoBiciMap para importar datos desde API, hereda la clase util.UtilClass
│ └── main.py # Al correr este archivo, el TelegramBot está listo para interactuar con el usuario
│ └── util.py # Cuenta con la clase UtilClass con métodos generales para limpieza de texto y otros
│
└── requirements.txt # Instalar las librerías necesarias con el comando: pip install -r requirements.txt
- El primer paso es registrarte para la API aquí, recibirás un correo con tus credenciales: CLIENT_ID y CLIENT_SECRET (guárdalas muy bien, donde nadie las encuentre)
(este artículo me ayudó mucho a entender GitHub Secrets, para guardar y usar credenciales automáticamente mediante un workflow .yml, si fuera el caso)
- Así, puedes instanciar la clase para obtener los datos al momento
from map import EcoBiciMap
ebm = EcoBiciMap(CLIENT_ID, CLIENT_SECRET)
# Con las credenciales se inicia la sesión y se obtiene el token de acceso
ebm.get_token(first_time=True)
- Se puede extraer información respecto a las estaciones, incluyendo coordenadas
ebm.get_data()
id | name | address | addressNumber | zipCode | districtCode | districtName | altitude | nearbyStations | stationType | location.lat | location.lon |
---|---|---|---|---|---|---|---|---|---|---|---|
55 | 55 5 DE MAYO-BOLIVAR | 055 - 5 de Mayo - Bolívar | S/N | 6700 | 1 | Ampliación Granada | None | [65, 87] | BIKE,TPV | 19.434356 | -99.138064 |
124 | 124 CLAUDIO BERNARD-DR. LICEAGA | 124 - Claudio Bernard-Dr. Liceaga | S/N | 6500 | 1 | Ampliación Granada | None | [119, 123, 133] | BIKE | 19.422392 | -99.150358 |
159 | 159 HUATABAMPO-EJE 1 PTE. AV. CUAUHTÉMOC | 159 - Huatabampo-Eje 1 Pte. Av. Cuauhtémoc | S/N | 6760 | 1 | Ampliación Granada | None | [155, 158, 163] | BIKE | 19.407517 | -99.155373 |
- Y también la disponibilidad de las estaciones (mismo método pero especificando un parámetro)
ebm.get_data(availability=True)
id | status | availability.bikes | availability.slots |
---|---|---|---|
55 | OPN | 13 | 10 |
124 | OPN | 0 | 21 |
159 | OPN | 1 | 34 |
- Es importante filtrar las estaciones con estatus activo, unir ambas tablas y calcular la proporción de bicicletas y slots
ebm.transform()
id | zipCode | location.lat | location.lon | status | availability.bikes | availability.slots | slots_proportion | bikes_proportion |
---|---|---|---|---|---|---|---|---|
55 | 6700 | 19.434356 | -99.138064 | OPN | 11 | 4 | 0.27 | 0.73 |
124 | 6500 | 19.422392 | -99.150358 | OPN | 0 | 34 | 1.00 | 0.00 |
159 | 6760 | 19.407517 | -99.155373 | OPN | 12 | 24 | 0.67 | 0.33 |
- Se utilizará el shapefile de los Códigos Postales CDMX para definir los límites en el mapa
- Al unir ambos mapas, utilizando las coordenadas y disponibilidad de las estaciones, este es el resultado:
ebm.plot_map(
data=ebm.df,
col_to_plot='slots_proportion',
padding=0.006,
color='#ffffff',
edgecolor='#00acee',
points_palette='Blues')
- Al iniciar un chat con Ecobici TelegramBot te muestra las instrucciones del chat
- Tal como en Ecobici TwitterBot, este bot puede mostrar la disponibilidad total de CDMX mandando el comando
\todo
- Incluso puedes actualizar los datos en cualquier momento mandando
\update
- Ahora, veamos las opciones que filtran una zona en el mapa. En primer lugar está la consulta por código postal, sólo basta con ocupar la palabra
zipcode XXXX
para filtrar en el mapa la zona con código postalXXXX
- Por otro lado, es posible filtrar zonas más específicas indicando la colonia. La manera de hacerlo es mandando
colonia XXXX
o bien la abreviaturacol XXXX
. Si el texto recibido se parece a más de una colonia, te mostrará máx 5 opciones para que elijas cuál consultar.
- Incluso, dado que utiliza difflib.SequenceMatcher para comparar el texto recibido vs las opciones de colonias válidas, también "corrige" las faltas de ortografía, por ejemplo:
La investigación preliminar apunta que el script debe instanciarse en un servidor, cómo hacerlo está en progreso, espérenlo ...