{"id":22367563,"url":"https://github.com/borjamome/agenda_2030","last_synced_at":"2025-03-26T15:52:59.424Z","repository":{"id":240911844,"uuid":"803757262","full_name":"BORJAMOME/Agenda_2030","owner":"BORJAMOME","description":"Análisis de textos con R de la Agenda 2030","archived":false,"fork":false,"pushed_at":"2024-05-21T11:10:54.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-31T17:48:07.734Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BORJAMOME.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-21T10:30:09.000Z","updated_at":"2024-05-21T11:10:57.000Z","dependencies_parsed_at":"2024-05-21T12:20:53.356Z","dependency_job_id":"61d9dff3-2707-472c-b7fc-521f731b06a9","html_url":"https://github.com/BORJAMOME/Agenda_2030","commit_stats":null,"previous_names":["borjamome/agenda_2030"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BORJAMOME%2FAgenda_2030","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BORJAMOME%2FAgenda_2030/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BORJAMOME%2FAgenda_2030/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BORJAMOME%2FAgenda_2030/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BORJAMOME","download_url":"https://codeload.github.com/BORJAMOME/Agenda_2030/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245689480,"owners_count":20656415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-04T18:19:08.861Z","updated_at":"2025-03-26T15:52:59.401Z","avatar_url":"https://github.com/BORJAMOME.png","language":"R","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Análisis de la Agenda 2030 con R\n\n![Screenshot 2024-05-21 at 11 57 47](https://github.com/BORJAMOME/Agenda_2030/assets/19588053/f186aba9-5c4c-4a72-9bbf-68bb8443db49)\n\n## Análisis de Texto en R\n\nEste proyecto realiza un análisis de texto utilizando varias librerías de R para la lectura, tokenización, visualización y análisis de sentimientos.\n\n## Requisitos\n\nAsegúrate de tener instaladas las siguientes librerías antes de ejecutar el código:\n\n- `readr`: Se utiliza para leer archivos de texto, en este caso, para cargar el contenido del archivo calendar.rtf.\n- `tokenizers`: Permite dividir el texto en unidades más pequeñas, como palabras, oraciones, bigramas y trigramas, facilitando el análisis.\n- `tidyverse`: Un conjunto de paquetes que proporcionan herramientas para la manipulación y visualización de datos. Aquí se usa principalmente para transformar y filtrar datos.\n- `stopwords`: Proporciona listas de palabras vacías (stopwords) en diferentes idiomas, que se eliminan del análisis para centrarse en las palabras más significativas.\n- `ggplot2`: Utilizado para crear gráficos de alta calidad y personalizables, como gráficos de barras y grafos.\n- `wordcloud2`: Genera nubes de palabras que visualizan la frecuencia de las palabras de forma atractiva.\n- `tidytext`: Facilita el procesamiento y análisis de texto de manera ordenada y estructurada, integrando la manipulación de texto con las herramientas de tidyverse.\n- `textdata`: Proporciona diccionarios de sentimientos y emociones, como el NRC y Bing, que se utilizan para el análisis de sentimientos.\n- `syuzhet`: Utilizado para extraer y analizar emociones y sentimientos en el texto, proporcionando una visión más profunda del contenido emocional.\n- `tm`: Ofrece herramientas para la minería de texto, incluyendo la creación de un corpus y la matriz término-documento.\n- `textTinyR`: Proporciona funciones eficientes para la tokenización y análisis de n-gramas, especialmente útil para grandes conjuntos de datos.\n- `igraph`: Permite la creación y visualización de grafos, que se utilizan para mostrar las conexiones entre palabras en bigramas y trigramas.\n- `ggraph`: Extiende ggplot2 para la visualización de grafos, facilitando la creación de gráficos de red visualmente atractivos.\n- `patchwork`: Permite combinar múltiples gráficos en una sola visualización de manera ordenada, útil para mostrar diferentes análisis juntos.\n\nPuedes instalarlas con:\n\n```r\ninstall.packages(c(\"readr\", \"tokenizers\", \"tidyverse\", \"stopwords\", \"ggplot2\", \"wordcloud2\", \"tidytext\", \"textdata\", \"syuzhet\", \"tm\", \"textTinyR\", \"igraph\", \"ggraph\", \"patchwork\"))\n```\n\n# Descripción del Proyecto\n## 1. Cargar y preparar los datos\nSe carga el archivo de texto y se prepara para el análisis:\n\n```r\nlibrary(readr)\nlibro \u003c- read_lines(\".../Desktop/calendar.rtf\")\ntexto_completo \u003c- paste(libro, collapse = \" \")\n```\n\n## 2. Tokenización de palabras y análisis de frecuencias\nSe tokeniza el texto en palabras y se cuenta su frecuencia:\n```r\nlibrary(\"tokenizers\")\npalabras \u003c- tokenize_words(texto_completo)\ncount_words(texto_completo)\n\nlibrary(\"tidyverse\")\ntabla \u003c- table(palabras[[1]])\n(tabla \u003c- tibble(\n  palabra = names(tabla),\n  recuento = as.numeric(tabla)\n) |\u003e arrange(desc(recuento)))\n```\n\n## 3. Tokenización de oraciones\nSe tokeniza el texto en oraciones y se analiza su longitud:\n\n```r\noraciones \u003c- tokenize_sentences(texto_completo)\ncount_sentences(texto_completo)\n\noraciones[[1]][1:3] # primeras 3 oraciones\noraciones[[1]][count_sentences(texto_completo)] # última oración\n\npalabras_oracion \u003c- tokenize_words(oraciones[[1]])\nlongitud_o \u003c- sapply(palabras_oracion, length)\nhead(longitud_o)\n```\n\n## 4. Filtrado de stopwords\nSe eliminan las palabras vacías (stopwords) del análisis:\n\n```r\nlibrary(\"stopwords\")\ntabla_stopwords \u003c- tibble(palabra = stopwords(\"en\"))\n\ntabla \u003c- tabla |\u003e anti_join(tabla_stopwords)\nknitr::kable(tabla[1:20, ], caption = \"Palabras más frecuentes (sin palabras vacías)\")\n```\n## 5. Visualización de las palabras más frecuentes\nSe crea un gráfico de barras horizontales con las palabras más frecuentes:\n\n```r\nlibrary(ggplot2)\n\n# Establecer colores y tipografía\nbackground_color \u003c- \"#f6f6f6\"\ncolor_barras \u003c- \"#aad59e\"\nlato \u003c- \"Lato\"\n\n# Filtrar las palabras más frecuentes excluyendo las stopwords\ntabla_filtrada \u003c- tabla %\u003e% anti_join(tabla_stopwords)\n\n# Crear un gráfico de barras horizontales\nggplot(tabla_filtrada[1:30, ], aes(x = recuento, y = reorder(palabra, recuento))) +\n  geom_bar(stat = \"identity\", fill = color_barras) +\n  geom_text(aes(label = recuento), hjust = -0.1, size = 3, family = lato) +\n  labs(title = \"Most Frequent Words (Excluding Stopwords)\",\n       x = \"Count\", y = \"Word\") +\n  theme_minimal() +\n  theme(axis.text.y = element_text(hjust = 0, family = lato), \n        panel.background = element_rect(fill = background_color),\n        plot.background = element_rect(fill = background_color),\n        panel.grid.major = element_blank(),\n        panel.grid.minor = element_blank(),\n        text = element_text(family = lato))\n```\n\n![Screenshot 2024-05-21 at 11 37 51](https://github.com/BORJAMOME/Agenda_2030/assets/19588053/54cb529b-4ef2-4b03-8373-93e9741ae459)\n\n\n## 6. Wordcloud\nSe crea una nube de palabras con una paleta de colores pastel:\n\n```r\nlibrary(wordcloud2)\n\nbackground_color \u003c- \"#f6f6f6\"\ncolores_pastel \u003c- c(\"#FFD700\", \"#FF69B4\", \"#ADD8E6\", \"#98FB98\", \"#FF6347\")\n\nwordcloud2(tabla, color = colores_pastel, backgroundColor = background_color)\n```\n![Screenshot 2024-05-21 at 11 39 30](https://github.com/BORJAMOME/Agenda_2030/assets/19588053/d74c3388-79e1-40dc-8e40-ae263af2ec85)\n\n\n## 7. Análisis de sentimientos y detección de emociones\nSe analizan los sentimientos y emociones del texto:\n\n```r\nlibrary(\"tidytext\")\nlibrary(\"textdata\")\nlibrary(\"kableExtra\")\n\n# Tokenizar el texto completo\ntabla \u003c- table(tokenize_words(texto_completo)[[1]])\n\n# Crear tibble con recuento de palabras\ntabla \u003c- tibble(\n  word = names(tabla),\n  recuento = as.numeric(tabla)\n)\n\n# Filtrar stopwords y ordenar por recuento\ntabla \u003c- tabla |\u003e anti_join(tibble(word = stopwords(\"en\"))) |\u003e arrange(desc(recuento))\n\n# Filtrar palabras positivas según sentimientos \"bing\"\npos \u003c- get_sentiments(\"bing\") |\u003e filter(sentiment == \"positive\")\npos_EN \u003c- tabla |\u003e semi_join(pos)\n\n# Mostrar tabla de palabras positivas\nkable(pos_EN) %\u003e%\n  kable_styling(bootstrap_options = c(\"striped\", \"hover\"))\n\n# Obtener sentimientos \"nrc\" y visualizar con ggplot\nemo \u003c- get_sentiments(\"nrc\")\nemo |\u003e ggplot(aes(sentiment)) +\n  geom_bar(aes(fill = sentiment), show.legend = FALSE) +\n  scale_fill_manual(values = c(\"#FFD1DC\", \"#D3D3D3\", \"#FFD700\", \"#98FB98\", \"#ADD8E6\", \"#FFA07A\", \"#E6E6FA\", \"#FFF8DC\", \"#FFDEAD\", \"#BDB2FF\"))\n\n# Realizar operaciones con la tabla de sentimientos\nemo_tab \u003c- tabla |\u003e inner_join(emo)\nhead(emo_tab, n = 7)\n\n# Crear el gráfico con la paleta de colores pastel\nemo_tab |\u003e\n  count(sentiment) |\u003e\n  ggplot(aes(x = sentiment, y = n)) +\n  geom_bar(stat = \"identity\", aes(fill = sentiment), show.legend = FALSE) +\n  geom_text(aes(label = n), vjust = -0.25) +\n  scale_fill_manual(values = c(\"#FFD1DC\", \"#D3D3D3\", \"#FFD700\", \"#98FB98\", \"#ADD8E6\", \"#FFA07A\", \"#E6E6FA\", \"#FFF8DC\", \"#FFDEAD\", \"#BDB2FF\")) +\n  labs(title = \"Sentiment Count\") +\n  theme_minimal() +\n  theme(\n    plot.background = element_rect(fill = background_color),\n    panel.background = element_rect(fill = background_color),\n    panel.grid.major = element_blank(),\n    panel.grid.minor = element_blank()\n  )\n```\n\n## Gráfico de barras con la frecuencia de emociones del léxico NRC.\n![Screenshot 2024-05-21 at 11 42 38](https://github.com/BORJAMOME/Agenda_2030/assets/19588053/e0ef667a-58b8-404e-b507-7bc2731a556e)\n\n## Frecuencia de emociones en la Declaración utilizando NRC.\n![Screenshot 2024-05-21 at 11 43 09](https://github.com/BORJAMOME/Agenda_2030/assets/19588053/fc741cf4-1f6c-416a-8019-9a3133d56035)\n\n## Wordcloud de la Declaración para tres emociones seleccionadas del NRC.\n![Screenshot 2024-05-21 at 11 43 38](https://github.com/BORJAMOME/Agenda_2030/assets/19588053/1699e5e0-6729-43e1-92d6-5502cf3dbe34)\n\n## 9. Visualización de bigramas con grafos\nSe crean grafos para visualizar las conexiones entre bigramas:\n\n``` r\nlibrary(\"igraph\")\nlibrary(\"ggraph\")\nlibrary(\"patchwork\")\n\nset.seed(1)\npastel_palette \u003c- c(\"#f6c3ae\", \"#aad59e\", \"black\")\nbackground_color \u003c- \"#f6f6f6\"\n\ncreate_graph_plot \u003c- function(graf, title, subtitle) {\n  g \u003c- ggraph(graf, layout = \"fr\") +\n    geom_edge_link(arrow = arrow(length = unit(1, \"mm\")), color = pastel_palette[1]) +\n    geom_node_point(size = 4, color = pastel_palette[2]) +\n    geom_node_text(aes(label = name), color = pastel_palette[3], size = 4, family = \"Lato\") +\n    theme_void() +\n    theme(\n      plot.background = element_rect(fill = background_color),\n      plot.title = element_text(size = 14, family = \"Lato\"),\n      plot.subtitle = element_text(size = 10, family = \"Lato\")\n    ) +\n    labs(title = title, subtitle = subtitle)\n  return(g)\n}\n\nbigram_graph \u003c- bigramas_limpios %\u003e% \n  filter(n \u003e 2) %\u003e% \n  graph_from_data_frame()\n\nbigram_plot \u003c- create_graph_plot(bigram_graph, \"Bigram Network\", \"Connections between bigrams\")\n\nno_graph \u003c- bigramas_no %\u003e% \n  filter(n \u003e 2) %\u003e% \n  graph_from_data_frame()\n\nno_plot \u003c- create_graph_plot(no_graph, 'Bigram Network of \"no\"', \"Connections with 'no' as the first word\")\n\nbigram_plot + no_plot\n```\n![Screenshot 2024-05-21 at 11 44 53](https://github.com/BORJAMOME/Agenda_2030/assets/19588053/b93a3544-0c42-4387-8c7f-dec5c6811893)\n\n## Conclusión\nEn este proyecto, hemos llevado a cabo un análisis exhaustivo de un texto en R, utilizando una variedad de librerías para la tokenización, filtrado, visualización y análisis de sentimientos. Los principales puntos de interés incluyen:\n\n**- Tokenización y Frecuencia:** Identificamos las palabras más frecuentes y analizamos la longitud de las oraciones.\n\n**- Stopwords:** Eliminamos palabras vacías para obtener una representación más precisa del contenido significativo.\n\n**- Visualización:** Utilizamos gráficos de barras y nubes de palabras para visualizar las palabras más frecuentes.\n\n**- Análisis de Sentimientos:** Detectamos y visualizamos los sentimientos y emociones presentes en el texto.\n\n**- N-gramas:** Exploramos las conexiones entre palabras mediante la tokenización en bigramas y trigramas y visualizamos estas conexiones mediante grafos.\n\nEste análisis proporciona una comprensión más profunda del texto y destaca cómo R puede ser una herramienta poderosa para el análisis de texto. Las visualizaciones y el análisis de sentimientos, en particular, ofrecen valiosos insights sobre el contenido y la estructura emocional del texto.\n\nEl uso de librerías como tidyverse, ggplot2, wordcloud2, y igraph facilita la manipulación y visualización de datos, permitiendo una exploración más rica y detallada del texto.\n\n¡Gracias por revisar este proyecto! Espero que encuentres útil y aplicable este enfoque para tus propios análisis de texto.\n\n\n\n\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborjamome%2Fagenda_2030","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fborjamome%2Fagenda_2030","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborjamome%2Fagenda_2030/lists"}