df_csv <- read_csv("bquxjob_237b2b9c_19cfc527fa6.csv")
glimpse(df_csv)Ensaio de indicadores e estrutura de temas com recortes regionais
1 Coleta de dados
1.1 Fonte:RAIS para o ano de 2021
A coleta de dados do RAIS foi feita diretamente no bigquery usando esse comando:
SELECT sigla_uf, id_municipio AS cod_mun, cnae_2 AS setor, COUNT(*) AS total_empregos, AVG(valor_remuneracao_media) AS remuneracao_media FROM basedosdados.br_me_rais.microdados_vinculos WHERE ano = 2021 AND vinculo_ativo_3112 = ‘1’ GROUP BY sigla_uf, id_municipio, cnae_2
query <- "SELECT * FROM `basedosdados.br_bd_diretorios_brasil.cnae_2`"
df_cnae <- read_sql(query)1.2 Fonte: basedosdados IBGE usando como referencia o ano 2021
query_pib <- "
SELECT
id_municipio as cod_mun,
ano,
pib
FROM `basedosdados.br_ibge_pib.municipio`
WHERE ano = 2021
"
df_ibge_pib <- read_sql(query_pib)
query_pop <- "
SELECT
id_municipio as cod_mun,
populacao
FROM `basedosdados.br_ibge_populacao.municipio`
WHERE ano = 2021
"
df_ibge_pop <- read_sql(query_pop)2 LIMPEZA DE DADOS E TRANSFORMAÇÃO
df_csv_subset <- df_csv %>%
mutate(cod_mun = as.character(cod_mun)) %>%
select(cod_mun, sigla_uf) %>%
distinct()
df_ibge_completo <- df_ibge_pib %>%
mutate(cod_mun = as.character(cod_mun)) %>%
left_join(
df_ibge_pop %>% mutate(cod_mun = as.character(cod_mun)),
by = "cod_mun"
) %>%
left_join(df_csv_subset, by = "cod_mun")df_csv_clean <- df_csv %>%
mutate(setor = substr(as.character(setor), 1, 3)) %>%
mutate(massa_salarial = total_empregos * remuneracao_media) %>%
group_by(sigla_uf, setor) %>%
summarise(
total_empregos = sum(total_empregos, na.rm = TRUE),
massa_salarial_total = sum(massa_salarial, na.rm = TRUE),
remuneracao_media = massa_salarial_total / total_empregos,
.groups = "drop"
)df_csv_clean_2 <- df_csv_clean %>%
mutate(setor = as.character(setor)) %>%
left_join(
df_cnae %>%
mutate(grupo = as.character(grupo)) %>%
select(grupo, descricao_grupo),
by = c("setor" = "grupo")
)
df_csv_clean_2 <- df_csv_clean_2 %>%
distinct()3 ATIVIDADE ECONÔMICA E ESTRUTURA PRODUTIVA, COM INDICADORES DE DINAMISMO
3.1 CALCULANDO PIB PER CAPITA DE CADA ESTADO COM OS DADOS OBTIDOS
mapa_estados <- read_state(code_state = "all", year = 2020)
df_mapa <- mapa_estados %>%
left_join(df_estado_final, by = c("abbrev_state" = "sigla_uf"))
ggplot(data = df_mapa) +
geom_sf(aes(fill = pib_per_capita_estado), color = "black", size = 0.2) +
scale_fill_distiller(
palette = "green",
direction = 1,
name = "PIB per Capita",
labels = label_dollar(prefix = "R$ ", big.mark = ".", decimal.mark = ","),
na.value = "grey90"
) +
labs(
title = "PIB per Capita por Estado - 2021",
subtitle = "Visualização da distribuição da riqueza por unidade federativa",
caption = "Fonte: IBGE / Elaboração Própria"
) +
theme_minimal() +
theme(
panel.grid = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
plot.title = element_text(face = "bold", size = 14),
legend.position = "right"
)O mapa revela uma clara desigualdade regional na distribuição da riqueza no Brasil em 2021. Os estados do Centro-Oeste, especialmente o Mato Grosso do Sul e o Distrito Federal, se destacam com os maiores PIB per capita do país, possível reflexo da agropecuária de alta produtividade e da concentração de servidores públicos federais. Os estados do Sul e Sudeste apresentam valores intermediários a altos, sustentados por uma estrutura industrial e de serviços mais diversificada e avancada. Em contraste, os estados do Nordeste e parte do Norte concentram os menores PIB per capita do país, evidenciando uma desigualdade regional estrutural que persiste historicamente no Brasil.
3.2 Setores que mais empregam no Brasil
*Os setores foram divididos pelos primeiros 3 digitos do cnae_2
df_top_empregos <- df_csv_clean_2 %>%
group_by(sigla_uf) %>%
slice_max(order_by = total_empregos, n = 5) %>%
select(sigla_uf, setor, total_empregos, descricao_grupo) %>%
ungroup()
df_empregos_nacional <- df_csv_clean_2 %>%
group_by(setor, descricao_grupo) %>%
summarise(total_empregos = sum(total_empregos, na.rm = TRUE), .groups = "drop") %>%
slice_max(order_by = total_empregos, n = 15)
df_empregos_nacional <- df_empregos_nacional %>%
mutate(
total_geral = sum(total_empregos),
participacao = (total_empregos / total_geral) * 100
)
df_empregos_plot <- df_empregos_nacional %>%
arrange(total_empregos)
plot_ly(df_empregos_plot,
x = ~total_empregos,
y = ~reorder(setor, total_empregos),
type = "bar",
orientation = "h",
text = ~paste0("Setor: ", setor,
"<br>Descrição: ", descricao_grupo,
"<br>Total de Empregos: ", format(total_empregos, big.mark = "."),
"<br>Participação: ", round(participacao, 1), "%"),
hoverinfo = "text",
textposition = "none",
marker = list(color = "#2C7BB6")) %>%
layout(
title = list(
text = "Top 15 Setores por Emprego Formal - Brasil 2021",
y = 0.95
),
margin = list(t = 60),
xaxis = list(
title = "Total de Empregos",
tickformat = ",.0f"
),
yaxis = list(
title = "Código CNAE",
type = "category",
categoryorder = "array",
categoryarray = as.character(df_empregos_plot$setor)
),
annotations = list(
list(text = "Número total de vínculos ativos por grupo CNAE",
x = 0.5, y = 1.05,
xref = "paper", yref = "paper",
showarrow = FALSE,
font = list(size = 11, color = "gray40"))
)
)O setor 841 (Administração do estado e da política econômica e social) é responsável por 36,2% de todo emprego formal no Brasil em 2021, ficando quase 28 pontos percentuais à frente do segundo colocado, o comércio varejista não especializado (471) com 8,7%. Esse resultado evidencia o peso do setor público como principal empregador formal do país, o que reflete tanto a ampla estrutura administrativa brasileira quanto a dificuldade do setor privado em gerar empregos formais em escala equivalente. Entre os demais setores, destacam-se atividades de saúde (861), comércio varejista em suas diversas categorias (471, 478, 474, 477, 475) e serviços de apoio (811, 812), mostrando uma estrutura produtiva do pais majoritariamente focada em servicos.
3.3 Scatter PIB per capita × Remuneração média
df_scatter <- df_csv_clean_2 %>%
group_by(sigla_uf) %>%
summarise(
remuneracao_media_uf = sum(massa_salarial_total) / sum(total_empregos),
.groups = "drop"
) %>%
left_join(df_estado_final, by = "sigla_uf")
ggplot(df_scatter, aes(x = pib_per_capita_estado, y = remuneracao_media_uf)) +
geom_point(size = 3, color = "#2C7BB6") +
geom_text(
aes(label = sigla_uf),
vjust = -0.8,
size = 3,
color = "black"
) +
geom_smooth(method = "lm", se = TRUE, color = "#D7191C", linetype = "dashed") +
scale_x_continuous(labels = label_dollar(prefix = "R$ ", big.mark = ".", decimal.mark = ",")) +
scale_y_continuous(labels = label_dollar(prefix = "R$ ", big.mark = ".", decimal.mark = ",")) +
labs(
title = "PIB per Capita × Remuneração Média por Estado - 2021",
subtitle = "Cada ponto representa uma Unidade Federativa",
x = "PIB per Capita",
y = "Remuneração Média",
caption = "Fonte: IBGE e RAIS 2021 / Elaboração Própria"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 13)
)`geom_smooth()` using formula = 'y ~ x'
O grafico revela existir uma possivel correlacao positiva entre o PIB e a remuneracao media dos estados brasileiros em 2021, onde estados mais ricos tendem a pagar salarios mais altos no emprego formal.
Alguns outliers sao notaveis:
DF destoa completamente dos outros estados tendo um PIB per capital alto e uma remuneracao muito acima da tendencia
AP, AC e RR aparecem com uuma remuneracao acima do esperado dado o seu PIB per capita.
Outro ponto a ser percebido pelo grafico é a concentracao dos estados do Nordeste no canto inferior esquerdo, com baixo PIB per capita e baixa remuneracao simultaneamente, evidenciando a desigualdade regional do Brasil
4 MEDIDAS DE ESPECIALIZAÇÃO VERSUS DIVERSIFICAÇÃO
4.1 Quociente Locacional (QL)
df_nacional_setor <- df_csv_clean_2 %>%
group_by(setor) %>%
summarise(emprego_nacional = sum(total_empregos, na.rm = TRUE), .groups = "drop") %>%
mutate(total_nacional = sum(emprego_nacional))
df_ql <- df_csv_clean_2 %>%
group_by(sigla_uf, setor, descricao_grupo) %>%
summarise(emprego_uf_setor = sum(total_empregos, na.rm = TRUE), .groups = "drop") %>%
left_join(
df_csv_clean_2 %>%
group_by(sigla_uf) %>%
summarise(emprego_uf_total = sum(total_empregos, na.rm = TRUE), .groups = "drop"),
by = "sigla_uf"
) %>%
left_join(df_nacional_setor, by = "setor") %>%
mutate(
ql = (emprego_uf_setor / emprego_uf_total) / (emprego_nacional / total_nacional)
)
df_ql_top <- df_ql %>%
group_by(sigla_uf) %>%
slice_max(order_by = ql, n = 3) %>%
filter(ql > 1)
ggplot(df_ql_top, aes(x = reorder(setor, ql), y = ql, fill = sigla_uf)) +
geom_col(show.legend = FALSE) +
geom_hline(yintercept = 1, linetype = "dashed", color = "red") +
facet_wrap(~ sigla_uf, scales = "free_y") +
coord_flip() +
labs(
title = "Quociente Locacional por Estado - Top 3 Setores Especializados",
x = "Código CNAE",
y = "Quociente Locacional",
caption = "Fonte: RAIS 2021 / Elaboração Própria"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 13),
strip.text = element_text(face = "bold"),
axis.text.y = element_text(size = 7)
)df_legenda <- df_ql_top %>%
distinct(setor, descricao_grupo) %>%
arrange(as.numeric(setor))Com o quociente Locacional conseguimos medir a contracao ou especializacao de um setor em cada estado comparando-a com o Brasil, o QL > 1 indica especializacao acima da media nacional.
df_ql_top <- df_ql_top %>%
mutate(setor = as.character(setor))
estados <- unique(df_ql_top$sigla_uf) %>% sort()
botoes <- lapply(estados, function(uf) {
df_filtrado <- df_ql_top %>% filter(sigla_uf == uf) %>% arrange(ql)
list(
method = "update",
label = uf,
args = list(
list(
x = list(df_filtrado$ql),
y = list(df_filtrado$setor),
text = list(paste0("Setor: ", df_filtrado$setor,
"<br>Descrição: ", df_filtrado$descricao_grupo,
"<br>QL: ", round(df_filtrado$ql, 2)))
),
list(
"yaxis.categoryarray" = df_filtrado$setor,
"yaxis.categoryorder" = "array",
"yaxis.type" = "category"
)
)
)
})
df_inicial <- df_ql_top %>% filter(sigla_uf == estados[1]) %>% arrange(ql)
plot_ly(df_inicial,
x = ~ql,
y = ~setor,
type = "bar",
orientation = "h",
text = ~paste0("Setor: ", setor,
"<br>Descrição: ", descricao_grupo,
"<br>QL: ", round(ql, 2)),
hoverinfo = "text",
textposition = "none",
marker = list(color = "#2C7BB6")) %>%
layout(
title = list(
text = "Quociente Locacional por Estado - Top 3 Setores Especializados",
y = 0.95
),
margin = list(t = 100),
xaxis = list(title = "Quociente Locacional"),
yaxis = list(
title = "Código CNAE",
type = "category",
categoryorder = "array",
categoryarray = df_inicial$setor
),
shapes = list(
list(type = "line", x0 = 1, x1 = 1,
y0 = -0.5, y1 = 4.5,
line = list(color = "red", dash = "dash"))
),
updatemenus = list(
list(
type = "dropdown",
active = 0,
buttons = botoes,
x = 0.3,
y = 1.15
)
),
annotations = list(
list(text = "Selecione o Estado:", x = 0.0, y = 1.15,
xref = "paper", yref = "paper", showarrow = FALSE)
)
)Essa é uma versao mais detalhada do grafico de QL mostrando a especializacao de cada estado separadamente para uma analise mais facil, como exemplo o estado da Paraiba(PB) que tem um QL de 7.44 no setor 131( Preparacao e fiacao de fibras texteis) por ser um estado conhecido pela tecelagem de fios de algodao essa auto Quoeficiente é esperado.
5 INDICADORES DE CONCENTRAÇÃO ESPACIAL DAS ATIVIDADES
5.1 GINI LOCACIONAL
df_gini_loc <- df_csv_clean_2 %>%
group_by(setor, descricao_grupo) %>%
summarise(gini = Gini(total_empregos, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(gini))
df_gini_plot <- df_gini_loc %>%
slice_max(gini, n = 15) %>%
arrange(gini)
plot_ly(df_gini_plot,
x = ~gini,
y = ~reorder(setor, gini),
type = "bar",
orientation = "h",
text = ~paste0("Setor: ", setor,
"<br>Descrição: ", descricao_grupo,
"<br>Gini: ", round(gini, 3)),
hoverinfo = "text",
textposition = "none",
marker = list(color = "#2C7BB6")) %>%
layout(
title = list(
text = "Gini Locacional por Setor - Brasil 2021",
y = 0.95
),
margin = list(t = 60),
xaxis = list(title = "Gini Locacional"),
yaxis = list(
title = "Código CNAE",
type = "category",
categoryorder = "array",
categoryarray = as.character(df_gini_plot$setor)
),
annotations = list(
list(text = "Top 15 setores com maior concentração espacial do emprego formal",
x = 0.5, y = 1.05,
xref = "paper", yref = "paper",
showarrow = FALSE,
font = list(size = 11, color = "gray40"))
)
)O indice de Gini mede o grau de concentracao espacial do emprego de um setor entre os estados.
Gini = 0 o setor está perfeitamente distribuído entre todos os estados, cada um com a mesma proporção de emprego
Gini = 1 o setor está totalmente concentrado em um único estado
Entao quanto maior for o valor do indice de Gini mais concentrado o setor é em algum estado do Brasil.
Os 15 setores com maior Gini Locacional apresentam valores acima de 0,85, indicando altíssima concentração espacial do emprego formal. O setor 920 (Atividades de exploração de jogos de azar e apostas) lidera com Gini próximo de 1. Os demais setores no topo do ranking pertencem majoritariamente a atividades industriais específicas e serviços financeiros, como fabricação de aeronaves (304), fabricação de instrumentos musicais (322) e atividades de investigação particular (803), setores que por sua natureza tendem a se concentrar em poucos polos produtivos. Esse padrão contrasta com setores como comércio varejista e administração pública, que por atenderem demandas cotidianas da população tendem a ter Gini baixo e distribuição espacial mais uniforme pelo território nacional.
setores_gini_alto <- df_gini_loc %>%
slice_max(gini, n = 5) %>%
pull(setor)
df_concentracao <- df_csv_clean_2 %>%
group_by(setor, descricao_grupo, sigla_uf) %>%
summarise(total_empregos = sum(total_empregos, na.rm = TRUE), .groups = "drop") %>%
filter(setor %in% setores_gini_alto) %>%
group_by(setor) %>%
mutate(participacao = total_empregos / sum(total_empregos) * 100) %>%
ungroup() %>%
left_join(df_gini_loc %>% select(setor, gini), by = "setor") %>%
arrange(setor, desc(participacao))
plot_ly(df_concentracao,
x = ~participacao,
y = ~sigla_uf,
color = ~descricao_grupo,
type = "bar",
orientation = "h",
text = ~paste0("Estado: ", sigla_uf,
"<br>Setor: ", setor,
"<br>Descrição: ", descricao_grupo,
"<br>Participação: ", round(participacao, 1), "%",
"<br>Gini: ", round(gini, 3)),
hoverinfo = "text",
textposition = "none") %>%
layout(
title = list(text = "Concentração Espacial dos Setores com Maior Gini - Brasil 2021",
y = 0.95),
margin = list(t = 60),
barmode = "group",
xaxis = list(title = "Participação no Emprego do Setor (%)"),
yaxis = list(title = "Estado"),
legend = list(title = list(text = "Setor"))
)O gráfico confirma o que o Gini Locacional indicava: os cinco setores com maior concentração espacial têm seu emprego praticamente restrito a um ou dois estados. O setor 920 (Atividades de exploração de jogos de azar e apostas) tem 98% do seu emprego formal concentrado no Rio de Janeiro, O setor 304 (Fabricação de aeronaves) está quase integralmente em São Paulo, onde a Embraer e seu polo de fornecedores estão instalados em São José dos Campos. Os setores de pesquisa de mercado (661), fabricação de instrumentos musicais (322) e atividades de investigação particular (803) também se concentram majoritariamente em SP, evidenciando o papel de São Paulo como polo nacional de serviços especializados e indústria de alta tecnologia. Esse padrão reforça a leitura do mapa de PIB per capita: a riqueza e as atividades mais sofisticadas tendem a se concentrar espacialmente, aprofundando as desigualdades regionais.