Introdução

Este relatório analisa os dados de um dispositivo de monitoramento de atividade pessoal, coletados em intervalos de 5 minutos durante os meses de outubro e novembro de 2012. O objetivo é explorar padrões de atividade, calcular estatísticas diárias e comparar comportamentos entre dias de semana e fins de semana.


Carregamento e Pré-processamento dos Dados

# Carregar os dados
activity <- read.csv("activity.csv")

# Converter a coluna 'date' para formato Date
activity$date <- as.Date(activity$date)

# Visualizar as primeiras linhas
head(activity)
##   steps       date interval
## 1    NA 2012-10-01        0
## 2    NA 2012-10-01        5
## 3    NA 2012-10-01       10
## 4    NA 2012-10-01       15
## 5    NA 2012-10-01       20
## 6    NA 2012-10-01       25
# Estrutura dos dados
str(activity)
## 'data.frame':    17568 obs. of  3 variables:
##  $ steps   : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ date    : Date, format: "2012-10-01" "2012-10-01" ...
##  $ interval: int  0 5 10 15 20 25 30 35 40 45 ...
# Resumo estatístico
summary(activity)
##      steps             date               interval     
##  Min.   :  0.00   Min.   :2012-10-01   Min.   :   0.0  
##  1st Qu.:  0.00   1st Qu.:2012-10-16   1st Qu.: 588.8  
##  Median :  0.00   Median :2012-10-31   Median :1177.5  
##  Mean   : 37.38   Mean   :2012-10-31   Mean   :1177.5  
##  3rd Qu.: 12.00   3rd Qu.:2012-11-15   3rd Qu.:1766.2  
##  Max.   :806.00   Max.   :2012-11-30   Max.   :2355.0  
##  NA's   :2304

Qual é o número total médio de passos dados por dia?

1. Cálculo do total de passos por dia

# Agregar passos por dia (ignorando NAs)
total_steps <- aggregate(steps ~ date, activity, sum, na.rm = TRUE)

# Visualizar os totais
head(total_steps)
##         date steps
## 1 2012-10-02   126
## 2 2012-10-03 11352
## 3 2012-10-04 12116
## 4 2012-10-05 13294
## 5 2012-10-06 15420
## 6 2012-10-07 11015

2. Histograma do total de passos por dia

# Histograma
hist(total_steps$steps, 
     main = "Total de Passos por Dia",
     xlab = "Número de Passos",
     ylab = "Frequência",
     col = "steelblue",
     border = "white",
     breaks = 20)

3. Média e mediana do total de passos por dia

# Calcular média e mediana
mean_steps <- mean(total_steps$steps)
median_steps <- median(total_steps$steps)

Resultados:

  • Média: 1.07661910^{4} passos por dia
  • Mediana: 10765 passos por dia

Qual é o padrão médio de atividade diária?

1. Gráfico de série temporal

# Média de passos por intervalo de 5 minutos
interval_avg <- aggregate(steps ~ interval, activity, mean, na.rm = TRUE)

# Gráfico
plot(interval_avg$interval, interval_avg$steps, 
     type = "l",
     main = "Padrão Médio de Atividade Diária",
     xlab = "Intervalo (5 minutos)",
     ylab = "Média de Passos",
     col = "darkblue",
     lwd = 2)

2. Intervalo com o maior número médio de passos

# Identificar o intervalo com máximo de passos
max_interval <- interval_avg[which.max(interval_avg$steps), "interval"]
max_steps <- max(interval_avg$steps)

Resposta: O intervalo 835 contém, em média, o maior número de passos (206 passos).


Imputação de Valores Ausentes

1. Total de valores ausentes

# Contar NAs
total_na <- sum(is.na(activity$steps))

Resultado: Existem 2304 valores ausentes no conjunto de dados.

2. Estratégia para imputar valores ausentes

A estratégia adotada foi preencher os valores ausentes com a média do intervalo de 5 minutos correspondente, calculada a partir de todos os dias disponíveis.

