Professional Documents
Culture Documents
1
Exemplo de Análise de Dados - Red Wine Quality
Dataset: https://www.kaggle.com/uciml/red-wine-quality-cortez-et-al-2009
fixed acidity: most acids involved with wine or fixed or nonvolatile (do not evaporate readily)
volatile acidity: the amount of acetic acid in wine, which at too high of levels can lead to an unpleasant,
vinegar taste
citric acid: found in small quantities, citric acid can add 'freshness' and flavor to wines
residual sugar: the amount of sugar remaining after fermentation stops, it's rare to find wines with less than
1 gram/liter and wines with greater than 45 grams/liter are considered sweet
chlorides: the amount of salt in the wine
free sulfur dioxide: the free form of SO2 exists in equilibrium between molecular SO2 (as a dissolved gas)
and bisulfite ion; it prevents microbial growth and the oxidation of wine
total sulfur dioxide: amount of free and bound forms of S02; in low concentrations, SO2 is mostly
undetectable in wine, but at free SO2 concentrations over 50 ppm, SO2 becomes evident in the nose and
taste of wine
density: the density of water is close to that of water depending on the percent alcohol and sugar content
pH: describes how acidic or basic a wine is on a scale from 0 (very acidic) to 14 (very basic); most wines are
between 3-4 on the pH scale
sulphates: a wine additive which can contribute to sulfur dioxide gas (S02) levels, which acts as an
antimicrobial and antioxidant
alcohol: the percent alcohol content of the wine
quality: output variable (based on sensory data, score between 0 and 10)
Setup
Os pacotes de python que usaremos para essa análise de dados são:
Observações iniciais
Usaremos os métodos .head(), .info() e .describe() para ter uma noção geral de como o dataset está estruturado.
In [3]: wine.head() # Mostra as 5 primeiras linhas do dataset
Out[3]:
free total
fixed volatile citric residual
chlorides sulfur sulfur density pH sulphates alcohol quality
acidity acidity acid sugar
dioxide dioxide
0 7.4 0.70 0.00 1.9 0.076 11.0 34.0 0.9978 3.51 0.56 9.4 5
1 7.8 0.88 0.00 2.6 0.098 25.0 67.0 0.9968 3.20 0.68 9.8 5
2 7.8 0.76 0.04 2.3 0.092 15.0 54.0 0.9970 3.26 0.65 9.8 5
3 11.2 0.28 0.56 1.9 0.075 17.0 60.0 0.9980 3.16 0.58 9.8 6
4 7.4 0.70 0.00 1.9 0.076 11.0 34.0 0.9978 3.51 0.56 9.4 5
Pela tabela acima, temos uma ideia geral da organização do dataset. Em geral, dizemos que cada linha é uma observação e que as
colunas de fixed acidity a alcohol são as features. A coluna quality é a target. O nosso objetivo é identificar como as features afetam
a target, ou seja, como as características do vinho afetam a sua qualidade.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1599 entries, 0 to 1598
Data columns (total 12 columns):
fixed acidity 1599 non-null float64
volatile acidity 1599 non-null float64
citric acid 1599 non-null float64
residual sugar 1599 non-null float64
chlorides 1599 non-null float64
free sulfur dioxide 1599 non-null float64
total sulfur dioxide 1599 non-null float64
density 1599 non-null float64
pH 1599 non-null float64
sulphates 1599 non-null float64
alcohol 1599 non-null float64
quality 1599 non-null int64
dtypes: float64(11), int64(1)
memory usage: 150.0 KB
A saída de wine.info() acima nos diz que o dataset tem 12 colunas. A coluna quality é de tipo inteiro e as outras são floats. A
anotação non-null nos diz que não há dados faltantes (na prática, é comum que alguns dos dados não estejam disponíveis).
Out[5]:
free total
fixed volatile citric residual chlo sulph
sulfur sulfur density pH alcohol quality
acidity acidity acid sugar rides ates
dioxide dioxide
count 1599.0 1599.0 1599.0 1599.0 1599.0 1599.0 1599.0 1599.0 1599.0 1599.0 1599.0 1599.0
mean 8.3196 0.5278 0.2709 2.5388 0.0874 15.874 46.467 0.9967 3.3111 0.6581 10.422 5.6360
std 1.7410 0.1790 0.1948 1.4099 0.0470 10.460 32.895 0.0018 0.1543 0.1695 1.0656 0.8075
min 4.6000 0.1200 0.0000 0.9000 0.0120 1.0000 6.0000 0.9900 2.7400 0.3300 8.4000 3.0000
25% 7.1000 0.3900 0.0900 1.9000 0.0700 7.0000 22.000 0.9956 3.2100 0.5500 9.5000 5.0000
50% 7.9000 0.5200 0.2600 2.2000 0.0790 14.000 38.000 0.9967 3.3100 0.6200 10.200 6.0000
75% 9.2000 0.6400 0.4200 2.6000 0.0900 21.000 62.000 0.9978 3.4000 0.7300 11.100 6.0000
max 15.900 1.5800 1.0000 15.500 0.6110 72.000 289.00 1.0036 4.0100 2.0000 14.900 8.0000
Com wine.describe(), podemos ver algumas estatísticas sobre o dataset. Por exemplo, de acordo com a descrição do dataset, a
qualidade pode variar entre 0 e 10. No entanto, as observações que nós temos só têm qualidades entre 3 e 8, com uma média de
5,63. Além disso, olhando o desvio padrão (std), que indica o quanto os valores de alguma coluna variam, observamos que:
std
os valores de total sulfur dioxide variam muito (std = 32.9 , = 0.71 )
mean
std
os valores de density variam pouco (std = 0.001887 , = 0.001893 )
mean
O próximo passo é identificar melhor as características de cada feature (nesse exemplo só analisaremos algumas das features). Para
isso usaremos histogramas.
quality
In [6]: wine['quality'].hist()
plt.show()
No histograma acima, vemos que a maioria das observações tem uma qualidade intermediária (5 ou 6) e poucas tem os valores mais
extremos. Em torno de 680 observações tem qualidade 5 (a qualidade mais comum).
residual sugar
In [7]: wine['residual sugar'].hist()
plt.show()
Observamos que os valores de residual sugar são, em geral, pequenos (o gráfico é mais alto na esquerda e tem uma cauda direita).
No entanto, existem outliers (observações com valores que distoam da maioria), como as poucas observações com valores próximos
de 14. Além disso, a maioria dos valores dessa feature estão entre 1 e 4.
chlorides
In [8]: wine['chlorides'].hist()
plt.show()
Observamos que chlorides também tem uma cauda direta e outliers. Pelo gráfico acima, quase todos os valores de chlorides estão
entre 0 e 0,15. Pelo saída de wine.describe() (visto no início do notebook), a média dessa feature é 0,087.
Por exemplo:
Os scatter plots (gráficos de dispersão) acima representam cada observação por meio de um ponto. Usaremos eles novamente mais
a frente.
A partir da matriz acima, podemos identificar que as features que têm maior correlação com a qualidade são: volatile acidity,
sulphates e alcohol. Portanto, analisaremos as relações entre essas features por meio de scatter plots. Nos gráficos abaixo,
deixaremos os pontos transparentes por meio do parâmetro alpha, para que fique claro onde há maior concentração de pontos
(caso contrário, alguns pontos seriam "escondidos" por outros pontos).
Nos gráficos acima, podemos observar que há, de fato, correlação entre a qualidade e volatile acidity, sulphates e alcohol.
Podemos ainda analisar como duas features juntas afetam a qualidade. Nos gráficos abaixo, a cor de cada ponto indica a qualidade.
Nos gráficos acima, vemos novamente que valores menores de volatile acidity e maiores de sulphates e alcohol correspondem a
maiores qualidades.