Навчальний простір / Python
Основи штучного інтелекту

Kaggle та UCI: паспорт даних, EDA і гіпотези

Відкритий набір потребує паспорта, перевірки ліцензії та відтворюваного завантаження.

Зміст матеріалу

Мета та потрібні знання

Опрацювати відкритий dataset із зовнішнього каталогу, перевірити походження й якість та побудувати дослідницький аналіз. Демонстраційний набір — UCI Wine Quality, файл winequality-red.csv. Самостійна частина використовує обраний відкритий набір Kaggle або інший набір UCI. Потрібно знати DataFrame, типи, groupby, середнє, медіану й графіки. Результат — виконаний notebook, паспорт даних і аргументовані гіпотези.

Теоретичний мінімум і паспорт набору

Один рядок Wine Quality — вимірювання зразка червоного вина з фізико-хімічними характеристиками та оцінкою quality. Зовнішня числова таблиця не містить повного контексту виробництва; назви колонок треба читати разом із описом UCI. Quality є впорядкованою оцінкою, тому різниця між сусідніми значеннями та спосіб її використання потребують предметного пояснення.

Паспорт включає назву, UCI id186, DOI 10.24432/C56S3T, авторів, файл, дату отримання, ліцензію CC BY 4.0 та контрольну суму завантаженого архіву. Attribution означає зазначення авторства і джерела; при зміні даних опишіть зміни. Контрольна сума ідентифікує конкретні байти, але сама по собі не перевіряє наукову якість набору. Перед використанням іншого файлу адаптуйте паспорт.

Підготовка середовища: Kaggle або локальний Python

У Kaggle створіть Python Notebook у розділі Code, увімкніть Internet у налаштуваннях сесії для завантаження з UCI та запускайте код комірками згори вниз. Якщо доступ до Internet у вашому обліковому записі недоступний, завантажте CSV з офіційного UCI-каталогу вручну й підключіть його як вхідні дані notebook. У панелі Input знайдіть фактичний шлях файлу; використайте його в read_csv. У notebook можуть бути попередньо встановлені потрібні пакети; перевірте імпорт перед додатковим встановленням.

Локально створіть віртуальне середовище: python3 -m venv .venv, активуйте source .venv/bin/activate на macOS/Linux. У Windows використайте py -m venv .venv і .venv\Scripts\Activate.ps1. Встановіть python -m pip install numpy pandas matplotlib scikit-learn. Збережіть версії через python -m pip freeze > requirements-lock.txt. У Kaggle збережіть виконану версію notebook разом із результатами.

Каталог Kaggle містить набори різного походження та з різними ліцензіями. Відкритість перевіряємо за сторінкою конкретного dataset: джерело, дозвіл використання, версія, автор, опис полів. Для власного Kaggle-набору обов’язково додайте посилання на першоджерело. API token для наведеного прямого завантаження UCI не потрібен.

Повний демонстраційний код

Збережіть як wine_eda.py або вставте послідовними комірками:

python
from pathlib import Path
from urllib.request import urlopen
from zipfile import ZipFile
from io import BytesIO
from hashlib import sha256
import pandas as pd

cache = Path("data")
cache.mkdir(exist_ok=True)
archive = cache / "uci-186.zip"
if not archive.exists():
    url = "https://archive.ics.uci.edu/static/public/186/wine+quality.zip"
    with urlopen(url, timeout=30) as response:
        archive.write_bytes(response.read())
print("Archive SHA256:", sha256(archive.read_bytes()).hexdigest())
with ZipFile(archive) as outer:
    with outer.open("winequality-red.csv") as source:
        df = pd.read_csv(source, sep=";")

import matplotlib.pyplot as plt

assert df.shape == (1599, 12), "Перевірте файл і роздільник"
assert {"alcohol", "quality", "pH"}.issubset(df.columns)
output = Path("results")
output.mkdir(exist_ok=True)
print(df.dtypes)
print("Missing:", df.isna().sum().to_dict())
print("Exact duplicate rows:", int(df.duplicated().sum()))
print(df.describe())
summary = df.groupby("quality")["alcohol"].agg(["count", "mean", "median", "std"])
summary.to_csv(output / "alcohol-by-quality.csv")
print(summary)
df.plot.scatter(x="alcohol", y="quality", alpha=0.25)
plt.xlabel("Alcohol (% volume)")
plt.ylabel("Quality score")
plt.tight_layout()
plt.savefig(output / "alcohol-quality.png")
plt.close()

