Analisando o seu histórico do Netflix

Motivado pelo tweet da jornalista de dados Gabriela Caesar, resolvi pegar a base do meu histórico no Netflix e montar algumas visualizações para descobrir como venho utilizando a plataforma nesses últimos anos.

A seguir, explico o passo a passo da análise e apresento os resultados.

1. Pegar a base

Como explicado no link divulgado pela Gabriela, para baixar a base basta seguir os seguintes passos:

  • Fazer login no Netflix e escolher o perfil para o qual você quer baixar os dados.

  • Entrar na página netflix.com/viewingactivity.

  • No final da página, clicar em Download all.

2. Lendo a base e fazendo algumas manipulações

A base vem em um arquivo .csv com duas colunas:

  • título da série/filme que você assistiu;

  • data em que o título foi assistido.

O título traz informação sobre o nome do filme ou da série e, se for uma série, também a temporada e o episódio. A data corresponde ao dia, mês e ano que o título foi assistido, sem informação da hora. Sempre começamos a assistir qualquer título, uma nova linha é gerada na base, independentemente se assistimos por 1 minuto ou até o final.

À princípio, não temos informação sobre a categoria (filme, série, documentário etc) ou duração de cada programa. No entanto, supondo que séries sempre terão padrões do tipo : Season na coluna Título, podemos criar a coluna categoria para separar as séries dos filmes/documentários. Além dela, para gerar mais informações, eu criei as seguintes colunas a partir da base original:

  • mês da visualização;

  • ano da visualização;

  • dia da semana em que o título foi visualizado;

  • programa.

A construção da coluna programa, no caso das séries, supõe que tudo o que aparece depois do : nos nomes dos títulos é informação sobre temporada e episódio. Assim, removendo essa informação, podemos contar quantas vezes assistimos cada série, independentemente do episódio.

library(tidyverse)
theme_set(theme_minimal())

netflix <- read_csv("../../static/data/netflix/NetflixViewingHistory.csv")

# A depender do idioma que você configurou no Netflix, a data pode vir num formato diferente.
parseia_data <- function(x) {
  data <- lubridate::dmy(x)
  if(sum(is.na(data)) > 0) {
    data <- lubridate::mdy(x)
  }
  return(data)
}

netflix <- netflix %>% 
  mutate(
    Date = parseia_data(Date),
    mes = lubridate::month(Date, label = TRUE, locale = "pt_BR.UTF-8"),
    ano = lubridate::year(Date),
    dia_sem = lubridate::wday(Date, label = TRUE, locale = "pt_BR.UTF-8"),
    categoria = str_detect(Title, ": "),
    categoria = ifelse(categoria, "Séries", "Filmes/Docs."),
    mes_ano = Date,
    programa = str_remove(Title, ":.*")
  )

lubridate::day(netflix$mes_ano) <- 1

# A coluna mes_ano é a coluna Date com o dia do mês sempre igual a 1.
# Isso facilita a agredação da base por mês.

ex1 <- tibble(date = c("14/01/19", "20/09/20"), date2 = c("12/30/2019", "10/01/15"))

3. Resultados

Primeiro, fiz um gráfico para ver a série temporal do número de títulos assistidos ao longo do tempo (eu assinei a Netflix em julho de 2012). Entre um pico de visualização ou outro (as famosas maratonas), a minha frequência foi mais ou menos constante ao longo dos anos, com exceção à 2019 (reta pontilhada), cuja queda coincide com a reta final do meu Doutorado.

netflix %>% 
  count(mes_ano) %>% 
  ggplot(aes(x = mes_ano, y = n)) +
  geom_line() +
  geom_smooth(se = FALSE, color = "#e50914") +
  geom_vline(
    aes(xintercept = as.numeric(mes_ano[mes_ano == "2019/01/01"])), 
    linetype = 2, 
    color = "red"
  ) +
  labs(x = "Ano", y = "Frequência")

Para ver quais meses do ano eu assisto mais netflix, eu fiz um gráfico do número médio de títulos assistido por mês do ano. Talvez um reflexo de 12 anos na universidade, julho, mês de férias letivas, é o que em média eu mais assisti Netflix.

netflix %>% 
  count(mes, ano, categoria) %>% 
  group_by(mes, categoria) %>% 
  summarise(freq_media = mean(n)) %>% 
  mutate(freq_media = round(freq_media)) %>% 
  ggplot(aes(x = mes, y = freq_media, fill = categoria)) +
  geom_col() +
  labs(x = "Mês", y = "Frequência média")

Fiz também o gráfico por ano, contando o número de programas assistidos por ano. 2018 foi o campeão, mas com certeza foi influência do meu pai e da minhã irmã, que usaram o meu perfil por um tempo.

netflix %>% 
  count(ano, categoria) %>% 
  ggplot(aes(x = ano, y = n, fill = categoria)) +
  geom_col() +
  labs(x = "Ano", y = "Frequência total", fill = "") +
  scale_x_continuous(breaks = min(netflix$ano):max(netflix$ano))

Analisando agora o dia da semana, sem surpresa: fins de semana ganham. Mas é curioso que eu costumo assistir mais filmes às sextas do que no resto da semana.

netflix %>% 
  count(dia_sem, categoria) %>% 
  ggplot(aes(x = dia_sem, y = n, fill = categoria)) +
  geom_col() +
  labs(x = "Dia da semana", y = "Frequência total", fill = "")

Por fim, contei as séries que mais assisti. O resultado representa bem o meu gosto: 8 das 10 séries são comédias (sendo que o desenho Avatar nem fui eu quem assistiu).

netflix %>% 
  filter(categoria  == "Séries") %>% 
  count(programa) %>%
  top_n(10, n) %>% 
  mutate(programa = fct_reorder(programa, n)) %>% 
  ggplot(aes(x = programa, y = n)) +
  geom_col(fill = "#e50914", color = "black") +
  geom_text(aes(label = n, y = n/2), color = "white") +
  labs(x = "Série", y = "Total de visualizações") +
  coord_flip()

4. Faça os gráficos para os seus dados

Eu criei um aplicativo web usando Shiny para que você possa fazer essa mesma análise com apenas alguns cliques. Para isso,

  • baixe a sua base como descrito no passo 1 deste post;

  • acesse o seguinte link https://rseis.shinyapps.io/shinyNetflix/;

  • faça o upload da base;

  • clique na imagem gerada com o botão direito para copiá-la ou salvá-la e compartilhe com a gente no Twitter ou Facebook!

Vale lembrar que a construção dos gráficos supõe algumas heurísticas que eu criei baseado apenas na minha base. Invariavelmente acontecerão algumas classificações erradas, mas se o app não gerar os gráficos para a sua base, por favor nos avise que tentaremos arrumar.

Dúvidas, críticas e sugestões, é só deixar um comentário!

comments powered by Disqus