El pipeline de datos de Transporte Tijuana transforma 192 respuestas de encuesta —con direcciones abiertas y campos estructurados— en un sitio web interactivo que muestra rutas piloto, estadísticas y un mapa de demanda completamente anonimizado. El flujo atraviesa cuatro etapas: recolección, procesamiento en Python, análisis logístico espacial y visualización con Next.js.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/danitocsc/transporte-unrc-web-public/llms.txt
Use this file to discover all available pages before exploring further.
Los scripts de procesamiento Python son herramientas internas de análisis y no están incluidos en este repositorio público. Solo los artefactos de salida —los archivos JSON y el PDF— se publican en
web/public/data/ y web/public/downloads/. Esta página documenta el pipeline completo para fines de transparencia metodológica.La encuesta se distribuyó a los estudiantes de UNRC Unidad Tijuana a través de Google Forms. El formulario combinaba campos estructurados con preguntas de respuesta abierta:
Matutino, Intermedio, Vespertino)Lunes a Miercoles, Jueves a Sabado, Todos los días)Al cierre del período de recolección se obtuvieron 192 respuestas totales. La distribución por turno fue: Matutino (96, 50 %), Intermedio (53, 27.6 %) y Vespertino (42, 21.9 %). Los estudiantes provenían de 70 colonias distintas de la zona metropolitana de Tijuana.
Las respuestas crudas del formulario se procesaron con un script Python privado que produce todos los archivos estáticos que consume el sitio web.
pandasgeopy / Nominatimfpdf2matplotlib"Colonia Natura, Tijuana") se convierte en coordenadas lat / lng reales mediante consultas a la API de Nominatim. El campo fuente_coordenada_publica en el output registra el proveedor utilizado.
lat_publica y lon_publica. Esto protege los domicilios exactos.
web/public/data/
├── summary.json # Métricas completas, series estadísticas y sugerencias
├── map_points.json # Puntos de demanda anonimizados (PublicPoint[])
├── paradas.json # Paradas piloto con metadatos de ruta
└── custom_routes.json # Trazados de las rutas piloto
web/public/downloads/
├── reporte-demanda-transporte.pdf # Reporte oficial en PDF
└── public_points.csv # Dataset público de puntos anonimizados
De las 192 respuestas originales, 190 pudieron ser geocodificadas exitosamente, representando un 98.96 % de cobertura.
Con las 190 ubicaciones geocodificadas, se realizó un análisis espacial para diseñar las rutas piloto:
#0011ff#ff9500Los archivos JSON generados en las etapas anteriores se colocan directamente en
web/public/data/ y se sirven como datos estáticos. Next.js 16 los lee en el servidor en tiempo de petición y los pasa a los componentes de React.La función
loadSiteData() en web/lib/site-data.ts lee summary.json y map_points.json concurrentemente usando la API fs/promises de Node.js:// web/lib/site-data.ts
import { promises as fs } from "node:fs";
import path from "node:path";
const SUMMARY_PATH = path.join(process.cwd(), "public", "data", "summary.json");
const MAP_PATH = path.join(process.cwd(), "public", "data", "map_points.json");
export async function loadSiteData(): Promise<{
summary: SummaryPayload;
map: MapPayload;
}> {
const [summary, map] = await Promise.all([
readJsonFile<SummaryPayload>(SUMMARY_PATH),
readJsonFile<MapPayload>(MAP_PATH),
]);
return { summary, map };
}
/informeloadSiteData() en cada petición; renderiza métricas, gráficas, mapa de calor y testimonios/mapa-demandaforce-dynamicparadas.json y custom_routes.json con readFileSync en cada petición; sanitiza los campos antes de pasar al cliente/mapa-demanda; muestra las polilíneas de rutas y los marcadores de paradas/informe/informe, mostrando densidad de puntos sin revelar ubicaciones individualesEl sitio se despliega automáticamente en Vercel a través de la integración con GitHub. El directorio raíz del proyecto para el despliegue es
web/. El dominio oficial es transporte-unrc.vercel.app.