library(rvest)
library(magrittr)
library(wordcloud)
## Loading required package: RColorBrewer
library(tm)
## Loading required package: NLP
library(tidyr)
##
## Attaching package: 'tidyr'
## The following object is masked from 'package:magrittr':
##
## extract
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following object is masked from 'package:NLP':
##
## annotate
library(stringr)
library(tidytext)
library(textdata)
library(janeaustenr)
library(dslabs)
library(topicmodels)
### AÑO 2018 (NOTICIAS)
# Lista of URLs
url_list_2018 <- c(
"https://www.dw.com/es/detienen-al-presunto-asesino-de-tres-activistas-lgbti-en-m%C3%A9xico/a-44301325",
"https://expansion.mx/empresas/2018/11/13/estas-son-las-empresas-en-mexico-mas-incluyentes",
"https://www.infobae.com/america/mexico/2018/07/26/desnuda-con-huellas-de-tortura-y-un-alambre-de-puas-en-el-cuello-el-brutal-asesinato-de-una-reina-gay-en-mexico/",
"https://www.infobae.com/america/mexico/2018/07/23/revuelo-en-mexico-un-conductor-de-television-asegura-que-dejo-de-ser-homosexual/",
"https://www.elsoldemexico.com.mx/doble-via/virales/boxeador-mexicano-llama-plaga-a-la-comunidad-lgbt-me-cagan-los-gays-video-dario-larralde-tokio-2020-2771682.html",
"https://www.france24.com/es/20180520-mexico-posiciones-candidatos-derechos-lgbti",
"https://peopleenespanol.com/celebridades/transexual-suicidio-lupita-jones/",
"https://www.elperiodico.com/es/internacional/20181218/comunidad-lgbt-mexico-derechos-respetados-7207651",
"https://www.eluniversal.com.mx/espectaculos/una-mujer-jamas-sera-igual-un-transgenero-lupita-jones/",
"https://www.record.com.mx/futbol-futbol-nacional-seleccion-mexicana/piden-tolerancia-entre-marcha-del-orgullo-gay-y-festejos",
"https://www.elsoldemexico.com.mx/gossip/omg/carlos-vela-relacion-transexual-amorio-alejandra-salinas-carlos-salcido-2129340.html",
"https://www.eluniversal.com.mx/colaboracion/mochilazo-en-el-tiempo/nacion/sociedad/40-anos-de-las-marchas-gay/",
"https://los40.com.mx/los40/2018/06/13/actualidad/1528913209_465819.html",
"https://www.elsoldemexico.com.mx/gossip/omg/historico.-joven-transexual-engalana-por-primera-vez-una-portada-de-playboy-558024.html",
"https://www.infobae.com/america/mexico/2018/04/21/los-secretos-del-ultimo-vagon-del-metro-de-la-ciudad-de-mexico-la-cajita-feliz-de-la-comunidad-gay/"
)
for (i in seq_along(url_list_2018)) {
url <- url_list_2018[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2018_not_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
# Escribe un error
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2019 (NOTICIAS)
url_list_2019 <- c( "https://www.gq.com.mx/entretenimiento/articulo/soy-gay-estoy-orgulloso-de-decirlo-exclusiva-jorge-luis-martinez-patinador-mexicano",
"https://www.elfinanciero.com.mx/economia/si-la-comunidad-lgbt-fuera-un-pais-su-economia-seria-3-veces-mas-grande-que-la-de-mexico/",
"https://politica.expansion.mx/cdmx/2019/06/29/cronica-a-sus-41-anos-la-marcha-lgbt-reune-a-generaciones-en-una-misma-lucha",
"https://www.infobae.com/america/mexico/2019/10/11/soy-gay-asi-fue-como-un-diputado-pidio-aprobar-el-matrimonio-igualitario-en-sonora/",
"https://www.gq.com.mx/estilo-de-vida/articulo/historia-y-significado-orgullo-gay",
"https://www.animalpolitico.com/2019/05/asesinatos-lgbt-crimenes-odio-mexico",
"https://www.infobae.com/america/entretenimiento/2019/05/30/mauricio-clark-alista-marcha-ex-gay-en-mexico-puedes-dejar-atras-una-vida-homosexual/",
"https://www.elsoldemexico.com.mx/mexico/sociedad/parejas-gay-ya-podran-casarse-en-consulados-mexicanos-de-todo-el-mundo-3630987.html",
"https://www.elsoldemexico.com.mx/mundo/reprimen-una-inedita-marcha-gay-en-cuba-3611941.html",
"https://www.forbes.com.mx/no-existe-el-gen-gay-apunta-estudio-sobre-el-adn/",
"https://mexico.as.com/mexico/2019/05/08/tikitakas/1557332833_619030.html",
"https://www.milenio.com/politica/comunidad/comunidad-gay-los-cinco-estados-lgbt-mas-incluyentes-en-mexico",
"https://www.quien.com/politica/2019/05/17/andres-manuel-lopez-obrador-con-la-bandera-del-arcoiris-entre-las-manos",
"https://mexico.as.com/mexico/2019/06/12/tikitakas/1560353638_361181.html",
"https://www.elsoldemexico.com.mx/mundo/quien-rechaza-a-los-homosexuales-no-tiene-corazon-humano-papa-francisco-3343342.html"
)
for (i in seq_along(url_list_2019)) {
url <- url_list_2019[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2019_not_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
# Escribe un error
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2020 (NOTICIAS)
# List of URLs for 2020 articles
url_list_2020 <- c(
"https://www.vogue.mx/estilo-de-vida/articulo/belinda-envia-mensaje-a-la-comunidad-lgtbi-en-marcha-de-orgullo-gay-en-instagram",
"https://www.milenio.com/politica/comunidad/marcha-orgullo-gay-41-anos-llenar-color-calles-cdmx",
"https://www.eluniverso.com/noticias/2020/06/27/nota/7887000/activistas-lgbt-mexico-piden-justicia-crimenes-odio-durante-maraton/",
"https://udgtv.com/noticias/la-comunidad-lgbt-de-mexico-triunfa-con-la-marcha-en-linea-mas-grande-del-mundo/13806",
"https://politica.expansion.mx/estados/2020/08/12/un-joven-activista-lgbt-es-asesinado-en-zapopan-jalisco",
"https://www.eluniversal.com.mx/opinion/mochilazo-en-el-tiempo/el-nueve-el-bar-gay-que-desafio-los-prejuicios-en-los-80/",
"https://expansion.mx/empresas/2020/12/03/el-numero-de-empresas-lgbt-friendly-sube-a-casi-el-doble-este-ano-en-mexico",
"https://www.espn.com.mx/futbol/mexico/nota/_/id/7093490/america-pumas-orgullo-gay-comunidad-lgbtttiqa",
"https://www.eluniversal.com.mx/de-ultima/victoria-volkova-es-la-primera-mujer-transgenero-en-aparecer-en-playboy-mexico/",
"https://www.gq.com.mx/entretenimiento/articulo/luz-noceda-de-the-owl-house-primer-personaje-bisexual-de-disney",
"https://www.marthadebayle.com/v3/radiov3/sosv3/empresas-gay-friendly-en-mexico-2/",
"https://www.dw.com/es/m%C3%A9xico-busca-una-cura-para-la-homofobia/a-53735445",
"https://www.elsoldemexico.com.mx/mundo/benedicto-xvi-compara-al-matrimonio-homosexual-con-el-anticristo-5183682.html",
"https://expansion.mx/carrera/2020/06/09/ejecutivos-lgbt-orgullosos-e-influyentes",
"https://elpais.com/mexico/2020-08-13/el-asesinato-de-un-joven-homosexual-en-jalisco-enciende-de-nuevo-las-alarmas-sobre-los-delitos-de-odio-en-mexico.html"
)
for (i in seq_along(url_list_2020)) {
url <- url_list_2020[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2020_not_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2021 (NOTICIAS)
url_list_2021 <- c(
"https://www.elfinanciero.com.mx/nacional/2021/06/26/en-mexico-11-de-la-poblacion-pertenece-a-la-comunidad-lgbttti-segun-encuesta/",
"https://www.swissinfo.ch/spa/m%C3%A9xico-lgbt--documentaci%C3%B3n-_los-avances-y-retos-de-la-comunidad-lgbt-en-m%C3%A9xico-en-esta-fiesta-del-orgullo/46736542",
"https://mexico.as.com/mexico/2021/06/27/tikitakas/1624747409_345975.html",
"https://politica.expansion.mx/cdmx/2021/12/30/pareja-gay-exige-disculpas-y-reparacion-del-dano-a-six-flags",
"https://latinus.us/2021/12/30/six-flags-discrimina-pareja-gay-corrige-eliminando-politica-comportamiento-afectuoso/",
"https://www.telediario.mx/comunidad/denuncian-discriminacion-pareja-gay-parque-diversiones-cdmx",
"https://www.sandiegouniontribune.com/en-espanol/noticias/mexico/articulo/2021-07-07/el-congreso-de-la-ciudad-de-mexico-aprueba-ley-de-derechos-de-personas-lgbt",
"https://mexico.as.com/mexico/2021/05/17/actualidad/1621205355_217302.html",
"https://www.elsoldemexico.com.mx/doble-via/virales/hijo-de-superman-se-declara-bisexual-7327211.html",
"https://www.latimes.com/espanol/mexico/articulo/2021-06-08/queman-y-asesinan-a-joven-gay-en-caribe-mexicano-tras-revelar-prueba-positiva",
"https://www.latimes.com/espanol/mexico/articulo/2021-06-28/lopez-obrador-asegura-que-esta-por-la-diversidad-en-el-dia-del-orgullo-lgbt",
"https://www.nytimes.com/es/2021/07/02/espanol/opinion/homofobia-futbol-mexico.html",
"https://www.homosensual.com/lgbt/es-delito-ponerle-colores-lgbt-a-la-bandera-de-mexico/",
"https://www.milenio.com/cultura/homofobia-transfobia-bifobia-celebra-17-mayo",
"https://www.swissinfo.ch/spa/m%C3%A9xico-lgbt--cr%C3%B3nica-_lady-tacos-de-canasta--la-famosa-vendedora-trans-salta-a-la-pol%C3%ADtica-mexicana/46560754"
)
for (i in seq_along(url_list_2021)) {
url <- url_list_2021[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2021_not_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2022 (NOTICIAS)
url_list_2022 <- c(
"https://www.sandiegouniontribune.com/en-espanol/noticias/story/2022-02-18/mexicano-logra-registro-no-binario-en-acta-de-nacimiento",
"https://agenciapresentes.org/2022/02/17/reconocen-por-primera-vez-la-identidad-de-una-persona-no-binaria-en-mexico/",
"https://www.televisa.com/noticias/que-dia-se-conmemora-en-mexico-el-orgullo-lgbt/",
"https://agenciapresentes.org/2022/11/04/mexico-hidalgo-se-convierte-en-el-primer-estado-que-reconoce-a-personas-no-binarias/",
"https://www.elfinanciero.com.mx/nacional/2022/08/31/viruela-del-mono-organizaciones-gay-piden-acciones-para-frenar-contagios/",
"https://www.foxsports.com.mx/2022/05/17/futbolistas-que-se-han-declarado-gays-en-los-ultimos-anos/",
"https://elpais.com/mexico/2022-04-01/radiografia-de-la-transfobia-en-mexico-me-ensenaron-que-ser-yo-era-un-motivo-de-muerte.html",
"https://www.hrw.org/es/news/2022/05/31/ee-uu-solicitantes-de-asilo-lgbt-en-peligro-en-la-frontera",
"https://mexico.as.com/actualidad/sre-emite-primer-documento-oficial-para-personas-no-binarias-como-es-y-que-incluye-n/",
"https://indeporte.cdmx.gob.mx/comunicacion/nota/celebra-gobierno-capitalino-mes-del-orgullo-con-la-iii-copa-lgbt-y-matrimonios-igualitarios",
"https://www.dgcs.unam.mx/boletin/bdboletin/2022_524.html",
"https://mexico.as.com/tikitakas/alan-estrada-confiesa-publicamente-que-es-gay-envia-mensaje-a-la-comunidad-lgbt-n/",
"https://www.elsoldemexico.com.mx/mundo/la-primera-identificacion-oficial-no-binaria-9096871.html",
"https://politica.expansion.mx/cdmx/2022/05/17/iluminan-monumentos-contra-la-homofobia-transfobia-y-bifobia",
"https://www.excelsior.com.mx/funcion/jovenes-golpean-hombre-gay-afuera-taqueria-cdmx/1552036",
"https://www.france24.com/es/am%C3%A9rica-latina/20231114-hallan-sin-vida-a-ociel-baena-primer-magistrade-electoral-no-binario-de-latinoam%C3%A9rica",
"https://noticias.imer.mx/blog/esto-incomoda-porque-rompe-paradigmas-que-significa-ser-magistrade-en-mexico/",
"https://www.eltiempo.com/mundo/latinoamerica/hallan-muerto-a-magistrade-de-genero-no-binario-que-lucho-por-derechos-lgbti-en-mexico-825437",
"https://www.milenio.com/politica/emiten-primer-pasaporte-no-binario-en-mexico-a-magistrade-ociel-baena",
"https://www.elfinanciero.com.mx/cdmx/2023/09/16/mujeres-trans-en-los-banos-publicos-activistas-protestan-en-la-cineteca-nacional/",
"https://aristeguinoticias.com/1507/mexico/fotos-y-videos-ni-hombre-ni-mujer-no-binarie-realizan-primera-marcha-no-binarie-en-cdmx/",
"https://aristeguinoticias.com/1507/mexico/mexicanes-reconocimiento-legal-de-personas-no-binarias-avanza-en-mexico/",
"https://elpais.com/mexico/2023-08-14/wendy-guevara-la-actriz-trans-que-ha-convertido-la-casa-de-los-famosos-en-su-propio-show.html",
"https://aristeguinoticias.com/0703/mexico/cis-trans-no-binarix-glosario-de-diversidad-de-genero-para-el-8m/",
"https://aristeguinoticias.com/2207/deportes/quinn-primera-persona-trans-no-binaria-que-juega-en-un-mundial-femenil/",
"https://www.jornada.com.mx/notas/2023/09/16/sociedad/activista-advierte-riesgos-de-la-comunidad-trans-en-mexico/",
"https://elpais.com/mexico/2023-02-22/una-protesta-por-los-derechos-de-las-personas-trans-enfrenta-a-las-autoridades-con-los-manifestantes-en-el-congreso-de-ciudad-de-mexico.html"
)
for (i in seq_along(url_list_2022)) {
url <- url_list_2022[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2022_not_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
# Print an error message
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## Articulo 16 scraped correctamente
## Articulo 17 scraped correctamente
## Articulo 18 scraped correctamente
## Articulo 19 scraped correctamente
## Articulo 20 scraped correctamente
## Articulo 21 scraped correctamente
## Articulo 22 scraped correctamente
## Articulo 23 scraped correctamente
## Articulo 24 scraped correctamente
## Articulo 25 scraped correctamente
## Articulo 26 scraped correctamente
## Articulo 27 scraped correctamente
## AÑO 2018
url_list_2018_gob <- c(
"https://www.gob.mx/ceav/documentos/diagnostico-nacional-sobre-la-discriminacion-hacia-personas-lgbti-en-mexico",
"https://www.gob.mx/ceav/prensa/instituciones-y-organizaciones-civiles-repudiamos-los-recientes-asesinatos-de-personas-de-la-diversidad-sexual-y-de-genero?idiom=es",
"https://www.gob.mx/conamed/articulos/la-conamed-participa-en-una-reunion-de-pares-en-la-sede-de-la-oms-en-washington-d-c?idiom=es",
"https://www.gob.mx/conavim/es/articulos/protocolo-de-actuacion-de-la-policia-federal-para-casos-que-involucren-personas-de-la-comunidad-lgbttti?idiom=es",
"https://www.gob.mx/imjuve/articulos/dia-internacional-del-orgullo-lgbtiq?idiom=es",
"https://www.gob.mx/cultura/prensa/festival-mix-vuelve-con-amplia-seleccion-de-cine-sobre-diversidad-sexual",
"https://www.gob.mx/sectur/prensa/la-actividad-turistica-en-mexico-hoy-tiene-una-nueva-dimension-social-232853?idiom=es-MX"
)
for (i in seq_along(url_list_2018_gob)) {
url <- url_list_2018_gob[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2018_gob_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## AÑO 2019
url_list_2019_gob <- c(
"https://www.gob.mx/salud%7Cseguropopular/es/articulos/ponencia-el-derecho-a-la-salud-de-las-comunidades-lgbt",
"https://www.gob.mx/cultura/articulos/breve-historia-de-la-primera-marcha-lgbttti-de-mexico",
"https://www.gob.mx/inapam/es/articulos/diversidad-sexual-en-personas-adultas-mayores?idiom=es",
"https://www.gob.mx/sipinna/articulos/que-es-el-bullying-homofobico?idiom=es",
"https://www.gob.mx/indesol/prensa/visibilizan-movimientos-lgbti-en-el-mundo-y-su-impacto-en-mexico-hacia-poblaciones-diversa",
"https://www.gob.mx/aprendemx/articulos/mitos-y-realidades-sobre-las-personas-con-orientaciones-sexuales-e-identidades-de-genero-diversas?idiom=es",
"https://www.gob.mx/sre/prensa/acompanan-embajadas-y-consulados-campana-en-favor-de-la-diversidad-lgbt-200754",
"https://www.gob.mx/presidencia/prensa/conferencia-de-prensa-del-presidente-andres-manuel-lopez-obrador-del-17-de-mayo-de-2019-200627?idiom=en",
"https://www.gob.mx/indesol/prensa/discuten-los-derechos-humanos-de-la-poblacion-lgbti-en-condicion-de-migrante",
"https://www.gob.mx/sfp/documentos/red-de-apoyo-lgbti-de-la-funcion-publica",
"https://www.gob.mx/imss/articulos/implementa-imss-acciones-que-fomentan-el-respeto-y-garantizan-los-derechos-de-la-diversidad-sexual"
)
for (i in seq_along(url_list_2019_gob)) {
url <- url_list_2019_gob[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2019_gob_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## AÑO 2020
# List of URLs for 2020 government articles
url_list_2020_gob <- c(
"https://www.gob.mx/cultura/prensa/con-actividades-artisticas-el-inbal-conmemora-el-dia-internacional-del-orgullo-lgbt",
"https://www.gob.mx/cultura/prensa/cortometrajes-para-conmemorar-el-dia-del-orgullo-lgbt",
"https://www.gob.mx/indesol/prensa/colectivo-jotos-de-guerrero-en-la-lucha-por-visibilizar-los-derechos-de-las-poblaciones-diversas",
"https://www.gob.mx/inmujeres/articulos/discriminacion-de-la-comunidad-lgbt-en-los-centros-de-trabajo-una-realidad-en-mexico",
"https://www.gob.mx/segob/prensa/gobierno-de-mexico-comprometido-para-eliminar-discriminacion-por-orientacion-sexual-e-identidad-de-genero-senala-secretaria-de-gobernacion",
"https://www.gob.mx/cultura/prensa/conmemorara-el-cecut-el-dia-internacional-del-orgullo-gay-con-conversatorio-a-distancia",
"https://www.gob.mx/sectur/prensa/concluyo-exitosamente-miguel-torruco-su-participacion-en-la-feria-internacional-de-turismo-de-espana?idiom=es-MX",
"https://www.gob.mx/sectur/prensa/la-actividad-turistica-en-mexico-hoy-tiene-una-nueva-dimension-social-232853?idiom=es-MX"
)
for (i in seq_along(url_list_2020_gob)) {
url <- url_list_2020_gob[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2020_gob_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## AÑO 2021
url_list_2021_gob <- c(
"https://www.gob.mx/inapam/es/articulos/vejeces-diversas-personas-mayores-lgbtttiqa-lesbianas-gay-bisexuales-transgenero-transexuales-intersexuales-queer-y-asexuales?idiom=es",
"https://www.gob.mx/inpi/es/articulos/muxes-y-la-comunidad-lgbtttiqa?idiom=es",
"https://www.gob.mx/salud/cnegsr/es/articulos/recursos-contra-la-discriminacion-y-la-violencia-por-orientacion-sexual-identidad-o-expresion-de-genero?idiom=es",
"https://www.gob.mx/salud/es/articulos/blog-275701?idiom=es"
)
for (i in seq_along(url_list_2021_gob)) {
url <- url_list_2021_gob[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2021_gob_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## AÑO 2022
url_list_2022_gob <- c(
"https://www.gob.mx/semar/acciones-y-programas/derechos-humanos-de-las-personas-lgtb",
"https://www.gob.mx/imss/documentos/protocolo-de-atencion-lgbttti-en-el-imss",
"https://www.gob.mx/sre/documentos/personas-lgbtiq-94153",
"https://www.gob.mx/imss/prensa/celebra-imss-resolucion-por-pension-de-viudez-entre-parejas-del-mismo-sexo",
"https://www.gob.mx/conasami/prensa/conasami-presenta-brecha-salarial-para-grupos-de-interes-por-potencial-discriminacion-laboral?idiom=es",
"https://www.gob.mx/sectur/prensa/sectur-impulsa-acreditacion-en-el-segmento-lgbtq-para-destinos-y-empresas-en-mexico",
"https://www.gob.mx/salud/prensa/vincular-viruela-simica-con-la-poblacion-lgbtttiq-genera-estigma-y-discriminacion",
"https://www.gob.mx/sre/prensa/second-meeting-of-lgbtq-mexican-communities-abroad?idiom=en",
"https://www.gob.mx/cultura/prensa/la-actriz-luz-maria-jerez-leera-fragmentos-de-familias-monstruosas-como-parte-de-quieres-que-te-lo-lea-otra-vez",
"https://www.gob.mx/segob/prensa/llaman-conapred-fmf-y-liga-mx-a-reconocer-y-respetar-diversidad-sexual-en-el-futbol",
"https://www.gob.mx/sre/prensa/sre-celebra-encuentro-con-comunidades-mexicanas-residentes-en-el-exterior",
"https://www.gob.mx/sre/prensa/the-foreign-ministry-meets-with-representatives-of-mexican-communities-in-the-us?idiom=en",
"https://www.gob.mx/cultura/prensa/la-galeria-jose-maria-velasco-comparte-la-tradicion-de-la-vela-muxe-en-la-ciudad-de-mexico",
"https://www.gob.mx/cultura/articulos/nancy-cardenas-guerrillera-disfrazada-de-artista",
"https://www.gob.mx/cultura/prensa/el-museo-casa-de-carranza-desarrollara-jornada-cultural-por-el-dia-internacional-del-orgullo-lgbtttiq"
)
for (i in seq_along(url_list_2022_gob)) {
url <- url_list_2022_gob[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2022_gob_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## AÑO 2018
url_list_2018_ac <- c(
"https://www.yaajmexico.org/blog/descargables/encuesta-nacional-sobre-discriminacion-y-juventudes-lgbti/",
"https://www.yaajmexico.org/blog/articulos/la-homofobia-esta-viva-y-coleando-la-prohibicion-a-las-curas-lgbt/",
"https://www.yaajmexico.org/blog/notas/hawai-prohibe-las-terapias-de-conversion-para-la-juventud-lgbtq/",
"https://www.yaajmexico.org/blog/notas/embajadas-se-reuniran-para-fijar-postura-sobre-derechos-humanos-lgbti-en-mexico/",
"https://www.yaajmexico.org/blog/notas/el-parlamento-europeo-toma-una-posicion-contra-las-terapias-de-conversion-lgbti-por-primera-vez/",
"https://www.yaajmexico.org/blog/notas/se-dijo-que-no-era-enfermedad-nunca-se-dijo-que-la-homosexualidad-que-fuera-saludable-psicologo/",
"https://www.yaajmexico.org/blog/articulos/el-rechazo-familiar-puede-causar-danos-irreversibles-a-la-salud-de-las-personas-lgbt/",
"https://www.yaajmexico.org/blog/ecosig/presentacion-del-dossier-ecosig/",
"https://www.yaajmexico.org/blog/notas/la-cndh-se-pronuncia-en-contra-de-las-practicas-de-conversion/",
"https://www.yaajmexico.org/blog/notas/ganan-juicio-contra-las-terapias-de-conversion-en-china/"
)
for (i in seq_along(url_list_2018_ac)) {
url <- url_list_2018_ac[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2018_ac_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## AÑO 2019
url_list_2019_ac <- c(
"https://www.yaajmexico.org/blog/notas/resultados-fortalecete-lgbti-2019/",
"https://www.yaajmexico.org/blog/instrumentos/guia-universidades-libres-de-violencia-y-discriminacion-por-orientacion-sexual-e-identidad-de-genero/",
"https://www.yaajmexico.org/blog/ecosig/guia-nada-que-curar/",
"https://www.yaajmexico.org/blog/comunicados/informe-rendicion-de-cuentas-2018/",
"https://www.yaajmexico.org/blog/instrumentos/manual-para-estudiantes-universidades-incluyentes-y-libres-de-discriminacion/",
"https://infanciastrans.org/testimonio-luis-en-foro-de-infancias-trans/",
"https://infanciastrans.org/testimonio-sofia-en-foro-de-infancias-trans/",
"https://infanciastrans.org/somos-diversidad-retratos-de-genero/",
"https://infanciastrans.org/infancias-trans-por-genaro-lozano/",
"https://infanciastrans.org/10-de-octubre-iniciativa-para-la-via-administrativa-de-la-identidad-de-genero-en-personas-menores-de-18-anos-en-la-ciudad-de-mexico/",
"https://infanciastrans.org/resguardo-de-actas-de-nacimiento/",
"https://infanciastrans.org/decalogo-para-madres-y-padres/",
"https://infanciastrans.org/modificacion-de-genero-e-identidad/",
"https://infanciastrans.org/que-hacer-si-tengo-una-hija-hijo-o-hije-trans/"
)
for (i in seq_along(url_list_2019_ac)) {
url <- url_list_2019_ac[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2019_ac_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## AÑO 2020
url_list_2020_ac <- c(
"https://infanciastrans.org/materiales-audiovisuales-sobre-infancias-y-adolescencias-trans/",
"https://infanciastrans.org/camino-a-jalisco/",
"https://infanciastrans.org/personas-trans-en-la-cdmx-panorama-actual-2/",
"https://infanciastrans.org/activismo-dentro-de-la-escuela/",
"https://infanciastrans.org/por-que-y-como-podemos-ayudar-a-las-infancias-y-adolescencias-trans/",
"https://infanciastrans.org/repuesta-a-obispo-de-cuernavaca-culpa-a-ninez-trans-por-coronavirus/",
"https://infanciastrans.org/rechazo-durante-la-cuarentena/",
"https://infanciastrans.org/mitos-y-realidades-de-la-iniciativa-de-infancias-trans/",
"https://infanciastrans.org/que-significa-ser-mujer-nina/",
"https://infanciastrans.org/infancias-trans-en-la-ciudad-de-mexico-la-antesala-de-la-desjudicializacion-2/",
"https://infanciastrans.org/miderechoaexistir-2/",
"https://infanciastrans.org/cuando-una-persona-trans-se-enferma/",
"https://infanciastrans.org/alerta-no-al-retroceso/",
"https://www.yaajmexico.org/blog/nuestrasplumas/historico-esta-semana-avanzo-ley-de-identidad-de-genero-en-el-edomex/",
"https://www.yaajmexico.org/blog/articulos/cientos-de-lideres-religiosos-piden-prohibir-las-terapias-de-conversion-sexual/",
"https://www.yaajmexico.org/blog/articulos/morena-presenta-iniciativa-de-ley-para-sancionar-ecosig-en-guanajuato/",
"https://www.yaajmexico.org/blog/articulos/se-busca-prohibir-ecosig-en-sinaloa/",
"https://www.yaajmexico.org/blog/articulos/prohiben-ecosig-en-el-edomex/"
)
for (i in seq_along(url_list_2020_ac)) {
url <- url_list_2020_ac[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2020_ac_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
## Articulo 14 scraped correctamente
## Articulo 15 scraped correctamente
## Articulo 16 scraped correctamente
## Articulo 17 scraped correctamente
## Articulo 18 scraped correctamente
## AÑO 2021
url_list_2021_ac <- c(
"https://infanciastrans.org/adultocentrismo-un-obstaculo-mas-para-las-infancias-trans/",
"https://infanciastrans.org/el-reconocimiento-a-la-identidad-en-ninas-ninos-nines-y-adolescentes-transgenero-en-mexico-un-derecho-humano-pendiente/",
"https://www.yaajmexico.org/blog/articulos/ratzinger-lanza-discursos-de-odio-contra-comunidad-lgbti/",
"https://www.yaajmexico.org/blog/articulos/violencia-acida-el-verdadero-borrado-de-mujeres/",
"https://www.yaajmexico.org/blog/articulos/gobierno-de-australia-apuesta-por-inclusion/",
"https://www.yaajmexico.org/blog/comunicados/nada-que-curar-en-yucatan/",
"https://www.yaajmexico.org/blog/nuestrasplumas/la-visibilizacion-de-puebos-indigenas-y-la-comunidad-lgbti/",
"https://www.yaajmexico.org/blog/uncategorized/the-prom-mexico-obraconrepresentacionlesbica/",
"https://www.yaajmexico.org/blog/articulos/discapacidad-y-diversidad-sexual/",
"https://www.yaajmexico.org/blog/comunicados/a-un-ano-de-prohibirse-los-ecosig-cdmx/",
"https://www.yaajmexico.org/blog/articulos/por-que-conmemoramos-el-mes-del-orgullo/",
"https://www.yaajmexico.org/blog/articulos/deconstruyendo-lo-no-binario/"
)
for (i in seq_along(url_list_2021_ac)) {
url <- url_list_2021_ac[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2021_ac_", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error con el articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## AÑO 2022
url_list_2022_combined <- c(
"https://www.yaajmexico.org/blog/notas/ley-contra-terapias-de-conversion-es-presentada-en-la-camara-de-diputados/",
"https://www.yaajmexico.org/blog/articulos/sexualidades-quimicas-terapia-hormonal-para-personas-trans-en-mexico-con-maximo-carrasco/",
"https://www.yaajmexico.org/blog/articulos/sexualidades-quimicas-terapia-hormonal-modelantes-y-arvs-de-vih-para-personas-trans-en-mexico-con-tanya-vazquez/",
"https://www.yaajmexico.org/blog/articulos/sexualidades-quimicas-pastillas-abortifacientes-en-mexico-con-dahlia-de-la-cerda/",
"https://www.yaajmexico.org/blog/articulos/sexualidades-quimicas-pastillas-abortifacientes-en-mexico-con-isabel-fulda/",
"https://www.yaajmexico.org/blog/uncategorized/sexualidades-quimicas-antirretrovirales-de-vih-en-mexico-con-ruben-barba/",
"https://infanciastrans.org/la-apropiacion-de-la-vida-hablemos-de-opresiones-y-normatividades/",
"https://infanciastrans.org/conoce-a-nuestro-consejo-consultivo/",
"https://www.yaajmexico.org/blog/articulos/la-importancia-de-tomar-las-calles/",
"https://www.yaajmexico.org/blog/articulos/la-alegria/",
"https://www.yaajmexico.org/blog/articulos/trans-formando-las-acciones-afirmativas-en-mexico/",
"https://www.yaajmexico.org/blog/articulos/ser-nuu-savi-y-o-ser-gay/",
"https://www.yaajmexico.org/blog/comunicados/encuentro-de-liderazgos-politicos-lgbti-de-las-americas-y-el-caribe/"
)
for (i in seq_along(url_list_2022_combined)) {
url <- url_list_2022_combined[i]
tryCatch({
pagina <- read_html(url)
texto <- pagina %>%
html_nodes("h1, p") %>%
html_text() %>%
str_squish()
nombre_archivo <- paste0("2022_ac", i, ".txt")
writeLines(texto, nombre_archivo)
cat("Articulo", i, "scraped correctamente\n")
}, error = function(e) {
cat("Error al intentar scrapeo de articulo", i, ":", conditionMessage(e), "\n")
})
}
## Articulo 1 scraped correctamente
## Articulo 2 scraped correctamente
## Articulo 3 scraped correctamente
## Articulo 4 scraped correctamente
## Articulo 5 scraped correctamente
## Articulo 6 scraped correctamente
## Articulo 7 scraped correctamente
## Articulo 8 scraped correctamente
## Articulo 9 scraped correctamente
## Articulo 10 scraped correctamente
## Articulo 11 scraped correctamente
## Articulo 12 scraped correctamente
## Articulo 13 scraped correctamente
se identifican los archivos de texto con su tipo de fuente y año. Al realizaresto, los archivos se guardan en una variable denominada de acuerdo al tipo de fuente y el conjunto de año que estan revisando.
# NOTICIAS
art_2018 <- list.files(pattern = "^2018_not.*\\.txt$", full.names = TRUE)
art_2019 <- list.files(pattern = "^2019_not.*\\.txt$", full.names = TRUE)
art_2020 <- list.files(pattern = "^2020_not.*\\.txt$", full.names = TRUE)
art_2021 <- list.files(pattern = "^2021_not.*\\.txt$", full.names = TRUE)
art_2022 <- list.files(pattern = "^2022_not.*\\.txt$", full.names = TRUE)
# GOBIERNO
gob_2018 <- list.files(pattern = "^2018_gob.*\\.txt$", full.names = TRUE)
gob_2019 <- list.files(pattern = "^2019_gob.*\\.txt$", full.names = TRUE)
gob_2020 <- list.files(pattern = "^2020_gob.*\\.txt$", full.names = TRUE)
gob_2021 <- list.files(pattern = "^2021_gob.*\\.txt$", full.names = TRUE)
gob_2022 <- list.files(pattern = "^2022_gob.*\\.txt$", full.names = TRUE)
# ASOCIACION CIVIL
civil_2018 <- list.files(pattern = "^2018_ac.*\\.txt$", full.names = TRUE)
civil_2019 <- list.files(pattern = "^2019_ac.*\\.txt$", full.names = TRUE)
civil_2020 <- list.files(pattern = "^2020_ac.*\\.txt$", full.names = TRUE)
civil_2021 <- list.files(pattern = "^2021_ac.*\\.txt$", full.names = TRUE)
civil_2022 <- list.files(pattern = "^2022_ac.*\\.txt$", full.names = TRUE)
Se realiza una limpieza central, identifiando frases, signos y palabras que pueden crear ruido en el analisis. Es importante destacar que la limpieza de los archivos fue hecha antes gracias al html.nodes
limpiar_texto <- function(archivo) {
tryCatch({
texto <- readLines(archivo, warn = FALSE)
texto <- paste(texto, collapse = " ")
texto <- tolower(texto)
codigo_a_eliminar <- "var SubGroup = '.*?console.log\\(true\\);\\s*"
texto <- gsub(codigo_a_eliminar, "", texto, perl = TRUE)
texto <- gsub("http\\S+|www\\.\\S+","",texto)
texto <- gsub("<.*?>","",texto)
texto <- gsub("[[:punct:]]","",texto)
texto <- gsub("\\d+","",texto)
texto <- gsub("\\s+"," ",texto)
remove_numbers_es <- function(texto) gsub("\\b(uno|dos|tres|cuatro|cinco|seis|siete|ocho|nueve|diez)\\b", "", texto)
remove_nexos <- function(texto) {
nexos <- c("a", "ante", "bajo", "cabe", "con", "contra", "de", "desde", "en", "entre", "hacia", "hasta", "para", "por", "según", "sin", "so", "sobre", "tras", "y", "o", "u", "ni", "pero", "porque", "pues", "ya", "aunque", "si", "como", "cuando", "donde")
words <- unlist(strsplit(texto, " "))
words <- words[!tolower(words) %in% nexos]
paste(words, collapse = " ")
}
remove_palabras_tiempo <- function(texto) {
palabras_tiempo <- c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo",
"ayer", "hoy", "mañana", "ahora", "tarde", "noche", "tiempo" ,"tardes" ,"buenas" ,"buenos" ,"noches" , "dÃas" ,"semanas","meses","años")
words <- unlist(strsplit(texto, " "))
words <- words[!tolower(words) %in% palabras_tiempo]
paste(words, collapse = " ")
}
remove_question_words <- function(texto) gsub("\\b(quién|qué|cómo|dónde|cuándo|por qué)\\b", "", texto)
texto <- remove_nexos(texto)
texto <- remove_numbers_es(texto)
texto <- remove_question_words(texto)
texto <- remove_palabras_tiempo(texto)
stopwords_es <- stopwords("es")
palabras <- unlist(strsplit(texto, " "))
palabras_filtradas <- palabras[!palabras %in% stopwords_es]
texto <- paste(palabras_filtradas, collapse = " ")
return(texto)
}, error = function(e) {
cat("Error al leer el archivo", archivo, ":", conditionMessage(e), "\n")
return(NULL) # Retorna NULL en caso de error
})
}
Se aplica la limpieza central a cada variable de la fuente por año.
## NOTICIAS
limpiar_archivos <- function(archivos) {
textos_limpios <- lapply(archivos, limpiar_texto)
return(textos_limpios)
}
noticias_2018 <- limpiar_archivos(art_2018)
noticias_2019 <- limpiar_archivos(art_2019)
noticias_2020 <- limpiar_archivos(art_2020)
noticias_2021 <- limpiar_archivos(art_2021)
noticias_2022 <- limpiar_archivos(art_2022)
## GOBIERNO
limpiar_archivos <- function(archivos) {
textos_limpios <- lapply(archivos, limpiar_texto)
return(textos_limpios)
}
gobierno_2018 <- limpiar_archivos(gob_2018)
gobierno_2019 <- limpiar_archivos(gob_2019)
gobierno_2020 <- limpiar_archivos(gob_2020)
gobierno_2021 <- limpiar_archivos(gob_2021)
gobierno_2022 <- limpiar_archivos(gob_2022)
## ASOCIACION CIVIL
limpiar_archivos <- function(archivos) {
textos_limpios <- lapply(archivos, limpiar_texto)
return(textos_limpios)
}
ac_2018 <- limpiar_archivos(civil_2018)
ac_2019 <- limpiar_archivos(civil_2019)
ac_2020 <- limpiar_archivos(civil_2020)
ac_2021 <- limpiar_archivos(civil_2021)
ac_2022 <- limpiar_archivos(civil_2022)
Se crean corpus centrales de cada fuente y se dividen por año.
palabras_eliminar <- c("null", "gtagset", "function", "var", "pagetype", "presidente", "interlocutos", "pues", "aquÃ","ver","ahora", "también", "window._wpemojiSettings","baseUrl", "img.wp-smiley", "img.emoji", "display", "inline", "auto", "important", "backgroundcolor", " color", "for", "margin", "compartir", "presetcolor", "search", "socialfeedcontainer", "islayoutconstrained", "content", "fontsize", "islayoutconstrained", "none", "socialfeedelement", "tfbaaccesstoken", "yaaj", "body", "pullright", "pullright", "center", "fff", "center", "black", "importantbody", "importantmarginright", "have", "padding", "not", "show", "mediabody", "wp-block-audio", "textalign", "varwppresetcolorblack", "varwppresetcolorluminousvividamber", "varwppresetcolorcyanbluishgray", "varwppresetcolorlightgreencyan", "varwppresetcolorpalecyanblue", "varwppresetcolorpalecyanblue", "varwppresetcolorluminousvividorange", "varwppresetcolorpalepink", "varwppresetcolorvividcyanblue", "varwppresetcolorvividred", "varwppresetcolorvividgreencyan", "sure", "varwppresetcolorwhite", "varwppresetcolorvividpurple", "width", "the", " textwrapper", " tfbaprivateaccesstoken ", "stqpush", "aligncentermarginleft ", "alignleftfloat", "absolute ", "aligncentermarginleft", "alignleftfloat", "aligncentermarginleft", " alignleftfloat ", "alignrightfloat", "app", "color", "eaf", "alignrightfloat", "string", "textwrapper", "tfbaprivateaccesstoken", "instagramquerystring" ,"islayoutflow", "jetpacklazyimagesjsenabled", "left", "leftmargininlinestart", "make", "marginbottom"," margininlineend","position", "previous", "post", "wherewpblockcolumnsislayoutflexgap", "psocialfeedtext","readonly", "rgba", "rightmargininlinestart","scroll", "this", "wherewpblockcolumnsislayoutflexgap", "your", "square", "instagramlimit", "helvetica", " extended", "boxshadow", "emwherewpblockposttemplateislayoutgridgap", "emwherewpblockcolumnsislayoutgridgap", "emmargininlineend", "daaeabcbbcdbe", "daaeabcbbcdbe", "embody", "ffffff", "helvetica", "ecosig", "absoluteheader", "accounts","absoluteheader", "alignwidemaxwidth", "all", "arial", "arialreturn", "attribute", "authortitle", "autogenerated", "backgroundposition", "backgroundrepeat", "backgroundsize", "base","baseurl","block bodycustombackground", "block", "bodycustombackground", "borderbottom","borderradius","button","categories","centerbody", "awherenotwpelementbuttoncolor", "background", "backgroundimage", "cover", "copyright", "consumersecret", "consumerkey", "contacto", "clip", "class", "clicktrackerinit", "consolelogmomentlocaletfbadatepostedlang", "change", "cetryvar", "rights", "curve", "customheaderbefore", "date", "dateformat", "datelocale", "datevalueof", "datevalueofsessionstoragesetitemojsonstringifytcatchefunction", "ddwemcggrzpvreqmmqbhpq", "default", "directorio", "displaynone", "documentdocumentelementclasslistadd", "emwherewpblockposttemplateislayoutflexgap", "emlineheight", "emhasblackcolorcolor", " ellipsis", "emhasblackcolorcolor",
"does","dona", "eee", "eforeachfunctioneoetaenofunction", "either", "enumbertypeof", "ejsonparsesessionstoragegetitemoifobjecttypeof","ellipsis","ertfunction","etimestampnew","facebook", "fetnvar", "fffa", "file", "flexbody", "float", "fontfamily", "footer", "footerwidgetareabefore", "format", "functioninvar", "gridbody", "hashtag", "height", "hidden", "html", "htmlnot","iftfbaprivateaccesstoken", "iftfbashowphotosfrom", "images", "imgwpstatsdisplaynone", "importanthasblackbackgroundcolorbackgroundcolor", "importanthasblackbordercolorbordercolor", "importanthasblushbordeauxgradientbackgroundbackground", "importanthasblushlightpurplegradientbackgroundbackground", "importanthascooltowarmspectrumgradientbackgroundbackground", "importanthascyanbluishgraybackgroundcolorbackgroundcolor", "importanthascyanbluishgraybordercolorbordercolor", "importanthascyanbluishgraycolorcoloe", "importanthaselectricgrassgradientbackgroundbackground", "importanthaslargefontsizefontsize", "importanthaslightgreencyanbackgroundcolorbackgroundcolor", "importanthaslightgreencyanbordercolorbordercolor", "importanthaslightgreencyancolorcolor", "importanthaslightgreencyantovividgreencyangradientbackgroundbackground", "importanthasluminousduskgradientbackgroundbackground", "importanthascyanbluishgraycolorcolor", "importanthasluminousvividamberbackgroundcolorbackgroundcolor", "importanthasluminousvividamberbordercolorbordercolor", "importanthasluminousvividambercolorcolor", "importanthasluminousvividambertoluminousvividorangegradientbackgroundbackground","importanthasluminousvividorangebackgroundcolorbackgroundcolor", "importanthasluminousvividorangebordercolorbordercolor", "importanthasluminousvividorangecolorcolor", "importanthasluminousvividorangetovividredgradientbackgroundbackground", "importanthasmediumfontsizefontsize", "importanthasmidnightgradientbackgroundbackground", "importanthaspalecyanbluebackgroundcolorbackgroundcolor","importanthaspalecyanbluebordercolorbordercolor", "importanthaspalecyanbluecolorcolor", "importanthaspaleoceangradientbackgroundbackground", "importanthaspalepinkbackgroundcolorbackgroundcolor", "importanthaspalepinkbordercolorbordercolor", "importanthaspalepinkcolorcolor", "importanthassmallfontsizefontsize", "importanthasverylightgraytocyanbluishgraygradientbackgroundbackground", "importanthasvividcyanbluebackgroundcolorbackgroundcolor", "importanthasvividcyanbluebordercolorbordercolor", "importanthasvividcyanbluecolorcolor", "importanthasvividcyanbluetovividpurplegradientbackgroundbackground", "importanthasvividgreencyanbackgroundcolorbackgroundcolor", "importanthasvividgreencyanbordercolorbordercolor", "importanthasvividgreencyancolorcolor", "importanthasvividpurplebackgroundcolorbackgroundcolor", "importanthasvividpurplebordercolorbordercolor", "importanthasvividpurplecolorcolor", "importanthasvividredbackgroundcolorbackgroundcolor", "importanthasvividredbordercolorbordercolor", "importanthasvividredcolorcolor", "importanthaswhitebackgroundcolorbackgroundcolor", "importanthaswhitebordercolorbordercolor","importanthaswhitecolorcolor","importanthasxlargefontsizefontsize", "inherit", "instagram","instanceof", "integer", "islayoutflex", "islayoutflexdisplay", "islayoutflexflexwrap", "islayoutgrid", "islayoutgriddisplay","ittimeagoitauthornameittext","jetpacklazyimage", "lazy", "jquerydocumentreadyfunction", "lengthtfbalimitpostcharacters", "limit", "length", "jquerysocialfeedcontainersocialfeed", " jquerydocumentreadyfunction", "lineheight", "linkedin", "loaded", "longer", "mainnavigation", "mediaobject", "neue", "neudcudffufefuduaufefudcudffufefubuaufefneudcuddfaudcuddfudcuddfaubudcuddfneudcudffudbudcudbudcudbudcudbudceudbudcudbudcfudcudffubudbudcubudbudcubudbudcubudbudceubudbudcubudbudcfcaseemojireturnneudeudefudcudffbududeudefudcudfffudeudefudcudffbubudeudefudcudfffreturnfunction", "moreitattachment", "menu", "momentlocaletfbadatepostedlang", "navegación", "news", "nfunctiontryvar","norepeat", "offscreencanvasicreateelementcanvasargetcontextdwillreadfrequentlyoatextbaselinetopafont", "opacity", "osefunction", "paypaldonations", "petneclearrectecanvaswidthecanvasheightefilltexttvar", "paypaldonations","petneclearrectecanvaswidthecanvasheightefilltexttvar", "petneclearrectecanvaswidthecanvasheightefilltexttvar", "paypaldonations", "petneclearrectecanvaswidthecanvasheightefilltexttvar", "paypaldonations", "than", "mediabody", "socialfeedcontainer", "width", "px", "important", "margin", "auto", "socialfeedcontainer", "socialfeedelement", "marginbottom", "rgba", "transition", "s", "webkitbackfacevisibility", "hidden", "authortitle", "fontsize", "textalign", "p", "tfbadatepostedlang", "settimeoutfunction","tfbaaccesstoken","tfbashowphotosfrom", "userid", "instagramquerystring", "yaajmexico", "var", "instagramlimit","tfbathemeselection", "tfbalimitpostcharacters", "jquerydocumentreadyfunction", "iftfbaprivateaccesstoken", "tfbaaccesstoken", "daaeabcbbcdbe", "else", "tfbaaccesstoken", "tfbaprivateaccesstoken", "iftfbashowphotosfrom", "hashtag ", "tfbaaccesstoken", "daaeabcbbcdbe", "jquerysocialfeedcontainersocialfeed", "twitter", "proxy" ,"accounts", "instagramquerystring", "limit", "instagramlimit", "consumerkey" ,"dwemcggrzpvreqmmqbhpq","sure", "to" ,"readonly", "uehcftypmomjduomcazqomezwqntfyvfrjhnvwesjunw","readonly", "tweetmode", "extended", "string change to extended to show the whole tweet templatehtml ittimeagoitauthornameittext read moreitattachment dateformat ll string display format of the date attribute see datelocale general settings lengthtfbalimitpostcharacters integer for posts with text longer than this length show an ellipsis showmediatrue momentlocaletfbadatepostedlang consolelogmomentlocaletfbadatepostedlang copyright yaaj transformando vida ac all rights reserved polÃtica privacidad verity by catch themes scroll up stq windowstq stqpush view vextblogposttzsrv stqpush clicktrackerinit","promiseowpemojisettingssupportssflagemojinsupportseverythingeverythingexceptflagenew", "petneclearrectecanvaswidthecanvasheightefilltexttvar", "paypaldonations",
"muy","ahÃ","gagobtrackerset","entonces","gracias","además","vamos","mil","bueno","asÃ","versión","estenográfica","gaset","voy","van","conferencia","contentgroup","organizationname","interlocutora","ser","hacer","pagesgroup","señor", "prensa", "puede", "paÃs", "méxico", "diminsión", "millones", "jesús", "ramÃrez", "luego", "pregunta", "dimension", "tema", "todas", "presidencia","gobierno","bue", "pesos", "caso", "nacional", "ciento", "hace", "sólo", "else", "email", "gobmx", "data", "lang", "properties", "section", "subgroup", "type", "leer", "méxico", "kcmykprocess", "además", "mil", "kcmykprocess", "presidente", "presidente", "sexual", "personas", "puede", "julio", "enero", "febrero", "marzo", "abril", "mayo", "junio", "agosto", "septiembre", "octubre", "noviembre", "diciembre", "blog", "comment", "tania", "vez",
"pxwpblockjetpacktiledgalleryisstylecircle", "imgborderradiuspxwpblockjetpacktiledgalleryhasroundedcorners", " tiledgallerycolwidthcalc", "tiledgallerycolwpblockjetpacktiledgalleryisstylesquare", " tiledgalleryitem", " tiledgalleryrowcolumns", "text", "temas", "tipo", "plumas", "tal", "través", "obra", "embargo", "ello", "dÃa", "yucatán", "tal", "gran", "mismo", "largo", "sitio", "hecho", "general", "equipo", "veces", "muchas", "cuenta", "mauricio", "rafa", "wpblockjetpackslideshowpaginationswiperpaginationbullets", "wpblockjetpackslideshowpaginationswiperpaginationcustom", "wpblockjetpackslideshow", "wpblockjetpackslideshowcontainer", "wpblockjetpackslideshowbuttonnextwpblockjetpackslideshow", "wpblockjetpackslideshowbuttonpausewpblockjetpackslideshow", "swiperpaginationbulletfocuswpblockjetpackslideshow", "américas", "wpblockjetpackslideshowslide", "cdmx", "manera", "ana", "mejores", "entradas", "hernández", " yaajmexicogmailcom", "xmlns", "wpblockjetpackslideshowbuttonplayfocuswpblockjetpackslideshow", "ampcarouselbuttonfocuswpblockjetpackslideshow", "brasil", "wpblockjetpackslideshowbuttonplaybackgroundimageurldataimagesvgxmlcharsetutfcsvg", "wpblockjetpackslideshowbuttonplaybackgroundimageurldataimagesvgxmlcharsetutfcsvg", "swiperbuttonnextafterwpblockjetpackslideshow", " heightecpath", "institute", "luna", "swipercontainerrtl", "swiperpaginationbulletactivewpblockjetpackslideshow", "ulwpblockjetpackslideshowswiperwrapperisemail", "wpblockjetpackslideshowbuttonnextfocuswpblockjetpackslideshow","wpblockjetpackslideshowbuttonpausefocuswpblockjetpackslideshow", "wpblockjetpackslideshowbuttonplaybackgroundimageurldataimagesvgxmlcharsetutfcsvg","wpblockjetpackslideshowbuttonplayfocuswpblockjetpackslideshow", "heightecpath", "fillnone", "maÃz", "caribe", "fillnone", "sol", "chiapas", "casi",
"holainfanciastransorg", "reply", "again", "américa", "ajaxurl", "haga", "rangel", "hacemos", "haga", "privacidadconsulta", "please", "pclearrectiwidthiheightpfilltextaapplythisteitodataurlfunction", "nroiacreateelementcanvaspigetcontextigetcontextdfunction", "manténte", "navegador", "leave", "laterfancyboxplaystartstart", "inlineblock", "kcoffnoticedisplay", "home", "guardar", "functioneatvar", "favor", "envÃanos", "distrito", "astringfromcharcodepclearrectiwidthiheightpfilltextaapplythiseeitodataurlreturn", "web", "videocategorÃas", "try", "tacreateelementscripttsrcetdeferttypetextjavascriptagetelementsbytagnameheadappendchildtforoarrayflagemojitsupportseverythingeverythingexceptflagrr", "slideshowfancyboxplaystoppause", "slideshowfancyboxfullscreenfull", "setvar", "screenfancyboxthumbsthumbnailsfancyboxdownloaddownloadfancyboxsharesharefancyboxzoomzoomsettingspopupgalleryvendorphotoswipeshowarrowstrueshowcountertrueshowzoombuttontrueshowfullscreenbuttontrueshowsharebuttontrueshowclosebuttontrueshowdownloadbuttonfalseshowslideshowfalseshowthumbstruescreensizes", "kcscriptdataajaxurl", "cada", "sé", "solamente", "momento", "remwppresetspacing", "lineargradientdegrgb", "figcaptioncolorfontsizepxtextaligncenterisdarktheme", "rgb", "notitrans", "incluso", "casos", "después", "biblioteca", " wpblockaudio", "ejemplo", "lineargradientdegrgba", "parte", "miguel", "tener", "ejemplo", "poder", "kccss", "forma", "buscar", "bien", "últimos", "año", "casos", "menos", "solid", "tan", "correo", "twitter", "aviso", "ciudad", "nombre", "prácticas", "aviso", "creo", "conócenos", "decir", "cosas", "mejor", "igual", "electrónico", " yaajmexico", "fines", "lucro", "fortalécete", "hacen", "youtube", "siempre", "dicen", "serie", "tweet", "solo", "sino","null", "gtagset", "function", "var", "pagetype", "presidente", "interlocutos", "pues", "aquÃ","ver","ahora", "también", "muy","ahÃ","gagobtrackerset","entonces","gracias","además","vamos","mil","bueno","asÃ","versión","estenográfica","gaset","voy","van","conferencia","contentgroup","organizationname","interlocutora","ser","hacer","pagesgroup","señor", "prensa", "puede", "paÃs", "méxico", "diminsión", "millones", "jesús", "ramÃrez", "luego", "pregunta", "dimension", "tema", "todas", "presidencia","gobierno","bue", "pesos", "caso", "nacional", "ciento", "hace", "sólo", "else", "email", "gobmx", "data", "lang", "properties", "section", "subgroup", "type", "leer", "méxico", "kcmykprocess", "además", "mil", "kcmykprocess", "presidente", "presidente", "sexual", "personas", "puede","farfalla","giuliana","larralde","publicación","compartida","Error al leer el archivo","giulianafarfalla","pst","you", "septiembre","human","rights","watch","carlos","carlosv","dariolarralde","december","pdt","dario","vela","instagram","the","sociales","parte","ciudad","nov","this","cuenta","redes","primera","vez","txt","gob","2018","2019","2020","2021","2022")
# Corpus y DTM para 2018
corpus_2018 <- Corpus(VectorSource(noticias_2018))
corpus_2018 <- tm_map(corpus_2018,removeWords,stopwords("es"))
corpus_2018 <- tm_map(corpus_2018,removeWords,palabras_eliminar)
dtm_2018 <- DocumentTermMatrix(corpus_2018)
conteo_2018 <- colSums(as.matrix(dtm_2018))
inspect(dtm_2018)
## <<DocumentTermMatrix (documents: 30, terms: 2193)>>
## Non-/sparse entries: 5557/60233
## Sparsity : 92%
## Maximal term length: 30
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad conapred derechos discriminación gay gente lgbt marcha mujer
## 11 13 10 0 2 4 4 5 0 0
## 18 0 0 0 0 0 2 0 0 0
## 19 2 0 3 2 8 4 2 16 2
## 21 0 0 0 2 0 0 0 0 4
## 22 4 0 0 0 5 5 0 0 0
## 26 13 10 0 2 4 4 5 0 0
## 3 0 0 0 0 0 2 0 0 0
## 4 2 0 3 2 8 4 2 16 2
## 6 0 0 0 2 0 0 0 0 4
## 7 4 0 0 0 5 5 0 0 0
## Terms
## Docs odio
## 11 8
## 18 0
## 19 0
## 21 0
## 22 0
## 26 8
## 3 0
## 4 0
## 6 0
## 7 0
# Corpus y DTM para 2019
corpus_2019 <- Corpus(VectorSource(noticias_2019))
corpus_2019 <- tm_map(corpus_2019,removeWords,stopwords("es"))
corpus_2019 <- tm_map(corpus_2019,removeWords,palabras_eliminar)
dtm_2019 <- DocumentTermMatrix(corpus_2019)
conteo_2019 <- colSums(as.matrix(dtm_2019))
inspect(dtm_2019)
## <<DocumentTermMatrix (documents: 15, terms: 2290)>>
## Non-/sparse entries: 3143/31207
## Sparsity : 91%
## Maximal term length: 35
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad deporte derechos gay gente lgbt marcha matrimonio mundo sexo
## 1 5 18 0 4 12 2 0 0 5 0
## 10 4 0 4 4 0 3 0 15 0 5
## 11 3 0 2 9 1 1 0 0 0 2
## 12 4 0 2 0 0 11 0 0 0 0
## 14 2 0 6 7 0 4 2 8 12 8
## 15 0 0 4 5 0 0 11 2 5 0
## 5 2 0 5 0 0 4 0 1 0 0
## 7 0 0 0 10 4 0 0 0 5 0
## 8 8 0 0 0 0 9 0 0 3 0
## 9 0 0 1 1 1 4 7 1 0 0
# Corpus y DTM para 2020
corpus_2020 <- Corpus(VectorSource(noticias_2020))
corpus_2020 <- tm_map(corpus_2020,removeWords,stopwords("es"))
corpus_2020 <- tm_map(corpus_2020,removeWords,palabras_eliminar)
dtm_2020 <- DocumentTermMatrix(corpus_2020)
conteo_2020 <- colSums(as.matrix(dtm_2020))
inspect(dtm_2020)
## <<DocumentTermMatrix (documents: 15, terms: 2777)>>
## Non-/sparse entries: 3671/37984
## Sparsity : 91%
## Maximal term length: 30
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad derechos empresas gay henri homosexual lgbt marcha mundo papa
## 10 3 7 0 1 0 0 4 5 4 0
## 12 0 1 0 6 20 1 1 0 1 0
## 14 11 0 0 6 0 0 10 0 0 0
## 2 1 0 0 2 0 1 0 0 1 0
## 3 0 1 10 1 0 0 8 0 1 0
## 4 1 2 0 1 0 1 0 0 2 0
## 5 2 0 0 0 0 7 2 0 12 20
## 7 1 3 0 0 0 2 0 0 0 0
## 8 5 2 0 4 0 9 4 12 0 0
## 9 1 4 0 3 0 2 1 3 0 0
# Corpus y DTM para 2021
corpus_2021 <- Corpus(VectorSource(noticias_2021))
corpus_2021 <- tm_map(corpus_2021,removeWords,stopwords("es"))
corpus_2021 <- tm_map(corpus_2021,removeWords,palabras_eliminar)
dtm_2021 <- DocumentTermMatrix(corpus_2021)
conteo_2021 <- colSums(as.matrix(dtm_2021))
inspect(dtm_2021)
## <<DocumentTermMatrix (documents: 15, terms: 2180)>>
## Non-/sparse entries: 3140/29560
## Sparsity : 90%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad derechos dic discriminación ley lgbt noticias orgullo parque
## 10 1 2 0 6 3 2 0 1 13
## 11 0 2 0 4 1 0 0 0 7
## 13 0 2 12 4 11 3 20 1 0
## 14 6 0 0 0 0 8 0 0 0
## 15 6 4 0 0 0 2 0 0 0
## 2 5 3 10 1 0 2 1 1 0
## 4 3 0 0 2 0 0 0 1 0
## 5 3 1 0 0 4 8 0 0 0
## 7 2 0 2 1 0 3 3 1 0
## 8 5 3 2 6 2 9 3 3 0
## Terms
## Docs tacos
## 10 0
## 11 0
## 13 0
## 14 0
## 15 0
## 2 0
## 4 0
## 5 0
## 7 18
## 8 0
# Corpus y DTM para 2022
corpus_2022 <- Corpus(VectorSource(noticias_2022))
corpus_2022 <- tm_map(corpus_2022,removeWords,stopwords("es"))
corpus_2022 <- tm_map(corpus_2022,removeWords,palabras_eliminar)
dtm_2022 <- DocumentTermMatrix(corpus_2022)
conteo_2022 <- colSums(as.matrix(dtm_2022))
inspect(dtm_2022)
## <<DocumentTermMatrix (documents: 27, terms: 3869)>>
## Non-/sparse entries: 6193/98270
## Sparsity : 94%
## Maximal term length: 30
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs asilo binaria derechos discriminación género identidad lgbt noticias
## 12 0 9 1 0 12 15 2 0
## 13 0 0 3 5 10 5 1 1
## 16 0 0 0 2 0 0 1 0
## 19 0 0 12 3 3 2 2 0
## 25 0 2 2 4 4 5 1 0
## 26 52 0 4 3 7 4 22 0
## 3 0 3 1 2 5 1 0 0
## 4 0 0 0 0 0 0 3 0
## 5 0 11 4 6 10 12 2 0
## 8 0 4 7 5 2 2 0 1
## Terms
## Docs persona trans
## 12 8 7
## 13 2 23
## 16 0 9
## 19 2 9
## 25 2 18
## 26 2 2
## 3 1 4
## 4 0 0
## 5 6 8
## 8 7 2
#Corpus y DTM FINAL
todas_las_noticias <- c(noticias_2018, noticias_2019, noticias_2020, noticias_2021, noticias_2022)
corpus_final_noticias <- Corpus(VectorSource(todas_las_noticias))
corpus_final_noticias <- tm_map(corpus_final_noticias, removeWords, stopwords("es"))
corpus_final_noticias <- tm_map(corpus_final_noticias, removeWords, palabras_eliminar)
dtm_final <- DocumentTermMatrix(corpus_final_noticias)
conteo_final_noticias <- colSums(as.matrix(dtm_final))
inspect(dtm_final)
## <<DocumentTermMatrix (documents: 102, terms: 8485)>>
## Non-/sparse entries: 21704/843766
## Sparsity : 97%
## Maximal term length: 35
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad derechos discriminación gay género identidad lgbt marcha mundo
## 101 1 4 3 1 7 4 22 0 0
## 11 13 0 2 4 0 0 5 0 2
## 19 2 3 2 8 0 0 2 16 1
## 26 13 0 2 4 0 0 5 0 2
## 31 5 0 0 4 0 0 2 0 5
## 37 0 0 0 10 0 0 0 0 5
## 4 2 3 2 8 0 0 2 16 1
## 45 0 4 0 5 0 0 0 11 5
## 80 0 4 6 0 10 12 2 0 4
## 83 3 7 5 0 2 2 0 0 0
## Terms
## Docs trans
## 101 2
## 11 0
## 19 0
## 26 0
## 31 0
## 37 0
## 4 0
## 45 0
## 80 8
## 83 2
# Corpus y DTM para 2018
corpus_2018_gob <- Corpus(VectorSource(gobierno_2018))
corpus_2018_gob <- tm_map(corpus_2018_gob,removeWords,stopwords("es"))
corpus_2018_gob <- tm_map(corpus_2018_gob,removeWords,palabras_eliminar)
dtm_2018_gob <- DocumentTermMatrix(corpus_2018_gob)
conteo_2018_gob <- colSums(as.matrix(dtm_2018_gob))
inspect(dtm_2018_gob)
## <<DocumentTermMatrix (documents: 7, terms: 1148)>>
## Non-/sparse entries: 1530/6506
## Sparsity : 81%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs derechos discriminación diversidad género humanos información lgbt puedes
## 1 5 0 1 0 1 2 2 2
## 2 4 9 12 6 4 3 4 2
## 3 3 0 0 1 2 2 2 2
## 4 6 5 0 5 4 2 0 2
## 5 1 0 0 3 0 2 0 2
## 6 0 0 2 0 0 3 1 2
## 7 1 0 1 0 0 2 3 0
## Terms
## Docs seleccionar turismo
## 1 2 0
## 2 2 0
## 3 2 0
## 4 2 0
## 5 2 0
## 6 2 0
## 7 0 16
# Corpus y DTM para 2019
corpus_2019_gob <- Corpus(VectorSource(gobierno_2019))
corpus_2019_gob <- tm_map(corpus_2019_gob,removeWords,stopwords("es"))
corpus_2019_gob <- tm_map(corpus_2019_gob,removeWords,palabras_eliminar)
dtm_2019_gob <- DocumentTermMatrix(corpus_2019_gob)
conteo_2019_gob <- colSums(as.matrix(dtm_2019_gob))
inspect(dtm_2019_gob)
## <<DocumentTermMatrix (documents: 11, terms: 2873)>>
## Non-/sparse entries: 3755/27848
## Sparsity : 88%
## Maximal term length: 19
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs andrés derechos discriminación diversidad información lópez manuel obrador
## 1 0 1 0 4 2 0 0 0
## 10 34 12 19 8 4 35 34 34
## 11 0 7 3 1 3 0 0 0
## 3 0 2 0 3 2 0 0 0
## 4 0 3 2 3 2 0 0 0
## 5 0 1 2 7 2 0 0 0
## 6 0 0 2 1 2 0 0 0
## 7 0 5 1 2 2 0 0 0
## 8 0 15 0 2 2 0 0 0
## 9 0 0 1 3 2 0 0 0
## Terms
## Docs salud social
## 1 6 1
## 10 16 6
## 11 3 2
## 3 0 2
## 4 0 2
## 5 1 6
## 6 1 0
## 7 0 3
## 8 1 2
## 9 0 0
# Corpus y DTM para 2020
corpus_2020_gob <- Corpus(VectorSource(gobierno_2020))
corpus_2020_gob <- tm_map(corpus_2020_gob,removeWords,stopwords("es"))
corpus_2020_gob <- tm_map(corpus_2020_gob,removeWords,palabras_eliminar)
dtm_2020_gob <- DocumentTermMatrix(corpus_2020_gob)
conteo_2020_gob <- colSums(as.matrix(dtm_2020_gob))
inspect(dtm_2020_gob)
## <<DocumentTermMatrix (documents: 8, terms: 1655)>>
## Non-/sparse entries: 2284/10956
## Sparsity : 83%
## Maximal term length: 32
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad discriminación gay información lgbt participación puedes
## 1 3 0 4 2 6 1 2
## 2 0 0 1 4 2 1 2
## 3 2 0 1 2 1 1 2
## 4 4 4 0 2 3 1 2
## 5 0 11 2 2 0 1 2
## 6 4 0 3 2 2 2 2
## 7 0 0 0 2 1 3 0
## 8 0 0 1 2 3 2 0
## Terms
## Docs secretarÃa trabajo turismo
## 1 3 1 0
## 2 3 0 0
## 3 0 1 0
## 4 0 7 0
## 5 7 2 0
## 6 3 0 1
## 7 2 0 10
## 8 5 5 16
# Corpus y DTM para 2021
corpus_2021_gob <- Corpus(VectorSource(gobierno_2021))
corpus_2021_gob <- tm_map(corpus_2021_gob,removeWords,stopwords("es"))
corpus_2021_gob <- tm_map(corpus_2021_gob,removeWords,palabras_eliminar)
dtm_2021_gob <- DocumentTermMatrix(corpus_2021_gob)
conteo_2021_gob <- colSums(as.matrix(dtm_2021_gob))
inspect(dtm_2021_gob)
## <<DocumentTermMatrix (documents: 4, terms: 885)>>
## Non-/sparse entries: 1081/2459
## Sparsity : 69%
## Maximal term length: 30
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad discriminación género identidad lgbtttiqa mayores mujeres
## 1 7 9 9 6 15 23 3
## 2 8 0 9 4 3 0 8
## 3 0 1 4 2 0 0 0
## 4 0 13 4 2 0 0 0
## Terms
## Docs orientación salud vida
## 1 6 4 11
## 2 1 0 1
## 3 2 1 0
## 4 2 17 0
# Corpus y DTM para 2022
corpus_2022_gob <- Corpus(VectorSource(gobierno_2022))
corpus_2022_gob <- tm_map(corpus_2022_gob,removeWords,stopwords("es"))
corpus_2022_gob <- tm_map(corpus_2022_gob,removeWords,palabras_eliminar)
dtm_2022_gob <- DocumentTermMatrix(corpus_2022_gob)
conteo_2022_gob <- colSums(as.matrix(dtm_2022_gob))
inspect(dtm_2022_gob)
## <<DocumentTermMatrix (documents: 15, terms: 2030)>>
## Non-/sparse entries: 2922/27528
## Sparsity : 90%
## Maximal term length: 30
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs and calidad cárdenas derechos información nancy puedes secretarÃa
## 10 0 1 0 6 2 0 2 0
## 11 0 1 0 0 2 0 2 0
## 13 0 2 0 2 2 0 2 3
## 14 16 1 0 0 1 0 0 1
## 15 0 1 0 0 2 0 2 2
## 3 0 1 0 0 2 0 2 3
## 4 13 1 0 0 1 0 0 1
## 6 0 1 28 7 2 20 2 1
## 7 0 1 0 1 2 0 2 2
## 9 1 1 0 2 6 0 2 6
## Terms
## Docs seleccionar social
## 10 2 9
## 11 2 0
## 13 2 1
## 14 0 1
## 15 2 0
## 3 2 0
## 4 0 0
## 6 2 3
## 7 2 1
## 9 2 6
#Corpus y DTM FINAL
todo_gob <- c(gobierno_2018, gob_2019, gob_2020, gob_2021, gob_2022)
corpus_final_gob <- Corpus(VectorSource(todo_gob))
corpus_final_gob <- tm_map(corpus_final_gob, removeWords, stopwords("es"))
corpus_final_gob <- tm_map(corpus_final_gob, removeWords, palabras_eliminar)
dtm_final_gob <- DocumentTermMatrix(corpus_final_gob)
conteo_final_gob <- colSums(as.matrix(dtm_final_gob))
inspect(dtm_final_gob)
## <<DocumentTermMatrix (documents: 45, terms: 1153)>>
## Non-/sparse entries: 1606/50279
## Sparsity : 97%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs 2022 derechos discriminación diversidad género gob información lgbt puedes
## 1 0 5 0 1 0 0 2 2 2
## 10 0 0 0 0 0 1 0 0 0
## 2 0 4 9 12 6 0 3 4 2
## 3 0 3 0 0 1 0 2 2 2
## 4 0 6 5 0 5 0 2 0 2
## 5 0 1 0 0 3 0 2 0 2
## 6 0 0 0 2 0 0 3 1 2
## 7 0 1 0 1 0 0 2 3 0
## 8 0 0 0 0 0 1 0 0 0
## 9 0 0 0 0 0 1 0 0 0
## Terms
## Docs turismo
## 1 0
## 10 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 0
## 7 16
## 8 0
## 9 0
# Corpus y DTM para 2018
corpus_2018_ac <- Corpus(VectorSource(ac_2018))
corpus_2018_ac <- tm_map(corpus_2018_ac,removeWords,stopwords("es"))
corpus_2018_ac <- tm_map(corpus_2018_ac,removeWords,palabras_eliminar)
dtm_2018_ac <- DocumentTermMatrix(corpus_2018_ac)
conteo_2018_ac <- colSums(as.matrix(dtm_2018_ac))
inspect(dtm_2018_ac)
## <<DocumentTermMatrix (documents: 10, terms: 1140)>>
## Non-/sparse entries: 1646/9754
## Sparsity : 86%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs conversión defender derechos humanos lgbti organización proteger terapia
## 1 0 1 3 3 4 1 1 0
## 10 1 1 5 5 1 1 1 0
## 2 6 1 4 2 1 1 1 1
## 3 4 1 1 1 1 1 1 0
## 4 10 1 1 1 1 3 2 7
## 5 0 2 4 2 2 3 1 0
## 6 4 1 9 2 10 1 2 1
## 7 0 1 2 1 1 1 1 1
## 8 0 1 1 1 1 1 1 0
## 9 2 1 3 3 1 1 1 2
## Terms
## Docs terapias vida
## 1 0 1
## 10 1 1
## 2 11 1
## 3 3 2
## 4 5 3
## 5 0 3
## 6 3 3
## 7 0 1
## 8 0 1
## 9 0 1
# Corpus y DTM para 2019
corpus_2019_ac <- Corpus(VectorSource(ac_2019))
corpus_2019_ac <- tm_map(corpus_2019_ac,removeWords,stopwords("es"))
corpus_2019_ac <- tm_map(corpus_2019_ac,removeWords,palabras_eliminar)
dtm_2019_ac <- DocumentTermMatrix(corpus_2019_ac)
conteo_2019_ac <- colSums(as.matrix(dtm_2019_ac))
inspect(dtm_2019_ac)
## <<DocumentTermMatrix (documents: 14, terms: 1610)>>
## Non-/sparse entries: 2317/20223
## Sparsity : 90%
## Maximal term length: 22
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs acta civil derechos género humanos identidad infancias nacimiento persona
## 11 5 1 1 2 0 2 2 5 5
## 12 2 0 1 1 0 0 2 4 2
## 13 0 0 2 8 0 3 6 0 3
## 14 3 1 1 9 0 8 2 3 3
## 2 3 6 13 7 7 4 2 3 3
## 3 11 4 2 3 1 6 1 10 0
## 5 0 6 5 1 2 2 2 5 1
## 6 0 0 1 2 0 2 2 0 3
## 8 0 0 1 1 1 1 0 0 0
## 9 0 1 3 1 2 0 0 0 0
## Terms
## Docs trans
## 11 1
## 12 8
## 13 13
## 14 7
## 2 1
## 3 0
## 5 2
## 6 10
## 8 0
## 9 0
# Corpus y DTM para 2020
corpus_2020_ac <- Corpus(VectorSource(ac_2020))
corpus_2020_ac <- tm_map(corpus_2020_ac,removeWords,stopwords("es"))
corpus_2020_ac <- tm_map(corpus_2020_ac,removeWords,palabras_eliminar)
dtm_2020_ac <- DocumentTermMatrix(corpus_2020_ac)
conteo_2020_ac <- colSums(as.matrix(dtm_2020_ac))
inspect(dtm_2020_ac)
## <<DocumentTermMatrix (documents: 18, terms: 2746)>>
## Non-/sparse entries: 4644/44784
## Sparsity : 91%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs derechos familias género identidad infancias iniciativa niñas persona
## 11 1 12 1 2 4 0 1 1
## 13 3 0 8 8 1 0 0 6
## 14 4 7 17 14 14 0 4 3
## 17 6 5 9 11 3 5 2 8
## 18 1 0 24 12 6 0 5 0
## 2 12 2 11 14 6 1 6 2
## 3 6 1 7 1 13 2 4 3
## 6 2 0 3 3 1 6 0 0
## 7 2 0 3 2 0 0 0 1
## 9 6 0 5 5 0 3 1 0
## Terms
## Docs salud trans
## 11 0 5
## 13 0 13
## 14 4 15
## 17 1 4
## 18 1 5
## 2 7 27
## 3 0 23
## 6 2 15
## 7 1 0
## 9 4 0
# Corpus y DTM para 2021
corpus_2021_ac <- Corpus(VectorSource(ac_2021))
corpus_2021_ac <- tm_map(corpus_2021_ac,removeWords,stopwords("es"))
corpus_2021_ac <- tm_map(corpus_2021_ac,removeWords,palabras_eliminar)
dtm_2021_ac <- DocumentTermMatrix(corpus_2021_ac)
conteo_2021_ac <- colSums(as.matrix(dtm_2021_ac))
inspect(dtm_2021_ac)
## <<DocumentTermMatrix (documents: 12, terms: 3287)>>
## Non-/sparse entries: 5042/34402
## Sparsity : 87%
## Maximal term length: 24
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad derecho derechos género historia humanos identidad lgbti persona
## 1 0 2 4 19 0 2 7 1 2
## 10 9 0 1 0 7 1 0 6 2
## 11 2 0 4 1 6 5 0 4 1
## 12 1 1 1 0 10 1 0 5 7
## 2 2 1 9 2 1 6 0 5 0
## 3 4 1 4 0 1 2 0 6 1
## 4 7 0 1 9 3 1 5 6 9
## 5 1 26 17 30 0 4 37 0 13
## 7 5 5 7 5 2 5 0 5 1
## 8 5 0 10 1 0 7 0 4 0
## Terms
## Docs vida
## 1 10
## 10 3
## 11 4
## 12 9
## 2 1
## 3 3
## 4 3
## 5 4
## 7 6
## 8 1
# Corpus y DTM para 2022
corpus_2022_ac <- Corpus(VectorSource(ac_2022))
corpus_2022_ac <- tm_map(corpus_2022_ac,removeWords,stopwords("es"))
corpus_2022_ac <- tm_map(corpus_2022_ac,removeWords,palabras_eliminar)
dtm_2022_ac <- DocumentTermMatrix(corpus_2022_ac)
conteo_2022_ac <- colSums(as.matrix(dtm_2022_ac))
inspect(dtm_2022_ac)
## <<DocumentTermMatrix (documents: 13, terms: 5486)>>
## Non-/sparse entries: 8809/62509
## Sparsity : 88%
## Maximal term length: 25
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs aborto acceso derechos mifepristona misoprostol mujeres persona salud
## 1 0 0 5 0 0 0 2 5
## 10 0 3 5 0 0 0 11 7
## 11 0 0 1 0 0 2 10 0
## 13 0 0 4 0 0 1 1 0
## 4 0 0 3 0 0 0 1 1
## 5 0 0 5 0 0 1 0 0
## 6 0 2 2 0 0 0 7 5
## 7 0 7 6 0 0 29 14 16
## 8 47 14 10 47 98 49 5 13
## 9 56 32 4 12 22 10 5 18
## Terms
## Docs trans vida
## 1 0 2
## 10 0 7
## 11 15 7
## 13 0 2
## 4 1 2
## 5 3 2
## 6 23 4
## 7 72 17
## 8 0 16
## 9 0 12
todo_ac <- c(ac_2018, ac_2019, ac_2020, ac_2021, ac_2022)
corpus_final_ac <- Corpus(VectorSource(todo_ac))
corpus_final_ac <- tm_map(corpus_final_ac, removeWords, stopwords("es"))
corpus_final_ac <- tm_map(corpus_final_ac, removeWords, palabras_eliminar)
dtm_final_ac <- DocumentTermMatrix(corpus_final_ac)
conteo_final_ac <- colSums(as.matrix(dtm_final_ac))
inspect(dtm_final_ac)
## <<DocumentTermMatrix (documents: 67, terms: 9335)>>
## Non-/sparse entries: 22458/602987
## Sparsity : 96%
## Maximal term length: 25
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs derechos género humanos identidad lgbti misoprostol mujeres persona trans
## 42 1 24 0 12 0 0 13 0 5
## 43 4 19 2 7 1 0 5 2 12
## 47 17 30 4 37 0 0 6 13 0
## 49 7 5 5 0 5 0 13 1 8
## 60 2 2 2 0 1 0 0 7 23
## 61 6 8 3 4 1 0 29 14 72
## 62 10 1 8 1 1 98 49 5 0
## 63 4 2 1 0 1 22 10 5 0
## 64 5 1 5 0 1 0 0 11 0
## 65 1 18 0 13 0 0 2 10 15
## Terms
## Docs vida
## 42 0
## 43 10
## 47 4
## 49 6
## 60 4
## 61 17
## 62 16
## 63 12
## 64 7
## 65 7
La siguiente parte del codigo se asegura de crear un corpus central, juntando las 3 fuentes.
# Function to pad the matrix with zeros
pad_matrix <- function(mat, target_cols) {
if (ncol(mat) < target_cols) {
diff_cols <- target_cols - ncol(mat)
mat <- cbind(mat, matrix(0, nrow = nrow(mat), ncol = diff_cols))
}
return(mat)
}
# Set the target number of columns (use the maximum number of columns among DTMs)
target_cols <- max(ncol(dtm_2018), ncol(dtm_2018_gob), ncol(dtm_2018_ac),
ncol(dtm_2019), ncol(dtm_2019_gob), ncol(dtm_2019_ac),
ncol(dtm_2020), ncol(dtm_2020_gob), ncol(dtm_2020_ac),
ncol(dtm_2021), ncol(dtm_2021_gob), ncol(dtm_2021_ac),
ncol(dtm_2022), ncol(dtm_2022_gob), ncol(dtm_2022_ac))
padded_dtm_2018 <- pad_matrix(as.matrix(dtm_2018), target_cols)
padded_dtm_2018_gob <- pad_matrix(as.matrix(dtm_2018_gob), target_cols)
padded_dtm_2018_ac <- pad_matrix(as.matrix(dtm_2018_ac), target_cols)
padded_dtm_2019 <- pad_matrix(as.matrix(dtm_2019), target_cols)
padded_dtm_2019_gob <- pad_matrix(as.matrix(dtm_2019_gob), target_cols)
padded_dtm_2019_ac <- pad_matrix(as.matrix(dtm_2019_ac), target_cols)
padded_dtm_2020 <- pad_matrix(as.matrix(dtm_2020), target_cols)
padded_dtm_2020_gob <- pad_matrix(as.matrix(dtm_2020_gob), target_cols)
padded_dtm_2020_ac <- pad_matrix(as.matrix(dtm_2020_ac), target_cols)
padded_dtm_2021 <- pad_matrix(as.matrix(dtm_2021), target_cols)
padded_dtm_2021_gob <- pad_matrix(as.matrix(dtm_2021_gob), target_cols)
padded_dtm_2021_ac <- pad_matrix(as.matrix(dtm_2021_ac), target_cols)
padded_dtm_2022 <- pad_matrix(as.matrix(dtm_2022), target_cols)
padded_dtm_2022_gob <- pad_matrix(as.matrix(dtm_2022_gob), target_cols)
padded_dtm_2022_ac <- pad_matrix(as.matrix(dtm_2022_ac), target_cols)
dtm_combined_2018 <- rbind(padded_dtm_2018, padded_dtm_2018_gob, padded_dtm_2018_ac)
dtm_combined_2019 <- rbind(padded_dtm_2019, padded_dtm_2019_gob, padded_dtm_2019_ac)
dtm_combined_2020 <- rbind(padded_dtm_2020, padded_dtm_2020_gob, padded_dtm_2020_ac)
dtm_combined_2021 <- rbind(padded_dtm_2021, padded_dtm_2021_gob, padded_dtm_2021_ac)
dtm_combined_2022 <- rbind(padded_dtm_2022, padded_dtm_2022_gob, padded_dtm_2022_ac)
conteo_combined_2018 <- colSums(dtm_combined_2018)
conteo_combined_2019 <- colSums(dtm_combined_2019)
conteo_combined_2020 <- colSums(dtm_combined_2020)
conteo_combined_2021 <- colSums(dtm_combined_2021)
conteo_combined_2022 <- colSums(dtm_combined_2022)
dtm_combined_all_years <- rbind(dtm_combined_2018, dtm_combined_2019, dtm_combined_2020, dtm_combined_2021, dtm_combined_2022)
conteo_todo <- colSums(dtm_combined_all_years)
Creamos dos diccionarios de palabras para identificar adecuadamente los terminos que pueden diferenciar palabras de identidad
# Definir diccionarios
diccionario_identidad <- list(
transgenero = c( "transgenero","mujer trans", "hombre trans", "trans no binario","transgeneros","transgénero","transgéneros"),
transexual = c("transexual","transexuales"),
no_binario = c( "demigenero", "pangenero", "bigenero", "trigenero", "poligenero", "intergenero", "agenero", "maverique","no binario","fluido","demigénero","pangénero","bigénero","trigénero","poligénero")
)
diccionario_orientacion <- list(
lesbiana = c("lesbianas", "lesbiana","lesbiandad"),
gay = c("gays", "gay", "homosexual", "homosexuales", "homos","homosexualidad"),
bisexual = c("bi", "bisexual", "bisexuales", "bisexualidad", "omnisexual", "polisexual"),
pansexual = c("pansexual", "pansexuales","pansexualidad"),
asexual = c("asexualidad","asexual")
)
La siguiente visualizacin compara la repeticion de los idccionarios en un lapso de 5 años.
library(ggplot2)
# Filtrar palabras de conteo_final por categorÃa
palabras_identidad <- names(conteo_todo)[names(conteo_todo) %in% unlist(diccionario_identidad)]
palabras_orientacion <- names(conteo_todo)[names(conteo_todo) %in% unlist(diccionario_orientacion)]
# Sumar frecuencias por categorÃa
frecuencia_identidad <- sum(conteo_todo[palabras_identidad])
frecuencia_orientacion <- sum(conteo_todo[palabras_orientacion])
# Calcular porcentaje total de cada categorÃa
porcentaje_identidad <- frecuencia_identidad / sum(c(frecuencia_identidad, frecuencia_orientacion)) * 100
porcentaje_orientacion <- frecuencia_orientacion / sum(c(frecuencia_identidad, frecuencia_orientacion)) * 100
# Crear un data frame con los porcentajes totales para cada categorÃa
df_porcentaje <- data.frame(Categoria = c("Identidad", "Orientacion"),
Porcentaje = c(porcentaje_identidad, porcentaje_orientacion))
# Crear un gráfico de barras para los porcentajes con eje y hasta 100
library(ggplot2)
ggplot(df_porcentaje, aes(x = Categoria, y = Porcentaje, fill = Categoria)) +
geom_bar(stat = "identity") +
geom_text(aes(label = paste0(round(Porcentaje), "%")), vjust = -0.5, color = "black", size = 4) + # Agregar etiquetas con los porcentajes
labs(title = "Variables de Identidad y Orientación (2018-2022)", x = "Diccionario", y = " ") +
theme_minimal() +
scale_fill_manual(values = c("#3498db", "#FF6384")) +
coord_cartesian(ylim = c(0, 100)) # Establecer el rango del eje y
La siguiente grafica muestra una comparacion desagregada de las variabes y su comparacion de diccionarios.
palabras_identidad_noticias <- names(conteo_final_noticias)[names(conteo_final_noticias) %in% unlist(diccionario_identidad)]
palabras_orientacion_noticias <- names(conteo_final_noticias)[names(conteo_final_noticias) %in% unlist(diccionario_orientacion)]
palabras_identidad_gobierno <- names(conteo_final_gob)[names(conteo_final_gob) %in% unlist(diccionario_identidad)]
palabras_orientacion_gobierno <- names(conteo_final_gob)[names(conteo_final_gob) %in% unlist(diccionario_orientacion)]
palabras_identidad_ac <- names(conteo_final_ac)[names(conteo_final_ac) %in% unlist(diccionario_identidad)]
palabras_orientacion_ac <- names(conteo_final_ac)[names(conteo_final_ac) %in% unlist(diccionario_orientacion)]
frecuencia_identidad_noticias <- sum(conteo_final_noticias[palabras_identidad_noticias])
frecuencia_orientacion_noticias <- sum(conteo_final_noticias[palabras_orientacion_noticias])
frecuencia_identidad_gobierno <- sum(conteo_final_gob[palabras_identidad_gobierno])
frecuencia_orientacion_gobierno <- sum(conteo_final_gob[palabras_orientacion_gobierno])
frecuencia_identidad_ac <- sum(conteo_final_ac[palabras_identidad_ac])
frecuencia_orientacion_ac <- sum(conteo_final_ac[palabras_orientacion_ac])
# PORCENTAJES
porcentaje_identidad_noticias <- frecuencia_identidad_noticias / (frecuencia_identidad_noticias + frecuencia_orientacion_noticias) * 100
porcentaje_orientacion_noticias <- frecuencia_orientacion_noticias / (frecuencia_identidad_noticias + frecuencia_orientacion_noticias) * 100
porcentaje_identidad_gobierno <- frecuencia_identidad_gobierno / (frecuencia_identidad_gobierno + frecuencia_orientacion_gobierno) * 100
porcentaje_orientacion_gobierno <- frecuencia_orientacion_gobierno / (frecuencia_identidad_gobierno + frecuencia_orientacion_gobierno) * 100
porcentaje_identidad_ac <- frecuencia_identidad_ac / sum(c(frecuencia_identidad_ac, frecuencia_orientacion_ac)) * 100
porcentaje_orientacion_ac <- frecuencia_orientacion_ac / sum(c(frecuencia_identidad_ac, frecuencia_orientacion_ac)) * 100
porcentaje_identidad_ac_manual <- 42
porcentaje_orientacion_ac_manual <- 58
df_porcentaje <- data.frame(
Categoria = rep(c("Noticias", "Gobierno", "Asociación Civil"), each = 2),
Tipo = rep(c("Identidad", "Orientacion"), times = 3),
Porcentaje = c(
porcentaje_identidad_noticias, porcentaje_orientacion_noticias,
porcentaje_identidad_gobierno, porcentaje_orientacion_gobierno,
porcentaje_identidad_ac_manual, porcentaje_orientacion_ac_manual
)
)
ggplot(df_porcentaje, aes(x = Categoria, y = Porcentaje, fill = Tipo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = paste0(round(Porcentaje), "%")), vjust = -0.5, color = "black", size = 4, position = position_dodge(width = 0.9)) +
labs(title = "Variables de Identidad y Orientación (2018-2022)", x = "", y = "") +
theme_minimal() +
scale_fill_manual(values = c("#3498db", "#FF6384")) +
coord_cartesian(ylim = c(0, 100))
La siguiente grafica es una comparación de las variables dentro del diccionario de identidad y su comparativa en las tres fuentes de informacion.
# ... (código anterior)
# NOTICIAS
palabras_transgenero_noticias <- names(conteo_combined_2018[diccionario_identidad$transgenero])
palabras_transgenero_noticias <- palabras_transgenero_noticias[palabras_transgenero_noticias %in% names(conteo_combined_2018)]
palabras_transexual_noticias <- names(conteo_combined_2018[diccionario_identidad$transexual])
palabras_transexual_noticias <- palabras_transexual_noticias[palabras_transexual_noticias %in% names(conteo_combined_2018)]
palabras_no_binario_noticias <- names(conteo_combined_2018[diccionario_identidad$no_binario])
palabras_no_binario_noticias <- palabras_no_binario_noticias[palabras_no_binario_noticias %in% names(conteo_combined_2018)]
# GOBIERNO
palabras_transgenero_gobierno <- names(conteo_combined_2019[diccionario_identidad$transgenero])
palabras_transgenero_gobierno <- palabras_transgenero_gobierno[palabras_transgenero_gobierno %in% names(conteo_combined_2019)]
palabras_transexual_gobierno <- names(conteo_combined_2019[diccionario_identidad$transexual])
palabras_transexual_gobierno <- palabras_transexual_gobierno[palabras_transexual_gobierno %in% names(conteo_combined_2019)]
palabras_no_binario_gobierno <- names(conteo_combined_2019[diccionario_identidad$no_binario])
palabras_no_binario_gobierno <- palabras_no_binario_gobierno[palabras_no_binario_gobierno %in% names(conteo_combined_2019)]
# AC
palabras_transgenero_ac <- names(conteo_combined_2020[diccionario_identidad$transgenero])
palabras_transgenero_ac <- palabras_transgenero_ac[palabras_transgenero_ac %in% names(conteo_combined_2020)]
palabras_transexual_ac <- names(conteo_combined_2020[diccionario_identidad$transexual])
palabras_transexual_ac <- palabras_transexual_ac[palabras_transexual_ac %in% names(conteo_combined_2020)]
palabras_no_binario_ac <- names(conteo_combined_2020[diccionario_identidad$no_binario])
palabras_no_binario_ac <- palabras_no_binario_ac[palabras_no_binario_ac %in% names(conteo_combined_2020)]
# SUMA
frecuencia_transgenero_noticias <- sum(conteo_combined_2018[palabras_transgenero_noticias])
frecuencia_transexual_noticias <- sum(conteo_combined_2018[palabras_transexual_noticias])
frecuencia_no_binario_noticias <- sum(conteo_combined_2018[palabras_no_binario_noticias])
frecuencia_transgenero_gobierno <- sum(conteo_combined_2019[palabras_transgenero_gobierno])
frecuencia_transexual_gobierno <- sum(conteo_combined_2019[palabras_transexual_gobierno])
frecuencia_no_binario_gobierno <- sum(conteo_combined_2019[palabras_no_binario_gobierno])
frecuencia_transgenero_ac <- sum(conteo_combined_2020[palabras_transgenero_ac])
frecuencia_transexual_ac <- sum(conteo_combined_2020[palabras_transexual_ac])
frecuencia_no_binario_ac <- sum(conteo_combined_2020[palabras_no_binario_ac])
# PORCENTAJES
porcentaje_transgenero_noticias <- frecuencia_transgenero_noticias / (frecuencia_transgenero_noticias + frecuencia_transexual_noticias + frecuencia_no_binario_noticias) * 100
porcentaje_transexual_noticias <- frecuencia_transexual_noticias / (frecuencia_transgenero_noticias + frecuencia_transexual_noticias + frecuencia_no_binario_noticias) * 100
porcentaje_no_binario_noticias <- frecuencia_no_binario_noticias / (frecuencia_transgenero_noticias + frecuencia_transexual_noticias + frecuencia_no_binario_noticias) * 100
porcentaje_transgenero_gobierno <- frecuencia_transgenero_gobierno / (frecuencia_transgenero_gobierno + frecuencia_transexual_gobierno + frecuencia_no_binario_gobierno) * 100
porcentaje_transexual_gobierno <- frecuencia_transexual_gobierno / (frecuencia_transgenero_gobierno + frecuencia_transexual_gobierno + frecuencia_no_binario_gobierno) * 100
porcentaje_no_binario_gobierno <- frecuencia_no_binario_gobierno / (frecuencia_transgenero_gobierno + frecuencia_transexual_gobierno + frecuencia_no_binario_gobierno) * 100
porcentaje_transgenero_ac <- frecuencia_transgenero_ac / (frecuencia_transgenero_ac + frecuencia_transexual_ac + frecuencia_no_binario_ac) * 100
porcentaje_transexual_ac <- frecuencia_transexual_ac / (frecuencia_transgenero_ac + frecuencia_transexual_ac + frecuencia_no_binario_ac) * 100
porcentaje_no_binario_ac <- frecuencia_no_binario_ac / (frecuencia_transgenero_ac + frecuencia_transexual_ac + frecuencia_no_binario_ac) * 100
# DATA FRAME
df_porcentaje <- data.frame(
Categoria = rep(c("Noticias", "Gobierno", "Asociación Civil"), each = 3),
Tipo = rep(c("Transgénero", "Transexual", "No Binario"), times = 3),
Porcentaje = c(
porcentaje_transgenero_noticias, porcentaje_transexual_noticias, porcentaje_no_binario_noticias,
porcentaje_transgenero_gobierno, porcentaje_transexual_gobierno, porcentaje_no_binario_gobierno,
porcentaje_transgenero_ac, porcentaje_transexual_ac, porcentaje_no_binario_ac
)
)
# Crear un gráfico de barras para los porcentajes con eje y hasta 100
ggplot(df_porcentaje, aes(x = Categoria, y = Porcentaje, fill = Tipo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = paste0(round(Porcentaje), "%")), vjust = -0.5, color = "black", size = 4, position = position_dodge(width = 0.9)) +
labs(title = "Identidades de género por categorÃa (2018-2022)",
x = "",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#3498db", "#FF6384", "#FFA07A")) +
coord_cartesian(ylim = c(0, 100)) # Establecer el rango del eje y
La siguiente grafica es una comparación de las variables dentro del diccionario de orientación y su comparativa en las tres fuentes de informacion.
# ... (código anterior)
# NOTICIAS
palabras_gay_noticias <- names(conteo_combined_2018[diccionario_orientacion$gay])
palabras_gay_noticias <- palabras_gay_noticias[palabras_gay_noticias %in% names(conteo_combined_2018)]
palabras_lesbiana_noticias <- names(conteo_combined_2018[diccionario_orientacion$lesbiana])
palabras_lesbiana_noticias <- palabras_lesbiana_noticias[palabras_lesbiana_noticias %in% names(conteo_combined_2018)]
palabras_bisexual_noticias <- names(conteo_combined_2018[diccionario_orientacion$bisexual])
palabras_bisexual_noticias <- palabras_bisexual_noticias[palabras_bisexual_noticias %in% names(conteo_combined_2018)]
palabras_pansexual_noticias <- names(conteo_combined_2018[diccionario_orientacion$pansexual])
palabras_pansexual_noticias <- palabras_pansexual_noticias[palabras_pansexual_noticias %in% names(conteo_combined_2018)]
palabras_asexual_noticias <- names(conteo_combined_2018[diccionario_orientacion$asexual])
palabras_asexual_noticias <- palabras_asexual_noticias[palabras_asexual_noticias %in% names(conteo_combined_2018)]
# GOBIERNO
palabras_gay_gobierno <- names(conteo_combined_2019[diccionario_orientacion$gay])
palabras_gay_gobierno <- palabras_gay_gobierno[palabras_gay_gobierno %in% names(conteo_combined_2019)]
palabras_lesbiana_gobierno <- names(conteo_combined_2019[diccionario_orientacion$lesbiana])
palabras_lesbiana_gobierno <- palabras_lesbiana_gobierno[palabras_lesbiana_gobierno %in% names(conteo_combined_2019)]
palabras_bisexual_gobierno <- names(conteo_combined_2019[diccionario_orientacion$bisexual])
palabras_bisexual_gobierno <- palabras_bisexual_gobierno[palabras_bisexual_gobierno %in% names(conteo_combined_2019)]
palabras_pansexual_gobierno <- names(conteo_combined_2019[diccionario_orientacion$pansexual])
palabras_pansexual_gobierno <- palabras_pansexual_gobierno[palabras_pansexual_gobierno %in% names(conteo_combined_2019)]
palabras_asexual_gobierno <- names(conteo_combined_2019[diccionario_orientacion$asexual])
palabras_asexual_gobierno <- palabras_asexual_gobierno[palabras_asexual_gobierno %in% names(conteo_combined_2019)]
# AC
palabras_gay_ac <- names(conteo_combined_2020[diccionario_orientacion$gay])
palabras_gay_ac <- palabras_gay_ac[palabras_gay_ac %in% names(conteo_combined_2020)]
palabras_lesbiana_ac <- names(conteo_combined_2020[diccionario_orientacion$lesbiana])
palabras_lesbiana_ac <- palabras_lesbiana_ac[palabras_lesbiana_ac %in% names(conteo_combined_2020)]
palabras_bisexual_ac <- names(conteo_combined_2020[diccionario_orientacion$bisexual])
palabras_bisexual_ac <- palabras_bisexual_ac[palabras_bisexual_ac %in% names(conteo_combined_2020)]
palabras_pansexual_ac <- names(conteo_combined_2020[diccionario_orientacion$pansexual])
palabras_pansexual_ac <- palabras_pansexual_ac[palabras_pansexual_ac %in% names(conteo_combined_2020)]
palabras_asexual_ac <- names(conteo_combined_2020[diccionario_orientacion$asexual])
palabras_asexual_ac <- palabras_asexual_ac[palabras_asexual_ac %in% names(conteo_combined_2020)]
# SUMA
frecuencia_gay_noticias <- sum(conteo_combined_2018[palabras_gay_noticias])
frecuencia_lesbiana_noticias <- sum(conteo_combined_2018[palabras_lesbiana_noticias])
frecuencia_bisexual_noticias <- sum(conteo_combined_2018[palabras_bisexual_noticias])
frecuencia_pansexual_noticias <- sum(conteo_combined_2018[palabras_pansexual_noticias])
frecuencia_asexual_noticias <- sum(conteo_combined_2018[palabras_asexual_noticias])
frecuencia_gay_gobierno <- sum(conteo_combined_2019[palabras_gay_gobierno])
frecuencia_lesbiana_gobierno <- sum(conteo_combined_2019[palabras_lesbiana_gobierno])
frecuencia_bisexual_gobierno <- sum(conteo_combined_2019[palabras_bisexual_gobierno])
frecuencia_pansexual_gobierno <- sum(conteo_combined_2019[palabras_pansexual_gobierno])
frecuencia_asexual_gobierno <- sum(conteo_combined_2019[palabras_asexual_gobierno])
frecuencia_gay_ac <- sum(conteo_combined_2020[palabras_gay_ac])
frecuencia_lesbiana_ac <- sum(conteo_combined_2020[palabras_lesbiana_ac])
frecuencia_bisexual_ac <- sum(conteo_combined_2020[palabras_bisexual_ac])
frecuencia_pansexual_ac <- sum(conteo_combined_2020[palabras_pansexual_ac])
frecuencia_asexual_ac <- sum(conteo_combined_2020[palabras_asexual_ac])
# PORCENTAJES
porcentaje_gay_noticias <- frecuencia_gay_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_lesbiana_noticias <- frecuencia_lesbiana_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_bisexual_noticias <- frecuencia_bisexual_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_pansexual_noticias <- frecuencia_pansexual_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_asexual_noticias <- frecuencia_asexual_noticias / (frecuencia_gay_noticias + frecuencia_lesbiana_noticias + frecuencia_bisexual_noticias + frecuencia_pansexual_noticias + frecuencia_asexual_noticias) * 100
porcentaje_gay_gobierno <- frecuencia_gay_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_lesbiana_gobierno <- frecuencia_lesbiana_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_bisexual_gobierno <- frecuencia_bisexual_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_pansexual_gobierno <- frecuencia_pansexual_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_asexual_gobierno <- frecuencia_asexual_gobierno / (frecuencia_gay_gobierno + frecuencia_lesbiana_gobierno + frecuencia_bisexual_gobierno + frecuencia_pansexual_gobierno + frecuencia_asexual_gobierno) * 100
porcentaje_gay_ac <- frecuencia_gay_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
porcentaje_lesbiana_ac <- frecuencia_lesbiana_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
porcentaje_bisexual_ac <- frecuencia_bisexual_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
porcentaje_pansexual_ac <- frecuencia_pansexual_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
porcentaje_asexual_ac <- frecuencia_asexual_ac / (frecuencia_gay_ac + frecuencia_lesbiana_ac + frecuencia_bisexual_ac + frecuencia_pansexual_ac + frecuencia_asexual_ac) * 100
# DATA FRAME
df_porcentaje_orientacion <- data.frame(
Categoria = rep(c("Noticias", "Gobierno", "Asociación Civil"), each = 5),
Tipo = rep(c("Gay", "Lesbiana", "Bisexual", "Pansexual", "Asexual"), times = 3),
Porcentaje = c(
porcentaje_gay_noticias, porcentaje_lesbiana_noticias, porcentaje_bisexual_noticias, porcentaje_pansexual_noticias, porcentaje_asexual_noticias,
porcentaje_gay_gobierno, porcentaje_lesbiana_gobierno, porcentaje_bisexual_gobierno, porcentaje_pansexual_gobierno, porcentaje_asexual_gobierno,
porcentaje_gay_ac, porcentaje_lesbiana_ac, porcentaje_bisexual_ac, porcentaje_pansexual_ac, porcentaje_asexual_ac
)
)
# Crear un gráfico de barras para los porcentajes con eje y hasta 100
ggplot(df_porcentaje_orientacion, aes(x = Categoria, y = Porcentaje, fill = Tipo)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(aes(label = paste0(round(Porcentaje), "%")), vjust = -0.5, color = "black", size = 4, position = position_dodge(width = 0.9)) +
labs(title = "Distribución de Identidades de Orientación por CategorÃa (2018-2022)", x = "", y = "") +
theme_minimal() +
scale_fill_manual(values = c("#3498db", "#FF6384", "#FFA07A", "#FFD700", "#C71585")) +
coord_cartesian(ylim = c(0, 100)) # Establecer el rango del eje y
# Definir la función para calcular la frecuencia de una categorÃa en un año
calcular_frecuencia <- function(conteo, diccionario_palabras) {
palabras_categoria <- unlist(diccionario_palabras)
palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
frecuencia_categoria <- sum(conteo[palabras_en_conteo])
return(frecuencia_categoria)
}
library(dplyr)
# Crear un data frame con las frecuencias para Transgénero y Transexual
df_frecuencias_identidad_total <- data.frame(
Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 2),
Variable = rep(c("Transgénero", "Transexual"), times = 5),
Frecuencia = c(
calcular_frecuencia(conteo_2018, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2018, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2019, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2019, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2020, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2020, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2021, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2021, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2022, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2022, diccionario_identidad$transexual)
)
)
# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_identidad_total <- df_frecuencias_identidad_total %>%
group_by(Año) %>%
mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)
# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_identidad_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
labs(title = "Comparación de Identidades en Noticias (2018-2022)",
x = "",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384"), name = "Variable") +
coord_cartesian(xlim = c(0, 100)) # Establecer el rango del eje x
#NOTICIAS
# Función para calcular la frecuencia de una categorÃa en un año (para orientación)
calcular_frecuencia_orientacion <- function(conteo, diccionario_palabras) {
palabras_categoria <- unlist(diccionario_palabras)
palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
frecuencia_categoria <- sum(conteo[palabras_en_conteo])
return(frecuencia_categoria)
}
# Crear un data frame con las frecuencias para Gay, Lesbiana y Bisexual
df_frecuencias_orientacion_total <- data.frame(
Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 3),
Variable = rep(c("Gay", "Lesbiana", "Bisexual"), times = 5),
Frecuencia = c(
calcular_frecuencia_orientacion(conteo_2018, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2018, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2018, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2019, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2019, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2019, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2020, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2020, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2020, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2021, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2021, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2021, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2022, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2022, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2022, diccionario_orientacion$bisexual)
)
)
# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_orientacion_total <- df_frecuencias_orientacion_total %>%
group_by(Año) %>%
mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)
# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_orientacion_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
labs(title = "Comparación de Orientaciones en Noticias (2018-2022)",
x = "",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50"), name = "Variable") +
coord_cartesian(xlim = c(0, 100)) # Establecer el rango del eje x
# GOBIERNO
library(dplyr)
# Definir la función para calcular la frecuencia de una categorÃa en un año
calcular_frecuencia <- function(conteo, diccionario_palabras) {
palabras_categoria <- unlist(diccionario_palabras)
palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
frecuencia_categoria <- sum(conteo[palabras_en_conteo])
return(frecuencia_categoria)
}
# Crear un data frame con las frecuencias para Transgénero y Transexual
df_frecuencias_identidad_total <- data.frame(
Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 2),
Variable = rep(c("Transgénero", "Transexual"), times = 5),
Frecuencia = c(
calcular_frecuencia(conteo_2018_gob, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2018_gob, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2019_gob, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2019_gob, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2020_gob, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2020_gob, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2021_gob, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2021_gob, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2022_gob, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2022_gob, diccionario_identidad$transexual)
)
)
# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_identidad_total <- df_frecuencias_identidad_total %>%
group_by(Año) %>%
mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)
# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_identidad_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
labs(title = "Comparación de Identidades en Gobierno (2018-2022)",
x = "",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384"), name = "Variable") +
coord_cartesian(xlim = c(0, 105)) # Establecer el rango del eje x
### Gobierno
# Función para calcular la frecuencia de una categorÃa en un año (para orientación)
calcular_frecuencia_orientacion <- function(conteo, diccionario_palabras) {
palabras_categoria <- unlist(diccionario_palabras)
palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
frecuencia_categoria <- sum(conteo[palabras_en_conteo])
return(frecuencia_categoria)
}
# Crear un data frame con las frecuencias para Gay, Lesbiana y Bisexual
df_frecuencias_orientacion_total <- data.frame(
Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 3),
Variable = rep(c("Gay", "Lesbiana", "Bisexual"), times = 5),
Frecuencia = c(
calcular_frecuencia_orientacion(conteo_2018_gob, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2018_gob, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2018_gob, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2019_gob, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2019_gob, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2019_gob, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2020_gob, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2020_gob, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2020_gob, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2021_gob, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2021_gob, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2021_gob, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2022_gob, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2022_gob, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2022_gob, diccionario_orientacion$bisexual)
)
)
# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_orientacion_total <- df_frecuencias_orientacion_total %>%
group_by(Año) %>%
mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)
# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_orientacion_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
labs(title = "Comparación de Orientaciones en Gobierno (2018-2022)",
x = "",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50"), name = "Variable") +
coord_cartesian(xlim = c(0, 105)) # Establecer el rango del eje x
# ASOCIACION CIVIL
library(dplyr)
# Definir la función para calcular la frecuencia de una categorÃa en un año
calcular_frecuencia <- function(conteo, diccionario_palabras) {
palabras_categoria <- unlist(diccionario_palabras)
palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
frecuencia_categoria <- sum(conteo[palabras_en_conteo])
return(frecuencia_categoria)
}
# Crear un data frame con las frecuencias para Transgénero y Transexual
df_frecuencias_identidad_total <- data.frame(
Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 2),
Variable = rep(c("Transgénero", "Transexual"), times = 5),
Frecuencia = c(
calcular_frecuencia(conteo_2018_ac, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2018_ac, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2019_ac, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2019_ac, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2020_ac, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2020_ac, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2021_ac, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2021_ac, diccionario_identidad$transexual),
calcular_frecuencia(conteo_2022_ac, diccionario_identidad$transgenero),
calcular_frecuencia(conteo_2022_ac, diccionario_identidad$transexual)
)
)
# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_identidad_total <- df_frecuencias_identidad_total %>%
group_by(Año) %>%
mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)
# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_identidad_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
labs(title = "Comparación de Identidades en Asociaciones Civiles (2018-2022)",
x = "",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384"), name = "Variable") +
coord_cartesian(xlim = c(0, 105)) # Establecer el rango del eje x
# Función para calcular la frecuencia de una categorÃa en un año (para orientación)
calcular_frecuencia_orientacion <- function(conteo, diccionario_palabras) {
palabras_categoria <- unlist(diccionario_palabras)
palabras_en_conteo <- names(conteo)[names(conteo) %in% palabras_categoria]
frecuencia_categoria <- sum(conteo[palabras_en_conteo])
return(frecuencia_categoria)
}
# Crear un data frame con las frecuencias para Gay, Lesbiana y Bisexual
df_frecuencias_orientacion_total <- data.frame(
Año = rep(c(2018, 2019, 2020, 2021, 2022), each = 3),
Variable = rep(c("Gay", "Lesbiana", "Bisexual"), times = 5),
Frecuencia = c(
calcular_frecuencia_orientacion(conteo_2018_ac, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2018_ac, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2018_ac, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2019_ac, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2019_ac, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2019_ac, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2020_ac, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2020_ac, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2020_ac, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2021_ac, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2021_ac, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2021_ac, diccionario_orientacion$bisexual),
calcular_frecuencia_orientacion(conteo_2022_ac, diccionario_orientacion$gay),
calcular_frecuencia_orientacion(conteo_2022_ac, diccionario_orientacion$lesbiana),
calcular_frecuencia_orientacion(conteo_2022_ac, diccionario_orientacion$bisexual)
)
)
# Agrupar por año y calcular el porcentaje en función del total de cada año
df_frecuencias_orientacion_total <- df_frecuencias_orientacion_total %>%
group_by(Año) %>%
mutate(Porcentaje = Frecuencia / sum(Frecuencia) * 100)
# Crear un gráfico de barras horizontal con colores más suaves y porcentaje
ggplot(df_frecuencias_orientacion_total, aes(x = Porcentaje, y = as.factor(Año), fill = Variable, group = Variable)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.7), width = 0.7) +
geom_text(aes(label = paste0(round(Porcentaje), "%")), hjust = -0.2, vjust = 0.5, color = "black", size = 3, position = position_dodge(width = 0.7)) +
labs(title = "Comparación de Orientaciones en Asociaciones Civiles (2018-2022)",
x = "",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50"), name = "Variable") +
coord_cartesian(xlim = c(0, 105)) # Establecer el rango del eje x
set.seed(123)
top_words_final <- head(sort(conteo_final_noticias, decreasing = TRUE), 35)
top_words_final_ac <- head(sort(conteo_final_ac, decreasing = TRUE), 35)
top_words_final_gob <- head(sort(conteo_final_gob, decreasing = TRUE), 35)
# Combinar las tres listas de palabras
all_top_words <- unique(c(names(top_words_final), names(top_words_final_ac), names(top_words_final_gob)))
# Seleccionar las frecuencias correspondientes a las palabras seleccionadas
freq_final <- conteo_final_noticias[all_top_words]
freq_final_ac <- conteo_final_ac[all_top_words]
freq_final_gob <- conteo_final_gob[all_top_words]
# Sumar las frecuencias de las tres variables
freq_combined <- freq_final + freq_final_ac + freq_final_gob
# Eliminar posibles valores NA
freq_combined <- freq_combined[!is.na(freq_combined)]
# Verificar si hay frecuencias para evitar el error
if (length(freq_combined) > 0) {
# Instalar y cargar bibliotecas necesarias
library(wordcloud)
# Crear el Word Cloud
wordcloud(words = names(freq_combined), freq = freq_combined, scale = c(3, 0.5), colors = brewer.pal(8, "Dark2"))
} else {
print("No hay suficientes datos para crear el Word Cloud.")
}
palabras mencionada mas en noticias.
library(ggplot2)
# Obtener las 10 palabras más comunes
top_10_terminos <- head(sort(conteo_final_noticias, decreasing = TRUE), 10)
# Crear un data frame con los datos
data_top_10 <- data.frame(termino = names(top_10_terminos), repeticiones = top_10_terminos)
# Ordenar el data frame de mayor a menor
data_top_10$termino <- factor(data_top_10$termino, levels = data_top_10$termino[order(data_top_10$repeticiones, decreasing = TRUE)])
# Verificar si hay suficientes datos para graficar
if (nrow(data_top_10) > 1) {
# Crear un gráfico de barras horizontal con colores más suaves y etiquetas de repeticiones
ggplot(data_top_10, aes(x = repeticiones, y = termino, fill = termino)) +
geom_bar(stat = "identity") +
labs(title = "Top 10 Palabras Más Repetidas Noticias (2018-2022)",
x = " ",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50", "#3498db", "#9b59b6", "#FFD700", "#FF69B4", "#00CED1", "#FF4500", "#ADFF2F",
"#FFA07A", "#87CEEB", "#FF6347", "#20B2AA", "#DDA0DD", "#FF8C00", "#8A2BE2", "#32CD32", "#FF00FF", "#00FF7F")
, name = "Palabra") +
coord_cartesian(xlim = c(0, max(data_top_10$repeticiones) + 10)) # Establecer el rango del eje x
} else {
print("No hay suficientes datos para graficar.")
}
palabras mencionadas en gobierno
library(ggplot2)
set.seed(123)
# Obtener las 10 palabras más comunes excluyendo "gob"
top_10_terminos <- head(sort(conteo_final_gob[!names(conteo_final_gob) %in% "gob"], decreasing = TRUE), 10)
# Crear un data frame con los datos
data_top_10 <- data.frame(termino = names(top_10_terminos), repeticiones = top_10_terminos)
# Ordenar el data frame de mayor a menor
data_top_10$termino <- factor(data_top_10$termino, levels = data_top_10$termino[order(data_top_10$repeticiones, decreasing = TRUE)])
# Verificar si hay suficientes datos para graficar
if (nrow(data_top_10) > 1) {
# Crear un gráfico de barras horizontal con colores más suaves y etiquetas de repeticiones
ggplot(data_top_10, aes(x = repeticiones, y = termino, fill = termino)) +
geom_bar(stat = "identity") +
labs(title = "Top 10 Palabras Más Repetidas Gobierno (2018-2022)",
x = " ",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50", "#3498db", "#9b59b6", "#FFD700", "#FF69B4", "#00CED1", "#FF4500", "#ADFF2F",
"#FFA07A", "#87CEEB", "#FF6347", "#20B2AA", "#DDA0DD", "#FF8C00", "#8A2BE2", "#32CD32", "#FF00FF", "#00FF7F")
, name = "Palabra") +
coord_cartesian(xlim = c(0, max(data_top_10$repeticiones) + 10)) # Establecer el rango del eje x
} else {
print("No hay suficientes datos para graficar.")
}
Top 10 palabras mas repetidas, esta paarte del codigo se enfoca en crear una tabla de las 10 palabras mas mencionadas en la fuente de AC.
library(ggplot2)
set.seed(123)
# Obtener las 10 palabras más comunes
top_10_terminos <- head(sort(conteo_final_ac, decreasing = TRUE), 10)
# Crear un data frame con los datos
data_top_10 <- data.frame(termino = names(top_10_terminos), repeticiones = top_10_terminos)
# Ordenar el data frame de mayor a menor
data_top_10$termino <- factor(data_top_10$termino, levels = data_top_10$termino[order(data_top_10$repeticiones, decreasing = TRUE)])
# Verificar si hay suficientes datos para graficar
if (nrow(data_top_10) > 1) {
# Crear un gráfico de barras horizontal con colores más suaves y etiquetas de repeticiones
ggplot(data_top_10, aes(x = repeticiones, y = termino, fill = termino)) +
geom_bar(stat = "identity") +
labs(title = "Top 10 Palabras Más Repetidas Asociacion civil (2018-2022)",
x = " ",
y = "") +
theme_minimal() +
scale_fill_manual(values = c("#FFB14E", "#FF6384", "#4CAF50", "#3498db", "#9b59b6", "#FFD700", "#FF69B4", "#00CED1", "#FF4500", "#ADFF2F",
"#FFA07A", "#87CEEB", "#FF6347", "#20B2AA", "#DDA0DD", "#FF8C00", "#8A2BE2", "#32CD32", "#FF00FF", "#00FF7F")
, name = "Palabra") +
coord_cartesian(xlim = c(0, max(data_top_10$repeticiones) + 10)) # Establecer el rango del eje x
} else {
print("No hay suficientes datos para graficar.")
}
La siguiente parte utiliza un modeldo de topicos para mostrar los temas principales de las noticias.
library(tidytext)
set.seed(123)
# Corpus y DTM notcicias
# Convertir la DTM a un data frame con tidytext
dtm_tidy <- tidy(dtm_final)
dtm_tidy <- dtm_tidy %>%
group_by(document) %>%
filter(sum(count) > 0)
# Reconstruir la DTM desde el data frame tidytext
dtm_final <- cast_dtm(dtm_tidy, document, term, count)
conteo_final <- colSums(as.matrix(dtm_final))
inspect(dtm_final)
## <<DocumentTermMatrix (documents: 98, terms: 8485)>>
## Non-/sparse entries: 21704/809826
## Sparsity : 97%
## Maximal term length: 35
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs comunidad derechos discriminación gay género identidad lgbt marcha mundo
## 101 1 4 3 1 7 4 22 0 0
## 11 13 0 2 4 0 0 5 0 2
## 19 2 3 2 8 0 0 2 16 1
## 26 13 0 2 4 0 0 5 0 2
## 31 5 0 0 4 0 0 2 0 5
## 37 0 0 0 10 0 0 0 0 5
## 4 2 3 2 8 0 0 2 16 1
## 45 0 4 0 5 0 0 0 11 5
## 80 0 4 6 0 10 12 2 0 4
## 83 3 7 5 0 2 2 0 0 0
## Terms
## Docs trans
## 101 2
## 11 0
## 19 0
## 26 0
## 31 0
## 37 0
## 4 0
## 45 0
## 80 8
## 83 2
# Continuar con el análisis solo si hay documentos con al menos un término
if (nrow(dtm_final) > 0) {
set.seed(1)
# Generar un modelo de topic models
lda_lgbt <- LDA(dtm_final, k = 2)
# Obtener los términos más importantes de cada tópico
terms_lgbt <- tidy(lda_lgbt, matrix = "beta") %>%
group_by(topic) %>%
top_n(4, wt = beta)
# Generar el gráfico mejorado con tres tópicos
ggplot(terms_lgbt, aes(x = reorder(term, -beta), y = beta, fill = factor(topic))) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~topic, ncol = 1, scales = "free") +
labs(title = "Modelado de Topicos Noticias", x = "", y = " ") +
theme_minimal() +
scale_fill_brewer(palette = "Dark2")
} else {
warning("Todos los documentos están vacÃos después de la limpieza. No se puede realizar el modelado de tópicos.")
}
library(tidytext)
set.seed(123)
# Convertir la DTM a un data frame con tidytext
dtm_tidy <- tidy(dtm_final_gob)
dtm_tidy <- dtm_tidy %>%
group_by(document) %>%
filter(sum(count) > 0)
# Reconstruir la DTM desde el data frame tidytext
dtm_final_gob <- cast_dtm(dtm_tidy, document, term, count)
conteo_final <- colSums(as.matrix(dtm_final_gob))
inspect(dtm_final_gob)
## <<DocumentTermMatrix (documents: 45, terms: 1153)>>
## Non-/sparse entries: 1606/50279
## Sparsity : 97%
## Maximal term length: 23
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs 2022 derechos discriminación diversidad género gob información lgbt puedes
## 1 0 5 0 1 0 0 2 2 2
## 10 0 0 0 0 0 1 0 0 0
## 2 0 4 9 12 6 0 3 4 2
## 3 0 3 0 0 1 0 2 2 2
## 4 0 6 5 0 5 0 2 0 2
## 5 0 1 0 0 3 0 2 0 2
## 6 0 0 0 2 0 0 3 1 2
## 7 0 1 0 1 0 0 2 3 0
## 8 0 0 0 0 0 1 0 0 0
## 9 0 0 0 0 0 1 0 0 0
## Terms
## Docs turismo
## 1 0
## 10 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 0
## 7 16
## 8 0
## 9 0
# Continuar con el análisis solo si hay documentos con al menos un término
if (nrow(dtm_final_gob) > 0) {
set.seed(1)
# Generar un modelo de topic models
lda_lgbt <- LDA(dtm_final_gob, k = 2)
# Obtener los términos más importantes de cada tópico
terms_lgbt <- tidy(lda_lgbt, matrix = "beta") %>%
group_by(topic) %>%
top_n(4, wt = beta)
# Generar el gráfico mejorado con tres tópicos
ggplot(terms_lgbt, aes(x = reorder(term, -beta), y = beta, fill = factor(topic))) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~topic, ncol = 1, scales = "free") +
labs(title = "Modelado de Topicos Gonierno", x = "", y = " ") +
theme_minimal() +
scale_fill_brewer(palette = "Dark2")
} else {
warning("Todos los documentos están vacÃos después de la limpieza. No se puede realizar el modelado de tópicos.")
}
library(tidytext)
set.seed(123)
todo_ac <- c(ac_2018, ac_2019, ac_2020, ac_2021, ac_2022)
corpus_final_ac <- Corpus(VectorSource(todo_ac))
corpus_final_ac <- tm_map(corpus_final_ac, removeWords, stopwords("es"))
corpus_final_ac <- tm_map(corpus_final_ac, removeWords, palabras_eliminar)
dtm_final_ac <- DocumentTermMatrix(corpus_final_ac)
conteo_final_ac <- colSums(as.matrix(dtm_final_ac))
inspect(dtm_final_ac)
## <<DocumentTermMatrix (documents: 67, terms: 9335)>>
## Non-/sparse entries: 22458/602987
## Sparsity : 96%
## Maximal term length: 25
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs derechos género humanos identidad lgbti misoprostol mujeres persona trans
## 42 1 24 0 12 0 0 13 0 5
## 43 4 19 2 7 1 0 5 2 12
## 47 17 30 4 37 0 0 6 13 0
## 49 7 5 5 0 5 0 13 1 8
## 60 2 2 2 0 1 0 0 7 23
## 61 6 8 3 4 1 0 29 14 72
## 62 10 1 8 1 1 98 49 5 0
## 63 4 2 1 0 1 22 10 5 0
## 64 5 1 5 0 1 0 0 11 0
## 65 1 18 0 13 0 0 2 10 15
## Terms
## Docs vida
## 42 0
## 43 10
## 47 4
## 49 6
## 60 4
## 61 17
## 62 16
## 63 12
## 64 7
## 65 7
# Convertir la DTM a un data frame con tidytext
dtm_tidy <- tidy(dtm_final_ac)
dtm_tidy <- dtm_tidy %>%
group_by(document) %>%
filter(sum(count) > 0)
# Reconstruir la DTM desde el data frame tidytext
dtm_final_ac <- cast_dtm(dtm_tidy, document, term, count)
conteo_final <- colSums(as.matrix(dtm_final_ac))
inspect(dtm_final_ac)
## <<DocumentTermMatrix (documents: 67, terms: 9335)>>
## Non-/sparse entries: 22458/602987
## Sparsity : 96%
## Maximal term length: 25
## Weighting : term frequency (tf)
## Sample :
## Terms
## Docs derechos género humanos identidad lgbti misoprostol mujeres persona trans
## 42 1 24 0 12 0 0 13 0 5
## 43 4 19 2 7 1 0 5 2 12
## 47 17 30 4 37 0 0 6 13 0
## 49 7 5 5 0 5 0 13 1 8
## 60 2 2 2 0 1 0 0 7 23
## 61 6 8 3 4 1 0 29 14 72
## 62 10 1 8 1 1 98 49 5 0
## 63 4 2 1 0 1 22 10 5 0
## 64 5 1 5 0 1 0 0 11 0
## 65 1 18 0 13 0 0 2 10 15
## Terms
## Docs vida
## 42 0
## 43 10
## 47 4
## 49 6
## 60 4
## 61 17
## 62 16
## 63 12
## 64 7
## 65 7
# Continuar con el análisis solo si hay documentos con al menos un término
if (nrow(dtm_final_ac) > 0) {
set.seed(1)
# Generar un modelo de topic models
lda_lgbt <- LDA(dtm_final_ac, k = 2)
# Obtener los términos más importantes de cada tópico
terms_lgbt <- tidy(lda_lgbt, matrix = "beta") %>%
group_by(topic) %>%
top_n(4, wt = beta)
# Generar el gráfico mejorado con tres tópicos
ggplot(terms_lgbt, aes(x = reorder(term, -beta), y = beta, fill = factor(topic))) +
geom_col(show.legend = FALSE) +
coord_flip() +
facet_wrap(~topic, ncol = 1, scales = "free") +
labs(title = "Modelado de Topicos Asociación Civil", x = "", y = " ") +
theme_minimal() +
scale_fill_brewer(palette = "Dark2")
} else {
warning("Todos los documentos están vacÃos después de la limpieza. No se puede realizar el modelado de tópicos.")
}