Bechdel: Filme e Machismo

Fui apresentado por uma amiga aO Teste de Bechdel, que avalia se um filme possui três regras básicas:

  1. Ao menos duas mulheres (com nome)
  2. … que conversam entre si
  3. … sobre algo que não seja homem

Esse teste foi nomeado em homenagem à cartunista Alison Bechdel que, em um de seus quadrinhos, apresentou essa ideia e hoje é utilizado para medir o grau de discriminação de gênero no cinema.

O site bechdeltest.com oferece espaço para qualquer um contribuir com filmes avaliados no teste de Bechdel e disponibiliza fácil acesso a um banco de dados de 8.440 filmes de 1888 até os dias de hoje.

Um pitaco pessoal (Athos): Imagine as mesmas regras, mas invertendo homem por mulher. Quantos filmes você acha que não passariam no teste? Na minha opinião? Menos de 1%!

Achados

  • Países como Canadá e Japão parecem estarem melhorando;
  • Brasil tem poucos dados, mas não se destaca positivamente;
  • Prêmios e Notas IMDB não são diferentes entre filmes que passaram no teste e filmes que não passaram no teste. Pode-se argumentar que a discriminação de gênero, mesmo que sempre injustificável, não sustenta nem a retórica de que vale a pena financeiramente;

Dados

O site disponibiliza uma API para acessar os dados. Então para trazer para o R é simples como a linha abaixo.

bechdel <- fromJSON("http://bechdeltest.com/api/v1/getAllMovies")
glimpse(bechdel)
## Rows: 8,440
## Columns: 5
## $ year   <int> 1888, 1892, 1895, 1895, 1896, 1896, 1896, 1896, 1898, 1898, 18…
## $ title  <chr> "Roundhay Garden Scene", "Pauvre Pierrot", "Tables Turned on t…
## $ imdbid <chr> "0392728", "0000003", "0000014", "0132134", "0000091", "000013…
## $ rating <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ id     <int> 8040, 5433, 5444, 6200, 4982, 5406, 5445, 6199, 5411, 5410, 49…

OBS: reparem na coluna imdbid. Ela permite coletar informações do IMDB para maiores análises!

Rating

O rating vai de 0 a 3, que representa quantas regras são atendidas no filme. Vamos rotular para melhor leitura.

bechdel <- bechdel %>%
  mutate(
    indice_bechdel = case_when(
      rating == 0 ~ "Menos de duas mulheres",
      rating == 1 ~ "Pelo menos duas mulheres",
      rating == 2 ~ "... que conversam entre si",
      rating == 3 ~ "... sobre algo que não seja homem"
    ),
    indice_bechdel = fct_reorder(indice_bechdel, rating),
    decada = (year %/% 10)*10
  )
bechdel %>% 
  count(indice_bechdel, rating) %>%
  mutate(
    rating_p = scales::percent(n/sum(n), accuracy = 1)
  ) %>%
  ggplot(aes(y = indice_bechdel, x = n)) +
  geom_segment(aes(xend = 0, yend = indice_bechdel)) +
  geom_point(size = 12) +
  geom_text(aes(label = rating_p), color = "white", fontface = "bold") +
  labs(x = "contagem", y = NULL, title = "Filmes por Rating Bechdel") +
  theme(
    panel.grid.minor.y = element_blank(),
    panel.grid.major.y = element_blank(),
    panel.grid.major.x = element_blank()
  )

Evolução nas Décadas

bechdel_por_decada <- bechdel %>%
  count(decada, indice_bechdel, .drop = FALSE)

bechdel_por_decada %>%
  ggplot(aes(x = decada, fill = indice_bechdel, y = n)) +
  geom_col(position = "fill", colour = "black", width = 10) +
  geom_text(aes(label = indice_bechdel), position = "fill", data = filter(bechdel_por_decada, decada == 1950), vjust = 2.5, colour = "white", fontface = "bold") +
  scale_fill_brewer(palette = "RdBu", guide = "none") +
  labs(x = "Década", y = "Proporção", title = "Evolução dos Ratings Bechdel pelas Décadas") +
  scale_y_continuous(labels = scales::percent) +
  theme(
    panel.grid = element_blank()
  ) 

