O Mercado para Ciência de Dados no Brasil - Parte I - Visualização
Introdução
Recentemente o site Data Hackers realizou uma pesquisa com pessoas que trabalham com Ciência de Dados. As respostas coletadas pelos questionários foram compilados e disponibilizados no Kaggle. Nesta primeira parte da minha análise irei fazer uma série de análises descritivas, a fim de ter uma noção de como estão algumas características deste mercado.
Preparação dos Dados
Como em qualquer análise de dados, o primeiro passo é importá-los para o R.
# pacotes necessarios
library(tidyverse)
## ── Attaching packages ──────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2 ✓ purrr 0.3.4
## ✓ tibble 3.0.3 ✓ dplyr 1.0.2
## ✓ tidyr 1.1.2 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## ── Conflicts ─────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
theme_set(theme_bw())
# leitura dos dados
survey <- read_csv("data/datahackers-survey-2019-anonymous-responses.csv") %>%
janitor::clean_names()
## Parsed with column specification:
## cols(
## .default = col_double(),
## `('P0', 'id')` = col_character(),
## `('P2', 'gender')` = col_character(),
## `('P5', 'living_state')` = col_character(),
## `('P8', 'degreee_level')` = col_character(),
## `('P10', 'job_situation')` = col_character(),
## `('P12', 'workers_number')` = col_character(),
## `('P16', 'salary_range')` = col_character(),
## `('P17', 'time_experience_data_science')` = col_character(),
## `('P18', 'time_experience_before')` = col_character(),
## `('P22', 'most_used_proggraming_languages')` = col_character(),
## `('P32', 'prefered_data_hackers_initiative')` = col_character(),
## `('P35', 'data_science_plataforms_preference')` = col_character(),
## `('P35', 'other')` = col_character(),
## `('D1', 'living_macroregion')` = col_character(),
## `('D2', 'origin_macroregion')` = col_character(),
## `('D3', 'anonymized_degree_area')` = col_character(),
## `('D4', 'anonymized_market_sector')` = col_character(),
## `('D5', 'anonymized_manager_level')` = col_character(),
## `('D6', 'anonymized_role')` = col_character()
## )
## See spec(...) for full column specifications.
A seguir, processo a coluna p5_living_state
, mantendo apenas a sigla do estado em que o respondente mora. Além disso, há dados faltantes para o estado de quem mora no exterior. Portanto, então vou colocar o nível “Exterior” para essas pessoas.
# manter apenas as siglas para os estados e
# completar os NA de p5_living_state com Exterior
survey <- survey %>%
mutate(p5_living_state = gsub("[\\(\\)]", "", regmatches(p5_living_state, gregexpr("\\(.*?\\)", p5_living_state)))) %>%
mutate(p5_living_state = ifelse(p5_living_state == "character0", "Exterior", p5_living_state))
A seguir, crio um ordenamento que faça sentido para a variável p16_salary_range
:
# criar ordenamento para p16_salary_range
survey <- survey %>%
mutate(p16_salary_range = fct_explicit_na(p16_salary_range, na_level = "Não Informado")) %>%
mutate(p16_salary_range =
factor(p16_salary_range,
levels = c("Não Informado",
"Menos de R$ 1.000/mês",
"de R$ 1.001/mês a R$ 2.000/mês",
"de R$ 2.001/mês a R$ 3000/mês",
"de R$ 3.001/mês a R$ 4.000/mês",
"de R$ 4.001/mês a R$ 6.000/mês",
"de R$ 6.001/mês a R$ 8.000/mês",
"de R$ 8.001/mês a R$ 12.000/mês",
"de R$ 12.001/mês a R$ 16.000/mês",
"de R$ 16.001/mês a R$ 20.000/mês",
"de R$ 20.001/mês a R$ 25.000/mês",
"Acima de R$ 25.001/mês")))
De modo análogo, segue uma ordenação para a variável p8_degree_level
:
# criar ordenamento para p8_degree_level
survey <- survey %>%
mutate(p8_degreee_level = factor(p8_degreee_level,
levels = c("Prefiro não informar",
"Não tenho graduação formal",
"Estudante de Graduação",
"Graduação/Bacharelado",
"Pós-graduação",
"Mestrado",
"Doutorado ou Phd")))
A partir de agora inicio a análise dos dados coletados. Como a amostragem não foi feita de maneira probabilística, não há a garantia de que os resultados reportados a seguir sejam extrapoláveis para um grupo de pessoas que não tenha respondido o questionário.
Análise Exploratória
Como podemos ver no gráfico abaixo, esse é um campo de atuação majoritariamente masculino:
survey %>%
mutate(p2_gender = fct_explicit_na(p2_gender, "Não Informado")) %>%
group_by(p2_gender) %>%
count() %>%
ggplot(aes(x = p2_gender, y = n)) +
geom_col() +
labs(x = "Gênero", y = "Quantidade", title = "Gênero dos Cientistas de Dados Brasileiros")
Além disso, nessa amostra não houve respondentes que trabalhassem no Brasil e fora das regiões Sul ou Sudeste:
survey %>%
group_by(p5_living_state) %>%
count() %>%
ggplot(aes(x = reorder(p5_living_state, -n), y = n)) +
geom_col() +
labs(x = "Estado de Residência", y = "Quantidade", title = "Número de Cientistas de Dados por Estado")
A faixa salarial mais comum é entre R$ 4.001 e R$ 6.000 por mês:
survey %>%
filter(p5_living_state != "Exterior") %>%
group_by(p16_salary_range) %>%
count() %>%
na.omit() %>%
ggplot(aes(x = p16_salary_range, y = n)) +
geom_col() +
labs(x = "Faixa Salarial", y = "Quantidade", title = "Faixa Salarial dos Cientistas de Dados Brasileiros") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
São Paulo possui mais gente recebendo melhores salários:
survey %>%
group_by(p5_living_state, p16_salary_range) %>%
count() %>%
ggplot(aes(x = p16_salary_range, y = p5_living_state, fill = n)) +
geom_tile() +
labs(x = "Faixa Salarial", y = "Estado de Residência", fill = "Qtde") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
scale_fill_viridis_c()
Por fim, as combinações de faixas salariais e formação mais comuns são de R$3.000 a R$12.000 por mês, para pessoas com graduação ou pós-graduação.
survey %>%
group_by(p8_degreee_level, p16_salary_range) %>%
count() %>%
ggplot(aes(x = p16_salary_range, y = p8_degreee_level, fill = n)) +
geom_tile() +
labs(x = "Faixa Salarial", y = "Formação", fill = "Qtde") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
scale_fill_viridis_c()
No próximo artigo veremos como ajustar um modelo preditivo capaz de prever o salário de um cientista de dados de acordo com algumas variáveis pré-estabelecidas.