ANÁLISE EXPLORATÓRIA DO BANCO DE DADOS: RED WINE QUALITY
|
|
no |
Conforme consta no site da IBM,
a análise exploratória de dados (EDA) é usada por cientistas de dados
para analisar e investigar
O objetivo principal da EDA é ajudar a analisar dados antes de fazer
qualquer suposição.Ela pode ajudar na identificação de erros |
Contexto
Os dois conjuntos de dados estão relacionados
com variantes tinto e branco do vinho português. Para mais detalhes,
consulte a referência [Cortez et al., 2009]. Por questões de privacidade
e logística, apenas variáveis físico-químicas (entradas) e sensoriais
(saídas) estão disponíveis (por exemplo, não há dados sobre tipos de
uva, marca de vinho, preço de venda do vinho, etc.).Esses conjuntos de
dados podem ser vistos como tarefas de classificação ou regressão. As
classes são ordenadas e não equilibradas (por exemplo, há muito mais
vinhos normais do que excelentes ou pobres).
As
variáveis contidas nesse dataset são:
Variáveis de entrada (com
base em testes físico-químicos:
1 - acidez fixa
2 - acidez
volátil
3 - ácido cítrico
4 - açúcar residual
5 -
cloretos
6 - dióxido de enxofre livre
7 - dióxido de enxofre
total
8 - densidade
9 - pH
10 - sulfatos
11 -
álcool
Variável de saída (com base em dados sensoriais):
12 -
qualidade (pontuação entre 0 e 10)
Passo a
passo
Após fazer o download do arquivo, salve ele dentro da
pasta do seu projeto. Faça o carregamento do arquivo usando
read.csv (perceba que a extensão do arquivo baixo é .csv).
Nomearemos o nosso dataset para redwine e então faremos o
carregamento do arquivo.
redwine <- read.csv('winequality-red.csv')
Conhecendo nosso dataset
Usamos a função dim
para mostrar a dimensão do nosso dataset:
dim(redwine)
## [1] 1599 12
Neste caso percebemos que nosso dataset tem 1599 observações
(linhas) e 12 variáveis (colunas)
Inicialmente
podemos usar a função str para observarmos quais são os tipos de
dados que constam em cada variável:
str(redwine)
## 'data.frame': 1599 obs. of 12 variables:
## $ fixed.acidity : num 7.4 7.8 7.8 11.2 7.4 7.4 7.9 7.3 7.8 7.5 ...
## $ volatile.acidity : num 0.7 0.88 0.76 0.28 0.7 0.66 0.6 0.65 0.58 0.5 ...
## $ citric.acid : num 0 0 0.04 0.56 0 0 0.06 0 0.02 0.36 ...
## $ residual.sugar : num 1.9 2.6 2.3 1.9 1.9 1.8 1.6 1.2 2 6.1 ...
## $ chlorides : num 0.076 0.098 0.092 0.075 0.076 0.075 0.069 0.065 0.073 0.071 ...
## $ free.sulfur.dioxide : num 11 25 15 17 11 13 15 15 9 17 ...
## $ total.sulfur.dioxide: num 34 67 54 60 34 40 59 21 18 102 ...
## $ density : num 0.998 0.997 0.997 0.998 0.998 ...
## $ pH : num 3.51 3.2 3.26 3.16 3.51 3.51 3.3 3.39 3.36 3.35 ...
## $ sulphates : num 0.56 0.68 0.65 0.58 0.56 0.56 0.46 0.47 0.57 0.8 ...
## $ alcohol : num 9.4 9.8 9.8 9.8 9.4 9.4 9.4 10 9.5 10.5 ...
## $ quality : int 5 5 5 6 5 5 5 7 7 5 ...
Conforme função utilizada acima, 11 das 12 variáveis são
consideradas variáveis numéricas, apenas a variável 12 que faz
referência a qualidade é considerada uma variável de tipo
inteiro.
Utilizaremos a função head para lermos
os primeiros dados do nosso dataset e a função tail para lermos
os últimos dados:
head(redwine)
## fixed.acidity volatile.acidity citric.acid residual.sugar chlorides
## 1 7.4 0.70 0.00 1.9 0.076
## 2 7.8 0.88 0.00 2.6 0.098
## 3 7.8 0.76 0.04 2.3 0.092
## 4 11.2 0.28 0.56 1.9 0.075
## 5 7.4 0.70 0.00 1.9 0.076
## 6 7.4 0.66 0.00 1.8 0.075
## free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol
## 1 11 34 0.9978 3.51 0.56 9.4
## 2 25 67 0.9968 3.20 0.68 9.8
## 3 15 54 0.9970 3.26 0.65 9.8
## 4 17 60 0.9980 3.16 0.58 9.8
## 5 11 34 0.9978 3.51 0.56 9.4
## 6 13 40 0.9978 3.51 0.56 9.4
## quality
## 1 5
## 2 5
## 3 5
## 4 6
## 5 5
## 6 5
tail(redwine)
## fixed.acidity volatile.acidity citric.acid residual.sugar chlorides
## 1594 6.8 0.620 0.08 1.9 0.068
## 1595 6.2 0.600 0.08 2.0 0.090
## 1596 5.9 0.550 0.10 2.2 0.062
## 1597 6.3 0.510 0.13 2.3 0.076
## 1598 5.9 0.645 0.12 2.0 0.075
## 1599 6.0 0.310 0.47 3.6 0.067
## free.sulfur.dioxide total.sulfur.dioxide density pH sulphates alcohol
## 1594 28 38 0.99651 3.42 0.82 9.5
## 1595 32 44 0.99490 3.45 0.58 10.5
## 1596 39 51 0.99512 3.52 0.76 11.2
## 1597 29 40 0.99574 3.42 0.75 11.0
## 1598 32 44 0.99547 3.57 0.71 10.2
## 1599 18 42 0.99549 3.39 0.66 11.0
## quality
## 1594 6
## 1595 5
## 1596 6
## 1597 6
## 1598 5
## 1599 6
Também podemos ver o nosso dataset utizando a função
View, note que a letra V é maiúscula.
View(redwine)
Verificaremos se há valores nulos no nosso dataset.
Caso existisse valores nulos, poderíamos contabilizá-los da seguinte
forma:
sum(is.null(redwine))
## [1] 0
sum(is.na(redwine))
## [1] 0
MEDIDAS DE CENTRALIDADE (MÉDIA / MEDIANA)
Qual é a média da variável alcohol?
mean(redwine$alcohol)
## [1] 10.42298
Qual é a mediana da variável residual.sugar?
median(redwine$residual.sugar)
## [1] 2.2
Primeiro vamos encontrar a frequência:
frequencia <- table(redwine$pH)
frequencia
##
## 2.74 2.86 2.87 2.88 2.89 2.9 2.92 2.93 2.94 2.95 2.98 2.99 3 3.01 3.02 3.03
## 1 1 1 2 4 1 4 3 4 1 5 2 6 5 8 6
## 3.04 3.05 3.06 3.07 3.08 3.09 3.1 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19
## 10 8 10 11 11 11 19 9 20 13 21 34 36 27 30 25
## 3.2 3.21 3.22 3.23 3.24 3.25 3.26 3.27 3.28 3.29 3.3 3.31 3.32 3.33 3.34 3.35
## 39 36 39 32 29 26 53 35 42 46 57 39 45 37 43 39
## 3.36 3.37 3.38 3.39 3.4 3.41 3.42 3.43 3.44 3.45 3.46 3.47 3.48 3.49 3.5 3.51
## 56 37 48 48 37 34 33 17 29 20 22 21 19 10 14 15
## 3.52 3.53 3.54 3.55 3.56 3.57 3.58 3.59 3.6 3.61 3.62 3.63 3.66 3.67 3.68 3.69
## 18 17 16 8 11 10 10 8 7 8 4 3 4 3 5 4
## 3.7 3.71 3.72 3.74 3.75 3.78 3.85 3.9 4.01
## 1 4 3 1 1 2 1 2 2
Como segundo passo vamos encontrar qual é o valor que mais se
repete:
frequencia[frequencia == max(frequencia)]
## 3.3
## 57
No terceiro e último passo, criaremos nossa função para Moda.
moda <- function(x) {
tab = table(x)
tab[tab == max(tab)]
}
Eba, função criada! Vamos rodar a nossa variável
nela:
moda(redwine$pH)
## 3.3
## 57
Bem mais simples depois que criamos a função!
MEDIDAS DE DISPERSÃO ((DESVIO PADRÃO, VARIÂNCIA, COEFICIENTE DE
VARIAÇÃO, AMPLITUDE E QUARTIS)
Desvio padrão da variável density:
sd(redwine$density, na.rm = TRUE)
## [1] 0.001887334
Variância da variável density:
var(redwine$density, na.rm = TRUE)
## [1] 3.562029e-06
Coeficiente de variação da variável density:
sd(redwine$density, na.rm = TRUE)/mean(redwine$density, na.rm = TRUE)
## [1] 0.001893494
Valor mínimo da variável density:
min(redwine$density, na.rm = TRUE)
## [1] 0.99007
Valor máximo da variável density:
max(redwine$density, na.rm = TRUE)
## [1] 1.00369
Apresentando os valores mínimos e máximosapenas com uma função
(variável density):
range(redwine$density, na.rm = TRUE)
## [1] 0.99007 1.00369
Amplitude da varivável density:
diff(range(redwine$density, na.rm = TRUE))
## [1] 0.01362
Quartis da variávelalcohol:
quantile(redwine$alcohol)
## 0% 25% 50% 75% 100%
## 8.4 9.5 10.2 11.1 14.9
Podemos utilizar a função summary para resumir os dados da
variável alcohol<
summary(redwine$alcohol)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8.40 9.50 10.20 10.42 11.10 14.90
Ou podemos mostrar os mesmos valores resumidos para o dataset
inteiro:
summary(redwine)
## fixed.acidity volatile.acidity citric.acid residual.sugar
## Min. : 4.60 Min. :0.1200 Min. :0.000 Min. : 0.900
## 1st Qu.: 7.10 1st Qu.:0.3900 1st Qu.:0.090 1st Qu.: 1.900
## Median : 7.90 Median :0.5200 Median :0.260 Median : 2.200
## Mean : 8.32 Mean :0.5278 Mean :0.271 Mean : 2.539
## 3rd Qu.: 9.20 3rd Qu.:0.6400 3rd Qu.:0.420 3rd Qu.: 2.600
## Max. :15.90 Max. :1.5800 Max. :1.000 Max. :15.500
## chlorides free.sulfur.dioxide total.sulfur.dioxide density
## Min. :0.01200 Min. : 1.00 Min. : 6.00 Min. :0.9901
## 1st Qu.:0.07000 1st Qu.: 7.00 1st Qu.: 22.00 1st Qu.:0.9956
## Median :0.07900 Median :14.00 Median : 38.00 Median :0.9968
## Mean :0.08747 Mean :15.87 Mean : 46.47 Mean :0.9967
## 3rd Qu.:0.09000 3rd Qu.:21.00 3rd Qu.: 62.00 3rd Qu.:0.9978
## Max. :0.61100 Max. :72.00 Max. :289.00 Max. :1.0037
## pH sulphates alcohol quality
## Min. :2.740 Min. :0.3300 Min. : 8.40 Min. :3.000
## 1st Qu.:3.210 1st Qu.:0.5500 1st Qu.: 9.50 1st Qu.:5.000
## Median :3.310 Median :0.6200 Median :10.20 Median :6.000
## Mean :3.311 Mean :0.6581 Mean :10.42 Mean :5.636
## 3rd Qu.:3.400 3rd Qu.:0.7300 3rd Qu.:11.10 3rd Qu.:6.000
## Max. :4.010 Max. :2.0000 Max. :14.90 Max. :8.000
Quais são os valores únicos desta variável?
unique(redwine$quality)
## [1] 5 6 7 4 8 3
Podemos plotar um histograma da nossa variável
alcohol:
hist(redwine$alcohol, freq = TRUE, labels = TRUE)
A mesma variável, porém sem os dados de frequência:
color <- colorRampPalette(c("DeepPink","DeepSkyBlue"))
hist(redwine$alcohol,
main = "Histograma Frequência X Alcohol",
xlab = "Variável Alcohol", ylab = "Frequência",
col = c(color(15)),
border = FALSE,
labels = TRUE)
Para encontrarmos outliers, podemos plotar um boxplot:
boxplot(redwine$quality)
Viviane Rocha