O Teste de Bechdel vem melhorando com o tempo, então as perspectivas são positivas. Em um mundo cada vez mais conectado, espera-se que a informação chegue a cada vez mais pessoas e a discriminação encrustrada na nossa cultura se dissolva.

Informações do IMDB

A API do IMDB é muito burocrática de usar. Eu encontrei o site OMDB que foi bem mais fácil de usar, mas talvez tenha menos informação legal. Vou mostrar como usar:

API Key

Primeiro eu peguei uma API KEY no site deles e coloquei no meu .Renviron porque daí eu posso usar o Sys.get() pra usá-la sem precisar mostrar pra ninguém.

Sys.getenv('OMDB_APIKEY')
# [1] as48732f1d (de mentirinha)

Chamando a API

Depois eu chamei a API do OMDB usando tanto minha API KEY quanto o IMDB ID. A chamada tem que ser assim: http://www.omdbapi.com/?apikey={Sys.getenv('OMDB_APIKEY')}&i=tt{imdbid}. Ela vai devolver um json que pode ser facilmente formatado pelo jsonlite::fromJSON().

library(glue)
pega_info_imdb <- function(imdbid) {
  glue("http://www.omdbapi.com/?apikey={Sys.getenv('OMDB_APIKEY')}&i=tt{imdbid}") %>%
    fromJSON() %>%
    as_tibble()
}
# safely porque a API pode dar erro 522 (no servidor do OMDB)
pega_info_imdb_safe <- safely(pega_info_imdb)

# demora ~40 min
bechdel_com_imdb <- bechdel %>%
  as_tibble() %>%
  mutate(
    infos_imdb = map(imdbid, pega_info_imdb_safe)
  )

Arrumando os dados

Os dados precisam de uma massagem antes porque vem em uma lista aninhada e tudo texto.

# Arruma as tabelas aninhadas
arruma_infos_imdb <- function(infos_imdb) {
  if(!is.null(infos_imdb$Ratings)) {
    infos_imdb %>% 
      nest(Ratings = c(Ratings)) %>%
      mutate(Ratings = map(Ratings, ~.x$Ratings %>% filter(Source %in% "Internet Movie Database"))) %>%
      unnest(Ratings)
  } else {
    infos_imdb
  }
}

# cria bechdel com as infos do imdb e arruma o tipo das variáveis
bechdel_com_imdb <- bechdel_com_imdb %>%
  mutate(
    deu_errado = map_lgl(infos_imdb, ~ !is.null(.x$error)),
    infos_imdb = infos_imdb %>% map("result") %>% map(arruma_infos_imdb)
  ) %>%
  unnest(infos_imdb) %>%
  mutate(
    imdbRating_num = imdbRating %>% parse_number()
  )

Tabela final

