Skip to content

Repository files navigation

BrandHeatMap - Análisis de Ranking Local en Google Maps

🎯 Descripción

BrandHeatMap es una aplicación web desarrollada en Python usando Flask que permite analizar el ranking local de un negocio en Google Maps. Utiliza Selenium para simular búsquedas geolocalizadas y genera mapas de calor interactivos, tablas y estadísticas para visualizar la posición promedio del negocio en diferentes ubicaciones.

🛠️ Funcionalidades

✅ Implementadas

  • Interfaz Web Moderna: Mapa con marcador arrastrable para seleccionar el centro geográfico y formulario intuitivo.
  • Análisis Geográfico Paralelo: Generación de cuadrículas de coordenadas y análisis en paralelo usando multiprocessing para mayor velocidad.
  • Búsqueda Automatizada: Uso de Selenium para simular búsquedas en Google Maps.
  • Visualización Avanzada: Mapas de resultados con marcadores circulares, ranking numérico y colores según desempeño.
  • Leyenda de Colores: Explicación visual del significado de cada color de ranking.
  • Tabla de Resultados: Tabla ordenada con todos los puntos analizados, resaltando el Top 3.
  • Exportación de Datos: Botón para descargar los resultados en CSV.
  • Feedback Visual: Spinner de carga durante el análisis.
  • Diseño Responsivo: Interfaz adaptada para dispositivos móviles y escritorio.

🎨 Características de la Interfaz

  • Mapa de Selección: Selección visual del centro geográfico con Leaflet.js.
  • Mapa de Resultados: Visualización separada de los resultados del análisis.
  • Formulario Completo: Dropdowns para radio y densidad, campos descriptivos y validación.
  • Leyenda flotante: Explicación de colores sobre el mapa.
  • Tabla y Exportación: Resultados ordenados y exportables.

🧱 Tecnologías Utilizadas

Backend

  • Flask: Framework web para la aplicación
  • Selenium: Automatización de navegador para búsquedas
  • Pandas: Manipulación y análisis de datos
  • NumPy: Cálculos matemáticos y generación de grillas
  • Multiprocessing: Análisis paralelo para mayor rendimiento

Visualización

  • Folium: Mapas interactivos con Leaflet.js
  • Matplotlib: Generación de gráficos y exportación PNG
  • HeatMap Plugin: Mapas de calor para Folium

Frontend

  • Bootstrap 5: Framework CSS para el diseño
  • Leaflet.js: Biblioteca de mapas interactivos
  • jQuery: Manipulación del DOM y AJAX
  • FontAwesome: Iconos

Utilidades

  • tqdm: Barras de progreso
  • ChromeDriver: Control del navegador Chrome

📦 Instalación

Prerrequisitos

  1. Python 3.8+
  2. Chrome/Chromium instalado
  3. ChromeDriver compatible con tu versión de Chrome

Pasos de Instalación

  1. Clonar el repositorio:
git clone <url-del-repositorio>
cd BrandHeatMap
  1. Crear entorno virtual:
python -m venv venv
source venv/bin/activate  # En Windows: venv\Scripts\activate
  1. Instalar dependencias:
pip install -r requirements.txt
  1. Descargar ChromeDriver:
    • Visita ChromeDriver Downloads
    • Descarga la versión compatible con tu Chrome
    • Añade ChromeDriver al PATH o colócalo en el directorio del proyecto

🚀 Uso

Ejecutar la Aplicación

python app.py

La aplicación estará disponible en http://localhost:5000

Flujo de Trabajo (Vista Moderna)

  1. Seleccionar Centro: Arrastra el marcador en el mapa de selección para definir el centro geográfico.
  2. Configurar Parámetros:
    • Distancia Radial: Radio en kilómetros (1-10 km)
    • Densidad de Grilla: Número de puntos (2x2 a 11x11)
    • Palabra Clave: Término de búsqueda (ej: "restaurante")
    • Nombre del Negocio: Nombre exacto del negocio a buscar
  3. Ejecutar Análisis: Haz clic en "Analizar". Se mostrará un spinner de carga.
  4. Revisar Resultados: Visualiza el mapa de resultados con marcadores de ranking, la leyenda y la tabla de resultados.
  5. Exportar Datos: Descarga CSV desde el botón correspondiente.

Vista Clásica

La vista clásica (formulario y mapa de calor tradicional) está disponible en /alt.

📊 Interpretación de Resultados

Mapa de Resultados

  • Verde: Excelente ranking (posición 1)
  • Amarillo: Ranking medio (posiciones 2-3)
  • Rojo: Ranking bajo (4 o más)
  • Gris: Negocio no encontrado

Tabla de Resultados

  • Top 3: Resaltados en la tabla
  • Ranking: Posición del negocio en cada punto
  • Top 3 Negocios: Nombres de los tres primeros negocios en cada punto

⚡ Multiprocessing y Rendimiento

El análisis de ranking se realiza en paralelo usando multiprocessing, lo que permite analizar grids grandes de forma mucho más rápida. El número de procesos se puede ajustar en la configuración.

🧩 Estructura del Proyecto

BrandHeatMap/
├── app/
│   ├── __init__.py          # Configuración de Flask
│   ├── routes.py            # Rutas de la aplicación
│   ├── analysis.py          # Generación de mapas y estadísticas
│   ├── selenium_utils.py    # Utilidades de Selenium (incluye multiprocessing)
│   ├── geo_utils.py         # Generación de coordenadas
│   ├── static/              # Archivos estáticos generados
│   ├── templates/
│   │   ├── index.html       # Vista clásica
│   │   └── alt.html         # Vista moderna (ahora en /)
├── controllers/
│   └── alt_controller.py    # Lógica de negocio separada para la vista moderna
├── app.py                   # Punto de entrada principal
├── requirements.txt         # Dependencias de Python
├── README.md                # Este archivo

🧑‍💻 Estructura de Controladores

La lógica de negocio para la vista moderna está separada en controllers/alt_controller.py, siguiendo buenas prácticas de separación de responsabilidades.

🐛 Solución de Problemas

Error: ChromeDriver no encontrado

# Descargar ChromeDriver y añadir al PATH
# O especificar la ruta en el código

Error: No se encuentran resultados

  • Verificar que el nombre del negocio sea exacto
  • Comprobar que la palabra clave sea relevante
  • Revisar la conectividad a internet

Error: Timeout en búsquedas

  • Aumentar tiempos de espera en selenium_utils.py
  • Verificar velocidad de internet
  • Considerar usar modo no-headless para debugging

🤝 Contribuciones

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

⚠️ Notas Importantes

  • Uso Responsable: Esta herramienta debe usarse respetando los términos de servicio de Google
  • Rate Limiting: Incluye pausas entre búsquedas para evitar bloqueos
  • Datos Simulados: Para demostración, considera usar datos de prueba
  • ChromeDriver: Mantén actualizado ChromeDriver con tu versión de Chrome

📞 Soporte

Para reportar bugs o solicitar features, por favor:

  1. Revisa los issues existentes
  2. Crea un nuevo issue con detalles completos
  3. Incluye logs de error si aplica

Desarrollado con ❤️ para análisis de SEO local

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages