Veja na tabela abaixo os números das questôes que foram sorteadas para você. Se seu número de matrícula não estiver na tabela, entre em contato comigo pelo Telegram.
matrícula |
|||
---|---|---|---|
020060001 |
2.17, |
3.2, 3.26, |
4.1 |
020060003 |
2.19, |
3.13, 3.32, |
4.1 |
114060043 |
2.6, |
3.18, 3.30, |
4.1 |
115060047 |
2.12, |
3.9, 3.21, |
4.1 |
118060029 |
2.11, |
3.20, 3.33, |
4.1 |
119060007 |
2.10, |
3.11, 3.24, |
4.1 |
119060011 |
2.3, |
3.5, 3.31, |
4.1 |
119060025 |
2.5, |
3.12, 3.23, |
4.1 |
120060005 |
2.4, |
3.14, 3.37, |
4.1 |
120060007 |
2.8, |
3.3, 3.27, |
4.1 |
120060009 |
2.7, |
3.6, 3.29, |
4.1 |
218060052 |
2.15, |
3.7, 3.35, |
4.1 |
218060053 |
2.14, |
3.15, 3.25, |
4.1 |
218060070 |
2.2, |
3.17, 3.36, |
4.1 |
218060076 |
2.20, |
3.8, 3.22, |
4.1 |
219060086 |
2.18, |
3.4, 3.40, |
4.1 |
220060047 |
2.16, |
3.19, 3.39, |
4.1 |
220060059 |
2.9, |
3.1, 3.34, |
4.1 |
220060063 |
2.1, |
3.10, 3.28, |
4.1 |
920060073 |
2.13, |
3.16, 3.38, |
4.1 |
Clique o botão Code
, no início desta página, para baixar o arquivo Rmd deste documento.
Edite o arquivo Rmd para resolver as suas questões.
Se quiser resolver questões que não foram sorteadas para você, fique à vontade. Na verdade, em alguns casos, uma questão sua pode depender da resposta da questão de outro aluno.
Escreva o máximo possível sobre o seu raciocínio. Justifique suas respostas.
Teste suas respostas. Tudo deve estar executando sem erros.
Envie no Moodle:
O arquivo Rmd com as suas resoluções e
Um vídeo de até \(5\) minutos explicando as suas resoluções.
Bom trabalho.
Para gerar um arquivo HTML a partir deste documento, você precisa dos seguintes pacotes do R:
conflicted
devtools
fnaufelRmd
kableExtra
knitr
latex2exp
leaflet
patchwork
sessioninfo
summarytools
tidyverse
Se você estiver usando o Ubuntu, você precisa instalar — pelo sistema, não pelo R — o pacote libgdal-dev
. Faça isto antes de executar o código abaixo.
Execute o seguinte código para instalar os pacotes que estão faltando no seu ambiente:
if (!require('devtools'))
install.packages('devtools')
if (!require('fnaufelRmd'))
devtools::install_github("fnaufel/fnaufelRmd")
pacotes <- c(
'conflicted',
'kableExtra',
'knitr',
'latex2exp',
'leaflet',
'sessioninfo',
'summarytools',
'tidyverse'
)
instalar_se_preciso <- function(x) {
if (!require(x, character.only = TRUE))
install.packages(x)
}
invisible(sapply(pacotes, instalar_se_preciso))
Se houver erro na instalação, entre em contato comigo pelo Telegram, enviando todas as mensagens emitidas quando você executou os comandos.
Os nomes das colunas originais estão em inglês. Para ver o dicionário de dados — documentação sobre cada uma das colunas — visite https://www.kaggle.com/datasets/crisparada/brazilian-cities?select=Data_Dictionary.csv.
Eis uma função para renomear as colunas para português. Ela simplesmente retorna um vetor com os novos nomes, na mesma ordem que as colunas originais.
renomear <- function(x) {
c(
'cidade',
'estado',
'capital',
'pop_resid',
'pop_resid_bras',
'pop_resid_estr',
'unidades_domest',
'unidades_domest_urban',
'unidades_domest_rural',
'pop_regular',
'pop_regular_1',
'pop_regular_1_4',
'pop_regular_5_9',
'pop_regular_10_14',
'pop_regular_15_59',
'pop_regular_60_mais',
'area_cultivada',
'producao_rural',
'idhm_ranking',
'idhm',
'idhm_renda',
'idhm_longevidade',
'idhm_educacao',
'longitude',
'latitude',
'altitude',
'tv_assinatura',
'telefones_fixos',
'area',
'regiao_turismo',
'categoria_turismo',
'pop_estimada',
'tipo',
'gva_agropec',
'gva_industria',
'gva_servicos',
'gva_publico',
'gva_total',
'impostos',
'pib',
'pop_pib',
'pib_capita',
'atividade_principal',
'despesas_municipais',
'empresas_tot',
'empresas_a',
'empresas_b',
'empresas_c',
'empresas_d',
'empresas_e',
'empresas_f',
'empresas_g',
'empresas_h',
'empresas_i',
'empresas_j',
'empresas_k',
'empresas_l',
'empresas_m',
'empresas_n',
'empresas_o',
'empresas_p',
'empresas_q',
'empresas_r',
'empresas_s',
'empresas_t',
'empresas_u',
'hoteis',
'camas',
'agencias_priv',
'agencias_publ',
'bancos_priv',
'bancos_publ',
'patrimonio_bancos_priv',
'patrimonio_bancos_publ',
'carros',
'motos',
'tratores',
'uber',
'mac',
'walmart',
'correios'
)
}
Ler os dados, renomear as colunas e mudar o tipo de duas delas:
cidades <- read_csv(
'dados/BRAZIL_CITIES_REV2022.CSV'
) %>%
rename_with(.fn = renomear) %>%
mutate(
capital = as.logical(capital),
uber = as.logical(uber)
)
## Rows: 5578 Columns: 81
## ── Column specification ─────────────────────────────────────────────────────────────
## Delimiter: ","
## chr (6): CITY, STATE, REGIAO_TUR, CATEGORIA_TUR, RURAL_URBAN, GVA_MAIN
## dbl (75): CAPITAL, IBGE_RES_POP, IBGE_RES_POP_BRAS, IBGE_RES_POP_ESTR, IBGE_DU, I...
##
## ℹ 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.
Examinar a tibble com dfSummary
:
Variável | Estatísticas / Valores | Freqs (% de Válidos) | Faltante | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
cidade [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
estado [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
capital [logical] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_resid [numeric] |
|
5044 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_resid_bras [numeric] |
|
5072 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_resid_estr [numeric] |
|
359 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
unidades_domest [numeric] |
|
4197 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
unidades_domest_urban [numeric] |
|
3769 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
unidades_domest_rural [numeric] |
|
2653 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_regular [numeric] |
|
4785 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_regular_1 [numeric] |
|
1030 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_regular_1_4 [numeric] |
|
2019 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_regular_5_9 [numeric] |
|
2314 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_regular_10_14 [numeric] |
|
2472 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_regular_15_59 [numeric] |
|
4478 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_regular_60_mais [numeric] |
|
2622 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
area_cultivada [numeric] |
|
4339 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
producao_rural [numeric] |
|
5010 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
idhm_ranking [numeric] |
|
5566 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
idhm [numeric] |
|
350 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
idhm_renda [numeric] |
|
391 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
idhm_longevidade [numeric] |
|
221 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
idhm_educacao [numeric] |
|
467 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
longitude [numeric] |
|
5496 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
latitude [numeric] |
|
5489 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
altitude [numeric] |
|
5549 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tv_assinatura [numeric] |
|
1923 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
telefones_fixos [numeric] |
|
2237 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
area [numeric] |
|
5556 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
regiao_turismo [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
categoria_turismo [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_estimada [numeric] |
|
5096 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tipo [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gva_agropec [numeric] |
|
5373 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gva_industria [numeric] |
|
5126 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gva_servicos [numeric] |
|
5460 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gva_publico [numeric] |
|
5435 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gva_total [numeric] |
|
5537 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
impostos [numeric] |
|
4981 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pib [numeric] |
|
5530 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pop_pib [numeric] |
|
5114 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pib_capita [numeric] |
|
5046 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
atividade_principal [character] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
despesas_municipais [numeric] |
|
4071 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_tot [numeric] |
|
1458 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_a [numeric] |
|
247 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_b [numeric] |
|
55 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_c [numeric] |
|
483 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_d [numeric] |
|
26 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_e [numeric] |
|
63 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_f [numeric] |
|
345 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_g [numeric] |
|
996 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_h [numeric] |
|
344 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_i [numeric] |
|
396 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_j [numeric] |
|
211 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_k [numeric] |
|
173 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_l [numeric] |
|
193 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_m [numeric] |
|
317 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_n [numeric] |
|
398 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_o [numeric] |
|
47 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_p [numeric] |
|
276 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_q [numeric] |
|
296 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_r [numeric] |
|
163 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_s [numeric] |
|
340 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_t [numeric] | 1 valor distinto |
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
empresas_u [numeric] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hoteis [numeric] |
|
33 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
camas [numeric] |
|
369 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
agencias_priv [numeric] |
|
61 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
agencias_publ [numeric] |
|
51 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bancos_priv [numeric] |
|
20 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bancos_publ [numeric] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
patrimonio_bancos_priv [numeric] |
|
2333 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
patrimonio_bancos_publ [numeric] |
|
2921 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
carros [numeric] |
|
3577 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
motos [numeric] |
|
3358 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tratores [numeric] |
|
130 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uber [logical] |
|
|
0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mac [numeric] |
|
20 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
walmart [numeric] |
|
12 valores distintos | 0 (0,0%) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
correios [numeric] |
|
36 valores distintos | 0 (0,0%) |
Gerado por summarytools 1.0.0 (R versão 4.2.0)
2022-05-12
Pesquise o que é IDHM.
Segundo a Wikipedia (consultada em 02/06/2022):
O Índice de Desenvolvimento Humano Municipal é uma versão modificada do IDH usado para calcular o IDH das unidades federativas do Brasil. Por ser uma versão modificada do IDH, não é recomendada a comparação com outros países que usam o IDH padrão.
Foi criado para ser um índice similar ao IDH que se adequasse à demografia brasileira.
O índice tem 3 indicadores: IDHM Longevidade, IDHM Educação, IDHM Renda.
Qual o valor máximo possível? Qual o valor máximo na tibble?
Compare a quantidade de estados com a quantidade de capitais. O que está errado? Conserte a situação.
Como capital
é uma coluna booleana, usamos sum
para obter a quantidade de municípios para os quais capital
é verdadeiro:
cidades %>%
summarize(
estados = n_distinct(estado),
capitais = sum(capital)
)
As quantidades são diferentes!
Listando as capitais com seus respectivos estados:
Em alguns estados, existem cidades — não-capitais — que têm o mesmo nome que capitais de outros estados. Estas cidades estão marcadas como capitais.
repetidas <- cidades %>%
filter(capital) %>%
select(estado, cidade) %>%
arrange(estado) %>%
add_count(estado) %>%
filter(n > 1)
repetidas
Vamos consertar:
nao_capitais <- repetidas %>%
slice(-c(3, 4, 8, 9))
cidades <- cidades %>%
mutate(
capital = case_when(
!(estado %in% nao_capitais$estado) ~ capital,
!(cidade %in% nao_capitais$cidade) ~ capital,
TRUE ~ FALSE
)
)
E conferir:
Verifique se a coluna pop_resid
(população de residentes) é a soma de pop_resid_bras
(população de residentes brasileiros) com pop_resid_estr
(população de residentes estrangeiros). Use a função all
.
Verifique se a coluna unidades_domest
(unidades domésticas) é a soma de unidades_domest_urban
(urbanas) com unidades_domest_rural
(rurais). Use a função all
.
Na coluna categoria_turismo
, substitua os zeros por NA
e converta tudo para um fator ordenado com níveis \(E < D < C < B < A\). Use a função factor
.
Na coluna atividade_principal
, substitua os zeros por NA
e converta tudo para um fator não-ordenado.
Crie uma nova coluna, do tipo fator, chamada regiao
, com a região geográfica (Norte, Nordeste, Centro-Oeste, Sudeste, ou Sul) onde está cada município. Use os níveis ‘N’, ‘NE’, ‘CO’, ‘SE’, ‘S’.
estados <- unique(cidades$estado) %>% sort()
regioes <- c(
'N', 'NE', 'N', 'N', 'NE', 'NE', 'CO', 'SE', 'CO', 'NE',
'SE', 'CO', 'CO', 'N', 'NE', 'NE', 'NE', 'S', 'SE', 'NE',
'N', 'N', 'S', 'S', 'NE', 'SE', 'N'
)
names(regioes) <- estados
cidades <- cidades %>%
mutate(
regiao = factor(regioes[estado])
)
Na coluna regiao_turismo
, substitua os zeros por NA
.
Quantas regiões de turismo são?
n_distinct(cidades$regiao_turismo, na.rm = TRUE)
## [1] 321
Qual tem mais municípios?
Qual tem menos municípios?
Quantos municípios não fazem parte de região de turismo?
Existe alguma região de turismo contendo cidades de estados diferentes?
Gere uma tibble com todos os valores distintos de regiao_turismo
, sem repetições.
Quais são as \(10\) palavras mais comuns que iniciam os nomes de regiões de turismo? Use a função word
.
Liste, em ordem alfabética, os nomes completos das regiões de turismo cujos nomes começam com palavras desta lista.
pib_capita
é o resultado da divisão de pib
por pop_pib
. Use a função all
.Quais as \(10\) cidades que têm a maior quantidade de carros por habitante?
Se usarmos pop_regular
, algumas cidades têm zero neste campo:
cidades %>%
mutate(
carros_por_habitante = carros / pop_regular
) %>%
slice_max(carros_por_habitante, n = 10) %>%
select(cidade, estado, carros_por_habitante, pop_regular)
Vamos excluí-las:
carros_pop_regular <- cidades %>%
filter(pop_regular > 0) %>%
mutate(
carros_por_habitante = carros / pop_regular
) %>%
slice_max(carros_por_habitante, n = 10) %>%
select(cidade, estado, carros_por_habitante, tipo)
carros_pop_regular
Ou podemos usar a população residente, também eliminando as cidades com zero neste campo:
carros_pop_resid <- cidades %>%
filter(pop_resid > 0) %>%
mutate(
carros_por_habitante = carros / pop_resid
) %>%
slice_max(carros_por_habitante, n = 10) %>%
select(cidade, estado, carros_por_habitante, tipo)
carros_pop_resid
Ou podemos usar a população estimada, onde as cidades com zero habitantes têm zero carros — e o R calcula \(0/0\) como NaN
, não como Inf
:
carros_pop_est <- cidades %>%
mutate(
carros_por_habitante = carros / pop_estimada
) %>%
slice_max(carros_por_habitante, n = 10) %>%
select(cidade, estado, carros_por_habitante, tipo)
carros_pop_est
Vamos comparar:
tibble(
regular = paste(
carros_pop_regular$cidade,
carros_pop_regular$estado,
sep = ', '
),
resid = paste(
carros_pop_resid$cidade,
carros_pop_resid$estado,
sep = ', '
),
estim = paste(
carros_pop_est$cidade,
carros_pop_est$estado,
sep = ', '
)
)
Quais as \(10\) cidades que têm a menor quantidade de carros por habitante?
Vamos ignorar as cidades com zero carros.
Usando a população regular:
carros_pop_regular <- cidades %>%
filter(carros > 0) %>%
mutate(
carros_por_habitante = carros / pop_regular
) %>%
slice_min(carros_por_habitante, n = 10) %>%
select(cidade, estado, carros_por_habitante, tipo)
carros_pop_regular
Usando a população residente:
carros_pop_resid <- cidades %>%
filter(carros > 0) %>%
mutate(
carros_por_habitante = carros / pop_resid
) %>%
slice_min(carros_por_habitante, n = 10) %>%
select(cidade, estado, carros_por_habitante, tipo)
carros_pop_resid
Usando a população estimada:
carros_pop_est <- cidades %>%
filter(carros > 0) %>%
mutate(
carros_por_habitante = carros / pop_estimada
) %>%
slice_min(carros_por_habitante, n = 10) %>%
select(cidade, estado, carros_por_habitante, tipo)
carros_pop_est
Vamos comparar:
tibble(
regular = paste(
carros_pop_regular$cidade,
carros_pop_regular$estado,
sep = ', '
),
resid = paste(
carros_pop_resid$cidade,
carros_pop_resid$estado,
sep = ', '
),
estim = paste(
carros_pop_est$cidade,
carros_pop_est$estado,
sep = ', '
)
)
Quais são os tipos destas cidades?
Já incluídos nos resultados acima.
Comente os resultados.
As cidades com mais carros por habitante são todas da região Sul ou Sudeste.
Por um dos critérios, são todas do tipo rural adjacente.
As únicas capitais que aparecem são Belo Horizonte e Curitiba.
As cidades com menos carros por habitante são todas da região Norte, onde o transporte rodoviário é pouco desenvolvido.
São todas do tipo rural remoto ou intermediário remoto.
Quais as \(10\) cidades que têm a maior quantidade de motos por habitante?
Se usarmos pop_regular
, algumas cidades têm zero neste campo:
cidades %>%
mutate(
motos_por_habitante = motos / pop_regular
) %>%
slice_max(motos_por_habitante, n = 10) %>%
select(cidade, estado, motos_por_habitante, pop_regular)
Vamos excluí-las:
motos_pop_regular <- cidades %>%
filter(pop_regular > 0) %>%
mutate(
motos_por_habitante = motos / pop_regular
) %>%
slice_max(motos_por_habitante, n = 10) %>%
select(cidade, estado, motos_por_habitante, tipo)
motos_pop_regular
Ou podemos usar a população residente, também eliminando as cidades com zero neste campo:
motos_pop_resid <- cidades %>%
filter(pop_resid > 0) %>%
mutate(
motos_por_habitante = motos / pop_resid
) %>%
slice_max(motos_por_habitante, n = 10) %>%
select(cidade, estado, motos_por_habitante, tipo)
motos_pop_resid
Ou podemos usar a população estimada, onde as cidades com zero habitantes têm zero motos — e o R calcula \(0/0\) como NaN
, não como Inf
:
motos_pop_est <- cidades %>%
mutate(
motos_por_habitante = motos / pop_estimada
) %>%
slice_max(motos_por_habitante, n = 10) %>%
select(cidade, estado, motos_por_habitante, tipo)
motos_pop_est
Vamos comparar:
tibble(
regular = paste(
motos_pop_regular$cidade,
motos_pop_regular$estado,
sep = ', '
),
resid = paste(
motos_pop_resid$cidade,
motos_pop_resid$estado,
sep = ', '
),
estim = paste(
motos_pop_est$cidade,
motos_pop_est$estado,
sep = ', '
)
)
Quais as \(10\) cidades que têm a menor quantidade de motos por habitante?
Vamos ignorar as cidades com zero motos.
Usando a população regular:
motos_pop_regular <- cidades %>%
filter(motos > 0) %>%
mutate(
motos_por_habitante = motos / pop_regular
) %>%
slice_min(motos_por_habitante, n = 10) %>%
select(cidade, estado, motos_por_habitante, tipo)
motos_pop_regular
Usando a população residente:
motos_pop_resid <- cidades %>%
filter(motos > 0) %>%
mutate(
motos_por_habitante = motos / pop_resid
) %>%
slice_min(motos_por_habitante, n = 10) %>%
select(cidade, estado, motos_por_habitante, tipo)
motos_pop_resid
Usando a população estimada:
motos_pop_est <- cidades %>%
filter(motos > 0) %>%
mutate(
motos_por_habitante = motos / pop_estimada
) %>%
slice_min(motos_por_habitante, n = 10) %>%
select(cidade, estado, motos_por_habitante, tipo)
motos_pop_est
Vamos comparar:
tibble(
regular = paste(
motos_pop_regular$cidade,
motos_pop_regular$estado,
sep = ', '
),
resid = paste(
motos_pop_resid$cidade,
motos_pop_resid$estado,
sep = ', '
),
estim = paste(
motos_pop_est$cidade,
motos_pop_est$estado,
sep = ', '
)
)
Quais são os tipos destas cidades?
Já incluídos nos resultados acima.
Comente os resultados.
Por dois dos critérios, as cidades com mais motos por habitante são todas da região Norte ou Nordeste.
São do tipo rural adjacente ou urbano.
As cidades com menos motos por habitante são todas da região Norte, onde o transporte rodoviário é pouco desenvolvido.
São todas do tipo rural remoto ou rural adjacente.
Quais as \(10\) cidades que têm a maior quantidade de tratores por habitante? Ignore as cidades que têm zero tratores.
Quais as \(10\) cidades que têm a menor quantidade de tratores por habitante? Ignore as cidades que têm zero tratores.
Quais são os tipos destas cidades?
Comente os resultados.
Quais as \(10\) cidades que têm a maior área?
Quais as \(10\) cidades que têm a menor área?
Quais são os tipos destas cidades?
Comente os resultados.
Quais as \(10\) cidades que têm a maior produção rural?
Quais as \(10\) cidades que têm a menor produção rural?
Quais são os tipos destas cidades? Ignore as cidades que têm zero produção rural.
Já incluídos nas tabelas acima.
Comente os resultados.
Muitas cidades do tipo urbano na lista de maiores produções rurais.
Quais as \(10\) cidades que têm a maior produção rural per capita?
Quais as \(10\) cidades que têm a menor produção rural per capita?
Quais são os tipos destas cidades? Ignore as cidades que têm zero produção rural.
Comente os resultados.
Quais as \(10\) cidades que têm a maior densidade demográfica?
Quais as \(10\) cidades que têm a menor densidade demográfica?
Quais são os tipos destas cidades?
Incluídos nas tabelas acima.
Comente os resultados.
Com exceção de Olinda e Fortaleza, as cidades de maior densidade demográfica estão no Rio de Janeiro e em São Paulo.
As de menor densidade demográfica ficam na região Norte, com exceção de Rondolândia.
Quais são as \(10\) cidades de maior e menor latitude?
Quais são as \(10\) cidades de maior e menor longitude?
Quais são as \(10\) cidades de maior e menor altitude?
Responda as perguntas acima por região geográfica. Você vai precisar da resposta desta questão.
Latitude:
Só a região Norte pode ter cidades com latitude zero.
cidades %>%
filter(latitude != 0 | regiao == 'N') %>%
group_by(regiao) %>%
slice_max(latitude, n = 10) %>%
select(cidade, estado, regiao, latitude)
cidades %>%
group_by(regiao) %>%
slice_min(latitude, n = 10) %>%
select(cidade, estado, regiao, latitude)
Longitude:
cidades %>%
filter(longitude != 0) %>%
group_by(regiao) %>%
slice_max(longitude, n = 10) %>%
select(cidade, estado, regiao, longitude)
cidades %>%
filter(longitude != 0) %>%
group_by(regiao) %>%
slice_min(longitude, n = 10) %>%
select(cidade, estado, regiao, longitude)
Altitude:
cidades %>%
group_by(regiao) %>%
slice_max(altitude, n = 10) %>%
select(cidade, estado, regiao, altitude)
cidades %>%
group_by(regiao) %>%
slice_min(altitude, n = 10) %>%
select(cidade, estado, regiao, altitude)
Todos os gráficos devem ser feitos com o pacote ggplot2.
Todos os gráficos devem incluir títulos, rótulos, legendas, e outros elementos para facilitar a compreensão. Imagine que seus gráficos serão publicados em uma revista científica.
Apenas para as cidades que têm McDonald’s, faça um scatterplot de quantidade de McDonald’s (no eixo \(y\)) por população (no eixo \(x\)).
grafico <- cidades %>%
filter(mac > 0) %>%
ggplot(
aes(x = pop_resid, y = mac)
) +
geom_point() +
scale_x_continuous(
labels = scales::number_format(
scale = 1e-6,
suffix = 'M'
)
) +
labs(
title = 'Quantidade de McDonald\'s por população',
x = 'população',
y = 'Qtde de\nMcDonald\'s'
)
grafico
Restringindo a cidades de até \(2\) milhões de habitantes, eliminando os outliers:
grafico2 <- grafico +
scale_x_continuous(
limits = c(0, 2e6),
labels = scales::number_format(
scale = 1e-6,
suffix = 'M'
)
)
## Scale for 'x' is already present. Adding another scale for 'x', which will replace
## the existing scale.
grafico2
## Warning: Removed 6 rows containing missing values (geom_point).
Use geom_smooth
para gerar uma reta de regressão (com method = 'lm'
e se = FALSE
).
grafico +
geom_smooth(
method = 'lm',
se = FALSE
)
## `geom_smooth()` using formula 'y ~ x'
Restringindo a cidades de até \(2\) milhões de habitantes, eliminando os outliers:
grafico2 +
geom_smooth(
method = 'lm',
se = FALSE
)
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 6 rows containing non-finite values (stat_smooth).
## Warning: Removed 6 rows containing missing values (geom_point).
Existe alguma correlação entre as quantidades? Comente.
Apenas para as cidades que têm Walmart, faça um scatterplot de quantidade de Walmarts (no eixo \(y\)) por população (no eixo \(x\)).
Use geom_smooth
para gerar uma reta de regressão (com method = 'lm'
e se = FALSE
).
Existe alguma correlação entre as quantidades? Comente.
Faça um scatterplot de IDHM (no eixo \(y\)) por PIB per capita (no eixo \(x\)).
Use geom_smooth
para gerar uma reta de regressão (com method = 'lm'
e se = FALSE
).
Existe alguma correlação entre as quantidades? Comente.
Faça um scatterplot de IDHM (no eixo \(y\)) por despesas municipais (no eixo \(x\)).
cidades %>%
ggplot() +
geom_point(
aes(x = despesas_municipais, y = idhm)
) +
scale_x_continuous(
labels = scales::number_format(
scale = 1e-9
)
) +
labs(
title = 'IDHM por despesas municipais',
x = 'despesas municipais\n(bilhões R$)',
y = 'IDHM'
)
Horrível. Vamos limitar a despesas maiores que zero e menores que \(1\) bilhão, e ignorar as cidades com IDHM igual a zero:
grafico <-
cidades %>%
filter(
between(despesas_municipais, 1, 1e9),
idhm > 0
) %>%
ggplot(
aes(x = despesas_municipais, y = idhm)
) +
geom_point() +
scale_x_continuous(
labels = scales::number_format(
scale = 1e-6
)
) +
labs(
title = 'IDHM por despesas municipais',
x = 'despesas municipais\n(milhões R$)',
y = 'IDHM'
)
grafico
Use geom_smooth
para gerar uma reta de regressão (com method = 'lm'
e se = FALSE
).
grafico +
geom_smooth(method = 'lm', se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
Existe alguma correlação entre as quantidades? Comente.
É razoável pensar que despesas municipais maiores estão associadas a um IDHM maior, por causa de investimentos em saúde, educação, etc.
A reta de regressão mostra que sim, embora a correlação não seja tão grande:
cor(cidades$idhm, cidades$despesas_municipais)
## [1] 0,1104154
Existem cidades com despesas baixas e IDHM alto.
Acima de \(250\) milhões de despesas, nenhuma cidade tem IDHM menor que \(0{,}6\).
Faça um scatterplot de IDHM (no eixo \(y\)) por quantidade de carros (no eixo \(x\)).
Use geom_smooth
para gerar uma reta de regressão (com method = 'lm'
e se = FALSE
).
Existe alguma correlação entre as quantidades? Comente.
Faça um scatterplot de IDHM (no eixo \(y\)) por quantidade de motos (no eixo \(x\)).
Use geom_smooth
para gerar uma reta de regressão (com method = 'lm'
e se = FALSE
).
Existe alguma correlação entre as quantidades? Comente.
Faça um scatterplot de IDHM (no eixo \(y\)) por quantidade de tratores (no eixo \(x\)). Ignore as cidades que têm zero tratores.
Use geom_smooth
para gerar uma reta de regressão (com method = 'lm'
e se = FALSE
).
Existe alguma correlação entre as quantidades? Comente.
Faça um histograma da quantidade de agências de correios. Use o número de classes que você achar mais adequado.
Comente os resultados.
Faça um histograma da razão (número de agências de correio) / (população). Use o número de classes que você achar mais adequado.
Comente os resultados.
Faça um histograma da quantidade de agências bancárias públicas. Use o número de classes que você achar mais adequado.
Existem muitas cidades com zero agências públicas:
Vamos ignorá-las:
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Ainda assim, a grande quantidade de cidades com só uma agência faz o histograma ficar não-interessante.
Vamos fazer um histograma do logaritmo do número de agências.
publicas <- cidades %>%
filter(agencias_publ > 0) %>%
mutate(log_publ = log(agencias_publ, 2)) %>%
ggplot() +
geom_histogram(
aes(x = log_publ),
breaks = 0:10
) +
scale_x_continuous(
labels = function(x) 2^x,
breaks = 0:10
) +
labs(
title = 'Quantidade de agências públicas',
subtitle = '(escala logarítmica)',
x = 'agências',
y = NULL
) +
ylim(0, 2500) +
theme(axis.text.x = element_text(angle = 45))
publicas
Perceba como os rótulos do eixo \(x\) são as quantidades de agências, não os logaritmos.
Compare com a distribuição de agências privadas.
Veja a distribuição de agências privadas aqui.
privadas + publicas
Vamos ver alguma tabelas.
Totais de agências:
No total, existem mais agências de bancos privados!
Quantidade de cidades atendidas:
Existem mais cidades com pelo menos uma agência de banco público do que cidades com pelo menos uma agência de banco privado.
Ou, comparando a quantidade de cidades sem agências:
cidades %>%
summarize(
sem_privadas = sum(agencias_priv == 0),
sem_públicas = sum(agencias_publ == 0),
sem_qualquer = sum(agencias_publ == 0 & agencias_priv == 0)
)
Lembre-se de que o total de cidades é
nrow(cidades)
## [1] 5578
Ou seja, cerca de \(40\%\) de cidades não têm agências bancárias, nem privadas, nem públicas!
Aliás, existe alguma cidade que tenha agência privada, mas não pública? Quantas?
cidades %>%
filter(
agencias_priv > 0 & agencias_publ == 0
) %>%
select(cidade, estado, starts_with('agencias'))
E existe alguma cidade que tenha agência pública, mas não privada? Quantas?
cidades %>%
filter(
agencias_priv == 0 & agencias_publ > 0
) %>%
select(cidade, estado, starts_with('agencias'))
Comente os resultados.
Comentários incluídos nas respostas acima.
Faça um histograma da razão (número de agências bancárias públicas) / (população). Use o número de classes que você achar mais adequado.
Existem muitas cidades com zero agências públicas:
Vamos ignorá-las.
publicaspc <- cidades %>%
filter(agencias_publ > 0) %>%
mutate(
publicas_per_capita = agencias_publ / pop_resid
) %>%
ggplot() +
geom_histogram(
aes(x = publicas_per_capita),
breaks = seq(0, .0009, .00005)
) +
labs(
title = 'Agências públicas per capita',
x = 'agências',
y = NULL
) +
theme(axis.text.x = element_text(angle = 45))
publicaspc
## Warning: Removed 1 rows containing non-finite values (stat_bin).
Compare com a distribuição de agências privadas.
privadaspc + publicaspc
## Warning: Removed 1 rows containing non-finite values (stat_bin).
Para quase todos os valores de agências per capita, existem mais cidades com agências públicas do que cidades com agências privadas.
Isto é consequência de que, no total, existem mais cidades atendidas por bancos públicos do que por bancos privados.
Mas eu devia ter pedido um scatterplot de agências por população para um insight interessante.
Aqui, descartamos as cidades com mais de \(3\) milhões de habitantes.
cidades %>%
filter(
agencias_priv > 0,
agencias_publ > 0,
pop_resid < 3e6
) %>%
ggplot() +
geom_point(
aes(
x = pop_resid,
y = agencias_publ,
color = 'publ'
),
alpha = .4
) +
geom_smooth(
aes(
x = pop_resid,
y = agencias_publ,
color = 'publ'
),
method = 'lm',
se = FALSE
) +
geom_point(
aes(
x = pop_resid,
y = agencias_priv,
color = 'priv'
),
alpha = .2
) +
geom_smooth(
aes(
x = pop_resid,
y = agencias_priv,
color = 'priv'
),
method = 'lm',
se = FALSE
) +
scale_color_discrete(
type = c('blue', 'red')
) +
scale_x_continuous(
breaks = seq(0, 3e6, .5e6),
labels = scales::label_number(
scale = 1e-6,
suffix = 'M'
)
) +
labs(
title = 'Agências bancárias por população',
x = 'população',
y = 'agências',
color = NULL
)
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
As retas mostram como o número de agências aumenta à medida que a população aumenta.
Para os bancos privados, o aumento é mais rápido.
Em outras palavras: para uma mesma população, existem, em média, mais agências privadas do que públicas, e, quanto maior a população, maior a diferença.
Comente os resultados.
Comentários incluídos nas respostas acima.
Faça um histograma da quantidade de agências bancárias privadas. Use o número de classes que você achar mais adequado.
Existem muitas cidades com zero agências privadas:
Vamos ignorá-las:
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Ainda assim, a grande quantidade de cidades com só uma agência faz o histograma ficar não-interessante.
Vamos fazer um histograma do logaritmo do número de agências.
privadas <- cidades %>%
filter(agencias_priv > 0) %>%
mutate(log_priv = log(agencias_priv, 2)) %>%
ggplot() +
geom_histogram(
aes(x = log_priv),
breaks = 0:10
) +
scale_x_continuous(
labels = function(x) 2^x,
breaks = 0:10
) +
labs(
title = 'Quantidade de agências privadas',
subtitle = '(escala logarítmica)',
x = 'agências',
y = NULL
) +
ylim(0, 2500) +
theme(axis.text.x = element_text(angle = 45))
privadas
Perceba como os rótulos do eixo \(x\) são as quantidades de agências, não os logaritmos.
Compare com a distribuição de agências públicas.
Veja a distribuição de agências públicas aqui.
privadas + publicas
Vamos ver alguma tabelas.
Totais de agências:
No total, existem mais agências de bancos privados!
Quantidade de cidades atendidas:
Existem mais cidades com pelo menos uma agência de banco público do que cidades com pelo menos uma agência de banco privado.
Ou, comparando a quantidade de cidades sem agências:
cidades %>%
summarize(
sem_privadas = sum(agencias_priv == 0),
sem_públicas = sum(agencias_publ == 0),
sem_qualquer = sum(agencias_publ == 0 & agencias_priv == 0)
)
Lembre-se de que o total de cidades é
nrow(cidades)
## [1] 5578
Ou seja, cerca de \(40\%\) de cidades não têm agências bancárias, nem privadas, nem públicas!
Aliás, existe alguma cidade que tenha agência privada, mas não pública? Quantas?
cidades %>%
filter(
agencias_priv > 0 & agencias_publ == 0
) %>%
select(cidade, estado, starts_with('agencias'))
E existe alguma cidade que tenha agência pública, mas não privada? Quantas?
cidades %>%
filter(
agencias_priv == 0 & agencias_publ > 0
) %>%
select(cidade, estado, starts_with('agencias'))
Comente os resultados.
Faça um histograma da razão (número de agências bancárias privadas) / (população). Use o número de classes que você achar mais adequado.
Existem muitas cidades com zero agências privadas:
Vamos ignorá-las.
privadaspc <- cidades %>%
filter(agencias_priv > 0) %>%
mutate(
privadas_per_capita = agencias_priv / pop_resid
) %>%
ggplot() +
geom_histogram(
aes(x = privadas_per_capita),
breaks = seq(0, .0009, .00005)
) +
labs(
title = 'Agências privadas per capita',
x = 'agências',
y = NULL
) +
theme(axis.text.x = element_text(angle = 45)) +
scale_y_continuous(
breaks = seq(0, 1250, 250),
limits = c(0, 1250)
)
privadaspc
Compare com a distribuição de agências públicas.
privadaspc + publicaspc
## Warning: Removed 1 rows containing non-finite values (stat_bin).
Para quase todos os valores de agências per capita, existem mais cidades com agências públicas do que cidades com agências privadas.
Isto é consequência de que, no total, existem mais cidades atendidas por bancos públicos do que por bancos privados.
Mas eu devia ter pedido um scatterplot de agências por população para um insight interessante.
Aqui, descartamos as cidades com mais de \(3\) milhões de habitantes.
cidades %>%
filter(
agencias_priv > 0,
agencias_publ > 0,
pop_resid < 3e6
) %>%
ggplot() +
geom_point(
aes(
x = pop_resid,
y = agencias_publ,
color = 'publ'
),
alpha = .4
) +
geom_smooth(
aes(
x = pop_resid,
y = agencias_publ,
color = 'publ'
),
method = 'lm',
se = FALSE
) +
geom_point(
aes(
x = pop_resid,
y = agencias_priv,
color = 'priv'
),
alpha = .2
) +
geom_smooth(
aes(
x = pop_resid,
y = agencias_priv,
color = 'priv'
),
method = 'lm',
se = FALSE
) +
scale_color_discrete(
type = c('blue', 'red')
) +
scale_x_continuous(
breaks = seq(0, 3e6, .5e6),
labels = scales::label_number(
scale = 1e-6,
suffix = 'M'
)
) +
labs(
title = 'Agências bancárias por população',
x = 'população',
y = 'agências',
color = NULL
)
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
As retas mostram como o número de agências aumenta à medida que a população aumenta.
Para os bancos privados, o aumento é mais rápido.
Em outras palavras: para uma mesma população, existem, em média, mais agências privadas do que públicas, e, quanto maior a população, maior a diferença.
Comente os resultados.
Comentários incluídos nas respostas acima.
Faça um histograma das áreas das cidades. Use o número de classes que você achar mais adequado.
Primeira tentativa:
cidades %>%
ggplot() +
geom_histogram(
aes(area),
bins = 100
) +
labs(
y = NULL,
x = 'Área (km²)'
)
Existem muitas cidades com área pequena, e poucos com área grande. Uma boa chance de usar uma escala logarítmica:
cidades %>%
ggplot() +
geom_histogram(
aes(area),
bins = 50
) +
scale_x_log10() +
labs(
title = 'Áreas (escala logarítmica)',
y = NULL,
x = 'Área (km²)'
)
## Warning: Transformation introduced infinite values in continuous x-axis
## Warning: Removed 3 rows containing non-finite values (stat_bin).
Podemos examinar apenas as cidades com área entre \(0\) e \(1000\) km² (com escala linear):
Comente os resultados.
Alguns comentários incluídos nas respostas acima.
A classe modal é entre \(100\) e \(200\) km².
Faça histogramas das áreas das cidades, facetados por região geográfica. Use o número de classes que você achar mais adequado. Você vai precisar da resposta desta questão.
Comente os resultados.
Faça um histograma das populações das cidades. Use o número de classes que você achar mais adequado.
Primeira tentativa:
cidades %>%
ggplot() +
geom_histogram(
aes(x = pop_resid)
)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Usando escala logarítmica:
cidades %>%
ggplot() +
geom_histogram(
aes(x = pop_resid)
) +
scale_x_log10(
labels = scales::number_format(
scale = 1e-3,
suffix = 'k'
)
) +
labs(
title = 'Populações',
y = NULL,
x = 'população'
)
## Warning: Transformation introduced infinite values in continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 10 rows containing non-finite values (stat_bin).
Vamos limitar a cidades de no máximo \(100\) mil habitantes, com escala linear:
cidades %>%
filter(pop_resid < 1e5) %>%
ggplot() +
geom_histogram(
aes(x = pop_resid),
breaks = seq(0, 1e5, 10000)
) +
scale_x_continuous(
breaks = seq(0, 1e5, 10000),
labels = scales::number_format(
scale = 1e-3,
suffix = 'k'
)
) +
labs(
title = 'Populações (até 100 mil)',
y = NULL,
x = 'população'
)
Comente os resultados.
Há muito mais cidades com poucos habitantes.
A classe modal é a de cidades com até \(10\) mil habitantes.
A população mediana é
## [1] 10926,5
o que diz que aproximadamente metade das cidades tem menos de \(11\) mil habitantes.
Qual a população total destas cidades pequenas?
cidades %>%
mutate(
tamanho = case_when(
pop_resid < 11000 ~ 'Pequenas',
TRUE ~ 'Grandes'
)
) %>%
group_by(tamanho) %>%
summarize(populacao = sum(pop_resid))
Embora metade das cidades tenha \(11\) mil habitantes ou menos, sua população total é \(10\) vezes menor que a população total da outra metade.
Faça histogramas das populações das cidades, facetados por região geográfica. Use o número de classes que você achar mais adequado. Você vai precisar da resposta desta questão.
Comente os resultados.
Faça um histograma do valor do PIB. Use o número de classes que você achar mais adequado.
Comente os resultados.
Faça um histograma do valor do PIB per capita. Use o número de classes que você achar mais adequado.
cidades %>%
ggplot() +
geom_histogram(
aes(x = pib_capita)
) +
labs(
y = NULL,
x = 'PIB per capita (R$)'
) +
scale_x_continuous(
labels = scales::number_format(
scale = 1e-3,
suffix = 'k'
)
)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Em escala logarítmica:
cidades %>%
ggplot() +
geom_histogram(
aes(x = pib_capita)
) +
labs(
title = 'PIB per capita (escala logarítmica)',
y = NULL,
x = 'PIB per capita (R$)'
) +
scale_x_log10(
labels = scales::number_format(
scale = 1e-3,
suffix = 'k'
)
)
## Warning: Transformation introduced infinite values in continuous x-axis
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 5 rows containing non-finite values (stat_bin).
Restringindo a um valor máximo:
cidades %>%
filter(pib_capita < 1e5) %>%
ggplot() +
geom_histogram(
aes(x = pib_capita),
breaks = seq(0, 1e5, 1e4)
) +
labs(
title = 'PIB per capita (até 100 mil)',
y = NULL,
x = 'PIB per capita (R$)'
) +
scale_x_continuous(
breaks = seq(0, 1e5, 1e4),
labels = scales::number_format(
scale = 1e-3,
suffix = 'k'
)
)
Comente os resultados.
É uma distribuição assimétrica, com uma longa cauda à direita.
A classe modal é entre \(10\) e \(20\) mil reais.
Faça histogramas das quantidades de telefones fixos per capita, facetados por região geográfica. Use o número de classes que você achar mais adequado. Você vai precisar da resposta desta questão.
Comente os resultados.
Faça histogramas das quantidades de assinaturas de TV por assinatura per capita, facetados por região geográfica. Use o número de classes que você achar mais adequado. Você vai precisar da resposta desta questão.
Comente os resultados.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) do PIB, com um boxplot para cada atividade principal. Faça com que os boxplots sejam horizontais, para facilitar a leitura dos nomes das atividades.
Comente os resultados.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) do PIB per capita, com um boxplot para cada atividade principal. Faça com que os boxplots sejam horizontais, para facilitar a leitura dos nomes das atividades.
Primeira tentativa:
cidades %>%
ggplot() +
geom_boxplot(
aes(x = atividade_principal, y = pib_capita)
) +
coord_flip()
Vamos abreviar os nomes das atividades:
cidades %>%
mutate(
atividade_principal = word(atividade_principal, end = 5)
) %>%
ggplot() +
geom_boxplot(
aes(x = atividade_principal, y = pib_capita)
) +
labs(
title = 'PIB per capita por atividade principal',
y = 'PIB per capita',
x = NULL
) +
coord_flip()
Podemos usar uma escala logarítmica:
cidades %>%
mutate(
atividade_principal = word(atividade_principal, end = 5)
) %>%
ggplot() +
geom_boxplot(
aes(x = atividade_principal, y = pib_capita)
) +
scale_y_log10() +
labs(
title = 'PIB per capita por atividade principal',
subtitle = '(escala logarítmica)',
y = 'PIB per capita',
x = NULL
) +
coord_flip()
## Warning: Transformation introduced infinite values in continuous y-axis
## Warning: Removed 5 rows containing non-finite values (stat_boxplot).
Comente os resultados.
As atividades associadas ao maior PIB per capita mediano são (1) eletricidade, gás, água e esgoto e (2) comércio e reparação de veículos.
As atividades associadas ao menor PIB per capita mediano são administração, defesa, educação e saúde.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) da quantidade de hotéis, com um boxplot para cada categoria de turismo.
Comente os resultados.
Como era de se esperar, a quantidade de hotéis é muito maior em cidades da categoria A.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) das populações, com um boxplot para cada região geográfica. Você vai precisar da resposta desta questão.
Comente os resultados.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) das densidades demográficas, com um boxplot para cada região geográfica. Você vai precisar da resposta desta questão.
Comente os resultados.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) da quantidade de carros per capita, com um boxplot para cada tipo de cidade.
Comente os resultados.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) da quantidade de motos per capita, com um boxplot para cada tipo de cidade.
cidades %>%
filter(pop_resid > 0) %>%
mutate(mpc = motos / pop_resid) %>%
ggplot() +
geom_boxplot(aes(x = tipo, y = mpc)) +
scale_x_discrete(
labels = function(x) {
str_split(x, ' ') %>%
map_chr(paste, collapse = '\n')
}
) +
labs(
title = 'Motos per capita por tipo de cidade',
x = 'tipo de cidade',
y = 'motos\nper capita'
)
Comente os resultados.
Medianas semelhantes.
Sem outliers em cidades do tipo intermediário remoto — que, ironicamente, têm a maior variabilidade (em termos do IQR).
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) da quantidade de tratores per capita, com um boxplot para cada tipo de cidade.
Comente os resultados.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) da quantidade de hotéis, com um boxplot para cada valor de uber
.
Comente os resultados.
Faça boxplots lado a lado (no mesmo gráfico, sem facetar) do valor do PIB per capita, com um boxplot para cada valor de uber
.
Comente os resultados.
Faça um gráfico de barras das quantidades de cidades, com uma barra por região. Você vai precisar da resposta desta questão.
Use a função fct_reorder
para dispor as barras em ordem decrescente de altura.
Em outro gráfico, use a função fct_reorder
para dispor as barras em ordem crescente de altura.
Comente os resultados.
Quais são as áreas totais das regiões?
A região Norte tem a maior área, mas o menor número de cidades.
A região Centro-Oeste tem a segunda maior área, mas o segundo menor número de cidades.
As outras regiões seguem a mesma ordem, tanto em área quanto em número de cidades.
Faça um gráfico de barras das populações totais, com uma barra por região. Você vai precisar da resposta desta questão.
cidades %>%
ggplot() +
geom_col(
aes(x = regiao, y = pop_resid)
) +
scale_y_continuous(
labels = scales::number_format(
scale = 1e-6,
suffix = 'M'
)
) +
labs(
title = 'População total por região geográfica',
x = 'região',
y = 'população'
)
Use a função fct_reorder
para dispor as barras em ordem decrescente de altura.
cidades %>%
ggplot() +
geom_col(
aes(
x = fct_reorder(
regiao,
pop_resid,
sum,
.desc = TRUE
),
y = pop_resid
)
) +
scale_y_continuous(
labels = scales::number_format(
scale = 1e-6,
suffix = 'M'
)
) +
labs(
title = 'População total por região geográfica',
x = 'região',
y = 'população'
)
Em outro gráfico, use a função fct_reorder
para dispor as barras em ordem crescente de altura.
cidades %>%
ggplot() +
geom_col(
aes(
x = fct_reorder(
regiao,
pop_resid,
sum
),
y = pop_resid
)
) +
scale_y_continuous(
labels = scales::number_format(
scale = 1e-6,
suffix = 'M'
)
) +
labs(
title = 'População total por região geográfica',
x = 'região',
y = 'população'
)
Comente os resultados.
A região Sudeste é, de longe, a mais populosa, seguida da região Nordeste.
A região Centro-Oeste é (um pouco) menos populosa do que a região Norte, ao contrário do que eu esperava.
É interessante comparar com o gráfico dos PIBs totais por região e constatar que, com exceção do primeiro lugar, toda a ordenação muda.
Faça um gráfico de barras dos PIBs totais, com uma barra por região. Você vai precisar da resposta desta questão.
cidades %>%
ggplot() +
geom_col(
aes(x = regiao, y = pib)
) +
scale_y_continuous(
labels = scales::number_format(
scale = 1e-9,
suffix = 'B'
)
) +
labs(
title = 'PIB por região geográfica',
x = 'região',
y = 'PIB'
)
Use a função fct_reorder
para dispor as barras em ordem decrescente de altura.
cidades %>%
ggplot() +
geom_col(
aes(
x = fct_reorder(
regiao,
pib,
sum,
.desc = TRUE
),
y = pib
)
) +
scale_y_continuous(
labels = scales::number_format(
scale = 1e-9,
suffix = 'B'
)
) +
labs(
title = 'PIB por região geográfica',
x = 'região',
y = 'PIB'
)
Em outro gráfico, use a função fct_reorder
para dispor as barras em ordem crescente de altura.
cidades %>%
ggplot() +
geom_col(
aes(
x = fct_reorder(
regiao,
pib,
sum
),
y = pib
)
) +
scale_y_continuous(
labels = scales::number_format(
scale = 1e-9,
suffix = 'B'
)
) +
labs(
title = 'PIB por região geográfica',
x = 'região',
y = 'PIB'
)
Comente os resultados.
A ordenação é óbvia.
É interessante comparar com o gráfico das populações totais por região e constatar que, com exceção do primeiro lugar, toda a ordenação muda.
Faça um gráfico de barras das produções rurais totais, com uma barra por região. Você vai precisar da resposta desta questão.
Use a função fct_reorder
para dispor as barras em ordem decrescente de altura.
Em outro gráfico, use a função fct_reorder
para dispor as barras em ordem crescente de altura.
Comente os resultados.
Faça um gráfico de barras da população brasileira, com uma barra por faixa etária.
Use a função fct_reorder
para dispor as barras em ordem decrescente de altura.
Em outro gráfico, use a função fct_reorder
para dispor as barras em ordem crescente de altura.
Em qual ordem você acha que as barras devem aparecer? Por quê?
Comente os resultados.
Faça um gráfico de barras da população brasileira, com um conjunto de barras para cada região. Você vai precisar da resposta desta questão.
Veja abaixo.
Cada conjunto deve ter \(6\) barras lado a lado, uma para cada faixa etária. Use o argumento dodge
na geometria adequada.
df_faixas <- cidades %>%
pivot_longer(
cols = starts_with('pop_regular_'),
names_to = 'faixa',
names_prefix = 'pop_regular_',
values_to = 'pop'
) %>%
mutate(
faixa = case_when(
faixa == '1' ~ 'até 1',
faixa == '1_4' ~ '1 a 4',
faixa == '5_9' ~ '5 a 9',
faixa == '10_14' ~ '10 a 14',
faixa == '15_59' ~ '15 a 59',
faixa == '60_mais' ~ '60 ou mais'
)
) %>%
mutate(
faixa = factor(
faixa,
levels = unique(faixa),
ordered = TRUE
)
) %>%
select(cidade, regiao, faixa, pop)
df_faixas
df_faixas %>%
ggplot() +
geom_col(
aes(x = regiao, y = pop, fill = faixa),
position = 'dodge'
) +
labs(
title = 'População por região, por faixa etária',
x = 'região',
y = NULL,
fill = NULL
) +
scale_y_continuous(
labels = scales::label_number(
scale = 1e-6,
suffix = 'M'
)
)
Comente os resultados.
Perceba que as faixas etárias têm larguras diferentes.
As únicas comparações razoáveis são entre \(1\) a \(4\), \(5\) a \(9\), e \(10\) a \(14\), que têm larguras aproximadamente iguais.
Em todas as regiões, há mais pessoas da faixa \(10\) a \(14\) do que das faixas mais jovens.
As regiões Centro-Oeste e Norte são as únicas onde há menos idosos do que jovens de \(10\) a \(14\).
Faça um gráfico de barras da população brasileira, com uma barra por região. Você vai precisar da resposta desta questão.
Veja abaixo.
Todas as barras devem ser da mesma altura, e o eixo \(y\) deve ir de \(0\) até \(1\), representando proporções.
Veja abaixo.
Cada barra deve ser subdividida em faixas horizontais de cores diferentes, uma faixa colorida para cada faixa etária, de acordo com as proporções de cada faixa etária em cada região.
df_faixas <- cidades %>%
pivot_longer(
cols = starts_with('pop_regular_'),
names_to = 'faixa',
names_prefix = 'pop_regular_',
values_to = 'pop'
) %>%
mutate(
faixa = case_when(
faixa == '1' ~ 'até 1',
faixa == '1_4' ~ '1 a 4',
faixa == '5_9' ~ '5 a 9',
faixa == '10_14' ~ '10 a 14',
faixa == '15_59' ~ '15 a 59',
faixa == '60_mais' ~ '60 ou mais'
)
) %>%
mutate(
faixa = factor(
faixa,
levels = unique(faixa),
ordered = TRUE
)
) %>%
select(cidade, regiao, faixa, pop)
df_faixas
Comente os resultados.
As proporções são semelhantes entre as regiões.
A região Norte tem a menor proporção de idosos, e a maior proporção de pessoas até \(14\) anos.
As regiões Sul e Sudeste têm a maior proporção de idosos.
Faça um gráfico de barras da população brasileira, com um conjunto de barras para cada tipo de cidade.
Veja abaixo.
Cada conjunto deve ter \(6\) barras lado a lado, uma para cada faixa etária. Use o argumento dodge
na geometria adequada.
df_faixas <- cidades %>%
pivot_longer(
cols = starts_with('pop_regular_'),
names_to = 'faixa',
names_prefix = 'pop_regular_',
values_to = 'pop'
) %>%
mutate(
faixa = case_when(
faixa == '1' ~ 'até 1',
faixa == '1_4' ~ '1 a 4',
faixa == '5_9' ~ '5 a 9',
faixa == '10_14' ~ '10 a 14',
faixa == '15_59' ~ '15 a 59',
faixa == '60_mais' ~ '60 ou mais'
)
) %>%
mutate(
faixa = factor(
faixa,
levels = unique(faixa),
ordered = TRUE
)
) %>%
select(cidade, tipo, faixa, pop)
df_faixas
df_faixas %>%
ggplot() +
geom_col(
aes(x = tipo, y = pop, fill = faixa),
position = 'dodge'
) +
labs(
title = 'População por tipo de cidade, por faixa etária',
x = 'tipo de cidade',
y = NULL,
fill = NULL
)
A população de cidades do tipo urbano é tão grande que os outros tipos ficam quase invisíveis.
Veja a próxima questão, que resolve este problema mostrando as proporções das diversas faixas etárias.
Vamos excluir o tipo urbano do gráfico:
df_faixas %>%
filter(tipo != 'Urbano') %>%
ggplot() +
geom_col(
aes(x = tipo, y = pop, fill = faixa),
position = 'dodge'
) +
labs(
title = 'População por tipo de cidade, por faixa etária',
subtitle = 'exceto centros urbanos',
x = 'tipo de cidade',
y = NULL,
fill = NULL
)
Vamos melhorar os rótulos do eixo \(x\) e ignorar as cidades sem classificação:
df_faixas %>%
filter(tipo != 'Urbano') %>%
filter(tipo != 'Sem classificação') %>%
ggplot() +
geom_col(
aes(x = tipo, y = pop, fill = faixa),
position = 'dodge'
) +
labs(
title = 'População por tipo de cidade, por faixa etária',
subtitle = 'exceto centros urbanos',
x = 'tipo de cidade',
y = NULL,
fill = NULL
) +
scale_x_discrete(
labels = function(x) {
str_split(x, ' ') %>%
map_chr(paste, collapse = '\n')
}
)
Comente os resultados.
Os centros urbanos têm uma população muito maior do que os outros tipos de cidade.
Cidades do tipo urbano e intermediário adjacente parecem ter uma proporção significativamente maior de pessoas entre \(15\) a \(59\) anos.
Faça um gráfico de barras da população brasileira, com uma barra por tipo de cidade.
Veja abaixo.
Todas as barras devem ser da mesma altura, e o eixo \(y\) deve ir de \(0\) até \(1\), representando proporções.
Veja abaixo.
Cada barra deve ser subdividida em faixas horizontais de cores diferentes, uma faixa colorida para cada faixa etária, de acordo com as proporções de cada faixa etária em cada tipo de cidade.
df_faixas <- cidades %>%
pivot_longer(
cols = starts_with('pop_regular_'),
names_to = 'faixa',
names_prefix = 'pop_regular_',
values_to = 'pop'
) %>%
mutate(
faixa = case_when(
faixa == '1' ~ 'até 1',
faixa == '1_4' ~ '1 a 4',
faixa == '5_9' ~ '5 a 9',
faixa == '10_14' ~ '10 a 14',
faixa == '15_59' ~ '15 a 59',
faixa == '60_mais' ~ '60 ou mais'
)
) %>%
mutate(
faixa = factor(
faixa,
levels = unique(faixa),
ordered = TRUE
)
) %>%
select(cidade, tipo, faixa, pop)
df_faixas
df_faixas %>%
ggplot() +
geom_col(
aes(x = tipo, y = pop, fill = fct_rev(faixa)),
position = 'fill'
) +
labs(
title = 'População por tipo de cidade, por faixa etária',
subtitle = '(proporções)',
x = 'tipo de cidade',
y = NULL,
fill = NULL
)
## Warning: Removed 60 rows containing missing values (geom_col).
Vamos melhorar os rótulos do eixo \(x\) e ignorar as cidades sem classificação:
df_faixas %>%
filter(tipo != 'Sem classificação') %>%
ggplot() +
geom_col(
aes(x = tipo, y = pop, fill = fct_rev(faixa)),
position = 'fill'
) +
labs(
title = 'População por tipo de cidade, por faixa etária',
subtitle = '(proporções)',
x = 'tipo de cidade',
y = NULL,
fill = NULL
) +
scale_x_discrete(
labels = function(x) {
str_split(x, ' ') %>%
map_chr(paste, collapse = '\n')
}
)
Comente os resultados.
Proporcionalmente. há mais idosos em cidades de tipos urbano, intermediário adjacente e rural adjacente.
Proporcionalmente. há mais jovens em cidades de tipos intermediário remoto e rural remoto.
Leia algum tutorial sobre o pacote leaflet
:
Em inglês: https://rstudio.github.io/leaflet/ (basta ler os \(5\) primeiros itens do menu).
Em português: http://sillasgonzaga.com/material/cdr/htmlwidgets.html#leaflet (até “Marcadores”).
Escolha qualquer uma das questões do tipo “Quais as \(10\) cidades…”, na seção de análise exploratória.
Resolva a questão e modifique o código abaixo para criar marcadores mostrando as cidades da resposta, rotulados com os nomes das cidades (use o argumento label
).
Quando o usuário clicar o mouse sobre a cidade, deve aparecer a informação relevante pedida pela questão (use o argumento popup
).
Acrescente outras informações que você achar importantes — por exemplo, a classificação da cidade na ordenação que a questão pede.
library(leaflet)
# Um exemplo, apenas. Substitua com a tibble da sua resposta:
df <- cidades %>%
filter(
cidade %in% c('Manaus', 'Brasília', 'Porto Alegre')
)
# O mapa:
leaflet(df) %>%
setView(
lng = mean(df$longitude),
lat = mean(df$latitude),
zoom = 4
) %>%
addTiles() %>%
addMarkers()
## Assuming "longitude" and "latitude" are longitude and latitude, respectively
Faça um segundo mapa interativo com marcadores para as cidades que satisfazem algum critério que você ache interessante. Use a imaginação.