Este relatório apresenta uma análise simples utilizando a linguagem R
e conceitos básicos de ciência de dados. O objetivo é demonstrar o
carregamento, tratamento, manipulação e visualização de dados, além da
criação de uma tabela interativa com o pacote DT.
Também são apresentadas equações matemáticas em LaTeX, figuras relacionadas à ciência de dados e referências bibliográficas.
library(dplyr)
library(ggplot2)
library(DT)
Nesta etapa, foram carregados os pacotes necessários para a análise.
O pacote dplyr será utilizado para manipulação dos
dados, o ggplot2 para criação de gráficos e o
DT para construção de tabelas interativas.
dados <- airquality
head(dados)
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
O conjunto de dados utilizado foi o airquality,
disponível nativamente no R. Essa base contém informações diárias sobre
a qualidade do ar em Nova York, incluindo concentração de ozônio,
radiação solar, velocidade do vento, temperatura, mês e dia.
As principais variáveis da base são:
Ozone: concentração de ozônio;Solar.R: radiação solar;Wind: velocidade do vento;Temp: temperatura em Fahrenheit;Month: mês da observação;Day: dia da observação.str(dados)
## 'data.frame': 153 obs. of 6 variables:
## $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
## $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
## $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
## $ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
## $ Month : int 5 5 5 5 5 5 5 5 5 5 ...
## $ Day : int 1 2 3 4 5 6 7 8 9 10 ...
A função str() permite visualizar a estrutura do
conjunto de dados, mostrando o tipo de cada variável e uma prévia dos
valores armazenados.
Nesse caso, é possível observar que todas as variáveis são numéricas.
summary(dados)
## Ozone Solar.R Wind Temp
## Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
## 1st Qu.: 18.00 1st Qu.:115.8 1st Qu.: 7.400 1st Qu.:72.00
## Median : 31.50 Median :205.0 Median : 9.700 Median :79.00
## Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.88
## 3rd Qu.: 63.25 3rd Qu.:258.8 3rd Qu.:11.500 3rd Qu.:85.00
## Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
## NA's :37 NA's :7
## Month Day
## Min. :5.000 Min. : 1.0
## 1st Qu.:6.000 1st Qu.: 8.0
## Median :7.000 Median :16.0
## Mean :6.993 Mean :15.8
## 3rd Qu.:8.000 3rd Qu.:23.0
## Max. :9.000 Max. :31.0
##
A função summary() apresenta um resumo estatístico das
variáveis, incluindo valores mínimos, máximos, média, mediana e
quartis.
Também é possível perceber que existem valores ausentes em algumas
variáveis, principalmente em Ozone e
Solar.R.
dados_tratados <- dados %>%
filter(!is.na(Ozone), !is.na(Solar.R))
summary(dados_tratados)
## Ozone Solar.R Wind Temp
## Min. : 1.0 Min. : 7.0 Min. : 2.30 Min. :57.00
## 1st Qu.: 18.0 1st Qu.:113.5 1st Qu.: 7.40 1st Qu.:71.00
## Median : 31.0 Median :207.0 Median : 9.70 Median :79.00
## Mean : 42.1 Mean :184.8 Mean : 9.94 Mean :77.79
## 3rd Qu.: 62.0 3rd Qu.:255.5 3rd Qu.:11.50 3rd Qu.:84.50
## Max. :168.0 Max. :334.0 Max. :20.70 Max. :97.00
## Month Day
## Min. :5.000 Min. : 1.00
## 1st Qu.:6.000 1st Qu.: 9.00
## Median :7.000 Median :16.00
## Mean :7.216 Mean :15.95
## 3rd Qu.:9.000 3rd Qu.:22.50
## Max. :9.000 Max. :31.00
Nesta etapa, foram removidas as linhas com valores ausentes nas
variáveis Ozone e Solar.R.
Esse tratamento foi necessário porque valores ausentes podem prejudicar a análise e dificultar a interpretação dos resultados.
dados_tratados <- dados_tratados %>%
mutate(
Temperatura_Celsius = (Temp - 32) * 5/9,
Qualidade_Ar = case_when(
Ozone <= 30 ~ "Boa",
Ozone <= 70 ~ "Moderada",
TRUE ~ "Ruim"
)
)
head(dados_tratados)
## Ozone Solar.R Wind Temp Month Day Temperatura_Celsius Qualidade_Ar
## 1 41 190 7.4 67 5 1 19.44444 Moderada
## 2 36 118 8.0 72 5 2 22.22222 Moderada
## 3 12 149 12.6 74 5 3 23.33333 Boa
## 4 18 313 11.5 62 5 4 16.66667 Boa
## 5 23 299 8.6 65 5 7 18.33333 Boa
## 6 19 99 13.8 59 5 8 15.00000 Boa
Foram criadas duas novas variáveis:
Temperatura_Celsius: conversão da temperatura de
Fahrenheit para Celsius;Qualidade_Ar: classificação da qualidade do ar com base
na concentração de ozônio.A classificação foi feita da seguinte forma:
dias_ruins <- dados_tratados %>%
filter(Qualidade_Ar == "Ruim")
dias_ruins
## Ozone Solar.R Wind Temp Month Day Temperatura_Celsius Qualidade_Ar
## 1 115 223 5.7 79 5 30 26.11111 Ruim
## 2 71 291 13.8 90 6 9 32.22222 Ruim
## 3 135 269 4.1 84 7 1 28.88889 Ruim
## 4 77 276 5.1 88 7 7 31.11111 Ruim
## 5 97 267 6.3 92 7 8 33.33333 Ruim
## 6 97 272 5.7 92 7 9 33.33333 Ruim
## 7 85 175 7.4 89 7 10 31.66667 Ruim
## 8 79 187 5.1 87 7 19 30.55556 Ruim
## 9 80 294 8.6 86 7 24 30.00000 Ruim
## 10 108 223 8.0 85 7 25 29.44444 Ruim
## 11 82 213 7.4 88 7 28 31.11111 Ruim
## 12 122 255 4.0 89 8 7 31.66667 Ruim
## 13 89 229 10.3 90 8 8 32.22222 Ruim
## 14 110 207 8.0 90 8 9 32.22222 Ruim
## 15 168 238 3.4 81 8 25 27.22222 Ruim
## 16 73 215 8.0 86 8 26 30.00000 Ruim
## 17 76 203 9.7 97 8 28 36.11111 Ruim
## 18 118 225 2.3 94 8 29 34.44444 Ruim
## 19 84 237 6.3 96 8 30 35.55556 Ruim
## 20 85 188 6.3 94 8 31 34.44444 Ruim
## 21 96 167 6.9 91 9 1 32.77778 Ruim
## 22 78 197 5.1 92 9 2 33.33333 Ruim
## 23 73 183 2.8 93 9 3 33.88889 Ruim
## 24 91 189 4.6 93 9 4 33.88889 Ruim
Nesta etapa, foram selecionados apenas os dias classificados como tendo qualidade do ar ruim.
Esse filtro permite analisar especificamente os dias com maiores concentrações de ozônio.
dados_ordenados <- dados_tratados %>%
arrange(desc(Ozone))
head(dados_ordenados)
## Ozone Solar.R Wind Temp Month Day Temperatura_Celsius Qualidade_Ar
## 1 168 238 3.4 81 8 25 27.22222 Ruim
## 2 135 269 4.1 84 7 1 28.88889 Ruim
## 3 122 255 4.0 89 8 7 31.66667 Ruim
## 4 118 225 2.3 94 8 29 34.44444 Ruim
## 5 115 223 5.7 79 5 30 26.11111 Ruim
## 6 110 207 8.0 90 8 9 32.22222 Ruim
Os dados foram ordenados em ordem decrescente pela variável
Ozone.
Dessa forma, os dias com maior concentração de ozônio aparecem nas primeiras linhas da tabela.
resumo_qualidade <- dados_tratados %>%
group_by(Qualidade_Ar) %>%
summarise(
Quantidade_Dias = n(),
Media_Ozonio = mean(Ozone),
Media_Temperatura = mean(Temperatura_Celsius)
)
resumo_qualidade
## # A tibble: 3 × 4
## Qualidade_Ar Quantidade_Dias Media_Ozonio Media_Temperatura
## <chr> <int> <dbl> <dbl>
## 1 Boa 55 17.0 22.0
## 2 Moderada 32 45.3 26.6
## 3 Ruim 24 95.4 31.9
Aqui foi feito um resumo agrupado pela variável
Qualidade_Ar.
A tabela mostra a quantidade de dias em cada categoria, a média de ozônio e a média de temperatura em Celsius.
Esse resultado permite comparar o comportamento médio dos dias com qualidade do ar boa, moderada e ruim.
ggplot(resumo_qualidade, aes(x = Qualidade_Ar, y = Quantidade_Dias)) +
geom_col(fill = "steelblue") +
labs(
title = "Quantidade de dias por classificação da qualidade do ar",
x = "Classificação da qualidade do ar",
y = "Quantidade de dias"
) +
theme_minimal()
O gráfico apresenta a quantidade de dias em cada classificação de qualidade do ar.
Ele facilita a comparação visual entre as categorias boa, moderada e ruim.
ggplot(dados_tratados, aes(x = Temperatura_Celsius, y = Ozone)) +
geom_point() +
labs(
title = "Relação entre temperatura e concentração de ozônio",
x = "Temperatura em Celsius",
y = "Concentração de ozônio"
) +
theme_minimal()
O gráfico de dispersão mostra a relação entre temperatura e concentração de ozônio.
De modo geral, esse tipo de gráfico ajuda a observar se existe algum padrão ou tendência entre duas variáveis numéricas.
datatable(
dados_ordenados,
options = list(
pageLength = 10,
searching = TRUE,
ordering = TRUE,
paging = TRUE
),
caption = "Tabela interativa dos dados de qualidade do ar"
)
A tabela interativa foi construída utilizando o pacote
DT.
Ela permite:
Esse tipo de tabela é útil quando se trabalha com relatórios em HTML, pois melhora a exploração dos dados pelo leitor.
\[ \bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i \]
A média aritmética representa o valor médio de um conjunto de dados.
Ela é calculada somando todos os valores e dividindo pela quantidade total de observações.
\[ s^2 = \frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n-1} \]
A variância amostral mede o grau de dispersão dos dados em relação à média.
Quanto maior a variância, maior é a distância dos valores em relação ao valor médio.
\[ s = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n-1}} \]
O desvio padrão é a raiz quadrada da variância.
Ele indica o quanto os valores de uma variável estão espalhados em relação à média.
\[ r = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})} {\sqrt{\sum_{i=1}^{n}(x_i - \bar{x})^2 \sum_{i=1}^{n}(y_i - \bar{y})^2}} \]
A correlação de Pearson mede a força e a direção da relação linear entre duas variáveis.
Se o valor for próximo de 1, a relação é positiva forte. Se for próximo de -1, a relação é negativa forte. Se for próximo de 0, indica pouca ou nenhuma relação linear.
\[ Y = \beta_0 + \beta_1X + \varepsilon \]
A regressão linear simples é usada para modelar a relação entre uma
variável dependente Y e uma variável independente
X.
Nessa equação:
Y representa a variável resposta;X representa a variável explicativa;β₀ é o intercepto;β₁ é o coeficiente angular;ε representa o erro do modelo.Nesta figura, é apresentada a relação entre a temperatura e a concentração de ozônio presente no conjunto de dados.
ggplot(dados_tratados, aes(x = Temperatura_Celsius, y = Ozone)) +
geom_point(size = 3, color = "darkblue") +
geom_smooth(method = "lm", se = FALSE, color = "red") +
labs(
title = "Relação entre temperatura e concentração de ozônio",
x = "Temperatura em Celsius",
y = "Concentração de ozônio"
) +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
O gráfico de dispersão mostra que temperaturas mais altas tendem a estar associadas a maiores concentrações de ozônio.
A figura abaixo apresenta a quantidade de dias classificados em cada categoria de qualidade do ar.
ggplot(dados_tratados, aes(x = Qualidade_Ar, fill = Qualidade_Ar)) +
geom_bar() +
labs(
title = "Distribuição da qualidade do ar",
x = "Classificação",
y = "Quantidade de dias"
) +
theme_minimal()
O gráfico permite visualizar a frequência de dias classificados como qualidade do ar boa, moderada e ruim.
R CORE TEAM. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria.
WICKHAM, Hadley; GROLEMUND, Garrett. R for Data Science. O’Reilly Media.
WICKHAM, Hadley. ggplot2: Elegant Graphics for Data Analysis. Springer.
XIE, Yihui. Dynamic Documents with R and knitr. Chapman and Hall/CRC.
CHENG, Joe; XIE, Yihui. DT: A Wrapper of the JavaScript Library DataTables. CRAN.
O relatório apresentou uma análise simples utilizando o conjunto de
dados airquality.
Foram realizadas etapas básicas de ciência de dados, como carregamento da base, análise da estrutura, tratamento de valores ausentes, criação de novas variáveis, filtragem, ordenação, agrupamento e visualização gráfica.
Além disso, foi criada uma tabela interativa com o pacote
DT, foram apresentadas equações matemáticas em LaTeX,
figuras relacionadas à ciência de dados e referências
bibliográficas.
Dessa forma, o relatório demonstra como o R Markdown pode ser usado para unir texto, código, resultados, gráficos e referências em um único documento organizado.