Projeto Final - Ánalise Ganhadores do Oscar (1927-2014)

Author

Rebeca, Maria e Everton

Published

April 29, 2025

Introdução

A cerimônia do Oscar, oficialmente conhecida como Academy Awards, é um dos eventos mais prestigiados da indústria cinematográfica mundial. Desde sua primeira edição em 1927, a premiação tem desempenhado um papel central na consagração de atores, diretores e demais profissionais do cinema. No entanto, ao longo dos anos, a Academia de Artes e Ciências Cinematográficas (AMPAS) tem sido criticada pela falta de diversidade e representatividade em suas escolhas.

Este estudo tem como objetivo analisar o perfil dos vencedores do Oscar entre os anos de 1927 e 2014, com foco nas variáveis de raça/etniaorientação sexual, Idade e localidade. Através de dados compilados e organizados em formato acessível, buscamos investigar padrões e desigualdades históricas que marcaram a distribuição dos prêmios ao longo do tempo.

A análise contempla as categorias principais — como Melhor Ator, Melhor Atriz, Melhor Direção, Melhor Ator Coadjuvante e Melhor Atriz Coadjuvante — e considera o contexto sociocultural em que essas escolhas ocorreram. Com isso, pretende-se contribuir para a discussão sobre inclusão e representatividade no cinema, identificando avanços e persistências de exclusões estruturais dentro da premiação mais icônica da sétima arte.

Pacotes Utilizados

library(dplyr)

Anexando pacote: 'dplyr'
Os seguintes objetos são mascarados por 'package:stats':

    filter, lag
Os seguintes objetos são mascarados por 'package:base':

    intersect, setdiff, setequal, union
library(readr)
library(tidyverse)
Warning: pacote 'ggplot2' foi compilado no R versão 4.4.3
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(ggrepel)
Warning: pacote 'ggrepel' foi compilado no R versão 4.4.3
library(gt)
Warning: pacote 'gt' foi compilado no R versão 4.4.3
library(wordcloud)
Warning: pacote 'wordcloud' foi compilado no R versão 4.4.3
Carregando pacotes exigidos: RColorBrewer
library(tm)
Warning: pacote 'tm' foi compilado no R versão 4.4.3
Carregando pacotes exigidos: NLP

Anexando pacote: 'NLP'

O seguinte objeto é mascarado por 'package:ggplot2':

    annotate

Base de Dados Utilizada

setwd("C:/Users/rebec/Downloads/world_ampas_oscar_winner_demographics.csv/oscar")
Oscar <- read_csv("world_ampas_oscar_winner_demographics.csv")
Rows: 415 Columns: 10
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr  (7): name, birthplace, race_ethnicity, religion, sexual_orientation, ca...
dbl  (2): birth_year, year_edition
date (1): birth_date

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Metodologia

Para análise dos dados, utilizaremos o ambiente RStudio, que oferece uma interface conveniente e acolhedora para escrever e rodar código em R. Essa escolha permite um fluxo de trabalho organizado, facilitando a manipulação de dados, a aplicação de métodos estatísticos e a geração de visualizações.

Faremos o uso do pacote rmarkdown, disponível no Rstudio, que possibilita a criação de documentos dinâmicos integrando texto explicativo, código R e seus respectivos resultados (tabelas, gráficos e análises). Essa abordagem assegura reprodutibilidade e transparência metodológica, uma vez que todo o processo de análise — desde a importação dos dados até a geração dos resultados — fica registrado em um único arquivo, passível de revisão e atualização.

A base de dados utilizada neste projeto foi extraída do site Base de Dados e refere-se aos ganhadores do Oscar ao longo da história, contendo informações sobre raça/etnia, religião, orientação sexual, nacionalidade, gênero e categoria premiada, entre outras.

Para a análise, utilizaremos algusn pacotes, como readr e dplyr para importar e manipular os dados, assegurando sua consistência e preparando-os para a exploração visual. Em seguida, empregaremos técnicas de visualização com o pacote ggplot2, a fim de gerar gráficos que nos permitam compreender padrões de diversidade — ou a ausência dela — entre os premiados do Oscar, no período de 1927 a 2014.

Por fim, os resultados serão organizados e apresentados em um documento HTML por meio do Quarto, proporcionando um formato visualmente agradável e acessível para consulta e análise.

Ganhadores Por Raça/Etnia e Categoria

Oscar |> 
  mutate(
    category = stringr::str_split(
      category, 
      pattern = ",", 
      simplify = TRUE)[,1]
  ) |> 
  filter(
    category %in% c("Best Actor", "Best Actress", "Best Director",
                    "Best Supporting Actor", "Best Supporting Actress"),
  ) |>
  ggplot() +
  geom_bar(aes(x = category, fill = race_ethnicity), position = "dodge") +
  labs(x = "Categoria", y = "Número de Ganhadores",
       title = "Ganhadores do Oscar por Raça/Etnia e Categoria")

