Caso estudio : Netflix
En este caso estudio repasaremos las herramientas de análisis que hemos visto hasta ahora usando una colección de títulos disponibles en la plataforma Netflix. Los datos se han obtenido de la plataforma Kaggle. El dataset consiste de una serie de variables de interés sobre un título de una película o serie de TV como el año de producción, el casting, director, así como una breve descripción del título.
En este capítulo, una vez implementado el análisis de sentimiento sobre nuestro dataset, exploraremos distintas aproximaciones para comprender el componente emocional de los títulos cinematográficos. Concretamente, abordaremos los siguientes aspectos:
- Para cada película, calcularemos el número de palabras asociadas a emociones, con el fin de caracterizar su tono emocional.
- Para un título concreto, identificaremos todas las emociones que transmite.
- Para una emoción concreta, determinaremos qué películas la representan con mayor intensidad.
- Para una emoción concreta, analizaremos su evolución a lo largo del tiempo.
- Para una emoción concreta, modelizaremos su presencia en los títulos a lo largo de los años.
Cargar librerías
library(tidytext)
library(dplyr)
library(ggplot2)
Leer datos
<- read.csv(file = "data/netflix.csv")
netflix glimpse(netflix)
## Rows: 5,837
## Columns: 12
## $ show_id <int> 81193313, 81197050, 81213894, 81082007, 80213643, 8117275…
## $ title <chr> "Chocolate", "Guatemala: Heart of the Mayan World", "The …
## $ director <chr> "", "Luis Ara, Ignacio Jaunsolo", "Abhishek Sharma", "Mat…
## $ cast <chr> "Ha Ji-won, Yoon Kye-sang, Jang Seung-jo, Kang Bu-ja, Lee…
## $ country <chr> "South Korea", "", "India", "France, Senegal, Belgium", "…
## $ date_added <chr> "November 30, 2019", "November 30, 2019", "November 30, 2…
## $ release_year <int> 2019, 2019, 2019, 2019, 2019, 2018, 2019, 2016, 2019, 201…
## $ rating <chr> "TV-14", "TV-G", "TV-14", "TV-14", "TV-Y", "TV-14", "TV-M…
## $ duration <chr> "1 Season", "67 min", "135 min", "106 min", "2 Seasons", …
## $ listed_in <chr> "International TV Shows, Korean TV Shows, Romantic TV Sho…
## $ description <chr> "Brought together by meaningful meals in the past and pre…
## $ type <chr> "TV Show", "Movie", "Movie", "Movie", "TV Show", "Movie",…
Análisis de sentimiento
Para implementar análisis de sentimiento podemos seguir los siguientes pasos :
- seleccionar de variables de interés : title, release_year, description
- renombrar la variable release_year → year
- tokenizar
- elimnar stop_words
- obtener el sentimiento del dataset (diccionario ‘nrc’)
## # A tibble: 52,745 × 5
## title year word sentiment total_words
## <chr> <int> <chr> <chr> <int>
## 1 Chocolate 2019 doctor positive 3
## 2 Chocolate 2019 doctor trust 3
## 3 Chocolate 2019 hospice sadness 3
## 4 Guatemala: Heart of the Mayan World 2019 explore anticipation 6
## 5 Guatemala: Heart of the Mayan World 2019 wealth joy 6
## 6 Guatemala: Heart of the Mayan World 2019 wealth positive 6
## 7 Guatemala: Heart of the Mayan World 2019 wealth trust 6
## 8 Guatemala: Heart of the Mayan World 2019 including positive 6
## 9 Guatemala: Heart of the Mayan World 2019 ancient negative 6
## 10 The Zoya Factor 2019 team trust 14
## # ℹ 52,735 more rows
Podemos identificar las palabras asociadas a emociones que presenta cada película.
## # A tibble: 5,654 × 2
## title n
## <chr> <int>
## 1 The Silence 48
## 2 Oh My Ghost 42
## 3 Tiger 37
## 4 Drive 35
## 5 The Saint 34
## 6 Blood Money 33
## 7 Crime Time 33
## 8 The Lovers 33
## 9 Maniac 31
## 10 Mariah Carey's Merriest Christmas 31
## # ℹ 5,644 more rows
La película cuya descripción cuenta con más palabras asociadas a emociones es “The Silence”. Podemos observar todas las emociones asociadas a esta película.
## # A tibble: 48 × 4
## title year word sentiment
## <chr> <int> <chr> <chr>
## 1 The Silence 2019 attack anger
## 2 The Silence 2019 attack fear
## 3 The Silence 2019 attack negative
## 4 The Silence 2019 deadly anger
## 5 The Silence 2019 deadly disgust
## 6 The Silence 2019 deadly fear
## 7 The Silence 2019 deadly negative
## 8 The Silence 2019 deadly sadness
## 9 The Silence 2019 seek anticipation
## 10 The Silence 2019 mysterious anticipation
## # ℹ 38 more rows
Y podemos estimar la proproción de cada emoción asociada a esta película.
## # A tibble: 10 × 5
## title sentiment total_words n percent
## <chr> <chr> <int> <int> <dbl>
## 1 The Silence fear 48 11 0.229
## 2 The Silence anger 48 9 0.188
## 3 The Silence negative 48 9 0.188
## 4 The Silence sadness 48 6 0.125
## 5 The Silence anticipation 48 3 0.0625
## 6 The Silence disgust 48 3 0.0625
## 7 The Silence joy 48 2 0.0417
## 8 The Silence positive 48 2 0.0417
## 9 The Silence surprise 48 2 0.0417
## 10 The Silence trust 48 1 0.0208
A continuación, nos preguntamos cuál es la película que presenta la mayor proporción de emociones asociadas a la alegría (joy) y a la tristeza (sadness). Para evitar la distorsión que supondría que una película con una única palabra aparezca con un 100% de alegría, aplicaremos un filtro y consideraremos únicamente aquellas películas que cuenten con al menos 5 palabras asociadas a emociones. Estas son las tres películas más alegres :
## # A tibble: 3 × 6
## title year sentiment total_words n percent
## <chr> <int> <chr> <int> <int> <dbl>
## 1 Loo Loo Kids: Johny & Friends Music… 2016 joy 16 6 0.375
## 2 Qué pena tu serie 2015 joy 14 5 0.357
## 3 You're Everything To Me 2016 joy 16 5 0.312
Análogamente, identificaremos las tres películas más tristes :
## # A tibble: 3 × 6
## title year sentiment total_words n percent
## <chr> <int> <chr> <int> <int> <dbl>
## 1 Life Overtakes Me 2019 sadness 12 5 0.417
## 2 Saawan 2016 sadness 26 5 0.192
## 3 The Break 2018 sadness 26 5 0.192
Evolución temporal
A continuación, obtendremos la evolución de los sentimientos (joy/sadness) a lo largo del tiempo. Para este ejemplo, usaremos los datos disponibles de los últimos 50 años (>1975).
Comentarios :
scale_fill_brewer()
→ para áreas, barras, polígonos (fill)
scale_color_brewer()
→ para líneas o puntos (color)
Modelización
Finalmente, ajustamos un modelo lineal para explorar la evolución de la proporción de palabras asociadas a las emociones en las películas a lo largo del tiempo.
Para modelizar una emoción a lo largo del tiempo podemos seguir los siguientes pasos :
- calcular para cada película (año > 1975) el porcentaje de palabras de esa emoción respecto al total de palabras
- con
lm(percent ~ year)
estimamos una tendencia lineal que nos permite observar si este tipo de vocabulario aumenta o disminuye con los años.
- el resultado de
summary(modelo)
ofrece los coeficientes del modelo (intercepto y pendiente), así como medidas de ajuste que indican la fuerza de la relación entre tiempo y proporción de palabras de esa emoción.
# Modeling sadness
<- netflix_sentiment %>%
sadness_by_year filter(year > 1975, sentiment == "sadness") %>%
count(title, year, total_words) %>%
ungroup() %>%
mutate(percent = n / total_words)
<- lm(percent ~ year, data = sadness_by_year)
model_sadness
summary(model_sadness)
##
## Call:
## lm(formula = percent ~ year, data = sadness_by_year)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.10821 -0.04601 -0.01793 0.02870 0.53732
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.4316269 0.3865512 1.117 0.264
## year -0.0001499 0.0001919 -0.781 0.435
##
## Residual standard error: 0.06669 on 2646 degrees of freedom
## Multiple R-squared: 0.0002304, Adjusted R-squared: -0.0001475
## F-statistic: 0.6097 on 1 and 2646 DF, p-value: 0.435
# Modeling joy
##
## Call:
## lm(formula = percent ~ year, data = joy_by_year)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.13318 -0.05756 -0.01414 0.04301 0.35553
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.9912165 0.4922355 -2.014 0.0441 *
## year 0.0005690 0.0002444 2.329 0.0199 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08248 on 3077 degrees of freedom
## Multiple R-squared: 0.001759, Adjusted R-squared: 0.001435
## F-statistic: 5.422 on 1 and 3077 DF, p-value: 0.01995
El resultado de nuestro análisis (representación visual y modelización de emociones) sugiere que la proporción de palabras asociadas a la tristeza (sadness) no presenta una tendencia significativa en el período considerado, ya que la pendiente no resulta estadísticamente distinta de cero. En contraste, el vocabulario vinculado a la alegría (joy) sí evidencia una tendencia creciente y significativa a lo largo del tiempo. Esto sugiere que, en general, las películas posteriores a 1975 tienden a incorporar progresivamente un mayor uso de palabras relacionadas con la alegría, proporcionando este tono emocional a las películas que se pueden obetner en Netflix.