Skip to content

@EcobiciMapBot Twitter bot automático cada 30min para mostrar el pronóstico de la disponibilidad en la siguiente hora para estaciones de Ecobici CDMX 🚴🏽‍♂️

License

Notifications You must be signed in to change notification settings

Afroefras/ecobici_bot

Repository files navigation

Ecobici bot

Ecobici Twitter bot 🚴🏾‍♀️🚴🏾‍♂️

Sigue a @EcobiciMapBot en Twitter para ver la disponibilidad de bicicletas en CDMX cada 30min

Lo mejor es que muestra la disponibilidad para la siguiente hora, así que seguramente alcanzas tu Ecobici 😉


Colaboración con @DiegoFores. Gracias, hermanito!

Orientación de @fferegrino a través de un gran artículo (uno de muchos) para crear @CyclesLondon un Twitter bot que actualiza la disponibilidad de la Red de Bicicletas en Londres.


Mapa actual

*Actualizado al momento, cada 30min que corre el script automáticamente


Estructura del repositorio:

.
├── .github/workflows
│   └── run_getmap.yml            # Crea una MV, obtiene credenciales desde Secrets, corre el script cada 30min y hace el commit -> push
│
├── data
│   └── csv
│   │   └── acum_data.csv         # Datos acumulados de los últimos N días, se usan para modelo de pronóstico
│   │   └── coordinates.csv       # Coordenadas de cada estación Ecobici, para el mapa de predicción
│   │   └── df_for_map.csv        # Predicción de bicicletas disponibles para cada estación
│   └── model
│   │   └── model.xz              # Diccionario con modelo y objetos para escalar
│   │   └── tad_for_pred.xz       # Función para re-estrucutar nuevos datos como el modelo lo necesita
│   └── shp
│       └── ...                   # Archivos necesarios para desplegar los límites por Código Postal en CDMX
│
├── media
│   └── map
│       └── cdmx.png              # Delimitación de códigos postales en CDMX
│       └── future_map.png        # Mapa de disponibilidad dentro de una hora, utiliza los datos actuales para predecir
│       └── map.png               # Imagen del mapa de disponibilidad, se actualiza automáticamente cada 30min
│
├── scripts
│   ├── __init__.py               # Para que el directorio se trabaje de forma modular
│   ├── ecoPredict.py             # Recibe los datos transformados desde ecoTad.py para aplicar el modelo de predicción
│   ├── ecoTad.py                 # Re-estructura los datos tal que el modelo prediga la demanda futura
│   ├── map.py                    # Clase con métodos como importar datos desde API, creación de variables, reestructuración de datos, etc
│   └── run_getmap.py             # Llama a la clase de "map.py" y las credenciales desde GitHub Secrets para correr el proceso
│
└── requirements.txt              # Instalar las librerías necesarias con el comando: pip install -r requirements.txt

¿Cómo mostramos un mapa en Twitter?

  1. 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)



  1. 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)



  1. 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



  1. 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



  1. 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



  1. Se utiliza el shapefile de los Códigos Postales CDMX para definir los límites en el mapa



  1. Unir ambos mapas, utilizando las coordenadas y disponibilidad de las estaciones
ebm.plot_map(
    data=ebm.df,
    col_to_plot='slots_proportion',
    padding=0.006,
    color='#ffffff',
    edgecolor='#00acee', 
    points_palette='Blues')



  1. Crear el tweet de dicho mapa, o bien, el que pronostica la demanda de la siguiente hora
ebm.tweet_map(img='~/map.png')

Quieres comprobarlo? Cada 30min se actualiza en @EcobiciMapBot ⬅️ Te reto a seguirnos!

About

@EcobiciMapBot Twitter bot automático cada 30min para mostrar el pronóstico de la disponibilidad en la siguiente hora para estaciones de Ecobici CDMX 🚴🏽‍♂️

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages