Daniel Agustín Chávez Leal A01177542

Andrea Jazmín Guzmán Cruz A01174724

Carolina Rojas Alejo A00832087

Ana Sofia Mijares Suarez A01721591

Larissa Alexandra Landazuri Gaponchuk A00831892

Oferta - Demanda en municipios de Nuevo León

Nuevo León, uno de los estados más dinámicos y económicamente relevantes de México, también destaca por su potencial en el sector turístico. Ubicado en el noreste del país, este estado ofrece una variedad de atracciones que van desde su rica historia y cultura hasta su impresionante belleza natural y su vibrante escena urbana. En este análisis exploratorio veremos la oferta y demanda turística de Nuevo León y examinaremos varios aspectos que influyen en este sector clave de la economía del estado.

El objetivo de este análisis exploratorio es brindar una visión integral de la oferta y demanda turística en Nuevo León, identificando oportunidades y desafíos para el desarrollo sustentable del sector. Al comprender mejor las características y tendencias del turismo en el estado, se pueden diseñar estrategias y políticas para promover el crecimiento económico equitativo, la satisfacción de las necesidades y expectativas de los visitantes.

OfertaLa oferta se refiere a la cantidad de bienes y servicios que los productores están dispuestos y pueden ofrecer al mercado.

Demanda. Dentro de este análisis la demanda representa las características demográficas que abarca la población del estado.

Para solucionar este problema tenemos a nuestra disposición las bases de datos del Directorio Estadístico Nacional de Unidades Económicas (DENUE), las cuales han sido previamente depuradas. Estas bases de datos contienen información detallada de las diversas unidades económicas, demográficas e instituciones de los municipios de Nuevo León. Este recurso nos brinda una visión más completa y detallada que nos permitirá identificar áreas de oportunidad específicas y desarrollar estrategias adaptadas a las necesidades de Nuevo León, el análisis de estos factores puede proporcionar una comprensión más profunda de cómo funciona la economía de Nuevo León y cómo se relacionan la oferta y la demanda en la región.

## Oferta

Características demográficas

Factor edad

Identificamos la densidad de población por cada municipio de Nuevo León

knitr::opts_chunk$set(warning = FALSE)
library(leaflet.extras)   # to provide extra functionality to the leaflet R package
## Loading required package: leaflet
library(gmapsdistance)    # allows to calculate distances for a database through Google maps
#library(rworldmap)       # visualizing global data
library(tidyverse)        # collection of R packages designed for data science
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(htmltools)        # tools for HTML generation and output
library(magrittr)         # decrease development time and improve readability and maintainability of code
## 
## Attaching package: 'magrittr'
## 
## The following object is masked from 'package:purrr':
## 
##     set_names
## 
## The following object is masked from 'package:tidyr':
## 
##     extract
library(leafsync)         # create small multiples of several leaflet web maps
library(jsonlite)         # a fast JSON parser and generator, optimized for statistical data and the web
## 
## Attaching package: 'jsonlite'
## 
## The following object is masked from 'package:purrr':
## 
##     flatten
library(leaflet)          # a leading open-source JavaScript library for mobile-friendly interactive maps
library(foreign)          # reading and writing data stored by several formats
library(mapview)          # provides functions to conveniently create interactive visualizations of spatial data
library(tigris)           # allows users to directly download and use TIGER/Line shapefiles from US Census
## To enable caching of data, set `options(tigris_use_cache = TRUE)`
## in your R script or .Rprofile.
#library(rgdal)           # Geospatial Data Abstraction Library 
library(ggmap)            # to visualize spatial data and models on top of static maps from various online sources
## ℹ Google's Terms of Service: <https://mapsplatform.google.com>
##   Stadia Maps' Terms of Service: <https://stadiamaps.com/terms-of-service/>
##   OpenStreetMap's Tile Usage Policy: <https://operations.osmfoundation.org/policies/tiles/>
## ℹ Please cite ggmap if you use it! Use `citation("ggmap")` for details.
## 
## Attaching package: 'ggmap'
## 
## 
## The following object is masked from 'package:magrittr':
## 
##     inset
library(knitr)            # integrates computing and reporting
library(spdep)            # to create spatial weights matrix objects from polygon contiguities, 
## Loading required package: spData
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
## Loading required package: sf
## Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
library(spgwr)             # from point patterns by distance and tessellations
## Loading required package: sp
## NOTE: This package does not constitute approval of GWR
## as a method of spatial analysis; see example(gwr)
library(sfdep)            # an interface to 'spdep' to integrate with 'sf' objects and the 'tidyverse
library(tmap)             # thematic maps can be generated with great flexibility
## Breaking News: tmap 3.x is retiring. Please test v4, e.g. with
## remotes::install_github('r-tmap/tmap')
library(sf)               # a standardized way to encode spatial vector data
library(readxl)
sf <- read_sf("/Users/sofiamijares/Downloads/r/Quiz_3/nl_map/nl_mpios_auto_acc.shp")
knitr::opts_chunk$set(warning = FALSE)
library(readxl)
datab <- read_excel("/Users/sofiamijares/Downloads/r/Quiz_3/NL_Demográficoslll.xlsx")
datab$POBTOT <- as.numeric(datab$POBTOT)
datab$POBFEM <- as.numeric(datab$POBFEM)
datab$POBMAS <- as.numeric(datab$POBMAS)
datab$P_3A5 <- as.numeric(datab$P_3A5)
datab$P_6A11 <- as.numeric(datab$P_6A11)
datab$P_8A14 <- as.numeric(datab$P_8A14)
datab$P_12A14 <- as.numeric(datab$P_12A14)
datab$P_15A17 <- as.numeric(datab$P_15A17)
datab$P_18A24 <- as.numeric(datab$P_18A24)
datab$P_60YMAS <- as.numeric(datab$P_60YMAS)

sf <- sf %>%
  select(-auto_accid,-tasa_auto_,-edad,-pop,-gini,-densidad_p,-cinturon,-zona_subur,-zona_urb,-grado_educ, -sexo,-aliento)

# preparing georeferenced dataset
nl_mpio_geodata <- geo_join(sf, datab,'IDUNICO','IDUNICO',how='left')
nl_mpio_geodata <- subset(nl_mpio_geodata, select = -rank)
tm_shape(nl_mpio_geodata) + 
  tm_polygons("POBTOT", palette = "Purples", style="quantile", title="NL Population Density across Mpios") +
tmap_mode("view") 
## tmap mode set to interactive viewing
tmap_last()
## tmap mode set to interactive viewing
fem <- tm_shape(nl_mpio_geodata) + 
  tm_polygons(col = "POBMAS", palette="YlOrRd", style="quantile", n=10, title="Población Maculina") +
  tm_layout(main.title= 'Mexico Central Region - GMI = 0.63***',  title.position = c('right', 'top'), legend.position= c("left", "bottom"), title.size = 1)


mas <- tm_shape(nl_mpio_geodata) + 
  tm_polygons(col = "POBFEM", palette="YlOrRd", style="quantile", n=10, title="Población Femenina") +
  tm_layout(main.title= 'Mexico Central Region - GMI = 0.63***',  title.position = c('right', 'top'), legend.position= c("left", "bottom"), title.size = 1)

tmap_arrange(fem,mas, ncol = 2)
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.
  • Nos concentramos en la zona en donde se registra mayor número de población ya que normalmente son conocidas como los municipios más turísticos o con más oferta para la visita. Esto es específicamente en la zona metropolitana; Monterrey, San Pedro Garza García, Garcia, Santa Catarina, Juarez, Guadalupe, etc…
# Seleccionar las columnas "POBTOT" y "mpio" del DataFrame nl_mpio_geodata
df_subset <- nl_mpio_geodata[, c("POBTOT", "mpio")]

# Filtrar las filas donde el total de población es mayor o igual a 100,000
datos_filtrados <- subset(df_subset, POBTOT >= 100000)

# Crear un vector con los totales por región
totales_por_region <- datos_filtrados$POBTOT

# Crear la gráfica de barras
barplot(totales_por_region, 
        names.arg = datos_filtrados$mpio,  # Usar los nombres de los municipios como etiquetas en el eje x
        main = "Población total por Región",
        xlab = "Región",
        ylab = "Total",
        col = "skyblue",
        ylim = c(0, max(totales_por_region) * 1.2),
        las = 2) +
      theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje x si es necesario

