“A informação é o novo petróleo do século XXI e a análise de dados é o novo motor de combustão.”
Peter Sondergaard
Aplicações de métodos estatísticos na área de Ciência de Dados.
1. Introdução
Data Science ou Ciência de Dados é o estudo dos dados para obter informações significativas para os negócios que ajuda na tomada de decisão. Ela é formada por 3 principais pilares: Matemática/Estatística: serão bem úteis para a análise dos resultados dos algoritmos aplicados no processamento de dados; Conhecimento de Negócios: pois CD abrange um mar de oportunidades, várias áreas para que você atuar; Programação: com uma boa IDE, ajuda nas análises e repassa o conhecimento, de modo a ter uma boa visualização, saiba mais aqui e aqui. Em resumo, é uma ciência que visa estudar as informações, seu processo de captura, transformação, geração e, posteriormente, análise de dados.
1.1 Conceitos
Para Bussab e Morettin (2017, p.276), “o objetivo da Inferência Estatística é produzir afirmações sobre dada característica da população, na qual estamos interessados, a partir de informações colhidas de uma parte dessa população.”
Como realizar IC?
- Reúna os dados da amostra: n;
- Calcule a média da amostra x̅ (x-barra);
- Determine se um desvio padrão populacional (σ) é conhecido ou desconhecido;
- Se um desvio padrão populacional for conhecido, pode-se usar um ponto z para o nível de confiança correspondente;
- Se um desvio padrão populacional for desconhecido, podemos usar uma estatística t para o nível de confiança correspondente;
Devore (2018, p.292) afirma que, “Um teste de hipóteses é um método para usar os dados da amostra para decidir se a hipótese nula deve ser desprezada.”
Como fazer um teste de hipótese?
- Especifique as hipóteses;
Teste bilateral: H0: μ = μ0 contra H1: μ ≠ μ0
Teste unilateral a esquerda: H0: μ = μ0 contra H1: μ ≤ μ0
Teste unilateral a direita: H0: μ = μ0 contra H1: μ ≥ μ0
- Escolha um nível de significância (também chamado alfa ou α);
- Determine o poder e tamanho de amostra para o teste;
- Colete os dados;
- Compare o valor p do teste ao nível de significância;
- Decida se a hipótese nula deve ser rejeitada ou não.
1.2 Objetivos
1.2.1 Objetivo geral
Esse estudo tem como objetivo principal, estudar os dados de forma a obter informações plausíveis para se utilizar de algumas técnicas de Estatística, visando responder o questionário com garantia.
1.2.2 Objetivos específicos
Verificar se média de salários em Data Science no ano de 2022 continua a mesma ou mudou à vista da média de salários dos anos 2020 e 2021.
Descobrir qual o valor médio salarial em Data Science no ano de 2022.
2. Metodologia
2.1 Descrição do conjunto de dados
Para este estudo, utilizei a base de dados “Salários AI/ML” que está disponibilizada no site Kaggle, veja clicando aqui.
São salários de empregos de 2020 à 2022 da Ai-jobs, também dá para ter acesso ao banco de dados por ela nos formatos CSV e JSON, para ter acesso clique aqui, ela coleta informações salariais anonimamente de profissionais de todo o mundo no espaço AI/ML e Big Data e as disponibiliza publicamente para qualquer pessoa usar e compartilhar. Os dados estão sendo atualizados regularmente com novos dados chegando, geralmente semanalmente.
O conjunto de dados está estruturado da seguinte forma:
- ano_de_trabalho: O ano em que o salário foi pago.
- nivel_de_experiencia: O nível de experiência no
trabalho durante o ano com os seguintes valores possíveis:
- Nível iniciante / júnior
- Nível médio /intermediário
- Nível sênior / especialista
- Nível executivo / diretor
- tipo_de_emprego: O tipo de emprego para a função:
- Meio período
- Tempo integral
- Contrato
- Autônomo
- cargo_funcao: A função em que trabalhou durante o ano.
- salario: O valor bruto total do salário pago.
- salario_moeda: A moeda do salário pago como um código de moeda ISO 4217.
- salario_em_usd: O salário em USD (taxa de câmbio dividida pela taxa média de dólares do respectivo ano).
- residencia_funcionario: o país de residência principal do funcionário durante o ano de trabalho como um código de país ISO 3166.
- remoto: A quantidade total de trabalho feito
remotamente, os valores possíveis são os seguintes:
- Nenhum trabalho remoto (menos de 20%)
- Parcialmente remoto
- Totalmente remoto (mais de 80%)
- localizacao_empresa: O país da sede do empregador ou filial contratante como um código de país ISO 3166.
- tamanho_da_empresa: O número médio de pessoas que
trabalharam para a empresa durante o ano:
- Menos de 50 funcionários (pequeno)
- 50 a 250 funcionários (médio)
- Mais de 250 funcionários (grande)
2.2 Vamos ao R!
2.2.1 Importando as bibliotecas necessárias
library(DT) # para a tabela
library(readr) # ler a base
library(dplyr) # para sumarizar, filtrar, etc.
library(knitr) # gerar relatórios dinâmicos
library(magrittr) # para utilizar o Pipe %>%
library(tidyverse) # manipulação, exploração e visualização
library(plotly) # gráficos interativos
library(TeachingDemos) # para calcular z.test
library(xfun)
2.2.2 Lendo dos dados
salaries <- read_csv("C:/Users/laris/OneDrive/Documentos/FACUL/salaries.csv")
2.2.3 Tratamento dos dados
# Renomeando variáveis do dataset original
salaries <- salaries %>% rename(ano_de_trabalho = work_year)
salaries <- salaries %>% rename(nivel_de_experiencia = experience_level)
salaries <- salaries %>% rename(tipo_de_emprego = employment_type)
salaries <- salaries %>% rename(cargo_funcao = job_title)
salaries <- salaries %>% rename(salario = salary)
salaries <- salaries %>% rename(salario_moeda = salary_currency)
salaries <- salaries %>% rename(salario_em_usd = salary_in_usd)
salaries <- salaries %>% rename(residencia_funcionario = employee_residence)
salaries <- salaries %>% rename(remoto_proporcao = remote_ratio)
salaries <- salaries %>% rename(localizacao_empresa = company_location)
salaries <- salaries %>% rename(tamanho_da_empresa = company_size)
# Renomeando levels das colunas categóricas
salaries$remoto_proporcao <- factor(salaries$remoto_proporcao, label = c("Nenhum trabalho remoto (-20%)", "Parcialmente remoto", "Totalmente remoto (+80%)"), levels = c(0, 50, 100))
salaries$nivel_de_experiencia <- factor(salaries$nivel_de_experiencia, label = c("Junior/Iniciante", "Executivo/Diretor", "Pleno/Intermediario", "Senior/Especialista"), levels = c("EN", "EX", "MI", "SE"))
salaries$tipo_de_emprego <- factor(salaries$tipo_de_emprego, label = c("Contrato", "Autonomo", "Tempo integral", "Meio periodo"), levels = c("CT", "FL", "FT", "PT"))
salaries$tamanho_da_empresa <- factor(salaries$tamanho_da_empresa, label = c("Grande (+250)", "Medio (50 a 250)", "Pequeno (-50)"), levels = c("L", "M", "S"))
# Armazenando levels com frequência baixa com nome "Outra" para melhor visualização e entendimento.
salaries <- salaries %>%
mutate(cargo_funcao_outros = case_when(
cargo_funcao == "Data Scientist" ~ "Data Scientist",
cargo_funcao == "Data Engineer" ~ "Data Engineer",
cargo_funcao == "Data Analyst" ~ "Data Analyst",
cargo_funcao == "Machine Learning Engineer" ~ "Machine Learning Engineer",
cargo_funcao == "Analytics Engineer" ~ "Analytics Engineer",
cargo_funcao == "Data Architect" ~ "Data Architect",
TRUE ~ "Outra"))
# Renomeando levels da coluna cargo
salaries$cargo_funcao_outros <- factor(salaries$cargo_funcao_outros, label = c("Cientista de Dados", "Engenheiro de Dados", "Analista de Dados", "Engenheiro de Aprendizado de Máquina", "Engenheiro Analítico", "Arquiteto de Dados", "Outras"), levels = c("Data Scientist", "Data Engineer", "Data Analyst", "Machine Learning Engineer", "Analytics Engineer", "Data Architect", "Outra"))
# Armazenando levels com frequência baixa com nome "Outra" para melhor visualização e entendimento.
salaries <- salaries %>%
mutate(salario_moeda_outras = case_when(
salario_moeda == "USD" ~ "USD",
salario_moeda == "EUR" ~ "EUR",
salario_moeda == "GBP" ~ "GBP",
salario_moeda == "INR" ~ "INR",
salario_moeda == "CAD" ~ "CAD",
salario_moeda == "BRL" ~ "BRL",
salario_moeda == "AUD" ~ "AUD",
TRUE ~ "Outra"))
# Renomeando levels da coluna moeda
salaries$salario_moeda_outras <- factor(salaries$salario_moeda_outras, label = c("Dolar americano", "Euro", "Libra", "Rupia", "Dolar canadense", "Real", "Dolar australiano", "Outras"), levels = c("USD", "EUR", "GBP", "INR", "CAD", "BRL", "AUD", "Outra"))
salaries <- salaries %>%
mutate(localizacao_empresa_outras = case_when(
localizacao_empresa == "US" ~ "US",
localizacao_empresa == "GB" ~ "GB",
localizacao_empresa == "CA" ~ "CA",
localizacao_empresa == "DE" ~ "DE",
localizacao_empresa == "ES" ~ "ES",
localizacao_empresa == "IN" ~ "IN",
TRUE ~ "Outra"))
# Renomeando levels da coluna localização empresa
salaries$localizacao_empresa_outras <- factor(salaries$localizacao_empresa_outras, label = c("Estados Unidos", "Reino Unido", "Canada", "Alemanha", "Espanha", "India", "Outras"), levels = c("US", "GB", "CA", "DE", "ES", "IN", "Outra"))
salaries <- salaries %>%
mutate(residencia_funcionario_outras = case_when(
residencia_funcionario == "US" ~ "US",
residencia_funcionario == "GB" ~ "GB",
residencia_funcionario == "IN" ~ "IN",
residencia_funcionario == "CA" ~ "CA",
residencia_funcionario == "ES" ~ "ES",
residencia_funcionario == "DE" ~ "DE",
TRUE ~ "Outra"))
# Renomeando levels da coluna residência funcionário
salaries$residencia_funcionario_outras <- factor(salaries$residencia_funcionario_outras, label = c("Estados Unidos", "Reino Unido", "India", "Canada", "Espanha", "Alemanha", "Outras"), levels = c("US", "GB", "IN", "CA", "ES", "DE", "Outra"))
# Separando amostras (Data Science) em cada ano para calcular IC e TH
cd <- salaries %>% filter(cargo_funcao == "Data Scientist")
cd_2020 <- cd %>% filter(ano_de_trabalho == 2020)
cd_2021 <- cd %>% filter(ano_de_trabalho == 2021)
cd_2022 <- cd %>% filter(ano_de_trabalho == 2022)
cd_2020_2021 <- bind_rows(cd_2020, cd_2021)
2.2.4 Tabela
DT::datatable(salaries[1:20, c(5, 1:4)], rownames = FALSE)
2.3 Análise exploratória: Geral
library(plotly)
ano <- plot_ly(salaries, x = ~salario_em_usd, type = "histogram", color = ~salario_em_usd)
ano <- ano %>% layout(title = "Salário em USD (taxa de câmbio dividida pela taxa média de USD)") %>% layout(xaxis = list(title = "Salário em USD"))
ano
É possível perceber que os salários entre 50k e 200k, não tem um impacto muito grande com as taxas ao converter a moeda, por outro lado, quem recebe mais de 300k, têm uma diferença significativa negativa em seu salário em consequência dessas taxas.
library(plotly)
te <- plot_ly(salaries, x = ~tipo_de_emprego, type = "histogram", color = ~tipo_de_emprego)
te <- te %>% layout(title = "Tipos de emprego") %>%
layout(xaxis = list(title = "Tipo de emprego"))
te
Claramente percebe-se que, a maioria dos funcionários trabalham em tempo integral.
library(plotly)
sm <- plot_ly(salaries, x = ~salario_moeda_outras, type = "histogram", color = ~salario_moeda_outras)
sm <- sm %>% layout(title = "Salários por moeda de cada país") %>%
layout(xaxis = list(title = "Salário por moeda"))
sm
Vemos que a maioria dos funcionários recebem seu salário em dólar americano. Em segundo e terceiro lugar, recebem em euro e libra respectivamente.
library(plotly)
plot_ly(salaries, y = ~tamanho_da_empresa, type = "histogram", color = ~tamanho_da_empresa) %>%
layout(title = "Tamanho da empresa", yaxis = list(title = "Tamanho da empresa"))
Podemos ver que, grande parte das pessoas afirmaram trabalhar em empresas médias, que possuem entre 50 e 250 colaboradores, em segundo lugar, 337 pessoas trabalham em empresas grandes, com mais de 250 funcionários
.
library(plotly)
plot_ly(salaries, x = ~remoto_proporcao, type = "histogram", color = ~remoto_proporcao) %>%
layout(title = "Proporção: remoto", xaxis = list(title = "Proporção: remoto"))
A maioria dos funcionários afirmaram que trabalham totalmente remoto. Em segundo lugar, nenhum trabalho remoto, ou seja, podemos considerar que estes trabalham de forma presencial. Por fim, um grupo menor, que trabalham parcialmente remoto, de forma híbrida.
2.3.2 Gráficos de pizza
library(plotly)
le <- plot_ly(salaries, labels = ~localizacao_empresa_outras, type = 'pie')
le <- le %>% layout(title = 'Quantidade de empregos em cada país',
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
le
Clicando na variável “Outras” para removê-la no gráfico, vemos que Estados Unidos é o país que mais possui empresas, segundo essa base de dados (que cada funcionário preencheu). Em segundo lugar, Reino Unido com uma diferença bem grande.
library(plotly)
cf <- plot_ly(salaries, labels = ~cargo_funcao_outros, type = 'pie')
cf <- cf %>% layout(title = 'Quantidade de vagas para cada área',
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
cf
Clicando na variável “Outras” para removê-la no gráfico, percebemos que Engenheiro de Dados e Cientista de Dados estão bem próximos, são as funções que mais tem. Em terceiro lugar, te o Analista de Dados.
library(plotly)
library(dplyr)
rf <- salaries %>%
group_by(residencia_funcionario_outras) %>%
summarize(count = n()) %>%
plot_ly(labels = ~residencia_funcionario_outras, values=~count) %>%
add_pie(hole = 0.4) %>%
layout(title = "Residência dos funcionários por país", showlegend = T,
xaxis = list(showgrid = F, zeroline = F, showticklabels = F),
yaxis = list(showgrid = F, zeroline = F, showticklabels = F))
rf
Clicando na variável “Outras” para removê-la no gráfico, vemos que o país onde mora mais pessoas (mais de 80%), é o Estados Unidos. Em segundo lugar, com uma diferença bem grande: Reino Unido.
Percebemos que os gráficos “Quantidade de empregos em cada país”, “Proporção: remoto” e “Residência dos funcionários por país”, conversam entre si. Pois, mesmo os funcionários morando nos Estados Unidos e seus locais de trabalho situados lá também e diante do fato de que a maioria desses colaboradores trabalham de forma remota, podemos concluir que eles trabalham totalmente remoto, morando no país onde seu emprego reside.
library(plotly)
b <- plot_ly(salaries, y = ~salario,
color = ~nivel_de_experiencia, type = "box") %>%
layout(xaxis = list(title = "Nível de experiência",
yaxis = list(title = "Sálario")))
b
Ao relacionar salário com o nível de experiência, é possível perceber os quartis de cada um, os mínimos e máximos, e as medianas que são estatísticas muito importantes para analisar.
Ao relacionar salário com o nível de experiência, é possível perceber que há uma variabilidade maior na Índia, ou seja, os salários mais bem pagos, onde há uma valorização do trabalho na área tecnológica é na Índia.
2.4 Análise exploratória: ênfase em Data Science
library(plotly)
te <- plot_ly(cd, x = ~tipo_de_emprego, type = "histogram", color = ~tipo_de_emprego)
te <- te %>% layout(title = "Tipos de emprego") %>%
layout(xaxis = list(title = "Tipo de emprego"))
te
Pode-se percebe claramente que a maioria dos funcionários em Data Science, 430 de 434, trabalham em tempo integral.
library(plotly)
plot_ly(cd, y = ~tamanho_da_empresa, type = "histogram", color = ~tamanho_da_empresa) %>%
layout(title = "Tamanho da empresa", yaxis = list(title = "Tamanho da empresa"))
Podemos ver que, grande parte das pessoas que trabalham como cientista de dados, trabalham em empresas médias, que possuem entre 50 e 250 colaboradores.
.
library(plotly)
plot_ly(cd, x = ~remoto_proporcao, type = "histogram", color = ~remoto_proporcao) %>%
layout(title = "Proporção: remoto", xaxis = list(title = "Proporção: remoto"))
231 cientistas de dados afirmaram que trabalham totalmente remoto. Em segundo lugar, - com pouca diferença - não trabalham remoto, ou seja, podemos considerar que estes trabalham de forma presencial.
library(plotly)
b <- plot_ly(cd, y = ~salario,
color = ~nivel_de_experiencia, type = "box") %>%
layout(xaxis = list(title = "Nível de experiência",
yaxis = list(title = "Sálario")))
b
Ao relacionar salário com o nível de experiência, é possível perceber que pessoas com o nível iniciante tem como mediana 80k, pessoas em nível intermediário 95k e sênior 148k.
2.5 Métodos/Software utilizados
Com a variável quantitativa contínua (salario) da base extraída somente com informações de Cientistas de Dados, será realizado um teste de hipótese e intervalo de confiança, usando o software R para as análises, a fim de responder às questões citadas anteriormente. R é uma linguagem de computador, uma ferramenta para fazer computações e cálculos que estabelecem o cenário da análise estatística e da tomada de decisão. Um aspecto importante da análise estatística é apresentar os resultados de maneira compreensível. Por isso, os gráficos são um componente importante do R. O RStudio é um ambiente de desenvolvimento integrado (IDE) de código aberto para criar e executar códigos.
3. Resultados
3.1 Teste de hipótese
A média de salários em Data Science continuou a mesma ou mudou à vista da média dos salários de 2020 e 2021?
Descobrir qual o valor médio salarial no ano de 2022.
Teste bilateral: H0: μ = μ0 contra H1: μ ≠ μ0
- H0 : A média de salários em Data Science permaneceu (parâmetro de referência 2020 e 2021 = 912.393)
- H1 : A média de salários em Data Science mudou
library(TeachingDemos)
cd_th_2022 <- cd_2022 %>% select(salario)
t.test(cd_th_2022,
mu = 912.393,
alternative = "two.sided",
conf.level = 0.95)
##
## One Sample t-test
##
## data: cd_th_2022
## t = 8.0678, df = 369, p-value = 1.016e-14
## alternative hypothesis: true mean is not equal to 912.393
## 95 percent confidence interval:
## 137134.5 224940.3
## sample estimates:
## mean of x
## 181037.4
Ao analisar o resultado acima, o p valor foi menor que 0.05, então rejeita-se H0, ou seja, há evidências suficientes que a média de salários no ano de 2022 em Data Science mudou em relação à média de salários dos anos 2020 e 2021.
3.2 Intervalo de confiança
Qual o valor médio de salários em Data Science no ano de 2022?
a <- 186102 # média da amostra
sd(cd_2022$salario)
## [1] 429456.2
s <- 448752.2 # desvio padrão
n <- 338 # tamanho da amostra
error <- (qnorm(0.975) * 448752.2/sqrt(338))
error
## [1] 47840.57
left <- 186102- 47840.57
left
## [1] 138261.4
right <- 186102 + 47840.57
right
## [1] 233942.6
Com 95% de confiança, é possível afirmar que a estimativa da média de salários em Data Science no ano de 2022 está entre 138261.4 e 233942.6.
4. Conclusão
Nesse relatório, foi entendido o que são Inferência Estatística, Teste de Hipótese e Intervalo de Confiança e como proceder cada um. Foi realizada uma exploração de dados (usando o software R com a IDE Rstudio) em que foi possível conhecer bem a base de dados, analisar o comportamento dos mesmos através dos gráficos, após isso foram feitos teste de hipótese, que foi possível concluir que a média mudou em relação à dois anos anteriores, e IC, que nos deu um intervalo confiável de onde a média verdadeira está. Por fim, ao comparar TH e IC, vemos que IC é melhor, mais completo em termos de informações mais interessantes em um só cálculo.
5. Referências
MORETTIN, Pedro A.; BUSSAB, Wilton de O. Estatística básica. Editora Saraiva, 2017. E-book. ISBN 9788547220228. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788547220228/. Acesso em: 17 nov. 2022.
DEVORE, Jay L. Probabilidade e estatística para engenharia e ciências – Tradução da 9ª edição norte-americana. Cengage Learning Brasil, 2018. E-book. ISBN 9788522128044. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788522128044/. Acesso em: 17 nov. 2022.
NAVIDI, William. Probabilidade e Estatística para Ciências Exatas. Disponível em: Minha Biblioteca, Grupo A, 2012.
MATTOS, Viviane Leite Dias D.; AZAMBUJA, Ana Maria Volkmer D.; KONRATH, Andréa C. Introdução à Estatística - Aplicações em Ciências Exatas. Grupo GEN, 2017. E-book. ISBN 9788521633556. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788521633556/. Acesso em: 17 nov. 2022.
SCHMULLE, Joseph. Análise Estatística com R Para Leigos. Editora Alta Books, 2019. E-book. ISBN 9788550807850. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788550807850/. Acesso em: 24 nov. 2022.