Indentação e RMarkdown
Você deve ter percebido que, em listas numeradas, não é preciso começar cada item com o número correto. Basta iniciar, por exemplo, com “\(1\).”.
Depois do primeiro parágrafo do item, todo texto que estiver indentado com \(3\) ou mais espaços vai fazer parte do mesmo item numerado.
Qualquer texto (ou chunk) com indentação menor que \(3\) espaços vai quebrar a sequência dos itens numerados.
Foi por isso que vários dos arquivos entregues pelos alunos tinham listas onde todos os itens eram numerados com \(1\).
Além disso, no RStudio, os chunks só são reconhecidos e executados com ctrl-enter se estiverem sem indentação ou se estiverem indentados com \(4\) espaços.
Conclusão: para que o HTML seja gerado corretamente e para que você ainda consiga executar os chunks interativamente, com ctrl-enter, a indentação precisa ser feita como na figura:
Da linha \(247\) até a linha \(269\), tudo pertence ao primeiro item da lista numerada; por isso, todo este texto está indentado no mínimo \(3\) espaços.
O chunk da linha \(257\) à linha \(269\) está indentado \(4\) espaços, para que o RStudio o reconheça.
Na linha \(271\), começa o próximo item da lista, sem indentação, que será numerado como \(2\).
AVISO
Os dados usados para esta lista foram baseados em https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results
Estes, por sua vez, foram raspados de http://www.sports-reference.com/, usando o código R em https://github.com/rgriff23/Olympic_history/blob/master/R/olympics%20scrape.R e em https://github.com/rgriff23/Olympic_history/blob/master/R/olympics%20wrangle.R
Quando você for calcular totais de medalhas por país, vai chegar a valores maiores do que os verdadeiros. Por exemplo, de acordo com a wikipédia, o Brasil nunca ganhou mais que \(21\) medalhas (de qualquer tipo) em uma olimpíada.
O motivo para isto é que este conjunto de dados tem como unidades os atletas. Em esportes coletivos, como futebol, um país ganhar uma medalha é registrado neste data frame como cada atleta da equipe ganhando uma medalha.
Conclusão: nos resultados, os totais de medalhas contam uma medalha para cada atleta da equipe que ganhou medalha. Os dados não estão errados; só estão estruturados de um jeito que não é o normal para contar totais de medalhas dos países.
INSTRUÇÕES
Fique à vontade para consultar os coleguinhas, mas não copie as respostas deles. Se eu achar que você copiou, vamos ter uma entrevista síncrona, por vídeo, com horas de duração, para que eu tenha certeza de que você sabe o que fez.
Entregue (via Moodle) este arquivo .Rmd com suas respostas. Não esqueça de colocar o seu nome no campo author
, no início do arquivo.
Além do arquivo .Rmd, entregue também (via Moodle) um arquivo contendo um vídeo de no máximo 5 minutos onde você explica em detalhes a resolução de uma das suas questões.
Todos os gráficos devem ser feitos com o pacote ggplot2
.
Todos os gráficos devem incluir títulos, rótulos, legendas (quando necessárias), e outros elementos para facilitar a compreensão. Imagine que seus gráficos serão publicados em uma revista.
Trate o texto e o código com o mesmo cuidado. Use parágrafos no texto e indentação e quebras de linha no código. A legibilidade do texto e do código também fazem parte da apresentação.
Bom trabalho.
Nesta atividade, você vai trabalhar com o conjunto de dados atletas
.
Entre ?atletas
para ver a documentação.
Use glimpse(atletas)
para ver a estrutura da tibble.
Use a função dfSummary
, do pacote summaryTools
, para ver um sumário mais detalhado da tibble.
%>% dfSummary() %>% print(method = 'render') atletas
Variável | Estatísticas / Valores | Freqs (% de Válidos) | Grafo | Faltante | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id [numeric] |
|
97456 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nome [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sexo [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
idade [numeric] |
|
67 valores distintos | 3102 (1,7%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
altura [numeric] |
|
95 valores distintos | 21780 (11,7%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
peso [numeric] |
|
219 valores distintos | 22124 (11,9%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pais [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ano [numeric] |
|
18 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cidade [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
esporte [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
evento [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
medalha [character] |
|
|
159882 (85,9%) |
Gerado por summarytools 1.0.0 (R versão 4.1.2)
2022-01-13
Nesta seção, você vai explorar os dados, mas sem gerar gráficos.
Qual a idade dos atletas mais jovens? Quem são? De onde são? Em que ano competiram? Em que esportes? Ganharam medalha? Use a função slice_min
.
%>%
atletas slice_min(idade) %>%
select(id, nome, idade, pais, ano, esporte, medalha) %>%
arrange(ano)
Qual a idade dos atletas mais velhos? Quem são? De onde são? Em que ano competiram? Em que esportes? Ganharam medalha? Use a função slice_max
.
%>%
atletas slice_max(idade) %>%
select(id, nome, idade, pais, ano, esporte, medalha) %>%
arrange(ano)
Aposto que você não sabia que havia competição de artes nas Olimpíadas! Até que ano isto aconteceu?
%>%
atletas filter(esporte == 'Art Competitions') %>%
pull(ano) %>%
max()
## [1] 1948
Quais eram os eventos das competições de artes? Use a função distinct
.
%>%
atletas filter(esporte == 'Art Competitions') %>%
distinct(evento) %>%
arrange(evento)
Elimine do data frame as linhas relativas a artes.
<-
atletas %>%
atletas filter(esporte != 'Art Competitions')
Quais as idades mínima e máxima agora?
%>%
atletas pull(idade) %>%
summary()
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 11,00 21,00 24,00 25,13 28,00 71,00 3025
Quais os dados dos atletas que têm a idade máxima?
%>%
atletas slice_max(idade) %>%
select(id, nome, idade, pais, ano, esporte, medalha) %>%
arrange(ano)
Quais os atletas mais jovens a ganhar medalha? De onde são? Em que anos ganharam? Em que esportes? Quais medalhas?
%>%
atletas filter(!is.na(medalha)) %>%
slice_min(idade) %>%
select(nome, idade, pais, ano, esporte, medalha)
Quais os atletas mais velhos a ganhar medalha? De onde são? Em que anos ganharam? Em que esportes? Quais medalhas?
%>%
atletas filter(!is.na(medalha)) %>%
slice_max(idade) %>%
select(nome, idade, pais, ano, esporte, medalha)
Usando group_by
e summarize
, crie o data frame medalhas_atletas
com as colunas pais
, ano
, atletas
(total de participações do país naquele ano) e medalhas
(total de medalhas do país naquele ano). Descarte os registros onde o número de medalhas é menor que \(50\).
O código abaixo conta os ids dos atletas, com atletas = n_distinct(id)
, cada id apenas uma vez.
Se você usar atletas = n()
, cada participação de cada atleta será contada.
Considerei as duas alternativas como corretas.
<- atletas %>%
medalhas_atletas group_by(pais, ano) %>%
summarize(
atletas = n_distinct(id),
medalhas = sum(!is.na(medalha)),
.groups = 'drop'
%>%
) filter(medalhas >= 50) %>%
arrange(pais)
medalhas_atletas
Gere um scatterplot de número de medalhas por número de participações. Use geom_smooth
para traçar uma reta de regressão. Comente o resultado.
<- medalhas_atletas %>%
sp_medalha_atletas ggplot(aes(atletas, medalhas)) +
geom_point(alpha = .3) +
geom_smooth(se = FALSE, method = 'lm')
sp_medalha_atletas
## `geom_smooth()` using formula 'y ~ x'
Facete o scatterplot anterior por ano. Disponha os subgráficos em \(3\) linhas e \(6\) colunas.
+
sp_medalha_atletas facet_wrap(~ano, nrow = 3)
## `geom_smooth()` using formula 'y ~ x'
Como você interpreta as diferentes quantidades de pontos em cada subgráfico?
Ao longo dos anos, a quantidade de países que ganharam \(50\) ou mais medalhas aumentou.
Ao longo dos anos, a quantidade de participações de alguns países aumentou.
Ao longo dos anos, a variação da quantidade de participações aumentou. Em \(1948\), o gráfico mostra entre \(100\) e \(300\) participações. Em \(2016\), foram entre \(100\) e \(600\) participações, aproximadamente.
Houve uma única vez em que um país ganhou mais de \(400\) medalhas em um ano. Descubra o que aconteceu para facilitar essa ocorrência.
Em \(1980\), os jogos foram realizados em Moscou, na União Soviética, e os Estados Unidos comandaram um boicote aos jogos por motivos políticos, fazendo com que \(69\) países deixassem de enviar atletas.
Em \(1984\), foi a vez de a União Soviética e outros países comunistas boicotarem os jogos de Los Angeles, mas o gráfico de \(1984\) mostra que os efeitos não foram tão drásticos quanto os do boicote de \(1980\).
Considere agora apenas os registros onde medalhas
é maior que \(200\). Faça um scatterplot de número de medalhas por número de participações, onde cada ponto é colorido de acordo com o país. Aumente o tamanho de todos os pontos para facilitar a leitura. Não gere a reta de regressão. Comente o resultado.
%>%
medalhas_atletas filter(medalhas > 200) %>%
ggplot(aes(atletas, medalhas, color = pais)) +
geom_point(size = 4)
Considerando apenas os países e os anos onde o país ganhou mais de \(200\) medalhas:
Apenas os Estados Unidos tiveram mais de \(500\) participações, com quantidade de medalhas entre \(200\) e \(350\), aproximadamente.
A União Soviética teve entre \(350\) e \(500\) participações, mas, com exceção das quase \(450\) medalhas em Moscou \(1980\), chegou no máximo a \(300\) medalhas.
Rússia (EUN) e Alemanha Oriental (GDR) aparecem com números pouco expressivos em comparação com Estados Unidos e União Soviética.
Usando o data frame atletas
(sem as artes), gere um histograma das idades de todos os atletas, com classes de \(5\) anos de largura.
<- seq(10, 75, 5)
breaks
<- atletas %>%
hist_idades ggplot(aes(idade)) +
geom_histogram(breaks = breaks) +
scale_x_continuous(breaks = breaks) +
scale_y_continuous(labels = label_number_si()) +
labs(
y = NULL,
title = paste(
'Idades dos atletas em olimpíadas desde',
ano_inicial
)
)
hist_idades
## Warning: Removed 3025 rows containing non-finite values (stat_bin).
Faça a mesma coisa, mas apenas para idades maiores ou iguais a \(55\) anos.
<- seq(55, 75, 5)
breaks
<- atletas %>%
hist_idades_velhos filter(idade >= 55) %>%
ggplot(aes(idade)) +
geom_histogram(breaks = breaks) +
scale_x_continuous(breaks = breaks) +
scale_y_continuous(labels = label_number_si()) +
labs(
y = NULL,
title = paste('Idades dos atletas em olimpíadas desde', ano_inicial),
subtitle = '(atletas com 55 anos ou mais)'
)
hist_idades_velhos
Gere dois histogramas de todas as idades, por sexo, com classes de \(5\) anos de largura. Use facet_wrap
.
+
hist_idades labs(subtitle = 'por sexo') +
facet_wrap(~sexo)
## Warning: Removed 3025 rows containing non-finite values (stat_bin).
Comente o resultado, sobretudo nas idades abaixo de \(20\) anos. Por que você acha que acontece isso? Analise os dados como você achar mais adequado para confirmar ou refutar sua hipótese.
Há muito mais homens que mulheres, no total e na maioria das faixas etárias.
Uma faixa etária onde há muito mais mulheres do que homens é a de \(10\) a \(15\) anos.
Mais abaixo, você vai constatar que isso é por causa da ginástica rítmica, onde competem apenas mulheres, grande parte delas muito jovens.
Quais são os esportes com a menor idade média e a maior idade média? Use group_by
e summarize
. Ignore os valores NA
na hora de computar a média (veja a ajuda da função mean
).
<- atletas %>%
extremos group_by(esporte) %>%
summarize(media = mean(idade, na.rm = TRUE)) %>%
arrange(media) %>%
slice(c(1, n()))
extremos
Quais são os esportes com a menor idade mediana e a maior idade mediana? Use group_by
e summarize
. Ignore os valores NA
na hora de computar a mediana (veja a ajuda da função median
).
%>%
atletas group_by(esporte) %>%
summarize(mediana = median(idade, na.rm = TRUE)) %>%
arrange(mediana) %>%
slice(c(1, n()))
Usando somente os atletas dos esportes com menor idade média e maior idade média (achados acima), gere dois histogramas das idades, por esporte, com classes de \(5\) anos. Use facet_wrap
.
<- seq(10, 90, 5)
breaks <- extremos %>% pull(esporte)
esportes
%>%
atletas filter(esporte %in% esportes) %>%
ggplot(aes(idade)) +
geom_histogram(breaks = breaks) +
scale_x_continuous(breaks = breaks) +
scale_y_continuous(labels = label_number_si()) +
labs(
y = NULL,
title = paste('Idades dos atletas em olimpíadas desde', ano_inicial),
subtitle = 'nos esportes com maior e menor idades médias'
+
) facet_wrap(~esporte)
## Warning: Removed 91 rows containing non-finite values (stat_bin).
Repita o item anterior, desta vez usando facet_grid
em vez de facet_wrap
, para gerar \(4\) histogramas, cada um com um esporte e um sexo. Comente o resultado.
<- seq(10, 90, 5)
breaks <- extremos %>% pull(esporte)
esportes
%>%
atletas filter(esporte %in% esportes) %>%
ggplot(aes(idade)) +
geom_histogram(breaks = breaks) +
scale_x_continuous(breaks = breaks) +
scale_y_continuous(labels = label_number_si()) +
labs(
y = NULL,
title = paste('Idades dos atletas em olimpíadas desde', ano_inicial),
subtitle = 'por sexo, nos esportes com maior e menor idades médias'
+
) facet_grid(cols = vars(sexo), rows = vars(esporte))
## Warning: Removed 91 rows containing non-finite values (stat_bin).
Gere boxplots lado a lado, um boxplot por ano, para as alturas de todos os atletas. Comente o resultado.
<- atletas %>%
box_alturas ggplot(aes(ano, altura, group = ano)) +
geom_boxplot()
box_alturas
## Warning: Removed 21310 rows containing non-finite values (stat_boxplot).
A mediana se manteve próxima de \(175\)cm ao longo dos anos.
A variação aumentou nos anos \(60\).
Repita o item anterior, facetando por sexo. Use coord_flip
. Comente os resultados.
+
box_alturas facet_wrap(~sexo) +
coord_flip()
## Warning: Removed 21310 rows containing non-finite values (stat_boxplot).
A mediana da altura das mulheres aumentou desde os anos \(50\).
A mediana da altura dos homens aumentou desde os anos \(60\).
Estas mudanças não apareciam no gráfico do item anterior porque estávamos considerando homens e mulheres em conjunto.
Gere dois boxplots lado a lado, um para os brasileiros (BRA), um para os holandeses (NED), para as alturas dos atletas. Comente o resultado.
<- atletas %>%
box_bra_ned filter(pais %in% c('BRA', 'NED')) %>%
ggplot(aes(pais, altura, group = pais)) +
geom_boxplot()
box_bra_ned
## Warning: Removed 811 rows containing non-finite values (stat_boxplot).
A mediana e os quartis das alturas dos holandeses (considerando homens e mulheres em conjunto) são um pouco maiores do que os valores correspondentes dos brasileiros.
Curiosamente, existe um brasileiro mais alto do que todos os holandeses.
Repita o item anterior, facetando por sexo. Comente os resultados.
+
box_bra_ned facet_wrap(~sexo)
## Warning: Removed 811 rows containing non-finite values (stat_boxplot).
Valem as mesmas observações do item anterior, quando examinamos os dados separados por sexo.
Existe uma mulher brasileira mais alta que todas as mulheres holandesas.
Gere um gráfico de barras horizontais com as quantidades de medalhas de ouro dos \(10\) países que ganharam mais medalhas de ouro nas olimpíadas de \(2016\). Coloque as barras em ordem decrescente.
%>%
atletas filter(ano == 2016 & medalha == 'Gold') %>%
group_by(pais) %>%
summarize(ouro = n()) %>%
slice_max(ouro, n = 10) %>%
ggplot(aes(fct_reorder(pais, ouro), ouro)) +
geom_col() +
labs(
x = NULL
+
) coord_flip()
Gere um gráfico de barras para as quantidades totais de medalhas do Brasil, por ano. No eixo \(x\), coloque rótulos para todos os anos de Olimpíada desde \(1948\). Para os rótulos ficarem legíveis, use coord_flip
.
%>%
atletas filter(pais == 'BRA' & !is.na(medalha)) %>%
ggplot(aes(ano)) +
geom_bar() +
labs(y = NULL) +
scale_x_continuous(breaks = seq(ano_inicial, 2020, 4)) +
coord_flip()
Repita o item anterior, com duas barras lado a lado por ano, uma para cada sexo. O que você nota de estranho no resultado?
%>%
atletas filter(pais == 'BRA' & !is.na(medalha)) %>%
ggplot(aes(ano, fill = sexo)) +
geom_bar(position = 'dodge') +
labs(y = NULL) +
scale_x_continuous(breaks = seq(ano_inicial, 2020, 4)) +
coord_flip()
A primeira vez em que uma mulher brasileira ganhou medalha foi em \(1996\)!
DESAFIO: Qual foi o primeiro ano em que cada país teve uma atleta do sexo feminino ganhando uma medalha? Construa um data frame. O resultado terá \(98\) linhas.
%>%
atletas filter(sexo == 'F') %>%
group_by(pais, ano) %>%
summarize(
medalhas = sum(!is.na(medalha)),
acumulado = cumsum(medalhas),
.groups = 'drop'
%>%
) filter(acumulado > 0) %>%
group_by(pais) %>%
summarize(ano_primeira_medalha_f = min(ano)) %>%
arrange(desc(ano_primeira_medalha_f))
Uma solução mais simples, sem soma acumulada, semelhante à apresentada por alguns alunos:
%>%
atletas filter(sexo == 'F', !is.na(medalha)) %>%
select(pais, ano) %>%
group_by(pais) %>%
slice_min(ano) %>%
distinct() %>%
ungroup()
Faça um gráfico de linha com os totais de atletas que o Brasil enviou a cada Olimpíada. Sobreponha pontos à linha. No eixo \(x\), coloque rótulos para todos os anos de Olimpíada desde \(1948\). Para os rótulos ficarem legíveis, gire-os em \(45\) graus.
<- atletas %>%
desempenho_brasil filter(pais == 'BRA') %>%
group_by(ano) %>%
summarize(
n_atletas = n(),
n_medalhas = sum(!is.na(medalha)),
perc = n_medalhas / n_atletas
)
<- desempenho_brasil %>%
linha_atletas ggplot(aes(ano)) +
geom_line(aes(y = n_atletas, color = 'atletas')) +
geom_point(aes(y = n_atletas, color = 'atletas')) +
scale_x_continuous(breaks = seq(ano_inicial, 2020, 4)) +
theme(axis.text.x = element_text(angle = 45)) +
labs(
color = NULL,
y = NULL
)
linha_atletas
Acrescente ao gráfico do item anterior uma linha de outra cor, também com pontos, com as quantidades de medalhas obtidas pelo Brasil a cada ano. As cores das linhas devem aparecer na legenda, com as identificações “atletas” e “medalhas”.
+
linha_atletas geom_line(aes(y = n_medalhas, color = 'medalhas')) +
geom_point(aes(y = n_medalhas, color = 'medalhas'))
Calcule, para cada ano, o percentual de medalhas ganhas em relação ao total de participações de atletas brasileiros. Gere um gráfico de linha com pontos sobrepostos. No eixo \(x\), coloque rótulos para todas os anos de Olimpíada desde \(1948\). Para os rótulos ficarem legíveis, gire-os em \(45\) graus. Use o pacote scales
para rotular o eixo \(y\) com percentagens.
%>%
desempenho_brasil ggplot(aes(ano, perc)) +
geom_line() +
geom_point() +
scale_y_continuous(labels = label_percent()) +
labs(
y = NULL
+
) scale_x_continuous(breaks = seq(ano_inicial, 2020, 4)) +
theme(axis.text.x = element_text(angle = 45))