## NULL

Densidad de población en la zona metropolitana

tm_shape(datos_filtrados) + 
  tm_polygons("POBTOT", palette = "Purples", style="quantile", title="2020 Population Density of MTY Metropolitan Zone") +
  tm_text(text = "mpio", size = "POBTOT")
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
  • Observamos cómo Apodaca, Guadalupe y Monterrey son los que cuentan con más de 500,000 mil habitantes, llegando hasta más de 1 millón. Identificamos Juarez, General Escobedo, Garcia y Santa Catarina con un nivel medio de habitantes en comparación al resto y con un alcance más bajo se encuentra San Pedro Garza Garcia, Cadereyta Jiménez, General Zuazua y El Carmen.

Rangos de edad en la población

df_subset1 <- nl_mpio_geodata[, c("POBTOT", "mpio","P_3A5","P_6A11","P_8A14","P_12A14","P_15A17","P_18A24","P_60YMAS","Poblacion_Economicamente_Activa")]


df_subset1$P_3A11 <- df_subset1$P_3A5 + df_subset1$P_6A11
df_subset1$P_12A17 <- df_subset1$P_12A14 + df_subset1$P_15A17


# Filtrar las filas donde el total de población es mayor o igual a 100,000
datos_filtrados1 <- subset(df_subset1, POBTOT >= 100000)

p3a11 <- tm_shape(datos_filtrados1) + 
  tm_polygons("P_3A11", palette = "Purples", style="quantile", title="Población de 3 a 11 años") +
  tm_text(text = "mpio", size = "P_3A11")

p12a17 <- tm_shape(datos_filtrados1) + 
  tm_polygons("P_12A17", palette = "Purples", style="quantile", title="Población de 12 a 17 años") +
  tm_text(text = "mpio", size = "P_12A17")

tmap_arrange(p3a11,p12a17, ncol = 2)
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
  • Para las edades de 3 a 11 años vemos cómo su presencia predomina en Apodaca, Juárez y Monterrey

  • De 12 a 17 años en Apodaca, Guadalupe y Monterrey

  • Concluimos que Apodaca y Monterrey es donde hay más presencia de niños y jóvenes en todo Nuevo León, por lo tanto identificamos que tiende a haber en su mayoría familias con integrantes de estas edades como hijos

p18a24 <- tm_shape(datos_filtrados1) + 
  tm_polygons("P_8A14", palette = "Purples", style="quantile", title="Población de 18 a 24") +
  tm_text(text = "mpio", size = "P_18A24")

p60 <- tm_shape(datos_filtrados1) + 
  tm_polygons("P_60YMAS", palette = "Purples", style="quantile", title="Población de 60 y más") +
  tm_text(text = "mpio", size = "P_60YMAS")

tmap_arrange(p18a24,p60, ncol = 2)
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
  • La diferencia que identificamos entre estos dos rango es que en Apodaca hay mayor presencia de jóvenes adultos (18 - 24 años), de igual manera también vemos que en lugares como San Nicolás de los Garza y Guadalupe hay mayor población de 60 o más años.
df_subset2 <- datos_filtrados1[, c("POBTOT", "mpio","Poblacion_Economicamente_Activa","P_3A11","P_12A17","P_18A24","P_60YMAS")]
# Definir los puntos de corte para los intervalos
puntos_corte <- c(0, 0.35, 0.55, 1)  # Definimos los límites de los intervalos

# Definir los nombres de las categorías
nombres_categorias <- c("Bajo", "Medio", "Alto")

# Crear la nueva columna categorizada
df_subset2$CategoriaIngresos <- cut(df_subset2$Poblacion_Economicamente_Activa, breaks = puntos_corte, labels = nombres_categorias, include.lowest = TRUE)

# Ver el resultado
print(df)
## function (x, df1, df2, ncp, log = FALSE) 
## {
##     if (missing(ncp)) 
##         .Call(C_df, x, df1, df2, log)
##     else .Call(C_dnf, x, df1, df2, ncp, log)
## }
## <bytecode: 0x1476cd1c8>
## <environment: namespace:stats>
ggplot(df_subset2, aes(x=reorder(mpio,-P_3A11), y = P_3A11, fill = P_3A11)) +
  geom_bar(stat = "identity" , position="dodge") +  # Usar geom_bar() con stat = "identity" para representar los valores directamente
  labs(title = "Población de 3 a 11 años de edad",
       x = "Municipio",
       y = "Población") +
  scale_fill_gradient(low = "#CAFF70", high = "#556B2F") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

ggplot(df_subset2, aes(x=reorder(mpio,-P_12A17), y = P_12A17, fill = P_12A17)) +
  geom_bar(stat = "identity" , position="dodge") +  # Usar geom_bar() con stat = "identity" para representar los valores directamente
  labs(title = "Población de 12 a 17 años de edad",
       x = "Municipio",
       y = "Población") +
  scale_fill_gradient(low = "#CAFF70", high = "#556B2F")+
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

ggplot(df_subset2, aes(x=reorder(mpio,-P_18A24), y = P_18A24, fill = P_18A24)) +
  geom_bar(stat = "identity" , position="dodge") +  # Usar geom_bar() con stat = "identity" para representar los valores directamente
  labs(title = "Población de 18 a 24 años de edad",
       x = "Municipio",
       y = "Población") +
  scale_fill_gradient(low = "#CAFF70", high = "#556B2F") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplot(df_subset2, aes(x=reorder(mpio,-P_60YMAS), y = P_60YMAS, fill = P_60YMAS)) +
  geom_bar(stat = "identity" , position="dodge") +  # Usar geom_bar() con stat = "identity" para representar los valores directamente
  labs(title = "Población de 60 y más años de edad",
       x = "Municipio",
       y = "Población") +
  scale_fill_gradient(low = "#CAFF70", high = "#556B2F") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

summary(df_subset2)
##      POBTOT            mpio           Poblacion_Economicamente_Activa
##  Min.   : 102149   Length:13          Min.   :0.3370                 
##  1st Qu.: 132169   Class :character   1st Qu.:0.5190                 
##  Median : 397205   Mode  :character   Median :0.5560                 
##  Mean   : 393832                      Mean   :0.5394                 
##  3rd Qu.: 481213                      3rd Qu.:0.5770                 
##  Max.   :1142994                      Max.   :0.6340                 
##      P_3A11          P_12A17         P_18A24          P_60YMAS     
##  Min.   : 12952   Min.   : 9025   Min.   : 13052   Min.   :  2810  
##  1st Qu.: 21822   1st Qu.:12411   1st Qu.: 15474   1st Qu.: 12403  
##  Median : 43661   Median :30261   Median : 46905   Median : 25456  
##  Mean   : 57045   Mean   :36961   Mean   : 48097   Mean   : 43699  
##  3rd Qu.: 78658   3rd Qu.:52942   3rd Qu.: 61718   3rd Qu.: 40606  
##  Max.   :133918   Max.   :94288   Max.   :135096   Max.   :193946  
##           geometry  CategoriaIngresos
##  POLYGON      :13   Bajo :1          
##  epsg:4326    : 0   Medio:5          
##  +proj=long...: 0   Alto :7          
##                                      
##                                      
## 

En Nuevo Leon hay mayor población femenina que masculina, sin embargo la diferencia es menor al 7%

Monterrey es el estado con más densidad poblacional, en su mayoría se encuentran las personas menores a 25 años.

Los municipios con mayor población son de la zona metropolitana de Nuevo León, estos tienen mayor actividad económica, y en su mayoría la población es joven - adulta y mujeres.

Factor económico

La población economicamente activa dentro de los municipios representa a las personas que tienen ingresos y están en condiciones de consumir bienes y servicios. Esto relacionado con la demanda puede impulsar la creación y el mantenimiento de establecimientos, como restaurantes, parques, centros de entretenimiento, servicios de salud, educación, entre otros.

ec <- tm_shape(datos_filtrados1) + 
  tm_polygons("Poblacion_Economicamente_Activa", palette = "Purples", style="quantile", title="Economia activa por poblacion") +
  tm_text(text = "mpio", size = "Poblacion_Economicamente_Activa")
ec
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
df_subset2$CategoriaIngresos <- as.factor(df_subset2$CategoriaIngresos)


