Introdução e coleta de dados

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.

Coleta dos dados

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

Carregando e explorando os dados

# 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"))

Tratamento de variáveis com o Dicionário da RAIS

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

Manipulação de Dados com dplyr

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.

visualização de dados com ggplot2

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