Introdução

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.

1. Manipulação dos Dados

Carregamento dos pacotes

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.

Carregamento da base de dados

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.

Estrutura dos dados

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.

Resumo estatístico

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.

Tratamento de valores ausentes

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.

Criação de novas variáveis

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:

  • até 30: qualidade do ar boa;
  • de 31 até 70: qualidade do ar moderada;
  • acima de 70: qualidade do ar ruim.

Filtragem dos dados

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.

Ordenação dos dados

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.

Agrupamento por qualidade do ar

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.

Gráfico da qualidade do ar

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.

Relação entre temperatura e ozônio

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.

2. Tabela Interativa com DT

Tabela interativa

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:

  • ordenar colunas;
  • pesquisar valores específicos;
  • navegar entre páginas;
  • visualizar os dados de maneira mais dinâmica.

Esse tipo de tabela é útil quando se trabalha com relatórios em HTML, pois melhora a exploração dos dados pelo leitor.

3. Equações em LaTeX

Média aritmética

\[ \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.

Variância amostral

\[ 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.

Desvio padrão

\[ 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.

Correlação de Pearson

\[ 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.

Regressão linear simples

\[ 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.

4. Figuras Relacionadas à Ciência de Dados

Figura 1: Relação entre temperatura e ozônio

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.


Figura 2: Distribuição da qualidade do ar

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.

5. Referências Bibliográficas

Referências

  1. R CORE TEAM. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria.

  2. WICKHAM, Hadley; GROLEMUND, Garrett. R for Data Science. O’Reilly Media.

  3. WICKHAM, Hadley. ggplot2: Elegant Graphics for Data Analysis. Springer.

  4. XIE, Yihui. Dynamic Documents with R and knitr. Chapman and Hall/CRC.

  5. CHENG, Joe; XIE, Yihui. DT: A Wrapper of the JavaScript Library DataTables. CRAN.

Conclusão

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.