Quem nunca procrastinou vendo um ou vários filmes do MCU? 🤷‍♂️ A saga desde “Homem de Ferro” (2008) até “End Game” (2019) foi memorável (os demais, bom…)

O importante é que com os dados das franquias, você aprenderá R de forma intuitiva e colocando a mão na massa, ou melhor, nos dados. Vamos explorar os dados dos filmes da Marvel entre 2008 até 2022.

Antes de começarmos, precisamos preparar alguns passos, ok?

📁 Defininindo o diretório de trabalho

Navegue até o diretório da pasta onde está o arquivo FilmesMarvel.csv e defina-o como diretório de trabalho. Você só precisa digitar setwd("o caminho para sua pasta"):

setwd('../../R101/Rmd')

Geralmente esse caminho é alguma coisa como: C:/Users/Wilson/Documentos/

Que 👿 é um diretório de trabalho?1

🛠 Instalando e Carregando pacotes

A melhor coisa do R é que há um pacote2 para tudo. Hoje usaremos o tidyverse

Para Instalar, use:

install.packages("tidyverse")

Se correu tudo bem, carregue o pacote:

library(tidyverse)

📤 Importando os dados

Carregar o arquivo CSV e atribuir aos dados_filmes:

dados_filmes <- read_csv("../data/MarvelMovies.csv")
## Rows: 30 Columns: 19
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (11): film, category, % budget recovered, critics % score, audience % sc...
## dbl  (8): worldwide gross ($m), budget, domestic gross ($m), international g...
## 
## ℹ 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.

IMPORTANTE: Caso seu arquivo tenha outro delimitador que não uma vírgula use a função ‘read_delim(“MarvelMovies.csv”, delim = “;”)’.
Note que a função read_delim() tem o parâmetro delim que nos permite dizer que o simbolo “ponto e vírgula” é quem define os campos da nossa tabela.

Para garantir que está tudo bem. Vamos vizualizar a nossa tabela dados_filmes, rapidamente no prompt de saída do R. Utilize a função head() para ver as seis primeiras linhas da tabela

head(dados_filmes) 
film category worldwide gross (\(m)|% budget recovered |critics % score |audience % score |audience vs critics % deviance | budget| domestic gross (\)m) international gross (\(m)| opening weekend (\)m) second weekend ($m) 1st vs 2nd weekend drop off % gross from opening weekend % gross from domestic % gross from international % budget opening weekend year source
Ant-Man Ant-Man 518 398% 83% 85% -2% 130 180 338 57.0 24 -58% 31.8 34.7% 65.3% 43.8% 2015 https://www.the-numbers.com/movie/Ant-Man#tab=summary
Ant-Man & The Wasp Ant-Man 623 479% 87% 80% 7% 130 216 406 75.8 29 -62% 35.0 34.7% 65.2% 58.3% 2018 https://www.the-numbers.com/movie/Ant-Man-and-the-Wasp#tab=summary
Avengers: Age of Ultron Avengers 1395 382% 76% 82% -6% 365 459 936 191.0 77 -60% 41.7 32.9% 67.1% 52.3% 2015 https://www.the-numbers.com/movie/Avengers-Age-of-Ultron#tab=summary
Avengers: End Game Avengers 2797 699% 94% 90% 4% 400 858 1939 357.0 147 -59% 41.6 30.7% 69.3% 89.3% 2019 https://www.the-numbers.com/movie/Avengers-Endgame-(2019)#tab=summary
Avengers: Infinity War Avengers 2048 683% 85% 91% -6% 300 678 1369 257.0 114 -56% 38.0 33.1% 66.8% 85.7% 2018 https://www.the-numbers.com/movie/Avengers-Infinity-War#tab=summary
Black Panther Black Panther 1336 668% 96% 79% 17% 200 700 636 202.0 111 -45% 28.9 52.4% 47.6% 101.0% 2018 https://www.the-numbers.com/movie/Black-Panther#tab=summary

💡 DICA: Você pode utilizar tail(dados_filmes) para ver as seis últimas linhas da tabela, ou View(dados_filmes) para ver esse objeto em uma aba separada do editor do Rstudio

