*Este código (noticias 2022-23) se utilizó para ambas fuentes (es el mismo para todas las fuentes), para todos los años únicamnete modificando el nombre de las variables.

###NOTICIAS 2022-2023

Este chunk se centra en la obtención, procesamiento y análisis de textos provenientes de diversas noticias del año 2022-2023. Aquí hay una explicación paso a paso:

Cargar bibliotecas: Las bibliotecas tm y rvest se cargan para trabajar con texto y realizar scraping web, respectivamente. Definir URLs de noticias: Se especifica un conjunto de URLs correspondientes a noticias de interés. Iterar y descargar textos: Se recorre cada URL, se descarga el contenido de las noticias, y se guarda cada noticia como un archivo de texto con un nombre derivado de la URL. Limpiar el texto: Se define una función limpiar_texton2223 que toma un archivo de texto como entrada y realiza diversas operaciones de limpieza, como convertir a minúsculas, eliminar enlaces, etiquetas HTML, puntuaciones, números, y palabras comunes en español (stopwords). Aplicar limpieza a los archivos: La función de limpieza se aplica a cada archivo descargado, y los textos resultantes se almacenan en la lista textos_limpiosn2223. Crear un corpus: Utilizando la biblioteca tm, se crea un corpus con los textos limpios. Matriz de términos y documentos (DTM): Se genera una matriz de términos y documentos (DTM) utilizando la función DocumentTermMatrix. La DTM muestra la frecuencia de cada término en cada documento. Inspeccionar la DTM: La función inspect se utiliza para visualizar la DTM, lo que permite examinar la estructura y frecuencia de términos en los documentos.

# Cargar la biblioteca tm
library(tm)
## Loading required package: NLP
# Cargar la biblioteca rvest
library(rvest)


# Archivos a procesar
n2223 <- c(
  "https://www.animalpolitico.com/sociedad/personas-discapacidad-trabajo-empleos-dignos",
  "https://www.eluniversal.com.mx/opinion/roxana-munoz-hernandez/las-mujeres-con-discapacidad-en-las-organizaciones-incluyentes/",
  "https://www.eluniversal.com.mx/cartera/excluye-sector-financiero-a-personas-discapacitadas/",
  "https://elpais.com/economia/formacion/2023-06-30/la-ardua-inclusion-laboral-de-las-personas-con-discapacidad.html",
  "https://www.infobae.com/sociedad/2023/07/06/el-75-de-las-personas-con-discapacidad-no-consigue-empleo-una-campana-hecha-con-ia-muestra-como-si-pueden-trabajar/",
  "https://www.animalpolitico.com/2022/06/personas-discapacidad-sin-empleo-mujeres-vulnerables",
  "https://www.eluniversal.com.mx/opinion/margarita-luna-ramos/personas-con-discapacidad-su-derecho-una-vida-autonoma-e-independiente",
  "https://www.eluniversal.com.mx/nacion/mexico-inicia-sustentacion-de-informes-periodicos-ante-comite-de-derechos-humanos-de-personas-de-discapacidad",
  "https://www.eluniversal.com.mx/nacion/aprueba-senado-mas-oportunidades-laborales-para-discapacitados",
  "https://elpais.com/economia/negocios/2022-09-28/no-pienso-tirar-la-toalla-asi-se-abren-paso-los-jovenes-con-discapacidad-en-el-mercado-laboral.html"
)

# Iterar a través de las URLs y descargar los textos
archivosn2223 <- character(0)
for (url in n2223) {
  paginan2223 <- read_html(url)
  parrafos.notician2223 <- html_elements(paginan2223, "p")
  text_contentn2223 <- html_text(parrafos.notician2223)
  nombre_archivon2223 <- gsub("https://www.|/", "", url)
  nombre_archivon2223 <- paste0(nombre_archivon2223, ".txt")
  writeLines(text_contentn2223, nombre_archivon2223)
  archivosn2223 <- c(archivosn2223, nombre_archivon2223)
  cat("Archivo descargado y guardado como", nombre_archivon2223, "\n")
}
## Archivo descargado y guardado como animalpolitico.comsociedadpersonas-discapacidad-trabajo-empleos-dignos.txt 
## Archivo descargado y guardado como eluniversal.com.mxopinionroxana-munoz-hernandezlas-mujeres-con-discapacidad-en-las-organizaciones-incluyentes.txt 
## Archivo descargado y guardado como eluniversal.com.mxcarteraexcluye-sector-financiero-a-personas-discapacitadas.txt 
## Archivo descargado y guardado como https:elpais.comeconomiaformacion2023-06-30la-ardua-inclusion-laboral-de-las-personas-con-discapacidad.html.txt 
## Archivo descargado y guardado como infobae.comsociedad20230706el-75-de-las-personas-con-discapacidad-no-consigue-empleo-una-campana-hecha-con-ia-muestra-como-si-pueden-trabajar.txt 
## Archivo descargado y guardado como animalpolitico.com202206personas-discapacidad-sin-empleo-mujeres-vulnerables.txt 
## Archivo descargado y guardado como eluniversal.com.mxopinionmargarita-luna-ramospersonas-con-discapacidad-su-derecho-una-vida-autonoma-e-independiente.txt 
## Archivo descargado y guardado como eluniversal.com.mxnacionmexico-inicia-sustentacion-de-informes-periodicos-ante-comite-de-derechos-humanos-de-personas-de-discapacidad.txt 
## Archivo descargado y guardado como eluniversal.com.mxnacionaprueba-senado-mas-oportunidades-laborales-para-discapacitados.txt 
## Archivo descargado y guardado como https:elpais.comeconomianegocios2022-09-28no-pienso-tirar-la-toalla-asi-se-abren-paso-los-jovenes-con-discapacidad-en-el-mercado-laboral.html.txt
# Función para limpiar el texto
limpiar_texton2223  <- function(archivo) {
  texto <- readLines(archivo, warn = FALSE)
  texto <- paste(texto, collapse = " ")
  texton2223  <- tolower(texto)
  texton2223 <- gsub("http\\S+|www\\.\\S+", "", texton2223 )
  texton2223  <- gsub("<.*?>", "", texton2223)
  texton2223  <- gsub("[[:punct:]]", "", texton2223 )
  texton2223  <- gsub("\\d+", "", texton2223)
  texton2223  <- gsub("\\s+", " ", texton2223 )
  texton2223  <- gsub("<img [^>]*>", "", texton2223 ) 
  texton2223 <- removeWords(texton2223, stopwords("es"))
  return(texton2223 )
}

# Aplicar la función de limpieza solo a los archivos de la lista n23
textos_limpiosn2223  <- lapply(archivosn2223 , limpiar_texton2223 )

# Corpus con textos limpios
corpusn2223  <- Corpus(VectorSource(textos_limpiosn2223 ))

# Document Term Matrix
dtmn2223  <- DocumentTermMatrix(corpusn2223 )

# Ver la Matriz
inspect(dtmn2223 )
## <<DocumentTermMatrix (documents: 10, terms: 2017)>>
## Non-/sparse entries: 3059/17111
## Sparsity           : 85%
## Maximal term length: 20
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs años derechos discapacidad empleo inclusión laboral mujeres personas
##   1     0        0            0      0         0       0       0        0
##   10    8        1           20     10         3       7       2       11
##   2     5        4           49      2        10       4      18       25
##   3     0        1            7      0         1       0       0        5
##   4     1        0           18      9         6       7       0       18
##   5     8        5           17     10        10      11       2       20
##   6     1        1           21      4         1       5       4       15
##   7     1        2            6      0         1       0       0        6
##   8     4        5            6      0         0       0       0        9
##   9     0        1            8      1         1       2       0       10
##     Terms
## Docs población trabajo
##   1          0       0
##   10         3       6
##   2          5      18
##   3          5       1
##   4          0       1
##   5          6      17
##   6          0       1
##   7          0       0
##   8          1       1
##   9          3       7

En este chunk de código, se unen todos los textos limpios. Unir todos los textos limpios: Se concatenan todos los textos limpios previamente obtenidos en un solo vector llamado vectorn2223. Conteo total de cada término: Se calcula el conteo total de cada término sumando las columnas de la matriz de términos y documentos (DTM) utilizando colSums. Ordenar y mostrar términos más comunes: Los términos se ordenan en orden descendente según su frecuencia total en todos los documentos. Los 50 términos más comunes se muestran utilizando head y se almacenan en la variable terminos_comunes_limpion2223.

# Unir todos los textos limpios en un solo vector
vectorn2223 <- unlist(textos_limpiosn2223)

# Sumar las columnas para obtener el conteo total de cada término
conteo_total_limpion2223 <- colSums(as.matrix(dtmn2223))

# Ordenar y mostrar los términos más comunes
terminos_comunes_limpion2223 <- sort(conteo_total_limpion2223, decreasing = TRUE)
head(terminos_comunes_limpion2223, 50)
##   discapacidad       personas        trabajo         empleo        laboral 
##            152            119             52             36             36 
##      inclusión           años        mujeres      población       derechos 
##             33             28             26             23             20 
## organizaciones         social           vida         cuenta        persona 
##             20             20             17             16             16 
##       barreras          datos      educación          mayor       nacional 
##             15             15             15             15             15 
##         acceso       empresas discriminación   trabajadores            así 
##             14             14             13             13             12 
##         méxico       personal          según          tener      universal 
##             12             12             12             12             12 
##      colectivo          falta          grupo          hacer          menos 
##             12             11             11             11             11 
##          parte      políticas       sociales      formación    condiciones 
##             11             11             11             11             10 
##      fundación           tasa        mercado         sector         además 
##             10             10              9              9              9 
##  accesibilidad            aún           bien      condición      cualquier 
##              8              8              8              8              8

En este apartado, se utiliza la biblioteca wordcloud en R para crear una nube de palabras a partir de los términos más comunes previamente calculados. Primero, carga la biblioteca wordcloud necesaria para crear nubes de palabras. Names(terminos_comunes_limpio_di): Se utilizan los nombres de los términos más comunes como las palabras para la nube de palabras.

library(wordcloud)
## Loading required package: RColorBrewer
wordcloud(names(terminos_comunes_limpion2223), terminos_comunes_limpion2223, min.freq = 8, max.words = 200, random.order = FALSE, rot.per = 0.35, colors = brewer.pal(10, "Paired"))
## Warning in wordcloud(names(terminos_comunes_limpion2223),
## terminos_comunes_limpion2223, : personas could not be fit on page. It will not
## be plotted.

Este bloque de código en R realiza una serie de acciones para refinar aún más el análisis del corpus de textos. Después, se eliminan las palabras específicas y stopwords en español: - palabras_eliminar_di: Una lista de palabras específicas que se quieren eliminar del corpus. - corpus2__di: Aplica la eliminación de palabras específicas al corpus original. - corpus3__di: Luego, elimina las stopwords en español del corpus resultante.

Se crea un nuevo Document-Term Matrix (DTM) y se suman las columnas del nuevo DTM para obtener el conteo total de cada término. Se ordenan y muestran los términos más comunes después de la limpieza adicional. Después, se crea una tabla de frecuencias de los términos después de la limpieza adicional y se crea un dataframe resultados_di que contiene los términos más comunes y sus frecuencias. Luego, se muestran las primeras 100 filas de este dataframe.

# Eliminar palabras específicas. ETAPA 1
palabras_eliminarn2223 <- c("null","gtagset","function","var","pagetype", "presidente", "interlocutor", "ramírez", "reyes","erika", "vcrowvccolumnvccolumntext", "docs","embargo","correo","ser", "vez","hacer","sólo","conocer","además","así","cada","través","mayo","aunque","tener","aún","busca","cuenta","aquí","menor","puedes","puede","pueden","parte","años","docs","día","villa","electrónico","mundo","puedan","situación","puertas","primer","dentro","agradecemos","potosí","mayor","número","forma","provisión","nacobre","centro","mayor","contamos","general","cuales","celaya","muchas","llevó","gran","hoy","evento","todas","san","número","obtener","lic","pas","dar","paso","cabo","seguir","san","manera","mismo","luis","sector","mejor","director","vida","aspace","equipo","compartida","wework","solo", "encuentran", "falta", "personal", "menos", "historias", "menores", "mayores", "historias", "grupo", "universal", "pais", "país", "queda", "cualquier", "oit", "según", "datos", "artículo", "bien", "nacional", "bienes", "tasa", "sociedad", "condiciones")
corpus2_n2223 <- tm_map(corpusn2223, removeWords, palabras_eliminarn2223)
## Warning in tm_map.SimpleCorpus(corpusn2223, removeWords,
## palabras_eliminarn2223): transformation drops documents
# Eliminar stopwords en español
corpus3_n2223 <- tm_map(corpus2_n2223, removeWords, stopwords("es"))
## Warning in tm_map.SimpleCorpus(corpus2_n2223, removeWords, stopwords("es")):
## transformation drops documents
# Repetimos el análisis y comparamos los términos y la nube 
# Creamos nuevo dtm
dtm2_n2223 <- DocumentTermMatrix(corpus3_n2223)

