Engenharia de Software para Ciência de Dados - PUC-Rio Introdução à Análise Exploratória de Dados com a Biblioteca Pandas
Professores: Marcos Kalinowski e Tatiana Escovedo e Villamizar
Aluno: Walter Dominguez
Site de Apoio: Web
Book chamado para : seleção de caracteristicas
Estória do Usuário :
[US01] Como Gerente da vinícula Quero explorar as propriedades fisico-química de um vinho para saber como elas influenciam na classificação da qualidade de um vinho (obtida sensorialmente por especialistas, através de pontuação da qualidade de 0 a 10).
Perguntas dos gestores.
Como as caracteristicas dos vinhos contidos no conjuntos de dados influenciam na classificaçãp do vinho ?
Perguntas dos analistas.
Como construir um modelo de classificação que preveja sua qualidade com base nas características físicas e químicas do vinho (a qualidade do vinho foi avaliada com base em seu sabor).
Descrição dos dados.
Os Data set foram obtidos Conjunto de dados sobre Vinho da UCI Machine Learning Repository [Web] (em caso de dúvida consultar Home Page do Paulo Cortez , assim como a descrição de como foram coletados os dados.).
Esse conjunto de dados organizado contém 1.599 vinhos tintos com 11 variáveis sobre as propriedades químicas do vinho. Pelo menos três especialistas em vinhos avaliaram a qualidade de cada vinho, fornecendo uma classificação entre 0 (muito ruim) e 10 (muito excelente).
Requisitos funcionais e não-funcionais.
Os dois conjuntos de dados: Conjunto de valores de cada caracteristica e avaliação de vinho tinto (red) winequality-red.csv Web
Conjunto de valores de cada caracteristica e avaliação de vinho branco (verde) winequality-white.csv Web
Na referência acima, foram criados dois conjuntos de dados, utilizando amostras de vinho tinto e branco.
Em cada arquivo .csv contém: Entradas com elementos químicos dos vinhos (por exemplo, valor de PH por vinho). Saída é baseada em dados sensoriais (mediana de pelo menos 3 avaliações feitas por peritos em vinho - ruim, médio e excelente). Cada perito avaliou a qualidade de cada vinho entre 0 (muito mau) e 10 (muito excelente).
Variáveis de entrada que desejam ser preditas ou descritas, assim como as que possivelmente são relacionadas. Variáveis de entrada (com base em testes físico-químicos): acidez fixa acidez volátil ácido cítrico açúcar residual cloretos dióxido de enxofre livre dióxido de enxofre total densidade pH sulfatos álcool
Variável de saída (com base em dados sensoriais):
qualidade (pontuação entre 0 e 10) Valores de Atributos em Falta: Nenhum
Definição do problema de Ciência de dados (CD). Como as caracteristicas dos vinhos contidos no conjuntos de dados inflenciam na classificaçãp do vinho ? Tipo de problema: Classificação Tipo de aprendizado: supervisionado Utiliza dois grupos: X, com os atributos a serem utilizados na predição do valor Variáveis de entrada (com base em testes físico-químicos): Y, com o atributo para o qual se deve fazer a predição do valor (atributo-alvo) qualidade (pontuação entre 0 e 10) O atributo alvo é categórico
Fonte:
Conjunto de dados sobre Vinho da UCI Machine Learning Repository Web
Informação Relevante: Os dois conjuntos de dados estão relacionados com as variantes tinto e branco do vinho português "Vinho Verde".
Para mais pormenores, consultar: http://www.vinhoverde.pt/en/ ou a referência [Cortez et al., 2009]. Devido a 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.).
Número de Instâncias: vinho tinto - 1599; vinho branco - 4898. Número de Atributos: 11 + atributo de saída Nota: vários dos atributos podem estar correlacionados, por isso faz sentido aplicar algum tipo de selecção de características.
Informação sobre os atributos: Para mais informações, ler [Cortez et al., 2009].
Documentos relevantes:
P. Cortez, A. Cerdeira, F. Almeida, T. Matos e J. Reis. Modelagem de preferências de vinho por mineração de dados de propriedades físico-químicas. Em Decision Support Systems, Elsevier, 47(4):547-553, 2009. Disponível em: Web Citação: P. Cortez, A. Cerdeira, F. Almeida, T. Matos e J. Reis. Modelagem de preferências de vinho por mineração de dados de propriedades físico-químicas. Em Decision Support Systems, Elsevier, 47(4):547-553, 2009.
Paulo Cortez, Universidade do Minho, Guimarães, Portugal, Web A. Cerdeira, F. Almeida, T. Matos e J. Reis, Comissão de Viticultura da Região dos Vinhos Verdes (CVRVV) , Porto, Portugal @2009
# imports necessários
import numpy as np # computação matemática (arrays).
import pandas as pd # manipulação e análise de dados, o "excel" do Python # modelo usado como guia https://colab.research.go ogle.com/drive/19FMe4m37xDNZPHtz-40ZA-MMvZpMpCyt?u sp=sharing#scrollTo= t_CREFDWPt2G # linguagem de referência python https://colab.researc h.google.com/drive/1RVt_lKLXvRm_sglQqi5ts_u2GUYm87 H0?usp=sharing#scrollTo=pJrSlM8M0d**
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as ms # para tratamento de missings
from matplotlib import cm
from pandas import set_option
from pandas.plotting import scatter_matrix
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.ensemble import BaggingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier
# configuração para não exibir os warnings
import warnings
warnings.filterwarnings("ignore")
# importando dados de um arquvo crv para dataframe vinhoreddados : VINHO TINTO
# url a importar
url_dados_wred = 'https://wdz.eng.br/Curso/Atividade2/arquivos/winequality-red.csv'
#rotulos dos atributos do dadtaset
atributosred = ['acidezfixa', 'acidezvolátil', 'ácidocítrico', 'acucarresidual', 'cloretos', 'dióxidoenxofrelivre', 'dióxidoenxofretotal', 'densidade', 'pH', 'sulfatos', 'alcool']
#carga do dataset
vinhoreddados = pd.read_csv(url_dados_wred, delimiter=';')
vinhoreddados.head()
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
# importando dados de um arquvo crv para dataframe vinhowhitedados. VINHO BRANCO
# url a importar
url_dados_wwhite = 'https://wdz.eng.br/Curso/Atividade2/arquivos/winequality-white.csv'
#rotulos dos atributos do dadtaset
atributoswhite = ['acidezfixa', 'acidezvolátil', 'ácidocítrico', 'acucarresidual', 'cloretos', 'dióxidoenxofrelivre', 'dióxidoenxofretotal', 'densidade', 'pH', 'sulfatos', 'alcool']
#carga do dataset
vinhowhitedados = pd.read_csv(url_dados_wwhite, delimiter=';')
vinhowhitedados.head()
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 7.0 | 0.27 | 0.36 | 20.7 | 0.045 | 45.0 | 170.0 | 1.0010 | 3.00 | 0.45 | 8.8 | 6 |
1 | 6.3 | 0.30 | 0.34 | 1.6 | 0.049 | 14.0 | 132.0 | 0.9940 | 3.30 | 0.49 | 9.5 | 6 |
2 | 8.1 | 0.28 | 0.40 | 6.9 | 0.050 | 30.0 | 97.0 | 0.9951 | 3.26 | 0.44 | 10.1 | 6 |
3 | 7.2 | 0.23 | 0.32 | 8.5 | 0.058 | 47.0 | 186.0 | 0.9956 | 3.19 | 0.40 | 9.9 | 6 |
4 | 7.2 | 0.23 | 0.32 | 8.5 | 0.058 | 47.0 | 186.0 | 0.9956 | 3.19 | 0.40 | 9.9 | 6 |
https://colab.research.google.com/drive/1MCCMFdsGaXIQjdAYpFrqTyw0bvtXhuYb#scrollTo=8w7HuVO9-XRo
PERGUNTAS SOBRE A AMOSTRA:
Exame as dimensões do conjunto de dados, suas informações e alguns exemplos de
# exibindo as dimensões do dataset
vinhoreddados.shape
(1599, 12)
# exibindo as dimensões do dataset de vinho Branco
vinhowhitedados.shape
(4898, 12)
# Mostra as informações do dataset
print(vinhoreddados.info())
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1599 entries, 0 to 1598 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 fixed acidity 1599 non-null float64 1 volatile acidity 1599 non-null float64 2 citric acid 1599 non-null float64 3 residual sugar 1599 non-null float64 4 chlorides 1599 non-null float64 5 free sulfur dioxide 1599 non-null float64 6 total sulfur dioxide 1599 non-null float64 7 density 1599 non-null float64 8 pH 1599 non-null float64 9 sulphates 1599 non-null float64 10 alcohol 1599 non-null float64 11 quality 1599 non-null int64 dtypes: float64(11), int64(1) memory usage: 150.0 KB None
# Mostra as informações do dataset
print(vinhowhitedados.info())
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4898 entries, 0 to 4897 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 fixed acidity 4898 non-null float64 1 volatile acidity 4898 non-null float64 2 citric acid 4898 non-null float64 3 residual sugar 4898 non-null float64 4 chlorides 4898 non-null float64 5 free sulfur dioxide 4898 non-null float64 6 total sulfur dioxide 4898 non-null float64 7 density 4898 non-null float64 8 pH 4898 non-null float64 9 sulphates 4898 non-null float64 10 alcohol 4898 non-null float64 11 quality 4898 non-null int64 dtypes: float64(11), int64(1) memory usage: 459.3 KB None
# Mostra as 10 primeiras linhas do dataset. VINHO TINTO
vinhoreddados.head(10)
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
5 | 7.4 | 0.66 | 0.00 | 1.8 | 0.075 | 13.0 | 40.0 | 0.9978 | 3.51 | 0.56 | 9.4 | 5 |
6 | 7.9 | 0.60 | 0.06 | 1.6 | 0.069 | 15.0 | 59.0 | 0.9964 | 3.30 | 0.46 | 9.4 | 5 |
7 | 7.3 | 0.65 | 0.00 | 1.2 | 0.065 | 15.0 | 21.0 | 0.9946 | 3.39 | 0.47 | 10.0 | 7 |
8 | 7.8 | 0.58 | 0.02 | 2.0 | 0.073 | 9.0 | 18.0 | 0.9968 | 3.36 | 0.57 | 9.5 | 7 |
9 | 7.5 | 0.50 | 0.36 | 6.1 | 0.071 | 17.0 | 102.0 | 0.9978 | 3.35 | 0.80 | 10.5 | 5 |
# Mostra as 10 primeiras linhas do dataset. VINHO BRANCO
vinhowhitedados.head(10)
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 7.0 | 0.27 | 0.36 | 20.7 | 0.045 | 45.0 | 170.0 | 1.0010 | 3.00 | 0.45 | 8.8 | 6 |
1 | 6.3 | 0.30 | 0.34 | 1.6 | 0.049 | 14.0 | 132.0 | 0.9940 | 3.30 | 0.49 | 9.5 | 6 |
2 | 8.1 | 0.28 | 0.40 | 6.9 | 0.050 | 30.0 | 97.0 | 0.9951 | 3.26 | 0.44 | 10.1 | 6 |
3 | 7.2 | 0.23 | 0.32 | 8.5 | 0.058 | 47.0 | 186.0 | 0.9956 | 3.19 | 0.40 | 9.9 | 6 |
4 | 7.2 | 0.23 | 0.32 | 8.5 | 0.058 | 47.0 | 186.0 | 0.9956 | 3.19 | 0.40 | 9.9 | 6 |
5 | 8.1 | 0.28 | 0.40 | 6.9 | 0.050 | 30.0 | 97.0 | 0.9951 | 3.26 | 0.44 | 10.1 | 6 |
6 | 6.2 | 0.32 | 0.16 | 7.0 | 0.045 | 30.0 | 136.0 | 0.9949 | 3.18 | 0.47 | 9.6 | 6 |
7 | 7.0 | 0.27 | 0.36 | 20.7 | 0.045 | 45.0 | 170.0 | 1.0010 | 3.00 | 0.45 | 8.8 | 6 |
8 | 6.3 | 0.30 | 0.34 | 1.6 | 0.049 | 14.0 | 132.0 | 0.9940 | 3.30 | 0.49 | 9.5 | 6 |
9 | 8.1 | 0.22 | 0.43 | 1.5 | 0.044 | 28.0 | 129.0 | 0.9938 | 3.22 | 0.45 | 11.0 | 6 |
# Mostra as 10 últimas linhas do dataset
vinhoreddados.tail(10)
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1589 | 6.6 | 0.725 | 0.20 | 7.8 | 0.073 | 29.0 | 79.0 | 0.99770 | 3.29 | 0.54 | 9.2 | 5 |
1590 | 6.3 | 0.550 | 0.15 | 1.8 | 0.077 | 26.0 | 35.0 | 0.99314 | 3.32 | 0.82 | 11.6 | 6 |
1591 | 5.4 | 0.740 | 0.09 | 1.7 | 0.089 | 16.0 | 26.0 | 0.99402 | 3.67 | 0.56 | 11.6 | 6 |
1592 | 6.3 | 0.510 | 0.13 | 2.3 | 0.076 | 29.0 | 40.0 | 0.99574 | 3.42 | 0.75 | 11.0 | 6 |
1593 | 6.8 | 0.620 | 0.08 | 1.9 | 0.068 | 28.0 | 38.0 | 0.99651 | 3.42 | 0.82 | 9.5 | 6 |
1594 | 6.2 | 0.600 | 0.08 | 2.0 | 0.090 | 32.0 | 44.0 | 0.99490 | 3.45 | 0.58 | 10.5 | 5 |
1595 | 5.9 | 0.550 | 0.10 | 2.2 | 0.062 | 39.0 | 51.0 | 0.99512 | 3.52 | 0.76 | 11.2 | 6 |
1596 | 6.3 | 0.510 | 0.13 | 2.3 | 0.076 | 29.0 | 40.0 | 0.99574 | 3.42 | 0.75 | 11.0 | 6 |
1597 | 5.9 | 0.645 | 0.12 | 2.0 | 0.075 | 32.0 | 44.0 | 0.99547 | 3.57 | 0.71 | 10.2 | 5 |
1598 | 6.0 | 0.310 | 0.47 | 3.6 | 0.067 | 18.0 | 42.0 | 0.99549 | 3.39 | 0.66 | 11.0 | 6 |
# Mostra as 10 últimas linhas do dataset
vinhoreddados.tail(10)
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1589 | 6.6 | 0.725 | 0.20 | 7.8 | 0.073 | 29.0 | 79.0 | 0.99770 | 3.29 | 0.54 | 9.2 | 5 |
1590 | 6.3 | 0.550 | 0.15 | 1.8 | 0.077 | 26.0 | 35.0 | 0.99314 | 3.32 | 0.82 | 11.6 | 6 |
1591 | 5.4 | 0.740 | 0.09 | 1.7 | 0.089 | 16.0 | 26.0 | 0.99402 | 3.67 | 0.56 | 11.6 | 6 |
1592 | 6.3 | 0.510 | 0.13 | 2.3 | 0.076 | 29.0 | 40.0 | 0.99574 | 3.42 | 0.75 | 11.0 | 6 |
1593 | 6.8 | 0.620 | 0.08 | 1.9 | 0.068 | 28.0 | 38.0 | 0.99651 | 3.42 | 0.82 | 9.5 | 6 |
1594 | 6.2 | 0.600 | 0.08 | 2.0 | 0.090 | 32.0 | 44.0 | 0.99490 | 3.45 | 0.58 | 10.5 | 5 |
1595 | 5.9 | 0.550 | 0.10 | 2.2 | 0.062 | 39.0 | 51.0 | 0.99512 | 3.52 | 0.76 | 11.2 | 6 |
1596 | 6.3 | 0.510 | 0.13 | 2.3 | 0.076 | 29.0 | 40.0 | 0.99574 | 3.42 | 0.75 | 11.0 | 6 |
1597 | 5.9 | 0.645 | 0.12 | 2.0 | 0.075 | 32.0 | 44.0 | 0.99547 | 3.57 | 0.71 | 10.2 | 5 |
1598 | 6.0 | 0.310 | 0.47 | 3.6 | 0.067 | 18.0 | 42.0 | 0.99549 | 3.39 | 0.66 | 11.0 | 6 |
# exibindo as últimas linhas
vinhowhitedados.tail(10)
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
4888 | 6.8 | 0.220 | 0.36 | 1.20 | 0.052 | 38.0 | 127.0 | 0.99330 | 3.04 | 0.54 | 9.2 | 5 |
4889 | 4.9 | 0.235 | 0.27 | 11.75 | 0.030 | 34.0 | 118.0 | 0.99540 | 3.07 | 0.50 | 9.4 | 6 |
4890 | 6.1 | 0.340 | 0.29 | 2.20 | 0.036 | 25.0 | 100.0 | 0.98938 | 3.06 | 0.44 | 11.8 | 6 |
4891 | 5.7 | 0.210 | 0.32 | 0.90 | 0.038 | 38.0 | 121.0 | 0.99074 | 3.24 | 0.46 | 10.6 | 6 |
4892 | 6.5 | 0.230 | 0.38 | 1.30 | 0.032 | 29.0 | 112.0 | 0.99298 | 3.29 | 0.54 | 9.7 | 5 |
4893 | 6.2 | 0.210 | 0.29 | 1.60 | 0.039 | 24.0 | 92.0 | 0.99114 | 3.27 | 0.50 | 11.2 | 6 |
4894 | 6.6 | 0.320 | 0.36 | 8.00 | 0.047 | 57.0 | 168.0 | 0.99490 | 3.15 | 0.46 | 9.6 | 5 |
4895 | 6.5 | 0.240 | 0.19 | 1.20 | 0.041 | 30.0 | 111.0 | 0.99254 | 2.99 | 0.46 | 9.4 | 6 |
4896 | 5.5 | 0.290 | 0.30 | 1.10 | 0.022 | 20.0 | 110.0 | 0.98869 | 3.34 | 0.38 | 12.8 | 7 |
4897 | 6.0 | 0.210 | 0.38 | 0.80 | 0.020 | 22.0 | 98.0 | 0.98941 | 3.26 | 0.32 | 11.8 | 6 |
# Verificando os tipos de cada coluna
vinhoreddados.dtypes
fixed acidity float64 volatile acidity float64 citric acid float64 residual sugar float64 chlorides float64 free sulfur dioxide float64 total sulfur dioxide float64 density float64 pH float64 sulphates float64 alcohol float64 quality int64 dtype: object
# Verificando os tipos de cada coluna
vinhowhitedados.dtypes
fixed acidity float64 volatile acidity float64 citric acid float64 residual sugar float64 chlorides float64 free sulfur dioxide float64 total sulfur dioxide float64 density float64 pH float64 sulphates float64 alcohol float64 quality int64 dtype: object
# Faz um resumo estatístico do dataset (média, desvio padrão, mínimo, máximo e os quartis)
vinhoreddados.describe()
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 | 1599.000000 |
mean | 8.319637 | 0.527821 | 0.270976 | 2.538806 | 0.087467 | 15.874922 | 46.467792 | 0.996747 | 3.311113 | 0.658149 | 10.422983 | 5.636023 |
std | 1.741096 | 0.179060 | 0.194801 | 1.409928 | 0.047065 | 10.460157 | 32.895324 | 0.001887 | 0.154386 | 0.169507 | 1.065668 | 0.807569 |
min | 4.600000 | 0.120000 | 0.000000 | 0.900000 | 0.012000 | 1.000000 | 6.000000 | 0.990070 | 2.740000 | 0.330000 | 8.400000 | 3.000000 |
25% | 7.100000 | 0.390000 | 0.090000 | 1.900000 | 0.070000 | 7.000000 | 22.000000 | 0.995600 | 3.210000 | 0.550000 | 9.500000 | 5.000000 |
50% | 7.900000 | 0.520000 | 0.260000 | 2.200000 | 0.079000 | 14.000000 | 38.000000 | 0.996750 | 3.310000 | 0.620000 | 10.200000 | 6.000000 |
75% | 9.200000 | 0.640000 | 0.420000 | 2.600000 | 0.090000 | 21.000000 | 62.000000 | 0.997835 | 3.400000 | 0.730000 | 11.100000 | 6.000000 |
max | 15.900000 | 1.580000 | 1.000000 | 15.500000 | 0.611000 | 72.000000 | 289.000000 | 1.003690 | 4.010000 | 2.000000 | 14.900000 | 8.000000 |
# Faz um resumo estatístico do dataset (média, desvio padrão, mínimo, máximo e os quartis)
vinhowhitedados.describe()
fixed acidity | volatile acidity | citric acid | residual sugar | chlorides | free sulfur dioxide | total sulfur dioxide | density | pH | sulphates | alcohol | quality | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 | 4898.000000 |
mean | 6.854788 | 0.278241 | 0.334192 | 6.391415 | 0.045772 | 35.308085 | 138.360657 | 0.994027 | 3.188267 | 0.489847 | 10.514267 | 5.877909 |
std | 0.843868 | 0.100795 | 0.121020 | 5.072058 | 0.021848 | 17.007137 | 42.498065 | 0.002991 | 0.151001 | 0.114126 | 1.230621 | 0.885639 |
min | 3.800000 | 0.080000 | 0.000000 | 0.600000 | 0.009000 | 2.000000 | 9.000000 | 0.987110 | 2.720000 | 0.220000 | 8.000000 | 3.000000 |
25% | 6.300000 | 0.210000 | 0.270000 | 1.700000 | 0.036000 | 23.000000 | 108.000000 | 0.991723 | 3.090000 | 0.410000 | 9.500000 | 5.000000 |
50% | 6.800000 | 0.260000 | 0.320000 | 5.200000 | 0.043000 | 34.000000 | 134.000000 | 0.993740 | 3.180000 | 0.470000 | 10.400000 | 6.000000 |
75% | 7.300000 | 0.320000 | 0.390000 | 9.900000 | 0.050000 | 46.000000 | 167.000000 | 0.996100 | 3.280000 | 0.550000 | 11.400000 | 6.000000 |
max | 14.200000 | 1.100000 | 1.660000 | 65.800000 | 0.346000 | 289.000000 | 440.000000 | 1.038980 | 3.820000 | 1.080000 | 14.200000 | 9.000000 |
Vamos agora verificar se o dataset tem as classes balanceadas para que possamos tratar o desbalanceamento posteriormente, se necessário.
Veremos que as classes 0 (qualidade fraca) e 9 (qualidade excelente) estão desequilibradas.
Vamos guardar esta informação, pois possivelmente precisaremos realizar algum tipo de tratamento nas próximas etapas.
# distribuição das classes. VINHO TINTO
print(vinhoreddados.groupby('quality').size())
quality 3 10 4 53 5 681 6 638 7 199 8 18 dtype: int64
# distribuição das classes VINHO BRANCO
print(vinhowhitedados.groupby('quality').size())
quality 3 20 4 163 5 1457 6 2198 7 880 8 175 9 5 dtype: int64
Histograma para cada caracteristica do vinho. Veremos que os atributos açucar residual, acido citric, dioxido sulfur total, dioxido sulfor livre, seguem uma distribuição exponencial, e que as colunas densidade segue uma distribuição aproximadamente normal, ph seguem uma distribuição normal
import matplotlib
import matplotlib.pyplot as plt
# Histograma
vinhoreddados.hist(figsize = (15,10))
plt.show()
# Histograma
vinhowhitedados.hist(figsize = (15,10))
plt.show()
O Gráfico de Densidade, ou Density Plot, é bem parecido com o histograma, mas com uma visualização um pouco diferente. Com ele, pode ser mais fácil identificar a distribuição do atributos do dataset. Assim como fizemos com o histograma, vamos criar um density plot para cada atributo do dataset.
Veremos que muitos dos atributos têm uma distribuição distorcida. Uma transformação como a Box-Cox, que pode aproximar a distribuição de uma Normal, pode ser útil neste caso.
import seaborn as sns
# Density Plot
vinhoreddados.plot(kind = 'density', subplots = True, layout = (4,4), sharex = False, figsize = (15,10))
plt.show()
# Density Plot
vinhowhitedados.plot(kind = 'density', subplots = True, layout = (4,4), sharex = False, figsize = (15,10))
plt.show()
Vamos agora trabalhar com boxplots. No boxblot, a linha no centro (vermelha) representa o valor da mediana (segundo quartil ou p50). A linha abaixo é o 1o quartil (p25) e a linha acima o terceiro quartil (p75). O boxplot ajuda a ter uma ideia da dispersão dos dataset e os possíveis outliers.
OBS: Se um ponto do dataset é muito distante da média (acima de 3 desvios padrão da média), pode ser considerado outlier.
Nos gráficos bloxplot, veremos que a dispersão dos atributos do dataset é bem diferente.
# Boxplot
vinhoreddados.plot(kind = 'box', subplots = True, layout = (4,4), sharex = False, sharey = False, figsize = (15,10))
plt.show()
# Boxplot
vinhowhitedados.plot(kind = 'box', subplots = True, layout = (4,4), sharex = False, sharey = False, figsize = (15,10))
plt.show()
Ao visualizar as correlações entre os atributos através da matriz de correlação, perceberemos que parece haver alguma estrutura na ordem dos atributos. O azul ao redor da diagonal sugere que os atributos que estão próximos um do outro são geralmente mais correlacionados entre si. Os vermelhos também sugerem alguma correlação negativa moderada, a medida que os atributos
Vamos agora verificar a covariância entre as variáveis numéricas do dataset. A covariância representa como duas variáveis numéricas estão relacionadas. Existem várias formas de calcular a correlação entre duas variáveis, como por exemplo, o coeficiente de correlação de Pearson, que pode ser:
OBS: Esta informação é relevante porque alguns algoritmos como regressão linear e regressão logística podem apresentar problemas de performance se houver atributos altamente correlacionados. Vale a pena consultar a documentação do algoritmo para verificar se algum tipo de tratamento de dataset é necessário.
Falamos anteriormente da importância da correlação entre os atributos, e agora iremos visualizar esta informação em formato gráfico. A matriz de correlação exibe graficamente a correlação entre os atributos numéricos do dataset.estão mais distantes um do outro na ordenação.
O código a seguir exibe a matriz de correlação.
# Matriz de Correlação com Matplotlib Seaborn. VINHO TINTO
sns.heatmap(vinhoreddados.corr(), annot=True, cmap='RdBu');