ml <- tm_shape(df_subset2) +
  tm_fill("CategoriaIngresos", title = "Ingreso promedio de municipios", palette = "-PuRd") + 
  tm_borders() +
  tm_layout(title = "ZMM Rezago Social", title.size = 0.8, title.position = c("left", "bottom"), legend.outside = FALSE, legend.outside.position = "right") + 
  tm_text(text = "mpio", size = "POBTOT")

ml
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
dotchart(df_subset2$Poblacion_Economicamente_Activa, labels = df_subset2$mpio, pch = 21, bg = "green", pt.cex = 1.5)

La distribución geográfica de la actividad económica se ve concentrada en una solo área, santa catarina, Monterrey y San pedro Garza García, se pudiera deducir que esto se debe a que estas áreas se tienen infraestructura desarrollada y la presencia de empresas importantes. La cercanía de estos municipios puede indicar que este factor tiene posible expansión con el tiempo debido a estas características, además de que también son las que se identificó con anterioridad con mayor porcentaje poblacional, por lo tanto la actividad económica tiende a hacer mayor por su fuerza laboral.

La concentración de la actividad económica en ciertas áreas como Santa Catarina, Monterrey y San Pedro Garza García puede estar relacionada con la infraestructura desarrollada, la presencia de empresas importantes y otros factores:

Infraestructura desarrollada: Estas comunidades generalmente tienen una infraestructura mejor desarrollada en comparación con otras áreas del estado. Esta infraestructura desarrollada proporciona un entorno propicio para la actividad empresarial y la inversión.

Presencia de grandes empresas: En estas comunidades suelen estar ubicadas grandes empresas tanto nacionales como internacionales. La presencia de grandes corporaciones y negocios locales influye en la creación de empleo, la atracción de talento y la inversión en la región.

Proximidad y complementariedad: La proximidad entre estos municipios puede facilitar la colaboración y la complementariedad entre empresas y servicios.

Potencial de expansión: Debido a su entorno favorable para los negocios y su infraestructura desarrollada, estas comunidades tienen un alto potencial de expansión económica en el futuro.

En conjunto, estos factores contribuyen a la concentración de la actividad económica en ciertas áreas y con ello se contempla que dichas areas tienen un potencial significativo para continuar con el crecimiento económico y desarrollo en el estado.

datab2 <- read_excel("/Users/sofiamijares/Downloads/r/todosmtytur2020.xlsx")

# preparing georeferenced dataset
nl2 <- geo_join(sf, datab2,'mpio','mpio',how='inner')
summary(nl2)
##     OBJECTID         CODELAG        CVE_ENT      IDUNICO        Shape_Leng    
##  Min.   : 1.000   Min.   :2199   Min.   :19   Min.   :19006   Min.   :0.3572  
##  1st Qu.: 6.000   1st Qu.:2204   1st Qu.:19   1st Qu.:19021   1st Qu.:0.5114  
##  Median : 7.000   Median :2205   Median :19   Median :19039   Median :1.0619  
##  Mean   : 9.356   Mean   :2207   Mean   :19   Mean   :19031   Mean   :0.9373  
##  3rd Qu.:10.000   3rd Qu.:2208   3rd Qu.:19   3rd Qu.:19039   3rd Qu.:1.1352  
##  Max.   :47.000   Max.   :2245   Max.   :19   Max.   :19049   Max.   :2.5407  
##                                                                               
##    Shape_Area         OBJECTID_1       IDUNICO_1         mpio          
##  Min.   :0.005413   Min.   : 1.000   Min.   :19006   Length:15829      
##  1st Qu.:0.010582   1st Qu.: 6.000   1st Qu.:19021   Class :character  
##  Median :0.022224   Median : 7.000   Median :19039   Mode  :character  
##  Mean   :0.027679   Mean   : 9.356   Mean   :19031                     
##  3rd Qu.:0.029195   3rd Qu.:10.000   3rd Qu.:19039                     
##  Max.   :0.150516   Max.   :47.000   Max.   :19049                     
##                                                                        
##     region                   geometry           id            codigo_act    
##  Length:15829       POLYGON      :15829   Min.   :2914878   Min.   :711111  
##  Class :character   epsg:4326    :    0   1st Qu.:2996745   1st Qu.:722512  
##  Mode  :character   +proj=long...:    0   Median :7351043   Median :722514  
##                                           Mean   :6116636   Mean   :726245  
##                                           3rd Qu.:8524419   3rd Qu.:722514  
##                                           Max.   :9331146   Max.   :812410  
##                                                                             
##   nombre_act         nom_estab           per_ocu            cod_postal   
##  Length:15829       Length:15829       Length:15829       Min.   :    0  
##  Class :character   Class :character   Class :character   1st Qu.:64530  
##  Mode  :character   Mode  :character   Mode  :character   Median :66150  
##                                                           Mean   :65797  
##                                                           3rd Qu.:66646  
##                                                           Max.   :99999  
##                                                           NA's   :85     
##    entidad             cve_mun          ageb              latitud     
##  Length:15829       Min.   : 6.00   Length:15829       Min.   :10.26  
##  Class :character   1st Qu.:21.00   Class :character   1st Qu.:25.67  
##  Mode  :character   Median :39.00   Mode  :character   Median :25.69  
##                     Mean   :31.12                      Mean   :25.67  
##                     3rd Qu.:39.00                      3rd Qu.:25.76  
##                     Max.   :49.00                      Max.   :25.99  
##                                                                       
##     longitud        fecha_alta           tamaño           tipo_plan        
##  Min.   :-124.45   Length:15829       Length:15829       Length:15829      
##  1st Qu.:-100.34   Class :character   Class :character   Class :character  
##  Median :-100.29   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :-100.34                                                           
##  3rd Qu.:-100.23                                                           
##  Max.   : -99.81                                                           
## 
# Convertimos a factor
nl2$id <- as.factor(nl2$id)
nl2$codigo_act <- as.factor(nl2$codigo_act)
nl2$per_ocu <- as.factor(nl2$per_ocu)
nl2$cod_postal <- as.factor(nl2$cod_postal)
nl2$cve_mun <- as.factor(nl2$cve_mun)
nl2$municipio <- as.factor(nl2$mpio)
nl2$ageb <- as.numeric(nl2$ageb)
nl2tamaño <- as.factor(nl2$tamaño)

summary(nl2)
##     OBJECTID         CODELAG        CVE_ENT      IDUNICO        Shape_Leng    
##  Min.   : 1.000   Min.   :2199   Min.   :19   Min.   :19006   Min.   :0.3572  
##  1st Qu.: 6.000   1st Qu.:2204   1st Qu.:19   1st Qu.:19021   1st Qu.:0.5114  
##  Median : 7.000   Median :2205   Median :19   Median :19039   Median :1.0619  
##  Mean   : 9.356   Mean   :2207   Mean   :19   Mean   :19031   Mean   :0.9373  
##  3rd Qu.:10.000   3rd Qu.:2208   3rd Qu.:19   3rd Qu.:19039   3rd Qu.:1.1352  
##  Max.   :47.000   Max.   :2245   Max.   :19   Max.   :19049   Max.   :2.5407  
##                                                                               
##    Shape_Area         OBJECTID_1       IDUNICO_1         mpio          
##  Min.   :0.005413   Min.   : 1.000   Min.   :19006   Length:15829      
##  1st Qu.:0.010582   1st Qu.: 6.000   1st Qu.:19021   Class :character  
##  Median :0.022224   Median : 7.000   Median :19039   Mode  :character  
##  Mean   :0.027679   Mean   : 9.356   Mean   :19031                     
##  3rd Qu.:0.029195   3rd Qu.:10.000   3rd Qu.:19039                     
##  Max.   :0.150516   Max.   :47.000   Max.   :19049                     
##                                                                        
##     region                   geometry           id          codigo_act  
##  Length:15829       POLYGON      :15829   2914878:    1   722514 :5589  
##  Class :character   epsg:4326    :    0   2914904:    1   722517 :2982  
##  Mode  :character   +proj=long...:    0   2914905:    1   722511 :2359  
##                                           2914954:    1   722513 :2151  
##                                           2914956:    1   722512 : 642  
##                                           2914959:    1   722412 : 607  
##                                           (Other):15823   (Other):1499  
##   nombre_act         nom_estab                       per_ocu     
##  Length:15829       Length:15829       0 a 5 personas    :12725  
##  Class :character   Class :character   101 a 250 personas:   57  
##  Mode  :character   Mode  :character   11 a 30 personas  : 1011  
##                                        251 y más personas:   10  
##                                        31 a 50 personas  :  291  
##                                        51 a 100 personas :  124  
##                                        6 a 10 personas   : 1611  
##    cod_postal      entidad             cve_mun          ageb     
##  64000  : 1429   Length:15829       39     :5921   Min.   :  11  
##  67190  :  389   Class :character   26     :2199   1st Qu.: 478  
##  66050  :  330   Mode  :character   46     :1563   Median :1187  
##  67250  :  327                      6      :1486   Mean   :1373  
##  66220  :  234                      21     :1144   3rd Qu.:1741  
##  (Other):13035                      31     : 714   Max.   :5570  
##  NA's   :   85                      (Other):2802   NA's   :1340  
##     latitud         longitud        fecha_alta           tamaño         
##  Min.   :10.26   Min.   :-124.45   Length:15829       Length:15829      
##  1st Qu.:25.67   1st Qu.:-100.34   Class :character   Class :character  
##  Median :25.69   Median :-100.29   Mode  :character   Mode  :character  
##  Mean   :25.67   Mean   :-100.34                                        
##  3rd Qu.:25.76   3rd Qu.:-100.23                                        
##  Max.   :25.99   Max.   : -99.81                                        
##                                                                         
##   tipo_plan                            municipio   
##  Length:15829       Monterrey               :5921  
##  Class :character   Guadalupe               :2199  
##  Mode  :character   San Nicolas de los Garza:1563  
##                     Apodaca                 :1486  
##                     General Escobedo        :1144  
##                     Juarez                  : 714  
##                     (Other)                 :2802
dim(nl2)
## [1] 15829    26