3. Criação de um novo dataset com valores imputados

# Calcular a média de passos para cada intervalo
interval_means <- aggregate(steps ~ interval, activity, mean, na.rm = TRUE)

# Função para imputar valores ausentes
impute_steps <- function(steps, interval) {
  if (is.na(steps)) {
    return(interval_means[interval_means$interval == interval, "steps"])
  } else {
    return(steps)
  }
}

# Criar novo dataset com valores imputados
activity_imputed <- activity
activity_imputed$steps <- mapply(impute_steps, activity_imputed$steps, activity_imputed$interval)

# Verificar se não há mais NAs
sum(is.na(activity_imputed$steps))
## [1] 0

4. Histograma com dados imputados

# Total de passos por dia com dados imputados
total_steps_imp <- aggregate(steps ~ date, activity_imputed, sum)

# Histograma
hist(total_steps_imp$steps,
     main = "Total de Passos por Dia (com Imputação)",
     xlab = "Número de Passos",
     ylab = "Frequência",
     col = "darkgreen",
     border = "white",
     breaks = 20)

5. Média e mediana com dados imputados

# Média e mediana com dados imputados
mean_steps_imp <- mean(total_steps_imp$steps)
median_steps_imp <- median(total_steps_imp$steps)

Resultados com imputação:

  • Média: 1.07661910^{4} passos por dia
  • Mediana: 1.076618910^{4} passos por dia

Comparação com os valores originais

Estatística Original Com Imputação Diferença
Média 1.07661910^{4} 1.07661910^{4} 0
Mediana 10765 1.076618910^{4} 1.1886792

Impacto da imputação: A imputação aumentou ligeiramente a média e a mediana, pois substituiu os NAs por valores positivos.


Há diferenças nos padrões de atividade entre os dias de semana e os fins de semana?

1. Criar variável de tipo de dia

# Identificar dias de semana e fins de semana
activity_imputed$day_type <- ifelse(weekdays(activity_imputed$date) %in% c("Saturday", "Sunday"), 
                                     "weekend", "weekday")
activity_imputed$day_type <- as.factor(activity_imputed$day_type)

# Verificar a distribuição
table(activity_imputed$day_type)
## 
## weekday weekend 
##   12960    4608

2. Gráfico de painel comparando dias de semana e fins de semana

# Carregar ggplot2
library(ggplot2)

# Calcular média por intervalo e tipo de dia
interval_day_avg <- aggregate(steps ~ interval + day_type, activity_imputed, mean)

# Gráfico de painel
ggplot(interval_day_avg, aes(x = interval, y = steps, color = day_type)) +
  geom_line(size = 1.2) +
  facet_grid(day_type ~ .) +
  labs(title = "Padrão de Atividade: Dias de Semana vs Fins de Semana",
       x = "Intervalo (5 minutos)",
       y = "Número Médio de Passos") +
  theme_minimal() +
  theme(legend.position = "none")

Análise dos padrões

  • Dias de semana: Há um pico pronunciado pela manhã (entre 8h e 9h), provavelmente relacionado ao deslocamento para o trabalho. A atividade é mais concentrada em horários específicos.
  • Fins de semana: A atividade é mais distribuída ao longo do dia, com picos menos acentuados.

Conclusão

A análise revelou que:

  1. O total médio de passos por dia é de aproximadamente 1.076610^{4} passos.
  2. O padrão de atividade tem um pico pronunciado pela manhã, especialmente nos dias de semana.
  3. A imputação de dados ausentes não alterou significativamente os resultados, mas aumentou ligeiramente a média e a mediana.
  4. Há diferenças claras entre dias de semana e fins de semana: durante a semana, a atividade é mais concentrada em horários de deslocamento; nos fins de semana, é mais distribuída.

Apêndice: Código Completo

Todo o código utilizado neste relatório está disponível neste documento, com echo = TRUE em todos os chunks para garantir a reprodutibilidade.