Skip to content
DA3-22-01-2025-Wine
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# loading the dataset to a Pandas DataFrame
wine
Ось перелік запитань, які можна задати до даних про якість вина:
- Дослідження розподілу
- Скільки унікальних значень якості вина представлено в наборі даних?
- Який середній рівень якості вина?
- Які найпоширеніші категорії якості?
- Статистичний аналіз
- Які фізико-хімічні параметри мають найбільший вплив на якість вина?
- Які показники мають найвищу кореляцію між собою?
- Які параметри мають найбільшу або найменшу дисперсію?
- Залежності та тренди
- Як volatile acidity впливає на якість вина?
- Чи є лінійна залежність між citric acid та якістю?
- Які параметри найбільше caracterизують "хороше" вино?
- Розподіл та групування
- Як розподілені значення pH в різних категоріях якості?
- Чи є відмінності у складі "хорошого" та "поганого" вина?
- Як алкогольна концентрація пов'язана з якістю?
- Статистичні гіпотези
- Чи є статистично значущі відмінності між групами вин?
- Які параметри найкраще передбачають високу якість?
- Наскільки стабільні характеристики вина в різних зразках?
- Аномалії та викиди
- Чи є в наборі даних аномальні або екстремальні значення?
- Які параметри найчастіше мають викиди?
- Як викиди впливають на загальну модель класифікації?
- Просторовий аналіз
- Як змінюються характеристики вина залежно від його категорії?
- Чи можна створити багатовимірну класифікацію якості?
- Які комбінації параметрів найбільш інформативні?
Ці запитання допоможуть глибше зрозуміти структуру та особливості даних про якість вина.
Проект Класифікації Якості Вина за Характеристиками
Мета проекту
Розробка моделі машинного навчання для передбачення якості вина на основі його фізико-хімічних властивостей.
Використані бібліотеки
- NumPy: математичні операції
- Pandas: обробка даних
- Matplotlib: базова візуалізація
- Seaborn: статистична графіка
- Scikit-learn: машинне навчання
Етапи проекту
1. Завантаження та дослідження даних
- Датасет: "winequality-red.csv"
- Аналіз структури даних
- Статистичне дослідження характеристик
2. Візуалізація
- Розподіл якості вина
- Залежність якості від volatile acidity
- Залежність якості від citric acid
- Корреляційна матриця
3. Підготовка даних
- Поділ на незалежні змінні (X) та цільову змінну (Y)
- Бінаризація цільової змінної:
- Якість >= 7: "Хороше вино" (1)
- Якість < 7: "Погане вино" (0)
4. Моделювання
- Алгоритм: Random Forest Classifier
- Поділ даних:
- Тренувальна вибірка: 80%
- Тестова вибірка: 20%
5. Оцінка моделі
- Метрика: Accuracy (точність передбачення)
Особливості реалізації
- Автоматична класифікація вина за введеними параметрами
- Бінарна класифікація "Хороше/Погане вино"
Приклад використання
Модель дозволяє передбачити якість вина на основі:
- Volatile acidity
- Citric acid
- Інших фізико-хімічних показників
Потенційні покращення
- Експериментування з іншими алгоритмами класифікації
- Деталізація класифікації (більше градацій якості)
- Розширення набору ознак
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# loading the dataset to a Pandas DataFrame
wine_dataset = pd.read_csv('dataset/winequality-red.csv')
wine_dataset.info()
# number of rows & columns in the dataset
wine_dataset.shape
# first 5 rows of the dataset
wine_dataset.head()
# first 5 rows of the dataset
wine_dataset.head()
# statistical measures of the dataset
wine_dataset.describe()
# number of values for each quality
sns.catplot(x='quality', data = wine_dataset, kind = 'count')
# volatile acidity vs Quality
plot = plt.figure(figsize=(5,5))
sns.barplot(x='quality', y = 'volatile acidity', data = wine_dataset)
# citric acid vs Quality
plot = plt.figure(figsize=(5,5))
sns.barplot(x='quality', y = 'citric acid', data = wine_dataset)
correlation = wine_dataset.corr()
# constructing a heatmap to understand the correlation between the columns
plt.figure(figsize=(10,10))
sns.heatmap(correlation, cbar=True, square=True, fmt = '.1f', annot = True, annot_kws={'size':8}, cmap = 'Blues')
# separate the data and Label
X = wine_dataset.drop('quality',axis=1)
print(X)
Y = wine_dataset['quality'].apply(lambda y_value: 1 if y_value>=7 else 0)
print(Y)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=3)
print(Y.shape, Y_train.shape, Y_test.shape)
model = RandomForestClassifier()
model.fit(X_train, Y_train)
# accuracy on test data
X_test_prediction = model.predict(X_test)
test_data_accuracy = accuracy_score(X_test_prediction, Y_test)
print('Accuracy : ', test_data_accuracy)
input_data = (7.5,0.5,0.36,6.1,0.071,17.0,102.0,0.9978,3.35,0.8,10.5)
# changing the input data to a numpy array
input_data_as_numpy_array = np.asarray(input_data)
# reshape the data as we are predicting the label for only one instance
input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)
prediction = model.predict(input_data_reshaped)
print(prediction)
if (prediction[0]==1):
print('Good Quality Wine')
else:
print('Bad Quality Wine')
# loading the dataset to a Pandas DataFrame
wine_dataset = pd.read_csv('dataset/winequality-red.csv')# number of rows & columns in the dataset
wine_dataset.shape# first 5 rows of the dataset
wine_dataset.head()# first 5 rows of the dataset
wine_dataset.head()# statistical measures of the dataset
wine_dataset.describe()# number of values for each quality
sns.catplot(x='quality', data = wine_dataset, kind = 'count')# volatile acidity vs Quality
plot = plt.figure(figsize=(5,5))
sns.barplot(x='quality', y = 'volatile acidity', data = wine_dataset)# citric acid vs Quality
plot = plt.figure(figsize=(5,5))
sns.barplot(x='quality', y = 'citric acid', data = wine_dataset)correlation = wine_dataset.corr()
# constructing a heatmap to understand the correlation between the columns
plt.figure(figsize=(10,10))
sns.heatmap(correlation, cbar=True, square=True, fmt = '.1f', annot = True, annot_kws={'size':8}, cmap = 'Blues')# separate the data and Label
X = wine_dataset.drop('quality',axis=1)
print(X)Y = wine_dataset['quality'].apply(lambda y_value: 1 if y_value>=7 else 0)
print(Y)