Librerias

Claro, aquí tienes un resumen:

  1. plotly: Para crear gráficos interactivos en R (con zoom, desplazamiento, etc.).

  2. ggplot2: Para crear gráficos estáticos de alta calidad usando la “gramática de los gráficos”.

  3. readr: Para leer y escribir archivos de datos (como CSV) de forma eficiente.

Objetivo

Analizar el rendimiento de los videos publicados en la red social TikTok, utilizando herramientas de visualización con R, específicamente ggplot2 y plotly.

Carga y transformación de datos

tiktok <- read_csv("~/Trabajos R/practicas u4/tiktok.csv")
## Rows: 19382 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (9): claim_status, video_transcription_text, verified_status, author_ban...
## dbl (3): #, video_id, video_duration_sec
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Limpieza de datos
tiktok <- tiktok %>%
  filter(!is.na(video_view_count), !is.na(video_like_count), !is.na(video_duration_sec))

# Conversión a numérico
tiktok <- tiktok %>%
  mutate(across(
    c(video_view_count, video_like_count, video_share_count,
      video_comment_count, video_download_count),
    ~ as.numeric(gsub(",", "", .))
  ))
## Warning: There were 5 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `across(...)`.
## Caused by warning:
## ! NAs introducidos por coerción
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 4 remaining warnings.
# Calcular tasa de engagement
tiktok <- tiktok %>%
  mutate(engagement_rate = (video_like_count + video_share_count + video_comment_count) / video_view_count)

Visualizaciones

Gráfico 1: Reproducciones vs Likes

p1 <- plot_ly(tiktok, 
              x = ~video_view_count, 
              y = ~video_like_count, 
              type = 'scatter', 
              mode = 'markers', 
              marker = list(color = '#1f77b4', opacity = 0.5),
              text = ~paste("Vistas:", video_view_count, "<br>Likes:", video_like_count),
              hoverinfo = 'text') %>%
  layout(title = "Relación entre Reproducciones y Likes",
         xaxis = list(title = "Reproducciones"),
         yaxis = list(title = "Likes"))

p1
## Warning: Ignoring 298 observations

Explicación:
Este gráfico interactivo permite a los usuarios pasar el cursor sobre los puntos para ver el número exacto de vistas y likes. Pueden hacer zoom o desplazarse para explorar mejor la relación entre estas métricas. La tendencia general muestra que más vistas suelen correlacionarse con más likes, pero la interactividad ayuda a identificar valores atípicos.


Gráfico 2: Duración del Video vs Engagement

p2 <- plot_ly(tiktok, 
              x = ~video_duration_sec, 
              y = ~engagement_rate, 
              type = 'scatter', 
              mode = 'markers', 
              marker = list(color = '#2ca02c', opacity = 0.5),
              text = ~paste("Duración (seg):", video_duration_sec, "<br>Engagement:", round(engagement_rate, 4)),
              hoverinfo = 'text') %>%
  layout(title = "Duración del Video vs Tasa de Engagement",
         xaxis = list(title = "Duración (seg)"),
         yaxis = list(title = "Engagement Rate"))

p2
## Warning: Ignoring 298 observations

Explicación:
Con este gráfico interactivo, los usuarios pueden explorar cómo la duración del video afecta la tasa de engagement. Al pasar el cursor, se muestran los valores exactos de duración y engagement, lo que facilita identificar si los videos más largos efectivamente generan más interacción.


Gráfico 3: Likes promedio por estado de verificación

likes_por_verificado <- tiktok %>%
  group_by(verified_status) %>%
  summarise(prom_likes = mean(video_like_count, na.rm = TRUE))

p3 <- plot_ly(likes_por_verificado, 
              x = ~verified_status, 
              y = ~prom_likes, 
              type = 'bar', 
              marker = list(color = c('#1f77b4', '#ff7f0e')),
              text = ~paste("Likes promedio:", round(prom_likes, 2)),
              hoverinfo = 'text') %>%
  layout(title = "Promedio de Likes por Estado de Verificación",
         xaxis = list(title = "Verificado"),
         yaxis = list(title = "Likes Promedio"))

p3

Explicación:
Este gráfico de barras interactivo muestra el promedio de likes para cuentas verificadas y no verificadas. Al pasar el cursor, los usuarios ven los valores exactos de likes promedio, lo que refuerza la observación de que las cuentas verificadas tienden a obtener más likes. —

Gráfico 4: Reproducciones vs Comentarios

p4 <- plot_ly(tiktok, 
              x = ~video_view_count, 
              y = ~video_comment_count, 
              type = 'scatter', 
              mode = 'markers', 
              marker = list(color = '#ff7f0e', opacity = 0.5),
              text = ~paste("Vistas:", video_view_count, "<br>Comentarios:", video_comment_count),
              hoverinfo = 'text') %>%
  layout(title = "Relación entre Reproducciones y Comentarios",
         xaxis = list(title = "Reproducciones"),
         yaxis = list(title = "Comentarios"))

p4
## Warning: Ignoring 298 observations

Explicación:
Este gráfico interactivo permite explorar la relación entre vistas y comentarios. La interactividad ayuda a identificar videos con muchas vistas pero pocos comentarios, lo que puede indicar diferencias en el tipo de contenido o audiencia.


Conclusión

Los datos indican que tanto la duración de los videos como el estado de la cuenta (verificada o no) tienen cierta influencia en el rendimiento del contenido. Los videos más largos tienden a generar más engagement, y las cuentas verificadas obtienen en promedio más likes. Este análisis demuestra el valor de las herramientas gráficas en R para explorar datos de redes sociales.