Explora tu actividad en Netflix con R: Análisis y visualización de datos de tu historial

La aparición de plataformas de streaming revolucionó la industria del entretenimiento y con ello, muchos de nuestros hábitos cambiaron también. Ya sea que pases horas o minutos viendo una película o serie, Netflix se ha convertido en uno de los favoritos en la escena.
Netflix, al igual que muchas aplicaciones hoy en día, permite que sus usuarios sean libres de consultar su historial de actividad de visualización. Para este artículo nos valdremos de ello para analizar y visualizar algunos interesantes datos.
Obtención y preparación de datos
Como usuario activo de Netflix y con acceso a los datos de administración de la cuenta, debes ingresar a https://www.netflix.com/viewingactivity, en donde te encontrarás con una lista de los títulos que recientemente has visto en la plataforma.

Justo poco antes del final de la página existe un link que dice “Descargarla toda”, que al darle clic, casi inmediato te invitará a descargar un archivo CSV con tu historial completo. Este archivo que por default descarga con el nombre “NetflixViewingHistory.csv”, es de quien nos ocuparemos.

Bien, ahora si, creando un nuevo script R, puedes importar los paquetes que estaremos usando y los datos del CSV descargado para comenzar a analizarlos, con un formato de fecha que pueda ser más legible.
# PAQUETES
library(dplyr)
library(tidyr)
library(lubridate)
library(zoo)
library(ggplot2)# LECTURA DE DATOS DESDE CSV DESCARGADO DE NETFLIX
minetflix <- read.csv("NetflixViewingHistory.csv")
str(minetflix)
minetflix$Date <- dmy(minetflix$Date)
Como podrás ver, el archivo CSV en realidad sólo consta dos columnas: Date (la fecha exacta) y Title (el título de la película o episodio y temporada de serie que has visto).

¿Qué tanto acostumbras mirar “maratones” de series en Netflix?
Muchos nos enganchamos mirando una o más series, y de pronto sin darnos cuenta, han pasado horas y horas de estar en ese estado casi hipnótico en que simplemente poco importa lo demás. No existe la definición de a partir de cuántas horas o cuántos episodios se considera un “maratón”, pero todos estamos familiarizados con el concepto. Haciendo un primer análisis, consideremos que un maratón de una serie sea a partir de 6 episodios a más, y veamos cuáles son las series más vistas a las que se les ha dedicado “maratones”.
Separemos de nuestros datos la columna de Title, aprovechando su constante en el formato en que las nombra Netflix, en título de la serie, temporada de la serie y episodio de la serie. También limpiemos los datos, quitando todo aquello que no obedezca a este formato (es decir las películas) para concentrarnos en las series solamente. También necesitamos identificar un registro de episodios vistos por día, perteneciente a una sola serie.
# SEPARAR COLUMNA DE TÍTULO EN TÍTULO DE SERIE, TEMPORADA Y TÍTULO DE EPISODIO
minetflix_serie <- minetflix %>%
separate(col = Title, into = c("title", "temporada", "titulo_episodio"), sep = ': ')# QUITAR OCURRENCIAS DONDE TEMPORADA Y EPISODIO SON VACÍOS (PORQUE NO SON SERIES)
minetflix_serie <- minetflix_serie[!is.na(minetflix_serie$temporada),]
minetflix_serie <- minetflix_serie[!is.na(minetflix_serie$titulo_episodio),]# REGISTRO DE NÚMERO DE EPISODIOS VISTOS POR DÍA, POR SERIE
maratones_minetflix <- minetflix_serie %>%
count(title, Date)# CONSIDEREMOS COMO MARATÓN 6 O MÁS EPISODIOS POR DÍA y ORDENAR POR FECHA
maratones_minetflix <- maratones_minetflix[maratones_minetflix$n >= 6,]
maratones_minetflix
maratones_minetflix <- maratones_minetflix[order(maratones_minetflix$Date),]
maratones_minetflix
Bajo esas condiciones, en mi caso he obtenido 35 observaciones con 3 variables ahora.

