Este é o trabalho final solicitado no curso de R que eu fiz no mês de Agosto de 2021. Eu me inscrevi para concorrer a uma bolsa de diversidade para o curso R para Ciência de Dados II e fui contemplada. Acessem mais informações do curso neste link: https://curso-r.com/cursos/r4ds-2/ .
library(readr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(purrr)
library(stringr)
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(ggplot2)
::install_github("curso-r/basesCursoR") remotes
## Skipping install of 'basesCursoR' from a github remote, the SHA1 (65685a4e) has not changed since last install.
## Use `force = TRUE` to force installation
<- basesCursoR::pegar_base("imdb_completa")
imdb <- basesCursoR::pegar_base("imdb_pessoas")
imdb_pessoas <- basesCursoR::pegar_base("imdb_avaliacoes") imdb_avaliacoes
= imdb imdb2
# Substituindo todos os NAS por " " nas colunas de texto
<- imdb2 %>%
imdb2 mutate(
across(
.cols = where(is.character),
.fns = tidyr::replace_na,
replace = ""
)
)
# Substituindo todos os NAS por zero nas colunas numéricas
<- imdb2 %>%
imdb2 mutate(
across(
.cols = where(is.numeric),
.fns = tidyr::replace_na,
replace = 0
) )
class(imdb2$data_lancamento)
## [1] "character"
= imdb2 %>% mutate(nova_data_lancamento = as.Date(imdb2$data_lancamento)) imdb2
= imdb2 %>% mutate(
imdb2 ano2 = year(nova_data_lancamento),
mes = month(nova_data_lancamento, label = TRUE, abbr = FALSE),
dia = day(nova_data_lancamento))
# Substituindo todos os NAS por " " nas colunas de texto
<- imdb2 %>%
imdb2 mutate(
across(
.cols = where(is.character),
.fns = tidyr::replace_na,
replace = ""
)
)
# Substituindo todos os NAS por zero nas colunas numéricas
<- imdb2 %>%
imdb2 mutate(
across(
.cols = where(is.numeric),
.fns = tidyr::replace_na,
replace = 0
) )
= arrange(imdb2 %>% count(nova_data_lancamento, name = "total"), desc(total))
total_data print(total_data)
## # A tibble: 21,907 x 2
## nova_data_lancamento total
## <date> <int>
## 1 NA 4563
## 2 2018-10-26 49
## 3 2017-09-01 44
## 4 2011-04-01 40
## 5 2018-10-12 40
## 6 2019-11-01 39
## 7 2019-12-06 39
## 8 2017-09-29 38
## 9 2020-02-14 38
## 10 2019-03-01 37
## # ... with 21,897 more rows
# removendo os NAS
= total_data[-1,]
total_data print(total_data)
## # A tibble: 21,906 x 2
## nova_data_lancamento total
## <date> <int>
## 1 2018-10-26 49
## 2 2017-09-01 44
## 3 2011-04-01 40
## 4 2018-10-12 40
## 5 2019-11-01 39
## 6 2019-12-06 39
## 7 2017-09-29 38
## 8 2020-02-14 38
## 9 2019-03-01 37
## 10 2019-09-13 37
## # ... with 21,896 more rows
= data.frame(top_n(total_data, 5)) top_data
## Selecting by total
colnames(top_data) = c("Data", "Total")
print(top_data)
## Data Total
## 1 2018-10-26 49
## 2 2017-09-01 44
## 3 2011-04-01 40
## 4 2018-10-12 40
## 5 2019-11-01 39
## 6 2019-12-06 39
# removendo os NAS
= top_data[-1,]
top_data print(top_data)
## Data Total
## 2 2017-09-01 44
## 3 2011-04-01 40
## 4 2018-10-12 40
## 5 2019-11-01 39
## 6 2019-12-06 39
= total_data[which.max(total_data$total),]
data_max print(data_max)
## # A tibble: 1 x 2
## nova_data_lancamento total
## <date> <int>
## 1 2018-10-26 49
= total_data[which.min(total_data$total),]
data_min print(data_min)
## # A tibble: 1 x 2
## nova_data_lancamento total
## <date> <int>
## 1 1894-10-09 1
= arrange(imdb2 %>% count(mes, name = "total"), desc(total))
total_mes print(total_mes)
## # A tibble: 13 x 2
## mes total
## <ord> <int>
## 1 outubro 8734
## 2 setembro 7924
## 3 março 7435
## 4 novembro 7094
## 5 abril 7078
## 6 dezembro 6618
## 7 fevereiro 6441
## 8 agosto 6399
## 9 janeiro 6361
## 10 maio 6173
## 11 junho 5800
## 12 julho 5235
## 13 <NA> 4563
# removendo os NAs
= total_mes[-13,]
total_mes print(total_mes)
## # A tibble: 12 x 2
## mes total
## <ord> <int>
## 1 outubro 8734
## 2 setembro 7924
## 3 março 7435
## 4 novembro 7094
## 5 abril 7078
## 6 dezembro 6618
## 7 fevereiro 6441
## 8 agosto 6399
## 9 janeiro 6361
## 10 maio 6173
## 11 junho 5800
## 12 julho 5235
<- function() {
meu_tema theme(axis.title.y = element_text(color="#005eff", size=14, face=4)) +
theme(axis.title.x = element_text(color="#005eff", size=14, face=4)) +
theme(axis.text = element_text(angle = 45, color="#005eff", size=10, face=4))
}<- function(tab, colx, coly) {
grafico_dispersao %>%
tab ggplot(aes(x = {{colx}}, y = {{coly}}, color={{coly}})) +
geom_point(size=3, color="#005eff") +
meu_tema()
}grafico_dispersao(total_mes, colx = mes, coly = total)
= data.frame(top_n(total_mes, 5)) top_mes
## Selecting by total
colnames(top_mes) = c("Mês", "Total")
print(top_mes)
## Mês Total
## 1 outubro 8734
## 2 setembro 7924
## 3 março 7435
## 4 novembro 7094
## 5 abril 7078
= total_mes[which.max(total_mes$total),]
mes_max print(mes_max)
## # A tibble: 1 x 2
## mes total
## <ord> <int>
## 1 outubro 8734
= total_mes[which.min(total_mes$total),]
mes_min print(mes_min)
## # A tibble: 1 x 2
## mes total
## <ord> <int>
## 1 julho 5235
= arrange(imdb2 %>% count(dia, name = "total"), desc(total))
total_dia print(total_dia)
## # A tibble: 32 x 2
## dia total
## <dbl> <int>
## 1 1 7260
## 2 0 4563
## 3 15 2831
## 4 14 2728
## 5 25 2727
## 6 21 2647
## 7 10 2626
## 8 20 2611
## 9 12 2600
## 10 28 2574
## # ... with 22 more rows
#removendo NAS
= total_dia[-2,]
total_dia print(total_dia)
## # A tibble: 31 x 2
## dia total
## <dbl> <int>
## 1 1 7260
## 2 15 2831
## 3 14 2728
## 4 25 2727
## 5 21 2647
## 6 10 2626
## 7 20 2611
## 8 12 2600
## 9 28 2574
## 10 7 2555
## # ... with 21 more rows
grafico_dispersao(total_dia, colx = dia, coly = total)
= data.frame(top_n(total_dia, 5)) top_dia
## Selecting by total
colnames(top_dia) = c("Dia", "Total")
print(top_dia)
## Dia Total
## 1 1 7260
## 2 15 2831
## 3 14 2728
## 4 25 2727
## 5 21 2647
= total_dia[which.max(total_dia$total),]
dia_max print(dia_max)
## # A tibble: 1 x 2
## dia total
## <dbl> <int>
## 1 1 7260
= total_dia[which.min(total_mes$total),]
dia_min print(dia_min)
## # A tibble: 1 x 2
## dia total
## <dbl> <int>
## 1 23 2523
= arrange(imdb2 %>% count(ano2, name = "total"), desc(total))
total_ano print(total_ano)
## # A tibble: 114 x 2
## ano2 total
## <dbl> <int>
## 1 0 4563
## 2 2018 3281
## 3 2017 3276
## 4 2019 3108
## 5 2016 3066
## 6 2015 2907
## 7 2014 2848
## 8 2013 2726
## 9 2012 2419
## 10 2011 2331
## # ... with 104 more rows
# removendo NAS
= total_ano[-1,]
total_ano print(total_ano)
## # A tibble: 113 x 2
## ano2 total
## <dbl> <int>
## 1 2018 3281
## 2 2017 3276
## 3 2019 3108
## 4 2016 3066
## 5 2015 2907
## 6 2014 2848
## 7 2013 2726
## 8 2012 2419
## 9 2011 2331
## 10 2009 2156
## # ... with 103 more rows
grafico_dispersao(total_ano, colx = ano2, coly = total)
= total_ano[which.max(total_ano$total),]
ano_max print(ano_max)
## # A tibble: 1 x 2
## ano2 total
## <dbl> <int>
## 1 2018 3281
= total_dia[which.min(total_mes$total),]
ano_min print(ano_min)
## # A tibble: 1 x 2
## dia total
## <dbl> <int>
## 1 23 2523
= data.frame(top_n(total_ano, 5)) top_ano
## Selecting by total
colnames(top_ano) = c("Ano", "Total")
print(top_ano)
## Ano Total
## 1 2018 3281
## 2 2017 3276
## 3 2019 3108
## 4 2016 3066
## 5 2015 2907
<-
imdb_paises %>%
imdb2 mutate(paises_separados = str_split(pais, "\\,")) %>%
unnest(cols = paises_separados)
= arrange(imdb_paises %>% count(paises_separados, name = "total"), desc(total))
total_pais print(total_pais)
## # A tibble: 345 x 2
## paises_separados total
## <chr> <int>
## 1 "USA" 30910
## 2 "India" 6189
## 3 "UK" 5889
## 4 "France" 5202
## 5 "Italy" 3785
## 6 " USA" 3415
## 7 "Japan" 3275
## 8 " France" 3109
## 9 "Canada" 2508
## 10 "Germany" 2039
## # ... with 335 more rows
= data.frame(top_n(total_pais, 5)) top_paises
## Selecting by total
colnames(top_paises) = c("Países", "Total")
print(top_paises)
## Países Total
## 1 USA 30910
## 2 India 6189
## 3 UK 5889
## 4 France 5202
## 5 Italy 3785
# Primeiro verificando para cada coluna individualmente
# A coluna ORCAMENTO tem ______ moedas diferentes:
<-
moedas_orcamento %>% distinct(str_remove(orcamento, pattern="[:digit:]+"))
imdb2
names(moedas_orcamento) = "orcamento"
nrow(moedas_orcamento)
## [1] 80
print(moedas_orcamento)
## # A tibble: 80 x 1
## orcamento
## <chr>
## 1 ""
## 2 "$ "
## 3 "ITL "
## 4 "ROL "
## 5 "SEK "
## 6 "FRF "
## 7 "NOK "
## 8 "GBP "
## 9 "DEM "
## 10 "PTE "
## # ... with 70 more rows
# A coluna RECEITA tem ______ moedas diferentes:
<-
moedas_receita %>% distinct(str_remove(receita, pattern="[:digit:]+"))
imdb2
names(moedas_receita) = "receita"
nrow(moedas_receita)
## [1] 6
print(moedas_receita)
## # A tibble: 6 x 1
## receita
## <chr>
## 1 ""
## 2 "$ "
## 3 "GBP "
## 4 "INR "
## 5 "NPR "
## 6 "PKR "
# Agora considerando as duas colunas ao mesmo tempo
<-
moedas_re_or %>%
imdb2 mutate(
across(
.cols = c(orcamento, receita),
.fns = str_remove, pattern = "[:digit:]+"))
= distinct(moedas_re_or, across(c(orcamento, receita)
moedas_re_or
)
)nrow(moedas_re_or)
## [1] 141
print(moedas_re_or)
## # A tibble: 141 x 2
## orcamento receita
## <chr> <chr>
## 1 "" ""
## 2 "$ " ""
## 3 "ITL " ""
## 4 "ROL " ""
## 5 "" "$ "
## 6 "SEK " ""
## 7 "$ " "$ "
## 8 "FRF " ""
## 9 "NOK " "$ "
## 10 "GBP " "$ "
## # ... with 131 more rows
<-
imdb_generos %>%
imdb2 mutate(generos_separados = str_split(genero, "\\,")) %>%
unnest(cols = generos_separados)
nrow(imdb_generos)
## [1] 175867
# Substituindo todos os NAS por " " nas colunas de texto
<-
imdb_generos %>%
imdb_generos mutate(
across(
.cols = where(is.character),
.fns = tidyr::replace_na,
replace = ""
)
)
# Substituindo todos os NAS por zero nas colunas numéricas
<-
imdb_generos %>%
imdb_generos mutate(
across(
.cols = where(is.numeric),
.fns = tidyr::replace_na,
replace = 0
) )
<-
imdb_generos %>%
imdb_generos mutate(generos_separados = str_remove(imdb_generos$generos_separados, pattern="\\s"))
= imdb_generos %>%
imdb_generos filter(str_detect(orcamento, "\\$")&str_detect(receita, "\\$")) %>%
mutate_at(vars(orcamento, receita), parse_number) %>%
mutate(lucro_dolar = receita - orcamento)
= imdb_generos %>%
resultado group_by(generos_separados) %>%
summarise(lucro_medio = mean(receita - orcamento, na.rm = TRUE))
= imdb_generos %>%
resultado2 group_by(generos_separados) %>%
summarise(nota_media = mean(nota_imdb, na.rm = TRUE)) %>%
slice_max(nota_media)
nrow(resultado2)
## [1] 1
print(resultado2)
## # A tibble: 1 x 2
## generos_separados nota_media
## <chr> <dbl>
## 1 Film-Noir 7.85
= arrange(imdb_generos %>% count(generos_separados, name = "total"), desc(total))
total_generos = data.frame(top_n(total_generos, 5)) top_generos
## Selecting by total
colnames(top_generos) = c("Gêneros", "Total")
print(top_generos)
## Gêneros Total
## 1 Drama 4856
## 2 Comedy 3376
## 3 Action 2148
## 4 Crime 1667
## 5 Romance 1541
= filter(imdb2, imdb2$titulo_original == "Rocky")
result = result[1,]
meu_filme print(meu_filme)
## # A tibble: 1 x 25
## id_filme titulo titulo_original ano data_lancamento genero duracao pais
## <chr> <chr> <chr> <dbl> <chr> <chr> <dbl> <chr>
## 1 tt0075148 Rocky Rocky 1976 1977-03-25 Drama, S~ 120 USA
## # ... with 17 more variables: idioma <chr>, orcamento <chr>, receita <chr>,
## # receita_eua <chr>, nota_imdb <dbl>, num_avaliacoes <dbl>, direcao <chr>,
## # roteiro <chr>, producao <chr>, elenco <chr>, descricao <chr>,
## # num_criticas_publico <dbl>, num_criticas_critica <dbl>,
## # nova_data_lancamento <date>, ano2 <dbl>, mes <ord>, dia <dbl>
= c(result$direcao)
diretores print(diretores)
## [1] "John G. Avildsen" "Sunil Dutt" "Suresh Krishna"
= filter(imdb_pessoas, imdb_pessoas$nome == diretores[1])
diretor1 $data_nascimento diretor1
## [1] "1935-12-21"
$data_falecimento diretor1
## [1] "2017-06-16"
$local_nascimento diretor1
## [1] "Oak Park, Illinois, USA"
# se estivesse vivo teria
<- diretor1$data_nascimento %--% today()
elapsed.time as.duration(elapsed.time)
## [1] "2704665600s (~85.71 years)"
= filter(imdb_pessoas, imdb_pessoas$nome == diretores[2])
diretor2 $data_nascimento diretor2
## [1] "1930-06-06"
$data_falecimento diretor2
## [1] "2005-05-25"
$local_nascimento diretor2
## [1] "Jhelum, Punjab, British India"
# se estivesse vivo teria
<- diretor1$data_nascimento %--% today()
elapsed.time as.duration(elapsed.time)
## [1] "2704665600s (~85.71 years)"
= filter(imdb_pessoas, imdb_pessoas$nome == diretores[3])
diretor3 $data_nascimento diretor3
## [1] NA NA
$data_falecimento diretor3
## [1] NA NA
$local_nascimento diretor3
## [1] NA NA
# se estivesse vivo teria
<- diretor1$data_nascimento %--% today()
elapsed.time as.duration(elapsed.time)
## [1] "2704665600s (~85.71 years)"
<-
imdb2 %>%
imdb_generos mutate(diretores_separados = str_split(direcao, "\\,")) %>%
unnest(cols = diretores_separados)
= arrange(imdb2 %>% count(direcao, name = "total"), desc(total)) total_por_diretores
= filter(total_por_diretores, total_por_diretores$direcao==diretores[1])
total_diretor_1 = filter(total_por_diretores, total_por_diretores$direcao==diretores[2])
total_diretor_2 = filter(total_por_diretores, total_por_diretores$direcao==diretores[3]) total_diretor_3
# Lucro médio dos filmes dirigidos considerando apenas valores em dólar:
%>% filter(diretores_separados == diretor1$nome) %>%
imdb2 group_by(titulo) %>% summarise(lucro_medio = mean(lucro_dolar, na.rm = TRUE))
## # A tibble: 7 x 2
## titulo lucro_medio
## <chr> <dbl>
## 1 Conta su di me 21906454
## 2 La formula -4305711
## 3 La guerra del cittadino Joe 19213254
## 4 Otto secondi di gloria 12623396
## 5 Rocky 116275147
## 6 Rocky V 77946358
## 7 The Karate Kid - Per vincere domani 83119319
%>% filter(diretores_separados == diretor2$nome) %>%
imdb2 group_by(titulo) %>% summarise(lucro_medio = mean(lucro_dolar, na.rm = TRUE))
## # A tibble: 0 x 2
## # ... with 2 variables: titulo <chr>, lucro_medio <dbl>
%>% filter(diretores_separados == diretor3$nome) %>%
imdb2 group_by(titulo) %>% summarise(lucro_medio = mean(lucro_dolar, na.rm = TRUE))
## # A tibble: 0 x 2
## # ... with 2 variables: titulo <chr>, lucro_medio <dbl>
# por algum motivo a ordenação não estava funcionando corretamente
# então primeiro eu retirei todos os espaços vazios
# depois converti para numerico, ai funcionou
<-
imdb2 %>%
imdb2 mutate(nota_imdb = str_remove(imdb2$nota_imdb, pattern="[\\s]+")) %>%
mutate_at(vars(nota_imdb), parse_number)
# ordenado pela nota do filme
<- imdb2[order(imdb2$nota_imdb, decreasing = TRUE),]
imdb2
# criando uma nova coluna com a posição de cada filme
# de acordo com a nota
<- imdb2 %>% mutate(posicao = seq(1, nrow(imdb2), by = 1))
imdb2
# pegando a posição
= filter(imdb2, imdb2$titulo_original == "Rocky")
result2 $posicao result2
## [1] 432 433
<- imdb2 %>% arrange(imdb2$lucro_dolar) %>%
res mutate(rank_lucro = seq(1, nrow(imdb2), by = 1)) %>%
filter(meu_filme$titulo == imdb2$titulo)
$rank_lucro res
## [1] 432 433
$data_lancamento meu_filme
## [1] "1977-03-25"
wday(ymd(meu_filme$data_lancamento), label = TRUE, abbr = FALSE)
## [1] sexta-feira
## 7 Levels: domingo < segunda-feira < terça-feira < ... < sábado
%>% filter(data_lancamento == meu_filme$data_lancamento) imdb2
## # A tibble: 2 x 29
## id_filme titulo titulo_original ano data_lancamento genero duracao pais
## <chr> <chr> <chr> <dbl> <chr> <chr> <dbl> <chr>
## 1 tt0075148 Rocky Rocky 1976 1977-03-25 Drama, S~ 120 USA
## 2 tt0075148 Rocky Rocky 1976 1977-03-25 Drama, S~ 120 USA
## # ... with 21 more variables: idioma <chr>, orcamento <dbl>, receita <dbl>,
## # receita_eua <chr>, nota_imdb <dbl>, num_avaliacoes <dbl>, direcao <chr>,
## # roteiro <chr>, producao <chr>, elenco <chr>, descricao <chr>,
## # num_criticas_publico <dbl>, num_criticas_critica <dbl>,
## # nova_data_lancamento <date>, ano2 <dbl>, mes <ord>, dia <dbl>,
## # generos_separados <chr>, lucro_dolar <dbl>, diretores_separados <chr>,
## # posicao <dbl>
if(as.numeric(meu_filme$ano2)<=1980){
cat("eu ainda não era nascida")
else{
} # exemplo
as.duration(as.Date("1980-09-20") %--% as.Date(imdb2$data_lancamento[1]))
}
## eu ainda não era nascida
= imdb_avaliacoes %>% filter(imdb_avaliacoes$id_filme == meu_filme$id_filme)
avaliacoes = c(colnames(avaliacoes))
idade = t(avaliacoes)
avaliacoes = c(0)
notas = cbind(avaliacoes, data.frame(idade, notas))
a = a %>% filter(str_detect(idade, "nota_media_idade_"))
a $idade = c("0-18", "18-30", "30-45", "45+")
a= data.frame(a[,-3])
a
= density(as.numeric(a$avaliacoes))
b plot(b)
%>%
a ggplot(aes(x=as.numeric(avaliacoes))) +
geom_density(fill="#005eff", color="#e9ecef", alpha=0.6) +
ggtitle("Avaliações por idade") +
meu_tema()