glimpse(bechdel_com_imdb)
## Rows: 8,414
## Columns: 41
## $ year           <int> 1888, 1892, 1895, 1895, 1896, 1896, 1896, 1896, 1898, …
## $ title          <chr> "Roundhay Garden Scene", "Pauvre Pierrot", "Tables Tur…
## $ imdbid         <chr> "0392728", "0000003", "0000014", "0132134", "0000091",…
## $ rating         <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, …
## $ id             <int> 8040, 5433, 5444, 6200, 4982, 5406, 5445, 6199, 5411, …
## $ indice_bechdel <fct> Menos de duas mulheres, Menos de duas mulheres, Menos …
## $ decada         <dbl> 1880, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, …
## $ Title          <chr> "Roundhay Garden Scene", "Poor Pierrot", "The Sprinkle…
## $ Year           <chr> "1888", "1892", "1895", "1895", "1896", "1896", "1896"…
## $ Rated          <chr> "NOT RATED", "N/A", "Not Rated", "Not Rated", "N/A", "…
## $ Released       <chr> "14 Oct 1888", "28 Oct 1892", "N/A", "28 Aug 1895", "N…
## $ Runtime        <chr> "1 min", "4 min", "1 min", "1 min", "3 min", "1 min", …
## $ Genre          <chr> "Documentary, Short", "Animation, Comedy, Short, Roman…
## $ Director       <chr> "Louis Aimé Augustin Le Prince", "Émile Reynaud", "Lou…
## $ Writer         <chr> "N/A", "N/A", "N/A", "N/A", "Georges Méliès", "N/A", "…
## $ Actors         <chr> "Annie Hartley, Adolphe Le Prince, Joseph Whitley, Sar…
## $ Plot           <chr> "In the garden, a man asks his friends to do something…
## $ Language       <chr> "N/A", "N/A", "N/A", "N/A", "N/A", "None", "N/A", "N/A…
## $ Country        <chr> "UK, France", "France", "France", "USA", "France", "Fr…
## $ Awards         <chr> "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"…
## $ Poster         <chr> "https://m.media-amazon.com/images/M/MV5BOGE3YjczMTQtZ…
## $ Metascore      <chr> "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"…
## $ imdbRating     <chr> "7.5", "6.6", "7.1", "6.7", "6.7", "5.8", "5.2", "7.4"…
## $ imdbVotes      <chr> "4,609", "1,144", "4,287", "1,755", "2,149", "1,040", …
## $ imdbID         <chr> "tt0392728", "tt0000003", "tt0000014", "tt0132134", "t…
## $ Type           <chr> "movie", "movie", "movie", "movie", "movie", "movie", …
## $ DVD            <chr> "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"…
## $ BoxOffice      <chr> "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"…
## $ Production     <chr> "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"…
## $ Website        <chr> "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"…
## $ Response       <chr> "True", "True", "True", "True", "True", "True", "True"…
## $ Source         <chr> "Internet Movie Database", "Internet Movie Database", …
## $ Value          <chr> "7.5/10", "6.6/10", "7.1/10", "6.7/10", "6.7/10", "5.8…
## $ Error          <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ Season         <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ Episode        <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ seriesID       <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ totalSeasons   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ Ratings        <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ deu_errado     <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE…
## $ imdbRating_num <dbl> 7.5, 6.6, 7.1, 6.7, 6.7, 5.8, 5.2, 7.4, 6.0, 7.5, 7.5,…

Bechdel por País

Japão e Canadá são os países que apresentem tendências mais claras de mudanças. Os demais parecem estagnados. Brasil tem 45 filmes analisado e não parece diferente da Alemanha, Reino Unido, EUA ou França.

Filmes brasileiros

bechdel_com_imdb %>%
  filter(str_detect(Country, "Brazil")) %>%
  select(year, Title, rating) %>%
  arrange(rating) %>%
  knitr::kable()
year Title rating
2007 Estomago: A Gastronomic Story 0
2007 You, Me and Him 0
2009 The Secret of Kells 0
2011 Samsara 0
2013 Boy and the World 0
2014 Ardor 0
2002 City of God 1
2003 Fear X 1
2011 Rio 1
2012 Two Rabbits 1
2013 Vai que dá Certo 1
2014 Trash 1
2014 Futuro Beach 1
2018 Tito and the Birds 1
2019 Bacurau 1
1985 Kiss of the Spider Woman 2
2003 The Man Who Copied 2
2009 From Beginning to End 2
2019 Turma da Mônica: Laços 2
1986 Hour of the Star 3
1998 Central Station 3
2004 Nina 3
2005 Æon Flux 3
2007 Elite Squad 3
2008 Blindness 3
2008 Lion’s Den 3
2010 So Hard to Forget 3
2011 Fast Five 3
2011 Found Memories 3
2012 Neighboring Sounds 3
2012 Tabu 3
2012 Snezhnaya koroleva 3
2013 Reaching for the Moon 3
2013 Open Road 3
2013 My Mom Is a Character 3
2013 Brazilian Western 3
2013 Time and the Wind 3
2014 August Winds 3
2014 The Way He Looks 3
2014 Last Night 3
2015 Neon Bull 3
2015 The Second Mother 3
2016 Aquarius 3
2017 Call Me by Your Name 3
2018 The Heiresses 3