A análise dos ganhadores do Oscar entre 1927 e 2014 revela uma disparidade significativa na distribuição de prêmios por raça/etnia. Historicamente, observa-se um predomínio massivo de vencedores brancos, o que reflete padrões estruturais de desigualdade na indústria cinematográfica de Hollywood.

Ganhadores Por Raça/Etnia Através Dos Anos (1927-2014)

Oscar |> 
  mutate(
    category = stringr::str_split(
      category, 
      pattern = ",", 
      simplify = TRUE)[,1]
  ) |> 
  filter(
    between(year_edition, 1927, 2014),
  ) |>
  ggplot() +
  geom_bar(aes(x = year_edition, fill = race_ethnicity), position = "dodge") +
  labs(
    x = "Ano", 
    y = "Número de Ganhadores",
     title = "Ganhadores do Oscar por Raça/Etnia Através Dos Anos (1927–2014)"
  ) +
  scale_x_continuous(breaks = seq(1930, 2010, by = 10)) 

Ao longo das décadas, categorias principais como “Melhor Ator/Atriz” e “Melhor Direção” foram amplamente dominadas por profissionais brancos, enquanto a presença de pessoas negras, asiáticas, latinas, multirraciais entre outras se manteve esporádica e, muitas vezes, simbólica.

Nos últimos anos da série analisada, observa-se um pequeno aumento na diversidade racial entre os premiados. No entanto, esse avanço ainda é tímido frente à longa história de exclusão.

Distribuição Percentual dos Ganhadores do Oscar Por Raça/Etnia

dados_pizza <- Oscar |> 
  mutate(
    category = stringr::str_split(
      category, 
      pattern = ",", 
      simplify = TRUE)[,1]
  ) |> 
  filter(
    between(year_edition, 1927, 2014),
    category %in% c("Best Actor", "Best Actress", "Best Director",
                    "Best Supporting Actor", "Best Supporting Actress")
  ) |>
  count(race_ethnicity) |> 
  mutate(
    perc = n / sum(n) * 100,
    label = paste0(race_ethnicity, " (", round(perc, 1), "%)")
  )

ggplot(dados_pizza, aes(x = "", y = perc, fill = race_ethnicity)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  geom_text_repel(
    aes(label = label, y = cumsum(perc) - perc / 2),
    nudge_x = 1, # empurra o texto para fora
    show.legend = FALSE,
    size = 4
  ) +
  labs(
    title = "Distribuição Percentual dos Ganhadores do Oscar (1927–2014)",
    fill = "Raça/Etnia"
  )

Mesmo com o crescimento de discussões sobre diversidade e o aumento da visibilidade de minorias étnico-raciais nas últimas décadas do período analisado, os números ainda estão muito distantes de uma representação proporcional.

Ganhadores do Oscar Por Sexualidade (1927 - 2014)

Oscar |> 
  filter(between(year_edition, 1927, 2014)) |>
  count(year_edition, sexual_orientation) |>
  ggplot(aes(x = year_edition, y = n, fill = sexual_orientation)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("Straight" = "#3C3C3E", 
                               "Bisexual" = "#62AE43", 
                               "Gay" = "#DA70A5", 
                               "Lesbian" = "#DA667B",
                               "Matter of Dispute" = "gray")) +
  labs(
    title = "Ganhadores do Oscar por Sexualidade (1927-2014)",
    x = "Ano",
    y = "Número de Ganhadores",
    fill = "Sexualidade"
  )

Informação

“Matter of dispute” significa um assunto em questão, um ponto de controvérsia, algo que está sendo discutido ou disputado. Em outras palavras, é um tópico sobre o qual existe discordância ou que está em litígio. (Fonte: Google)

Essa distribuição evidencia que, historicamente, o Oscar também refletiu uma baixa representatividade LGBTQIA+, reforçando os desafios de inclusão no setor audiovisual. Embora haja uma melhora recente com mais artistas assumidamente LGBTQIA+ sendo reconhecidos, o quadro ainda é desigual.

Distribuição dos Ganhadores do Oscar por Sexualidade (1927-2014)

tabela_porcentagem <- Oscar |> 
  filter(between(year_edition, 1927, 2014)) |> 
  count(sexual_orientation) |> 
  mutate(
    porcentagem = (n / sum(n)) * 100
  )

tabela_porcentagem |> 
  gt() |> 
  fmt_number(
    columns = porcentagem,
    decimals = 2,
    suffixing = FALSE
  ) |> 
  tab_header(
    title = "Distribuição dos Ganhadores do Oscar por Sexualidade (1927–2014)",
    subtitle = "Percentuais calculados com base no total de premiados"
  ) |> 
  cols_label(
    sexual_orientation = "Orientação Sexual",
    n = "Número de Ganhadores",
    porcentagem = "Porcentagem (%)"
  ) |> 
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_column_labels(everything())
  ) |> 
  tab_options(
    table.font.size = px(14),
    data_row.padding = px(5)
  )
