← Volver al mapa

Cómo funciona Éxodo Vecinal

La aplicación que mapea el impacto de las viviendas vacacionales en Las Palmas de Gran Canaria

¿Qué es?

Éxodo Vecinal es una herramienta interactiva que visualiza cómo las viviendas vacacionales (Airbnb, alquiler turístico) están transformando los barrios de Las Palmas de Gran Canaria.

Combina un mapa interactivo con datos geolocalizados de cada vivienda turística, un chatbot con RAG que responde preguntas usando datos reales, y una sección de noticias con artículos actualizados sobre el tema.

Flujo de una consulta

💬

1. El usuario pregunta

Ejemplo: "¿Cuántas viviendas turísticas hay en Vegueta?"

🧮

2. Embeddings (en el servidor)

El modelo sentence-transformers convierte la pregunta en un vector de 384 números. Se ejecuta 100% local — los datos no salen del servidor.

🔍

3. Búsqueda en Pinecone

El vector se envía a Pinecone (base de datos vectorial) que busca los 5 fragmentos de texto más relevantes sobre el barrio preguntado.

🤖

4. Generación con Groq LLM

Los fragmentos + la pregunta se envían a Groq (Llama 3.3), que genera una respuesta en español canario basada en los datos reales.

📋

5. Respuesta con fuentes

El usuario recibe la respuesta junto con las fuentes (barrio, tipo de dato, años) y los datos se muestran en el mapa.

Fuentes de datos

📊 ISTAC

Instituto Canario de Estadística. Ocupación de viviendas vacacionales por mes (2019–2025).

Local

🏠 Registro de Turismo

5,144 viviendas turísticas registradas en LPGC con coordenadas GPS.

Local

👥 INE

Instituto Nacional de Estadística. Población por municipio (2015–2024).

Local

🌍 Doorstep (Airbnb)

Coordenadas de anuncios de Airbnb en toda la isla de Gran Canaria.

Local

📰 Google News RSS

Artículos de prensa sobre vivienda vacacional en Canarias. Actualizado diariamente.

Externo

🗺️ Polígonos de barrios

Límites geográficos de los barrios de LPGC en formato GeoJSON.

Local

Stack técnico

Capa Tecnología
Backend Python 3.11 + FastAPI + Uvicorn
Embeddings sentence-transformers (all-MiniLM-L6-v2)
Vector DB Pinecone (free tier, 32 vectores)
LLM Groq — Llama 3.3 70B (free tier)
Frontend HTML + CSS + JS vanilla + Leaflet.js
Mapa Leaflet.js + OpenStreetMap tiles
Servidor OVH VPS (Debian 12, 2GB RAM)
SSL Let's Encrypt (certbot)
Noticias Google News RSS + feedparser

Arquitectura

🌐 Usuario

Navegador web

HTTPS

🔒 Nginx

SSL + reverse proxy

proxy_pass :8000

🐍 Uvicorn + FastAPI

/opt/exodovecinal — Python 3.11

🗺️ Frontend

Leaflet.js + Chat UI

📡 API endpoints

/query /map-data /news

🧠 Embeddings

sentence-transformers (local)

APIs externas

🔍 Pinecone

Vector DB (USA)

🤖 Groq

Llama 3.3 (LLM)

¿Qué son los "chunks"?

El sistema RAG funciona con fragmentos de texto (chunks) que contienen información estructurada sobre cada barrio. Cada chunk es como una "ficha" con datos:

{
  "id": "turismo_vegueta",
  "text": "En el barrio de Vegueta, según datos del Registro
           de Turismo de Canarias, hay 187 viviendas turísticas
           registradas, representando el 3.6% del total...",
  "metadata": {
    "source": "Registro de Turismo",
    "barrio": "Vegueta",
    "tipo": "viviendas_turisticas",
    "viviendas": 187
  }
}

Hay 32 chunks en total: 5 de contexto general (ISTAC, datos globales) y 27 por barrio individual (con datos de ISTAC, turismo y Doorstep).

Geocoding de barrios

Las 5,144 viviendas del Registro de Turismo tenían coordenadas GPS pero sin barrio asignado. Se hizo reverse geocoding cruzando las coordenadas con los polígonos GeoJSON de los barrios.

Resultado: 90.7% de cobertura (4,665 de 5,144 viviendas asignadas a un barrio). Las que no se pudieron asignar están en zonas limítrofes o sin polígono definido.

⚠️ Aviso de escalabilidad. Los servicios gratuitos (Pinecone, Groq) tienen límites de uso. No podemos predecir cómo escalarán los costos si entra mucha gente a la vez. Si la aplicación va lenta, no responde, o directamente deja de funcionar, probablemente es porque se han agotado las cuotas gratuitas. Lo sentimos — es un proyecto hecho con recursos mínimos. Si quieres ayudar a mantenerlo vivo, el código es abierto y puedes desplegar tu propia copia.

¿Cómo se actualizan las noticias?

Un scraper automático ejecuta búsquedas en Google News RSS cada día a las 6:00 AM. Busca por 6 queries diferentes ("vivienda vacacional Las Palmas", "turistificación Canarias", etc.) y filtra artículos relevantes.

Los artículos se guardan en data/raw/news_articles.json y la API los sirve directamente. No necesita reiniciar el servicio — lee el archivo en cada petición.

Código fuente

El proyecto es código abierto en GitHub: github.com/imaginabit/gc-housing-rag