Visualizando el top 10 de series que les has dedicado “maratón” en Netflix
Ahora estamos listos para poder visualizar el top 10 de las series más vistas a las que les has dedicado “maratones”. Agruparemos los datos por el título de la serie y los ordenaremos por el número de episodios vistos.
# AGRUPANDO DATOS POR TÍTULO DE SERIE Y ORDENANDO POR NÚMERO DE EPISODIOS VISTOS
maratones_minetflix_todas <- maratones_minetflix %>%
group_by(title) %>%
summarise(n = sum(n)) %>%
arrange(desc(n))# VISUALIZANDO DATOS TOP 10 DE SERIES MÁS VISTAS EN MARATÓN
maratones_minetflix_top <- maratones_minetflix_todas %>%
top_n(10) %>%
ggplot(aes(x = reorder(title, n), y = n)) +
geom_col(fill = "#0097d6") +
coord_flip() +
ggtitle("Top 10 de series más vistas en maratón en mi Netflix", "4 o más episodios por día") +
labs(x = "Serie en Netflix", y = "Episodios vistos en total") +
theme_minimal()
maratones_minetflix_top
Obtendremos entonces el siguiente plot. No me juzguen por favor por dedicarle tanto a “Betty, la fea”.

¿Cuánto Netflix consumes al día en series?
Sería interesante poder ver qué tanto han cambiado tus hábitos de consumo a lo largo del tiempo. ¿Coinciden los picos máximos con la cuarentena guardada por la pandemia del Covid-19, por ejemplo? ¿O quizá coinciden con todo ese tiempo desde que volviste a ser soltero(a)?
Puedes realizar un conteo general de episodios por día en el histórico de tu actividad.
# EPISODIOS POR DÍA
netflix_episodios_dia <- minetflix %>%
count(Date) %>%
arrange(desc(n))# VISUALIZACIÓN DE EPISODIOS POR DÍA
netflix_episodios_dia_plot <- ggplot(aes(x = Date, y = n, color = n), data = netflix_episodios_dia) +
geom_col(color = c("#f16727")) +
theme_minimal() +
ggtitle("Episodios vistos en mi Netflix por día", "Historial de 2016 a 2020") +
labs(x = "Fecha", y = "Episodios vistos")
netflix_episodios_dia_plot
En mi caso, en el siguiente plot es muy notorio que en mi cuenta de Netflix los hábitos de consumo han ido en aumento.

Calendario completo del histórico de episodios de series vistos por día
Puedes profundizar aún más. Veamos de otra manera la actividad, con un “heatmap” distribuido por días, semanas, meses y años, con el que podamos precisar un poco mejor los momentos en que tuvimos mayor o menor consumo de episodios de series por día.
# CALENDARIO CON NÚMERO DE EPIODIOS VISTOS POR DÍA EN HEATMAP
netflix_episodios_dia <- netflix_episodios_dia[order(netflix_episodios_dia$Date),]
netflix_episodios_dia$diasemana <- wday(netflix_episodios_dia$Date)
netflix_episodios_dia$diasemanaF <- weekdays(netflix_episodios_dia$Date, abbreviate = T)
netflix_episodios_dia$mesF <- months(netflix_episodios_dia$Date, abbreviate = T)netflix_episodios_dia$diasemanaF <-factor(netflix_episodios_dia$diasemana, levels = rev(1:7), labels = rev(c("Lun","Mar","Mier","Jue","Vier","Sáb","Dom")),ordered = TRUE) netflix_episodios_dia$mesF <- factor(month(netflix_episodios_dia$Date),levels = as.character(1:12), labels = c("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"),ordered = TRUE)netflix_episodios_dia$añomes <- factor(as.yearmon(netflix_episodios_dia$Date))
netflix_episodios_dia$semana <- as.numeric(format(netflix_episodios_dia$Date,"%W"))
netflix_episodios_dia$semanames <- ceiling(day(netflix_episodios_dia$Date) / 7)netflix_episodios_dia_calendario <- ggplot(netflix_episodios_dia, aes(semanames, diasemanaF, fill = netflix_episodios_dia$n)) +
geom_tile(colour = "white") +
facet_grid(year(netflix_episodios_dia$Date) ~ mesF) +
scale_fill_gradient(low = "#FFD000", high = "#FF1919") +
ggtitle("Episodios vistos por día en mi Netflix", "Heatmap por día de la semana, mes y año") +
labs(x = "Número de semana", y = "Día de la semana") +
labs(fill = "No.Episodios")
netflix_episodios_dia_calendario
¿Qué ocurrió en junio y julio de 2017, que claramente en el plot es visible una pérdida de interés en la plataforma?. ¿Tendrá que ver con el mes de prueba de Amazon Prime Video me dio para convencerme y “machacar” hasta el cansancio su servicio de streaming?

