#  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)

Descripción de los datos

Descripción general

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.

¿Cómo, dónde y por quién se recopilaron?

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.

¿Están procesados previamente?

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:

  • Dispositivo de origen
  • ID del tuit
  • Texto
  • Fecha y hora de creación
  • Conteo de retuits
  • ID de respuesta
  • Conteo de favoritos
  • Estado de retuit

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.

Cita o referencia

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/

Plantilla de tabla resumen:

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.

Visualizaciones de datos

Grafico de barras

# 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)))

Descripción e interpretación del gráfico de actividad temporal:
  1. 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.

  2. Relación, tendencia y hallazgos principales:

    • Crecimiento inicial: Los datos demuestran que durante los años 2009 y 2010 la cuenta mantuvo un uso marginal. El crecimiento notable en el volumen de información inicia a partir de 2011.
    • Pico de actividad (2013): El año 2013 se identifica como el punto de máxima actividad en el conjunto de datos, con un total de 5,616 tuits. Este hallazgo explica la predominancia del uso de computadoras (Web Client) observada en análisis previos, al coincidir con este período de alta frecuencia histórica.
    • Estabilización de la muestra: Posterior al pico de 2013, la actividad se estabiliza en un rango de entre 2,200 y 3,400 publicaciones anuales durante el período 2015-2017. En esta etapa final es donde se percibe la transición hacia el uso de dispositivos móviles.
    • Límite de la recolección: La presencia de únicamente 3 registros en el año 2018 no representa una disminución en la actividad, sino que señala el límite temporal de la base de datos utilizada para esta práctica; la recolección de información finaliza al iniciar dicho año.

Gráfico de dispersión

# 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")

Descripción e interpretación del primer gráfico (Gráfica de dispersión logarítmica):
  1. 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.

  2. Relación, tendencia y hallazgos principales:

    • Correlación directa: La gráfica muestra una relación positiva muy clara; a medida que un tuit recibe más “Me gusta”, también aumenta su cantidad de retuits. Esto indica que ambas métricas de éxito van siempre de la mano.
    • El dispositivo no cambia la tendencia: Los colores de los distintos dispositivos están mezclados a lo largo de toda la línea diagonal. Esto significa que, sin importar si el tuit se publicó desde Android, iPhone o la Web, el comportamiento de la audiencia fue el mismo.
    • Conclusión: Los puntos en la esquina superior derecha representan los mensajes más influyentes. La tendencia lineal nos dice que el nivel de difusión (retuits) es altamente predecible si conocemos el nivel de aprobación (favoritos).

Diagrama de barras

# 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

Descripción e interpretación del segundo gráfico (Diagrama de barras de frecuencias):
  1. 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.

  2. Relación, tendencia y hallazgos principales:

    • Dominio del uso en computadora: A diferencia de lo que se podría pensar para una red social hoy en día, la gráfica revela que la gran mayoría de los tuits históricos (más de 10,700) se publicaron desde la computadora (“Twitter Web Client”). Esto se explica porque el conjunto de datos abarca desde el año 2009, una época donde la gestión de redes sociales se hacía principalmente desde el escritorio.
    • Uso de dispositivos móviles: En el ecosistema móvil, se observa un uso dividido pero considerable entre Android (más de 4,600 tuits) y iPhone (cerca de 4,000). Esta bimodalidad es una de las características más famosas de este conjunto de datos, ya que sugiere que la cuenta fue operada a lo largo del tiempo por diferentes actores usando distintos teléfonos (el titular de la cuenta y su equipo de relaciones públicas).
    • Volumen de datos: La altura de las barras confirma la enorme cantidad de información recopilada (casi 20,000 tuits solo entre estas tres fuentes). Esto nos da la seguridad de que cualquier patrón que encontremos tiene un respaldo estadístico muy sólido.

Gráfico de Dispersión con Fluctuación

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 = ","))
Resumen Estadístico de Interacción por Hora (2013-2018)
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
Descripción e interpretación de la densidad temporal de interacción:
  1. 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.

  2. Relación, tendencia y hallazgos principales:

    • Divergencia entre frecuencia e impacto: El análisis revela una desconexión clara entre el volumen de emisión de datos y su nivel de interacción. El punto de mayor saturación de mensajes ocurre a las 15:00 horas (1,648 publicaciones); sin embargo, el impacto en esta franja es bajo, registrando una mediana de apenas 167 favoritos por mensaje. La masificación de contenido por la tarde tiende a diluir la atención de la audiencia.
    • Pico crítico de eficiencia matutina: La línea de tendencia y el análisis tabular confirman un pico máximo de interacción a las 06:00 horas. A pesar de contar con un volumen moderado de generación de datos (665 publicaciones), el promedio de validación se dispara a 43,366 favoritos por tuit, con una mediana de 16,989. Esto demuestra que la ventana de publicación más eficiente se encuentra al inicio de la jornada informativa.
    • Estabilidad en horarios no hábiles: Se observa que las publicaciones realizadas en horarios nocturnos (18:00 a 22:00 horas) logran promedios de interacción superiores a los 20,000 favoritos. Esto indica una alta retención de la audiencia fuera del horario laboral estándar.
    • Comportamiento tecnológico: La distribución de los puntos evidencia que, en los horarios de mayor eficiencia de impacto (madrugada y primera hora de la mañana), predomina el uso de dispositivos móviles. El cliente web (computadora) concentra su mayor densidad visual durante el horario laboral estándar, coincidiendo matemáticamente con las horas de menor eficiencia de interacción.