Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Месяц 1 — Сборник упражнений

На этой странице собраны дополнительные упражнения по всем темам. Кроме упражнений в конце каждой главы, выполните и эти — для более глубокого понимания.

🟢 Упражнения уровня Easy

Math

  1. С NumPy создайте случайную матрицу (5, 5), вычислите её rank.
  2. Вычислите variance и standard deviation вектора [2, 4, 6, 8, 10] вручную и через NumPy.
  3. Объясните, верны ли следующие утверждения:
  • “Mean — это всегда лучшая мера центральной тенденции”
  • “Standard deviation — это квадратный корень из variance”

NumPy

  1. Через np.eye(5) создайте identity matrix 5x5.
  2. Reshape [1, 2, 3, 4, 5, 6, 7, 8, 9] в matrix (3, 3) и возьмите transpose.
  3. Вычислите Euclidean distance между двумя случайными векторами (100,).

Pandas

  1. Прочитайте CSV-файл и выведите первые 5 строк в формате JSON.
  2. Замените пробелы в названиях столбцов на _ (df.columns.str.replace).
  3. Найдите в DataFrame пустые значения и 0, выведите их количество.

Визуализация

  1. Нарисуйте sin и cos функции на одном chart.
  2. Нарисуйте bar plot в 4 разных цветах.
  3. Для случайной матрицы (50, 50) нарисуйте heatmap через imshow.

🟡 Упражнения уровня Medium

Работа с реальным dataset

  1. Iris dataset: загрузите через seaborn.load_dataset('iris'). Нарисуйте distribution каждого feature по species через violin plot.
  2. Tips dataset: загрузите seaborn.load_dataset('tips'). Выведите средний tip по day и time в виде pivot table.
  3. Custom dataset: экспортируйте реальные данные из вашего Django/FastAPI проекта (orders, users, events) и начните EDA.

Упражнения на Vectorization

  1. Implement функцию sigmoid(x) = 1 / (1 + exp(-x)) в NumPy. Сравните с pure Python loop для 1M элементов.
  2. Implement softmax(x) = exp(x) / sum(exp(x)) — с numerical stability (x - max(x)).
  3. Implement moving average — (window=10), без циклов в NumPy.

Pandas pipelines

  1. E-commerce funnel: вычислите коэффициент перехода пользователей view → cart → purchase.
  2. Cohort retention: разделите пользователей на cohorts по месяцу регистрации, нарисуйте retention за 6 месяцев.
  3. 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

  1. В чём разница между df.iloc[0] и df.loc[0]?
  2. Разница между how='left' и how='outer' у df.merge()?
  3. Когда используются apply() и map()?
  4. Разница между transform() и agg()?
  5. Как оптимизировать большой DataFrame в памяти? (category dtype, downcast)

NumPy

  1. Разница между np.array и np.asarray?
  2. Объясните правило broadcasting.
  3. В чём разница между np.copy() и slicing [:]?
  4. Как связаны axis=0 и axis=1 с (rows, cols)?
  5. Действительно ли np.vectorize() ускоряет? (Hint: нет!)

Math

  1. Формула cosine similarity и зачем она нужна?
  2. Что произойдёт, если learning rate в gradient descent слишком велик?
  3. Разница между normal distribution и uniform distribution?
  4. Объясните Bayes theorem своими словами.
  5. correlation = 0 — это всегда означает “нет связи”? (Hint: нет, нет только линейной связи)

✅ Чек-лист конца месяца

  • Глава Math завершена, написан код gradient descent
  • NumPy-упражнения сделаны, broadcasting понятен
  • Pandas EDA-упражнения (Titanic / House Prices)
  • Упражнения по визуализации, endpoint FastAPI с возвратом PNG
  • Capstone: один полный EDA-проект на GitHub
  • Пост в LinkedIn (со ссылкой на проект)

Поздравляю! Готовы к Месяц 2 — Классический ML.