Como parte de este análisis agregamos una clasificación de establecimientos por tipo de plan, es decir, el tipo de actividad adecuada a la edad de la persona, esto para simplificar los establecimientos por área;

  1. Plan de “Familia y amigos” donde se agrupan establecimientos que ofrecen actividades recreativas como parques (naturales, acuáticos y temáticos), centros de entretenimiento, entre otros.
  2. Plan de “Vida nocturna” donde se agrupan establecimientos que ofrecen actividades nocturnas como, bares, discotecas, billares, entre otros. A diferencia de todos los demás planes este involucra alcohol.
  3. Plan “Culturales y artísticos” donde se agrupan establecimientos que ofrecen actividades culturales y artísticas, por ejemplo, museos, teatros, casa de música, entre otros.
  4. “Servicios”, por último, esta clasificación no es un plan pero agrupa a todos los establecimientos que ofrecen servicios al turista, por ejemplo, baños, estacionamientos y restaurantes.

(Los tipos de planes no discriminan a los habitantes, sin embargo se busca categorizarlas)

nl2 %>%
  group_by(tamaño, per_ocu) %>%
  summarise(nom_estab = n()) %>%
  arrange(desc(nom_estab))
## Simple feature collection with 7 features and 3 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -100.8619 ymin: 25.22379 xmax: -99.6862 ymax: 26.39517
## Geodetic CRS:  WGS 84
## # A tibble: 7 × 4
## # Groups:   tamaño [4]
##   tamaño       per_ocu            nom_estab                             geometry
##   <chr>        <fct>                  <int>                        <POLYGON [°]>
## 1 Microempresa 0 a 5 personas         12725 ((-100.1042 25.83155, -100.1038 25.…
## 2 Pequeña      6 a 10 personas         1611 ((-99.78207 25.67142, -99.78089 25.…
## 3 Pequeña      11 a 30 personas        1011 ((-100.1042 25.83155, -100.1038 25.…
## 4 Mediana      31 a 50 personas         291 ((-100.4685 25.89827, -100.4902 25.…
## 5 Mediana      51 a 100 personas        124 ((-100.3441 25.58979, -100.3444 25.…
## 6 Grande       101 a 250 personas        57 ((-100.3392 25.76242, -100.3481 25.…
## 7 Grande       251 y más personas        10 ((-100.1674 25.51694, -100.1679 25.…
# filtramos para solo tener empresas pequeñas, medianas y grandes
tamaño <- nl2$tamaño %in% c("Pequeña", "Mediana", "Grande")
d2018_2023 <- nl2[tamaño,]
dim(nl2)
## [1] 15829    26
tam <- nl2 %>%
  group_by(tipo_plan) %>%
  summarise(nom_estab = n()) %>%
  mutate(Porcentaje = paste(round((nom_estab / sum(nom_estab)) * 100, 1), "%")) %>%
  arrange(desc(nom_estab))
tam
## Simple feature collection with 4 features and 3 fields
## Geometry type: GEOMETRY
## Dimension:     XY
## Bounding box:  xmin: -100.8619 ymin: 25.22379 xmax: -99.6862 ymax: 26.39517
## Geodetic CRS:  WGS 84
## # A tibble: 4 × 4
##   tipo_plan               nom_estab                          geometry Porcentaje
##   <chr>                       <int>                    <GEOMETRY [°]> <chr>     
## 1 Servicios                   14706 POLYGON ((-100.1042 25.83155, -1… 92.9 %    
## 2 Vida Nocturna                 780 POLYGON ((-100.1068 25.70141, -1… 4.9 %     
## 3 Familia y amigos              236 POLYGON ((-100.0582 25.3615, -10… 1.5 %     
## 4 Culturales y artisticos       107 MULTIPOLYGON (((-100.1183 26.038… 0.7 %
pie(tam$nom_estab, labels = paste(tam$tamaño, "(", tam$Porcentaje, ")"), col = c("deepskyblue", "yellow","violetred1"), radius = 1, main = "Diagrama de pastel - tamaño de establecimientos")

La mayoría de la base de datos son servicios de comida (restaurantes), de estacionamiento (estacionamientos) e higiénicos (baños públicos). Es interesante observar que hay más establecimientos para la vida nocturna que para realizar actividades recreativas con la familia y amigos o como tipo cultural. Las muestras culturales y artísticas son fundamentales para llamar la atención turística.

Mapas de cantidad de establecimientos en los municipios por tipo de plan

# Nueva tabla agrupada por municipio
cant_mun <- nl2 %>%
  group_by(mpio, tipo_plan) %>%
  summarise(nom_estab = n()) %>%
  arrange(mpio)

# Transponemos los datos
datos_ancho <- pivot_wider(cant_mun, names_from = tipo_plan, values_from = nom_estab, values_fill = 0)

print(datos_ancho)
## Simple feature collection with 16 features and 5 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -100.8619 ymin: 25.22379 xmax: -99.6862 ymax: 26.39517
## Geodetic CRS:  WGS 84
## # A tibble: 16 × 6
##    mpio                       geometry Culturales y artisti…¹ `Familia y amigos`
##    <chr>                 <POLYGON [°]>                  <int>              <int>
##  1 Apodaca   ((-100.1142 25.83685, -1…                      5                 22
##  2 Cadereyt… ((-99.78384 25.672, -99.…                      2                  1
##  3 Cienega … ((-100.1183 26.03849, -1…                      1                  2
##  4 El Carmen ((-100.3713 25.98224, -1…                      0                  3
##  5 Garcia    ((-100.504 25.90081, -10…                      3                  2
##  6 General … ((-100.4283 25.89513, -1…                      2                 21
##  7 General … ((-100.0655 25.9189, -10…                      0                  2
##  8 Guadalupe ((-100.1206 25.6974, -10…                      9                 25
##  9 Juarez    ((-99.9929 25.68308, -99…                      2                  7
## 10 Monterrey ((-100.3392 25.76242, -1…                     55                 89
## 11 Pesqueria ((-100.1047 25.83112, -1…                      0                  2
## 12 Salinas … ((-100.1885 26.32678, -1…                      0                  0
## 13 San Nico… ((-100.2067 25.73276, -1…                      6                 27
## 14 San Pedr… ((-100.3342 25.60689, -1…                     15                 15
## 15 Santa Ca… ((-100.4436 25.72061, -1…                      3                  5
## 16 Santiago  ((-100.1683 25.51653, -1…                      4                 13
## # ℹ abbreviated name: ¹​`Culturales y artisticos`
## # ℹ 2 more variables: Servicios <int>, `Vida Nocturna` <int>

