1. Carga y Limpieza Básica de los Datos

datos <- read_csv("tiktok_dataset.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.
# Limitar a los primeros 1000 registros
datos <- datos[1:1000, ]

# Reemplazar valores NA con 0
cols_numericas <- c("video_view_count", "video_like_count", "video_share_count",
                    "video_download_count", "video_comment_count")
for (col in cols_numericas) {
  datos[[col]][is.na(datos[[col]])] <- 0
}

head(datos)
## # A tibble: 6 × 12
##     `#` claim_status   video_id video_duration_sec video_transcription_text     
##   <dbl> <chr>             <dbl>              <dbl> <chr>                        
## 1     1 claim        7017666017                 59 someone shared with me that …
## 2     2 claim        4014381136                 32 someone shared with me that …
## 3     3 claim        9859838091                 31 someone shared with me that …
## 4     4 claim        1866847991                 25 someone shared with me that …
## 5     5 claim        7105231098                 19 someone shared with me that …
## 6     6 claim        8972200955                 35 someone shared with me that …
## # ℹ 7 more variables: verified_status <chr>, author_ban_status <chr>,
## #   video_view_count <chr>, video_like_count <chr>, video_share_count <chr>,
## #   video_download_count <chr>, video_comment_count <chr>

2. Visualizaciones Interactivas

2.1 Relación entre Vistas y Likes

renderPlotly({
  grafico1 <- ggplot(datos, aes(x = video_view_count, y = video_like_count)) +
    geom_point(color = "blue", alpha = 0.6) +
    labs(title = "Relación entre Vistas y Likes",
         x = "Número de Vistas",
         y = "Número de Likes") +
    theme_minimal()
  ggplotly(grafico1)
})

Explicación:
Este gráfico de dispersión muestra cómo los likes aumentan a medida que un video tiene más vistas. Aunque no todos los videos con muchas vistas tienen muchos likes, se observa una tendencia creciente.


2.2 Distribución de la Duración de Videos

renderPlotly({
  grafico2 <- ggplot(datos, aes(x = video_duration_sec)) +
    geom_histogram(fill = "orange", bins = 20) +
    labs(title = "Distribución de Duración de Videos",
         x = "Duración del Video (segundos)",
         y = "Cantidad de Videos") +
    theme_minimal()
  ggplotly(grafico2)
})

Explicación:
Este histograma permite ver qué tan comunes son ciertas duraciones. La mayoría de los videos parecen durar entre 15 y 60 segundos.


2.3 Vistas Promedio por Estado de Verificación

renderPlotly({
  # Reemplazar NA con 0 en duración si es necesario
  datos$video_duration_sec[is.na(datos$video_duration_sec)] <- 0

  # Calcular duración promedio por estado de verificación
  media_duracion <- aggregate(video_duration_sec ~ verified_status, data = datos, mean)

  # Crear gráfico
  grafico <- ggplot(media_duracion, aes(x = verified_status, y = video_duration_sec, fill = verified_status)) +
    geom_col() +
    labs(title = "Duración Promedio de Videos por Estado de Verificación",
         x = "Estado de Verificación",
         y = "Duración Promedio (segundos)") +
    theme_minimal()

  ggplotly(grafico)
})

Explicación:
Este gráfico analiza si los videos más largos generan más comentarios. Se observa cierta dispersión, pero hay videos más largos que tienden a recibir más interacción.


2.4 Interacciones Promedio por Estado de Verificación

renderPlotly({
  # Reemplazar NAs con 0 (opcional, pero previene errores)
  datos$video_like_count[is.na(datos$video_like_count)] <- 0
  datos$video_comment_count[is.na(datos$video_comment_count)] <- 0
  datos$video_share_count[is.na(datos$video_share_count)] <- 0

  # Calcular promedio de interacciones por estado de verificación
  resumen <- aggregate(cbind(video_like_count, video_comment_count, video_share_count) ~ verified_status, data = datos, mean)

  # Cambiar nombres de columnas para mayor claridad
  colnames(resumen) <- c("Verificado", "Likes", "Comentarios", "Compartidos")

  # Reorganizar a formato largo para gráfico apilado
  library(reshape2)
  resumen_melt <- melt(resumen, id.vars = "Verificado", variable.name = "Interacción", value.name = "Promedio")

  # Crear gráfico
  grafico <- ggplot(resumen_melt, aes(x = Verificado, y = Promedio, fill = Interacción)) +
    geom_col(position = "stack") +
    labs(title = "Interacciones Promedio por Estado de Verificación",
         x = "Estado de Verificación",
         y = "Promedio",
         fill = "Tipo de Interacción") +
    theme_minimal()

  ggplotly(grafico)
})

Explicacion: Este gráfico apilado muestra cómo los usuarios verificados y no verificados generan interacciones promedio (likes, comentarios y compartidos). Permite visualizar si el estado de verificación influye en el nivel de interacción.

3. Conclusión

A través de visualizaciones simples pero efectivas, observamos cómo los videos más vistos tienden a tener más likes, cómo se distribuyen las duraciones de los videos, y el posible impacto del estado de verificación en la visibilidad. También exploramos cómo la duración puede relacionarse con los comentarios, aportando ideas útiles para creadores de contenido.