#Ver matriz
inspect(dtm2_n2223)
## <<DocumentTermMatrix (documents: 10, terms: 1945)>>
## Non-/sparse entries: 2783/16667
## Sparsity           : 86%
## Maximal term length: 20
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs derechos discapacidad empleo inclusión laboral mujeres organizaciones
##   1         0            0      0         0       0       0              0
##   10        1           20     10         3       7       2              0
##   2         4           49      2        10       4      18             17
##   3         1            7      0         1       0       0              0
##   4         0           18      9         6       7       0              1
##   5         5           17     10        10      11       2              2
##   6         1           21      4         1       5       4              0
##   7         2            6      0         1       0       0              0
##   8         5            6      0         0       0       0              0
##   9         1            8      1         1       2       0              0
##     Terms
## Docs personas población trabajo
##   1         0         0       0
##   10       11         3       6
##   2        25         5      18
##   3         5         5       1
##   4        18         0       1
##   5        20         6      17
##   6        15         0       1
##   7         6         0       0
##   8         9         1       1
##   9        10         3       7
# Sumar las columnas para obtener el conteo total de cada término
conteo_total_n2223 <- colSums(as.matrix(dtm2_n2223))

# Ordenar y mostrar los términos más comúnes
terminos_comunes_n2223 <- sort(conteo_total_n2223, decreasing = TRUE)
head(terminos_comunes_n2223)
## discapacidad     personas      trabajo       empleo      laboral    inclusión 
##          152          119           52           36           36           33
# Función para limpiar el texto
limpiar_texton2223 <- function(archivo) {
  texton2223 <- readLines(archivosn2223, warn = FALSE)
  texton2223 <- paste(texton2223, collapse = " ")
  
  # Eliminar puntuación
  texton2223 <- gsub("[[:punct:]]", "", texton2223)
  
  # Eliminar preposiciones y superlativos
  palabrasn2223 <- unlist(strsplit(texto, " "))
  palabras_filtradasn2223 <- palabras[!(palabras %in% c(preposiciones, superlativos))]
  
  # Volver a unir las palabras filtradas
  #texto_filtrado <- paste(palabras_filtradas, collapse = " ")
  
}
# Obtener la tabla de frecuencias de los términos
tabla_frecuenciasn2223 <- table(conteo_total_n2223)

# Mostrar los términos más comunes junto con sus frecuencias
resultadosn2223 <- data.frame(Termino = names(terminos_comunes_n2223),
                          Frecuencia = terminos_comunes_n2223)
                          #Total = tabla_frecuenciasn2223[names(terminos_comunes_n2223)])

# Se despliega las primeras 100 palabras con mayor frecuencia 
head(resultadosn2223, 100)
##                       Termino Frecuencia
## discapacidad     discapacidad        152
## personas             personas        119
## trabajo               trabajo         52
## empleo                 empleo         36
## laboral               laboral         36
## inclusión           inclusión         33
## mujeres               mujeres         26
## población           población         23
## derechos             derechos         20
## organizaciones organizaciones         20
## social                 social         20
## persona               persona         16
## barreras             barreras         15
## educación           educación         15
## acceso                 acceso         14
## empresas             empresas         14
## discriminación discriminación         13
## trabajadores     trabajadores         13
## méxico                 méxico         12
## colectivo           colectivo         12
## políticas           políticas         11
## sociales             sociales         11
## formación           formación         11
## fundación           fundación         10
## mercado               mercado          9
## accesibilidad   accesibilidad          8
## condición           condición          8
## desarrollo         desarrollo          8
## enfrentan           enfrentan          8
## ley                       ley          8
## motriz                 motriz          8
## organización     organización          8
## públicas             públicas          8
## centros               centros          7
## derecho               derecho          7
## mujer                   mujer          7
## onu                       onu          7
## puestos               puestos          7
## apoyo                   apoyo          7
## laborales           laborales          7
## mesonero             mesonero          7
## salud                   salud          7
## veces                   veces          7
## apoyos                 apoyos          7
## bienestar           bienestar          7
## bajo                     bajo          6
## capacidad           capacidad          6
## compañía             compañía          6
## contar                 contar          6
## diversos             diversos          6
## edición               edición          6
## establece           establece          6
## estrategias       estrategias          6
## hombres               hombres          6
## participación   participación          6
## porcentaje         porcentaje          6
## superior             superior          6
## uso                       uso          6
## visual                 visual          6
## momento               momento          6
## contratación     contratación          6
## contratos           contratos          6
## nivel                   nivel          6
## pobreza               pobreza          6
## trabaja               trabaja          6
## acciones             acciones          5
## acepto                 acepto          5
## acontecer           acontecer          5
## actividades       actividades          5
## ajustes               ajustes          5
## alguna                 alguna          5
## américa               américa          5
## arrancar             arrancar          5
## atender               atender          5
## autorización     autorización          5
## comprender         comprender          5
## contenidos         contenidos          5
## contratar           contratar          5
## copyright           copyright          5
## diarios               diarios          5
## diseño                 diseño          5
## estudio               estudio          5
## existir               existir          5
## expresamente     expresamente          5
## física                 física          5
## guía                     guía          5
## igual                   igual          5
## incluyentes       incluyentes          5
## ingreso               ingreso          5
## ingresos             ingresos          5
## instalaciones   instalaciones          5
## instituciones   instituciones          5
## intelectual       intelectual          5
## leer                     leer          5
## miembro               miembro          5
## millones             millones          5
## negoceos             negoceos          5
## noticioso           noticioso          5
## objetivo             objetivo          5
## periodística     periodística          5

Se crean una nueva nube de palabras limpia, ya que posteriormente se hizo nuevamente una limpieza de palabras manualmente. Se utiliza la biblioteca wordcloud en R para crear una nube de palabras a partir de los términos más comunes previamente calculados. Esta limpieza manual se hizo para obtener unicamente aquellas palabras que nos ayudarán a realizar un análisis y obtener hallazgos.

wordcloud(names(terminos_comunes_n2223),
          terminos_comunes_n2223,
          min.freq = 7, # frecuencia minima de las palabras
          max.words = 100, # cuantas palabras caben en la nube
          random.order = FALSE,
          rot.per = 0.35,
          #brewer.pal es una paleta de colores
         colors = brewer.pal(10, "Paired"))

Este código en R realiza un análisis de tópicos y sentimiento en un conjunto de datos de transcripciones (almacenado en el objeto n2223). Comienza calculando el análisis de sentimiento de las transcripciones y luego procede a construir un modelo de tópicos utilizando el algoritmo Latent Dirichlet Allocation (LDA). Se visualizan los términos más relevantes de cada tópico mediante un gráfico de barras utilizando ggplot2. El resultado final es un conjunto de términos clave por tópico, almacenados en el dataframe terms_topn2223. Este código es útil para explorar y entender la estructura temática de las transcripciones, así como para identificar términos importantes en cada tópico.

# Carga paquetes necesarios
library(tidyverse) # Conjunto de paquetes para manipulación y visualización de datos
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ ggplot2::annotate()     masks NLP::annotate()
## ✖ dplyr::filter()         masks stats::filter()
## ✖ readr::guess_encoding() masks rvest::guess_encoding()
## ✖ dplyr::lag()            masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidytext)# Herramientas para trabajar con texto en formato tidy
library(dplyr)# Paquete para manipulación de datos
library(sentimentr)# Herramientas para análisis de sentimiento
library(topicmodels)# Modelos de tópicos
library(tm)# Text Mining
library(ggplot2) # Creación de gráficos

# Leer el archivo txt
transcriptionn2223 <- n2223

# Analizar el sentimiento
sentimentn2223 <- sentiment_by(transcriptionn2223)

# Convert dtm2_n2223 to a matrix
dtm2_n2223 <- as.matrix(dtm2_n2223)

# Remove rows with all zeros
dtm2_n2223 <- dtm2_n2223[rowSums(dtm2_n2223) > 0, ]

# Remove columns with all zeros
dtm2_n2223 <- dtm2_n2223[, colSums(dtm2_n2223) > 0]

# Generar un modelo de topic models
ldan2223 <- LDA(dtm2_n2223, k = 3)

# Obtener los términos más importantes de cada tópico
termsn2223 <- tidy(ldan2223, matrix = "beta") %>%
  group_by(topic) %>%
  top_n(7, wt = beta) %>%
  ungroup()

