suppressWarnings(suppressPackageStartupMessages({
library(readxl)
library(dplyr)
library(stringr)
library(ggplot2)
library(knitr)
library(tidytext)
library(stopwords)
library(wordcloud2)
library(syuzhet)
library(tidyr)
library(udpipe)
library(tm)
library(reshape2)
library(topicmodels)
}))
Trabajo de Taller de investigación: text mining
1 Repositorio en GitHub
2 Introducción
3 Opiniones de la comunidad IT sobre la inteligencia artificial generativa: análisis de comentarios en Reddit
3.1 Objetivo general
Analizar las opiniones y preocupaciones expresadas por desarrolladores y personal IT respecto a la inteligencia artificial generativa y los grandes modelos de lenguaje (LLM), a través de sus comentarios en Reddit.
3.2 Objetivos específicos
- Identificar temas recurrentes en las discusiones sobre IA generativa dentro de comunidades técnicas.
- Explorar las emociones y actitudes predominantes respecto a herramientas como ChatGPT, GitHub Copilot, Cursor, etc.
- Detectar patrones de aceptación, resistencia o preocupación vinculados al impacto laboral, ético o productivo de estas tecnologías.
3.3 Pregunta de investigación
¿Qué piensan los desarrolladores y profesionales IT sobre la inteligencia artificial generativa y sus aplicaciones?
3.3.1 Subpreguntas
- ¿Qué temas o preocupaciones se mencionan con mayor frecuencia?
- ¿Qué actitudes predominan: entusiasmo, escepticismo, temor, indiferencia?
3.4 Hipótesis
- Predominio de enfoque funcional y pragmático: la mayoría de los comentarios sobre IA generativa expresan una actitud pragmática y centrada en su utilidad práctica y productividad.
- Críticas centradas en problemas técnicos: las críticas a la IA generativa en comentarios negativos se centran más en sus limitaciones técnicas que en preocupaciones éticas o laborales.
- Presencia significativa de preocupaciones sobre el impacto laboral: existe un segmento relevante de la comunidad IT que expresa preocupación por el posible impacto negativo de la IA generativa en el futuro del trabajo y la estabilidad laboral.
3.5 Variables principales
Variable | Tipo | Cómo se obtiene |
---|---|---|
sentimiento | categórica (positivo/negativo/neutral) | análisis de sentimiento |
emoción | categórica (aceptación, escepticismo, temor, etc.) | análisis NLP |
tema_principal | categórica (uso práctico, crítica técnica, crítica ética, impacto laboral) | modelado de tópicos |
menciona_productividad | binaria | regex/keywords: automatizar, ayuda, mejora |
menciona_empleo | binaria | desempleo, reemplazo, trabajo, fin del desarrollador |
menciona_errores | binaria | alucina, error, se equivoca, confunde |
menciona_ética | binaria | sesgo, ética, desinformación |
3.6 Metodología
Se adopta un enfoque exploratorio y descriptivo, basado en minería de texto y procesamiento de lenguaje natural (NLP). La extracción de datos se realiza con Python (utilizando la librería praw
para acceder a la API de Reddit), mientras que el análisis y visualización se llevan a cabo en R, con redacción final en Quarto.
3.7 Descripción del corpus
Los datos provienen de comentarios extraídos del subreddit r/devsarg
, un espacio activo de discusión entre profesionales IT en Reddit, que refleja percepciones actuales sobre inteligencia artificial generativa y tecnologías asociadas.
3.8 Antecedentes
Este análisis se inspira en estudios como la Stack Overflow Developer Survey 2023 (si bien ese instrumento recolecta información de primera mano, a diferencia de esta), que recoge información de primera mano mediante encuestas directas a desarrolladores a nivel global. En contraste, este trabajo se basa en una fuente secundaria, y se analizan datos extraídos de interacciones en línea en un entorno virtual más localizado, predominantemente habitado por usuarios de Argentina y el Cono Sur.
Fuente: Stack Overflow Developer Survey 2023 – Sentiment and usage: AI
4 Análisis
Tras completar las fases iniciales de extracción de datos desde Reddit, a las que se puede acceder en Extracción de datos con PRAW y la posterior manipulación y transformación de los datos en Manipulación de datos, se da inicio a la fase de análisis, donde se aplican técnicas de minería de texto para explorar las opiniones de la comunidad IT sobre la inteligencia artificial generativa. Para comprender en mayor profundidad los criterios y decisiones tomadas durante la etapa de extracción, puede consultarse también el documento metodológico.
5 Librerías
Importamos las librerías. Este análisis se apoyó en varias librerías del universo R para procesamiento, análisis y visualización de texto. Se utilizaron: readxl, dplyr, stringr, ggplot2, knitr, tidytext, stopwords, wordcloud2, syuzhet, tidyr, udpipe, tm, reshape2 y topicmodels.
6 Carga de datos
Se leen los archivos de Excel. En el paso anterior de transformación, se dividió el archivo .json extraído de Reddit en dos entidades: comentarios y publicaciones, para mantener una estructura relacional y que los comentarios no pierdan los metadatos de las publicaciones asociadas.
<- read_excel("output_files/comments.xlsx")
comments <- read_excel("output_files/posts.xlsx") posts
Se obtiene un vistazo preliminar de los primeros registros de los conjuntos de datos para verificar que la lectura del archivo fue exitosa y entender la estructura de las variables antes de iniciar el análisis como tal.
6.1 Estructura de comentarios
head(comments, 5) %>%
kable()
body | id | author | time | parent |
---|---|---|---|---|
pensé que ya se había muerto | t1_mlkvnmv | holyknight00 | 2025-04-05 18:40:19 | t3_1jsa779 |
ahora es una IA | t1_mlkzyqc | roberp81 | 2025-04-05 19:04:39 | t1_mlkvnmv |
Hasta un muerto se da cuenta de la venta de humo del vibe coding | t1_mlmkcp0 | SmokeFrequent1054 | 2025-04-06 00:41:39 | t1_mlkvnmv |
Hace como 20 años que se murió, pero cuando sabes, sabes. |
Edit:
Para los que el escepticismo no los deje darse cuenta que es algo posta y no un quote inventado, aunque no fuese directamente sobre vibe coding (obviamente), aplica. Esto es un proceso que arranca desde hace mucho, las LLM y el vibe coding son el último eslabón nomás.
On the foolishness of natural language programming https://www.cs.utexas.edu/~EWD/ewd06xx/EWD667.PDF|t1_mlledtg |–Quartz– |2025-04-05 20:26:48 |t1_mlkvnmv | |“Qué tragedia moderna”. ChatGPT:
https://preview.redd.it/oiquq61p8wse1.jpeg?width=818&format=pjpg&auto=webp&s=26242f0e8143dea29eac0955e64eb7fc38460c28 |t1_mlg8noo |syltr1x |2025-04-04 22:23:41 |t3_1jrobic |
6.2 Estructura de publicaciones
head(posts, 3) %>%
kable()
title | score | id | url | comms_num | created | body |
---|---|---|---|---|---|---|
Tambien Dios hablo del vibe coding y los llms y vio que no era buenos | 17 | 1jsa779 | https://www.reddit.com/r/devsarg/comments/1jsa779/tambien_dios_hablo_del_vibe_coding_y_los_llms_y/ | 4 | 1743878011 | https://preview.redd.it/57flfxie82te1.png?width=3956&format=png&auto=webp&s=c6c93bc3883b5ef0cd0f71a86bba10acffdf689c |
ChatGPT basado JAJAJA | 95 | 1jrobic | https://www.reddit.com/r/devsarg/comments/1jrobic/chatgpt_basado_jajaja/ | 8 | 1743805026 | https://preview.redd.it/9ymugg5d7wse1.png?width=474&format=png&auto=webp&s=3a2af109da18dbb05864a5e3549dc450f4bc5903 |
La respuesta: LO MEJOR| |Satya Nadella (MSFT CEO) usa vibe coding para crear un emulador de Altair Basic Machine | 44|1jri2nv |https://v.redd.it/ps4eo15svuse1 | 20| 1743789019|Yo comparto, pero sabemos que es puro humo, o no?
source: https://xcancel.com/satyanadella/status/1908205881835319800
info al articulo mencionado: https://github.blog/news-insights/product-news/github-copilot-agent-mode-activated/|
7 Preprocesamiento de datos
Se limpia el texto de los comentarios; se pasa todo a minúsculas, se eliminan links, símbolos irrelevantes, etc.
<- comments %>%
comments_clean mutate(body = str_to_lower(body)) %>%
mutate(body = str_remove_all(body, "http\\S+|www\\S+")) %>%
mutate(body = str_remove_all(body, "[^a-záéíóúüñ\\s]")) %>%
mutate(body = str_squish(body))
Como los títulos y el cuerpo de las publicaciones también tienen información muy relevante, se hará una combinación de ambos dataframes, con el mismo procesamiento.
<- posts %>%
posts_clean mutate(body = str_to_lower(body)) %>%
mutate(body = str_remove_all(body, "http\\S+|www\\S+")) %>%
mutate(body = str_remove_all(body, "[^a-záéíóúüñ\\s]")) %>%
mutate(body = str_squish(body))
El resultado del preprocesamiento son los siguientes dataframes. Publicaciones:
head(posts_clean, 3) %>%
kable()
title | score | id | url | comms_num | created | body |
---|---|---|---|---|---|---|
Tambien Dios hablo del vibe coding y los llms y vio que no era buenos | 17 | 1jsa779 | https://www.reddit.com/r/devsarg/comments/1jsa779/tambien_dios_hablo_del_vibe_coding_y_los_llms_y/ | 4 | 1743878011 | |
ChatGPT basado JAJAJA | 95 | 1jrobic | https://www.reddit.com/r/devsarg/comments/1jrobic/chatgpt_basado_jajaja/ | 8 | 1743805026 | la respuesta lo mejor |
Satya Nadella (MSFT CEO) usa vibe coding para crear un emulador de Altair Basic Machine | 44 | 1jri2nv | https://v.redd.it/ps4eo15svuse1 | 20 | 1743789019 | yo comparto pero sabemos que es puro humo o no source info al articulo mencionado |
Comentarios:
head(comments_clean, 5) %>%
kable()
body | id | author | time | parent |
---|---|---|---|---|
pensé que ya se había muerto | t1_mlkvnmv | holyknight00 | 2025-04-05 18:40:19 | t3_1jsa779 |
ahora es una ia | t1_mlkzyqc | roberp81 | 2025-04-05 19:04:39 | t1_mlkvnmv |
hasta un muerto se da cuenta de la venta de humo del vibe coding | t1_mlmkcp0 | SmokeFrequent1054 | 2025-04-06 00:41:39 | t1_mlkvnmv |
hace como años que se murió pero cuando sabes sabes edit para los que el escepticismo no los deje darse cuenta que es algo posta y no un quote inventado aunque no fuese directamente sobre vibe coding obviamente aplica esto es un proceso que arranca desde hace mucho las llm y el vibe coding son el último eslabón nomás on the foolishness of natural language programming | t1_mlledtg | –Quartz– | 2025-04-05 20:26:48 | t1_mlkvnmv |
qué tragedia moderna chatgpt | t1_mlg8noo | syltr1x | 2025-04-04 22:23:41 | t3_1jrobic |
7.1 Lematización y tokenización
Se lematizan, tokenizan y combinan ambos dataframes con rbind.
#modelo_ud <- udpipe_download_model(language = "spanish", model_dir = "models")
<- udpipe_load_model("models/spanish-gsd-ud-2.5-191206.udpipe")
modelo <- udpipe_annotate(modelo, x = comments_clean$body)
anotados_comentarios <- as.data.frame(anotados_comentarios)
anotados_comentarios $origen <- "comentario"
anotados_comentarios<- udpipe_annotate(modelo, x = posts_clean$body)
anotados_posts <- as.data.frame(anotados_posts)
anotados_posts $origen <- "post"
anotados_posts<- bind_rows(anotados_comentarios, anotados_posts) tokens_combinados
Observación del dataframe luego del procesamiento de datos y la lematización (que incluye el tokenizado).
head(tokens_combinados %>% select(token, lemma, upos, origen), 10) %>%
kable()
token | lemma | upos | origen |
---|---|---|---|
pensé | pensar | VERB | comentario |
que | que | SCONJ | comentario |
ya | ya | ADV | comentario |
se | él | PRON | comentario |
había | haber | AUX | comentario |
muerto | morir | VERB | comentario |
ahora | ahora | ADV | comentario |
es | ser | AUX | comentario |
una | uno | DET | comentario |
ia | ia | NOUN | comentario |
7.2 Eliminación de stopwords
<- tibble(palabra = stopwords("es")) stopwords_es
7.3 Personalización de las stopwords
Dado que las stopwords que nos ofrece la librería stopwords para la lengua española no es exhaustiva, se la personaliza para agregar unidades relevantes para este caso. Si bien las stopwords suelen ser mayormente las preposiciones, se agregan verbos en infinitivo porque no aportan al análisis. También se elimina la palabra removed, relacionada con la moderación de las interacciones en la plataforma Reddit, para quitar ruido innecesario en el corpus
<- tibble(lemma = c("si", "mas", "ahora", "menos", "solo", "vos",
mis_stopwords "mismo", "mejor", "sino", "q","así", "ser", "hacer", "tener", "haber", "poder", "ir", "decir", "usar", "saber", "dar", "pasar", "querer", "ver", "creer","removed"))
<- tibble(lemma = stopwords("es")) %>%
stopwords_es bind_rows(mis_stopwords)
<- tokens_combinados %>%
tokens_combinados filter(!is.na(lemma)) %>%
anti_join(stopwords_es, by = "lemma")
8 Análisis de frecuencia de palabras
<- tokens_combinados %>%
frecuencias count(lemma, sort = TRUE)
head(frecuencias, 20) %>%
ggplot(aes(x = reorder(lemma, n), y = n)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(title = "Palabras más frecuentes en los comentarios", x = "", y = "Frecuencia")
wordcloud2(data = frecuencias, size = 1.5, color = 'random-light', backgroundColor = "black")
Palabras como ia, código, gente, programadores y trabajo, además de años, demuestran que en el conjunto de datos se encuentran discusiones relevantes no solo sobre la inteligencia artificial generativa como tal, sino sobre el futuro del trabajo y la productividad.
9 Modelado de tópicos con LDA
<- tokens_combinados %>%
dtm count(doc_id, lemma) %>%
cast_dtm(document = doc_id, term = lemma, value = n)
<- LDA(dtm, k = 3, control = list(seed = 1234)) lda_model
A continuación, se extraen las palabras más representativas por tema y se calcula la probabilidad de cada palabra en cada tópico. Luego, se agrupa por tópico y se eligen las 10 palabras más representativas (con mayor beta), ya que las palabras con mayor beta para cada tópico son las que mejor definen ese tema.
<- tidy(lda_model, matrix = "beta") %>%
topics group_by(topic) %>%
top_n(10, beta) %>%
arrange(topic, -beta)
Aquí se agrupan las palabras por tópico (una faceta por cada tema) y se muestra qué tan importante (qué tan alta es beta) es cada término para ese tópico.
ggplot(topics, aes(x = reorder_within(term, beta, topic),
y = beta, fill = factor(topic))) + geom_col(show.legend = FALSE) + facet_wrap(~ topic, scales = "free") + coord_flip() + scale_x_reordered() + labs(title = "Tópicos identificados por LDA", x = "Términos", y = "Importancia")
Con estos tres grandes tópicos obtenidos mediante LDA, se observa una orientación pragmática en las conversaciones de la comunidad IT sobre la inteligencia artificial generativa. Entre los resultados se destacan el interés por su aplicación concreta en el desarrollo y la programación (tópico 2), así como su impacto en el ámbito laboral y profesional (tópico 1). El tópico 3, más vinculado a aspectos sociales, muestra que también se tienen discusiones sobre dinámicas colectivas y cuestiones socioeconómicas, como el papel de los sindicatos. Esto complementa las preocupaciones sobre el trabajo ya observadas y refuerza las hipótesis de un enfoque funcional y de alerta ante las transformaciones laborales. La falta de un tópico enfocado exclusivamente en aspectos éticos sugiere que, en comparación con los temas técnicos y ocupacionales, las inquietudes éticas ocupan un lugar más bien subalterno.
10 Análisis de sentimientos
Se utiliza el léxico NRC adaptado al español, el cual clasifica las palabras en categorías de emociones básicas (como joy, fear, anger, trust, etc.) y también según polaridad (positive o negative).
<- get_nrc_sentiment(tokens_combinados$lemma, language = "spanish") sentimientos
$palabra <- tokens_combinados$lemma sentimientos
<- sentimientos %>%
sentimientos_totales select(-palabra) %>%
summarise(across(everything(), sum)) %>%
pivot_longer(cols = everything(), names_to = "sentimiento", values_to = "frecuencia") %>%
arrange(desc(frecuencia))
ggplot(sentimientos_totales, aes(x = reorder(sentimiento, frecuencia), y = frecuencia, fill = sentimiento)) +
geom_col(show.legend = FALSE) +
coord_flip() +
labs(
title = "Distribución de sentimientos en los comentarios",
x = "Sentimiento",
y = "Frecuencia"
)
A partir del análisis de los comentarios y publicaciones combinados, se observa una predominancia de sentimientos positivos, seguidos por negativos, y en menor medida, emociones como trust, anticipation, sadness y fear. Esta distribución posibilta la hipótesis de una actitud pragmática y funcional por parte de los profesionales IT frente a la inteligencia artificial generativa, con una valoración positiva de su potencial productivo, aunque sin dejar de lado preocupaciones técnicas o éticas.
Asimismo, el hecho de que las emociones negativas no sean dominantes, pero sí estén presentes de forma significativa (fear, sadness, anger), permite identificar tensiones latentes respecto al impacto de estas tecnologías, especialmente cuando se piensa en la calidad de los resultados y el futuro del trabajo.
<- sentimientos_totales %>%
polaridad filter(sentimiento %in% c("positive", "negative"))
ggplot(polaridad, aes(x = sentimiento, y = frecuencia, fill = sentimiento)) +
geom_col(show.legend = FALSE) +
labs(title = "Polaridad de los sentimientos", x = "Polaridad", y = "Frecuencia")
11 Interpretación de resultados y discusión
11.1 ¿Qué temas o preocupaciones se mencionan con mayor frecuencia?
Para contestar esta pregunta, se identifican los temas más mencionados en los textos. Para ello, se crean columnas binarias que detectan si en cada comentario o publicación aparecen palabras clave asociadas a productividad, empleo, errores técnicos o cuestiones éticas. Se cuenta cuántas veces se menciona cada tema y se visualiza en un gráfico. Esto permite observar qué preocupaciones son más frecuentes en el discurso sobre IA generativa entre profesionales IT.
<- tokens_combinados %>%
tokens_combinados mutate(
menciona_productividad = if_else(str_detect(lemma,
"automatizar|automatización|ayuda|mejora|productividad|eficiencia|rápido|velocidad|optimizar|optimización|rendimiento|agilizar|facilitar|acelerar|aumentar"), 1, 0),
menciona_empleo = if_else(str_detect(lemma,
"desempleo|reemplazo|trabajo|empleo|ocupación|puesto|laboral|desarrollador|profesión|oficio|recursos|sustituir|desplazar|perder"), 1, 0),
menciona_errores = if_else(str_detect(lemma,
"alucinar|alucinación|error|equivocar|confundir|malo|incorrecto|fallo|problema|falla|defecto|limitación|inexacto|bug"), 1, 0),
menciona_etica = if_else(str_detect(lemma,
"sesgo|ética|desinformación|manipular|engaño|falsedad|engañoso|responsabilidad|transparencia|discriminación|prejuicio|moral|control|censura|justicia|privacidad"), 1, 0)
)<- tokens_combinados %>%
menciones_totales summarise(
productividad = sum(menciona_productividad),
empleo = sum(menciona_empleo),
errores = sum(menciona_errores),
etica = sum(menciona_etica)
%>%
) pivot_longer(cols = everything(), names_to = "categoria", values_to = "frecuencia")
ggplot(menciones_totales, aes(x = reorder(categoria, frecuencia), y = frecuencia, fill = categoria)) +
geom_col(show.legend = FALSE) +
coord_flip() +
labs(
title = "Frecuencia de menciones por tema clave",
x = "Categoría",
y = "Frecuencia"
+
) scale_fill_brewer(palette = "Set2")
Puede observarse un enfoque pragmático en los usuarios del subreddit acerca del impacto directo de la tecnología. Los temas de ‘empleo’ (más de 150 menciones) y ‘productividad’ (más de 100 menciones) son los más frecuentes, lo que demuestra la importancia de estos tópicos. Las menciones de ‘errores’ también son significativas, mientras que la ‘ética’ es el tema menos discutido.
Así, , los profesionales IT que participan en estas discusiones sobre IA generativa parecen tener una mentalidad muy pragmática, orientada a la utilidad y profundamente consciente de las implicaciones laborales y los desafíos técnicos de esta tecnología. Las consideraciones éticas están presentes, pero ocupan un segundo plano no significativo en comparación con estas preocupaciones más directas y personales.
11.2 ¿Qué actitudes predominan: entusiasmo, escepticismo, temor, indiferencia?
Para contestar esta pregunta, se agrupan las emociones en tres grandes actitudes frente a la inteligencia artificial generativa: entusiasmo, temor y escepticismo. La categoría de entusiasmo incluye emociones como alegría, confianza y anticipación, además de la polaridad positiva, y refleja una actitud optimista respecto al potencial productivo de estas tecnologías. Por otro lado, las emociones vinculadas al temor, como miedo y tristeza, expresan inquietudes relacionadas con el impacto de la IA en el trabajo, la precisión de sus respuestas o la incertidumbre general frente a su avance.
El escepticismo, por otro lado, se asocia con emociones como enojo, disgusto y la polaridad negativa, y suele expresar una postura crítica o de rechazo, especialmente frente a limitaciones técnicas o posibles consecuencias sociales.
<- sentimientos_totales %>%
actitudes mutate(
actitud = case_when(
%in% c("joy", "trust", "positive", "anticipation") ~ "entusiasmo",
sentimiento %in% c("fear", "sadness") ~ "temor",
sentimiento %in% c("anger", "disgust", "negative") ~ "escepticismo",
sentimiento TRUE ~ "otro"
)%>%
) group_by(actitud) %>%
summarise(frecuencia = sum(frecuencia))
ggplot(actitudes, aes(x = actitud, y = frecuencia, fill = actitud)) +
geom_col(show.legend = FALSE) +
labs(title = "Actitudes predominantes en los comentarios", x = "", y = "Frecuencia")
La distribución observada muestra un predominio de actitudes entusiastas, seguidas por una presencia significativa tanto de escepticismo seguidamente de temor, por lo que puede considerarse una comunidad que valora el potencial de la IA pero que no deja de señalar sus riesgos y desafíos.
12 Conclusiones
Al analizar los comentarios y publicaciones del subreddit r/devsarg, se logró explorar las percepciones y actitudes de una comunidad técnica ante la inteligencia artificial generativa, con foco en herramientas como ChatGPT y GitHub Copilot, entre otras. A través de distintas técnicas de minería de texto, se evidenció una orientación marcadamente pragmática: los tópicos más relevantes giraron en torno a la productividad y el impacto laboral en el desarrollo de software, en línea con las hipótesis planteadas. Los sentimientos predominantes fueron positivos, acompañados de emociones como alegría, confianza y anticipación, lo cual sugiere una actitud mayoritariamente entusiasta hacia la adopción de estas tecnologías.
Sin embargo, también emergieron con fuerza menciones críticas asociadas al escepticismo técnico y al temor por el futuro del empleo, mientras que las preocupaciones éticas ocuparon un lugar marginal en las conversaciones. Esta jerarquización temática refuerza la idea de que, en contextos técnicos como este, las evaluaciones sobre la inteligencia artificial generativa se centran principalmente en su utilidad práctica y en los riesgos concretos percibidos en términos de desempeño o estabilidad laboral, antes que en debates más abstractos sobre sesgos discriminatorios, ética o regulación.
13 Referencias
Ariana Bardauil. Varios recursos de minería de texto. Disponible en: https://ariibard.github.io/
Number Analytics. Advanced Text Mining with tidytext in R. Disponible en: https://www.numberanalytics.com/blog/advanced-text-mining-tidytext-r
GitHub. PRAW – Python Reddit API Wrapper. Disponible en: https://github.com/praw-dev/praw