¿Qué días de la semana hay mayor actividad consumiendo series de Netflix?
Podemos también ver de manera muy visual y detallada cuáles son los días de la semana que hay una mayor o menor actividad mirando episodios de series.
# FRECUENCIA DE ACTIVIDAD EN MI NETFLIX POR DÍA
vista_dia <- netflix_episodios_dia %>%
count(diasemanaF)
vista_diavista_dia_plot <- vista_dia %>%
ggplot(aes(diasemanaF, n)) +
geom_col(fill = "#5b59d6") +
coord_polar() +
theme_minimal() +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(face = "bold"),
plot.title = element_text(size = 16, face = "bold")) +
ggtitle("Frecuencia de episodios vistos", "Actividad por día de la semana en mi Netflix")
vista_dia_plot
Hay una clara tendencia como el plot lo muestra, de que los lunes son días bastante ocupados como para dedicarle tiempo a Netflix. ¿Será tu caso también?

¿Qué meses hay mayor actividad consumiendo series de Netflix?
Igual que el ejemplo anterior, podemos repetir la operación pero ahora para visualizar con base en los meses, cuál es el favorito que elegimos para regalarle nuestro valioso tiempo a Netflix.
# FRECUENCIA DE ACTIVIDAD EN MI NETFLIX POR MES
vista_mes <- netflix_episodios_dia %>%
count(mesF)
vista_mesvista_mes_plot <- vista_mes %>%
ggplot(aes(mesF, n)) +
geom_col(fill = "#808000") +
coord_polar() +
theme_minimal() +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(face = "bold"),
plot.title = element_text(size = 18, face = "bold")) +
ggtitle("Frecuencia de episodios vistos", "Actividad por mes en mi Netflix")
vista_mes_plot
Obtendrás un plot como el siguiente. Al parecer los meses de junio, julio y septiembre no han sido los mejores en mi relación con Netflix.

Un último vistazo a tu actividad consumiendo series de Netflix por mes y año
Por último, revisemos una vez más en el mismo formato de gráficos que los dos anteriores, tu actividad pero ahora segmentada por mes de cada año.
# FRECUENCIA DE ACTIVIDAD EN MI NETFLIX POR AÑO
vista_años <- netflix_episodios_dia %>%
count(añomes)
vista_añosvista_años_plot <- vista_años %>%
ggplot(aes(añomes, n)) +
geom_col(fill = "#1a954d") +
coord_polar() +
theme_minimal() +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(face = "bold"),
plot.title = element_text(size = 18, face = "bold")) +
ggtitle("Frecuencia de episodios vistos", "Actividad por mes del año en mi Netflix")
vista_años_plot
Podrás ver en el plot obtenido, que en mi caso los meses de octubre y noviembre de 2019 fueron grandes para Netflix recolectando datos sobre mis gustos.

Aunque tengo que decir que en realidad mi cuenta la comparto con mi novia. A veces las recomendaciones que la plataforma hace, no son precisamente las más adecuadas ni para mi ni para ella.
Gracias por tu amable lectura. Puedes ver los plots generados para este artículo, un poco más atractivos con plotly, en el flexdashboard que armé: https://rpubs.com/cosmoduende/netflix-data-analysis-r
También comparto el código completo, por si sientes curiosidad de analizar tu actividad en Netflix: https://github.com/cosmoduende/r-netflix-data-analysis
Que tengas felices análisis, que puedas practicarlo e incluso mejorarlo, jugar y sorprenderte con resultados interesantes.
Otros artículos que he escrito
Si te ha gustado este post, agradeceré mucho tus claps. Además te invito a visitar también otros artículos que he escrito:
Gracias y hasta la próxima.