Distribuição dos Ganhadores do Oscar por Sexualidade (1927–2014)
Percentuais calculados com base no total de premiados
Orientação Sexual Número de Ganhadores Porcentagem (%)
Bisexual 20 4.82
Gay 7 1.69
Lesbian 2 0.48
Matter of Dispute 3 0.72
Na 10 2.41
Straight 373 89.88

Idade Ao Ganhar o Oscar (1927-2014)

Oscar |> 
  mutate(age_at_award = year_edition - birth_year) |> 
  filter(!is.na(age_at_award) & age_at_award > 0) |> 
  ggplot(aes(x = age_at_award)) +
  geom_histogram(bins = 30, fill = "skyblue", color = "black") +
  labs(
    title = "Distribuição da Idade ao Ganhar o Oscar",
    x = "Idade",
    y = "Frequência"
  ) + 
  geom_density() +
  theme_minimal()

Analisando a idade dos ganhadores no momento da premiação (diferença entre year_edition e birth_year), temos uma distribuição concentrada entre os 30 e 50 anos, com média em torno dos 42 anos.

Ganhadores Por Localidade (1927-2014)

Oscar |> 
  filter(!is.na(birthplace)) |>     
  count(birthplace) |>               
  arrange(desc(n)) |>                 
  top_n(15, n) |>                   
  ggplot(aes(x = reorder(birthplace, n), y = n, fill = birthplace)) +
  geom_bar(stat = "identity", show.legend = FALSE) +
  coord_flip() +
  labs(
    title = "Top 15 Localidades de Ganhadores do Oscar",
    x = "Localidade",
    y = "Número de Ganhadores"
  ) +
 theme_minimal()

Essa distribuição evidencia a centração em Hollywood do Oscar. Mesmo que o cinema seja uma expressão global, o prêmio ainda tem baixa diversidade geográfica entre seus ganhadores, o que reforça o domínio dos grandes estúdios dos EUA e limita a visibilidade de artistas de outras regiões.

Conclusão

A análise dos ganhadores do Oscar, de 1927 a 2014, permitiu identificar padrões relevantes e desigualdades históricas na premiação. Utilizando ferramentas do R, como dplyr, ggplot2, gt, stringr, entre outras, realizamos uma abordagem exploratória sobre um conjunto real de dados, aplicando conceitos fundamentais da ciência de dados, como importação, limpeza, transformação e visualização.

Pudemos observar, por exemplo, uma clara predominância de ganhadores brancos, o que evidencia questões estruturais de exclusão racial ao longo das décadas. Essa desigualdade também se refletiu nas análises por orientação sexual, com ganhadores predominantemente heterossexuais. Essas variáveis, quando visualizadas em gráficos de pizza e barras ao longo dos anos, mostraram uma lenta evolução na diversidade, ainda que com avanços recentes.

Curiosidade

Nuvem de palavras com os termos mais frequentes nos títulos dos filmes presentes na base de dados

texto_filmes <- Oscar |> 
  pull(movie)|> 
  na.omit() |> 
  paste(collapse = " ")


corpus <- Corpus(VectorSource(texto_filmes))
corpus <- tm_map(corpus, content_transformer(tolower))
Warning in tm_map.SimpleCorpus(corpus, content_transformer(tolower)):
transformation drops documents
corpus <- tm_map(corpus, removePunctuation)
Warning in tm_map.SimpleCorpus(corpus, removePunctuation): transformation drops
documents
corpus <- tm_map(corpus, removeNumbers)
Warning in tm_map.SimpleCorpus(corpus, removeNumbers): transformation drops
documents
corpus <- tm_map(corpus, removeWords, stopwords("en"))
Warning in tm_map.SimpleCorpus(corpus, removeWords, stopwords("en")):
transformation drops documents
wordcloud(corpus, max.words = 100, random.order = FALSE, colors = brewer.pal(8, "Dark2"))
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : endearment could not be fit on page. It will not be plotted.
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : godfather could not be fit on page. It will not be plotted.
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : happened could not be fit on page. It will not be plotted.
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : miniver could not be fit on page. It will not be plotted.
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : miracle could not be fit on page. It will not be plotted.
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : named could not be fit on page. It will not be plotted.
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : network could not be fit on page. It will not be plotted.
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : streetcar could not be fit on page. It will not be plotted.
Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : waterfront could not be fit on page. It will not be plotted.

Warning in wordcloud(corpus, max.words = 100, random.order = FALSE, colors =
brewer.pal(8, : whos could not be fit on page. It will not be plotted.