Se grapan los datos por municipio y tipo de plan, luego se cuenta el número de establecimientos (nom_estab) en cada grupo, y al final se ordena los resultados por municipio. Podemos ver que el municipio que cuenta con un mayor número de establecimientos culturales y artísticos es Monterrey, siguiéndole San Pedro y Guadalupe, mientras que Juárez, Cadereyta, Pesquería, entre otros, no cuentan con ningún centro cultural o artístico. El municipio que cuenta con mayor vida nocturna es Monterrey, seguido de Guadalupe y San Pedro en comparación de los municipios localizados en la zona este como Juárez, Cadereyta y Pesquería, los cuales no cuentan con presencia de vida nocturna.

datos_ancho$mpio <- chartr("áéíóú", "aeiou", datos_ancho$mpio)

nlgeodata <- st_join(datos_ancho, sf)
plan <- tm_shape(nlgeodata) + 
  tm_polygons(col = "Familia y amigos", palette="PuBuGn", style="quantile", n=8, title="Cantidad de establecimientos") +
  tm_layout(main.title= 'Familia y amigos',  title.position = c('right', 'top'), legend.position= c("left", "bottom"), title.size = 1)

plan2 <- tm_shape(nlgeodata) + 
  tm_polygons(col = "Vida Nocturna", palette="OrRd", style="quantile", n=8, title="Cantidad de establecimientos") +
  tm_layout(main.title= 'Vida Nocturna',  title.position = c('right', 'top'), legend.position= c("left", "bottom"), title.size = 1)

plan3 <- tm_shape(nlgeodata) + 
  tm_polygons(col = "Servicios", palette="PuBuGn", style="quantile", n=8, title="Cantidad de establecimientos") +
  tm_layout(main.title= 'Servicios',  title.position = c('right', 'top'), legend.position= c("left", "bottom"), title.size = 1)


tmap_arrange(plan2,plan3,plan, ncol = 3) 
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.

En primera instancia, podemos observar que el municipio de Monterrey, que se encuentra en el centro del mapa, es el que tiene la mayor cantidad de establecimientos en general (Familia y amigos, Vida nocturna, Servicios y Culturales), debido a que es el centro de la ciudad tiene sentido que sea así,también municipios como San Pedro, Guadalupe y San Nicolás son los que cuentan con una mayor presencia de estos; sin embargo, si queremos ampliar el turismo a otros municipios que no cuentan con una alta presencia como Pesquería, Zuazua, Juarez, Cadereyta, Escobedo y el Carmen. En el ámbito cultural y artístico podemos ver que muy pocos municipios como Monterrey y San Pedro cuentan con presencia de actividades artístico-culturales. En el ámbito Vida Nocturna se puede identificar que hay un cluster en la zona centro del estado conformado por Monterrey, Guadalupe, San Pedro y San Nicolás, dejando las zonas aledañas con un menor número de actividades enfocadas a la vida nocturna. Podemos visualizar que en servicios la mayor cantidad de servicios se encuentra en la zona centro y este del estado donde se identifica una mayor presencia en los municipios de Monterrey, Guadalupe, San Pedro, San Nicolas, Garcia y Santa Catarina.

Matriz de distancia

  • Se busca discotecas cercanas a una ubicación específica y recopila información relevante sobre esos lugares utilizando la API de Google Places.
library(ggmap)
gmaps_key<-'AIzaSyBVI8a3gFigNbWMETmrP3Z2ZNDICBX4jtM'   # Aqui deberia estar la api de google maps
register_google(key = gmaps_key) 

library(googleway)
# Starting point - Macroplaza
latitude <- 25.66928
longitude <- -100.31094
r <- 50000

search_str<-google_places(search_string = 'antro', location=c(latitude,longitude), radius=r, key=gmaps_key)

search_str_add<-google_places(search_string = 'antro', location=c(latitude,longitude), radius=r, key=gmaps_key, page_token = search_str$next_page_token)

business_name<-c(search_str$results$name, search_str_add$results$name)
business_rating<-c(search_str$results$rating, search_str_add$results$rating)
user_ratings_total<-c(search_str$results$user_ratings_total, search_str_add$results$user_ratings_total)
place_id<-c(search_str$results$place_id, search_str_add$results$place_id)
lat<-c(search_str$results$geometry$location$lat, search_str_add$results$geometry$location$lat)
lon<-c(search_str$results$geometry$location$lng, search_str_add$results$geometry$location$lng)
databar<-data.frame(business_name,business_rating,user_ratings_total,place_id,lat,lon)

data_top_ratings <- databar %>% slice_max(business_rating, n = 10)
data_low_ratings <- databar %>% slice_min(business_rating, n = 10)
databar
##                     business_name business_rating user_ratings_total
## 1                          Strana             4.0                377
## 2                       Will Club             4.4                 19
## 3                  The Normal Mty             2.5                140
## 4                   Maria Tequila             4.4                789
## 5                            JACK             4.0                376
## 6                   "E" Evolution             5.0                  2
## 7                    Kika's Bar's             4.3                  3
## 8                   La Kaprichosa             4.1                422
## 9  La Terrazita Vip Super Colchis             1.0                  1
## 10                           Club             4.8                 19
## 11              Ambia Social Club             4.2                610
## 12                          Akbal             4.3                 53
## 13                  La Kaprishosa             4.2                431
## 14                     La Terraza             4.2                 30
## 15              EL SANTO VIVO BAR             4.1                254
## 16                       Luke bar             3.2                  9
## 17                       Rosarito             4.3                767
## 18               RAKATA San Pedro             3.3                 12
## 19                 Toto San Pedro             2.2                 68
## 20                       YES Club             4.3                273
##                       place_id      lat       lon
## 1  ChIJdRxMSO-9YoYRNfezH-uRSZQ 25.65439 -100.3624
## 2  ChIJJ-TNJS6XYoYR2J7KMb4s21M 25.67371 -100.3564
## 3  ChIJbV8HRh6_YoYRuA8vTb2k0UA 25.66817 -100.3317
## 4  ChIJlxTE3c2_YoYRKxMRe2z9wf0 25.66026 -100.2835
## 5  ChIJyY-xSQKWYoYR8HmmMVlm2Ts 25.67451 -100.3573
## 6  ChIJGS1nJIeVYoYRxP0d4sWRmj0 25.67766 -100.3115
## 7  ChIJndRI0SrrYoYRmgX-M7xpbNI 25.74212 -100.1897
## 8  ChIJ7QvnXLvqYoYR_xFbEbog5z8 25.68027 -100.2431
## 9  ChIJuVuYzu6VYoYRMx3rwuUGwP0 25.69075 -100.3344
## 10 ChIJHUFUXgbBYoYRqRDjaY6P-B4 25.66642 -100.2336
## 11 ChIJJQyX1NK_YoYR50S_38xCf0Y 25.66656 -100.3048
## 12 ChIJ0X5LoS2-YoYRCY0NNZFkydk 25.66570 -100.3081
## 13 ChIJXYKEtwaWYoYRrr0J5aR2UnU 25.67863 -100.3542
## 14 ChIJa_kk6N_CYoYRyNVOEi_0u-U 25.64467 -100.1023
## 15 ChIJT2tJRZXqYoYRZIH9vdOgFGI 25.70333 -100.2366
## 16 ChIJCS4gEg69YoYRPCuDe8xYTX4 25.65292 -100.3598
## 17 ChIJDW8wGp2_YoYRSYWiGEjdmZo 25.63348 -100.2730
## 18 ChIJi0AeU-q9YoYRdGj3UBTT9YY 25.65984 -100.3674
## 19 ChIJ-8TmdIm9YoYR875mF8HjYjI 25.64996 -100.3579
## 20 ChIJBQSIEPrrYoYRIR5gQme2Wzk 25.70341 -100.2370
top_ratings_plot <- ggplot(data_top_ratings, aes(x=reorder(business_name,business_rating), y=business_rating)) +
  geom_bar(stat="identity", fill="lightblue") + 
  labs(title="Bar - Top 10 Bar Ratings", subtitle = "ZMM") + 
  coord_flip()
