Fui apresentado por uma amiga aO Teste de Bechdel, que avalia se um filme possui três regras básicas:
- Ao menos duas mulheres (com nome)
- … que conversam entre si
- … 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.