EDA Capstone Проект
🎯 Цель
Завершающий проект 1-го месяца. На реальном dataset выполните **полный Exploratory Data Analysis (EDA)**и подготовите отчёт профессионального уровня. Это станет первой работой в вашем портфолио.
Бриф проекта
Выбор dataset (выберите один)
| Dataset | Source | Тема |
|---|---|---|
| House Prices | Kaggle (Ames Housing) | Прогноз цены дома (continuous target) |
| Telco Customer Churn | Kaggle | Уход клиента (binary classification) |
| NYC Taxi Trips | NYC Open Data | Time series + geo-spatial |
| Olist E-commerce | Kaggle (Brazil) | Multi-table relational |
| Uzbekistan Open Data | data.gov.uz | Локальный контекст |
**Совет:**для первого раза — House Prices или Titanic. Они хорошо задокументированы, на Kaggle тысячи kernel.
Стандартная структура EDA-отчёта
1. Project Overview (1 страница)
- Цель: зачем мы анализируем эти данные?
- Business question: главный вопрос, на который ищем ответ
- Кратко о dataset (источник, размер, число столбцов)
2. Data Loading и Initial Inspection
df = pd.read_csv("data.csv")
print(df.shape) # сколько строк/столбцов
print(df.dtypes) # типы столбцов
print(df.head()) # первые строки
print(df.info()) # memory и null
print(df.describe()) # статистическая сводка
3. Data Quality Check
- Missing values — сколько NaN в каждом столбце, в %
- Duplicates —
df.duplicated().sum() - Data type issues — например,
dateв виде string - Outliers — методом IQR или z-score
- Value distributions — уникальные значения в каждом categorical столбце
# Визуализация missing values
import missingno as msno
msno.matrix(df)
msno.bar(df)
4. Univariate Analysis
Изучение каждого столбца отдельно:
- Numerical: histogram, KDE, box plot
- Categorical: count plot, value_counts
- Date: time series plot
5. Bivariate Analysis
- Связь между двумя столбцами
- Num vs Num: scatter, correlation
- Cat vs Num: box plot, violin plot
- Cat vs Cat: cross-tabulation, stacked bar
6. Multivariate Analysis
- Смешение 3+ столбцов
- Pair plot(Seaborn)
- Heatmap(correlation matrix)
- Faceted plots(FacetGrid)
7. Target Variable Deep Dive
Если ваша цель — supervised ML:
- Target distribution
- Class imbalance (classification)
- Связь Feature vs target
8. Feature Engineering Ideas
В процессе EDA фиксируйте:
- Идеи создания новых features (например,
age * income) - Столбцы, требующие трансформации (log, sqrt)
- Стратегии encoding (categorical → numerical)
9. Key Insights (НА БИЗНЕС-ЯЗЫКЕ)
- 5-10 основных открытий
- Каждое — одно предложение и за ним визуализация
- Storytelling: “Клиенты с 70% вероятностью уходят, если не звонили в последние 3 месяца”
10. Conclusion и Next Steps
- Итог EDA
- Рекомендации по переходу к модели
- Ограничения и риски в данных
Технические требования
Tools
- Jupyter Notebook или VS Code(
.ipynb) - Pandas — data manipulation
- NumPy — вычисления
- Matplotlib + Seaborn — визуализация
- missingno — визуализация missing data
- pandas-profiling или ydata-profiling(автоматический EDA report)
pip install pandas numpy matplotlib seaborn missingno ydata-profiling
Code quality
- Разбейте notebook на логические section (через Markdown headings)
- Перед каждым блоком кода — пояснение
- Вынесите в функции (
def plot_distribution(col)) - Reproducibility:
random_state=42всегда явно
Структура notebook (каждая секция — отдельная cell)
# 1. IMPORTS
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pathlib import Path
pd.set_option("display.max_columns", 100)
sns.set_theme(style="whitegrid")
# 2. LOAD DATA
DATA_PATH = Path("../data/house_prices.csv")
df = pd.read_csv(DATA_PATH)
# 3. OVERVIEW
print(f"Shape: {df.shape}")
print(f"Memory: {df.memory_usage(deep=True).sum() / 1e6:.1f} MB")
df.head()
Deliverable (сдаваемая работа)
В GitHub-репо должно быть:
eda-house-prices/
├── README.md # Loyiha tavsifi, qanday ishga tushirish
├── notebooks/
│ └── 01_eda.ipynb # Asosiy EDA
├── data/
│ ├── raw/ # Dastlabki CSV (gitignore bilan)
│ └── processed/ # Tozalangan dataset
├── reports/
│ ├── insights.md # 5-10 ta key insights (markdown)
│ ├── figures/ # PNG/PDF chart'lar
│ └── eda_report.html # ydata-profiling output
├── src/
│ └── plotting.py # Reusable plot funksiyalari
└── requirements.txt
Шаблон README.md
# House Prices EDA
## Maqsad
Ames Housing datasetni tahlil qilib, uy narxiga ta'sir qiluvchi asosiy omillarni aniqlash.
## Asosiy topilmalar
- OverallQual eng kuchli korrelatsiyaga ega (0.79)
- GrLivArea (yashash maydoni) ikkinchi muhim feature (0.71)
- ...
## Qanday ishga tushirish
\`\`\`bash
pip install -r requirements.txt
jupyter notebook notebooks/01_eda.ipynb
\`\`\`
## Texnologiyalar
- Python 3.11
- pandas, numpy, matplotlib, seaborn
Evaluation criteria
Для самооценки:
| Критерий | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| Data Quality | Не проверено | Базовая проверка на null | + outliers + types | + business logic check |
| Visualization | Нет | 5+ chart | 10+ chart, осмысленно | Storytelling, профессионально |
| Insights | Нет | 3 tabular | 5+ insight, бизнес-язык | + actionable recommendations |
| Code quality | Spaghetti | Cells понятные | Функции + comments | Production-ready |
| Reproducibility | Random | random_state | + requirements.txt | + Docker + Make |
Цель: минимум 2 балла по каждому критерию.
Референсы
- Kaggle EDA notebooks(изучите лучшие):
- Comprehensive Data Exploration with Python
- Titanic EDA + ML
- “Effective Data Storytelling” — Brent Dykes
- ydata-profiling docs — docs.profiling.ydata.ai
Бонусные упражнения (extra credit)
- Streamlit dashboard: преобразуйте результаты EDA в интерактивный dashboard
- Automated EDA: создайте автоматический отчёт через
ydata-profilingилиSweetvizи сравните с ручным EDA - Geographic visualization (если в dataset есть lat/long): создайте map через Folium или Plotly
✅ Перед сдачей проекта
- Notebook полностью запускается без ошибок
- У каждого chart есть
title,xlabel,ylabel,legend - Каждый раздел поясняется Markdown
- README ясный и полный
- Закоммичено в GitHub (и notebook, и charts)
- Напишете пост в LinkedIn (это — ваш первый ML-проект!)
Поздравляю — первый большой шаг сделан. Выполните дополнительную практику из раздела Упражнения.
Далее: переходите к Месяц 2 — Классический ML.