top_ratings_plot

register_google(key = gmaps_key)
ggmap(get_googlemap(center = c(lon = longitude, lat = latitude), zoom = 12)) +
        stat_density2d(data = data_top_ratings, aes(lon, lat, fill = ..level..), 
                       geom = "polygon", alpha = 0.42) +
        scale_fill_gradient(low = "green", high = "red", guide = "none") +
  labs(x = '', y = '', title = "ZMM - Antros")
## ℹ <https://maps.googleapis.com/maps/api/staticmap?center=25.66928,-100.31094&zoom=12&size=640x640&scale=2&maptype=terrain&key=xxx>

Adding many points manually

ART STUDIOS: lat: 25.66643 lon: -100.3081

Toto San Pedro: lat: 25.64996 lon: -100.3579

Major Tom San Pedro: lat: 25.65965 lon: -100.3657

latitudes = c(25.66643, 25.64996, 25.65965) 
longitudes = c(-100.3081, -100.3579,-100.3657) 
markers = c("ART STUDIOS", "Toto San Pedro", "Major Tom San Pedro") 
df = data.frame(latitudes, longitudes, markers)      
# *Matrix Distance and Travel Time*
set.api.key("AIzaSyBVI8a3gFigNbWMETmrP3Z2ZNDICBX4jtM") 
#### Setting the origin. Previously, we set several destinations across ZMM.
location=paste(df$latitudes,df$longitudes,sep =",")
Starting = "25.66944, -100.30992" ### Macroplaza, Monterrey, Nuevo Leon
#### Building a dataframe to include both origin and destination info.
Timedist=gmapsdistance(Starting, location, mode="driving", shape = "long")
Timedist2=data.frame(Timedist) ##create dataframe
names(Timedist2) <- c("Starting","Destination", "Time", "Location_Name","col2","Distance","col3","col4","Status")
Timedist2$Location_Name <-df$markers ## Add location name
Timedist2$col2 <- NULL ## delete repeated cols        
Timedist2$col3<- NULL  
Timedist2$col4 <- NULL
Timedist2$Time <- Timedist2$Time/3600 ##  hour
Timedist$Distance <- Timedist2$Distance/1000 ## KM
#### based on origin and destination we can display the matrix distance and travel time.
knitr::kable(head(Timedist2),caption = "Matrix Distance and Travel Time")
Matrix Distance and Travel Time
Starting Destination Time Location_Name Distance Status
25.66944, -100.30992 25.66643,-100.3081 0.3233333 ART STUDIOS 287 OK
25.66944, -100.30992 25.64996,-100.3579 1.9447222 Toto San Pedro 664 OK
25.66944, -100.30992 25.65965,-100.3657 2.1552778 Major Tom San Pedro 736 OK
  • Destino con menor tiempo de driving time: El destino con el menor tiempo de conducción es ART STUDIOS, con un tiempo estimado de driving time de aproximadamente 0.32 minutos.

  • Destino con menor distancia: El destino con la menor distancia al punto desde el punto de partida siendo la MacroPlaza también es ART STUDIOS, con una distancia de aproximadamente 287 metros. Lo cual hace sentido si lo comparamos con su driving time.

  • Destinos más alejados: El destino más alejado del punto de partida (MacroPlaza) es el Major Tom San Pedro, ubicado en centrito valle, con un tiempo estimado de viaje en carro de aproximadamente 2.15 minutos y una distancia de aproximadamente 736 metros.

  • Distribución de tiempos de conducción: La distribución de los tiempos de conducción varía entre los destinos. Mientras que algunos destinos tienen tiempos de conducción cortos, como ART STUDIOS, otros tienen tiempos más largos, como Major Tom San Pedro. Esto sugiere que la ubicación del destino puede influir mucho. Más aun si tomamos en cuenta el rango de personas entre 18-24 años que se encuentran por la zona y son más probables de querer acudir a este tipo de lugares para algun plan social de vida nocturna.

  • Estado de los cálculos: Todos los cálculos de distancia y tiempo tienen un estado “OK”, lo que indica que se realizaron correctamente sin errores aparentes.

  • Se busca parques cercanas a una ubicación específica y recopila información relevante sobre esos lugares utilizando la API de Google Places.

library(ggmap)
gmaps_key<-'AIzaSyBVI8a3gFigNbWMETmrP3Z2ZNDICBX4jtM'   # Aqui deberia estar la api de google maps
register_google(key = gmaps_key) 

library(googleway)
# Starting point - Macroplaza
latitude <- 25.66928
longitude <- -100.31094
r <- 50000

search_str<-google_places(search_string = 'parque', location=c(latitude,longitude), radius=r, key=gmaps_key)

search_str_add<-google_places(search_string = 'parque', location=c(latitude,longitude), radius=r, key=gmaps_key, page_token = search_str$next_page_token)

business_name<-c(search_str$results$name, search_str_add$results$name)
business_rating<-c(search_str$results$rating, search_str_add$results$rating)
user_ratings_total<-c(search_str$results$user_ratings_total, search_str_add$results$user_ratings_total)
place_id<-c(search_str$results$place_id, search_str_add$results$place_id)
lat<-c(search_str$results$geometry$location$lat, search_str_add$results$geometry$location$lat)
lon<-c(search_str$results$geometry$location$lng, search_str_add$results$geometry$location$lng)
databar<-data.frame(business_name,business_rating,user_ratings_total,place_id,lat,lon)

data_top_ratings <- databar %>% slice_max(business_rating, n = 10)
data_low_ratings <- databar %>% slice_min(business_rating, n = 10)
databar
##                               business_name business_rating user_ratings_total
## 1                        Rufino Tamayo Park             4.7               6102
## 2                           Las Brisas Park             4.6                569
## 3  Parque Santa Cecilia, Apodaca Nuevo Leon             4.6               1708
## 4                       Parque La Primavera             4.5                558
## 5                          Parque El Sabino             4.7                161
## 6                 Parque Jardines del Valle             4.5                181
## 7                          "La Aurora" Park             4.3                201
## 8                              Hundido Park             4.4                208
## 9                Parque Hundido Amado Nervo             4.7                699
## 10                          Mirasierra Park             4.7                339
## 11                             Cumbres Park             4.5                225
## 12                      Parque Torremolinos             4.7                123
## 13                      García Barella Park             4.6                 37
## 14               Parque Lomas del Campestre             4.6                 74
## 15                     Parque Vista Hermosa             4.6                799
## 16              Paseo de Cumbres Norte Park             4.6                131
## 17               Lineal Escobedo, N.L. Park             4.6               3844
## 18                      Parque Miguel Nieto             3.9                158
## 19                         Parque Las Lomas             4.5                116
## 20                     Roma Ecological Park             4.6                646
##                       place_id      lat       lon
## 1  ChIJD-kWO2q-YoYR6P9mnvaVW5o 25.64490 -100.3289
## 2  ChIJaytLhQy_YoYRnkl8zp1HiWM 25.62383 -100.2846
## 3  ChIJoYuj8p_sYoYRPvKfIT823vI 25.77419 -100.2358
## 4  ChIJrYecS5S_YoYRPy8t0Bm7g6E 25.65199 -100.2809
## 5  ChIJdaSPCPq9YoYRGkBX6sLCE6g 25.66514 -100.3612
## 6  ChIJd0Lnb429YoYRAYJFxsDLbKY 25.66028 -100.3738
## 7  ChIJaZnefp_BYoYR1PzyFOuzVmM 25.63995 -100.1925
## 8  ChIJrQ6ies2UYoYRJYNh_YxFgc0 25.73792 -100.2622
## 9  ChIJ1_IENPeUYoYRmeqh1Oy5M7k 25.73639 -100.2996
## 10 ChIJAQAArJ69YoYRx2_cSWLkN60 25.65336 -100.3891
## 11 ChIJX8qKs2eWYoYR9AT2BawygKA 25.70803 -100.3697
## 12 ChIJN0Afhpu_YoYRNk8Qjldu6Mc 25.63716 -100.2747
## 13 ChIJnSCRXjS9YoYRVi4RtAXTcos 25.66442 -100.3722
## 14 ChIJ83fc7Ga-YoYR-tKVcRsR1jw 25.63484 -100.3315
## 15 ChIJTyKiJnOWYoYRiJcfIEw6mAg 25.69635 -100.3579
## 16 ChIJSXjjFjCXYoYR6MFi4VJaCmk 25.75155 -100.4068
## 17 ChIJGZ-g-JmTYoYRFtmN7W0UaQc 25.78610 -100.3157
## 18 ChIJQ8k0Df6VYoYR4hjxXNoBnmY 25.69175 -100.3272
## 19 ChIJBfdjrxiRYoYR1dETE7bboGY 25.76678 -100.4284
## 20 ChIJb2ZWJsi_YoYR_qU1PCjkdKw 25.65317 -100.2956
top_ratings_plot <- ggplot(data_top_ratings, aes(x=reorder(business_name,business_rating), y=business_rating)) +
  geom_bar(stat="identity", fill="lightblue") + 
  labs(title="Bar - Top 10 Bar Ratings", subtitle = "ZMM") + 
  coord_flip()
