Este relatório tem o objetivo de fazer inferências com foco na diferença entre populações. Neste caso, os dados são sobre as liguagens de programação utilizadas por dia pelos usuários do GitHub. As linguagens escolhidas para análise foram Java e Python.
knitr::opts_chunk$set(echo = TRUE)
library(here)
library(readr)
library(tidyverse)
library(resample)
library(timeDate)
library(lubridate)
theme_set(theme_bw())
data <- read.csv(here::here("/data/github-users-committing-filetypes.csv"))
data <- data %>% na.omit() %>% glimpse()
## Observations: 13,802
## Variables: 5
## $ file_extension <fct> md, md, md, md, md, md, md, md, md, md, md, md,...
## $ month_day <int> 18, 17, 27, 16, 26, 21, 4, 22, 23, 1, 12, 3, 2,...
## $ the_month <int> 2, 2, 1, 2, 1, 3, 2, 2, 2, 2, 4, 2, 2, 2, 4, 3,...
## $ the_year <int> 2016, 2016, 2016, 2016, 2016, 2017, 2016, 2016,...
## $ users <int> 10279, 10208, 10118, 10045, 10020, 10015, 9991,...
data <- data %>%
mutate(date =
ymd(paste(the_year,
the_month,
month_day)),
is_weekend = isWeekend(date)
) %>%
select(-month_day, -the_month, -the_year)
colnames(data)
## [1] "file_extension" "users" "date" "is_weekend"
Os dados estão distribuídos nas seguintes colunas:
file_extension: A extensão do arquivo indicando a linguagem de programação usada;users: Quantidade de usuários que usaram uma determinada linguagem de programação em um determinado dia;date: As datas;is_weekend: Se a data é um fim de semana (Sábado ou Domingo).A popularidade será definida como a mediana da quantidade de usuários que usam uma linguagem durante um determinado dia.
java_data <- data %>% filter(file_extension == 'java')
java_data %>% group_by(is_weekend) %>%
ggplot(aes(x = is_weekend,
y = users,
fill=is_weekend)) +
geom_boxplot() +
ggtitle("Popularidade de Java na semana e no FDS") +
labs(x = "É FDS?", y = 'Quantidade de usuários') +
theme(legend.position="none")
Inferência com duas amostras:
median.week_day = java_data %>%
filter(!is_weekend) %>%
bootstrap(median(users),
R = 2000) %>%
CI.percentile(probs = c(.025, .975))
median.week_day
## 2.5% 97.5%
## median(users) 3532 3667
median.weekend = java_data %>%
filter(is_weekend) %>%
bootstrap(median(users),
R = 2000) %>%
CI.percentile(probs = c(.025, .975))
median.weekend
## 2.5% 97.5%
## median(users) 2058 2167.856
df = data.frame(rbind(median.week_day,
median.weekend
))
## Warning in data.row.names(row.names, rowsi, i): some row.names duplicated:
## 2 --> row.names NOT used
df$medida = c(' Ling. Java em dia de semana', 'Ling. Java em fim de semana')
df %>%
ggplot(aes(x = medida, ymin = X2.5., ymax = X97.5.)) +
geom_errorbar(width = .2)
Assim, pode-se dizer que estatisticamente, os programadores programam mais em Java durante a semana.
python_data <- data %>% filter(file_extension == 'py')
python_data %>% group_by(is_weekend) %>%
ggplot(aes(x = is_weekend,
y = users,
fill=is_weekend)) +
geom_boxplot() +
ggtitle("Popularidade de Python na semana e no FDS") +
labs(x = "É FDS?", y = 'Quantidade de usuários') +
theme(legend.position="none")
Inferência com duas amostras:
median.week_day = python_data %>%
filter(!is_weekend) %>%
bootstrap(median(users),
R = 2000) %>%
CI.percentile(probs = c(.025, .975))
median.week_day
## 2.5% 97.5%
## median(users) 4666.882 4789.5
median.weekend = python_data %>%
filter(is_weekend) %>%
bootstrap(median(users),
R = 2000) %>%
CI.percentile(probs = c(.025, .975))
median.weekend
## 2.5% 97.5%
## median(users) 2523.5 2642
df = data.frame(rbind(median.week_day,
median.weekend
))
## Warning in data.row.names(row.names, rowsi, i): some row.names duplicated:
## 2 --> row.names NOT used
df$medida = c(' Ling. Python em dia de semana', 'Ling. Python em fim de semana')
df %>%
ggplot(aes(x = medida, ymin = X2.5., ymax = X97.5.)) +
geom_errorbar(width = .2)
Assim, pode-se dizer que estatisticamente, os programadores programam mais em Python durante a semana.
Diferenças não pareadas
# Mediana dos grupos separados
b1 = python_data %>%
filter(is_weekend) %>%
bootstrap(median(users))
median_python = b1 %>%
CI.percentile(probs = c(.025, .975))
b2 = java_data %>%
filter(is_weekend) %>%
bootstrap(median(users))
median_java = b2 %>%
CI.percentile(probs = c(.025, .975))
df.median = data.frame(rbind(median_python,
median_java))
## Warning in data.row.names(row.names, rowsi, i): some row.names duplicated:
## 2 --> row.names NOT used
df.median$medida = c("Python", "Java")
df.median %>%
ggplot(aes(x = medida, ymin = X2.5., ymax = X97.5.)) +
geom_errorbar(width = .2)
# Agora a diferença das medianas
b.diff.median = bootstrap2(python_data$users,
treatment = python_data$is_weekend,
median)
median.diff = CI.percentile(b.diff.median, probs = c(.05, .95))
median.diff
## 5% 95%
## median: FALSE-TRUE 2077 2219
data.frame(median.diff) %>%
ggplot(aes(x = "Diferença", ymin = X5., ymax = X95.)) +
geom_errorbar(width = .2) +
geom_hline(yintercept = 0, colour = "darkorange")
No geral, os gráficos acima mostram que, nos finais de semana, os programadores programam mais em Python do que em Java.