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

netflix <- read.csv(file = "data/netflix.csv")
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 :

  1. seleccionar de variables de interés : title, release_year, description
  2. renombrar la variable release_year → year
  3. tokenizar
  4. elimnar stop_words
  5. 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 :

  1. calcular para cada película (año > 1975) el porcentaje de palabras de esa emoción respecto al total de palabras
  2. con lm(percent ~ year)estimamos una tendencia lineal que nos permite observar si este tipo de vocabulario aumenta o disminuye con los años.
  3. 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
sadness_by_year <- netflix_sentiment %>% 
  filter(year > 1975, sentiment == "sadness") %>% 
  count(title, year, total_words) %>% 
  ungroup() %>% 
  mutate(percent = n / total_words)

model_sadness <- lm(percent ~ year, data = sadness_by_year)

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.