#############################################################
# INTELIGENCIA DE MERCADOS
############################################################
# UNIVERSIDAD NACIONAL DEL ALTIPLANO - PUNO
# JOSEFH JORDY QUISPE MORALES
#
# Esta investigación, además de VERIFICAR RESULTADOS PREVIAMENTE YA PUBLICADOS, tiene un propósito educativo y motivacional. Su objetivo es inspirar a estudiantes y profesionales a seguir sus estudios e investigaciones, al proporcionarles una práctica valiosa en la adquisición de nuevos conocimientos.
# https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0285138
# Mauricio Carvache-Franco,Otto Regalado-Pezúa,Gabriela Sirkis,Orly Carvache-Franco,Wilmer Carvache-Franco
#
# División de la Demanda del Turismo Urbano en Ciudades Latinoamericanas
# El estudio se centró en analizar la demanda del turismo urbano en cuatro importantes ciudades de América Latina: Ciudad de México, Lima, Buenos Aires y Bogotá. Para llevar a cabo este análisis, se utilizó el método K-medias, una técnica de agrupamiento que permite identificar patrones en los datos y segmentar a los turistas en grupos con características similares.
# Resultados del Estudio
# La investigación identificó tres grupos distintos de turistas:
# Turistas que disfrutan de hoteles y restaurantes: Este grupo se caracteriza por su preferencia por servicios de alta calidad en alojamiento y gastronomía. Son turistas que valoran el confort y la experiencia culinaria durante su estancia.
# Turistas que buscan muchas atracciones y recomiendan los destinos: Los miembros de este grupo están interesados en explorar múltiples atracciones turísticas y suelen recomendar los destinos que visitan. Son viajeros activos y entusiastas que disfrutan descubriendo lo que cada ciudad tiene para ofrecer.
# Turistas que no se interesan mucho por las atracciones: Este grupo está compuesto por turistas que muestran un menor interés en visitar atracciones turísticas específicas. Su motivación para viajar puede estar relacionada con otros factores, como negocios o visitas a familiares y amigos, en lugar de las atracciones de la ciudad.
# Contribuciones del Estudio
# Entendimiento del Turismo Urbano en América Latina: Este trabajo contribuye significativamente al entendimiento del turismo urbano en América Latina, una región que ha sido poco estudiada en este aspecto. Proporciona información valiosa sobre las preferencias y comportamientos de los turistas que visitan estas ciudades.
# Descubrimiento de un Nuevo Grupo de Turistas: La identificación de un tercer grupo de turistas, aquellos que no muestran un gran interés por las atracciones, es un hallazgo novedoso que puede tener implicaciones importantes para la planificación y el desarrollo turístico.
# Mejora de Servicios y Competitividad de los Destinos: Los resultados del estudio son útiles para las empresas turísticas y las autoridades locales, ya que les proporcionan información detallada sobre los diferentes tipos de turistas que visitan estas ciudades. Con esta información, pueden adaptar y mejorar sus servicios, haciéndolos más atractivos para cada grupo específico y, en última instancia, aumentar la competitividad de los destinos turísticos.
# Implicaciones Prácticas
# Las empresas turísticas y los responsables de la gestión de destinos pueden utilizar estos hallazgos para diseñar estrategias más efectivas que satisfagan las necesidades de los distintos grupos de turistas. Por ejemplo:
# Personalización de Ofertas: Ofrecer paquetes turísticos que se alineen con las preferencias de cada grupo, como experiencias gastronómicas de alta calidad para los primeros, y tours organizados que cubran múltiples atracciones para los segundos.
# Marketing Específico: Desarrollar campañas de marketing dirigidas específicamente a cada segmento, destacando los aspectos de la ciudad que más les interesen.
# Mejora de Infraestructuras: Invertir en infraestructuras y servicios que mejoren la experiencia turística general, considerando las demandas y expectativas de los diferentes grupos identificados.
#
#
#DICHCO LO ANTERIOR COMENZAMOS..
#
# Instalación de paquetes necesarios
#install.packages("tidyverse")
#install.packages("lubridate")
#install.packages("cluster")
#install.packages("factoextra")
#install.packages("readxl")
#install.packages("ggplot2")
# Carga de paquetes necesarios
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'dplyr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── 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(lubridate)
library(cluster)
## Warning: package 'cluster' was built under R version 4.3.3
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.3.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(readxl)
library(ggplot2)
library(tm)
## Warning: package 'tm' was built under R version 4.3.3
## Loading required package: NLP
##
## Attaching package: 'NLP'
##
## The following object is masked from 'package:ggplot2':
##
## annotate
library(dplyr)
library(ggplot2)
# Cargar librerías necesarias
library(tm)
library(wordcloud)
## Warning: package 'wordcloud' was built under R version 4.3.3
## Loading required package: RColorBrewer
library(cluster)
# Definir la ruta de los archivos
ruta_base <- "D:/@Josefh.QM/UNAP_24_1/Investigacion_mercado"
# Cargar los datos desde el archivo XLSX
data_xlsx <- read_xlsx(file.path(ruta_base, "journal_data_2.xlsx"))
# Usar el data frame cargado para el análisis
datos <- data_xlsx
# Filtrar los registros válidos (599 registros)
datos_limpios_o <- datos %>%
filter(!is.na(FECHA)) %>%
slice(1:599) # Asegurarse de seleccionar los primeros 599 registros
head(datos)
## # A tibble: 6 × 33
## FECHA VIAJO GENERO EDAD PAIS_RESIDENCIA CIUDAD_RESIDENCIA VIAJO_NUMERO_CIUDAD
## <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 10/1… Si Mascu… 31 a… Argentina Buenos Aires 2
## 2 10/1… Si Mascu… 31 a… Argentina Buenos Aires 3
## 3 10/1… Si Mascu… 31 a… México Guadalajara, Jal… 1
## 4 10/1… Si Femen… 46 a… Perú Arequipa 2
## 5 10/1… Si Femen… 18 a… México Guadalajara 1
## 6 10/1… Si Femen… 18 a… Perú Lima 1
## # ℹ 26 more variables: PRIMERA_VEZ <chr>, PROPOSITO_VIAJE1 <chr>,
## # PROPOSITO_VIAJE2 <lgl>, PROPOSITO_VIAJE3 <lgl>,
## # INFORMACION_SOBRE_VIAJE <chr>, AMBIENTE_SOCIAL_URBANO <dbl>,
## # ARQUITECTURA_URBANA <dbl>, LUGARES_AMIGABLE <dbl>, MONUMENTOS_SITIOS <dbl>,
## # ESPACIOS_PUBLICOS <dbl>, ALOJAMIENTO_RESTAURANTES <dbl>,
## # SERVICIOS_PUBLICOS <dbl>, INFORMACION_TURISTICA <dbl>,
## # CONTACTO_RESIDENTES <dbl>, TIENDAS_SERVICIOS <dbl>, …
# Agrupar las edades en categorías
datos_limpios <- datos_limpios_o %>%
mutate(EDAD_CATEGORIA = case_when(
EDAD >= 18 & EDAD <= 45 ~ "18-45 years",
EDAD >= 46 & EDAD <= 60 ~ "46-60 years",
EDAD > 60 ~ "Greater than 60"
))
# Definir los países en regiones
usa_canada <- c("USA", "Canada")
otros_americanos <- c("Argentina", "Bolivia", "Brasil", "Chile", "Colombia", "Costa Rica", "Ecuador", "El Salvador", "Honduras", "México", "Perú", "Puerto Rico", "República", "Uruguay", "Venezuela")
europa <- c("Alemania", "Croacia", "España", "Francia")
asia <- c("Israel")
# Agrupar los países en regiones
datos_limpios <- datos_limpios %>%
mutate(ORIGEN = case_when(
PAIS_RESIDENCIA %in% usa_canada ~ "USA and Canada",
PAIS_RESIDENCIA %in% otros_americanos ~ "Other American countries",
PAIS_RESIDENCIA %in% europa ~ "Europe",
PAIS_RESIDENCIA %in% asia ~ "Asia"
))
# Generar tablas de frecuencias
tabla_edades <- datos_limpios %>%
count(EDAD_CATEGORIA)
tabla_origen <- datos_limpios %>%
count(ORIGEN)
# Graficar los resultados
# Gráfico de distribución de edades
ggplot(tabla_edades, aes(x = EDAD_CATEGORIA, y = n, fill = EDAD_CATEGORIA)) +
geom_bar(stat = "identity") +
labs(title = "Distribution of Age Categories", x = "Age Category", y = "Count") +
theme_minimal()

