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.
- 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.
- 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.
- 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
- Folium: Mapas interactivos con Leaflet.js
- Matplotlib: Generación de gráficos y exportación PNG
- HeatMap Plugin: Mapas de calor para Folium
- Bootstrap 5: Framework CSS para el diseño
- Leaflet.js: Biblioteca de mapas interactivos
- jQuery: Manipulación del DOM y AJAX
- FontAwesome: Iconos
- tqdm: Barras de progreso
- ChromeDriver: Control del navegador Chrome
- Python 3.8+
- Chrome/Chromium instalado
- ChromeDriver compatible con tu versión de Chrome
- Clonar el repositorio:
git clone <url-del-repositorio>
cd BrandHeatMap- Crear entorno virtual:
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate- Instalar dependencias:
pip install -r requirements.txt- 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
python app.pyLa aplicación estará disponible en http://localhost:5000
- Seleccionar Centro: Arrastra el marcador en el mapa de selección para definir el centro geográfico.
- 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
- Ejecutar Análisis: Haz clic en "Analizar". Se mostrará un spinner de carga.
- Revisar Resultados: Visualiza el mapa de resultados con marcadores de ranking, la leyenda y la tabla de resultados.
- Exportar Datos: Descarga CSV desde el botón correspondiente.
La vista clásica (formulario y mapa de calor tradicional) está disponible en /alt.
- Verde: Excelente ranking (posición 1)
- Amarillo: Ranking medio (posiciones 2-3)
- Rojo: Ranking bajo (4 o más)
- Gris: Negocio no encontrado
- 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
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.
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
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.
# Descargar ChromeDriver y añadir al PATH
# O especificar la ruta en el código- Verificar que el nombre del negocio sea exacto
- Comprobar que la palabra clave sea relevante
- Revisar la conectividad a internet
- Aumentar tiempos de espera en
selenium_utils.py - Verificar velocidad de internet
- Considerar usar modo no-headless para debugging
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
- 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
Para reportar bugs o solicitar features, por favor:
- Revisa los issues existentes
- Crea un nuevo issue con detalles completos
- Incluye logs de error si aplica
Desarrollado con ❤️ para análisis de SEO local