Пояснення коду та очікуваний результат

Архів завантажується один раз і зберігається в data. ZipFile читає конкретний CSV без розпакування довільних шляхів. Sep=“;” відповідає формату цього файла; роздільник за замовчуванням дав би одну колонку. Перевірка shape стосується саме red, а не white чи об’єднаного варіанта. Очікуються 1599 рядків та 12 колонок, таблиця характеристик груп і збережений графік.

Duplicated перевіряє збіг усіх полів. Це привід дослідити одиницю спостереження, а не готова підстава видалення. Quality має дискретні значення, тому scatterplot показує горизонтальні групи точок. Середнє alcohol по групах допомагає описати зв’язок; воно не доводить, що зміна alcohol спричинить зміну оцінки.

Покрокове виконання

  1. Прочитайте сторінку UCI й файл winequality.names. Заповніть паспорт та одиниці потрібних ознак.
  2. Відтворіть демонстрацію, збережіть контрольну суму й версії пакетів.
  3. Виведіть пропуски, дублікати та розподіл quality. Поясніть, що є фактом перевірки, а що потребує зовнішнього уточнення.
  4. Побудуйте гістограму alcohol й таблицю медіан за quality. Оцініть розмір кожної групи перед висновком.
  5. Сформулюйте два дослідницькі питання й для кожного додайте відповідний графік або агрегат.
  6. Для кожної гіпотези запишіть очікування до аналізу, спостереження, альтернативне пояснення та дані для незалежної перевірки.

Самостійне завдання з відкритого каталогу

Оберіть інший відкритий табличний dataset у Kaggle Datasets або UCI. Він має містити кілька змістовних числових ознак і документовану одиницю рядка. На Kaggle перевірте первинне джерело, ліцензію та версію; додайте набір у notebook через Input. Для UCI оберіть конкретний файл і опишіть спосіб завантаження. Новий набір не повинен бути лише копією демонстраційного red-файла.

Створіть власний паспорт, перевірки схеми та якості, щонайменше три дослідницькі питання, три обґрунтовані візуалізації та два висновки з межами застосування. Не переносіть assert(1599,12) у новий набір: визначте очікування за його описом. Пропуски або незбалансовані групи потрібно пояснити, а рішення підготовки — записати в журнал. Готового аналізу власного набору ця демонстрація не містить.

Типові помилки та налагодження

Одна колонка замість дванадцяти означає можливу помилку sep. KeyError потребує перегляду df.columns. BadZipFile може означати неповне завантаження або HTML замість ZIP; перевірте URL і повторно отримайте лише пошкоджений навчальний файл. У Kaggle /kaggle/input зазвичай призначений для читання, тому результати зберігайте у робочій папці notebook.

Порівняння середніх груп із різною кількістю спостережень має враховувати розкид і малий розмір. Викид може бути реальним вимірюванням; пояснюйте рішення про його обробку. Не змінюйте первинний CSV: використовуйте похідний DataFrame та журнал перетворень.

Результат і контрольні питання

Подайте notebook, паспорт, результати перевірок, графіки та джерела. Яку одиницю рядка ви досліджуєте? Чому збіг рядків не автоматично означає помилку? Які твердження підтримує графік, а які потребують нового досліду? Як інший студент отримає ту саму версію даних?

Схема процесу

Kaggle та UCI: паспорт даних, EDA і гіпотезиОберіть елемент, щоб побачити пояснення

Обираємо набір і перевіряємо ліцензію.

Самоперевірка

Перевірте розуміння
Що перевіряє SHA256 архіву?
Як обґрунтувати відповідь своїми словами?
Контрольна сума фіксує файл. Якість, репрезентативність і зміст перевіряються окремо.
Перед завершенням роботи

Підсумок

Відкритий набір потребує паспорта, перевірки ліцензії та відтворюваного завантаження. EDA відповідає конкретним питанням і виявляє межі даних. Самостійний аналіз використовує власний вибір із Kaggle або UCI.

Джерела

Як оформити та здати роботу →

Опрацювали матеріал?

Збережіть цей крок у своєму прогресі.

← Повернутися до дисципліни
© 2026 Анастасія Іскандарова-МалаЕлектронний навчальний посібник · ДДТУ

Пошук у посібнику

Спробуйте «C++», «RAII» або «бази даних».