top_ratings_plot

register_google(key = gmaps_key)
ggmap(get_googlemap(center = c(lon = longitude, lat = latitude), zoom = 12)) +
        stat_density2d(data = data_top_ratings, aes(lon, lat, fill = ..level..), 
                       geom = "polygon", alpha = 0.42) +
        scale_fill_gradient(low = "green", high = "red", guide = "none") +
  labs(x = '', y = '', title = "ZMM - Parques")
## ℹ <https://maps.googleapis.com/maps/api/staticmap?center=25.66928,-100.31094&zoom=12&size=640x640&scale=2&maptype=terrain&key=xxx>

Adding many points manually

Rufino Tamayo Park: lat: 25.64490 lon: -100.3289

Parque Hundido Amado Nervo: lat: 25.73639 lon: -100.2996

Cumbres Park: lat: 25.70803 lon: -100.3697

Parque El Sabinoo: lat: 25.66514 lon: -100.3612

latitudes = c(25.64490, 25.73639, 25.70803, 25.66514) 
longitudes = c(-100.3289, -100.2996,-100.3697,-100.3612) 
markers = c("Rufino Tamayo Park", "Parque Hundido Amado Nervo", "Cumbres Park", "Parque El Sabinoo") 
df = data.frame(latitudes, longitudes, markers)      
# *Matrix Distance and Travel Time*
set.api.key("AIzaSyBVI8a3gFigNbWMETmrP3Z2ZNDICBX4jtM") 
#### Setting the origin. Previously, we set several destinations across ZMM.
location=paste(df$latitudes,df$longitudes,sep =",")
Starting = "25.66944, -100.30992" ### Macroplaza, Monterrey, Nuevo Leon
#### Building a dataframe to include both origin and destination info.
Timedist=gmapsdistance(Starting, location, mode="driving", shape = "long")
Timedist2=data.frame(Timedist) ##create dataframe
names(Timedist2) <- c("Starting","Destination", "Time", "Location_Name","col2","Distance","col3","col4","Status")
Timedist2$Location_Name <-df$markers ## Add location name
Timedist2$col2 <- NULL ## delete repeated cols        
Timedist2$col3<- NULL  
Timedist2$col4 <- NULL
Timedist2$Time <- Timedist2$Time/3600 ##  hour
Timedist$Distance <- Timedist2$Distance/1000 ## KM
#### based on origin and destination we can display the matrix distance and travel time.
knitr::kable(head(Timedist2),caption = "Matrix Distance and Travel Time")
Matrix Distance and Travel Time
Starting Destination Time Location_Name Distance Status
25.66944, -100.30992 25.6449,-100.3289 1.892222 Rufino Tamayo Park 616 OK
25.66944, -100.30992 25.73639,-100.2996 2.596389 Parque Hundido Amado Nervo 994 OK
25.66944, -100.30992 25.70803,-100.3697 2.923333 Cumbres Park 821 OK
25.66944, -100.30992 25.66514,-100.3612 1.986389 Parque El Sabinoo 591 OK
  • Destino con menor tiempo de driving time: El destino con el menor tiempo de conducción es Parque El Sabino, con un tiempo estimado de driving time de aproximadamente 1.98 minutos.

  • Destino con menor distancia: El destino con la menor distancia al punto desde el punto de partida siendo la MacroPlaza es Parque El Sabino, con una distancia de aproximadamente 591 metros. Lo cual hace sentido si lo comparamos con su driving time.

  • Destinos más alejados: El destino más alejado del punto de partida (MacroPlaza) es el Parque Hundido Amado Nervo, con un tiempo estimado de viaje en carro de aproximadamente 2.60 minutos y una distancia de aproximadamente 994 metros.

  • Distribución de tiempos de conducción: La distribución de los tiempos de conducción varía entre los destinos. Mientras que algunos destinos tienen tiempos de conducción cortos, como Parque El Sabino, otros tienen tiempos más largos, como Parque Hundido Amado Nervo. Esto sugiere que la ubicación del destino puede influir mucho. Más aun si tomamos en cuenta el rango de personas entre 18-24 años que se encuentran por la zona y son más probables de querer acudir a este tipo de lugares para recurrir a alguna actividad recreativa o fisica.

  • Estado de los cálculos: Todos los cálculos de distancia y tiempo tienen un estado “OK”, lo que indica que se realizaron correctamente sin errores aparentes.

Modelo para predicción

# preparing georeferenced dataset for prediction
nlls <- geo_join(nlgeodata,datab,'IDUNICO','IDUNICO',how='inner')
nlls <- nlls[!duplicated(nlls$mpio.x), ]
nlls$POBTOT <- as.numeric(nlls$POBTOT)
nlls$POBFEM <- as.numeric(nlls$POBFEM)
nlls$POBMAS <- as.numeric(nlls$POBMAS)
nlls$P_3A5 <- as.numeric(nlls$P_3A5)
nlls$P_6A11 <- as.numeric(nlls$P_6A11)
nlls$P_8A14 <- as.numeric(nlls$P_8A14)
nlls$P_12A14 <- as.numeric(nlls$P_12A14)
nlls$P_15A17 <- as.numeric(nlls$P_15A17)
nlls$P_18A24 <- as.numeric(nlls$P_18A24)
nlls$P_60YMAS <- as.numeric(nlls$P_60YMAS)
nlls$'Culturales y artisticos' <- as.numeric(nlls$'Culturales y artisticos')
nlls$'Familia y amigos' <- as.numeric(nlls$'Familia y amigos')


nlls <- nlls %>%
  rename(Familia_y_amigos = 'Familia y amigos')

nlls <- nlls %>%
  rename(Culturales_y_artisticos = 'Culturales y artisticos')


nlls <- nlls %>%
  rename(Vida_Nocturna = 'Vida Nocturna')

Modelo GWR

library(spgwr)

#nllsgwr <- as_Spatial(nlls)

#bw2 <- bw.gwr(Servicios ~ POBTOT + Familia_y_amigos  + Culturales_y_artisticos + Poblacion_Economicamente_Activa + Vida_Nocturna, approach = "AIC", adaptive = T, data=nllsgwr) # bandwidth selection

# GWR - summary of estimated results 
#gwr_model2 <- gwr.basic( Servicios ~ POBTOT + Familia_y_amigos  + Culturales_y_artisticos  + Poblacion_Economicamente_Activa + Vida_Nocturna, adaptive = T, data = nllsgwr, bw = bw2)

# visualize local estimated regression results 
#gwr_sf = st_as_sf(gwr_model2$SDF)

#gwr_model2

#bw3 <- bw.gwr(Servicios ~  Familia_y_amigos  + Culturales_y_artisticos + Vida_Nocturna, approach = "AIC", adaptive = T, data=nllsgwr) # bandwidth selection

#GWR - summary of estimated results 
#gwr_model3 <- gwr.basic( Servicios ~ Familia_y_amigos  + Culturales_y_artisticos  + Vida_Nocturna, adaptive = T, data = nllsgwr, bw = bw3)

# visualize local estimated regression results 
#gwr_sf = st_as_sf(gwr_model3$SDF)

#gwr_model3

