# biblioteca que contiene el conjunto de datos aquí
library(dslabs)
# carga del conjunto de datos
data(trump_tweets)
#bibliotecas - herramientas de ayuda para las graficas
library(ggplot2)
library(dplyr)
library(scales)
library(knitr)
El conjunto de datos analiza la actividad en Twitter (actualmente X) de Donald Trump, incluyendo información como el dispositivo utilizado, la fecha y hora de publicación, el contenido del tuit, la cantidad de “me gusta” y retweets, así como si se trata de una publicación original o compartida. Su importancia radica en que se trata de una figura con gran influencia política y mediática, lo que permite estudiar cómo se comporta en redes sociales y cómo interactúan los usuarios con su contenido. A partir de estos datos, es posible realizar diversos análisis, como identificar cuáles publicaciones generan mayor impacto, los horarios y dispositivos más utilizados, la frecuencia de actividad y características del contenido que publica.
Los datos fueron recopilados y consolidados por la plataforma The Trump Twitter Archive (cuyo sitio oficial es https://www.thetrumparchive.com/).
El conjunto de datos abarca el registro histórico de todos los tuits emitidos por la cuenta de Donald Trump durante el período que comprende desde el año 2009 hasta el 2017.
Sí, los datos cuentan con procesamiento previo.
El archivo de ayuda indica que han sido estructurados formalmente
como un objeto de clase data.frame,
tabulando la información extraída de Twitter en 8 variables
específicas:
Adicionalmente, la documentación revela un procesamiento analítico avanzado:
Se llevó a cabo un análisis de sentimientos sobre un subconjunto específico de los datos correspondientes al período de campaña electoral (comprendido entre el 17 de junio de 2015 y el 8 de noviembre de 2016).
Los resultados tabulados de este procesamiento previo se incluyen
bajo el nombre sentiment_counts.
Según el archivo de ayuda proporcionado, los datos no provienen de un artículo científico o publicación literaria, sino de una base de datos web independiente.
La referencia oficial a incluir es el enlace directo a la fuente primaria de recolección:
The Trump Twitter Archive
https://www.thetrumparchive.com/
| Variable | Descripción |
|---|---|
| source | Dispositivo, plataforma o servicio utilizado para redactar el tuit (ej. Android, iPhone). |
| id_str | Identificador único del tuit. |
| text | Contenido textual del tuit. |
| created_at | Fecha y hora exacta en la que se publicó el tuit. |
| retweet_count | Número de veces que el tuit había sido retuiteado al momento de crear el conjunto de datos. |
| in_reply_to_user_id_str | Si el tuit es una respuesta, contiene el ID de usuario de la persona a la que se le está respondiendo. |
| favorite_count | Número de veces que el tuit había sido marcado como favorito (“Me gusta”) al momento de crear el conjunto de datos. |
| is_retweet | Valor lógico (TRUE/FALSE) que indica si el mensaje es un retuit o un tuit original. |
# 1. Extraemos el año de la fecha y contamos cuántos tuits hay por año
tuits_por_año <- trump_tweets %>%
mutate(año = as.numeric(format(created_at, "%Y"))) %>%
count(año)
# 2. Imprimimos la tabla para que aparezca en la consola y en el reporte final
print(tuits_por_año)
## año n
## 1 2009 43
## 2 2010 139
## 3 2011 749
## 4 2012 3206
## 5 2013 5616
## 6 2014 2319
## 7 2015 3009
## 8 2016 3426
## 9 2017 2251
## 10 2018 3
# 3. Graficamos usando exactamente esos números pre-calculados
ggplot(tuits_por_año, aes(x = año, y = n)) +
geom_col(fill = "#8e44ad", color = "white") +
# Agregamos las etiquetas de texto encima de cada barra
geom_text(aes(label = comma(n)), vjust = -0.5, size = 3.5, fontface = "bold") +
theme_minimal() +
labs(title = "Evolución histórica del volumen de tuits por año (2009 - 2017)",
x = "Año",
y = "Cantidad de Tuits") +
# Forzamos que el eje X muestre todos los años uno por uno
scale_x_continuous(breaks = 2009:2018) +
scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.15)))
Variables graficadas y justificación: Se analizó
la frecuencia de publicaciones a través del tiempo mediante la
extracción del año de la variable created_at. Previo a la
generación de la gráfica, se generó una tabla resumen en la consola para
validar los totales anuales. Se utilizó un diagrama de columnas con
etiquetas numéricas para identificar con precisión los períodos de mayor
carga de datos y las etapas de menor actividad.
Relación, tendencia y hallazgos principales:
# Gráfica de dispersión coloreada por plataforma de origen
library(scales)
ggplot(trump_tweets, aes(x = favorite_count + 1, y = retweet_count + 1, color = source)) +
geom_point(alpha = 0.5) +
theme_minimal() +
labs(title = "Relación entre cantidad de Favoritos y Retuits en la cuenta de Trump",
x = "Cantidad de Favoritos (Me gusta)",
y = "Cantidad de Retuits",
color = "Dispositivo de origen") +
# Agregamos el parámetro labels
scale_x_log10(labels = comma) +
scale_y_log10(labels = comma) +
theme(legend.position = "bottom")
Variables graficadas y por qué: Se analizan las
variables favorite_count (en el eje X) y
retweet_count (en el eje Y), diferenciando cada punto por
el color según su dispositivo de origen (source). Se
utilizó una escala logarítmica en ambos ejes porque en las redes
sociales la mayoría de los tuits tienen pocas interacciones, mientras
que unos pocos son extremadamente virales; esta escala permite ver todos
los datos de forma equilibrada. En el código se sumó “+ 1” para evitar
errores con los tuits que tienen cero interacciones.
Relación, tendencia y hallazgos principales:
# 1. Pre-calculamos los totales para poder usarlos como etiquetas
tuits_conteo <- trump_tweets %>%
filter(source %in% c("Twitter for Android", "Twitter for iPhone", "Twitter Web Client")) %>%
count(source) # Esto crea un data frame con la columna 'n' que tiene los totales
# 2. Creamos la gráfica con los datos pre-calculados
ggplot(tuits_conteo, aes(x = source, y = n, fill = source)) +
geom_col() + # geom_col() es la alternativa a geom_bar() cuando ya tenemos los totales
# Agregamos los textos encima de las barras, formateados con comas
geom_text(aes(label = comma(n)),
vjust = -0.5, # Mueve el texto un poco hacia arriba (fuera de la barra)
size = 4, # Tamaño de la letra
fontface = "bold", # Pone el número en negrita
color = "black") +
theme_minimal() +
labs(title = "Distribución de frecuencias por plataforma de origen (2009 - 2017)",
x = "Plataforma de Origen (Dispositivo / Cliente)",
y = "Cantidad Total de Tuits") +
# expand: le da un 10% más de espacio arriba a la gráfica para que el número no se corte
scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.1))) +
scale_fill_manual(values = c("Twitter for Android" = "#a4c639",
"Twitter for iPhone" = "#555555",
"Twitter Web Client" = "#2980b9")) +
theme(legend.position = "none") # Ocultamos la leyenda
Variables graficadas y por qué: Se utiliza la
variable source (en el eje X) para contar cuántos tuits se
publicaron desde cada plataforma (en el eje Y). Elegimos un diagrama de
barras porque es la mejor herramienta para comparar cantidades totales
entre categorías. Los datos se filtraron para mostrar solo las tres
plataformas más usadas, eliminando aplicaciones secundarias para evitar
distracciones visuales.
Relación, tendencia y hallazgos principales:
library(dplyr)
library(ggplot2)
library(scales)
# 1. Preparación de los datos: Extraer la hora con funciones base de R
tuits_por_hora <- trump_tweets %>%
filter(created_at >= as.POSIXct("2013-01-01") & created_at <= as.POSIXct("2018-01-01")) %>%
filter(source %in% c("Twitter for Android", "Twitter for iPhone", "Twitter Web Client")) %>%
# Extraemos la hora sin usar lubridate
mutate(hora_del_dia = as.POSIXlt(created_at)$hour)
# 2. Gráfica de dispersión: Hora vs Favoritos
ggplot(tuits_por_hora, aes(x = hora_del_dia, y = favorite_count + 1)) +
geom_jitter(aes(color = source), alpha = 0.3, size = 1, width = 0.3) +
geom_smooth(color = "black", method = "gam", se = FALSE) +
theme_minimal() +
labs(title = "Densidad de Interacción según la Hora del Día (2013 - 2018)",
x = "Hora del día (formato 24h)",
y = "Cantidad de Favoritos (Escala Log)",
color = "Plataforma") +
scale_y_log10(labels = comma) +
scale_x_continuous(breaks = seq(0, 23, by = 2)) +
scale_color_manual(values = c("Twitter for Android" = "#a4c639",
"Twitter for iPhone" = "#555555",
"Twitter Web Client" = "#2980b9")) +
theme(legend.position = "bottom")
# 1. Generación de la tabla de métricas por hora
tabla_estadistica <- tuits_por_hora %>%
group_by(hora_del_dia) %>%
summarise(
"Total Tuits" = n(),
"Promedio Likes" = round(mean(favorite_count), 0),
"Mediana Likes" = round(median(favorite_count), 0)
) %>%
arrange(hora_del_dia)
# 2. Presentación formal de la tabla en el documento
kable(tabla_estadistica,
caption = "Resumen Estadístico de Interacción por Hora (2013-2018)",
format.args = list(big.mark = ","))
| hora_del_dia | Total Tuits | Promedio Likes | Mediana Likes |
|---|---|---|---|
| 0 | 118 | 14,270 | 3,913 |
| 1 | 72 | 12,927 | 990 |
| 2 | 57 | 19,380 | 543 |
| 3 | 62 | 6,163 | 261 |
| 4 | 114 | 9,595 | 358 |
| 5 | 455 | 33,633 | 7,620 |
| 6 | 665 | 43,366 | 16,989 |
| 7 | 754 | 38,779 | 16,078 |
| 8 | 894 | 29,730 | 5,233 |
| 9 | 894 | 16,682 | 443 |
| 10 | 978 | 9,657 | 187 |
| 11 | 1,048 | 8,740 | 130 |
| 12 | 897 | 11,181 | 144 |
| 13 | 1,182 | 8,227 | 102 |
| 14 | 1,409 | 7,430 | 117 |
| 15 | 1,648 | 7,731 | 167 |
| 16 | 1,151 | 10,669 | 273 |
| 17 | 640 | 22,102 | 5,366 |
| 18 | 571 | 23,353 | 4,852 |
| 19 | 528 | 21,479 | 4,292 |
| 20 | 620 | 17,650 | 4,622 |
| 21 | 607 | 22,368 | 4,854 |
| 22 | 392 | 20,014 | 4,714 |
| 23 | 232 | 17,574 | 4,632 |
Variables graficadas y justificación: Se realizó
la extracción de la hora de publicación a partir de la variable
created_at (eje X) y se relacionó con la variable
favorite_count (eje Y). Se aplicó una escala logarítmica
con ajuste de +1 para normalizar la visualización de datos con extrema
variabilidad. El uso de la geometría geom_jitter permite
observar la concentración de los datos, mientras que la línea de
tendencia central (geom_smooth) aproxima el comportamiento
estadístico del impacto a lo largo del ciclo diario durante el período
2013-2018.
Relación, tendencia y hallazgos principales: