#Obtenemos lugar céntrico en la ciudad
CNC <- leaflet() %>%
addTiles() %>%
setView(-100.284553, 25.678665, zoom = 11.4) %>%
addMarkers(-100.284553, 25.678665, popup = "Parque Fundidora, Monterrey, Nuevo León")
CNC
Para el desarrollo de esta actividad, investigaremos las tendencias actuales en hoteles y centros comerciales, con el objetivo de identificar posibles relaciones entre ambos sectores y analizar cómo pueden influir en el turismo de la zona.
### Map coordinates of Parque Fundidora (Starting Point)
latitude <- 25.678665
longitude <- -100.284553
r <- 15000
# Primera llamada
search_str <- google_places(
search_string = 'Hotel',
location = c(latitude, longitude),
radius = r,
key = gmaps_key
)
# Espera 2 segundos para que el page_token sea válido
Sys.sleep(2)
# Segunda página
search_str_add_one <- google_places(
search_string = 'Hotel',
location = c(latitude, longitude),
radius = r,
key = gmaps_key,
page_token = search_str$next_page_token
)
Sys.sleep(2)
# Tercera página
search_str_add_two <- google_places(
search_string = 'Hotel',
location = c(latitude, longitude),
radius = r,
key = gmaps_key,
page_token = search_str_add_one$next_page_token
)
### The data frame will give you a wealth of information about each place, including its address, latitude & longitude coordinates, price level, star rating, number of ratings, categories, and more.
business_name <- c(search_str$results$name, search_str_add_one$results$name, search_str_add_two$results$name)
business_rating <- c(search_str$results$rating, search_str_add_one$results$rating, search_str_add_two$results$rating)
user_ratings_total <- c(search_str$results$user_ratings_total, search_str_add_one$results$user_ratings_total,search_str_add_two$results$user_ratings_total)
place_id <- c(search_str$results$place_id, search_str_add_one$results$place_id, search_str_add_two$results$place_id)
lat <- c(search_str$results$geometry$location$lat, search_str_add_one$results$geometry$location$lat, search_str_add_two$results$geometry$location$lat)
lon <- c(search_str$results$geometry$location$lng, search_str_add_one$results$geometry$location$lng, search_str_add_two$results$geometry$location$lng)
# write.csv(data, "D:\\CD2001C_AD2024\\Power_BI_Data_AD2024\\data_location_intl.csv", row.names=TRUE)
data_hotel<- data.frame(business_name,business_rating,user_ratings_total,place_id,lat,lon)
# write.csv(data, "D:\\CD2001C_AD2024\\Power_BI_Data_AD2024\\data_location_intl.csv", row.names=TRUE)
data_hotel <- data_hotel %>%
distinct(place_id, .keep_all = TRUE)
#View(data_hotel)
# Top 50 con mayor número de reseñas
top_reviews_hoteles <- data_hotel %>%
arrange(desc(user_ratings_total)) %>%
head(40)
# Gráfico
ggplot(top_reviews_hoteles, aes(x = reorder(business_name, user_ratings_total), y = user_ratings_total)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
labs(
title = " Hoteles - Mayor Número de Reseñas",
x = NULL,
y = "Número de Reseñas"
) +
theme_minimal()
# Registrar la API de Google para ggmap
register_google(key = gmaps_key)
# Obtener el mapa base centrado en Parque Fundidora
mapa_base <- get_googlemap(
center = c(lon = longitude, lat = latitude),
zoom = 12,
scale = 2,
size = c(640, 640),
maptype = "roadmap"
)
# Mapa de densidad + puntos negros
ggmap(mapa_base) +
stat_density2d(
data = top_reviews_hoteles,
aes(x = lon, y = lat, fill = after_stat(level)),
geom = "polygon",
alpha = 0.4
) +
scale_fill_gradient(low = "green", high = "red", guide = "none") +
geom_point(
data = data_hotel,
aes(x = lon, y = lat),
color = "black",
size = 1.8
) +
labs(
title = "Hoteles con más reseñas (zonas calientes)",
x = "",
y = ""
) +
theme_minimal()
## Definimos los clusters utilizando K-means para poder agrupar según la
distancia y así poder obetner centroides
# Escogemos el número de clusters (puedes ajustar este valor)
set.seed(123) # Reproducibilidad
num_clusters <- 5
# Aplicamos K-means sobre lat y lon
kmeans_result <- kmeans(top_reviews_hoteles[, c("lon", "lat")], centers = num_clusters)
# Añadimos el resultado al dataframe
top_reviews_hoteles$cluster <- as.factor(kmeans_result$cluster)
centroides <- as.data.frame(kmeans_result$centers)
# Mapa base
mapa_base <- get_googlemap(
center = c(lon = longitude, lat = latitude),
zoom = 12,
scale = 2,
size = c(1100, 1100),
maptype = "roadmap"
)
# Visualización con clusters y centroides
ggmap(mapa_base) +
geom_point(
data = top_reviews_hoteles,
aes(x = lon, y = lat, color = cluster),
size = 2
) +
geom_point(
data = centroides,
aes(x = lon, y = lat),
color = "black",
size = 4,
shape = 8
) +
labs(
title = paste0("Clustering de hoteles top (k = ", num_clusters, ")"),
x = "", y = ""
) +
theme_minimal() +
theme(legend.position = "bottom") +
scale_color_brewer(palette = "Set1")
# Creamos tabla resumen de clusters
tabla_clusters <- top_reviews_hoteles %>%
group_by(cluster) %>%
summarise(
Num_Hoteles = n(),
Centroide_Lon = mean(lon),
Centroide_Lat = mean(lat)
) %>%
arrange(desc(Num_Hoteles))
# Mostramos tabla
print(tabla_clusters)
## # A tibble: 5 × 4
## cluster Num_Hoteles Centroide_Lon Centroide_Lat
## <fct> <int> <dbl> <dbl>
## 1 5 19 -100. 25.7
## 2 2 8 -100. 25.7
## 3 1 6 -100. 25.7
## 4 3 4 -100. 25.8
## 5 4 3 -100. 25.7
# Coordenadas del Cluster Avenida Miguel Alemán
lat1 <- 25.72456
lon1 <- -100.2174
cluster_1 <- google_places(
search_string = "Hotel",
location = c(lat1, lon1),
radius = 5000,
key = gmaps_key
)
cluster_miguel_aleman <- data.frame(
business_name = cluster_1$results$name,
business_rating = cluster_1$results$rating,
user_ratings_total = cluster_1$results$user_ratings_total,
place_id = cluster_1$results$place_id,
lat = cluster_1$results$geometry$location$lat,
lon = cluster_1$results$geometry$location$lng
) %>%
distinct(place_id, .keep_all = TRUE) %>%
arrange(desc(user_ratings_total))
cluster_miguel_aleman <- head(cluster_miguel_aleman, 10)
#view(df_cluster_1)
# Coordenadas del Cluster Zona Centro de Monterrey
lat3 <- 25.66944
lon3 <- -100.29941
cluster_3 <- google_places(
search_string = "Hotel",
location = c(lat3, lon3),
radius = 2000,
key = gmaps_key
)
cluster_mty_centro <- data.frame(
business_name = cluster_3$results$name,
business_rating = cluster_3$results$rating,
user_ratings_total = cluster_3$results$user_ratings_total,
place_id = cluster_3$results$place_id,
lat = cluster_3$results$geometry$location$lat,
lon = cluster_3$results$geometry$location$lng
) %>%
distinct(place_id, .keep_all = TRUE) %>%
arrange(desc(user_ratings_total))
cluster_mty_centro <- head(cluster_mty_centro, 15)
# Coordenadas del Cluster San Pedro Garza García
lat5 <- 25.654582
lon5 <- -100.343557
cluster_5 <- google_places(
search_string = "Hotel",
location = c(lat5, lon5),
radius = 1250,
key = gmaps_key
)
cluster_san_pedro <- data.frame(
business_name = cluster_5$results$name,
business_rating = cluster_5$results$rating,
user_ratings_total = cluster_5$results$user_ratings_total,
place_id = cluster_5$results$place_id,
lat = cluster_5$results$geometry$location$lat,
lon = cluster_5$results$geometry$location$lng
) %>%
distinct(place_id, .keep_all = TRUE) %>%
arrange(desc(user_ratings_total))
cluster_san_pedro <- head(cluster_san_pedro, 10)
# Agregar columna de cluster
cluster_miguel_aleman$cluster <- "Cluster Avenida Miguel Alemán"
cluster_mty_centro$cluster <- "Cluster Zona Centro Mty"
cluster_san_pedro$cluster <- "Cluster Zona S.P.G.G."
# Unir todos los dataframes
df_top_hoteles <- bind_rows(cluster_miguel_aleman, cluster_mty_centro, cluster_san_pedro)
library(leaflet)
# Crear data frame con los centroides
centroides <- data.frame(
lat = c(lat1, lat3, lat5),
lon = c(lon1, lon3, lon5),
cluster = c("Cluster Avenida Miguel Alemán", "Cluster Zona Centro Mty", "Cluster Zona S.P.G.G.")
)
# Crear mapa base
mapa_clusters <- leaflet(df_top_hoteles) %>%
addTiles() %>%
addCircleMarkers(
~lon, ~lat,
radius = 6,
color = ~case_when(
cluster == "Cluster Avenida Miguel Alemán" ~ "red",
cluster == "Cluster Zona Centro Mty" ~ "blue",
cluster == "Cluster Zona S.P.G.G." ~ "purple"
),
label = ~paste(business_name, "<br>⭐", business_rating, "<br>📊", user_ratings_total, "reseñas"),
popup = ~paste0("<b>", business_name, "</b><br>⭐ Calificación: ", business_rating,
"<br>📊 Reseñas: ", user_ratings_total,
"<br>📍 Cluster: ", cluster),
fillOpacity = 0.9,
stroke = FALSE
) %>%
# Centroides como estrellas
addAwesomeMarkers(
data = centroides,
~lon, ~lat,
icon = awesomeIcons(
icon = "circle",
iconColor = "white",
library = "fa"
),
label = ~paste("Centroide -", cluster),
popup = ~paste("<b>Centroide:</b><br>", cluster)
) %>%
addLegend(
position = "bottomright",
colors = c("red", "blue", "purple"),
labels = c("Cluster Avenida Miguel Alemán", "Cluster Zona Centro Mty", "Cluster Zona S.P.G.G."),
title = "Clusters Hoteleros"
)
# Mostrar mapa
mapa_clusters
head(cluster_miguel_aleman[, c("business_name", "business_rating", "user_ratings_total")], 10)
## business_name business_rating
## 1 Holiday Inn Monterrey-Parque Fundidora, an IHG Hotel 4.5
## 2 Fiesta Inn Monterrey Fundidora 4.4
## 3 ibis Monterrey Aeropuerto 3.8
## 4 Fiesta Inn Monterrey La Fe 4.3
## 5 Hotel NH Monterrey La Fe 4.5
## 6 City Express by Marriott Monterrey Aeropuerto 4.2
## 7 Hotel Misión Express Monterrey Aeropuerto La Fé 3.9
## 8 City Express Plus by Marriott Monterrey Nuevo Sur 4.5
## 9 Extended Suites Monterrey Aeropuerto 4.1
## 10 Quality Inn Monterrey La Fe 4.4
## user_ratings_total
## 1 6207
## 2 3791
## 3 3157
## 4 2576
## 5 2417
## 6 2319
## 7 2314
## 8 2234
## 9 1877
## 10 1848
head(cluster_mty_centro[, c("business_name", "business_rating", "user_ratings_total")], 15)
## business_name business_rating
## 1 Crowne Plaza Monterrey, an IHG Hotel 4.5
## 2 Holiday Inn Monterrey-Parque Fundidora, an IHG Hotel 4.5
## 3 CHN Hotel Monterrey Centro 4.2
## 4 Hotel Monterrey Macroplaza 4.2
## 5 Gamma Monterrey Gran Hotel Ancira 4.5
## 6 Wyndham Monterrey Ambassador Centro 4.3
## 7 Hotel Safi Centro 4.5
## 8 Hotel Krystal Monterrey 4.4
## 9 Hotel Misión Monterrey Centro Histórico 3.5
## 10 Hotel Antaris Cintermex 4.2
## 11 Fiesta Inn Monterrey Tecnológico 4.4
## 12 Fiesta Americana Pabellón M 4.7
## 13 Fiesta Inn Express Monterrey Centro 4.4
## 14 El Regio Hotel 3.6
## 15 Hotel Kavia Monterrey 4.2
## user_ratings_total
## 1 8673
## 2 6207
## 3 5847
## 4 5506
## 5 5078
## 6 5068
## 7 4816
## 8 4371
## 9 3761
## 10 3329
## 11 3175
## 12 2797
## 13 1475
## 14 1126
## 15 1045
head(cluster_san_pedro[, c("business_name", "business_rating", "user_ratings_total")], 10)
## business_name business_rating
## 1 Hotel Safi Royal Luxury Valle 4.6
## 2 Hotel Novotel Monterrey Valle 4.3
## 3 Camino Real Monterrey 4.5
## 4 Hotel Antaris Galerías 4.1
## 5 Hotel NH Collection Monterrey San Pedro 4.4
## 6 City Express Plus by Marriott Monterrey Galerias 4.4
## 7 Holiday Inn Monterrey Valle by IHG 4.4
## 8 Quinta Real 4.7
## 9 Comfort Inn Monterrey Valle 4.2
## 10 ibis Monterrey Valle 3.8
## user_ratings_total
## 1 5309
## 2 3780
## 3 3261
## 4 3106
## 5 2829
## 6 2788
## 7 2621
## 8 2434
## 9 2110
## 10 1637