Se realizaron varios modelos para poder identificar las variables más útiles para la especificación,y llegamos a la conclusión que el factor relacionado con servicios pudiera estar relacionado con variables como la actividad económica de la población, los distintos establecimientos que pudieran existir, la densidad de población o hasta distintos rangos de edad. Dentro del modelo se puede destacar del modelo la significancia que muestran algunas variables para la dependiente;

  • El coeficiente para la variable Familia_y_amigos es 40.856, lo que significa que, manteniendo todas las demás variables constantes, un aumento de una unidad en Familia_y_amigos se asocia, en promedio, con un aumento de 40.856 unidades en Servicios. Este coeficiente es significativo (p = 0.00187), lo que indica una relación estadísticamente significativa entre Familia_y_amigos y Servicios.

  • El coeficiente para la variable Culturales_y_artisticos es -35.606. Un coeficiente negativo indica que, manteniendo todas las demás variables constantes, un aumento en Culturales_y_artisticos está asociado con una disminución de Servicios. Sin embargo, este coeficiente no es significativo (p = 0.09766), lo que sugiere que la relación entre Culturales_y_artisticos y Servicios no es estadísticamente significativa en este modelo.

  • El coeficiente para la variable Vida_Nocturna es 8.355. Un aumento en Vida_Nocturna se asocia, en promedio, con un aumento de 8.355 unidades en Servicios, manteniendo todas las demás variables constantes. Este coeficiente es significativo (p = 0.01753), lo que indica una relación estadísticamente significativa entre Vida_Nocturna y Servicios.

El modelo en su conjunto es estadísticamente significativo (F-statistic = 144.3, p-value = 1.116e-09), lo que indica que al menos una de las variables independientes está relacionada de manera significativa con la variable dependiente.

Identificamos que es oportuno contar con una base de datos de una misma fuente, ya que en este caso se integraron dos.

Hallazgos - Analisis Oferta vs Demanda

p18 <- tm_shape(datos_filtrados1) + 
  tm_polygons("P_8A14", palette = "Purples", style="quantile", title="Demanda de Población de 18 a 24") +
  tm_text(text = "mpio", size = "P_18A24")

p2 <- tm_shape(nlgeodata) + 
  tm_polygons(col = "Vida Nocturna", palette="OrRd", style="quantile", n=8, title="Oferta de Cantidad de establecimientos") +
  tm_layout(main.title= 'Demanda Vida Nocturna',  title.position = c('right', 'top'), legend.position= c("left", "bottom"), title.size = 1)

tmap_arrange(p18a24,p2, ncol = 2)
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.
Demanda Oferta
Municipios con mayor numero de jovenes (18 a 24)
Cantidad de establecimientos para el segmento
  1. Apodaca
  1. Monterrey
  1. Monterrey
  1. Guadalupe
  1. Juarez

En base a la población total de jóvenes de 18 a 24 años en Nuevo León, que es de 135,096 habitantes, y el total de establecimientos de vida nocturna considerados para este rango de edad, que es de 425, podemos calcular la relación entre la población joven y la cantidad de establecimientos en Monterrey, que es el único municipio que cumple con la demanda según lo mencionado.

  1. Población de jóvenes de 18 a 24 años en Nuevo León: 135,096 habitantes.
  2. Número total de establecimientos de vida nocturna considerados para este rango de edad: 425 establecimientos.

Para calcular la relación entre la población joven y la cantidad de establecimientos en Monterrey, dividiremos la población total de jóvenes entre el número de establecimientos:

\[ \text{Relación} = \frac{\text{Población de jóvenes}}{\text{Número de establecimientos}} \]

Sustituyendo los valores conocidos:

\[ \text{Relación} = \frac{135,096}{425} \approx 317.4 \]

Por lo tanto, en Monterrey hay aproximadamente 317.4 personas entre 18 y 24 años por cada establecimiento de vida nocturna.

Este cálculo proporciona una idea de la densidad poblacional joven en relación con la disponibilidad de establecimientos de vida nocturna en Monterrey. Es importante considerar que este número no refleja necesariamente la satisfacción de la demanda, ya que factores como la calidad, diversidad y accesibilidad de los establecimientos también influyen en la experiencia de entretenimiento nocturno para la población joven. Además, sería importante considerar la distribución geográfica de estos establecimientos dentro de Monterrey para asegurar que estén disponibles y accesibles para toda la población joven en la ciudad. Sin embargo, por medio de investigacion cualitativa y observando las caracteristicas de capacidad de dichos lugares, identificamos esta cifra como oportuna para el cubrimiento y satisfaccion del nicho.

p3 <- tm_shape(datos_filtrados1) + 
  tm_polygons("P_3A11", palette = "Purples", style="quantile", title="Demanda de Población de 3 a 11 años") +
  tm_text(text = "mpio", size = "P_3A11")

pl <- tm_shape(nlgeodata) + 
  tm_polygons(col = "Familia y amigos", palette="PuBuGn", style="quantile", n=8, title="Oferta de Cantidad de establecimientos") +
  tm_layout(main.title= 'Familia y amigos',  title.position = c('right', 'top'), legend.position= c("left", "bottom"), title.size = 1)

tmap_arrange(p3,pl, ncol = 2)
## Text size will be constant in view mode. Set tm_view(text.size.variable = TRUE) to enable variable text sizes.
## legend.postion is used for plot mode. Use view.legend.position in tm_view to set the legend position in view mode.

En el mismo caso para situacion de familias y la oferta de establecimientos que se ofrece analisamos de la misma manera la densidad de poblacion y establecimientos, vemos como la población de 3 a 11 años es mayor en Juares, Monterrey y Apodaca, y la presencia de establecimientos familiraias es más fuerte en San nicolas de los garza y Monterrey.

Cuantificando las cifras y proporciones de los datos tomams Apodaca como ejemplo, identificamps que tiene 100,597 habitantes de 3 a 11 años, mientras que cuenta con tan solo 22 establecimientos para este sector poblacional, que principalmente son parques, restaurantes y otras atracciones de interés familiar.

Relación entre la población joven de 3 a 11 años y la cantidad de establecimientos familiares en Apodaca utilizando los datos proporcionados:

  1. Población de niños de 3 a 11 años en Apodaca: 100,597 habitantes.
  2. Número total de establecimientos familiares considerados para este rango de edad en Apodaca: 22 establecimientos.

Para calcular la relación entre la población joven y la cantidad de establecimientos familiares en Apodaca, dividiremos la población total de niños entre el número de establecimientos:

\[ \text{Relación} = \frac{\text{Población de niños}}{\text{Número de establecimientos}} \]

Sustituyendo los valores conocidos:

\[ \text{Relación} = \frac{100,597}{22} \approx 4572.6 \]

Por lo tanto, en Apodaca hay aproximadamente 4572.6 niños entre 3 y 11 años por cada establecimiento familiar.

Este cálculo proporciona una medida de la densidad de población joven en relación con la disponibilidad de establecimientos familiares en Apodaca. De igual manera que en el caso de establecimientos para vida nocturna, es importante considerar que esta métrica es solo un indicador básico y que otros factores, como la calidad de los establecimientos y su capacidad para atender a las familias, también son importantes para evaluar la satisfacción de la demanda.

Conclusión

El análisis de la relación entre población y número de establecimiento en las diferentes ciudades de Nuevo León revela una situación alarmante en cuanto a la cobertura de la demanda por parte de los negocios disponibles.

Tomemos el caso de Apodaca, por ejemplo, donde el número de niños de 3 a 11 años es de 100.597 y solo existen 22 establecimientos familiares, la relación resultante es de alrededor de 4572.6 niños por cada institución. Esto indica un claro desequilibrio entre la oferta y la demanda de servicios en este sector de la población.

La falta de cobertura de locales comerciales en comparación con la población indica una brecha en la prestación de servicios y entretenimiento que satisfagan las necesidades específicas de los diversos grupos de edad. Esta brecha debe abordarse para garantizar el bienestar y la calidad de vida de la comunidad, especialmente de los niños y adolescentes, así como para fomentar la creación de un entorno urbano más equitativo y dinámico.

En resumen, se necesita una mayor atención por parte de los gobiernos locales y de los responsables de la planificación urbana para identificar estas deficiencias y tomar medidas para mejorar la provisión de instalaciones y servicios que satisfagan las necesidades de los residentes en todas las etapas de la vida. Esto podría incluir iniciativas para fomentar el desarrollo de locales comerciales, parques y áreas recreativas más amigables para las familias, así como diversificar las opciones de entretenimiento para diferentes grupos de edad.