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?
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
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)
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çãoread_delim()
tem o parâmetrodelim
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!
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 RstudioMas você também pode utilizar a função
head()
para mostrar o cabeçalho da tabela.head(dados_filmes, n = 3)
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
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: 👇🏽
No código acima repetimos o
summary()
nosdados_filmes
, mas transformamos a saída em umdata.frame
(quadro de dados ou tabela, como quizer);Depois demos nomes às colunas com
setNames("V1", "coluna", "Freq"
);Usando
separate()
e “dois pontos”":"
como separador, quebramos os dados dentro da colunaFreq
(que estavam como “Mean: 10.1”), em duas novas colunas, as quais chamamos de"medida"
e"valores"
;por fim, usamos
select()
para selecionarfilmes
,medidas
evalores
e removemos os dados nulos comdrop_na()
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)
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))
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
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.
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 |
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 |
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.
Use o que aprendeu e responda:
Sem tempo pra ler? Segue o código📜
The end… Você pode voltar agora, ou ler:
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.↩︎
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. 🚴↩︎
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 "%"
↩︎