Месяц 1 — Сборник упражнений
На этой странице собраны дополнительные упражнения по всем темам. Кроме упражнений в конце каждой главы, выполните и эти — для более глубокого понимания.
🟢 Упражнения уровня Easy
Math
- С NumPy создайте случайную матрицу
(5, 5), вычислите её rank. - Вычислите variance и standard deviation вектора
[2, 4, 6, 8, 10]вручную и через NumPy. - Объясните, верны ли следующие утверждения:
- “Mean — это всегда лучшая мера центральной тенденции”
- “Standard deviation — это квадратный корень из variance”
NumPy
- Через
np.eye(5)создайте identity matrix5x5. - Reshape
[1, 2, 3, 4, 5, 6, 7, 8, 9]в matrix(3, 3)и возьмите transpose. - Вычислите Euclidean distance между двумя случайными векторами
(100,).
Pandas
- Прочитайте CSV-файл и выведите первые 5 строк в формате
JSON. - Замените пробелы в названиях столбцов на
_(df.columns.str.replace). - Найдите в
DataFrameпустые значения и0, выведите их количество.
Визуализация
- Нарисуйте sin и cos функции на одном chart.
- Нарисуйте
bar plotв 4 разных цветах. - Для случайной матрицы
(50, 50)нарисуйте heatmap черезimshow.
🟡 Упражнения уровня Medium
Работа с реальным dataset
- Iris dataset: загрузите через
seaborn.load_dataset('iris'). Нарисуйте distribution каждого feature поspeciesчерез violin plot. - Tips dataset: загрузите
seaborn.load_dataset('tips'). Выведите среднийtipпоdayиtimeв виде pivot table. - Custom dataset: экспортируйте реальные данные из вашего Django/FastAPI проекта (orders, users, events) и начните EDA.
Упражнения на Vectorization
- Implement функцию
sigmoid(x) = 1 / (1 + exp(-x))в NumPy. Сравните с pure Python loop для 1M элементов. - Implement
softmax(x) = exp(x) / sum(exp(x))— с numerical stability (x - max(x)). - Implement moving average —
(window=10), без циклов в NumPy.
Pandas pipelines
- E-commerce funnel: вычислите коэффициент перехода пользователей
view → cart → purchase. - Cohort retention: разделите пользователей на cohorts по месяцу регистрации, нарисуйте
retentionза 6 месяцев. - RFM Analysis: вычислите метрики Recency, Frequency, Monetary для каждого клиента и разделите на сегменты.
🔴 Упражнения уровня Hard (Backend integration)
1. Analytics API (FastAPI)
Создайте полный FastAPI-сервис со следующими endpoints:
POST /api/v1/analytics/upload # CSV/JSON dataset yuklash
GET /api/v1/analytics/{id}/summary # describe() natijasi
GET /api/v1/analytics/{id}/chart # PNG chart qaytarish
GET /api/v1/analytics/{id}/report # ydata-profiling HTML
POST /api/v1/analytics/{id}/query # custom SQL-like so'rov
Требования:
- Сохранение загруженных datasets в Redis или на диске (с TTL)
- Полная type-safe с моделями Pydantic
- Автоматическая OpenAPI docs
- Unit-тесты с Pytest
2. Django Admin Reports
Добавьте в существующий Django-проект (или создайте новый) admin custom action:
- Генерация PDF report для выбранных объектов
- Графики через Pandas + matplotlib
- PDF через ReportLab или WeasyPrint
3. Real-time Dashboard
Создайте real-time dashboard через Server-Sent Events (SSE):
- FastAPI backend выдаёт fresh data каждые 5 секунд
- Frontend (простой HTML+Chart.js)
- Pandas агрегирует на стороне backend
- Plotly отправляет data в JSON-формате
4. Data Quality Service
Используйте Pandera или Great Expectations:
- Schema validation для загруженного CSV
- Quality score (0-100)
- Обнаружение аномалий (outliers, type mismatch)
- Slack-уведомление при некорректных данных
Мини-проекты (каждый 1-2 недели)
Мини-проект 1: Personal Finance Tracker
- Ваш bank statement (CSV)
- Категоризация через Pandas (rules-based)
- Dashboard месячных расходов
- Тренды и аномалии
- Интерактивный UI в Streamlit
Мини-проект 2: GitHub Profile Analyzer
- Загрузите свои репозитории через GitHub API
- Распределение кода по языкам
- Commit активность (календарный heatmap)
- Топ-контрибьюторы
- Автоматический embed в README
Мини-проект 3: EDA Узбекистан Open Data
- Возьмите dataset с data.gov.uz и сделайте EDA
- Напишите insights на узбекском языке
- Опубликуйте как пост на Habr.com / dev.to
Quiz (самопроверка)
Pandas
- В чём разница между
df.iloc[0]иdf.loc[0]? - Разница между
how='left'иhow='outer'уdf.merge()? - Когда используются
apply()иmap()? - Разница между
transform()иagg()? - Как оптимизировать большой DataFrame в памяти? (
categorydtype,downcast)
NumPy
- Разница между
np.arrayиnp.asarray? - Объясните правило broadcasting.
- В чём разница между
np.copy()и slicing[:]? - Как связаны
axis=0иaxis=1с(rows, cols)? - Действительно ли
np.vectorize()ускоряет? (Hint: нет!)
Math
- Формула
cosine similarityи зачем она нужна? - Что произойдёт, если
learning rateвgradient descentслишком велик? - Разница между normal distribution и uniform distribution?
- Объясните Bayes theorem своими словами.
correlation = 0— это всегда означает “нет связи”? (Hint: нет, нет только линейной связи)
✅ Чек-лист конца месяца
- Глава Math завершена, написан код gradient descent
- NumPy-упражнения сделаны, broadcasting понятен
- Pandas EDA-упражнения (Titanic / House Prices)
- Упражнения по визуализации, endpoint FastAPI с возвратом PNG
- Capstone: один полный EDA-проект на GitHub
- Пост в LinkedIn (со ссылкой на проект)
Поздравляю! Готовы к Месяц 2 — Классический ML.