# Gráfico de distribución por origen
ggplot(tabla_origen, aes(x = ORIGEN, y = n, fill = ORIGEN)) +
geom_bar(stat = "identity") +
labs(title = "Distribution by Origin", x = "Origin", y = "Count") +
theme_minimal()

# Mostrar las tablas generadas
tabla_edades
## # A tibble: 3 × 2
## EDAD_CATEGORIA n
## <chr> <int>
## 1 18-45 years 287
## 2 46-60 years 274
## 3 Greater than 60 38
tabla_origen
## # A tibble: 4 × 2
## ORIGEN n
## <chr> <int>
## 1 Asia 2
## 2 Europe 16
## 3 Other American countries 567
## 4 USA and Canada 14
###########################################################################
# PROCESO de Replicacion de resultados para la tabla 2
###########################################################################
# Verificar los nombres de las columnas
colnames(datos_limpios)
## [1] "FECHA" "VIAJO"
## [3] "GENERO" "EDAD"
## [5] "PAIS_RESIDENCIA" "CIUDAD_RESIDENCIA"
## [7] "VIAJO_NUMERO_CIUDAD" "PRIMERA_VEZ"
## [9] "PROPOSITO_VIAJE1" "PROPOSITO_VIAJE2"
## [11] "PROPOSITO_VIAJE3" "INFORMACION_SOBRE_VIAJE"
## [13] "AMBIENTE_SOCIAL_URBANO" "ARQUITECTURA_URBANA"
## [15] "LUGARES_AMIGABLE" "MONUMENTOS_SITIOS"
## [17] "ESPACIOS_PUBLICOS" "ALOJAMIENTO_RESTAURANTES"
## [19] "SERVICIOS_PUBLICOS" "INFORMACION_TURISTICA"
## [21] "CONTACTO_RESIDENTES" "TIENDAS_SERVICIOS"
## [23] "MUSEOS_GALERIAS" "ACCESO_SENALIZACION"
## [25] "EXCURSIONES" "FESTIVALES_EVENTOS"
## [27] "TEATROS_CONCIERTOS" "FERIAS_CONVENCIONES"
## [29] "RECOMENDAR_VIAJAR" "Ecosistema_turistico"
## [31] "Nucleo" "Eventos_ciudad"
## [33] "Paquetes_turisticos" "EDAD_CATEGORIA"
## [35] "ORIGEN"
# Agrupar las variables relacionadas
datos_limpios_2 <- datos_limpios %>%
select(-FECHA) # Quitamos la columna de FECHA porque no es relevante para este análisis
# Verificar los nombres de las columnas
colnames(datos_limpios_2)
## [1] "VIAJO" "GENERO"
## [3] "EDAD" "PAIS_RESIDENCIA"
## [5] "CIUDAD_RESIDENCIA" "VIAJO_NUMERO_CIUDAD"
## [7] "PRIMERA_VEZ" "PROPOSITO_VIAJE1"
## [9] "PROPOSITO_VIAJE2" "PROPOSITO_VIAJE3"
## [11] "INFORMACION_SOBRE_VIAJE" "AMBIENTE_SOCIAL_URBANO"
## [13] "ARQUITECTURA_URBANA" "LUGARES_AMIGABLE"
## [15] "MONUMENTOS_SITIOS" "ESPACIOS_PUBLICOS"
## [17] "ALOJAMIENTO_RESTAURANTES" "SERVICIOS_PUBLICOS"
## [19] "INFORMACION_TURISTICA" "CONTACTO_RESIDENTES"
## [21] "TIENDAS_SERVICIOS" "MUSEOS_GALERIAS"
## [23] "ACCESO_SENALIZACION" "EXCURSIONES"
## [25] "FESTIVALES_EVENTOS" "TEATROS_CONCIERTOS"
## [27] "FERIAS_CONVENCIONES" "RECOMENDAR_VIAJAR"
## [29] "Ecosistema_turistico" "Nucleo"
## [31] "Eventos_ciudad" "Paquetes_turisticos"
## [33] "EDAD_CATEGORIA" "ORIGEN"
# Agrupación 1: Ambiente Urbano
datos_limpios_2$ambiente_urbano <- rowMeans(select(datos_limpios_2, c("AMBIENTE_SOCIAL_URBANO", "ARQUITECTURA_URBANA", "LUGARES_AMIGABLE", "ESPACIOS_PUBLICOS", "ACCESO_SENALIZACION", "Eventos_ciudad")), na.rm = TRUE)
# Agrupación 2: Alojamiento y Restaurantes
datos_limpios_2$alojamiento_restaurantes <- rowMeans(select(datos_limpios_2, c("ALOJAMIENTO_RESTAURANTES", "SERVICIOS_PUBLICOS", "TIENDAS_SERVICIOS", "INFORMACION_TURISTICA", "Nucleo")), na.rm = TRUE)
# Agrupación 3: Cultura y Entretenimiento
datos_limpios_2$cultura_entretenimiento <- rowMeans(select(datos_limpios_2, c("MONUMENTOS_SITIOS", "MUSEOS_GALERIAS", "TEATROS_CONCIERTOS", "FESTIVALES_EVENTOS", "FERIAS_CONVENCIONES")), na.rm = TRUE)
# Calcular los promedios de cada agrupación
promedios <- data.frame(
variable = c("Ambiente Urbano", "Alojamiento y Restaurantes", "Cultura y Entretenimiento"),
promedio = c(
mean(datos_limpios_2$ambiente_urbano, na.rm = TRUE),
mean(datos_limpios_2$alojamiento_restaurantes, na.rm = TRUE),
mean(datos_limpios_2$cultura_entretenimiento, na.rm = TRUE)
)
)
# Realizar el análisis de Kruskal-Wallis
# Primero, asegúrate de que las columnas necesarias estén presentes en el dataframe datos_limpios_2
# Supongamos que las variables de interés son AMBIENTE_SOCIAL_URBANO, ALOJAMIENTO_RESTAURANTES y MUSEOS_GALERIAS
# Modifica según corresponda
h_values <- data.frame(
variable = c("Ambiente Urbano", "Alojamiento y Restaurantes", "Cultura y Entretenimiento"),
h_value = c(
kruskal.test(AMBIENTE_SOCIAL_URBANO ~ PAIS_RESIDENCIA, data = datos_limpios_2)$statistic,
kruskal.test(ALOJAMIENTO_RESTAURANTES ~ PAIS_RESIDENCIA, data = datos_limpios_2)$statistic,
kruskal.test(MUSEOS_GALERIAS ~ PAIS_RESIDENCIA, data = datos_limpios_2)$statistic
)
)
# Mostrar los promedios y los valores de H
promedios <- data.frame(
variable = c("Ambiente Urbano", "Alojamiento y Restaurantes", "Cultura y Entretenimiento"),
promedio = c(
mean(datos_limpios_2$AMBIENTE_SOCIAL_URBANO, na.rm = TRUE),
mean(datos_limpios_2$ALOJAMIENTO_RESTAURANTES, na.rm = TRUE),
mean(datos_limpios_2$MUSEOS_GALERIAS, na.rm = TRUE)
)
)
# Mostrar los valores de H y promedo
h_values
## variable h_value
## 1 Ambiente Urbano 31.36700
## 2 Alojamiento y Restaurantes 38.06280
## 3 Cultura y Entretenimiento 29.51022
promedios
## variable promedio
## 1 Ambiente Urbano 3.884808
## 2 Alojamiento y Restaurantes 4.382304
## 3 Cultura y Entretenimiento 3.669449
###########################################################################
# Replicar Tabla Nº: 3 - "SEGMENTACION Y RECOMENDACIONES DEL DETINO"
###########################################################################
# Calcular el porcentaje de promotores, neutrales y detractores para RECOMENDAR_VIAJAR
promoters <- sum(datos_limpios_2$RECOMENDAR_VIAJAR %in% c(9, 10)) / nrow(datos_limpios_2) * 100
neutral <- sum(datos_limpios_2$RECOMENDAR_VIAJAR %in% c(7, 8)) / nrow(datos_limpios_2) * 100
detractors <- sum(datos_limpios_2$RECOMENDAR_VIAJAR %in% 1:6) / nrow(datos_limpios_2) * 100
# Calcular los totales
total <- promoters + neutral + detractors
# Crear un dataframe para mostrar los resultados
resultados <- data.frame(
Variable = c("Promoters (9,10 points)", "Neutral (7, 8 points)", "Detractors (1—6 points)", "Total (%)"),
Porcentaje = c(promoters, neutral, detractors, total)
)
# Mostrar los resultados
resultados
## Variable Porcentaje
## 1 Promoters (9,10 points) 60.43406
## 2 Neutral (7, 8 points) 29.71619
## 3 Detractors (1—6 points) 9.51586
## 4 Total (%) 99.66611
# Interpretación de los resultados obtenidos:
# Recomendación de Viaje:
# Según los resultados, el 60.6% de los encuestados calificaron como "Promoters", lo que significa que calificaron con 9 o 10 puntos, indicando una alta probabilidad de que recomienden viajar al destino turístico.
# El 29.5% de los encuestados calificaron como "Neutral", con 7 u 8 puntos, lo que sugiere una posición intermedia en cuanto a la recomendación de viaje.
# Solo el 9.5% de los encuestados calificaron como "Detractors", con puntos entre 1 y 6, lo que indica que son menos propensos a recomendar viajar al destino turístico.
# Entonces por lo general, el 60.6% de los encuestados tienen una percepción muy positiva del destino turístico, lo que respalda la importancia de enfocarse en estrategias para fomentar la promoción y recomendación del destino.
# Interpretación de los resultados:
# Detractors:
# Tienen una percepción relativamente baja en todos los aspectos evaluados.
# En comparación con las otras categorías, muestran el menor promedio en Ambiente Urbano (33%),
# Alojamiento y Restaurantes (38.6%), y Cultura y Entretenimiento (29.3%).
# Esto sugiere que los viajeros en esta categoría tienen una experiencia generalmente desfavorable con el destino turístico,
# lo que podría indicar áreas de mejora en la calidad de los servicios y atracciones.
# Neutral:
# Aunque muestran puntajes intermedios, los viajeros en esta categoría tienen una percepción ligeramente más favorable que los Detractors.
# Sin embargo, su promedio en Ambiente Urbano (36.3%), Alojamiento y Restaurantes (42.4%), y Cultura y Entretenimiento (32.9%)
# indica que aún hay margen para mejorar la satisfacción de estos viajeros.
# Pueden estar indecisos o tener una experiencia más neutral en general.
# Promoters:
# Esta categoría muestra los puntajes más altos en todos los aspectos evaluados.
# Con un promedio del 41% en Ambiente Urbano, 45.2% en Alojamiento y Restaurantes, y 39.8% en Cultura y Entretenimiento,
# los Promoters tienen una percepción generalmente positiva del destino turístico.
# Esto sugiere que están satisfechos con la experiencia y es más probable que recomienden el destino a otros viajeros.
###########################################################################
# Paso 1: Calcular porcentajes de Promotores, Neutrales y Detractores
###########################################################################
# Supongamos que los datos están en el dataframe datos_limpios_2
# Clasificar los datos según la escala de Likert
datos_limpios_2$Categoria <- cut(datos_limpios_2$RECOMENDAR_VIAJAR,
breaks = c(0, 6, 8, 10),
labels = c("Detractors", "Neutral", "Promoters"))
# Calcular el porcentaje de cada categoría para cada variable de interés
porcentajes <- datos_limpios_2 %>%
group_by(Categoria) %>%
summarise(
Ambiente_Urbano = mean(AMBIENTE_SOCIAL_URBANO, na.rm = TRUE) * 100,
Alojamiento_Restaurantes = mean(ALOJAMIENTO_RESTAURANTES, na.rm = TRUE) * 100,
Cultura_Entretenimiento = mean(MUSEOS_GALERIAS, na.rm = TRUE) * 100
)
# Paso 2: Realizar la prueba Chi-cuadrado
# Supongamos que las etiquetas de interés son "Ambiente Urbano", "Alojamiento y Restaurantes" y "Cultura y Entretenimiento"
# Realizaremos la prueba Chi-cuadrado para cada etiqueta
# Para "Ambiente Urbano"
chi_cuadrado_ambiente <- chisq.test(table(datos_limpios_2$Categoria, datos_limpios_2$AMBIENTE_SOCIAL_URBANO), correct = FALSE, simulate.p.value = TRUE)
sig_ambiente <- chi_cuadrado_ambiente$p.value
# Para "Alojamiento y Restaurantes"
chi_cuadrado_alojamiento <- chisq.test(table(datos_limpios_2$Categoria, datos_limpios_2$ALOJAMIENTO_RESTAURANTES), correct = FALSE, simulate.p.value = TRUE)
sig_alojamiento <- chi_cuadrado_alojamiento$p.value
# Para "Cultura y Entretenimiento"
chi_cuadrado_cultura <- chisq.test(table(datos_limpios_2$Categoria, datos_limpios_2$MUSEOS_GALERIAS))
sig_cultura <- chi_cuadrado_cultura$p.value
# Mostrar resultados
porcentajes
## # A tibble: 4 × 4
## Categoria Ambiente_Urbano Alojamiento_Restaurantes Cultura_Entretenimiento
## <fct> <dbl> <dbl> <dbl>
## 1 Detractors 330. 389. 293.
## 2 Neutral 363. 424. 329.
## 3 Promoters 411. 453. 399.
## 4 <NA> 200 500 100
sig_ambiente
## [1] 0.0004997501
sig_alojamiento
## [1] 0.0004997501
sig_cultura
## [1] 8.517564e-14
# Interpretación de los resultados obtenidos:
# Ambiente Urbano:
# Hay una asociación significativa entre la categoría de los encuestados y su percepción del ambiente urbano (p < 0.05).
# Los promotores tienen un porcentaje más alto (41%) de percepción positiva del ambiente urbano en comparación con los neutrales (36%) y los detractores (33%).
# Esto sugiere que aquellos que promueven la ciudad como destino turístico tienden a tener una percepción más positiva del ambiente urbano.
# Alojamiento y Restaurantes:
# También hay una asociación significativa entre la categoría de los encuestados y su percepción de los alojamientos y restaurantes (p < 0.05).
# Los promotores muestran el mayor porcentaje (45%) de satisfacción con los alojamientos y restaurantes, seguidos por los neutrales (42%) y los detractores (39%).
# Esto indica que aquellos que están más inclinados a recomendar viajar muestran una mayor satisfacción con los alojamientos y restaurantes.
# Cultura y Entretenimiento:
# La asociación entre la categoría de los encuestados y su percepción de la cultura y el entretenimiento es altamente significativa (p < 0.001).
# Los promotores exhiben el porcentaje más alto (40%) de satisfacción con la cultura y el entretenimiento, seguidos por los neutrales (33%) y los detractores (29%).
# Esto sugiere que aquellos que están más dispuestos a recomendar viajar tienen una percepción más positiva de la oferta cultural y de entretenimiento de la ciudad.
###########################################################################
# Proceso de construcción para Tabla Nº5: "Segmentación y motivo de viaje"
###########################################################################
# Cargar la librería tm
#library(tm)
#library(dplyr)
#library(ggplot2)
# Preprocesamiento y limpieza de texto
datos_limpios_2 <- datos_limpios_2 %>%
mutate(PROPOSITO_VIAJE1 = tolower(PROPOSITO_VIAJE1)) %>%
mutate(PROPOSITO_VIAJE1 = removePunctuation(PROPOSITO_VIAJE1)) %>%
mutate(PROPOSITO_VIAJE1 = removeNumbers(PROPOSITO_VIAJE1)) %>%
mutate(PROPOSITO_VIAJE1 = removeWords(PROPOSITO_VIAJE1, stopwords("spanish"))) %>%
mutate(PROPOSITO_VIAJE1 = stripWhitespace(PROPOSITO_VIAJE1))
# Tokenización y creación de la matriz de términos
# Preprocesamiento y limpieza de texto
tokens <- VCorpus(VectorSource(datos_limpios_2$PROPOSITO_VIAJE1)) %>%
tm_map(content_transformer(tolower)) %>%
tm_map(removePunctuation) %>%
tm_map(removeNumbers) %>%
tm_map(removeWords, stopwords("spanish")) %>%
tm_map(stripWhitespace) %>%
TermDocumentMatrix() %>%
as.matrix()
# Convertir la matriz de términos en un dataframe
term_df <- as.data.frame(tokens)
# Aplicar el algoritmo k-means
set.seed(123) # Fijar la semilla para reproducibilidad
num_clusters <- 5 # Especificar el número de grupos deseado
kmeans_result <- kmeans(term_df, centers = num_clusters)
# Asignar nombres a los clusters en español
nombres_clusters <- c("Negocios, Convenciones, Actividades Profesionales",
"Turismo de Ocio",
"Visitar familiares o amigos",
"Estudios",
"Otros")
# Agregar la columna de clusters al dataframe de términos
term_df$cluster <- as.factor(kmeans_result$cluster)
# Calcular la frecuencia de términos por cluster
term_freq <- term_df %>%
group_by(cluster) %>%
summarise(freq = n())
# Visualizar los términos agrupados por cluster
ggplot(term_freq, aes(x = factor(cluster, labels = nombres_clusters), y = freq)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(x = "Cluster", y = "Frecuencia") +
ggtitle("Frecuencia de términos agrupados por cluster")

###########################################################################
# MAPA DE FRECUENCIA DE PALABRAS
###########################################################################
#
# Cargar la librería wordcloud
#library(wordcloud)
todos_terminos<-"todos_terminos"
# Dividir las frases en palabras individuales
todas_palabras <- unlist(strsplit(todos_terminos, " "))
# Crear un vector de frecuencia de palabras
frecuencia_palabras <- table(todas_palabras)
# Crear el mapa de nube de palabras para las palabras individuales
wordcloud(words = names(frecuencia_palabras), freq = frecuencia_palabras, scale = c(5, 0.5), min.freq = 1, max.words = Inf, random.order = FALSE, rot.per = 0.35, colors = rainbow(length(frecuencia_palabras)))
## Warning in wordcloud(words = names(frecuencia_palabras), freq =
## frecuencia_palabras, : todos_terminos could not be fit on page. It will not be
## plotted.

###########################################################################
# MAPA DE FRECUENCIA DE FRAES POPULARES en el Proposito de Viaje
###########################################################################
# Obtener todos los términos de PROPOSITO_VIAJE1
todos_terminos2 <- datos_limpios_2$PROPOSITO_VIAJE1
# Crear un vector de frecuencia de frases
frecuencia_frases <- table(todos_terminos2)
# Crear el mapa de nube de palabras
wordcloud(words = names(frecuencia_frases), freq = frecuencia_frases, scale=c(5,0.5), min.freq = 1, max.words=Inf, random.order=FALSE, rot.per=0.35, colors=rainbow(length(frecuencia_frases)))
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : negocios convenciones actividades profesionales could not
## be fit on page. It will not be plotted.

###########################################################################
# MAPA DE FRECUENCIA DE PALABRAS
###########################################################################
# Cargar librerías necesarias
#library(tm)
#library(wordcloud)
#library(cluster)
#library(dplyr)
# Preprocesamiento y limpieza de texto
datos_limpios_2 <- datos_limpios_2 %>%
mutate(INFORMACION_SOBRE_VIAJE = tolower(INFORMACION_SOBRE_VIAJE)) %>%
mutate(INFORMACION_SOBRE_VIAJE = removePunctuation(INFORMACION_SOBRE_VIAJE)) %>%
mutate(INFORMACION_SOBRE_VIAJE = removeNumbers(INFORMACION_SOBRE_VIAJE)) %>%
mutate(INFORMACION_SOBRE_VIAJE = removeWords(INFORMACION_SOBRE_VIAJE, stopwords("spanish"))) %>%
mutate(INFORMACION_SOBRE_VIAJE = stripWhitespace(INFORMACION_SOBRE_VIAJE))
# Verifica si la columna INFORMACION_SOBRE_VIAJE está vacía
if (any(is.na(datos_limpios_2$INFORMACION_SOBRE_VIAJE))) {
datos_limpios_2 <- datos_limpios_2 %>%
filter(!is.na(INFORMACION_SOBRE_VIAJE))
}
# Obtener todos los términos de INFORMACION_SOBRE_VIAJE
todos_terminos <- datos_limpios_2$INFORMACION_SOBRE_VIAJE
# Comprobar si 'todos_terminos' está vacío
if (length(todos_terminos) == 0) {
stop("El campo INFORMACION_SOBRE_VIAJE está vacío después de la limpieza.")
}
# Crear un vector de términos
todos_terminos <- unlist(strsplit(todos_terminos, " "))
# Crear un vector de frecuencia de términos
frecuencia_terminos <- table(todos_terminos)
# Verifica si 'frecuencia_terminos' está vacío
if (length(frecuencia_terminos) == 0) {
stop("No hay términos para generar la nube de palabras.")
}
# Crear la nube de palabras
wordcloud(words = names(frecuencia_terminos), freq = frecuencia_terminos, scale = c(5, 0.5), min.freq = 1, max.words = Inf, random.order = FALSE, rot.per = 0.35, colors = rainbow(length(frecuencia_terminos)))
## Warning in wordcloud(words = names(frecuencia_terminos), freq =
## frecuencia_terminos, : recomendación could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = names(frecuencia_terminos), freq =
## frecuencia_terminos, : especializados could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = names(frecuencia_terminos), freq =
## frecuencia_terminos, : tripadvisor could not be fit on page. It will not be
## plotted.

# Si también quieres analizar frases, puedes agregar un análisis similar
# Crear un vector de frecuencia de frases (ya preprocesado)
frecuencia_frases <- table(datos_limpios_2$INFORMACION_SOBRE_VIAJE)
# Crear la nube de palabras para frases
wordcloud(words = names(frecuencia_frases), freq = frecuencia_frases, scale = c(5, 0.5), min.freq = 1, max.words = Inf, random.order = FALSE, rot.per = 0.35, colors = rainbow(length(frecuencia_frases)))
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : experiencia pasada could not be fit on page. It will not
## be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : internet redes sociales could not be fit on page. It will
## not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : internet redes sociales recomendación amigos conocidos
## could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : internet redes sociales recomendación amigos conocidos
## experiencia pasada could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : recomendación amigos conocidos could not be fit on page.
## It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : internet redes sociales experiencia pasada could not be
## fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : internet redes sociales sitios web especializados viajes
## ej tripadvisor etc could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : internet redes sociales recomendación amigos conocidos
## sitios web especializados viajes ej tripadvisor etc could not be fit on page.
## It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : recomendación amigos conocidos experiencia pasada could
## not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : internet redes sociales experiencia pasada sitios web
## especializados viajes ej tripadvisor etc could not be fit on page. It will not
## be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : internet redes sociales recomendación amigos conocidos
## experiencia pasada sitios web especializados viajes ej tripadvisor etc could
## not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : recomendación amigos conocidos experiencia pasada sitios
## web especializados viajes ej tripadvisor etc could not be fit on page. It will
## not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : agencias turismo guias turisticas internet redes sociales
## recomendación amigos conocidos could not be fit on page. It will not be
## plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : agencias turismo guias turisticas experiencia pasada
## sitios web especializados viajes ej tripadvisor etc could not be fit on page.
## It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : agencias turismo guias turisticas internet redes sociales
## recomendación amigos conocidos experiencia pasada could not be fit on page. It
## will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : televisión periódicos revistas agencias turismo guias
## turisticas internet redes sociales recomendación amigos conocidos experienc
## could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : agencias turismo guias turisticas internet redes sociales
## sitios web especializados viajes ej tripadvisor etc could not be fit on page.
## It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : televisión periódicos revistas internet redes sociales
## recomendación amigos conocidos experiencia pasada could not be fit on page. It
## will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : agencias turismo guias turisticas internet redes sociales
## recomendación amigos conocidos experiencia pasada sitios web especializados
## could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : agencias turismo guias turisticas internet redes sociales
## recomendación amigos conocidos sitios web especializados viajes ej tripa could
## not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : agencias turismo guias turisticas recomendación amigos
## conocidos sitios web especializados viajes ej tripadvisor etc could not be fit
## on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : televisión periódicos revistas internet redes sociales
## sitios web especializados viajes ej tripadvisor etc could not be fit on page.
## It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : televisión periódicos revistas recomendación amigos
## conocidos sitios web especializados viajes ej tripadvisor etc could not be fit
## on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : agencias turismo guias turisticas internet redes sociales
## experiencia pasada sitios web especializados viajes ej tripadvisor etc could
## not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : televisión periódicos revistas agencias turismo guias
## turisticas internet redes sociales experiencia pasada could not be fit on page.
## It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : televisión periódicos revistas internet redes sociales
## recomendación amigos conocidos experiencia pasada sitios web especializados
## could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : televisión periódicos revistas internet redes sociales
## recomendación amigos conocidos sitios web especializados viajes ej tripadvi
## could not be fit on page. It will not be plotted.
## Warning in wordcloud(words = names(frecuencia_frases), freq =
## frecuencia_frases, : televisión periódicos revistas recomendación amigos
## conocidos experiencia pasada sitios web especializados viajes ej tripadvisor et
## could not be fit on page. It will not be plotted.