# Generar el gráfico
ggplot(termsn2223, aes(x = reorder_within(term, beta, topic), y = beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  coord_flip() +
  facet_wrap(~topic, ncol = 3, scales = "free_y") +
  theme(strip.text = element_text(size = 8)) +
  labs(x = "Beta", y = "Term") +
  scale_x_reordered()

# Obtener los términos más importantes de cada tópico en un dataframe
terms_topn2223 <- termsn2223 %>%
  select(topic, term, beta)

Este código en R utiliza las bibliotecas syuzhet, RColorBrewer y tm para realizar un análisis de sentimientos en un conjunto de textos representados por el objeto resultadosn2223. Primero, se concatenan los textos limpios en un solo vector llamado texto_palabrasn2223. Luego, se utiliza la función get_nrc_sentiment de la biblioteca syuzhet para obtener un análisis de sentimientos basado en el diccionario NRC. Se crea un diccionario de traducción de emociones para cambiar los nombres de las columnas en el dataframe resultante (sentimientos_df_n2223). Finalmente, se genera un gráfico de barras horizontales para visualizar la distribución de las emociones en los textos, con etiquetas de emociones rotadas para mejorar la legibilidad. El resultado es un análisis visual de las emociones presentes en los textos analizados.

# Cargar las bibliotecas necesarias
library(syuzhet)
## 
## Attaching package: 'syuzhet'
## The following object is masked from 'package:sentimentr':
## 
##     get_sentences
library(RColorBrewer)
library(tm)

# Concatenar los textos limpios en un solo vector
texto_palabrasn2223<- unlist(resultadosn2223)

# Obtener el análisis de sentimientos con syuzhet
sentimientos_df_n2223  <- get_nrc_sentiment(texto_palabrasn2223 , lang = "spanish")

# Crear un diccionario de traducción de emociones
diccionario_emociones_n2223 <- c(
  "anger" = "enojo",
  "anticipation" = "anticipación",
  "disgust" = "asco",
  "fear" = "miedo",
  "joy" = "alegría",
  "sadness" = "tristeza",
  "surprise" = "sorpresa",
  "trust" = "confianza",
  "negative" = "negativo",
  "positive" = "positivo"
)

# Cambiar los nombres de las emociones en sentimientos_df
colnames(sentimientos_df_n2223) <- diccionario_emociones_n2223

# Mostrar los resultados
head(sentimientos_df_n2223)
##   enojo anticipación asco miedo alegría tristeza sorpresa confianza negativo
## 1     0            0    0     0       0        1        0         0        2
## 2     0            0    0     0       0        0        0         0        0
## 3     0            1    0     0       1        0        1         1        0
## 4     0            0    0     0       0        0        0         0        0
## 5     0            0    0     0       0        0        0         0        0
## 6     0            0    0     0       0        0        0         0        0
##   positivo
## 1        0
## 2        0
## 3        2
## 4        0
## 5        1
## 6        0
summary(sentimientos_df_n2223)
##      enojo           anticipación          asco              miedo        
##  Min.   :0.000000   Min.   :0.00000   Min.   :0.000000   Min.   :0.00000  
##  1st Qu.:0.000000   1st Qu.:0.00000   1st Qu.:0.000000   1st Qu.:0.00000  
##  Median :0.000000   Median :0.00000   Median :0.000000   Median :0.00000  
##  Mean   :0.007455   Mean   :0.01465   Mean   :0.006941   Mean   :0.01337  
##  3rd Qu.:0.000000   3rd Qu.:0.00000   3rd Qu.:0.000000   3rd Qu.:0.00000  
##  Max.   :2.000000   Max.   :2.00000   Max.   :2.000000   Max.   :4.00000  
##     alegría           tristeza          sorpresa          confianza      
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.000000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.000000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000   Median :0.000000   Median :0.00000  
##  Mean   :0.01131   Mean   :0.01542   Mean   :0.005913   Mean   :0.03136  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.000000   3rd Qu.:0.00000  
##  Max.   :2.00000   Max.   :5.00000   Max.   :1.000000   Max.   :3.00000  
##     negativo          positivo      
##  Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000  
##  Mean   :0.02802   Mean   :0.04447  
##  3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :5.00000   Max.   :4.00000
# Ajustar parámetros para mejorar la legibilidad y rotar las etiquetas
par(mar = c(5, 5, 4, 2) + 0.1)

# Crear un gráfico de barras con etiquetas rotadas
barplot(
  colSums(sentimientos_df_n2223),
  space = 0.2,
  horiz = FALSE,
  las = 2, # Rotar las etiquetas
  cex.names = 0.7,
  col = brewer.pal(n = ncol(sentimientos_df_n2223), name = "Set3"),
  main = "Análisis de Sentimientos noticias 2022-2023",
  xlab = "Emociones",
  ylab = NULL
)

###ASC 2019

Repitiendo el mismo procedimiento que en noticias, se cargaron ambas librerías, se hizo la descarga de los datos sólo de aquellos links que nos fueran de utilidad. En este chunk, se están realizando acciones similares a las anteriores, específicamente para un conjunto diferente de URLs relacionadas con noticias en el sitio web “www.juntos.org.mx”. Este bloque de código realiza la limpieza y procesamiento de texto para un conjunto específico de noticias, generando una matriz de términos y documentos que puede ser utilizada para análisis posteriores. Aquí está una explicación paso a paso:

Cargar bibliotecas y URLs: Se cargan las bibliotecas tm y rvest, y se definen las URLs de las noticias en el vector asc19. Iterar y descargar textos: Se itera sobre las URLs, se descargan los textos de las noticias y se almacenan en archivos de texto. Los nombres de los archivos se generan a partir de las URL y se guardan en el vector archivosasc19. Función para limpiar el texto: Se define la función limpiar_textoasc19 para limpiar el texto de los archivos. Esta función convierte el texto a minúsculas, elimina enlaces, etiquetas HTML, signos de puntuación, números, espacios adicionales y palabras comunes en español (stopwords). Aplicar la función de limpieza: Se aplica la función de limpieza a los archivos descargados, y los textos limpios se almacenan en textos_limpiosasc19. Crear Corpus y Document Term Matrix (DTM): Se crea un corpus con los textos limpios y, a partir de este corpus, se genera una matriz de términos y documentos (DTM) utilizando DocumentTermMatrix. Ver la Matriz: Se utiliza la función inspect para ver la matriz resultante dtmasc19.

# Cargar la biblioteca tm
library(tm)
# Cargar la biblioteca rvest
library(rvest)


# Archivos a procesar
asc19 <- c(
  "https://www.juntos.org.mx/2019/04/proximamente-empodera-en-villa-de-reyes/",
  "https://www.juntos.org.mx/2019/03/33-personas-con-discapacidad-listos-para-comenzar-a-trabajar/",
  "https://www.juntos.org.mx/2019/05/inicia-la-18va-generacion-empodera-en-villa-de-reyes/",
  "https://www.juntos.org.mx/2019/05/inclusion-laboral-de-mujeres-con-discapacidad/",
  "https://www.juntos.org.mx/2019/06/el-ejercito-aplica-inclusion-laboral-dentro-de-sus-filas/",
  "https://www.juntos.org.mx/2019/06/cynthia-molano-primera-diputada-de-talla-baja-en-mexico-video/",
  "https://www.juntos.org.mx/2019/06/un-estudio-sobre-la-realidad-laboral-de-las-personas-con-paralisis-cerebral/",
  "https://www.juntos.org.mx/2019/07/sabias-que-cinepolis-ha-contratado-a-400-personas-con-discapacidad/",
  "https://www.juntos.org.mx/2019/10/seguridad-laboral-para-personas-con-discapacidad/",
  "https://www.juntos.org.mx/2019/06/empodera-18va-generacion-24-personas-con-discapacidad-listas-para-trabajar/",
  "https://www.juntos.org.mx/2019/06/como-preparase-para-recibir-a-una-persona-con-discapacidad-en-la-empresa/",
  "https://www.juntos.org.mx/2019/07/27-personas-con-discapacidad-listas-para-la-vida-laboral-empodera/",
  "https://www.juntos.org.mx/2019/07/que-hacer-si-tengo-una-discapacidad-y-busco-trabajo/"
)

# Iterar a través de las URLs y descargar los textos
archivosasc19  <- character(0)
for (url in asc19 ) {
  paginaasc19  <- read_html(url)
  parrafos.noticiaasc19  <- html_elements(paginaasc19 , "p")
  text_contentasc19 <- html_text(parrafos.noticiaasc19 )
  nombre_archivoasc19 <- gsub("https://www.juntos.org.mx/|/", "", url)
  nombre_archivoasc19 <- paste0(nombre_archivoasc19, ".txt")
  writeLines(text_contentasc19 , nombre_archivoasc19 )
  archivosasc19  <- c(archivosasc19 , nombre_archivoasc19 )
  cat("Archivo descargado y guardado como", nombre_archivoasc19 , "\n")
}
## Archivo descargado y guardado como 201904proximamente-empodera-en-villa-de-reyes.txt 
## Archivo descargado y guardado como 20190333-personas-con-discapacidad-listos-para-comenzar-a-trabajar.txt 
## Archivo descargado y guardado como 201905inicia-la-18va-generacion-empodera-en-villa-de-reyes.txt 
## Archivo descargado y guardado como 201905inclusion-laboral-de-mujeres-con-discapacidad.txt 
## Archivo descargado y guardado como 201906el-ejercito-aplica-inclusion-laboral-dentro-de-sus-filas.txt 
## Archivo descargado y guardado como 201906cynthia-molano-primera-diputada-de-talla-baja-en-mexico-video.txt 
## Archivo descargado y guardado como 201906un-estudio-sobre-la-realidad-laboral-de-las-personas-con-paralisis-cerebral.txt 
## Archivo descargado y guardado como 201907sabias-que-cinepolis-ha-contratado-a-400-personas-con-discapacidad.txt 
## Archivo descargado y guardado como 201910seguridad-laboral-para-personas-con-discapacidad.txt 
## Archivo descargado y guardado como 201906empodera-18va-generacion-24-personas-con-discapacidad-listas-para-trabajar.txt 
## Archivo descargado y guardado como 201906como-preparase-para-recibir-a-una-persona-con-discapacidad-en-la-empresa.txt 
## Archivo descargado y guardado como 20190727-personas-con-discapacidad-listas-para-la-vida-laboral-empodera.txt 
## Archivo descargado y guardado como 201907que-hacer-si-tengo-una-discapacidad-y-busco-trabajo.txt
# Función para limpiar el texto
limpiar_textoasc19  <- function(archivo) {
  texto <- readLines(archivo, warn = FALSE)
  texto <- paste(texto, collapse = " ")
  textoasc19  <- tolower(texto)
  textoasc19 <- gsub("http\\S+|www\\.\\S+", "", textoasc19 )
  textoasc19  <- gsub("<.*?>", "", textoasc19 )
  textoasc19  <- gsub("[[:punct:]]", "", textoasc19 )
  textoasc19  <- gsub("\\d+", "", textoasc19 )
  textoasc19  <- gsub("\\s+", " ", textoasc19 )
  textoasc19  <- gsub("<img [^>]*>", "", textoasc19 ) 
  textoasc19 <- removeWords(textoasc19, stopwords("es"))
  return(textoasc19 )
}

# Aplicar la función de limpieza solo a los archivos de la lista n23
textos_limpiosasc19  <- lapply(archivosasc19 , limpiar_textoasc19 )

# Corpus con textos limpios
corpusasc19  <- Corpus(VectorSource(textos_limpiosasc19 ))

# Document Term Matrix
dtmasc19  <- DocumentTermMatrix(corpusasc19 )

# Ver la Matriz
inspect(dtmasc19 )
## <<DocumentTermMatrix (documents: 13, terms: 1342)>>
## Non-/sparse entries: 1955/15491
## Sparsity           : 89%
## Maximal term length: 53
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs discapacidad empodera empresa inclusión juntos laboral personas programa
##   10            2        3       0         0      1       2        2        3
##   11            4        0       3         3      1       2        2        0
##   12            2        2       1         1      0       2        2        1
##   13            8        1       1         4      1       5       10        0
##   2             5        5       0         2      2       4        6        4
##   4            19        3       1        11      7       7       12        3
##   5             5        0       0         2      0       0        5        0
##   7             2        0       0         2      0       8       13        0
##   8             7        1       6         3      1       3        9        1
##   9             9        0       1         0      0       1        4        1
##     Terms
## Docs trabajo vez
##   10       3   2
##   11       2   1
##   12       2   2
##   13       1   0
##   2        5   4
##   4        6   2
##   5        0   0
##   7        0   0
##   8        4   0
##   9        9   1

Este bloque de código crea un vector que contiene todos los textos limpios de las noticias, realiza un recuento total de cada término y muestra los 50 términos más comunes junto con sus frecuencias. Esto puede ser útil para comprender qué términos son más frecuentes en el conjunto de noticias seleccionado.

# Unir todos los textos limpios en un solo vector
vectorasc19 <- unlist(textos_limpiosasc19)

# Sumar las columnas para obtener el conteo total de cada término
conteo_total_limpioasc19 <- colSums(as.matrix(dtmasc19))

# Ordenar y mostrar los términos más comunes
terminos_comunes_limpioasc19 <- sort(conteo_total_limpioasc19, decreasing = TRUE)
head(terminos_comunes_limpioasc19, 50)
##      personas  discapacidad       laboral       trabajo     inclusión 
##            74            71            36            36            29 
##      empodera      programa       empresa        juntos           vez 
##            22            17            14            14            14 
##        empleo     registrad           ser      empresas       mujeres 
##            13            13            13            13            13 
##     diplomado           día  capacitación         erika participantes 
##            11            10             9             9             9 
##      trabajar     situación   experiencia         apoyo         reyes 
##             9             9             8             8             7 
##         villa     seguridad      sociedad        además       conocer 
##             7             7             7             7             7 
##        social          sólo      cerebral     parálisis        correo 
##             7             7             7             7             7 
##   electrónico       ramírez          cada         tener           así 
##             7             6             6             6             6 
##        cuenta    desarrollo       embargo         hacer     población 
##             6             6             6             6             6 
##   necesidades          aquí    generación  herramientas        primer 
##             6             5             5             5             5

Este fragmento de código en R utiliza la biblioteca wordcloud para crear una nube de palabras basada en la frecuencia de los términos en el conjunto de noticias “asc19”.

Importante: in.freq = 8: Establece el umbral mínimo de frecuencia para incluir un término en la nube de palabras. En este caso, se incluirán solo los términos que aparecen al menos 8 veces. max.words = 200: Limita el número máximo de palabras que se mostrarán en la nube. En este caso, se mostrarán hasta 200 palabras.

library(wordcloud)
wordcloud(names(terminos_comunes_limpioasc19), terminos_comunes_limpioasc19, min.freq = 8, max.words = 200, random.order = FALSE, rot.per = 0.35, colors = brewer.pal(8, "Dark2"))

Este bloque de código es parte de un proceso de limpieza de datos y análisis exploratorio del conjunto de noticias “asc19”, centrándose en eliminar palabras no deseadas y stopwords para resaltar los términos más relevantes.

palabras_eliminarasc19: Es un vector que contiene palabras específicas que se desean eliminar del corpus, como palabras comunes, nombres propios, y otras que no aportan significado relevante al análisis.

corpus2_asc19 <- tm_map(corpusasc19, removeWords, palabras_eliminarasc19): Utiliza la función removeWords de la biblioteca tm para eliminar las palabras especificadas en palabras_eliminarasc19 del corpus.

corpus3_asc19 <- tm_map(corpus2_asc19, removeWords, stopwords(“es”)): Elimina las stopwords en español utilizando la función removeWords de la biblioteca tm y la lista de stopwords en español proporcionada por stopwords(“es”).

dtm2_asc19 <- DocumentTermMatrix(corpus3_asc19): Crea una nueva matriz de términos de documentos (DTM) después de la limpieza del corpus.

inspect(dtm2_asc19): Muestra la matriz de términos de documentos para que puedas examinarla y verificar la efectividad de las operaciones de limpieza.

conteo_total_asc19 <- colSums(as.matrix(dtm2_asc19)): Calcula el conteo total de cada término en el nuevo DTM.

terminos_comunes_asc19 <- sort(conteo_total_asc19, decreasing = TRUE): Ordena los términos por frecuencia en orden descendente.

resultadosasc19 <- data.frame(Termino = names(terminos_comunes_asc19), Frecuencia = terminos_comunes_asc19): Crea un marco de datos que muestra los términos más comunes y su frecuencia.

head(resultadosasc19, 100): Muestra las primeras 100 filas del marco de datos resultadosasc19, que contienen los términos más comunes junto con sus frecuencias.

# Eliminar palabras específicas. ETAPA 1
palabras_eliminarasc19 <- c("null","gtagset","function","var","pagetype", "presidente", "interlocutor", "ramírez", "reyes","erika", "vcrowvccolumnvccolumntext", "docs","embargo","correo","ser", "vez","hacer","sólo","conocer","además","así","cada","través","mayo","aunque","tener","aún","busca","cuenta","aquí","menor","puedes","puede","pueden","parte","años","docs","día","villa","electrónico","mundo","puedan","situación","puertas","primer","dentro","agradecemos","nnvcsingleimage","registrad","aspace","municipal", "información", "población", "vida")
corpus2_asc19 <- tm_map(corpusasc19, removeWords, palabras_eliminarasc19)
## Warning in tm_map.SimpleCorpus(corpusasc19, removeWords,
## palabras_eliminarasc19): transformation drops documents
# Eliminar stopwords en español
corpus3_asc19 <- tm_map(corpus2_asc19, removeWords, stopwords("es"))
## Warning in tm_map.SimpleCorpus(corpus2_asc19, removeWords, stopwords("es")):
## transformation drops documents
# Repetimos el análisis y comparamos los términos y la nube 
# Creamos nuevo dtm
dtm2_asc19 <- DocumentTermMatrix(corpus3_asc19)

#Ver matriz
inspect(dtm2_asc19)
## <<DocumentTermMatrix (documents: 13, terms: 1297)>>
## Non-/sparse entries: 1777/15084
## Sparsity           : 89%
## Maximal term length: 53
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs discapacidad empleo empodera empresa inclusión juntos laboral personas
##   10            2      1        3       0         0      1       2        2
##   11            4      0        0       3         3      1       2        2
##   12            2      0        2       1         1      0       2        2
##   13            8      1        1       1         4      1       5       10
##   2             5      3        5       0         2      2       4        6
##   4            19      3        3       1        11      7       7       12
##   5             5      0        0       0         2      0       0        5
##   7             2      3        0       0         2      0       8       13
##   8             7      0        1       6         3      1       3        9
##   9             9      0        0       1         0      0       1        4
##     Terms
## Docs programa trabajo
##   10        3       3
##   11        0       2
##   12        1       2
##   13        0       1
##   2         4       5
##   4         3       6
##   5         0       0
##   7         0       0
##   8         1       4
##   9         1       9
# Sumar las columnas para obtener el conteo total de cada término
conteo_total_asc19 <- colSums(as.matrix(dtm2_asc19))

# Ordenar y mostrar los términos más comúnes
terminos_comunes_asc19 <- sort(conteo_total_asc19, decreasing = TRUE)
head(terminos_comunes_asc19)
##     personas discapacidad      laboral      trabajo    inclusión     empodera 
##           74           71           36           36           29           22
# Función para limpiar el texto
limpiar_textoasc19 <- function(archivo) {
  textoasc19 <- readLines(archivosasc19, warn = FALSE)
  textoasc19 <- paste(textoasc19, collapse = " ")
  
  # Eliminar puntuación
  textoasc19 <- gsub("[[:punct:]]", "", textoasc19)
  
  # Eliminar preposiciones y superlativos
  palabrasasc19 <- unlist(strsplit(texto, " "))
  palabras_filtradasasc19 <- palabras[!(palabras %in% c(preposiciones, superlativos))]
  
  # Volver a unir las palabras filtradas
  #texto_filtrado <- paste(palabras_filtradas, collapse = " ")
  
}
# Obtener la tabla de frecuencias de los términos
tabla_frecuenciasasc19 <- table(conteo_total_asc19)

# Mostrar los términos más comunes junto con sus frecuencias
resultadosasc19 <- data.frame(Termino = names(terminos_comunes_asc19),
                          Frecuencia = terminos_comunes_asc19)
                          #Total = tabla_frecuenciasasc19[names(terminos_comunes_asc19)])

# Se despliega las primeras 100 palabras con mayor frecuencia 
head(resultadosasc19, 100)
##                                               Termino Frecuencia
## personas                                     personas         74
## discapacidad                             discapacidad         71
## laboral                                       laboral         36
## trabajo                                       trabajo         36
## inclusión                                   inclusión         29
## empodera                                     empodera         22
## programa                                     programa         17
## empresa                                       empresa         14
## juntos                                         juntos         14
## empleo                                         empleo         13
## empresas                                     empresas         13
## mujeres                                       mujeres         13
## diplomado                                   diplomado         11
## capacitación                             capacitación          9
## participantes                           participantes          9
## trabajar                                     trabajar          9
## experiencia                               experiencia          8
## apoyo                                           apoyo          8
## seguridad                                   seguridad          7
## sociedad                                     sociedad          7
## social                                         social          7
## cerebral                                     cerebral          7
## parálisis                                   parálisis          7
## desarrollo                                 desarrollo          6
## necesidades                               necesidades          6
## generación                                 generación          5
## herramientas                             herramientas          5
## barreras                                     barreras          5
## oportunidades                           oportunidades          5
## prejuicios                                 prejuicios          5
## trabajadores                             trabajadores          5
## condiciones                               condiciones          5
## cuerpo                                         cuerpo          5
## instituciones                           instituciones          5
## riesgo                                         riesgo          5
## emergencia                                 emergencia          5
## manera                                         manera          4
## realizar                                     realizar          4
## vcrowvccolumnvcsingleimage vcrowvccolumnvcsingleimage          4
## actividades                               actividades          4
## capacidades                               capacidades          4
## derechos                                     derechos          4
## efectiva                                     efectiva          4
## equipo                                         equipo          4
## habilidades                               habilidades          4
## lograr                                         lograr          4
## luis                                             luis          4
## participar                                 participar          4
## potosí                                         potosí          4
## proceso                                       proceso          4
## san                                               san          4
## sociales                                     sociales          4
## sueño                                           sueño          4
## cabo                                             cabo          4
## cuales                                         cuales          4
## muchas                                         muchas          4
## proyecto                                     proyecto          4
## acceso                                         acceso          4
## acciones                                     acciones          4
## debe                                             debe          4
## diversidad                                 diversidad          4
## enfrentan                                   enfrentan          4
## fátima                                         fátima          4
## género                                         género          4
## mamá                                             mamá          4
## méxico                                         méxico          4
## necesario                                   necesario          4
## perspectiva                               perspectiva          4
## trata                                           trata          4
## militar                                       militar          4
## nacional                                     nacional          4
## públicas                                     públicas          4
## espacio                                       espacio          4
## acuerdo                                       acuerdo          4
## atención                                     atención          4
## estudio                                       estudio          4
## integración                               integración          4
## cinépolis                                   cinépolis          4
## comentario                                 comentario          4
## nombre                                         nombre          4
## web                                               web          4
## abril                                           abril          3
## briones                                       briones          3
## comunidad                                   comunidad          3
## crear                                           crear          3
## entrevistas                               entrevistas          3
## gerente                                       gerente          3
## módulo                                         módulo          3
## nueva                                           nueva          3
## obtener                                       obtener          3
## presidenta                                 presidenta          3
## quieres                                       quieres          3
## vccolumntextvccolumnvcrow   vccolumntextvccolumnvcrow          3
## ayuda                                           ayuda          3
## cambio                                         cambio          3
## comunicación                             comunicación          3
## conseguir                                   conseguir          3
## diferentes                                 diferentes          3
## décimo                                         décimo          3
## entorno                                       entorno          3

Este código generará una nube de palabras visualmente atractiva donde el tamaño de cada palabra estará relacionado con su frecuencia en el conjunto de noticias “asc19”. Se realizó una nube nueva con las palabras eliminadas manualmente.

wordcloud(names(terminos_comunes_asc19),
          terminos_comunes_asc19,
          min.freq = 5, # frecuencia minima de las palabras
          max.words = 100, # cuantas palabras caben en la nube
          random.order = FALSE,
          rot.per = 0.35,
          #brewer.pal es una paleta de colores
         colors = brewer.pal(10, "Paired"))

Este bloque de código realiza un análisis de sentimiento y genera un modelo de tópicos (topic model) para el conjunto de noticias “asc19”. Carga las bibliotecas necesarias, realiza un análisis de sentimiento, genera un modelo de tópicos con LDA, obtiene los términos más importantes de cada tópico y finalmente crea un gráfico de barras para visualizar estos términos clave. Se realizó algo similar a lo de noticias 2022-2023 y en cada línea del código se explica lo que se realiza en cada una.

library(tidyverse)
library(tidytext)
library(dplyr)
library(sentimentr)
library(topicmodels)
library(tm)
library(ggplot2)

# Leer el archivo txt
transcripcion19 <- asc19

# Analizar el sentimiento
sentimiento19 <- sentiment_by(transcripcion19)

# Generar un modelo de topic models
lda19 <- LDA(dtm2_asc19, k = 3)

# Obtener los términos más importantes de cada tópico
terms19 <- tidy(lda19, matrix = "beta") %>%
  group_by(topic) %>%
  top_n(5, wt = beta)

# Generar el gráfico
ggplot(terms19, aes(x = term, y = beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  coord_flip() +
  facet_wrap(~topic, ncol = 3)

# Obtener los términos más importantes de cada tópico en un dataframe
terms19 <- tidy(lda19, matrix = "beta")
terms19 <- terms19 %>%
  select(term, beta)

Este bloque de código realiza un análisis de sentimientos para un conjunto de textos y genera un gráfico de barras para visualizar la distribución de emociones. Utiliza el paquete “syuzhet”, traduce las emociones, muestra los resultados y crea un gráfico de barras para visualizar la distribución de las emociones en los textos analizados.

Cargar bibliotecas necesarias: syuzhet: Proporciona funciones para el análisis de sentimientos. RColorBrewer: Ofrece paletas de colores para gráficos. tm: Herramientas para el procesamiento de texto y creación de corpus.

Concatenar los textos limpios en un solo vector: Se toma el resultado del análisis de términos comunes (resultadosasc19) y se une en un solo vector llamado texto_palabrasasc19.

Obtener el análisis de sentimientos con syuzhet: Utiliza la función get_nrc_sentiment para realizar el análisis de sentimientos en el vector de texto previamente creado (texto_palabrasasc19).

Crear un diccionario de traducción de emociones: Define un diccionario para traducir los nombres de las emociones del resultado del análisis (sentimientos_df_asc19).

Mostrar los resultados del análisis de sentimientos: Muestra las primeras filas del dataframe resultado (head(sentimientos_df_asc19)) y proporciona un resumen estadístico (summary(sentimientos_df_asc19)).

# Cargar las bibliotecas necesarias
library(syuzhet)
library(RColorBrewer)
library(tm)

# Concatenar los textos limpios en un solo vector
texto_palabrasasc19<- unlist(resultadosasc19)

# Obtener el análisis de sentimientos con syuzhet
sentimientos_df_asc19  <- get_nrc_sentiment(texto_palabrasasc19 , lang = "spanish")

# Crear un diccionario de traducción de emociones
diccionario_emociones_asc19 <- c(
  "anger" = "enojo",
  "anticipation" = "anticipación",
  "disgust" = "asco",
  "fear" = "miedo",
  "joy" = "alegría",
  "sadness" = "tristeza",
  "surprise" = "sorpresa",
  "trust" = "confianza",
  "negative" = "negativo",
  "positive" = "positivo"
)

# Cambiar los nombres de las emociones en sentimientos_df
colnames(sentimientos_df_asc19) <- diccionario_emociones_asc19

# Mostrar los resultados
head(sentimientos_df_asc19)
##   enojo anticipación asco miedo alegría tristeza sorpresa confianza negativo
## 1     0            0    0     0       0        0        0         0        0
## 2     0            0    0     0       0        1        0         0        2
## 3     0            0    0     0       0        0        0         0        0
## 4     0            1    0     0       1        0        1         1        0
## 5     0            0    0     0       0        0        0         0        0
## 6     0            0    0     0       0        0        0         0        0
##   positivo
## 1        0
## 2        0
## 3        1
## 4        2
## 5        0
## 6        0
summary(sentimientos_df_asc19)
##      enojo           anticipación          asco              miedo         
##  Min.   :0.000000   Min.   :0.00000   Min.   :0.000000   Min.   :0.000000  
##  1st Qu.:0.000000   1st Qu.:0.00000   1st Qu.:0.000000   1st Qu.:0.000000  
##  Median :0.000000   Median :0.00000   Median :0.000000   Median :0.000000  
##  Mean   :0.006939   Mean   :0.01812   Mean   :0.001542   Mean   :0.009252  
##  3rd Qu.:0.000000   3rd Qu.:0.00000   3rd Qu.:0.000000   3rd Qu.:0.000000  
##  Max.   :4.000000   Max.   :3.00000   Max.   :1.000000   Max.   :2.000000  
##     alegría           tristeza           sorpresa          confianza    
##  Min.   :0.00000   Min.   :0.000000   Min.   :0.000000   Min.   :0.000  
##  1st Qu.:0.00000   1st Qu.:0.000000   1st Qu.:0.000000   1st Qu.:0.000  
##  Median :0.00000   Median :0.000000   Median :0.000000   Median :0.000  
##  Mean   :0.01234   Mean   :0.007325   Mean   :0.007325   Mean   :0.032  
##  3rd Qu.:0.00000   3rd Qu.:0.000000   3rd Qu.:0.000000   3rd Qu.:0.000  
##  Max.   :2.00000   Max.   :1.000000   Max.   :1.000000   Max.   :3.000  
##     negativo         positivo     
##  Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000  
##  Mean   :0.0185   Mean   :0.0559  
##  3rd Qu.:0.0000   3rd Qu.:0.0000  
##  Max.   :5.0000   Max.   :4.0000
# Ajustar parámetros para mejorar la legibilidad y rotar las etiquetas
par(mar = c(5, 5, 4, 2) + 0.1)

# Crear un gráfico de barras con etiquetas rotadas
barplot(
  colSums(sentimientos_df_asc19),
  space = 0.2,
  horiz = FALSE,
  las = 2, # Rotar las etiquetas
  cex.names = 0.7,
  col = brewer.pal(n = ncol(sentimientos_df_asc19), name = "Set3"),
  main = "Análisis de Sentimientos de Asociación Civil 2018-2019",
  xlab = "Emociones",
  ylab = NULL
)

# Agregar etiquetas a las barras
text(
  x = barplot(
    colSums(sentimientos_df_asc19),
    space = 0.2,
    horiz = FALSE,
    las = 2,
    col = brewer.pal(n = ncol(sentimientos_df_asc19), name = "Set3"),
    plot = FALSE
  ),
  y = -0.5, # Ubicación vertical de las etiquetas
  labels = colSums(sentimientos_df_asc19), # Números para cada emoción
  pos = 3, # Posición de las etiquetas (3 = parte superior)
  cex = 0.7
)

###ASC 2020-2021

Cargar bibliotecas necesarias: tm: Proporciona herramientas para el procesamiento de texto y la creación de corpus. rvest: Facilita la extracción de información de páginas web.

Definir URLs de noticias: Se crea un vector llamado asc2021 que contiene las URLs de varias noticias relacionadas con la inclusión laboral de personas con discapacidad.

Iterar a través de las URLs y descargar los textos: Utiliza rvest para leer el contenido HTML de cada URL, extrae los párrafos de texto (parrafos.noticiaasc2021) y guarda el contenido en archivos de texto.

Función para limpiar el texto: Define la función limpiar_textoasc2021 que recibe un archivo como entrada, realiza diversas operaciones de limpieza (eliminación de HTML, puntuación, números, etc.) y convierte el texto a minúsculas. Además, se eliminan las stopwords en español.

Aplicar la función de limpieza a los archivos de la lista: Utiliza la función lapply para aplicar la función de limpieza a cada archivo descargado y crea una lista de textos limpios llamada textos_limpiosasc2021.

Crear corpus con textos limpios: Crea un corpus (corpusasc2021) con los textos limpios obtenidos.

Crear Document Term Matrix (DTM): Utiliza DocumentTermMatrix para construir una matriz término-documento (dtmasc2021) a partir del corpus y ves la matriz al final.

# Cargar la biblioteca tm
library(tm)
# Cargar la biblioteca rvest
library(rvest)

# Archivos a procesar
asc2021 <- c(
  "https://www.juntos.org.mx/2020/05/dia-del-trabajador-y-la-inclusion/",
  "https://www.juntos.org.mx/2021/08/juntos-llevo-a-cabo-feria-del-empleo-para-personas-con-discapacidad",
"https://www.juntos.org.mx/2021/12/la-secretaria-del-trabajo-se-compromete-con-las-personas-con-discapacidad/",
"https://www.juntos.org.mx/2021/02/27-de-febrero-dia-de-la-inclusion-laboral/",
"https://www.juntos.org.mx/2021/10/el-dia-de-hoy-30-personas-con-discapacidad-mas-tienen-la-oportunidad-de-un-empleo-digno/",
"https://www.juntos.org.mx/2021/12/continuan-los-casos-de-exito-en-la-inclusion-laboral-de-personas-con-discapacidad/"
)

# Iterar a través de las URLs y descargar los textos
archivosasc2021  <- character(0)
for (url in asc2021 ) {
  paginaasc2021  <- read_html(url)
  parrafos.noticiaasc2021  <- html_elements(paginaasc2021 , "p")
  text_contentasc2021  <- html_text(parrafos.noticiaasc2021 )
  nombre_archivoasc2021 <- gsub("https://www.juntos.org.mx/|/", "", url)
  nombre_archivoasc2021 <- paste0(nombre_archivoasc2021, ".txt")
  writeLines(text_contentasc2021 , nombre_archivoasc2021 )
  archivosasc2021  <- c(archivosasc2021 , nombre_archivoasc2021 )
  cat("Archivo descargado y guardado como", nombre_archivoasc2021 , "\n")
}
## Archivo descargado y guardado como 202005dia-del-trabajador-y-la-inclusion.txt 
## Archivo descargado y guardado como 202108juntos-llevo-a-cabo-feria-del-empleo-para-personas-con-discapacidad.txt 
## Archivo descargado y guardado como 202112la-secretaria-del-trabajo-se-compromete-con-las-personas-con-discapacidad.txt 
## Archivo descargado y guardado como 20210227-de-febrero-dia-de-la-inclusion-laboral.txt 
## Archivo descargado y guardado como 202110el-dia-de-hoy-30-personas-con-discapacidad-mas-tienen-la-oportunidad-de-un-empleo-digno.txt 
## Archivo descargado y guardado como 202112continuan-los-casos-de-exito-en-la-inclusion-laboral-de-personas-con-discapacidad.txt
# Función para limpiar el texto
limpiar_textoasc2021  <- function(archivo) {
  texto <- readLines(archivo, warn = FALSE)
  texto <- paste(texto, collapse = " ")
  textoasc2021  <- tolower(texto)
  textoasc2021 <- gsub("http\\S+|www\\.\\S+", "", textoasc2021 )
  textoasc2021  <- gsub("<.*?>", "", textoasc2021 )
  textoasc2021  <- gsub("[[:punct:]]", "", textoasc2021 )
  textoasc2021  <- gsub("\\d+", "", textoasc2021 )
  textoasc2021  <- gsub("\\s+", " ", textoasc2021 )
  textoasc2021  <- gsub("<img [^>]*>", "", textoasc2021 )  
textoasc2021 <- removeWords(textoasc2021, stopwords("es"))

  return(textoasc2021 )
}

# Aplicar la función de limpieza solo a los archivos de la lista n23
textos_limpiosasc2021  <- lapply(archivosasc2021 , limpiar_textoasc2021)

# Crear corpus con textos limpios
corpusasc2021  <- Corpus(VectorSource(textos_limpiosasc2021))

# Document Term Matrix
dtmasc2021  <- DocumentTermMatrix(corpusasc2021 )

# Ver la Matriz
inspect(dtmasc2021 )
## <<DocumentTermMatrix (documents: 6, terms: 617)>>
## Non-/sparse entries: 796/2906
## Sparsity           : 78%
## Maximal term length: 19
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs discapacidad empleo empresa empresas inclusión laboral oportunidad persona
##    1            4      0       0        2         2       2           1       0
##    2            7      4       2        3         1       2           3       1
##    3            8      0       2        2         3       2           1       1
##    4           14      5       5        3         6       3           2       5
##    5            4      3       1        2         0       0           0       1
##    6            5      0       1        1         2       3           1       1
##     Terms
## Docs personas trabajo
##    1        4       3
##    2        6       1
##    3        4       6
##    4        9       4
##    5        3       0
##    6        2       1

Se realiza lo mismo que en los códigos anteriores. Se vuelven a unir los textos limpios en un sólo vector y se obtienen los términos más comúnes de ese vector.

# Unir todos los textos limpios en un solo vector
vectorasc2021 <- unlist(textos_limpiosasc2021)

# Sumar las columnas para obtener el conteo total de cada término
conteo_total_limpioasc2021 <- colSums(as.matrix(dtmasc2021))

# Ordenar y mostrar los términos más comunes
terminos_comunes_limpioasc2021 <- sort(conteo_total_limpioasc2021, decreasing = TRUE)
head(terminos_comunes_limpioasc2021, 50)
##  discapacidad      personas       trabajo     inclusión      empresas 
##            42            28            15            14            13 
##       laboral        empleo       empresa       persona   oportunidad 
##            12            12            11             9             8 
##         tener         todas     registrad           ser           dar 
##             8             7             6             6             6 
##        juntos          cada           así           día      programa 
##             6             6             5             5             5 
##         digno      empodera         puede           vez       derecho 
##             5             5             5             5             4 
##   experiencia           hoy         mejor         parte         valor 
##             4             4             4             4             4 
##        evento    interesada      vacantes          vida        visual 
##             4             4             4             4             4 
##   habilidades        acceso  contratación        género         mayor 
##             4             4             4             4             4 
##         menos      trabajar    compromiso         hacer        lograr 
##             4             4             3             3             3 
## oportunidades       aurrera          cabo   contáctanos         feria 
##             3             3             3             3             3

Con el texto limpio, se crea una nube de palabras tomando en cuenta la frecuencia de cada una de ellas.

library(wordcloud)
wordcloud(names(terminos_comunes_limpioasc2021), terminos_comunes_limpioasc2021, min.freq = 3, max.words = 200, random.order = FALSE, rot.per = 0.35, colors = brewer.pal(8, "Dark2"))

Posteriormente, se eliminan algunas palabras a mano que no nos serán de utilidad o que podrían arruinar el análisis. Se vuelve a hacer una limpieza de stopwords y creamos un nuevo dtm, vemos los términos más comunes y se obtiene una gráfica de frecuencias.

# Eliminar palabras específicas
palabras_eliminarasc2021 <- c("null","gtagset","function","var","pagetype", "presidente", "interlocutor", "ramírez", "reyes","erika", "vcrowvccolumnvccolumntext", "docs","embargo","correo","ser", "vez","hacer","sólo","conocer","además","así","cada","través","mayo","aunque","tener","aún","busca","cuenta","aquí","menor","puedes","puede","pueden","parte","años","docs","día","villa","electrónico","mundo","puedan","situación","puertas","primer","dentro","agradecemos","potosí","mayor","número","forma","provisión","nacobre","centro","mayor","contamos","general","cuales","celaya","muchas","llevó","gran","hoy","evento","todas","san","número","obtener","lic","pas","dar","paso","cabo","seguir","san","manera","mismo","luis","sector","mejor","director","vida","aspace","equipo","compartida","menos","cabo","dar","hoy","luis","todas","llevó","hacer","aurrera","desean","tipos","pues", "edad", "decente", "contáctanos")
corpus2_asc2021 <- tm_map(corpusasc2021, removeWords, palabras_eliminarasc2021)
## Warning in tm_map.SimpleCorpus(corpusasc2021, removeWords,
## palabras_eliminarasc2021): transformation drops documents
# Eliminar stopwords en español
corpus3_asc2021 <- tm_map(corpus2_asc2021, removeWords, stopwords("es"))
## Warning in tm_map.SimpleCorpus(corpus2_asc2021, removeWords, stopwords("es")):
## transformation drops documents
# Repetimos el análisis y comparamos los términos y la nube 
# Creamos nuevo dtm
dtm2_asc2021 <- DocumentTermMatrix(corpus3_asc2021)

#Ver matriz
inspect(dtm2_asc2021)
## <<DocumentTermMatrix (documents: 6, terms: 563)>>
## Non-/sparse entries: 687/2691
## Sparsity           : 80%
## Maximal term length: 19
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs discapacidad empleo empresa empresas inclusión laboral oportunidad persona
##    1            4      0       0        2         2       2           1       0
##    2            7      4       2        3         1       2           3       1
##    3            8      0       2        2         3       2           1       1
##    4           14      5       5        3         6       3           2       5
##    5            4      3       1        2         0       0           0       1
##    6            5      0       1        1         2       3           1       1
##     Terms
## Docs personas trabajo
##    1        4       3
##    2        6       1
##    3        4       6
##    4        9       4
##    5        3       0
##    6        2       1
# Sumar las columnas para obtener el conteo total de cada término
conteo_total_asc2021 <- colSums(as.matrix(dtm2_asc2021))

# Ordenar y mostrar los términos más comúnes
terminos_comunes_asc2021 <- sort(conteo_total_asc2021, decreasing = TRUE)
head(terminos_comunes_asc2021)
## discapacidad     personas      trabajo    inclusión     empresas      laboral 
##           42           28           15           14           13           12
# Función para limpiar el texto
limpiar_textoasc19 <- function(archivo) {
  textoasc2021 <- readLines(archivosasc2021, warn = FALSE)
  textoasc2021 <- paste(textoasc2021, collapse = " ")
  
  # Eliminar puntuación
  textoasc2021 <- gsub("[[:punct:]]", "", textoasc2021)
  
  

  # Eliminar preposiciones y superlativos
  palabrasasc2021 <- unlist(strsplit(textoasc2021, " "))
  palabras_filtradasasc2021 <- palabras[!(palabras %in% c(preposiciones, superlativos))]
  
  # Volver a unir las palabras filtradas
  #texto_filtrado <- paste(palabras_filtradas, collapse = " "
  
}

# Obtener la tabla de frecuencias de los términos
tabla_frecuenciasasc2021 <- table(conteo_total_asc2021)

# Mostrar los términos más comunes junto con sus frecuencias
resultadosasc2021 <- data.frame(Termino = names(terminos_comunes_asc2021),
                          Frecuencia = terminos_comunes_asc2021)
                         # Total = tabla_frecuenciasasc2021[names(terminos_comunes_asc2021)])

# Se despliega las primeras 100 palabras con mayor frecuencia 
head(resultadosasc2021, 100)
##                         Termino Frecuencia
## discapacidad       discapacidad         42
## personas               personas         28
## trabajo                 trabajo         15
## inclusión             inclusión         14
## empresas               empresas         13
## laboral                 laboral         12
## empleo                   empleo         12
## empresa                 empresa         11
## persona                 persona          9
## oportunidad         oportunidad          8
## registrad             registrad          6
## juntos                   juntos          6
## programa               programa          5
## digno                     digno          5
## empodera               empodera          5
## derecho                 derecho          4
## experiencia         experiencia          4
## valor                     valor          4
## interesada           interesada          4
## vacantes               vacantes          4
## visual                   visual          4
## habilidades         habilidades          4
## acceso                   acceso          4
## contratación       contratación          4
## género                   género          4
## trabajar               trabajar          4
## compromiso           compromiso          3
## lograr                   lograr          3
## oportunidades     oportunidades          3
## feria                     feria          3
## mejores                 mejores          3
## poder                     poder          3
## seguridad             seguridad          3
## trabajadores       trabajadores          3
## demanda                 demanda          3
## organización       organización          3
## productividad     productividad          3
## sociedad               sociedad          3
## abierto                 abierto          2
## asistencia           asistencia          2
## cambiar                 cambiar          2
## continuar             continuar          2
## desarrollo           desarrollo          2
## desenvolverse     desenvolverse          2
## hace                       hace          2
## talento                 talento          2
## trabajador           trabajador          2
## bimbo                     bimbo          2
## búsqueda               búsqueda          2
## cefi                       cefi          2
## colocar                 colocar          2
## destacar               destacar          2
## diferentes           diferentes          2
## empleos                 empleos          2
## entrevistaron     entrevistaron          2
## facultad               facultad          2
## gracias                 gracias          2
## medidas                 medidas          2
## motors                   motors          2
## objetivo               objetivo          2
## participantes     participantes          2
## psicología           psicología          2
## realizó                 realizó          2
## reis                       reis          2
## ustedes                 ustedes          2
## centros                 centros          2
## contar                   contar          2
## diversos               diversos          2
## encuentran           encuentran          2
## secretario           secretario          2
## según                     según          2
## trabajadoras       trabajadoras          2
## ver                         ver          2
## alguien                 alguien          2
## alta                       alta          2
## asegurar               asegurar          2
## ausentismo           ausentismo          2
## ayudarán               ayudarán          2
## beneficios           beneficios          2
## características características          2
## casos                     casos          2
## claves                   claves          2
## click                     click          2
## colaboradores     colaboradores          2
## dando                     dando          2
## deben                     deben          2
## elementos             elementos          2
## ello                       ello          2
## entorno                 entorno          2
## esforzarse           esforzarse          2
## febrero                 febrero          2
## implementar         implementar          2
## importar               importar          2
## insuficientes     insuficientes          2
## lado                       lado          2
## lealtad                 lealtad          2
## lugar                     lugar          2
## mayoría                 mayoría          2
## motivada               motivada          2
## negocio                 negocio          2

Se crea una nube de palabras, eliminando aquellas que causaban ruido y aquellas que no aportaban al análisis.

library(wordcloud)

# Crear la wordcloud
wordcloud(words = names(terminos_comunes_asc2021),
          freq = terminos_comunes_asc2021,
          min.freq = 3,           # Frecuencia mínima para incluir una palabra
          max.words = 100,        # Número máximo de palabras en la nube
          random.order = FALSE,   # Orden fijo para reproducibilidad
          rot.per = 0.35,         # Porcentaje de palabras rotadas
          colors = brewer.pal(10, "Paired"))  # Paleta de colores

Primero se cargar bibliotecas necesarias: tidyverse: Colección de paquetes para manipulación y visualización de datos. tidytext: Funciones para trabajar con texto de manera eficiente. dplyr: Herramientas para manipulación de datos. sentimentr: Análisis de sentimientos. topicmodels: Modelado de tópicos. tm: Herramientas para el procesamiento de texto. ggplot2: Biblioteca para la creación de gráficos.

Leer el archivo txt: El código asume que ya tienes un archivo de texto llamado asc2021 que contiene la transcripción de tus noticias.

Generar un modelo de Topic Models (LDA): Utiliza el paquete topicmodels para ajustar un modelo de Latent Dirichlet Allocation (LDA) a la matriz término-documento (dtm2_asc2021) creada anteriormente. Se especifica k = 3 para indicar que se desean identificar 3 tópicos.

Obtener los términos más importantes de cada tópico: Utiliza la función tidy para extraer los términos más importantes de cada tópico basándose en la probabilidad (beta).

Generar el gráfico de barras: Utiliza ggplot2 para crear un gráfico de barras apiladas que muestra la importancia de los términos en cada tópico.

library(tidyverse)
library(tidytext)
library(dplyr)
library(sentimentr)
library(topicmodels)
library(tm)
library(ggplot2)

# Leer el archivo txt
transcription2021 <- asc2021

# Generar un modelo de topic models
lda2021 <- LDA(dtm2_asc2021, k = 3)

# Obtener los términos más importantes de cada tópico
terms2021 <- tidy(lda2021, matrix = "beta") %>%
  group_by(topic) %>%
  top_n(4, wt = beta)

# Generar el gráfico
ggplot(terms2021, aes(x = term, y = beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  coord_flip() +
  facet_wrap(~topic, ncol = 3)

# Obtener los términos más importantes de cada tópico en un dataframe
terms2021 <- tidy(lda2021, matrix = "beta")
terms2021 <- terms2021 %>%
  select(term, beta)

En este apartado de hace un análisis de sentimiento nuevamente

Cargar bibliotecas necesarias: syuzhet: Herramientas para el análisis de sentimientos. RColorBrewer: Paleta de colores para gráficos. tm: Herramientas para el procesamiento de texto.

Concatenar los textos limpios en un solo vector: Utiliza la función unlist para convertir la lista de términos limpios en un vector único llamado texto_palabrasasc2021.

Obtener el análisis de sentimientos con syuzhet: Utiliza get_nrc_sentiment para obtener el análisis de sentimientos sobre el vector de palabras. La variable resultante es sentimientos_df_asc2021.

Crear un diccionario de traducción de emociones: Define un diccionario para traducir los nombres de las emociones a términos en español.

Cambiar los nombres de las emociones en sentimientos_df: Renombra las columnas del dataframe sentimientos_df_asc2021 según el diccionario de emociones.

Mostrar los resultados: Muestra las primeras filas y un resumen del dataframe de análisis de sentimientos para posteriormente crear un gráfico de barras.

# Cargar las bibliotecas necesarias
library(syuzhet)
library(RColorBrewer)
library(tm)

# Concatenar los textos limpios en un solo vector
texto_palabrasasc2021 <- unlist(resultadosasc2021)

# Obtener el análisis de sentimientos con syuzhet
sentimientos_df_asc2021  <- get_nrc_sentiment(texto_palabrasasc2021 , lang = "spanish")

# Crear un diccionario de traducción de emociones
diccionario_emociones_asc2021  <- c(
  "anger" = "enojo",
  "anticipation" = "anticipación",
  "disgust" = "asco",
  "fear" = "miedo",
  "joy" = "alegría",
  "sadness" = "tristeza",
  "surprise" = "sorpresa",
  "trust" = "confianza",
  "negative" = "negativo",
  "positive" = "positivo"
)

# Cambiar los nombres de las emociones en sentimientos_df
colnames(sentimientos_df_asc2021) <- diccionario_emociones_asc2021 

# Mostrar los resultados
head(sentimientos_df_asc2021 )
##   enojo anticipación asco miedo alegría tristeza sorpresa confianza negativo
## 1     0            0    0     0       0        1        0         0        2
## 2     0            0    0     0       0        0        0         0        0
## 3     0            1    0     0       1        0        1         1        0
## 4     0            0    0     0       0        0        0         0        0
## 5     0            0    0     0       0        0        0         0        0
## 6     0            0    0     0       0        0        0         0        0
##   positivo
## 1        0
## 2        0
## 3        2
## 4        0
## 5        0
## 6        1
summary(sentimientos_df_asc2021 )
##      enojo           anticipación          asco               miedo        
##  Min.   :0.000000   Min.   :0.00000   Min.   :0.0000000   Min.   :0.00000  
##  1st Qu.:0.000000   1st Qu.:0.00000   1st Qu.:0.0000000   1st Qu.:0.00000  
##  Median :0.000000   Median :0.00000   Median :0.0000000   Median :0.00000  
##  Mean   :0.002664   Mean   :0.02398   Mean   :0.0008881   Mean   :0.01155  
##  3rd Qu.:0.000000   3rd Qu.:0.00000   3rd Qu.:0.0000000   3rd Qu.:0.00000  
##  Max.   :1.000000   Max.   :2.00000   Max.   :1.0000000   Max.   :3.00000  
##     alegría           tristeza           sorpresa          confianza      
##  Min.   :0.00000   Min.   :0.000000   Min.   :0.000000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.000000   1st Qu.:0.000000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.000000   Median :0.000000   Median :0.00000  
##  Mean   :0.01599   Mean   :0.006217   Mean   :0.008881   Mean   :0.03819  
##  3rd Qu.:0.00000   3rd Qu.:0.000000   3rd Qu.:0.000000   3rd Qu.:0.00000  
##  Max.   :2.00000   Max.   :1.000000   Max.   :2.000000   Max.   :3.00000  
##     negativo         positivo      
##  Min.   :0.0000   Min.   :0.00000  
##  1st Qu.:0.0000   1st Qu.:0.00000  
##  Median :0.0000   Median :0.00000  
##  Mean   :0.0151   Mean   :0.06661  
##  3rd Qu.:0.0000   3rd Qu.:0.00000  
##  Max.   :3.0000   Max.   :3.00000
# Ajustar parámetros para mejorar la legibilidad y rotar las etiquetas
par(mar = c(5, 5, 4, 2) + 0.1)

# Crear un gráfico de barras con etiquetas rotadas
barplot(
  colSums(sentimientos_df_asc2021),
  space = 0.2,
  horiz = FALSE,
  las = 2, # Rotar las etiquetas
  cex.names = 0.7,
  col = brewer.pal(n = ncol(sentimientos_df_asc2021), name = "Set3"),
  main = "Análisis de Sentimientos de Asociación Civil 2020-2021",
  xlab = "Emociones",
  ylab = NULL
)

# Agregar etiquetas a las barras
text(
  x = barplot(
    colSums(sentimientos_df_asc2021),
    space = 0.2,
    horiz = FALSE,
    las = 2,
    col = brewer.pal(n = ncol(sentimientos_df_asc2021), name = "Set3"),
    plot = FALSE
  ),
  y = -0.5, # Ubicación vertical de las etiquetas
  labels = colSums(sentimientos_df_asc2021), # Números para cada emoción
  pos = 3, # Posición de las etiquetas (3 = parte superior)
  cex = 0.7
)

###ASC 2022-2023

Se realiza el proceso que se ha realizado previamente, se estraen sólo aquellos links que nos son de utilidad, sólo ahora del 2022-2023 y cambian los nombres de las variables.

# Cargar la biblioteca tm
library(tm)
# Cargar la biblioteca rvest
library(rvest)


# Archivos a procesar
asc2223 <- c(
  "https://www.juntos.org.mx/2022/04/si-eres-una-persona-con-discapacidad-ya-podras-trabajar-en-el-alto-tribunal/",
    "https://www.juntos.org.mx/2022/01/proceso-de-inclusion-laboral-de-personas-con-discapacidad-en-juntos/",
    "https://www.juntos.org.mx/2022/02/conoce-el-area-de-vinculacion-laboral-en-juntos/",
    "https://www.juntos.org.mx/2022/02/inicio-empodera-el-programa-de-inclusion-laboral-de-juntos/",
    "https://www.juntos.org.mx/2022/03/walmart-empresa-referente-en-la-inclusion-laboral/",
    "https://www.juntos.org.mx/2022/05/feria-del-empleo-juntos-para-personas-con-discapacidad/",
    "https://www.juntos.org.mx/2022/10/3er-feria-del-empleo-inclusiva-juntos/",
"https://www.juntos.org.mx/2023/02/graduacion-de-empodera-35/",
    "https://www.juntos.org.mx/2023/01/arrancara-empodera-35-de-juntos-ac/",
    "https://www.juntos.org.mx/2023/02/juntos-a-c-presenta-proyecto-de-inclusion-laboral-en-guanajuato/",
    "https://www.juntos.org.mx/2023/04/primera-feria-del-empleo-inclusiva-del-2023/",
    "https://www.juntos.org.mx/2023/04/secretaria-del-trabajo-y-juntos-a-c-firman-convenio-para-fomentar-el-empleo-de-las-personas-con-discapacidad-en-el-estado/",
    "https://www.juntos.org.mx/2023/05/siguen-las-colocaciones-de-personas-con-discapacidad-en-empleos-formales-en-slp/",
    "https://www.juntos.org.mx/2023/04/empodera-celaya-es-una-realidad/",
    "https://www.juntos.org.mx/2023/04/arranca-empodera-37/",
    "https://www.juntos.org.mx/2023/07/nacobre-apoya-la-inclusion-laboral-de-personas-con-discapacidad/",
    "https://www.juntos.org.mx/2023/08/empresas-de-diversos-giros-y-tamanos-continuan-abriendo-oportunidades-laborales/",
    "https://www.juntos.org.mx/2023/10/trabajando-en-dignidad/",
    "https://www.juntos.org.mx/2023/03/felicidades-a-la-generacion-36-empodera%ef%bf%bc/",
    "https://www.juntos.org.mx/2023/03/hacia-la-inclusion-de-mujeres-con-discapacidad-en-puestos-politicos-de-relevancia/",
    "https://www.juntos.org.mx/2023/04/ppm-se-suma-a-la-inclusion-laboral-de-personas-con-discapacidad-en-slp/",
    "https://www.juntos.org.mx/2023/05/siguen-las-colocaciones-de-personas-con-discapacidad-en-empleos-formales-en-slp/",
    "https://www.juntos.org.mx/2023/04/arranca-empodera-37/"
)

# Iterar a través de las URLs y descargar los textos
archivosasc2223  <- character(0)
for (url in asc2223 ) {
  paginaasc2223  <- read_html(url)
  parrafos.noticiaasc2223  <- html_elements(paginaasc2223 , "p")
  text_contentasc2223 <- html_text(parrafos.noticiaasc2223 )
  nombre_archivoasc2223 <- gsub("https://www.juntos.org.mx/|/", "", url)
  nombre_archivoasc2223 <- paste0(nombre_archivoasc2223, ".txt")
  writeLines(text_contentasc2223 , nombre_archivoasc2223 )
  archivosasc2223  <- c(archivosasc2223 , nombre_archivoasc2223 )
  cat("Archivo descargado y guardado como", nombre_archivoasc2223 , "\n")
}
## Archivo descargado y guardado como 202204si-eres-una-persona-con-discapacidad-ya-podras-trabajar-en-el-alto-tribunal.txt 
## Archivo descargado y guardado como 202201proceso-de-inclusion-laboral-de-personas-con-discapacidad-en-juntos.txt 
## Archivo descargado y guardado como 202202conoce-el-area-de-vinculacion-laboral-en-juntos.txt 
## Archivo descargado y guardado como 202202inicio-empodera-el-programa-de-inclusion-laboral-de-juntos.txt 
## Archivo descargado y guardado como 202203walmart-empresa-referente-en-la-inclusion-laboral.txt 
## Archivo descargado y guardado como 202205feria-del-empleo-juntos-para-personas-con-discapacidad.txt 
## Archivo descargado y guardado como 2022103er-feria-del-empleo-inclusiva-juntos.txt 
## Archivo descargado y guardado como 202302graduacion-de-empodera-35.txt 
## Archivo descargado y guardado como 202301arrancara-empodera-35-de-juntos-ac.txt 
## Archivo descargado y guardado como 202302juntos-a-c-presenta-proyecto-de-inclusion-laboral-en-guanajuato.txt 
## Archivo descargado y guardado como 202304primera-feria-del-empleo-inclusiva-del-2023.txt 
## Archivo descargado y guardado como 202304secretaria-del-trabajo-y-juntos-a-c-firman-convenio-para-fomentar-el-empleo-de-las-personas-con-discapacidad-en-el-estado.txt 
## Archivo descargado y guardado como 202305siguen-las-colocaciones-de-personas-con-discapacidad-en-empleos-formales-en-slp.txt 
## Archivo descargado y guardado como 202304empodera-celaya-es-una-realidad.txt 
## Archivo descargado y guardado como 202304arranca-empodera-37.txt 
## Archivo descargado y guardado como 202307nacobre-apoya-la-inclusion-laboral-de-personas-con-discapacidad.txt 
## Archivo descargado y guardado como 202308empresas-de-diversos-giros-y-tamanos-continuan-abriendo-oportunidades-laborales.txt 
## Archivo descargado y guardado como 202310trabajando-en-dignidad.txt 
## Archivo descargado y guardado como 202303felicidades-a-la-generacion-36-empodera%ef%bf%bc.txt 
## Archivo descargado y guardado como 202303hacia-la-inclusion-de-mujeres-con-discapacidad-en-puestos-politicos-de-relevancia.txt 
## Archivo descargado y guardado como 202304ppm-se-suma-a-la-inclusion-laboral-de-personas-con-discapacidad-en-slp.txt 
## Archivo descargado y guardado como 202305siguen-las-colocaciones-de-personas-con-discapacidad-en-empleos-formales-en-slp.txt 
## Archivo descargado y guardado como 202304arranca-empodera-37.txt
# Función para limpiar el texto
limpiar_textoasc2223  <- function(archivo) {
  texto <- readLines(archivo, warn = FALSE)
  texto <- paste(texto, collapse = " ")
  textoasc2223  <- tolower(texto)
  textoasc2223 <- gsub("http\\S+|www\\.\\S+", "", textoasc2223 )
  textoasc2223  <- gsub("<.*?>", "", textoasc2223 )
  textoasc2223  <- gsub("[[:punct:]]", "", textoasc2223 )
  textoasc2223  <- gsub("\\d+", "", textoasc2223 )
  textoasc2223  <- gsub("\\s+", " ", textoasc2223 )
  textoasc2223  <- gsub("<img [^>]*>", "", textoasc2223 ) 
  textoasc2223 <- removeWords(textoasc2223, stopwords("es"))
  return(textoasc2223 )
}

# Aplicar la función de limpieza solo a los archivos de la lista n23
textos_limpiosasc2223  <- lapply(archivosasc2223 , limpiar_textoasc2223 )

# Corpus con textos limpios
corpusasc2223  <- Corpus(VectorSource(textos_limpiosasc2223 ))

# Document Term Matrix
dtmasc2223  <- DocumentTermMatrix(corpusasc2223 )

# Ver la Matriz
inspect(dtmasc2223 )
## <<DocumentTermMatrix (documents: 23, terms: 1420)>>
## Non-/sparse entries: 2824/29836
## Sparsity           : 91%
## Maximal term length: 19
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs así discapacidad empleo empodera empresas inclusión juntos laboral
##   10   4            4      1        1        0         4      2       3
##   12   2            4      1        0        1         2      4       3
##   14   5            3      2        5        0         1      5       4
##   16   0            6      1        2        1         3      3       4
##   17   1            6      0        4        6         4      0       9
##   18   3            5      1        0        2         2      2       3
##   19   5            3      3        4        1         1      2       4
##   20   2            8      0        0        0         1      2       0
##   5    0            3      0        0        0         3      0       3
##   7    2           14      4        0        6         4      8       3
##     Terms
## Docs personas programa
##   10        3        1
##   12        4        0
##   14        3        5
##   16        8        2
##   17        6        5
##   18        3        0
##   19        3        6
##   20        1        1
##   5         1        0
##   7        17        0

Mismo procedimiento que el de asc 2020-2021, se vuelven a unir todos los textos limpios en un sólo vector y aparece una tabla de frecuencias.

# Unir todos los textos limpios en un solo vector
vectorasc2223 <- unlist(textos_limpiosasc2223)

# Sumar las columnas para obtener el conteo total de cada término
conteo_total_limpioasc2223 <- colSums(as.matrix(dtmasc2223))

# Ordenar y mostrar los términos más comunes
terminos_comunes_limpioasc2223 <- sort(conteo_total_limpioasc2223, decreasing = TRUE)
head(terminos_comunes_limpioasc2223, 50)
##  discapacidad      personas       laboral        juntos     inclusión 
##            97            88            73            50            42 
##      empodera           así      empresas      programa        empleo 
##            38            36            36            35            34 
##       trabajo     registrad        social  capacitación         feria 
##            27            23            22            20            20 
##           ser          vida   oportunidad          luis       mujeres 
##            18            18            17            17            17 
##   vinculación           san    generación       agencia           lic 
##            17            16            16            16            16 
##        potosí participantes      vacantes instalaciones         todas 
##            15            14            13            13            13 
## oportunidades          cabo        sector       general      sociedad 
##            13            12            12            11            11 
##          cada        número        ámbito    colocación        seguir 
##            11            11            11            10            10 
##         éxito        pasado       calidad       obtener       gracias 
##            10            10            10            10            10 
##     laborales       empresa         forma           dif      director 
##            10            10             9             9             9

Hacemos una nube de palabras con las frecuencias anteriores.

library(wordcloud)
wordcloud(names(terminos_comunes_limpioasc2223), terminos_comunes_limpioasc2223, min.freq = 8, max.words = 200, random.order = FALSE, rot.per = 0.35, colors = brewer.pal(8, "Dark2"))
## Warning in wordcloud(names(terminos_comunes_limpioasc2223),
## terminos_comunes_limpioasc2223, : personas could not be fit on page. It will not
## be plotted.

Se eliminan algunas palabras que no nos son de utilidad y se crea un nuevo dtm para trabajar con él.

# Eliminar palabras específicas. 
palabras_eliminarasc2223 <- c("null","gtagset","function","var","pagetype", "presidente", "interlocutor", "ramírez", "reyes","erika", "vcrowvccolumnvccolumntext", "docs","embargo","correo","ser", "vez","hacer","sólo","conocer","además","así","cada","través","mayo","aunque","tener","aún","busca","cuenta","aquí","menor","puedes","puede","pueden","parte","años","docs","día","villa","electrónico","mundo","puedan","situación","puertas","primer","dentro","agradecemos","nnvcsingleimage","registrad","aspace","municipal","lic","director","celaya", "colocación","san","potosí", "vez","hacer","sólo","conocer","además","así","cada","través","mayo","aunque","tener","aún","busca","cuenta","aquí","menor","puedes","puede","pueden","parte","años","docs","día","villa","electrónico","mundo","puedan","situación","puertas","primer","dentro","agradecemos","potosí","mayor","número","forma","provisión","nacobre","centro","mayor","contamos","general","cuales","celaya","muchas","llevó","gran","hoy","evento","todas","san","número","obtener","lic","pas","dar","paso","cabo","seguir","san","manera","mismo","luis","sector","mejor","director","vida","aspace","equipo","compartida","menos","cabo","dar","hoy","luis","todas","llevó","hacer","aurrera","desean","tipos","pues","calidad","pasado", "generar", "guanajuato", "generación", "nuevas", "áreas", "colocaciones", "gracias", "presidenta", "mejorar", "coordinadora", "modelo")
corpus2_asc2223 <- tm_map(corpusasc2223, removeWords, palabras_eliminarasc2223)
## Warning in tm_map.SimpleCorpus(corpusasc2223, removeWords,
## palabras_eliminarasc2223): transformation drops documents
# Eliminar stopwords en español
corpus3_asc2223 <- tm_map(corpus2_asc2223, removeWords, stopwords("es"))
## Warning in tm_map.SimpleCorpus(corpus2_asc2223, removeWords, stopwords("es")):
## transformation drops documents
# Repetimos el análisis y comparamos los términos y la nube 
# Creamos nuevo dtm
dtm2_asc2223 <- DocumentTermMatrix(corpus3_asc2223)

#Ver matriz
inspect(dtm2_asc2223)
## <<DocumentTermMatrix (documents: 23, terms: 1336)>>
## Non-/sparse entries: 2392/28336
## Sparsity           : 92%
## Maximal term length: 19
## Weighting          : term frequency (tf)
## Sample             :
##     Terms
## Docs discapacidad empleo empodera empresas inclusión juntos laboral personas
##   10            4      1        1        0         4      2       3        3
##   12            4      1        0        1         2      4       3        4
##   14            3      2        5        0         1      5       4        3
##   16            6      1        2        1         3      3       4        8
##   17            6      0        4        6         4      0       9        6
##   18            5      1        0        2         2      2       3        3
##   19            3      3        4        1         1      2       4        3
##   20            8      0        0        0         1      2       0        1
##   5             3      0        0        0         3      0       3        1
##   7            14      4        0        6         4      8       3       17
##     Terms
## Docs programa trabajo
##   10        1       1
##   12        0       4
##   14        5       0
##   16        2       0
##   17        5       1
##   18        0       2
##   19        6       3
##   20        1       0
##   5         0       1
##   7         0       4
# Sumar las columnas para obtener el conteo total de cada término
conteo_total_asc2223 <- colSums(as.matrix(dtm2_asc2223))

# Ordenar y mostrar los términos más comúnes
terminos_comunes_asc2223 <- sort(conteo_total_asc2223, decreasing = TRUE)
head(terminos_comunes_asc2223)
## discapacidad     personas      laboral       juntos    inclusión     empodera 
##           97           88           73           50           42           38
# Función para limpiar el texto
limpiar_textoasc2223 <- function(archivo) {
  textoasc2223 <- readLines(archivosasc2223, warn = FALSE)
  textoasc2223 <- paste(textoasc2223, collapse = " ")
  
  # Eliminar puntuación
  textoasc2223 <- gsub("[[:punct:]]", "", textoasc2223)
  
  # Eliminar preposiciones y superlativos
  palabrasasc2223 <- unlist(strsplit(texto, " "))
  palabras_filtradasasc2223 <- palabras[!(palabras %in% c(preposiciones, superlativos))]
  
  # Volver a unir las palabras filtradas
  #texto_filtrado <- paste(palabras_filtradas, collapse = " ")
  
}
# Obtener la tabla de frecuencias de los términos
tabla_frecuenciasasc2223 <- table(conteo_total_asc2223)

# Mostrar los términos más comunes junto con sus frecuencias
resultadosasc2223 <- data.frame(Termino = names(terminos_comunes_asc2223),
                          Frecuencia = terminos_comunes_asc2223)
                         # Total = tabla_frecuenciasasc2223[names(terminos_comunes_asc2223)])

# Se despliega las primeras 100 palabras con mayor frecuencia 
head(resultadosasc2223, 100)
##                       Termino Frecuencia
## discapacidad     discapacidad         97
## personas             personas         88
## laboral               laboral         73
## juntos                 juntos         50
## inclusión           inclusión         42
## empodera             empodera         38
## empresas             empresas         36
## programa             programa         35
## empleo                 empleo         34
## trabajo               trabajo         27
## social                 social         22
## capacitación     capacitación         20
## feria                   feria         20
## oportunidad       oportunidad         17
## mujeres               mujeres         17
## vinculación       vinculación         17
## agencia               agencia         16
## participantes   participantes         14
## vacantes             vacantes         13
## instalaciones   instalaciones         13
## oportunidades   oportunidades         13
## sociedad             sociedad         11
## ámbito                 ámbito         11
## éxito                   éxito         10
## laborales           laborales         10
## empresa               empresa         10
## dif                       dif          9
## instituciones   instituciones          8
## habilidades       habilidades          8
## beneficios         beneficios          7
## experiencia       experiencia          7
## objetivo             objetivo          7
## colaboradores   colaboradores          7
## políticos           políticos          7
## lograr                 lograr          6
## tipo                     tipo          6
## persona               persona          6
## sociales             sociales          6
## diversas             diversas          6
## generaciones     generaciones          6
## motriz                 motriz          6
## proceso               proceso          6
## méxico                 méxico          6
## previsión           previsión          6
## walmart               walmart          6
## crear                   crear          6
## personal             personal          6
## representantes representantes          6
## camino                 camino          6
## derechos             derechos          6
## espacios             espacios          6
## solo                     solo          6
## directora           directora          6
## desarrollarse   desarrollarse          6
## cita                     cita          6
## acciones             acciones          6
## ppm                       ppm          6
## cabe                     cabe          6
## necesidad           necesidad          6
## partidos             partidos          6
## información       información          5
## mediante             mediante          5
## ciudad                 ciudad          5
## labor                   labor          5
## seguimiento       seguimiento          5
## auditiva             auditiva          5
## cambio                 cambio          5
## curso                   curso          5
## edición               edición          5
## febrero               febrero          5
## inauguración     inauguración          5
## intelectual       intelectual          5
## mes                       mes          5
## quieres               quieres          5
## concluyó             concluyó          5
## diplomado           diplomado          5
## graduados           graduados          5
## participar         participar          5
## desarrollo         desarrollo          5
## digno                   digno          5
## estatal               estatal          5
## importancia       importancia          5
## maría                   maría          5
## monserrat           monserrat          5
## vázquez               vázquez          5
## motors                 motors          5
## formal                 formal          5
## laboral              laboral           5
## logrado               logrado          5
## abril                   abril          5
## participación   participación          5
## dicha                   dicha          5
## dado                     dado          5
## entrevistas       entrevistas          5
## encuentro           encuentro          5
## acceder               acceder          4
## bolsa                   bolsa          4
## corte                   corte          4
## expresó               expresó          4
## justicia             justicia          4

Se realiza una nueva nube de palabras con los textos limpios.

wordcloud(names(terminos_comunes_asc2223),
          terminos_comunes_asc2223,
          min.freq = 7, # frecuencia minima de las palabras
          max.words = 100, # cuantas palabras caben en la nube
          random.order = FALSE,
          rot.per = 0.35,
          #brewer.pal es una paleta de colores
         colors = brewer.pal(10, "Paired"))
## Warning in wordcloud(names(terminos_comunes_asc2223),
## terminos_comunes_asc2223, : personas could not be fit on page. It will not be
## plotted.

library(ggplot2)

# Tomar los 25 términos más comunes
terminos_top_asc2223 <- names(terminos_comunes_asc2223)[1:25]

# Crear un vector con las frecuencias de estos términos
frecuencias_top_asc2223 <- terminos_comunes_asc2223[1:25]

# Definir colores personalizados
colores_asc2223 <- colorRampPalette(brewer.pal(8, "Dark2"))(100)

# Crear un gráfico de barras con colores y ajustes de tamaño de letra
barplot(frecuencias_top_asc2223, 
        names.arg = terminos_top_asc2223, 
        horiz = TRUE, 
        las = 1, 
        main = "Términos más utilizados en ASC 2019", 
        xlab = "Frecuencia", 
        col = colores_asc2223,  # Agregar los colores personalizados
        border = "white",     # Color de los bordes de las barras
        cex.names = 0.5,      # Tamaño de letra en el eje x
        cex.axis = 0.9,       # Tamaño de letra en los ejes
        cex.main = 1.2,       # Tamaño de letra en el título principal
        cex.lab = 0.9         # Tamaño de letra en las etiquetas de los ejes
)

Se realiza nuevamente un análisis de tópicos, usando la misma técnica que en años anteriores.

library(tidyverse)
library(tidytext)
library(dplyr)
library(sentimentr)
library(topicmodels)
library(tm)
library(ggplot2)

# Leer el archivo txt
transcripcion2223 <- asc2223

# Analizar el sentimiento
sentimiento2223 <- sentiment_by(transcripcion2223)

# Generar un modelo de topic models
lda2223 <- LDA(dtm2_asc2223, k = 3)

# Obtener los términos más importantes de cada tópico
terms2223 <- tidy(lda2223, matrix = "beta") %>%
  group_by(topic) %>%
  top_n(5, wt = beta)

# Generar el gráfico
ggplot(terms2223, aes(x = term, y = beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  coord_flip() +
  facet_wrap(~topic, ncol = 3)

# Obtener los términos más importantes de cada tópico en un dataframe
terms2223 <- tidy(lda2223, matrix = "beta")
terms2223 <- terms2223 %>%
  select(term, beta)

Por último, se realiza un análisis de sentimientos similar a los años anteriores, utilizanod la misma técnica.

# Cargar las bibliotecas necesarias
library(syuzhet)
library(RColorBrewer)
library(tm)

# Concatenar los textos limpios en un solo vector
texto_palabrasasc2223 <- unlist(resultadosasc2223)

# Obtener el análisis de sentimientos con syuzhet
sentimientos_df_asc2223  <- get_nrc_sentiment(texto_palabrasasc2223 , lang = "spanish")

# Crear un diccionario de traducción de emociones
diccionario_emociones_asc2223  <- c(
  "anger" = "enojo",
  "anticipation" = "anticipación",
  "disgust" = "asco",
  "fear" = "miedo",
  "joy" = "alegría",
  "sadness" = "tristeza",
  "surprise" = "sorpresa",
  "trust" = "confianza",
  "negative" = "negativo",
  "positive" = "positivo"
)

# Cambiar los nombres de las emociones en sentimientos_df
colnames(sentimientos_df_asc2223) <- diccionario_emociones_asc2223 

# Mostrar los resultados
head(sentimientos_df_asc2223 )
##   enojo anticipación asco miedo alegría tristeza sorpresa confianza negativo
## 1     0            0    0     0       0        1        0         0        2
## 2     0            0    0     0       0        0        0         0        0
## 3     0            0    0     0       0        0        0         0        0
## 4     0            0    0     0       0        0        0         0        0
## 5     0            0    0     0       0        0        0         0        0
## 6     0            0    0     0       0        0        0         0        0
##   positivo
## 1        0
## 2        0
## 3        1
## 4        0
## 5        0
## 6        0
summary(sentimientos_df_asc2223 )
##      enojo           anticipación          asco              miedo         
##  Min.   :0.000000   Min.   :0.00000   Min.   :0.000000   Min.   :0.000000  
##  1st Qu.:0.000000   1st Qu.:0.00000   1st Qu.:0.000000   1st Qu.:0.000000  
##  Median :0.000000   Median :0.00000   Median :0.000000   Median :0.000000  
##  Mean   :0.004865   Mean   :0.01609   Mean   :0.004117   Mean   :0.008608  
##  3rd Qu.:0.000000   3rd Qu.:0.00000   3rd Qu.:0.000000   3rd Qu.:0.000000  
##  Max.   :2.000000   Max.   :2.00000   Max.   :1.000000   Max.   :2.000000  
##     alegría          tristeza           sorpresa         confianza      
##  Min.   :0.0000   Min.   :0.000000   Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.0000   1st Qu.:0.000000   1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.0000   Median :0.000000   Median :0.00000   Median :0.00000  
##  Mean   :0.0116   Mean   :0.007111   Mean   :0.00524   Mean   :0.02919  
##  3rd Qu.:0.0000   3rd Qu.:0.000000   3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :2.0000   Max.   :2.000000   Max.   :1.00000   Max.   :3.00000  
##     negativo          positivo      
##  Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000  
##  Mean   :0.01647   Mean   :0.05389  
##  3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :2.00000   Max.   :3.00000
# Ajustar parámetros para mejorar la legibilidad y rotar las etiquetas
par(mar = c(5, 5, 4, 2) + 0.1)

# Crear un gráfico de barras con etiquetas rotadas
barplot(
  colSums(sentimientos_df_asc2223 ),
  space = 0.2,
  horiz = FALSE,
  las = 2, # Rotar las etiquetas
  cex.names = 0.7,
  col = brewer.pal(n = ncol(sentimientos_df_asc2223), name = "Set3"),
  main = "Análisis de Sentimientos de Asociación Civil 2022-2023",
  xlab = "Emociones",
  ylab = NULL
)

# Agregar etiquetas a las barras
text(
  x = barplot(
    colSums(sentimientos_df_asc2223),
    space = 0.2,
    horiz = FALSE,
    las = 2,
    col = brewer.pal(n = ncol(sentimientos_df_asc2223), name = "Set3"),
    plot = FALSE
  ),
  y = -0.5, # Ubicación vertical de las etiquetas
  labels = colSums(sentimientos_df_asc2223), # Números para cada emoción
  pos = 3, # Posición de las etiquetas (3 = parte superior)
  cex = 0.7
)