Se você vizualizou a tabela no prompt de saída com todos os campos, é sinal que está tudo certo!

🧹 Limpando dados

Frequentemente os dados não estão formatados corretamente para a análise. Os nomes das colunas em nossa tabela original são difíceis de interpretar, então vamos alterá-los para algo mais amigável. Os nomes atuais das colunas:

#Checar o nome das colunas
colnames(dados_filmes)
##  [1] "film"                           "category"                      
##  [3] "worldwide gross ($m)"           "% budget recovered"            
##  [5] "critics % score"                "audience % score"              
##  [7] "audience vs critics % deviance" "budget"                        
##  [9] "domestic gross ($m)"            "international gross ($m)"      
## [11] "opening weekend ($m)"           "second weekend ($m)"           
## [13] "1st vs 2nd weekend drop off"    "% gross from opening weekend"  
## [15] "% gross from domestic"          "% gross from international"    
## [17] "% budget opening weekend"       "year"                          
## [19] "source"

Como vimos, nomes péssimos…

Vamos dar novos nomes!

IMPORTANTE: Deve haver um nome para para cada coluna

#novos nomes
novo_nome_colunas <- c(
  "filme",
  "categoria",
  "receita_mundial_milhoes",
  "percentual_orcamento_recuperado",
  "percentual_criticos",
  "percentual_audiencia",
  "desvio_percentual_audiencia_criticos",
  "orcamento_milhoes",
  "receita_domestica_milhoes",
  "receita_internacional_milhoes",
  "fim_de_semana_abertura_milhoes",
  "segundo_fim_de_semana_milhoes",
  "queda_1o_para_2o_fim_de_semana",
  "percentual_receita_fim_de_semana_abertura",
  "percentual_receita_domestica",
  "percentual_receita_internacional",
  "percentual_orcamento_fim_de_semana_abertura",
  "ano",
  "fonte"
)

Agora, basta atribuir os nomes:

colnames(dados_filmes) <- novo_nome_colunas

Acima a função colnames() atribui os nomes do vetor novo_nome_colunas

💡 Voce já sabe, mas não custa lembrar: Você pode utilizar View(dados_filmes) para visualizar graficamente a tabela no Rstudio

Mas você também pode utilizar a função head() para mostrar o cabeçalho da tabela. head(dados_filmes, n = 3)

Continuando a limpeza:

Repare que nossa tabela tem colunas de percentagem que não são números 🤦🏻‍♂️. Os campos percentagem tem o símbolo “%” inseridos ao lado dos números, o que obriga o R à interpretá-los como texto.

Vamos fazer uma mágica e corrigir isso:

dados_filmes <- 
  dados_filmes %>%
  mutate_if(
    ~any(str_detect(.,"%")), ~as.numeric(str_remove_all(., "%"))
    )
head(dados_filmes)
filme categoria receita_mundial_milhoes percentual_orcamento_recuperado percentual_criticos percentual_audiencia desvio_percentual_audiencia_criticos orcamento_milhoes receita_domestica_milhoes receita_internacional_milhoes fim_de_semana_abertura_milhoes segundo_fim_de_semana_milhoes queda_1o_para_2o_fim_de_semana percentual_receita_fim_de_semana_abertura percentual_receita_domestica percentual_receita_internacional percentual_orcamento_fim_de_semana_abertura ano fonte
Ant-Man Ant-Man 518 398 83 85 -2 130 180 338 57.0 24 -58 31.8 34.7 65.3 43.8 2015 https://www.the-numbers.com/movie/Ant-Man#tab=summary
Ant-Man & The Wasp Ant-Man 623 479 87 80 7 130 216 406 75.8 29 -62 35.0 34.7 65.2 58.3 2018 https://www.the-numbers.com/movie/Ant-Man-and-the-Wasp#tab=summary
Avengers: Age of Ultron Avengers 1395 382 76 82 -6 365 459 936 191.0 77 -60 41.7 32.9 67.1 52.3 2015 https://www.the-numbers.com/movie/Avengers-Age-of-Ultron#tab=summary
Avengers: End Game Avengers 2797 699 94 90 4 400 858 1939 357.0 147 -59 41.6 30.7 69.3 89.3 2019 https://www.the-numbers.com/movie/Avengers-Endgame-(2019)#tab=summary
Avengers: Infinity War Avengers 2048 683 85 91 -6 300 678 1369 257.0 114 -56 38.0 33.1 66.8 85.7 2018 https://www.the-numbers.com/movie/Avengers-Infinity-War#tab=summary
Black Panther Black Panther 1336 668 96 79 17 200 700 636 202.0 111 -45 28.9 52.4 47.6 101.0 2018 https://www.the-numbers.com/movie/Black-Panther#tab=summary

