Usaremos o conjunto de dados “WaterQuality” disponível no Kaggle em https://www.kaggle.com/datasets/mssmartypants/water-quality/data. Este é um conjunto de dados criado a partir de dados imaginários sobre a qualidade da água em um ambiente urbano.
1.2 Carregamento e Visualização Inicial dos Dados
Code
# Carregar o datasetdados <-read.csv("waterQuality.csv")# Visualização inicial dos dadosstr(dados)
is_safe - class attribute {0 - not safe, 1 - safe}
1.4 Análise das Variáveis
Code
summary(dados)
aluminium ammonia arsenic barium
Min. :0.0000 Length:7999 Min. :0.0000 Min. :0.000
1st Qu.:0.0400 Class :character 1st Qu.:0.0300 1st Qu.:0.560
Median :0.0700 Mode :character Median :0.0500 Median :1.190
Mean :0.6662 Mean :0.1614 Mean :1.568
3rd Qu.:0.2800 3rd Qu.:0.1000 3rd Qu.:2.480
Max. :5.0500 Max. :1.0500 Max. :4.940
cadmium chloramine chromium copper
Min. :0.00000 Min. :0.000 Min. :0.0000 Min. :0.0000
1st Qu.:0.00800 1st Qu.:0.100 1st Qu.:0.0500 1st Qu.:0.0900
Median :0.04000 Median :0.530 Median :0.0900 Median :0.7500
Mean :0.04281 Mean :2.177 Mean :0.2472 Mean :0.8059
3rd Qu.:0.07000 3rd Qu.:4.240 3rd Qu.:0.4400 3rd Qu.:1.3900
Max. :0.13000 Max. :8.680 Max. :0.9000 Max. :2.0000
flouride bacteria viruses lead
Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.00000
1st Qu.:0.4050 1st Qu.:0.0000 1st Qu.:0.0020 1st Qu.:0.04800
Median :0.7700 Median :0.2200 Median :0.0080 Median :0.10200
Mean :0.7716 Mean :0.3197 Mean :0.3286 Mean :0.09945
3rd Qu.:1.1600 3rd Qu.:0.6100 3rd Qu.:0.7000 3rd Qu.:0.15100
Max. :1.5000 Max. :1.0000 Max. :1.0000 Max. :0.20000
nitrates nitrites mercury perchlorate
Min. : 0.000 Min. :0.00 Min. :0.000000 Min. : 0.00
1st Qu.: 5.000 1st Qu.:1.00 1st Qu.:0.003000 1st Qu.: 2.17
Median : 9.930 Median :1.42 Median :0.005000 Median : 7.74
Mean : 9.819 Mean :1.33 Mean :0.005194 Mean :16.46
3rd Qu.:14.610 3rd Qu.:1.76 3rd Qu.:0.008000 3rd Qu.:29.48
Max. :19.830 Max. :2.93 Max. :0.010000 Max. :60.01
radium selenium silver uranium
Min. :0.000 Min. :0.00000 Min. :0.0000 Min. :0.00000
1st Qu.:0.820 1st Qu.:0.02000 1st Qu.:0.0400 1st Qu.:0.02000
Median :2.410 Median :0.05000 Median :0.0800 Median :0.05000
Mean :2.921 Mean :0.04968 Mean :0.1478 Mean :0.04467
3rd Qu.:4.670 3rd Qu.:0.07000 3rd Qu.:0.2400 3rd Qu.:0.07000
Max. :7.990 Max. :0.10000 Max. :0.5000 Max. :0.09000
is_safe
Length:7999
Class :character
Mode :character
1.5 Limpeza e Preparação dos Dados
Code
# Verificação de valores ausentesprint(paste('Número dados faltantes :', sum(is.na(dados))))
[1] "Número dados faltantes : 0"
Code
#Alternado o tipo de dados da variável Ammoniaprint("Alterar a variável Ammonia de chr para numeric")
[1] "Alterar a variável Ammonia de chr para numeric"
Code
dados$ammonia <-as.numeric(dados$ammonia)
Warning: NAs introduzidos por coerção
Code
#Anakisando os dados do rótuloprint("Analisando os dados do Rótulo")
[1] "Analisando os dados do Rótulo"
Code
print(paste("", unique(dados$is_safe)))
[1] " 1" " 0" " #NUM!"
Code
print("Verificando o número de registro com valor #NUM! ")
[1] "Verificando o número de registro com valor #NUM! "
Code
table(dados$is_safe%in%c( "#NUM!" ))
FALSE TRUE
7996 3
Code
print("Deletando os registros com valor #NUM! ")
[1] "Deletando os registros com valor #NUM! "
Code
dados <-filter(dados, is_safe !="#NUM!")print("Verificando altteração ")
[1] "Verificando altteração "
Code
table(dados$is_safe%in%c( "#NUM!" ))
FALSE
7996
Code
#Alterando os n´veis para o rótuloprint("Criando níveis para o rótulo")
# Tabela Descritivatheme_gtsummary_language(language ="pt", # Define o idioma para Portuguêsdecimal.mark =",", # Define a vírgula como separador decimalbig.mark =".", # Define o ponto como separador de milharesiqr.sep ="-", # Define o hífen como separador para intervalos interquartisci.sep ="-", # Define o hífen como separador para intervalos de confiançaset_theme =TRUE# Aplica essas configurações como tema padrão para as tabelas)
Setting theme "language: pt"
Code
list("tbl_summary-fn:percent_fun"=function(x) sprintf(x *100, fmt='%#.1f')) %>%set_gtsummary_theme() # Aplica a função personalizada de formatação de porcentagens como tema padrãotbl_summary(dados) # no final vamos ver como mudar diversas características da tabela
Características
N = 7.9961
aluminium
0,07 (0,04-0,28)
ammonia
14 (7-22)
arsenic
0,05 (0,03-0,10)
barium
1,19 (0,56-2,49)
cadmium
0,040 (0,008-0,070)
chloramine
0,53 (0,10-4,24)
chromium
0,09 (0,05-0,44)
copper
0,75 (0,09-1,39)
flouride
0,77 (0,41-1,16)
bacteria
0,22 (0,00-0,61)
viruses
0,01 (0,00-0,70)
lead
0,10 (0,05-0,15)
nitrates
9,9 (5,0-14,6)
nitrites
1,42 (1,00-1,76)
mercury
0,0050 (0,0030-0,0080)
perchlorate
8 (2-29)
radium
2,41 (0,82-4,67)
selenium
0,050 (0,020-0,070)
silver
0,08 (0,04-0,24)
uranium
0,050 (0,020-0,070)
is_safe
impropria
7.084 (88.6%)
Potável
912 (11.4%)
1 Mediana (Q1-Q3); n (%)
1.7 Análise Multivariada
Code
# Selecionar variáveis numéricasnumeric_vars <- dados %>%select_if(is.numeric)# Calcular a matriz de correlaçãocorrelation_matrix <-cor(numeric_vars, method ="pearson", use ="complete.obs")# Visualizar a matriz de correlação 1library(ggcorrplot)ggcorrplot( correlation_matrix,lab =TRUE,hc.order =TRUE,type ="lower",colors =c("red", "white", "blue"))
Source Code
---title: "Análise Exploratória de Dados"author: "Walner Passos"date: "2025-07-15"format: html: theme: superhero # https://quarto.org/docs/output-formats/html-themes.html toc: true toc-depth: 2 number-sections: true code-fold: true code-tools: true df-print: pagededitor: visual---```{r setup, include=FALSE, message=FALSE, warning=FALSE}# Carregando pacotes necessárioslibrary(tidyverse)library(summarytools)library(ggplot2)library(esquisse)library(gtsummary)library(flextable)library(ggcorrplot)library(corrplot)library(dplyr)```# Análise Exploratória de Dados (EDA)## Apresentação do Conjunto de DadosUsaremos o conjunto de dados "WaterQuality" disponível no **Kaggle** em https://www.kaggle.com/datasets/mssmartypants/water-quality/data. Este é um conjunto de dados criado a partir de dados imaginários sobre a qualidade da água em um ambiente urbano.## Carregamento e Visualização Inicial dos Dados```{r carregamento dos dados, message=FALSE, warning=FALSE}# Carregar o datasetdados <- read.csv("waterQuality.csv")# Visualização inicial dos dadosstr(dados)```## Dicionário e Classificação das Variáveis- `aluminium` - dangerous if greater than 2.8- `ammonia` - dangerous if greater than 32.5- `arsenic` - dangerous if greater than 0.01- `barium` - dangerous if greater than 2- `cadmium` - dangerous if greater than 0.005- `chloramine` - dangerous if greater than 4- `chromium` - dangerous if greater than 0.1- `copper` - dangerous if greater than 1.3- `flouride` - dangerous if greater than 1.5- `bacteria` - dangerous if greater than 0- `viruses` - dangerous if greater than 0- `lead` - dangerous if greater than 0.015- `nitrates` - dangerous if greater than 10- `nitrites` - dangerous if greater than 1- `mercury` - dangerous if greater than 0.002- `perchlorate` - dangerous if greater than 56- `radium` - dangerous if greater than 5- `selenium` - dangerous if greater than 0.5- `silver` - dangerous if greater than 0.1- `uranium` - dangerous if greater than 0.3- `is_safe` - class attribute {0 - not safe, 1 - safe}## Análise das Variáveis```{r}summary(dados)```## Limpeza e Preparação dos Dados```{r}# Verificação de valores ausentesprint(paste('Número dados faltantes :', sum(is.na(dados))))#Alternado o tipo de dados da variável Ammoniaprint("Alterar a variável Ammonia de chr para numeric")dados$ammonia <-as.numeric(dados$ammonia)#Anakisando os dados do rótuloprint("Analisando os dados do Rótulo")print(paste("", unique(dados$is_safe)))print("Verificando o número de registro com valor #NUM! ")table(dados$is_safe%in%c( "#NUM!" ))print("Deletando os registros com valor #NUM! ")dados <-filter(dados, is_safe !="#NUM!")print("Verificando altteração ")table(dados$is_safe%in%c( "#NUM!" ))#Alterando os n´veis para o rótuloprint("Criando níveis para o rótulo")dados$is_safe <-factor(dados$is_safe, levels =c('0','1'), labels =c("impropria", "Potável"))print("Confirmando alteração")print(paste("", levels(dados$is_safe)))```## Análise Univariada### Descrição dos dados:```{r}# Estatísticas descritivasdescr(dados)# Tabela Descritivatheme_gtsummary_language(language ="pt", # Define o idioma para Portuguêsdecimal.mark =",", # Define a vírgula como separador decimalbig.mark =".", # Define o ponto como separador de milharesiqr.sep ="-", # Define o hífen como separador para intervalos interquartisci.sep ="-", # Define o hífen como separador para intervalos de confiançaset_theme =TRUE# Aplica essas configurações como tema padrão para as tabelas)list("tbl_summary-fn:percent_fun"=function(x) sprintf(x *100, fmt='%#.1f')) %>%set_gtsummary_theme() # Aplica a função personalizada de formatação de porcentagens como tema padrãotbl_summary(dados) # no final vamos ver como mudar diversas características da tabela```## Análise Multivariada```{r}# Selecionar variáveis numéricasnumeric_vars <- dados %>%select_if(is.numeric)# Calcular a matriz de correlaçãocorrelation_matrix <-cor(numeric_vars, method ="pearson", use ="complete.obs")# Visualizar a matriz de correlação 1library(ggcorrplot)ggcorrplot( correlation_matrix,lab =TRUE,hc.order =TRUE,type ="lower",colors =c("red", "white", "blue"))```