Filmes Premiados

A base traz informação de premiações. Filmes sem premiação não destoam dos filmes premiados em termos de avaliação de Bechdel, o que indica que o machismo não está relacionado com o sucesso de um filme.

bechdel_por_decada_e_premiacao <- bechdel_com_imdb %>%
  mutate(
    premiacao = case_when(
      str_detect(Awards, "N/A") | is.na(Awards) ~ "z Sem Premiação",
      str_detect(Awards, "Won.*Oscar") ~ "a Vencedor de Oscar",
      str_detect(Awards, "Won.*(BAFTA|Golden Globe)") ~ "b Vencedor de BAFTA/Golden Globe",
      str_detect(Awards, "Nominated") ~ "c Nomeado ao Oscar/BAFTA/Golden Globe",
      str_detect(Awards, "win") ~ "d Vencedor de outros prêmios",
      str_detect(Awards, "nomination") ~ "d Nomeado a outros prêmios",
      TRUE ~ "e Outro"
    )
  ) %>%
  count(premiacao, decada, indice_bechdel, .drop = FALSE)
  
bechdel_por_decada_e_premiacao %>%
  filter(decada >= 1940) %>%
  ggplot(aes(x = decada, fill = indice_bechdel, y = n)) +
  geom_col(position = "fill", colour = "black", width = 10) +
  scale_fill_brewer(palette = "RdBu", guide = "none") +
  labs(x = "Década", y = "Proporção", title = "Evolução dos Ratings Bechdel pelas Décadas") +
  scale_y_continuous(labels = scales::percent) +
  theme(
    panel.grid = element_blank()
  ) +
  facet_wrap(vars(premiacao), ncol = 3)

Nota IMDB

Notas do IMDB também não diferem entre filmes que passaram no teste e filmes que não passaram no teste de Bechdel.

bechdel_por_decada_e_pais <- bechdel_por_decada_e_pais %>%
  mutate(
    imdbVotes = parse_number(imdbVotes),
    passou_no_teste = case_when(
      rating %in% 3 ~ "Sim",
      TRUE ~ "Não"
    )
  )
bechdel_nota_por_decada <- bechdel_por_decada_e_pais %>%
  group_by(pais) %>%
  filter(n() > 10) %>%
  group_by(pais, decada, passou_no_teste) %>%
  summarise(
    imdb_media = mean(imdbRating_num, na.rm = TRUE),
    imdb_dp = sd(imdbRating_num, na.rm = TRUE),
    imdb_inf = imdb_media - 2*imdb_dp,
    imdb_sup = imdb_media + 2*imdb_dp
  )

bechdel_nota_por_decada %>% 
  filter(decada >= 1940) %>%
  ggplot(aes(x = decada, y = imdb_media, colour = passou_no_teste)) +
  geom_line() +
  geom_point() +
  geom_jitter(data = bechdel_por_decada_e_pais %>% filter(decada >= 1940), aes(y = imdbRating_num), alpha = 0.05) +
  geom_ribbon(aes(ymin = imdb_inf, ymax = imdb_sup, fill = passou_no_teste), alpha = 0.1) +
  facet_wrap(vars(pais)) +
  labs(x = "Década", y = "Nota IMDB", colour = "Passou no Teste", fill = "Passou no Teste", title = "Notas do IMDB vs Teste de Bechdel") +
  scale_x_continuous(breaks = c(1950, 2020)) +
  theme(legend.position = "top")

O que você achou das análises? Conte para a gente! É um tema que vale a pena ser discutido por todos.

comments powered by Disqus