Mas que 🤬 acontenceu ali em cima?

As linhas acima pegam a tabela dados_filmes mudando os valores nas colunas se ele contiver qualquer simbolo de percentagem “%”, utilizando str_detect(., "%"), em seguida traforma-o em numérico com ~as.numeric(str_remove_all(., "%").

Note que as funções str_detect e str_remove_all, respectivamente, encontram caracteres (ou strings como são chamadas no R) e os removem.

Quer mais detalhes? Olhe no rodapé 3

🧐 Analisando os dados

Aleluia…🙌🏽
Eu sei. Parece muito trabalho, mas um dia você me agradecerá (ou não 🤷🏻‍♀️)

Então, partiu!🚀

Uma forma muito rápida de olhar um resumo dos dados é com a função summary() . Com ela podemos ter um resumo estatístico de cada variável (ou seja, cada coluna da tabela).

summary(dados_filmes) %>% head(1)
##     filme            categoria         receita_mundial_milhoes
##  Length:30          Length:30          Min.   : 265.0         
##  percentual_orcamento_recuperado percentual_criticos percentual_audiencia
##  Min.   :190.0                   Min.   :47.00       Min.   :45.00       
##  desvio_percentual_audiencia_criticos orcamento_milhoes
##  Min.   :-26.0000                     Min.   :130.0    
##  receita_domestica_milhoes receita_internacional_milhoes
##  Min.   :134.0             Min.   : 130.0               
##  fim_de_semana_abertura_milhoes segundo_fim_de_semana_milhoes
##  Min.   : 55.00                 Min.   : 22.10               
##  queda_1o_para_2o_fim_de_semana percentual_receita_fim_de_semana_abertura
##  Min.   :-68.00                 Min.   :23.70                            
##  percentual_receita_domestica percentual_receita_internacional
##  Min.   :30.70                Min.   :45.50                   
##  percentual_orcamento_fim_de_semana_abertura      ano          fonte          
##  Min.   : 35.50                              Min.   :2008   Length:30

Meio bagunçado, certo… Vamos melhorar isso!

dados_resumidos <- 
dados_filmes %>% summary() %>% 
  as.data.frame() %>%
  setNames(c("V1","coluna", "Freq")) %>%
    separate(Freq, into  = c("medida", "valores"), sep = ":") %>%
  select(coluna, medida, valores) %>% drop_na()

head(dados_resumidos, n=12)
coluna medida valores
filme Length 30
filme Class character
filme Mode character
categoria Length 30
categoria Class character
categoria Mode character
receita_mundial_milhoes Min. 265.0
receita_mundial_milhoes 1st Qu. 594.0
receita_mundial_milhoes Median 810.0
receita_mundial_milhoes Mean 940.9
receita_mundial_milhoes 3rd Qu. 1146.2
receita_mundial_milhoes Max. 2797.0

Agora temos uma tabela com 3 colunas: coluna, medida e valores. Para cada coluna que tinhamos, summary() fez o levantamento que poderia: mínimo, máximo, média, mediana e quartis quando os valores eram números; ou contagens identificação de classe e categoria quando era texto.

💡 Código explicado: 👇🏽

  1. No código acima repetimos o summary() nos dados_filmes, mas transformamos a saída em um data.frame (quadro de dados ou tabela, como quizer);

  2. Depois demos nomes às colunas com setNames("V1", "coluna", "Freq");

  3. Usando separate() e “dois pontos” ":" como separador, quebramos os dados dentro da coluna Freq (que estavam como “Mean: 10.1”), em duas novas colunas, as quais chamamos de "medida" e "valores" ;

  4. por fim, usamos select() para selecionar filmes, medidas e valorese removemos os dados nulos com drop_na()

🔽 Filtrando dados:

Podemos aproveitar os dados_resumidos e viltrar algumas colunas para ver o padrão dos dados. Por exemplo, imagine que queira ver todas as medidas sumarizadas da coluna receita_mundial_milhoes :

dados_resumidos %>% filter( coluna == "receita_mundial_milhoes")
coluna medida valores
receita_mundial_milhoes Min. 265.0
receita_mundial_milhoes 1st Qu. 594.0
receita_mundial_milhoes Median 810.0
receita_mundial_milhoes Mean 940.9
receita_mundial_milhoes 3rd Qu. 1146.2
receita_mundial_milhoes Max. 2797.0

Ou ainda se quiser ver o máximo de todas as colunas basta:

dados_resumidos %>%
  filter(str_detect(medida, "Max"))
coluna medida valores
receita_mundial_milhoes Max. 2797.0
percentual_orcamento_recuperado Max. 956.0
percentual_criticos Max. 96.00
percentual_audiencia Max. 96.00
desvio_percentual_audiencia_criticos Max. 34.0000
orcamento_milhoes Max. 400.0
receita_domestica_milhoes Max. 858.0
receita_internacional_milhoes Max. 1939.0
fim_de_semana_abertura_milhoes Max. 357.00
segundo_fim_de_semana_milhoes Max. 147.00
queda_1o_para_2o_fim_de_semana Max. -45.00
percentual_receita_fim_de_semana_abertura Max. 48.60
percentual_receita_domestica Max. 54.40
percentual_receita_internacional Max. 69.30
percentual_orcamento_fim_de_semana_abertura Max. 130.00
ano Max. 2022

Agora, imagene que queira trabalhar com a tabela original, dados_filmes e filtrar os filmes com receita mundial acima de 1 bilhão

dados_filmes %>% filter(receita_mundial_milhoes > 1000)
filme categoria receita_mundial_milhoes percentual_orcamento_recuperado percentual_criticos percentual_audiencia desvio_percentual_audiencia_criticos orcamento_milhoes receita_domestica_milhoes receita_internacional_milhoes fim_de_semana_abertura_milhoes segundo_fim_de_semana_milhoes queda_1o_para_2o_fim_de_semana percentual_receita_fim_de_semana_abertura percentual_receita_domestica percentual_receita_internacional percentual_orcamento_fim_de_semana_abertura ano fonte
Avengers: Age of Ultron Avengers 1395 382 76 82 -6 365 459 936 191 77.0 -60 41.7 32.9 67.1 52.3 2015 https://www.the-numbers.com/movie/Avengers-Age-of-Ultron#tab=summary
Avengers: End Game Avengers 2797 699 94 90 4 400 858 1939 357 147.0 -59 41.6 30.7 69.3 89.3 2019 https://www.the-numbers.com/movie/Avengers-Endgame-(2019)#tab=summary
Avengers: Infinity War Avengers 2048 683 85 91 -6 300 678 1369 257 114.0 -56 38.0 33.1 66.8 85.7 2018 https://www.the-numbers.com/movie/Avengers-Infinity-War#tab=summary
Black Panther Black Panther 1336 668 96 79 17 200 700 636 202 111.0 -45 28.9 52.4 47.6 101.0 2018 https://www.the-numbers.com/movie/Black-Panther#tab=summary
Captain America: Civil War Captain America 1151 460 90 89 1 250 408 743 179 72.6 -59 43.9 35.4 64.6 71.6 2016 https://www.the-numbers.com/movie/Captain-America-Civil-War#tab=summary
Captain Marvel Unique 1129 645 79 45 34 175 426 702 153 67.9 -56 35.9 37.7 62.2 87.4 2019 https://www.the-numbers.com/movie/Captain-Marvel-(2019)#tab=summary
Iron Man 3 Iron Man 1215 608 79 78 1 200 408 806 174 72.5 -58 42.6 33.6 66.3 87.0 2013 https://www.the-numbers.com/movie/Iron-Man-3#tab=summary
Spider-Man: Far from Home Spider-Man 1132 708 90 93 -3 160 390 741 93 45.3 -51 23.7 34.5 65.5 58.1 2019 https://www.the-numbers.com/movie/Spider-Man-Far-From-Home-(2019)#tab=summary
Spider-Man: No Way Home Spider-Man 1911 956 93 96 -3 200 814 1097 260 84.0 -68 32.0 42.6 57.4 130.0 2021 https://www.the-numbers.com/movie/Spider-Man-No-Way-Home-(2021)#tab=summary
The Avengers Avengers 1515 673 91 91 0 225 623 891 207 103.0 -50 33.3 41.1 58.8 92.0 2012 https://www.the-numbers.com/movie/Avengers-The-(2012)#tab=summary

Se quiser salvar o resultado em um objeto, basta utilizar:
filmes_acima_de_1_bilhao <- filter(dados_filmes, receita_mundial_milhoes > 1000)

⬇️ Ordenar os dados

Para ordenar filmes por percentual de orçamento recuperado em ordem decrescente

arrange(dados_filmes, desc(percentual_orcamento_recuperado))
filme categoria receita_mundial_milhoes percentual_orcamento_recuperado percentual_criticos percentual_audiencia desvio_percentual_audiencia_criticos orcamento_milhoes receita_domestica_milhoes receita_internacional_milhoes fim_de_semana_abertura_milhoes segundo_fim_de_semana_milhoes queda_1o_para_2o_fim_de_semana percentual_receita_fim_de_semana_abertura percentual_receita_domestica percentual_receita_internacional percentual_orcamento_fim_de_semana_abertura ano fonte
Spider-Man: No Way Home Spider-Man 1911 956 93 96 -3 200.0 814 1097 260.0 84.0 -68 32.0 42.6 57.4 130.0 2021 https://www.the-numbers.com/movie/Spider-Man-No-Way-Home-(2021)#tab=summary
Spider-Man: Far from Home Spider-Man 1132 708 90 93 -3 160.0 390 741 93.0 45.3 -51 23.7 34.5 65.5 58.1 2019 https://www.the-numbers.com/movie/Spider-Man-Far-From-Home-(2019)#tab=summary
Avengers: End Game Avengers 2797 699 94 90 4 400.0 858 1939 357.0 147.0 -59 41.6 30.7 69.3 89.3 2019 https://www.the-numbers.com/movie/Avengers-Endgame-(2019)#tab=summary
Avengers: Infinity War Avengers 2048 683 85 91 -6 300.0 678 1369 257.0 114.0 -56 38.0 33.1 66.8 85.7 2018 https://www.the-numbers.com/movie/Avengers-Infinity-War#tab=summary
The Avengers Avengers 1515 673 91 91 0 225.0 623 891 207.0 103.0 -50 33.3 41.1 58.8 92.0 2012 https://www.the-numbers.com/movie/Avengers-The-(2012)#tab=summary
Black Panther Black Panther 1336 668 96 79 17 200.0 700 636 202.0 111.0 -45 28.9 52.4 47.6 101.0 2018 https://www.the-numbers.com/movie/Black-Panther#tab=summary
Captain Marvel Unique 1129 645 79 45 34 175.0 426 702 153.0 67.9 -56 35.9 37.7 62.2 87.4 2019 https://www.the-numbers.com/movie/Captain-Marvel-(2019)#tab=summary
Iron Man 3 Iron Man 1215 608 79 78 1 200.0 408 806 174.0 72.5 -58 42.6 33.6 66.3 87.0 2013 https://www.the-numbers.com/movie/Iron-Man-3#tab=summary
Spider-Man: Homecoming Spider-Man 878 502 92 87 5 175.0 334 544 117.0 44.0 -62 35.0 38.0 62.0 66.9 2017 https://www.the-numbers.com/movie/Spider-Man-Homecoming#tab=summary
Ant-Man & The Wasp Ant-Man 623 479 87 80 7 130.0 216 406 75.8 29.0 -62 35.0 34.7 65.2 58.3 2018 https://www.the-numbers.com/movie/Ant-Man-and-the-Wasp#tab=summary
Dr Strange: Multiverse of Madness Dr Strange 952 476 74 77 -3 200.0 411 540 187.0 61.7 -67 45.6 43.2 56.7 93.5 2022 https://www.the-numbers.com/movie/Doctor-Strange-in-the-Multiverse-of-Madness-(2022)#tab=summary
Thor: Ragnarok Thor 850 472 93 87 6 180.0 315 535 122.0 57.0 -53 39.0 37.1 62.9 67.8 2017 https://www.the-numbers.com/movie/Thor-Ragnarok#tab=summary
Captain America: Civil War Captain America 1151 460 90 89 1 250.0 408 743 179.0 72.6 -59 43.9 35.4 64.6 71.6 2016 https://www.the-numbers.com/movie/Captain-America-Civil-War#tab=summary
Guardians of the Galaxy Guardians 770 453 92 92 0 170.0 333 437 94.0 42.1 -55 43.3 43.2 56.8 55.3 2014 https://www.the-numbers.com/movie/Guardians-of-the-Galaxy#tab=summary
Guardians of the Galaxy 2 Guardians 869 435 85 87 -2 200.0 389 479 146.0 65.0 -55 37.6 44.8 55.1 73.0 2017 https://www.the-numbers.com/movie/Guardians-of-the-Galaxy-Vol-2#tab=summary
Thor: Dark World Thor 644 429 66 75 -9 150.0 206 438 85.0 36.5 -57 41.5 32.0 68.0 56.7 2013 https://www.the-numbers.com/movie/Thor-The-Dark-World#tab=box-office
Captain America: Winter Soldier Captain America 714 420 90 92 -2 170.0 259 454 95.0 41.0 -57 36.6 36.3 63.6 55.9 2014 https://www.the-numbers.com/movie/Captain-America-The-Winter-Soldier#tab=summary
Dr Strange Dr Strange 676 410 89 86 3 165.0 232 443 85.0 42.9 -50 36.6 34.3 65.5 51.5 2016 https://www.the-numbers.com/movie/Doctor-Strange-(2016)#tab=summary
Ant-Man Ant-Man 518 398 83 85 -2 130.0 180 338 57.0 24.0 -58 31.8 34.7 65.3 43.8 2015 https://www.the-numbers.com/movie/Ant-Man#tab=summary
Avengers: Age of Ultron Avengers 1395 382 76 82 -6 365.0 459 936 191.0 77.0 -60 41.7 32.9 67.1 52.3 2015 https://www.the-numbers.com/movie/Avengers-Age-of-Ultron#tab=summary
Iron Man 2 Iron Man 621 365 71 71 0 170.0 312 308 128.0 52.0 -59 41.0 50.2 49.6 75.3 2010 https://www.the-numbers.com/movie/Iron-Man-2#tab=summary
Black Panther 2 Black Panther 855 342 84 94 -10 250.0 453 401 181.0 66.0 -64 48.6 53.0 46.9 72.4 2022 https://www.the-numbers.com/movie/Black-Panther-Wakanda-Forever-(2022)#tab=box-office
Iron Man Iron Man 585 315 94 91 3 186.0 318 266 102.0 51.2 -50 32.1 54.4 45.5 54.8 2008 https://www.the-numbers.com/movie/Iron-Man#tab=summary
Thor Thor 449 299 77 76 1 150.0 181 268 65.0 34.0 -48 36.3 40.3 59.7 43.3 2011 https://www.the-numbers.com/movie/Thor#tab=summary
Thor: Love & Thunder Thor 745 298 64 63 1 250.0 343 403 144.0 46.6 -68 42.0 46.0 54.1 57.6 2022 https://www.the-numbers.com/movie/Thor-Love-and-Thunder-(2022)#tab=summary
Shang-Chi Unique 432 288 91 93 -2 150.0 224 207 75.0 34.7 -54 33.6 51.9 47.9 50.0 2021 https://www.the-numbers.com/movie/Shang-Chi-and-the-Legend-of-the-Ten-Rings-(2021)#tab=summary
Captain America Captain America 370 264 79 75 4 140.0 176 193 65.0 25.0 -62 36.8 47.6 52.2 46.4 2011 https://www.the-numbers.com/movie/Captain-America-The-First-Avenger#tab=summary
Eternals Unique 402 201 47 73 -26 200.0 164 237 71.0 26.8 -62 43.2 40.8 59.0 35.5 2021 https://www.the-numbers.com/movie/Eternals-(2021)#tab=summary
Incredible Hulk Unique 265 193 67 69 -2 137.5 134 130 55.0 22.1 -60 41.1 50.6 49.1 40.0 2008 https://www.the-numbers.com/movie/Guardians-of-the-Galaxy-Vol-2#tab=summary
Black Widow Unique 379 190 79 80 -1 200.0 183 196 80.3 25.8 -68 43.8 48.3 51.7 40.2 2021 https://www.the-numbers.com/movie/Black-Widow-(2021)#tab=summary

a função arrange() reordena os dados_filmes de com base na classificação feita por desc e os dados da coluna percentual_orcamento_recuperado

para salvar essa tabela ordenada para calcularmos sobre ela, vamos utilizar:

filmes_ordenados <- arrange(dados_filmes, desc(percentual_orcamento_recuperado))

➕ Somar colunas e linhas especificas

Agora utilizamos filmes_ordandos para somar os registros do cinco filmes mais rentáveis da marvel, que agora estão entre as linhas 1 e 5 da coluna especificada

sum(filmes_ordenados[1:5, "receita_mundial_milhoes"])
## [1] 9403

🗜️ Encanando códigos

Escrevendo em R você pode se tornar o Super Mário 👨🏻‍🔧(ou quase…). O R tem um operador interessante %>% ou |> (“pipe” ou “cano”) que te permite encanar o código à esquerda do operador para dentro do que está à direita do operador.

Veja o código abaixo e note como ele é a mesma coisa do código anterior para soma:

filmes_ordenados[1:5, "receita_mundial_milhoes"] %>% sum()
## [1] 9403

Funciona igual para o outro operador |>

filmes_ordenados[1:5, "receita_mundial_milhoes"] |> sum()
## [1] 9403

A tradução para esse código é: pegue a tabela filmes_ordenados das linhas 1 à 5 na coluna “receita_mundial_milhoes” e some.

A melhor coisa é que, com os canos, você pode continuar encanando códigos para dentro de outros quase que para sempre. Por exemplo, digamos que eu queira dividir esse resultado por 2 (/2) e depois fazer a raiz quadrada disso (srqt()):

filmes_ordenados[1:5, "receita_mundial_milhoes"] %>% sum() / 2 %>% sqrt()
## [1] 6648.925

Você pode ir trabalhando com esses dados até ter o resultado que quiser.

🎯 Selecionar colunas específicas

E se eu quiser uma tabala específica só com as colunas 'filme' e 'categoria' ? Simples, encane dados_filmes para dentro de select dizendo quais colunas quer:

dados_filmes %>% select(filme, categoria)
filme categoria
Ant-Man Ant-Man
Ant-Man & The Wasp Ant-Man
Avengers: Age of Ultron Avengers
Avengers: End Game Avengers
Avengers: Infinity War Avengers
Black Panther Black Panther
Black Panther 2 Black Panther
Black Widow Unique
Captain America Captain America
Captain America: Civil War Captain America
Captain America: Winter Soldier Captain America
Captain Marvel Unique
Dr Strange Dr Strange
Dr Strange: Multiverse of Madness Dr Strange
Eternals Unique
Guardians of the Galaxy Guardians
Guardians of the Galaxy 2 Guardians
Incredible Hulk Unique
Iron Man Iron Man
Iron Man 2 Iron Man
Iron Man 3 Iron Man
Shang-Chi Unique
Spider-Man: Far from Home Spider-Man
Spider-Man: Homecoming Spider-Man
Spider-Man: No Way Home Spider-Man
The Avengers Avengers
Thor: Dark World Thor
Thor: Love & Thunder Thor
Thor: Ragnarok Thor
Thor Thor

⭐Criando novas variáveis

Criar novas variáveis é útil quando precisamos calcular coisas novas. Digamos que gostaríamos de calcular a receita total (doméstica + internacional) e adicionar como uma nova coluna.

Para isso temos mutate, certamente uma das ferramentas mais importantes do seu arsenal:

Mas, além disso, como a tabela ficaria com muitas variáveis, vamos selecionar apenas o filme e a receita_total, utilizando select e os canos(%>%):

receita_total <- dados_filmes %>% 
  mutate(receita_total = receita_domestica_milhoes + receita_internacional_milhoes) %>%
  select(filme, receita_total)

receita_total
filme receita_total
Ant-Man 518
Ant-Man & The Wasp 622
Avengers: Age of Ultron 1395
Avengers: End Game 2797
Avengers: Infinity War 2047
Black Panther 1336
Black Panther 2 854
Black Widow 379
Captain America 369
Captain America: Civil War 1151
Captain America: Winter Soldier 713
Captain Marvel 1128
Dr Strange 675
Dr Strange: Multiverse of Madness 951
Eternals 401
Guardians of the Galaxy 770
Guardians of the Galaxy 2 868
Incredible Hulk 264
Iron Man 584
Iron Man 2 620
Iron Man 3 1214
Shang-Chi 431
Spider-Man: Far from Home 1131
Spider-Man: Homecoming 878
Spider-Man: No Way Home 1911
The Avengers 1514
Thor: Dark World 644
Thor: Love & Thunder 746
Thor: Ragnarok 850
Thor 449

🤝Conclusão

Ufaa… Chega por hora, certo?

Só neste exercício você já aprendeu:

R parece complexo, e é um pouco, mas é muito poderoso. Te mantém organizado e consistente. Sem falar que, você pode ganhar tempo no futuro se atualizar seus dados e precisar refazer as análises.

🏋🏻‍♂️ Para exercita

Use o que aprendeu e responda:

  1. Quais os três filmes do MCU de maior sucesso com a crítica? (Veja se você concorda)
  2. E quais os três filmes de maior sucesso com o público? (Seria a voz do povo a voz de Deus?)
  3. Qual foi o mais lucrativo, somando receitas domésticas (EUA) e internacional?
  4. Qual a média de investimento recuperado?

🚀 Não enrola, eu quero o código…

Sem tempo pra ler? Segue o código📜

Referências:

  1. Vozes da minha cabeça (2024)… Brincadeira, tem links uteis abaixo:
  2. Tidyverse. R packages for data science.
  3. ChatGPT. Nao é crime se você souber o que está acontecendo. Do contrário, você está se sabotando…

The end… Você pode voltar agora, ou ler:

As infinitas notas de rodapé…


  1. Diretório de trabalho: É a pasta no seu computador que o R imagina que está no momento. Geralmente ele abre em seus documentos, que “fisicamente” fica em C:/Users/SeuUsuário/Documentos/ onde “SeuUsuário” é o nome de usuário do seu computar. No meu caso é “Wilso” sim, “Wilso”, porque o gênio aqui fez correndo no dia e ficou com preguiça de arrumar… Geralmente, quando você configura o seu PC pela primeira vez, ele pede seu nome, e se você escreve direito (não é o meu caso), você ganha um nome de usuário igual ao seu primeiro nome.↩︎

  2. Pacote? É um conjunto de funções “empacotadas” que algum anjo👼 do Senhor escreveu p facilitar o seu trabalho. Ou seja, ao invés de reinventar a roda, você só importa a roda da China e coloca na sua bicicleta para rodar. 🚴↩︎

  3. O código dados_filmes <- dados_filmes %>% mutate_if(~any(str_detect(.,"%")),~as.numeric(str_remove_all(.,"%")))
    quer dizer que dados_filmes é encanado com %>% para dentro da função mutate_if(), que diz: mude “se” as condições forem atendidas. A condição é: tem “%” no valor? Para testar isso escrevemos: ~any(str_detect(.,"%")) ; Que traduzindo diz: ao longo das colunas (~) em qualquer uma delas (any), detecte a string "%" com str_detect; se detectar retorne verdadeiro, senão falso. Após a virgula com: ~as.numeric(str_remove_all(., "%")) dizemos o seguinte: em função do que vier de lá (~) transforme em numérico com as.numeric() o resultado de str_remove_all(. , “%”) que remove de todas as colunas . o caracter "%"↩︎