Nesta tutorial, iremos realizar uma análise detalhada dos dados do mercado de trabalho da RAIS (Relação Anual de Informações Sociais) usando os pacotes do Tidyverse e GT. os dados serão coletados em tempo real através de uma consulta SQL, e, em seguida, tratados e visualizados.
Vamos coletar os dados de Fortaleza (ID 2304400) no ano de 2023, selecionando as variáveis de remuneração média, raça/cor, sexo e grau de instrução. o código SQL usado será o seguinte:
SELECT valor_remuneracao_media, raca_cor, sexo, grau_instrucao_apos_2005
FROM `basedos dados.br_me_rais.microdados_vinculos`
WHERE ano = 2022 AND id_municipio = "2304400"
Para acessar a base de dados e rodar a consulta SQL, você pode usar os seguintes links: Base dos Dados IBGE-Códigos dos Municípios
# Pacotes
pacman::p_load(gt,tidyverse,stringr)
SELECT *
FROM `basedosdados.br_me_rais.dicionario`
WHERE nome_coluna IN ('sexo', 'raca_cor', 'grau_instrucao_apos_2005')
# Carregando dicionario
dicionario = read_csv("dicionarios3.csv")
## Rows: 25 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (4): id_tabela, nome_coluna, cobertura_temporal, valor
## dbl (1): chave
##
## ℹ 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.
# Carregando dados
dados_rais = read_csv("dados-brutos.csv")
## Rows: 1174006 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): raca_cor, sexo, grau_instrucao_apos_2005
## dbl (1): valor_remuneracao_media
##
## ℹ 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.
#Explorando dados
head(dados_rais)
## # A tibble: 6 × 4
## valor_remuneracao_media raca_cor sexo grau_instrucao_apos_2005
## <dbl> <chr> <chr> <chr>
## 1 1406. 08 01 01
## 2 1377. 09 01 01
## 3 1480. 04 01 01
## 4 1425. 08 01 01
## 5 1393. 08 02 01
## 6 1332. 02 01 01
glimpse(dados_rais)
## Rows: 1,174,006
## Columns: 4
## $ valor_remuneracao_media <dbl> 1406.29, 1376.53, 1480.21, 1425.26, 1392.60, …
## $ raca_cor <chr> "08", "09", "04", "08", "08", "02", "08", "02…
## $ sexo <chr> "01", "01", "01", "01", "02", "01", "01", "02…
## $ grau_instrucao_apos_2005 <chr> "01", "01", "01", "01", "01", "01", "01", "11…
summary(dados_rais)
## valor_remuneracao_media raca_cor sexo
## Min. : 0 Length:1174006 Length:1174006
## 1st Qu.: 1316 Class :character Class :character
## Median : 1604 Mode :character Mode :character
## Mean : 2650
## 3rd Qu.: 2474
## Max. :197211
## grau_instrucao_apos_2005
## Length:1174006
## Class :character
## Mode :character
##
##
##
#Eliminando os zeros à esquerda das colunas
dados_rais <- dados_rais %>%
mutate(sexo = str_remove(sexo, "^0"),
raca_cor = str_remove(raca_cor, "^0"),
grau_instrucao_apos_2005 = str_remove(grau_instrucao_apos_2005, "^0"))
Para interpretar corretamente as variáveis categóricas (como sexo e raça/cor), vamos usar um dicionário de variáveis que fornece o mapeamento dos códigos para suas descrições.
#Criar mapas para as variáveis sexo e raça/cor
mapa_sexo <- dicionario %>%
filter(nome_coluna == "sexo") %>%
select(chave, valor) %>%
deframe()
mapa_raca_cor = dicionario %>%
filter(nome_coluna == "raca_cor") %>%
select(chave, valor) %>%
deframe()
mapa_grau_instrucao_apos_2005 = dicionario %>%
filter(nome_coluna == "grau_instrucao_apos_2005") %>%
select(chave, valor) %>%
deframe()
# Aplicando o mapeamento aos dados
dados_rais = dados_rais %>%
mutate(sexo = recode(sexo, !!!mapa_sexo),
raca_cor = recode(raca_cor, !!!mapa_raca_cor),
grau_instrucao_apos_2005 = recode(grau_instrucao_apos_2005, !!!mapa_grau_instrucao_apos_2005))
#Verificando as transformações
head(dados_rais)
## # A tibble: 6 × 4
## valor_remuneracao_media raca_cor sexo grau_instrucao_apos_2005
## <dbl> <chr> <chr> <chr>
## 1 1406. Parda Masculino ANALFABETO
## 2 1377. Não identificado Masculino ANALFABETO
## 3 1480. Preta Masculino ANALFABETO
## 4 1425. Parda Masculino ANALFABETO
## 5 1393. Parda Feminino ANALFABETO
## 6 1332. Branca Masculino ANALFABETO
Agora que tratamos as variáveis, podemos realizar algumas operações de manipulação de dados, como filtrar, agrupar e sumarizar as informações.
# Filtrar valores válidos de remuneração
dados_filtrados = dados_rais %>%
filter(!is.na(valor_remuneracao_media))
# Agrupar por sexo e calcular a remuneração média
media_por_sexo = dados_filtrados %>%
group_by(sexo) %>%
summarize(media_remuneracao = mean(valor_remuneracao_media, na.rm = TRUE))
# Agrupar por raca/cor e calcular a remuneração média
media_por_raca = dados_filtrados %>%
group_by(raca_cor) %>%
summarize (media_remuneracao = mean(valor_remuneracao_media, na.rm = TRUE))
# Agrupamento combinado por sexo e raca/cor
analise_combinada = dados_filtrados %>%
group_by(sexo, raca_cor) %>%
summarize(media_remuneracao = mean(valor_remuneracao_media, na.rm = TRUE))
## `summarise()` has grouped output by 'sexo'. You can override using the
## `.groups` argument.
#visualizar as tabelas resultantes
media_por_sexo
## # A tibble: 2 × 2
## sexo media_remuneracao
## <chr> <dbl>
## 1 Feminino 2654.
## 2 Masculino 2646.
media_por_raca
## # A tibble: 6 × 2
## raca_cor media_remuneracao
## <chr> <dbl>
## 1 Amarela 3529.
## 2 Branca 4132.
## 3 Indígena 2424.
## 4 Não identificado 2416.
## 5 Parda 2345.
## 6 Preta 2374.
analise_combinada
## # A tibble: 12 × 3
## # Groups: sexo [2]
## sexo raca_cor media_remuneracao
## <chr> <chr> <dbl>
## 1 Feminino Amarela 3457.
## 2 Feminino Branca 3878.
## 3 Feminino Indígena 2628.
## 4 Feminino Não identificado 2666.
## 5 Feminino Parda 2334.
## 6 Feminino Preta 2211.
## 7 Masculino Amarela 3595.
## 8 Masculino Branca 4362.
## 9 Masculino Indígena 2275.
## 10 Masculino Não identificado 2211.
## 11 Masculino Parda 2354.
## 12 Masculino Preta 2474.
Vamos agora criar alguns gráficos para visualizar a remuneração média por sexo, raça/cor, e a combinação de ambos.
# Gráfico de barras de remuneração por sexo
ggplot(media_por_sexo,aes(x = sexo, y=media_remuneracao)) +
geom_bar(stat = "identity", fill = "steelblue") +
labs (title = "Remuneração Média por sexo", x = "sexo", y = "Remuneração Média") +
theme_minimal()
# Gráfico de barras de remuneração por raça/cor
ggplot(media_por_raca, aes (x = raca_cor, y = media_remuneracao)) +
geom_bar(stat = "identity", fill = "darkgreen") +
labs (title = "Remuneração Média por Raça/Cor", x = "Raça/Cor", y = "Remuneração Média") +
theme_minimal()
# Gráfico de barras empilhadas de remuneração por sexo e raça/cor
ggplot(analise_combinada, aes(x = sexo, y = media_remuneracao, fill = raca_cor)) +
geom_bar (stat = "identity", position = "dodge") +
labs (title = "Remuneração média por sexo e Raça/Cor", x = "sexo", y = "Remuneração Média") +
theme_minimal() +
scale_fill_brewer (palette = "Set1")
### Tabelas descritivas com GT Para apresentar os dados de forma clara e
formatada, utilizaremos o pacote GT para gerar tabelas
descritivas detalhadas e visualmente agradáveis.
#Tabela descritiva de remuneração por sexg
tabela_sexo = media_por_sexo %>%
gt() %>%
tab_header(
title = "Remuneração Média por Sexo",
subtitle = "Dados da RAIS 2023 - Fortaleza"
) %>%
fmt_currency(columns = vars(media_remuneracao),
currency = "BRL"
)
## Warning: Since gt v0.3.0, `columns = vars(...)` has been deprecated.
## • Please use `columns = c(...)` instead.
#Exibir a tabela
tabela_sexo
| Remuneração Média por Sexo | |
| Dados da RAIS 2023 - Fortaleza | |
| sexo | media_remuneracao |
|---|---|
| Feminino | R$2,653.74 |
| Masculino | R$2,646.32 |
#Tabela descritiva de remuneração por sexo e raga/cor
tabela_sexo_raca = analise_combinada %>%
gt() %>%
tab_header(
title = "Remuneração Média por Sexo e Raça/cor",
subtitle = "Dados da RAIS 2023-Fortaleza") %>%
fmt_currency(
columns=vars(media_remuneracao),
currency ="BRL") %>%
tab_style(
style = list(
cell_text(weight = "bold")
),
locations = cells_column_labels()
)
## Warning: Since gt v0.3.0, `columns = vars(...)` has been deprecated.
## • Please use `columns = c(...)` instead.
# Exibir a tabela
tabela_sexo_raca
| Remuneração Média por Sexo e Raça/cor | |
| Dados da RAIS 2023-Fortaleza | |
| raca_cor | media_remuneracao |
|---|---|
| Feminino | |
| Amarela | R$3,456.68 |
| Branca | R$3,877.63 |
| Indígena | R$2,627.73 |
| Não identificado | R$2,666.24 |
| Parda | R$2,333.56 |
| Preta | R$2,211.15 |
| Masculino | |
| Amarela | R$3,594.80 |
| Branca | R$4,361.55 |
| Indígena | R$2,275.28 |
| Não identificado | R$2,211.42 |
| Parda | R$2,354.02 |
| Preta | R$2,473.84 |
#Tabela estilizadas com cores
tabela_estilizada = analise_combinada %>%
gt() %>%
tab_header(
title = "Remuneração Média por Sexo e Raça/cor",
subtitle = "Dados da RAIS 2023-Fortaleza") %>%
fmt_currency(
columns=vars(media_remuneracao),
currency ="BRL") %>%
data_color(
columns = vars(media_remuneracao),
colors = scales::col_numeric(
palette = c("lightblue","darkblue"),
domain = c(min(analise_combinada$media_remuneracao),
max(analise_combinada$media_remuneracao))
)
) %>%
tab_options(
table.font.size = "small",
table.border.left.width = px(2),
table.border.top.color = "black",
table.border.bottom.color = "black"
)
## Warning: Since gt v0.3.0, `columns = vars(...)` has been deprecated.
## • Please use `columns = c(...)` instead.
## Warning: Since gt v0.9.0, the `colors` argument has been deprecated.
## • Please use the `fn` argument instead.
## This warning is displayed once every 8 hours.
## Warning: Since gt v0.3.0, `columns = vars(...)` has been deprecated.
## • Please use `columns = c(...)` instead.
# Exibir a tabela estilizada
tabela_estilizada
| Remuneração Média por Sexo e Raça/cor | |
| Dados da RAIS 2023-Fortaleza | |
| raca_cor | media_remuneracao |
|---|---|
| Feminino | |
| Amarela | R$3,456.68 |
| Branca | R$3,877.63 |
| Indígena | R$2,627.73 |
| Não identificado | R$2,666.24 |
| Parda | R$2,333.56 |
| Preta | R$2,211.15 |
| Masculino | |
| Amarela | R$3,594.80 |
| Branca | R$4,361.55 |
| Indígena | R$2,275.28 |
| Não identificado | R$2,211.42 |
| Parda | R$2,354.02 |
| Preta | R$2,473.84 |