Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save NataliiaRastoropova/9a94405133b05f9b470d635fd8defccc to your computer and use it in GitHub Desktop.
Save NataliiaRastoropova/9a94405133b05f9b470d635fd8defccc to your computer and use it in GitHub Desktop.
medium blog-post
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.preprocessing import StandardScaler, LabelEncoder\n",
"from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV, cross_val_score\n",
"from sklearn.svm import SVC\n",
"from sklearn.linear_model import SGDClassifier\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier\n",
"from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, mean_absolute_error\n",
"from pprint import pprint\n",
"import plotly.graph_objs as go\n",
"from plotly.offline import iplot\n",
"from pandas.plotting import scatter_matrix\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.colors import ListedColormap\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
"from sklearn.naive_bayes import GaussianNB\n",
"from sklearn.linear_model import LogisticRegression\n",
"import seaborn as sns\n",
"from sklearn import model_selection\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _Load in the red wine data from the UCI ML website._"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"pd.set_option('display.width', 1000)\n",
"pd.set_option('display.max_columns',20)\n",
"\n",
"df = pd.read_csv('winequality-red.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _Let's investigate data set_"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'df' is not defined",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-2-6fae94b3c442>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'df' is not defined"
],
"output_type": "error"
}
],
"source": [
"df.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _Let's check how the data is distributed_"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 1599 entries, 0 to 1598\n",
"Data columns (total 12 columns):\n",
"fixed acidity 1599 non-null float64\n",
"volatile acidity 1599 non-null float64\n",
"citric acid 1599 non-null float64\n",
"residual sugar 1599 non-null float64\n",
"chlorides 1599 non-null float64\n",
"free sulfur dioxide 1599 non-null float64\n",
"total sulfur dioxide 1599 non-null float64\n",
"density 1599 non-null float64\n",
"pH 1599 non-null float64\n",
"sulphates 1599 non-null float64\n",
"alcohol 1599 non-null float64\n",
"quality 1599 non-null int64\n",
"dtypes: float64(11), int64(1)\n",
"memory usage: 150.0 KB\n"
]
}
],
"source": [
"df.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _Let’s have a look at data dimensionality, feature names, and feature types. (1599<- rows, 12<-colums)_"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1599, 12)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _Let’s printing out column names_"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality'], dtype='object')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _The describe method shows basic statistical characteristics of each numerical feature_"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>fixed acidity</th>\n",
" <th>volatile acidity</th>\n",
" <th>citric acid</th>\n",
" <th>residual sugar</th>\n",
" <th>chlorides</th>\n",
" <th>free sulfur dioxide</th>\n",
" <th>total sulfur dioxide</th>\n",
" <th>density</th>\n",
" <th>pH</th>\n",
" <th>sulphates</th>\n",
" <th>alcohol</th>\n",
" <th>quality</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" <td>1599.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>8.319637</td>\n",
" <td>0.527821</td>\n",
" <td>0.270976</td>\n",
" <td>2.538806</td>\n",
" <td>0.087467</td>\n",
" <td>15.874922</td>\n",
" <td>46.467792</td>\n",
" <td>0.996747</td>\n",
" <td>3.311113</td>\n",
" <td>0.658149</td>\n",
" <td>10.422983</td>\n",
" <td>5.636023</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>1.741096</td>\n",
" <td>0.179060</td>\n",
" <td>0.194801</td>\n",
" <td>1.409928</td>\n",
" <td>0.047065</td>\n",
" <td>10.460157</td>\n",
" <td>32.895324</td>\n",
" <td>0.001887</td>\n",
" <td>0.154386</td>\n",
" <td>0.169507</td>\n",
" <td>1.065668</td>\n",
" <td>0.807569</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>4.600000</td>\n",
" <td>0.120000</td>\n",
" <td>0.000000</td>\n",
" <td>0.900000</td>\n",
" <td>0.012000</td>\n",
" <td>1.000000</td>\n",
" <td>6.000000</td>\n",
" <td>0.990070</td>\n",
" <td>2.740000</td>\n",
" <td>0.330000</td>\n",
" <td>8.400000</td>\n",
" <td>3.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>7.100000</td>\n",
" <td>0.390000</td>\n",
" <td>0.090000</td>\n",
" <td>1.900000</td>\n",
" <td>0.070000</td>\n",
" <td>7.000000</td>\n",
" <td>22.000000</td>\n",
" <td>0.995600</td>\n",
" <td>3.210000</td>\n",
" <td>0.550000</td>\n",
" <td>9.500000</td>\n",
" <td>5.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>7.900000</td>\n",
" <td>0.520000</td>\n",
" <td>0.260000</td>\n",
" <td>2.200000</td>\n",
" <td>0.079000</td>\n",
" <td>14.000000</td>\n",
" <td>38.000000</td>\n",
" <td>0.996750</td>\n",
" <td>3.310000</td>\n",
" <td>0.620000</td>\n",
" <td>10.200000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>9.200000</td>\n",
" <td>0.640000</td>\n",
" <td>0.420000</td>\n",
" <td>2.600000</td>\n",
" <td>0.090000</td>\n",
" <td>21.000000</td>\n",
" <td>62.000000</td>\n",
" <td>0.997835</td>\n",
" <td>3.400000</td>\n",
" <td>0.730000</td>\n",
" <td>11.100000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>15.900000</td>\n",
" <td>1.580000</td>\n",
" <td>1.000000</td>\n",
" <td>15.500000</td>\n",
" <td>0.611000</td>\n",
" <td>72.000000</td>\n",
" <td>289.000000</td>\n",
" <td>1.003690</td>\n",
" <td>4.010000</td>\n",
" <td>2.000000</td>\n",
" <td>14.900000</td>\n",
" <td>8.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" fixed acidity volatile acidity citric acid residual sugar chlorides free sulfur dioxide total sulfur dioxide density pH sulphates alcohol quality\n",
"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\n",
"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\n",
"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\n",
"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\n",
"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\n",
"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\n",
"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\n",
"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"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>fixed acidity</th>\n",
" <th>volatile acidity</th>\n",
" <th>citric acid</th>\n",
" <th>residual sugar</th>\n",
" <th>chlorides</th>\n",
" <th>free sulfur dioxide</th>\n",
" <th>total sulfur dioxide</th>\n",
" <th>density</th>\n",
" <th>pH</th>\n",
" <th>sulphates</th>\n",
" <th>alcohol</th>\n",
" <th>quality</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>495</th>\n",
" <td>10.7</td>\n",
" <td>0.350</td>\n",
" <td>0.53</td>\n",
" <td>2.60</td>\n",
" <td>0.070</td>\n",
" <td>5.0</td>\n",
" <td>16.0</td>\n",
" <td>0.99720</td>\n",
" <td>3.15</td>\n",
" <td>0.65</td>\n",
" <td>11.0</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1403</th>\n",
" <td>7.2</td>\n",
" <td>0.330</td>\n",
" <td>0.33</td>\n",
" <td>1.70</td>\n",
" <td>0.061</td>\n",
" <td>3.0</td>\n",
" <td>13.0</td>\n",
" <td>0.99600</td>\n",
" <td>3.23</td>\n",
" <td>1.10</td>\n",
" <td>10.0</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>390</th>\n",
" <td>5.6</td>\n",
" <td>0.850</td>\n",
" <td>0.05</td>\n",
" <td>1.40</td>\n",
" <td>0.045</td>\n",
" <td>12.0</td>\n",
" <td>88.0</td>\n",
" <td>0.99240</td>\n",
" <td>3.56</td>\n",
" <td>0.82</td>\n",
" <td>12.9</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1061</th>\n",
" <td>9.1</td>\n",
" <td>0.400</td>\n",
" <td>0.50</td>\n",
" <td>1.80</td>\n",
" <td>0.071</td>\n",
" <td>7.0</td>\n",
" <td>16.0</td>\n",
" <td>0.99462</td>\n",
" <td>3.21</td>\n",
" <td>0.69</td>\n",
" <td>12.5</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1202</th>\n",
" <td>8.6</td>\n",
" <td>0.420</td>\n",
" <td>0.39</td>\n",
" <td>1.80</td>\n",
" <td>0.068</td>\n",
" <td>6.0</td>\n",
" <td>12.0</td>\n",
" <td>0.99516</td>\n",
" <td>3.35</td>\n",
" <td>0.69</td>\n",
" <td>11.7</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>828</th>\n",
" <td>7.8</td>\n",
" <td>0.570</td>\n",
" <td>0.09</td>\n",
" <td>2.30</td>\n",
" <td>0.065</td>\n",
" <td>34.0</td>\n",
" <td>45.0</td>\n",
" <td>0.99417</td>\n",
" <td>3.46</td>\n",
" <td>0.74</td>\n",
" <td>12.7</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>481</th>\n",
" <td>9.4</td>\n",
" <td>0.300</td>\n",
" <td>0.56</td>\n",
" <td>2.80</td>\n",
" <td>0.080</td>\n",
" <td>6.0</td>\n",
" <td>17.0</td>\n",
" <td>0.99640</td>\n",
" <td>3.15</td>\n",
" <td>0.92</td>\n",
" <td>11.7</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>455</th>\n",
" <td>11.3</td>\n",
" <td>0.620</td>\n",
" <td>0.67</td>\n",
" <td>5.20</td>\n",
" <td>0.086</td>\n",
" <td>6.0</td>\n",
" <td>19.0</td>\n",
" <td>0.99880</td>\n",
" <td>3.22</td>\n",
" <td>0.69</td>\n",
" <td>13.4</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1449</th>\n",
" <td>7.2</td>\n",
" <td>0.380</td>\n",
" <td>0.31</td>\n",
" <td>2.00</td>\n",
" <td>0.056</td>\n",
" <td>15.0</td>\n",
" <td>29.0</td>\n",
" <td>0.99472</td>\n",
" <td>3.23</td>\n",
" <td>0.76</td>\n",
" <td>11.3</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>440</th>\n",
" <td>12.6</td>\n",
" <td>0.310</td>\n",
" <td>0.72</td>\n",
" <td>2.20</td>\n",
" <td>0.072</td>\n",
" <td>6.0</td>\n",
" <td>29.0</td>\n",
" <td>0.99870</td>\n",
" <td>2.88</td>\n",
" <td>0.82</td>\n",
" <td>9.8</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1549</th>\n",
" <td>7.4</td>\n",
" <td>0.360</td>\n",
" <td>0.30</td>\n",
" <td>1.80</td>\n",
" <td>0.074</td>\n",
" <td>17.0</td>\n",
" <td>24.0</td>\n",
" <td>0.99419</td>\n",
" <td>3.24</td>\n",
" <td>0.70</td>\n",
" <td>11.4</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>498</th>\n",
" <td>10.7</td>\n",
" <td>0.350</td>\n",
" <td>0.53</td>\n",
" <td>2.60</td>\n",
" <td>0.070</td>\n",
" <td>5.0</td>\n",
" <td>16.0</td>\n",
" <td>0.99720</td>\n",
" <td>3.15</td>\n",
" <td>0.65</td>\n",
" <td>11.0</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>267</th>\n",
" <td>7.9</td>\n",
" <td>0.350</td>\n",
" <td>0.46</td>\n",
" <td>3.60</td>\n",
" <td>0.078</td>\n",
" <td>15.0</td>\n",
" <td>37.0</td>\n",
" <td>0.99730</td>\n",
" <td>3.35</td>\n",
" <td>0.86</td>\n",
" <td>12.8</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1269</th>\n",
" <td>5.5</td>\n",
" <td>0.490</td>\n",
" <td>0.03</td>\n",
" <td>1.80</td>\n",
" <td>0.044</td>\n",
" <td>28.0</td>\n",
" <td>87.0</td>\n",
" <td>0.99080</td>\n",
" <td>3.50</td>\n",
" <td>0.82</td>\n",
" <td>14.0</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>278</th>\n",
" <td>10.3</td>\n",
" <td>0.320</td>\n",
" <td>0.45</td>\n",
" <td>6.40</td>\n",
" <td>0.073</td>\n",
" <td>5.0</td>\n",
" <td>13.0</td>\n",
" <td>0.99760</td>\n",
" <td>3.23</td>\n",
" <td>0.82</td>\n",
" <td>12.6</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1120</th>\n",
" <td>7.9</td>\n",
" <td>0.540</td>\n",
" <td>0.34</td>\n",
" <td>2.50</td>\n",
" <td>0.076</td>\n",
" <td>8.0</td>\n",
" <td>17.0</td>\n",
" <td>0.99235</td>\n",
" <td>3.20</td>\n",
" <td>0.72</td>\n",
" <td>13.1</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>588</th>\n",
" <td>5.0</td>\n",
" <td>0.420</td>\n",
" <td>0.24</td>\n",
" <td>2.00</td>\n",
" <td>0.060</td>\n",
" <td>19.0</td>\n",
" <td>50.0</td>\n",
" <td>0.99170</td>\n",
" <td>3.72</td>\n",
" <td>0.74</td>\n",
" <td>14.0</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1090</th>\n",
" <td>10.0</td>\n",
" <td>0.260</td>\n",
" <td>0.54</td>\n",
" <td>1.90</td>\n",
" <td>0.083</td>\n",
" <td>42.0</td>\n",
" <td>74.0</td>\n",
" <td>0.99451</td>\n",
" <td>2.98</td>\n",
" <td>0.63</td>\n",
" <td>11.8</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>488</th>\n",
" <td>11.6</td>\n",
" <td>0.320</td>\n",
" <td>0.55</td>\n",
" <td>2.80</td>\n",
" <td>0.081</td>\n",
" <td>35.0</td>\n",
" <td>67.0</td>\n",
" <td>1.00020</td>\n",
" <td>3.32</td>\n",
" <td>0.92</td>\n",
" <td>10.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491</th>\n",
" <td>9.2</td>\n",
" <td>0.410</td>\n",
" <td>0.50</td>\n",
" <td>2.50</td>\n",
" <td>0.055</td>\n",
" <td>12.0</td>\n",
" <td>25.0</td>\n",
" <td>0.99520</td>\n",
" <td>3.34</td>\n",
" <td>0.79</td>\n",
" <td>13.3</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>996</th>\n",
" <td>5.6</td>\n",
" <td>0.660</td>\n",
" <td>0.00</td>\n",
" <td>2.20</td>\n",
" <td>0.087</td>\n",
" <td>3.0</td>\n",
" <td>11.0</td>\n",
" <td>0.99378</td>\n",
" <td>3.71</td>\n",
" <td>0.63</td>\n",
" <td>12.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1132</th>\n",
" <td>7.4</td>\n",
" <td>0.360</td>\n",
" <td>0.34</td>\n",
" <td>1.80</td>\n",
" <td>0.075</td>\n",
" <td>18.0</td>\n",
" <td>38.0</td>\n",
" <td>0.99330</td>\n",
" <td>3.38</td>\n",
" <td>0.88</td>\n",
" <td>13.6</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>492</th>\n",
" <td>8.9</td>\n",
" <td>0.400</td>\n",
" <td>0.51</td>\n",
" <td>2.60</td>\n",
" <td>0.052</td>\n",
" <td>13.0</td>\n",
" <td>27.0</td>\n",
" <td>0.99500</td>\n",
" <td>3.32</td>\n",
" <td>0.90</td>\n",
" <td>13.4</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>357</th>\n",
" <td>10.5</td>\n",
" <td>0.420</td>\n",
" <td>0.66</td>\n",
" <td>2.95</td>\n",
" <td>0.116</td>\n",
" <td>12.0</td>\n",
" <td>29.0</td>\n",
" <td>0.99700</td>\n",
" <td>3.24</td>\n",
" <td>0.75</td>\n",
" <td>11.7</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1133</th>\n",
" <td>7.2</td>\n",
" <td>0.480</td>\n",
" <td>0.07</td>\n",
" <td>5.50</td>\n",
" <td>0.089</td>\n",
" <td>10.0</td>\n",
" <td>18.0</td>\n",
" <td>0.99684</td>\n",
" <td>3.37</td>\n",
" <td>0.68</td>\n",
" <td>11.2</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1134</th>\n",
" <td>8.5</td>\n",
" <td>0.280</td>\n",
" <td>0.35</td>\n",
" <td>1.70</td>\n",
" <td>0.061</td>\n",
" <td>6.0</td>\n",
" <td>15.0</td>\n",
" <td>0.99524</td>\n",
" <td>3.30</td>\n",
" <td>0.74</td>\n",
" <td>11.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>896</th>\n",
" <td>8.3</td>\n",
" <td>0.310</td>\n",
" <td>0.39</td>\n",
" <td>2.40</td>\n",
" <td>0.078</td>\n",
" <td>17.0</td>\n",
" <td>43.0</td>\n",
" <td>0.99444</td>\n",
" <td>3.31</td>\n",
" <td>0.77</td>\n",
" <td>12.5</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>887</th>\n",
" <td>10.7</td>\n",
" <td>0.520</td>\n",
" <td>0.38</td>\n",
" <td>2.60</td>\n",
" <td>0.066</td>\n",
" <td>29.0</td>\n",
" <td>56.0</td>\n",
" <td>0.99577</td>\n",
" <td>3.15</td>\n",
" <td>0.79</td>\n",
" <td>12.1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>901</th>\n",
" <td>7.4</td>\n",
" <td>0.635</td>\n",
" <td>0.10</td>\n",
" <td>2.40</td>\n",
" <td>0.080</td>\n",
" <td>16.0</td>\n",
" <td>33.0</td>\n",
" <td>0.99736</td>\n",
" <td>3.58</td>\n",
" <td>0.69</td>\n",
" <td>10.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>902</th>\n",
" <td>7.4</td>\n",
" <td>0.635</td>\n",
" <td>0.10</td>\n",
" <td>2.40</td>\n",
" <td>0.080</td>\n",
" <td>16.0</td>\n",
" <td>33.0</td>\n",
" <td>0.99736</td>\n",
" <td>3.58</td>\n",
" <td>0.69</td>\n",
" <td>10.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>948</th>\n",
" <td>8.9</td>\n",
" <td>0.120</td>\n",
" <td>0.45</td>\n",
" <td>1.80</td>\n",
" <td>0.075</td>\n",
" <td>10.0</td>\n",
" <td>21.0</td>\n",
" <td>0.99552</td>\n",
" <td>3.41</td>\n",
" <td>0.76</td>\n",
" <td>11.9</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>949</th>\n",
" <td>8.9</td>\n",
" <td>0.120</td>\n",
" <td>0.45</td>\n",
" <td>1.80</td>\n",
" <td>0.075</td>\n",
" <td>10.0</td>\n",
" <td>21.0</td>\n",
" <td>0.99552</td>\n",
" <td>3.41</td>\n",
" <td>0.76</td>\n",
" <td>11.9</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>950</th>\n",
" <td>8.9</td>\n",
" <td>0.120</td>\n",
" <td>0.45</td>\n",
" <td>1.80</td>\n",
" <td>0.075</td>\n",
" <td>10.0</td>\n",
" <td>21.0</td>\n",
" <td>0.99552</td>\n",
" <td>3.41</td>\n",
" <td>0.76</td>\n",
" <td>11.9</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>951</th>\n",
" <td>8.3</td>\n",
" <td>0.280</td>\n",
" <td>0.48</td>\n",
" <td>2.10</td>\n",
" <td>0.093</td>\n",
" <td>6.0</td>\n",
" <td>12.0</td>\n",
" <td>0.99408</td>\n",
" <td>3.26</td>\n",
" <td>0.62</td>\n",
" <td>12.4</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>952</th>\n",
" <td>8.2</td>\n",
" <td>0.310</td>\n",
" <td>0.40</td>\n",
" <td>2.20</td>\n",
" <td>0.058</td>\n",
" <td>6.0</td>\n",
" <td>10.0</td>\n",
" <td>0.99536</td>\n",
" <td>3.31</td>\n",
" <td>0.68</td>\n",
" <td>11.2</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1192</th>\n",
" <td>7.2</td>\n",
" <td>0.250</td>\n",
" <td>0.37</td>\n",
" <td>2.50</td>\n",
" <td>0.063</td>\n",
" <td>11.0</td>\n",
" <td>41.0</td>\n",
" <td>0.99439</td>\n",
" <td>3.52</td>\n",
" <td>0.80</td>\n",
" <td>12.4</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>953</th>\n",
" <td>10.2</td>\n",
" <td>0.340</td>\n",
" <td>0.48</td>\n",
" <td>2.10</td>\n",
" <td>0.052</td>\n",
" <td>5.0</td>\n",
" <td>9.0</td>\n",
" <td>0.99458</td>\n",
" <td>3.20</td>\n",
" <td>0.69</td>\n",
" <td>12.1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>230</th>\n",
" <td>5.2</td>\n",
" <td>0.480</td>\n",
" <td>0.04</td>\n",
" <td>1.60</td>\n",
" <td>0.054</td>\n",
" <td>19.0</td>\n",
" <td>106.0</td>\n",
" <td>0.99270</td>\n",
" <td>3.54</td>\n",
" <td>0.62</td>\n",
" <td>12.2</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1156</th>\n",
" <td>8.5</td>\n",
" <td>0.180</td>\n",
" <td>0.51</td>\n",
" <td>1.75</td>\n",
" <td>0.071</td>\n",
" <td>45.0</td>\n",
" <td>88.0</td>\n",
" <td>0.99524</td>\n",
" <td>3.33</td>\n",
" <td>0.76</td>\n",
" <td>11.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>958</th>\n",
" <td>6.4</td>\n",
" <td>0.570</td>\n",
" <td>0.12</td>\n",
" <td>2.30</td>\n",
" <td>0.120</td>\n",
" <td>25.0</td>\n",
" <td>36.0</td>\n",
" <td>0.99519</td>\n",
" <td>3.47</td>\n",
" <td>0.71</td>\n",
" <td>11.3</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>430</th>\n",
" <td>10.5</td>\n",
" <td>0.240</td>\n",
" <td>0.47</td>\n",
" <td>2.10</td>\n",
" <td>0.066</td>\n",
" <td>6.0</td>\n",
" <td>24.0</td>\n",
" <td>0.99780</td>\n",
" <td>3.15</td>\n",
" <td>0.90</td>\n",
" <td>11.0</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1177</th>\n",
" <td>7.1</td>\n",
" <td>0.660</td>\n",
" <td>0.00</td>\n",
" <td>2.40</td>\n",
" <td>0.052</td>\n",
" <td>6.0</td>\n",
" <td>11.0</td>\n",
" <td>0.99318</td>\n",
" <td>3.35</td>\n",
" <td>0.66</td>\n",
" <td>12.7</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1157</th>\n",
" <td>5.1</td>\n",
" <td>0.510</td>\n",
" <td>0.18</td>\n",
" <td>2.10</td>\n",
" <td>0.042</td>\n",
" <td>16.0</td>\n",
" <td>101.0</td>\n",
" <td>0.99240</td>\n",
" <td>3.46</td>\n",
" <td>0.87</td>\n",
" <td>12.9</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>420</th>\n",
" <td>9.5</td>\n",
" <td>0.560</td>\n",
" <td>0.33</td>\n",
" <td>2.40</td>\n",
" <td>0.089</td>\n",
" <td>35.0</td>\n",
" <td>67.0</td>\n",
" <td>0.99720</td>\n",
" <td>3.28</td>\n",
" <td>0.73</td>\n",
" <td>11.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1160</th>\n",
" <td>10.6</td>\n",
" <td>0.360</td>\n",
" <td>0.57</td>\n",
" <td>2.30</td>\n",
" <td>0.087</td>\n",
" <td>6.0</td>\n",
" <td>20.0</td>\n",
" <td>0.99676</td>\n",
" <td>3.14</td>\n",
" <td>0.72</td>\n",
" <td>11.1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>421</th>\n",
" <td>6.6</td>\n",
" <td>0.840</td>\n",
" <td>0.03</td>\n",
" <td>2.30</td>\n",
" <td>0.059</td>\n",
" <td>32.0</td>\n",
" <td>48.0</td>\n",
" <td>0.99520</td>\n",
" <td>3.52</td>\n",
" <td>0.56</td>\n",
" <td>12.3</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>425</th>\n",
" <td>6.6</td>\n",
" <td>0.840</td>\n",
" <td>0.03</td>\n",
" <td>2.30</td>\n",
" <td>0.059</td>\n",
" <td>32.0</td>\n",
" <td>48.0</td>\n",
" <td>0.99520</td>\n",
" <td>3.52</td>\n",
" <td>0.56</td>\n",
" <td>12.3</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>966</th>\n",
" <td>9.0</td>\n",
" <td>0.380</td>\n",
" <td>0.41</td>\n",
" <td>2.40</td>\n",
" <td>0.103</td>\n",
" <td>6.0</td>\n",
" <td>10.0</td>\n",
" <td>0.99604</td>\n",
" <td>3.13</td>\n",
" <td>0.58</td>\n",
" <td>11.9</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>423</th>\n",
" <td>10.5</td>\n",
" <td>0.240</td>\n",
" <td>0.47</td>\n",
" <td>2.10</td>\n",
" <td>0.066</td>\n",
" <td>6.0</td>\n",
" <td>24.0</td>\n",
" <td>0.99780</td>\n",
" <td>3.15</td>\n",
" <td>0.90</td>\n",
" <td>11.0</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1162</th>\n",
" <td>8.5</td>\n",
" <td>0.320</td>\n",
" <td>0.42</td>\n",
" <td>2.30</td>\n",
" <td>0.075</td>\n",
" <td>12.0</td>\n",
" <td>19.0</td>\n",
" <td>0.99434</td>\n",
" <td>3.14</td>\n",
" <td>0.71</td>\n",
" <td>11.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>243</th>\n",
" <td>15.0</td>\n",
" <td>0.210</td>\n",
" <td>0.44</td>\n",
" <td>2.20</td>\n",
" <td>0.075</td>\n",
" <td>10.0</td>\n",
" <td>24.0</td>\n",
" <td>1.00005</td>\n",
" <td>3.07</td>\n",
" <td>0.84</td>\n",
" <td>9.2</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1206</th>\n",
" <td>7.2</td>\n",
" <td>0.360</td>\n",
" <td>0.46</td>\n",
" <td>2.10</td>\n",
" <td>0.074</td>\n",
" <td>24.0</td>\n",
" <td>44.0</td>\n",
" <td>0.99534</td>\n",
" <td>3.40</td>\n",
" <td>0.85</td>\n",
" <td>11.0</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1209</th>\n",
" <td>6.2</td>\n",
" <td>0.390</td>\n",
" <td>0.43</td>\n",
" <td>2.00</td>\n",
" <td>0.071</td>\n",
" <td>14.0</td>\n",
" <td>24.0</td>\n",
" <td>0.99428</td>\n",
" <td>3.45</td>\n",
" <td>0.87</td>\n",
" <td>11.2</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>259</th>\n",
" <td>10.0</td>\n",
" <td>0.310</td>\n",
" <td>0.47</td>\n",
" <td>2.60</td>\n",
" <td>0.085</td>\n",
" <td>14.0</td>\n",
" <td>33.0</td>\n",
" <td>0.99965</td>\n",
" <td>3.36</td>\n",
" <td>0.80</td>\n",
" <td>10.5</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>443</th>\n",
" <td>10.0</td>\n",
" <td>0.440</td>\n",
" <td>0.49</td>\n",
" <td>2.70</td>\n",
" <td>0.077</td>\n",
" <td>11.0</td>\n",
" <td>19.0</td>\n",
" <td>0.99630</td>\n",
" <td>3.23</td>\n",
" <td>0.63</td>\n",
" <td>11.6</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1147</th>\n",
" <td>10.0</td>\n",
" <td>0.410</td>\n",
" <td>0.45</td>\n",
" <td>6.20</td>\n",
" <td>0.071</td>\n",
" <td>6.0</td>\n",
" <td>14.0</td>\n",
" <td>0.99702</td>\n",
" <td>3.21</td>\n",
" <td>0.49</td>\n",
" <td>11.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1003</th>\n",
" <td>6.8</td>\n",
" <td>0.360</td>\n",
" <td>0.32</td>\n",
" <td>1.80</td>\n",
" <td>0.067</td>\n",
" <td>4.0</td>\n",
" <td>8.0</td>\n",
" <td>0.99280</td>\n",
" <td>3.36</td>\n",
" <td>0.55</td>\n",
" <td>12.8</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>978</th>\n",
" <td>7.0</td>\n",
" <td>0.400</td>\n",
" <td>0.32</td>\n",
" <td>3.60</td>\n",
" <td>0.061</td>\n",
" <td>9.0</td>\n",
" <td>29.0</td>\n",
" <td>0.99416</td>\n",
" <td>3.28</td>\n",
" <td>0.49</td>\n",
" <td>11.3</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>929</th>\n",
" <td>8.7</td>\n",
" <td>0.330</td>\n",
" <td>0.38</td>\n",
" <td>3.30</td>\n",
" <td>0.063</td>\n",
" <td>10.0</td>\n",
" <td>19.0</td>\n",
" <td>0.99468</td>\n",
" <td>3.30</td>\n",
" <td>0.73</td>\n",
" <td>12.0</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>974</th>\n",
" <td>8.8</td>\n",
" <td>0.330</td>\n",
" <td>0.41</td>\n",
" <td>5.90</td>\n",
" <td>0.073</td>\n",
" <td>7.0</td>\n",
" <td>13.0</td>\n",
" <td>0.99658</td>\n",
" <td>3.30</td>\n",
" <td>0.62</td>\n",
" <td>12.1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>100 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" fixed acidity volatile acidity citric acid residual sugar chlorides free sulfur dioxide total sulfur dioxide density pH sulphates alcohol quality\n",
"495 10.7 0.350 0.53 2.60 0.070 5.0 16.0 0.99720 3.15 0.65 11.0 8\n",
"1403 7.2 0.330 0.33 1.70 0.061 3.0 13.0 0.99600 3.23 1.10 10.0 8\n",
"390 5.6 0.850 0.05 1.40 0.045 12.0 88.0 0.99240 3.56 0.82 12.9 8\n",
"1061 9.1 0.400 0.50 1.80 0.071 7.0 16.0 0.99462 3.21 0.69 12.5 8\n",
"1202 8.6 0.420 0.39 1.80 0.068 6.0 12.0 0.99516 3.35 0.69 11.7 8\n",
"828 7.8 0.570 0.09 2.30 0.065 34.0 45.0 0.99417 3.46 0.74 12.7 8\n",
"481 9.4 0.300 0.56 2.80 0.080 6.0 17.0 0.99640 3.15 0.92 11.7 8\n",
"455 11.3 0.620 0.67 5.20 0.086 6.0 19.0 0.99880 3.22 0.69 13.4 8\n",
"1449 7.2 0.380 0.31 2.00 0.056 15.0 29.0 0.99472 3.23 0.76 11.3 8\n",
"440 12.6 0.310 0.72 2.20 0.072 6.0 29.0 0.99870 2.88 0.82 9.8 8\n",
"1549 7.4 0.360 0.30 1.80 0.074 17.0 24.0 0.99419 3.24 0.70 11.4 8\n",
"498 10.7 0.350 0.53 2.60 0.070 5.0 16.0 0.99720 3.15 0.65 11.0 8\n",
"267 7.9 0.350 0.46 3.60 0.078 15.0 37.0 0.99730 3.35 0.86 12.8 8\n",
"1269 5.5 0.490 0.03 1.80 0.044 28.0 87.0 0.99080 3.50 0.82 14.0 8\n",
"278 10.3 0.320 0.45 6.40 0.073 5.0 13.0 0.99760 3.23 0.82 12.6 8\n",
"1120 7.9 0.540 0.34 2.50 0.076 8.0 17.0 0.99235 3.20 0.72 13.1 8\n",
"588 5.0 0.420 0.24 2.00 0.060 19.0 50.0 0.99170 3.72 0.74 14.0 8\n",
"1090 10.0 0.260 0.54 1.90 0.083 42.0 74.0 0.99451 2.98 0.63 11.8 8\n",
"488 11.6 0.320 0.55 2.80 0.081 35.0 67.0 1.00020 3.32 0.92 10.8 7\n",
"491 9.2 0.410 0.50 2.50 0.055 12.0 25.0 0.99520 3.34 0.79 13.3 7\n",
"996 5.6 0.660 0.00 2.20 0.087 3.0 11.0 0.99378 3.71 0.63 12.8 7\n",
"1132 7.4 0.360 0.34 1.80 0.075 18.0 38.0 0.99330 3.38 0.88 13.6 7\n",
"492 8.9 0.400 0.51 2.60 0.052 13.0 27.0 0.99500 3.32 0.90 13.4 7\n",
"357 10.5 0.420 0.66 2.95 0.116 12.0 29.0 0.99700 3.24 0.75 11.7 7\n",
"1133 7.2 0.480 0.07 5.50 0.089 10.0 18.0 0.99684 3.37 0.68 11.2 7\n",
"1134 8.5 0.280 0.35 1.70 0.061 6.0 15.0 0.99524 3.30 0.74 11.8 7\n",
"896 8.3 0.310 0.39 2.40 0.078 17.0 43.0 0.99444 3.31 0.77 12.5 7\n",
"887 10.7 0.520 0.38 2.60 0.066 29.0 56.0 0.99577 3.15 0.79 12.1 7\n",
"901 7.4 0.635 0.10 2.40 0.080 16.0 33.0 0.99736 3.58 0.69 10.8 7\n",
"902 7.4 0.635 0.10 2.40 0.080 16.0 33.0 0.99736 3.58 0.69 10.8 7\n",
"... ... ... ... ... ... ... ... ... ... ... ... ...\n",
"948 8.9 0.120 0.45 1.80 0.075 10.0 21.0 0.99552 3.41 0.76 11.9 7\n",
"949 8.9 0.120 0.45 1.80 0.075 10.0 21.0 0.99552 3.41 0.76 11.9 7\n",
"950 8.9 0.120 0.45 1.80 0.075 10.0 21.0 0.99552 3.41 0.76 11.9 7\n",
"951 8.3 0.280 0.48 2.10 0.093 6.0 12.0 0.99408 3.26 0.62 12.4 7\n",
"952 8.2 0.310 0.40 2.20 0.058 6.0 10.0 0.99536 3.31 0.68 11.2 7\n",
"1192 7.2 0.250 0.37 2.50 0.063 11.0 41.0 0.99439 3.52 0.80 12.4 7\n",
"953 10.2 0.340 0.48 2.10 0.052 5.0 9.0 0.99458 3.20 0.69 12.1 7\n",
"230 5.2 0.480 0.04 1.60 0.054 19.0 106.0 0.99270 3.54 0.62 12.2 7\n",
"1156 8.5 0.180 0.51 1.75 0.071 45.0 88.0 0.99524 3.33 0.76 11.8 7\n",
"958 6.4 0.570 0.12 2.30 0.120 25.0 36.0 0.99519 3.47 0.71 11.3 7\n",
"430 10.5 0.240 0.47 2.10 0.066 6.0 24.0 0.99780 3.15 0.90 11.0 7\n",
"1177 7.1 0.660 0.00 2.40 0.052 6.0 11.0 0.99318 3.35 0.66 12.7 7\n",
"1157 5.1 0.510 0.18 2.10 0.042 16.0 101.0 0.99240 3.46 0.87 12.9 7\n",
"420 9.5 0.560 0.33 2.40 0.089 35.0 67.0 0.99720 3.28 0.73 11.8 7\n",
"1160 10.6 0.360 0.57 2.30 0.087 6.0 20.0 0.99676 3.14 0.72 11.1 7\n",
"421 6.6 0.840 0.03 2.30 0.059 32.0 48.0 0.99520 3.52 0.56 12.3 7\n",
"425 6.6 0.840 0.03 2.30 0.059 32.0 48.0 0.99520 3.52 0.56 12.3 7\n",
"966 9.0 0.380 0.41 2.40 0.103 6.0 10.0 0.99604 3.13 0.58 11.9 7\n",
"423 10.5 0.240 0.47 2.10 0.066 6.0 24.0 0.99780 3.15 0.90 11.0 7\n",
"1162 8.5 0.320 0.42 2.30 0.075 12.0 19.0 0.99434 3.14 0.71 11.8 7\n",
"243 15.0 0.210 0.44 2.20 0.075 10.0 24.0 1.00005 3.07 0.84 9.2 7\n",
"1206 7.2 0.360 0.46 2.10 0.074 24.0 44.0 0.99534 3.40 0.85 11.0 7\n",
"1209 6.2 0.390 0.43 2.00 0.071 14.0 24.0 0.99428 3.45 0.87 11.2 7\n",
"259 10.0 0.310 0.47 2.60 0.085 14.0 33.0 0.99965 3.36 0.80 10.5 7\n",
"443 10.0 0.440 0.49 2.70 0.077 11.0 19.0 0.99630 3.23 0.63 11.6 7\n",
"1147 10.0 0.410 0.45 6.20 0.071 6.0 14.0 0.99702 3.21 0.49 11.8 7\n",
"1003 6.8 0.360 0.32 1.80 0.067 4.0 8.0 0.99280 3.36 0.55 12.8 7\n",
"978 7.0 0.400 0.32 3.60 0.061 9.0 29.0 0.99416 3.28 0.49 11.3 7\n",
"929 8.7 0.330 0.38 3.30 0.063 10.0 19.0 0.99468 3.30 0.73 12.0 7\n",
"974 8.8 0.330 0.41 5.90 0.073 7.0 13.0 0.99658 3.30 0.62 12.1 7\n",
"\n",
"[100 rows x 12 columns]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted_df=df.sort_values(by='quality', ascending=False)\n",
"sorted_df.head(100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _Get mean for all colum with highest mark_"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"fixed acidity 8.566667\n",
"volatile acidity 0.423333\n",
"citric acid 0.391111\n",
"residual sugar 2.577778\n",
"chlorides 0.068444\n",
"free sulfur dioxide 13.277778\n",
"total sulfur dioxide 33.444444\n",
"density 0.995212\n",
"pH 3.267222\n",
"sulphates 0.767778\n",
"alcohol 12.094444\n",
"quality 8.000000\n",
"dtype: float64\n"
]
}
],
"source": [
"print(df[df['quality'] == 8].mean())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _Create pivot\\_table_"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>alcohol</th>\n",
" <th>chlorides</th>\n",
" <th>citric acid</th>\n",
" <th>density</th>\n",
" <th>fixed acidity</th>\n",
" <th>free sulfur dioxide</th>\n",
" <th>pH</th>\n",
" <th>residual sugar</th>\n",
" <th>sulphates</th>\n",
" <th>total sulfur dioxide</th>\n",
" <th>volatile acidity</th>\n",
" </tr>\n",
" <tr>\n",
" <th>quality</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>9.925</td>\n",
" <td>0.0905</td>\n",
" <td>0.035</td>\n",
" <td>0.997565</td>\n",
" <td>7.50</td>\n",
" <td>6.0</td>\n",
" <td>3.39</td>\n",
" <td>2.1</td>\n",
" <td>0.545</td>\n",
" <td>15.0</td>\n",
" <td>0.845</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>10.000</td>\n",
" <td>0.0800</td>\n",
" <td>0.090</td>\n",
" <td>0.996500</td>\n",
" <td>7.50</td>\n",
" <td>11.0</td>\n",
" <td>3.37</td>\n",
" <td>2.1</td>\n",
" <td>0.560</td>\n",
" <td>26.0</td>\n",
" <td>0.670</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>9.700</td>\n",
" <td>0.0810</td>\n",
" <td>0.230</td>\n",
" <td>0.997000</td>\n",
" <td>7.80</td>\n",
" <td>15.0</td>\n",
" <td>3.30</td>\n",
" <td>2.2</td>\n",
" <td>0.580</td>\n",
" <td>47.0</td>\n",
" <td>0.580</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>10.500</td>\n",
" <td>0.0780</td>\n",
" <td>0.260</td>\n",
" <td>0.996560</td>\n",
" <td>7.90</td>\n",
" <td>14.0</td>\n",
" <td>3.32</td>\n",
" <td>2.2</td>\n",
" <td>0.640</td>\n",
" <td>35.0</td>\n",
" <td>0.490</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>11.500</td>\n",
" <td>0.0730</td>\n",
" <td>0.400</td>\n",
" <td>0.995770</td>\n",
" <td>8.80</td>\n",
" <td>11.0</td>\n",
" <td>3.28</td>\n",
" <td>2.3</td>\n",
" <td>0.740</td>\n",
" <td>27.0</td>\n",
" <td>0.370</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>12.150</td>\n",
" <td>0.0705</td>\n",
" <td>0.420</td>\n",
" <td>0.994940</td>\n",
" <td>8.25</td>\n",
" <td>7.5</td>\n",
" <td>3.23</td>\n",
" <td>2.1</td>\n",
" <td>0.740</td>\n",
" <td>21.5</td>\n",
" <td>0.370</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" alcohol chlorides citric acid density fixed acidity free sulfur dioxide pH residual sugar sulphates total sulfur dioxide volatile acidity\n",
"quality \n",
"3 9.925 0.0905 0.035 0.997565 7.50 6.0 3.39 2.1 0.545 15.0 0.845\n",
"4 10.000 0.0800 0.090 0.996500 7.50 11.0 3.37 2.1 0.560 26.0 0.670\n",
"5 9.700 0.0810 0.230 0.997000 7.80 15.0 3.30 2.2 0.580 47.0 0.580\n",
"6 10.500 0.0780 0.260 0.996560 7.90 14.0 3.32 2.2 0.640 35.0 0.490\n",
"7 11.500 0.0730 0.400 0.995770 8.80 11.0 3.28 2.3 0.740 27.0 0.370\n",
"8 12.150 0.0705 0.420 0.994940 8.25 7.5 3.23 2.1 0.740 21.5 0.370"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"colum_names = ['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol']\n",
"df_pivot_table = df.pivot_table(colum_names,['quality'], aggfunc='median')\n",
"\n",
"df_pivot_table"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- _Corelation matrix_"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"quality 1.000000\n",
"alcohol 0.476166\n",
"sulphates 0.251397\n",
"citric acid 0.226373\n",
"fixed acidity 0.124052\n",
"residual sugar 0.013732\n",
"free sulfur dioxide -0.050656\n",
"pH -0.057731\n",
"chlorides -0.128907\n",
"density -0.174919\n",
"total sulfur dioxide -0.185100\n",
"volatile acidity -0.390558\n",
"Name: quality, dtype: float64"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"corr_matrix = df.corr()\n",
"corr_matrix[\"quality\"].sort_values(ascending=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"***\n",
"## Data visualization\n",
"***"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Data distribution"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAFACAYAAABTBmBPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAF1JJREFUeJzt3X20XXV95/H3hxsiwoAPzZ2hTYJJbXQmy1qpd7BTRrQiTvCBdCw6oQtHXbZppwatTxSXLsZhOn8YnTqtpWpqfawaKa1ttKk49VlbbW6QqgmmEyOSG4xcRMQHFALf+ePsbA6Xm3tP4Oyc5PJ+rXXX3Q+/s/f3LBb3k99v7/3bqSokSQI4btQFSJKOHoaCJKllKEiSWoaCJKllKEiSWoaCJKllKEiSWoaCJKllKEiSWotGXcDhWrJkSa1YsWLUZUjSMWX79u03VdX4fO2OuVBYsWIFk5OToy5Dko4pSb45SDuHjyRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQ65qa5kKRj3cUXX8z+/fs59dRT2bhx46jLuQdDQZKOsP3797Nv375RlzErh48kSS1DQZLUMhQkSa1OQyHJmiS7kuxOcsks+09L8skkX0ry5SRP77IeSdLcOguFJGPA5cC5wGrggiSrZzR7LXBFVZ0OrAP+pKt6JEnz67KncAawu6r2VNXtwGZg7Yw2BZzSLD8EuKHDeiRJ8+gyFJYCe/vWp5pt/V4HXJhkCtgKXDTbgZKsTzKZZHJ6erqLWiVJdBsKmWVbzVi/AHhXVS0Dng68N8m9aqqqTVU1UVUT4+PzvndaknQfdRkKU8DyvvVl3Ht46EXAFQBV9Y/ACcCSDmuSJM2hy1DYBqxKsjLJYnoXkrfMaHM9cDZAkn9HLxQcH5KkEeksFKrqALABuAq4lt5dRjuSXJbkvKbZK4DfTPLPwAeAF1TVzCEmSdIR0uncR1W1ld4F5P5tl/Yt7wTO7LIGSdLgfKJZktQyFCRJLUNBktQyFCRJLV+yI0lz+F8Xnj/0Y9584/d6v/d/a+jHf82fX3m/Pm8oSDrqHM2vq1zoDAVJR52j+XWVC53XFCRJLUNBktQyFCRJLUNBktQyFCRJLe8+knS//PErPjz0Y95y0w/b38M+/ob//ayhHm+hsacgSWoZCpKklqEgSWoZCpKklqEgSWoZCpKklrekSjrqnLT4lHv81pFjKEg66pz5yGePuoQHLIePJEmtTkMhyZoku5LsTnLJLPvflOSa5udfktzSZT2SdDQ4Yew4Hjx2HCeMHX3/Lu9s+CjJGHA5cA4wBWxLsqWqdh5sU1Uv62t/EXB6V/VI0tHi9J86edQlHFKXMXUGsLuq9lTV7cBmYO0c7S8APtBhPZKkeXQZCkuBvX3rU822e0nyCGAl8IlD7F+fZDLJ5PT09NALlST1dBkKmWVbHaLtOuDKqrpztp1VtamqJqpqYnx8fGgFSpLuqctQmAKW960vA244RNt1OHQkSSPX5XMK24BVSVYC++j94f/1mY2SPBp4GPCPHdYiLSgXX3wx+/fv59RTT2Xjxo2jLkcLSGehUFUHkmwArgLGgHdU1Y4klwGTVbWlaXoBsLmqDjW0JGmG/fv3s2/fvlGXoQWo0yeaq2orsHXGtktnrL+uyxokSYM7+p6ckCSNjKEgSWo5IZ7UsU+f9aShH/O2RWOQcNvUVCfHf9JnPj30Y+rYYE9BktQyFCRJLUNBktTymsIDmA9ASZrJUHgA8wGoY9dDm2c9H+oznxoyQ0E6Bl14512jLkELlNcUJEktQ0GS1HL4aA5eiJX0QGMozMELsZIeaBw+kiS17ClowXL4Tzp8hoIWLIf/pMPn8JEkqWUoSJJahoIkqeU1BY3cmW8+s5PjLr5lMcdxHHtv2Tv0c3z+os8P9XjS0cKegiSpZShIklqGgiSp1WkoJFmTZFeS3UkuOUSb5ybZmWRHkvd3WY8kaW6dXWhOMgZcDpwDTAHbkmypqp19bVYBrwbOrKrvJvnXXdWjB546sbiLu6gTfRGNNKgu7z46A9hdVXsAkmwG1gI7+9r8JnB5VX0XoKpu7LAePcDcceYdoy5BOuZ0OXy0FNjbtz7VbOv3KOBRST6f5AtJ1sx2oCTrk0wmmZyenu6oXElSlz2FzLJtZj9+EbAKeDKwDPhsksdU1S33+FDVJmATwMTExANuLOD6y36+k+MeuPnhwCIO3PzNoZ/jtEu/MtTjSToyuuwpTAHL+9aXATfM0uZvquqOqvoGsIteSEiSRqDLUNgGrEqyMsliYB2wZUabvwZ+BSDJEnrDSXs6rEmSNIfOQqGqDgAbgKuAa4ErqmpHksuSnNc0uwr4TpKdwCeBV1XVd7qqSZI0t07nPqqqrcDWGdsu7Vsu4OXNjyRpxHyiWZLUMhQkSS1DQZLUWjDvU3j8q94z9GOefNP3GQOuv+n7Qz/+9jf816EeT5KGwZ6CJKllKEiSWoaCJKllKEiSWoaCJKllKEiSWoaCJKllKEiSWoaCJKm1YJ5o1uFbcsJdwIHmtyQZCg9or3zsLfM3kvSA4vCRJKllKEiSWoaCJKllKEiSWoaCJKllKEiSWoaCJKnVaSgkWZNkV5LdSS6ZZf8Lkkwnuab5+Y0u65Ekza2zh9eSjAGXA+cAU8C2JFuqaueMph+sqg1d1SFJGlyXPYUzgN1Vtaeqbgc2A2s7PN/Q3bX4JO580CnctfikUZciSUdEl9NcLAX29q1PAU+Ypd2vJTkL+BfgZVW1d2aDJOuB9QCnnXZaB6XO7oernnbEziVJR4OBegpJNiY5JcnxST6e5KYkF873sVm21Yz1DwMrquqxwN8D757tQFW1qaomqmpifHx8kJIlSffBoMNHT6uqW4Fn0vsX/6OAV83zmSlged/6MuCG/gZV9Z2q+kmz+qfA4wesR5LUgUFD4fjm99OBD1TVzQN8ZhuwKsnKJIuBdcCW/gZJfrpv9Tzg2gHrkSR1YNBrCh9O8jXgNuB3kowDP57rA1V1IMkG4CpgDHhHVe1IchkwWVVbgJckOQ84ANwMvOA+fg9J0hAMFApVdUmS1wO3VtWdSX7EAHcSVdVWYOuMbZf2Lb8aePXhlSxJ6sqgF5pPBF4MvKXZ9DPARFdFSZJGY9BrCu8Ebgd+uVmfAn6/k4okSSMzaCg8sqo2AncAVNVtzH7LqSTpGDZoKNye5ME0zxkkeSTwk7k/Ikk61gx699HrgI8Cy5O8DzgTeGFXRUmSRmPQu48+lmQ78Ev0ho1eWlU3dVqZJOmIG/Tuo483Tx//bVV9pKpuSvLxrouTJB1Zc/YUkpwAnAgsSfIw7r64fAq921IlSQvIfMNHvwX8Lr0A2M7doXArvXclSJIWkDlDoar+EPjDJBdV1ZuPUE2SpBEZ9ELzm5M8BlgNnNC3/T1dFSZJOvIGCoUk/x14Mr1Q2AqcC3wOMBQkaQEZ9OG184Gzgf1V9ULgF4AHdVaVJGkkBg2F26rqLuBAklOAG4Gf7a4sSdIoDPpE82SSh9J7O9p24AfAP3VWlSRpJAa90Pw7zeJbk3wUOKWqvtxdWZKkURi0p0CSpcAjDn4myVlV9ZmuCpMkHXmD3n30euC/ADuBO5vNBRgKkrSADNpT+FXg0VXldNmStIANevfRHuD4LguRJI3efBPivZneMNGPgGuamVHb3kJVvaTb8iRJR9J8w0eTze/twJaOa5Ekjdh8E+K9++ByksXAv6XXc9hVVbd3XJsk6Qgb9CU7Twe+DvwR8MfA7iTnDvC5NUl2Jdmd5JI52p2fpJJMDFq4JGn4Br376A+AX6mq3QBJHgn8LfB3h/pAkjF671w4B5gCtiXZUlU7Z7Q7GXgJ8MXDL1+SNEyD3n1048FAaOyhN//RXM4AdlfVnmaoaTOwdpZ2/xPYCPx4wFokSR0ZNBR2JNma5AVJng98mN6//J+d5NmH+MxSYG/f+lSzrZXkdGB5VX1krpMnWZ9kMsnk9PT0gCVLkg7XoKFwAvBt4En03qswDTwceBbwzEN8JrNsq3ZnchzwJuAV8528qjZV1URVTYyPjw9YsiTpcA06Id4L78Oxp4DlfevLgBv61k8GHgN8KgnAqcCWJOdV1SSSpCNu0IfXZjXPw2vbgFVJVgL7gHXAr/d99nvAkr5zfQp4pYEgSaMz6MNrh62qDiTZAFwFjAHvqKodSS4DJqvKh+Ek6Sgz8MNr90VVbaX3Tuf+bZceou2T78+5JEn336BTZ3+SWYaRquopQ69IkjQygz689sq+5ROAXwMODL8cSdIoDXr30fYZmz6f5NMd1CNJGqFBh48e3rd6HDBB7xZSSdICMujw0XZ61xQC3AFcB7yoo5okSSMy6BPNvwc8rqpWAu8FfkjvxTuSpAVk0FB4bVXdmuQ/0pv19F3AWzqrSpI0EoOGwp3N72cAb62qvwEWd1OSJGlUBg2FfUneBjwX2JrkQYfxWUnSMWLQP+zPpTddxZqquoXeDKmv6qwqSdJIDPqcwo+Av+pb/xbwra6KkiSNhkNAkqSWoSBJahkKkqSWoSBJahkKkqSWoSBJahkKkqSWoSBJahkKkqSWoSBJahkKkqRWp6GQZE2SXUl2J7lklv2/neQrSa5J8rkkq7usR5I0t85CIckYcDlwLrAauGCWP/rvr6qfr6rHARuBP+iqHknS/LrsKZwB7K6qPVV1O7AZWNvfoKpu7Vs9id57oCVJIzLQ1Nn30VJgb9/6FPCEmY2SvBh4Ob03uT1ltgMlWQ+sBzjttNOGXqgkqafLnkJm2XavnkBVXV5VjwR+D3jtbAeqqk1VNVFVE+Pj40MuU5J0UJehMAUs71tfBtwwR/vNwK92WI8kaR5dhsI2YFWSlUkWA+uALf0NkqzqW30G8P86rEeSNI/OrilU1YEkG+i923kMeEdV7UhyGTBZVVuADUmeCtwBfBd4flf1SJLm1+WFZqpqK7B1xrZL+5Zf2uX5JUmHxyeaJUktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEktQ0GS1DIUJEmtTkMhyZoku5LsTnLJLPtfnmRnki8n+XiSR3RZjyRpbp2FQpIx4HLgXGA1cEGS1TOafQmYqKrHAlcCG7uqR5I0vy57CmcAu6tqT1XdDmwG1vY3qKpPVtWPmtUvAMs6rEeSNI8uQ2EpsLdvfarZdigvAv5uth1J1ieZTDI5PT09xBIlSf26DIXMsq1mbZhcCEwAb5htf1VtqqqJqpoYHx8fYomSpH6LOjz2FLC8b30ZcMPMRkmeCrwGeFJV/aTDeiRJ8+iyp7ANWJVkZZLFwDpgS3+DJKcDbwPOq6obO6xFkjSAzkKhqg4AG4CrgGuBK6pqR5LLkpzXNHsD8K+Av0hyTZIthzicJOkI6HL4iKraCmydse3SvuWndnl+SdLh8YlmSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktQwFSVLLUJAktToNhSRrkuxKsjvJJbPsPyvJ1UkOJDm/y1okSfPrLBSSjAGXA+cCq4ELkqye0ex64AXA+7uqQ5I0uEUdHvsMYHdV7QFIshlYC+w82KCqrmv23dVhHZKkAXU5fLQU2Nu3PtVsO2xJ1ieZTDI5PT09lOIkSffWZShklm11Xw5UVZuqaqKqJsbHx+9nWZKkQ+kyFKaA5X3ry4AbOjyfJOl+6jIUtgGrkqxMshhYB2zp8HySpPups1CoqgPABuAq4FrgiqrakeSyJOcBJPn3SaaA5wBvS7Kjq3okSfPr8u4jqmorsHXGtkv7lrfRG1aSJB0FfKJZktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJLUNBktQyFCRJrU5DIcmaJLuS7E5yySz7H5Tkg83+LyZZ0WU9kqS5dRYKScaAy4FzgdXABUlWz2j2IuC7VfVzwJuA13dVjyRpfl32FM4AdlfVnqq6HdgMrJ3RZi3w7mb5SuDsJOmwJknSHLoMhaXA3r71qWbbrG2q6gDwPeCnOqxJkjSHVFU3B06eA/ynqvqNZv15wBlVdVFfmx1Nm6lm/etNm+/MONZ6YH2z+mhgVydFz24JcNMRPN+R5vc7di3k7wZ+v2F7RFWNz9doUYcFTAHL+9aXATccos1UkkXAQ4CbZx6oqjYBmzqqc05JJqtqYhTnPhL8fseuhfzdwO83Kl0OH20DViVZmWQxsA7YMqPNFuD5zfL5wCeqq66LJGlenfUUqupAkg3AVcAY8I6q2pHkMmCyqrYAfwa8N8luej2EdV3VI0maX5fDR1TVVmDrjG2X9i3/GHhOlzUMwUiGrY4gv9+xayF/N/D7jURnF5olSccep7mQJLUMBUlSy1A4hCQnJPmnJP+cZEeS/zHqmoYtyViSLyX5yKhrGbYk1yX5SpJrkkyOup5hS/LQJFcm+VqSa5P8h1HXNCxJHt38dzv4c2uS3x11XcOS5GXN35SvJvlAkhNGXVM/rykcQjPdxklV9YMkxwOfA15aVV8YcWlDk+TlwARwSlU9c9T1DFOS64CJqlqQDz8leTfw2ap6e3PL94lVdcuo6xq2Zg61fcATquqbo67n/kqylN7fktVVdVuSK4CtVfWu0VZ2N3sKh1A9P2hWj29+FkyCJlkGPAN4+6hr0eFJcgpwFr1buqmq2xdiIDTOBr6+EAKhzyLgwc0Duydy74d6R8pQmEMzvHINcCPwf6vqi6OuaYj+D3AxcNeoC+lIAR9Lsr2ZJmUh+VlgGnhnM/z39iQnjbqojqwDPjDqIoalqvYBbwSuB74FfK+qPjbaqu7JUJhDVd1ZVY+jN0XHGUkeM+qahiHJM4Ebq2r7qGvp0JlV9Yv0pm5/cZKzRl3QEC0CfhF4S1WdDvwQuNf7So51zbDYecBfjLqWYUnyMHqzQ68EfgY4KcmFo63qngyFATRd808Ba0ZcyrCcCZzXjLtvBp6S5M9HW9JwVdUNze8bgQ/Rm8p9oZgCpvp6rlfSC4mF5lzg6qr69qgLGaKnAt+oqumqugP4K+CXR1zTPRgKh5BkPMlDm+UH0/uP+bXRVjUcVfXqqlpWVSvodc8/UVVH1b9W7o8kJyU5+eAy8DTgq6Otaniqaj+wN8mjm01nAztHWFJXLmABDR01rgd+KcmJzc0sZwPXjrime+h0motj3E8D727ufjgOuKKqFtytmwvUvwE+1LyvaRHw/qr66GhLGrqLgPc1Qyx7gBeOuJ6hSnIicA7wW6OuZZiq6otJrgSuBg4AX+Iom+7CW1IlSS2HjyRJLUNBktQyFCRJLUNBktQyFCRJLUNBGrIkK5J8tVmeSPJHzfKTkxxVDypJM/mcgtShqpoEDk7d/WTgB8A/jKwgaR72FKQ+SV6TZFeSv2/mun9lkk8lmWj2L2mmBznYI/hskqubn3v1AprewUeSrAB+G3hZ846AJyb5RjMtO0lOad4BcfwR+7LSLOwpSI0kj6c37cfp9P7fuBqYa9LAG4FzqurHSVbRm5JhYraGVXVdkrcCP6iqNzbn+xS96cv/ujnvXzbz4UgjY09ButsTgQ9V1Y+q6lZgyzztjwf+NMlX6M3kufowz/d27p6e4oXAOw/z89LQ2VOQ7mm2eV8OcPc/oPpfnfgy4NvALzT7f3xYJ6r6fDME9SRgrKoWzKR9OnbZU5Du9hngPyd5cDPL6rOa7dcBj2+Wz+9r/xDgW1V1F/A8YGye438fOHnGtvfQG3ayl6CjgqEgNarqauCDwDXAXwKfbXa9EfhvSf4BWNL3kT8Bnp/kC8Cj6L3sZi4fphc61yR5YrPtfcDDWHhTROsY5Syp0iEkeR19F4Y7Osf5wNqqel5X55AOh9cUpBFJ8mZ6bxd7+qhrkQ6ypyBJanlNQZLUMhQkSS1DQZLUMhQkSS1DQZLU+v/KiUrqKCCMVAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(6, 5))\n",
"sns.barplot(x='quality', y='sulphates', data=df)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Histograms"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x360 with 12 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df.hist(bins=10,figsize=(6, 5))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Density Plots"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 12 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df.plot(kind='density', subplots=True, layout=(4,3), sharex=False)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.distplot(df['quality'], hist=True, kde=True,\n",
" bins='auto', color = 'darkblue',\n",
" hist_kws={'edgecolor':'black'},\n",
" kde_kws={'linewidth': 4})\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Column names"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"colum_names = ['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol', 'quality']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"correlations = df.corr()\n",
"# Plot figsize\n",
"fig, ax = plt.subplots(figsize=(10, 10))\n",
"# Generate Color Map\n",
"colormap = sns.diverging_palette(220, 10, as_cmap=True)\n",
"# Generate Heat Map, allow annotations and place floats in map\n",
"sns.heatmap(correlations, cmap=colormap, annot=True, fmt=\".2f\")\n",
"ax.set_xticklabels(\n",
" colum_names,\n",
" rotation=45,\n",
" horizontalalignment='right'\n",
");\n",
"ax.set_yticklabels(colum_names);\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sm = scatter_matrix(df, figsize=(6, 6), diagonal='kde')\n",
"#Change label rotation\n",
"[s.xaxis.label.set_rotation(40) for s in sm.reshape(-1)]\n",
"[s.yaxis.label.set_rotation(0) for s in sm.reshape(-1)]\n",
"#May need to offset label when rotating to prevent overlap of figure\n",
"[s.get_yaxis().set_label_coords(-0.6,0.5) for s in sm.reshape(-1)]\n",
"#Hide all ticks\n",
"[s.set_xticks(()) for s in sm.reshape(-1)]\n",
"[s.set_yticks(()) for s in sm.reshape(-1)]\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"***\n",
"## Data Preprocessing\n",
"***"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"+ Making binary classificaion for the response variable."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Dividing wine as good and bad by giving the limit for the quality\n",
"bins = (2, 6, 8)\n",
"group_names = ['bad', 'good']\n",
"df['quality'] = pd.cut(df['quality'], bins = bins, labels = group_names)\n",
"df.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Now lets assign a labels to our quality variable"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"label_quality = LabelEncoder()\n",
"# Bad becomes 0 and good becomes 1\n",
"df['quality'] = label_quality.fit_transform(df['quality'])\n",
"df['quality'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Now seperate the dataset as response variable and feature variabes"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"X = df.drop('quality', axis=1)\n",
"y = df['quality']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Train and Test splitting of data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=50)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Applying Standard scaling to get optimized result"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sc = StandardScaler()\n",
"X_train = sc.fit_transform(X_train)\n",
"X_test = sc.fit_transform(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"***\n",
"## Machine learning algorithms\n",
"***"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# import warnings filter\n",
"from warnings import simplefilter\n",
"# ignore all future warnings\n",
"simplefilter(action='ignore', category=FutureWarning)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_Prepare configuration for cross validation test harness_"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"seed = 7\n",
"# prepare models\n",
"models = []\n",
"models.append(('SupportVectorClassifier', SVC()))\n",
"models.append(('StochasticGradientDecentC', SGDClassifier()))\n",
"models.append(('RandomForestClassifier', RandomForestClassifier()))\n",
"models.append(('DecisionTreeClassifier', DecisionTreeClassifier()))\n",
"models.append(('GaussianNB', GaussianNB()))\n",
"models.append(('KNeighborsClassifier', KNeighborsClassifier()))\n",
"models.append(('AdaBoostClassifier', AdaBoostClassifier()))\n",
"models.append(('LogisticRegression', LogisticRegression()))\n",
"\n",
"# evaluate each model in turn\n",
"results = []\n",
"names = []\n",
"scoring = 'accuracy'\n",
"for name, model in models:\n",
"\tkfold = model_selection.KFold(n_splits=10, random_state=seed)\n",
"\tcv_results = model_selection.cross_val_score(model, X_train, y_train, cv=kfold, scoring=scoring)\n",
"\tresults.append(cv_results)\n",
"\tnames.append(name)\n",
"\tmsg = \"%s: %f (%f)\" % (name, cv_results.mean(), cv_results.std())\n",
"\tprint(msg)\n",
"# boxplot algorithm comparison\n",
"fig = plt.figure()\n",
"fig.suptitle('Algorithm Comparison')\n",
"ax = fig.add_subplot(111)\n",
"plt.boxplot(results)\n",
"ax.set_xticklabels(names)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**1) Support Vector Classifier (svc)**\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"svc = SVC()\n",
"svc.fit(X_train, y_train)\n",
"pred_svc = svc.predict(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_Grid Search CV (finding best parameters for svc model)_"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def svc_param_selection(X, y, nfolds):\n",
" param = {\n",
" 'C': [0.1, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4],\n",
" 'kernel': ['linear', 'rbf'],\n",
" 'gamma': [0.1, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4]\n",
" }\n",
" grid_search = GridSearchCV(svc, param_grid=param, scoring='accuracy', cv=nfolds)\n",
" grid_search.fit(X, y)\n",
" return grid_search.best_params_"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"svc_param_selection(X_train, y_train,10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_Best params had found **{'C': 1.3, 'gamma': 1.3, 'kernel': 'rbf'}**_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_Let's run our SVC again with the best parameters._"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"\n",
"svc2 = SVC(C = 1.3, gamma = 1.3, kernel= 'rbf')\n",
"svc2.fit(X_train, y_train)\n",
"pred_svc2 = svc2.predict(X_test)\n",
"print('Confusion matrix')\n",
"print(confusion_matrix(y_test, pred_svc2))\n",
"print('Classification report')\n",
"print(classification_report(y_test, pred_svc2))\n",
"print('Accuracy score',accuracy_score(y_test, pred_svc2))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**2) Stochastic Gradient Decent Classifier**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sgd = SGDClassifier(loss=\"hinge\", penalty=\"l2\", max_iter=10)\n",
"sgd.fit(X_train, y_train)\n",
"pred_sgd = sgd.predict(X_test)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**3) Random Forest Classifier**\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"rfc = RandomForestClassifier(n_estimators=200, max_depth=20,\n",
" random_state=0)\n",
"rfc.fit(X_train, y_train)\n",
"pred_rfc = rfc.predict(X_test)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**4) KNeighborsClassifier**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"h = .02 # step size in the mesh\n",
"n_neighbors = 2\n",
"# Create color maps\n",
"cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])\n",
"cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])\n",
"\n",
"for weights in ['uniform', 'distance']:\n",
" nbrs = KNeighborsClassifier(n_neighbors=n_neighbors, weights=weights)\n",
" nbrs.fit(X_train,y_train)\n",
" pred_nbrs = nbrs.predict(X_test)\n",
" print('KNeighborsClassifier')\n",
" print(classification_report(y_test, pred_nbrs))\n",
"\n",
" # Plot the decision boundary. For that, we will assign a color to each\n",
" # point in the mesh [x_min, x_max]x[y_min, y_max].\n",
"\n",
" x_min, x_max = X_train[:, 0].min() -1, X_train[:, 0].max() + 1\n",
" y_min, y_max = X_train[:, 1].min() -1, X_train[:, 1].max() + 1\n",
"\n",
" xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))\n",
" Z = nbrs.predict(np.c_[xx.ravel(), yy.ravel()])\n",
" # Put the result into a color plot\n",
" Z = Z.reshape(xx.shape)\n",
" plt.figure()\n",
" plt.pcolormesh(xx, yy, Z, cmap=cmap_light)\n",
"\n",
" # Plot also the training points\n",
" plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold,\n",
" edgecolor='k', s=20)\n",
" plt.xlim(xx.min(), xx.max())\n",
" plt.ylim(yy.min(), yy.max())\n",
" plt.title(\"3-Class classification (k = %i, weights = '%s')\"\n",
" % (n_neighbors, weights))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**5) AdaBoostClassifier**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ada_classifier = AdaBoostClassifier(n_estimators=100)\n",
"ada_classifier.fit(X_train, y_train)\n",
"pred_ada = ada_classifier.predict(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**6) Evaluate model**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"def evaluate(model, test_features, test_labels):\n",
" predictions = model.predict(test_features)\n",
" print('Model Performance')\n",
" print('Average Error: {:0.4f} degrees.'.format(mean_absolute_error(test_labels,predictions)))\n",
" print('Accuracy = {:0.2f}%.'.format(accuracy_score(test_labels,predictions)*100))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"evaluate(svc,X_test,y_test)\n",
"evaluate(svc2,X_test,y_test)\n",
"evaluate(sgd,X_test,y_test)\n",
"evaluate(rfc,X_test,y_test)\n",
"evaluate(ada_classifier,X_test,y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**7) Cross Validation**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"scores = cross_val_score(ada_classifier,X_test,y_test, cv=5)\n",
"scores.mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**8) Feature importance**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"importance=ada_classifier.feature_importances_\n",
"\n",
"std = np.std([tree.feature_importances_ for tree in ada_classifier.estimators_],\n",
" axis=0)\n",
"indices = np.argsort(importance)\n",
"\n",
"# Plot the feature importances of the forest\n",
"plt.figure()\n",
"plt.title(\"Feature importances\")\n",
"plt.barh(range(X.shape[1]), importance[indices],\n",
" color=\"b\", align=\"center\")\n",
"\n",
"plt.yticks(range(X.shape[1]), colum_names)\n",
"plt.ylim([0, X.shape[1]])\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment