Содержание курса
Модуль 1. Введение: зачем дата-инженеру Polars и среда
6 уроков
1.
Почему Polars — современный инструмент дата-инженера
↗
2.
Установка: Python, окружение и Polars 1.x
↗
3.
Первый DataFrame: создаём и смотрим на данные
↗
4.
Polars-мышление: без индекса, без мутаций, без циклов
↗
5.
Polars и pandas: сравниваем философию, а не синтаксис
↗
6.
Карта курса: от первого DataFrame до production ETL
↗
Модуль 2. Series — одномерный кирпичик
6 уроков
1.
Что такое Series: массив значений с единым типом
↗
2.
Создание Series: списки, словари, NumPy
↗
3.
Типы данных Series: Int64, Float64, String и другие
↗
4.
Операции с Series: арифметика, сравнения, агрегации
↗
5.
Пропуски в Series: null и его особенности
↗
6.
Когда Series лучше, чем список Python
↗
Модуль 3. DataFrame — главный герой
7 уроков
1.
Что такое DataFrame: таблица из строго типизированных колонок
↗
2.
Создание DataFrame: словарь, список словарей, Series
↗
3.
Схема и осмотр данных: schema, dtypes, describe, glimpse
↗
4.
Выбор колонок: select и синтаксис одной/нескольких колонок
↗
5.
Добавление, вычисление и переименование колонок
↗
6.
Сортировка и первые N строк: sort, head, tail, slice
↗
7.
Статистика и summary: describe, median, quantile, unique
↗
Модуль 4. Выражения — суперсила Polars
8 уроков
1.
Что такое выражение: col, lit и отложенное вычисление
↗
2.
Арифметика в выражениях: сложение, умножение, alias
↗
3.
Условные выражения: when then otherwise
↗
4.
Expression expansion: выбор колонок по паттерну и списку
↗
5.
Селекторы: cs.numeric(), cs.string(), cs.by_dtype()
↗
6.
Пользовательские вычисления: map_elements и когда оно оправдано
↗
7.
Композиция выражений: pipe и цепочки
↗
8.
Антипаттерны: циклы, iter_rows и преждевременный collect
↗
Модуль 5. Фильтрация — отбор нужного
6 уроков
1.
filter: основы фильтрации по условию
↗
2.
Множественные условия: &, |, ~ и скобки
↗
3.
Фильтрация по списку значений: is_in и is_between
↗
4.
Фильтрация null: is_null, is_not_null, null-безопасные сравнения
↗
5.
Выбор строк по позиции: slice, head, tail, sample
↗
6.
Типичные ошибки фильтрации и как их избежать
↗
Модуль 6. Ввод и вывод данных
8 уроков
1.
Единый API: семейства read_, scan_, write_ и sink_
↗
2.
CSV: read_csv, scan_csv, разделители, заголовки, типы
↗
3.
CSV глубже: проблемные строки, кодировки, большие файлы
↗
4.
Parquet: read_parquet, scan_parquet, колоночное хранение
↗
5.
IPC/Feather и NDJSON: когда какой формат выбирать
↗
6.
Запись данных: write_csv, write_parquet, write_ipc, write_ndjson
↗
7.
Партиционирование при записи: partition_by
↗
8.
Введение в чтение из баз данных: read_database
↗
Модуль 7. Типы данных и память
7 уроков
1.
Система типов Polars: полный обзор
↗
2.
Числовые типы: Int/Float, разрядность, downcasting
↗
3.
Строковые типы: String против Categorical
↗
4.
Enum: строгие категориальные колонки
↗
5.
Структурные типы: List, Array и Struct
↗
6.
Временные типы: Date, Datetime, Duration, Time
↗
7.
Измерение памяти: estimated_size, оптимизация типов
↗
Модуль 8. Очистка данных
7 уроков
1.
Пропущенные значения: null как единый маркер пропуска
↗
2.
Поиск и подсчёт пропусков: null_count, is_null
↗
3.
Удаление пропусков: drop_nulls и его параметры
↗
4.
Заполнение пропусков: fill_null, forward/backward fill
↗
5.
Дубликаты: is_duplicated, unique, n_unique
↗
6.
Замена значений: replace, replace_strict, mapping
↗
7.
Сквозная очистка: приводим в порядок грязный датасет магазина
↗
Модуль 9. Преобразование данных
7 уроков
1.
Векторизация против циклов: почему Polars быстрый
↗
2.
with_columns: добавление и изменение колонок без мутации
↗
3.
Вертикальные и горизонтальные операции: pl.all, pl.col
↗
4.
map_elements глубже: когда без него не обойтись
↗
5.
Условные колонки: when then otherwise в with_columns
↗
6.
value_counts и частотный анализ
↗
7.
Биннинг и дискретизация: cut, qcut и ручная разбивка
↗
Модуль 10. Работа со строками
6 уроков
1.
Строковый namespace: str. — векторные операции над текстом
↗
2.
Базовые методы: to_lowercase, to_uppercase, strip_chars…
↗
3.
Поиск и извлечение: str.contains, str.extract, str.slice
↗
4.
Регулярные выражения: str.extract_all, str.replace…
↗
5.
Разбиение и сборка: str.split, str.join, str.json_decode
↗
6.
Типовая очистка текстовых колонок в ETL
↗
Модуль 11. Дата и время
7 уроков
1.
Типы дат: Date, Datetime, Duration — зачем правильные типы
↗
2.
Парсинг дат: str.to_date, str.to_datetime, форматы
↗
3.
dt namespace: year, month, day, hour, weekday
↗
4.
Арифметика дат: duration, dt.epoch_seconds, dt.offset_by
↗
5.
Усечение и округление: dt.truncate, dt.round
↗
6.
Работа с часовыми поясами: dt.convert_time_zone…
↗
7.
Практика: анализ заказов по дням, неделям, часам
↗
Модуль 12. Группировка и агрегация
8 уроков
1.
Идея группировки и объект GroupBy
↗
2.
Простые агрегаты: sum, mean, count, len, min, max
↗
3.
Несколько агрегатов: pl.col('x').agg1().agg2().alias(...)
↗
4.
Именованные агрегаты: pl.col('x')... .alias('name')
↗
5.
group_by_dynamic: группировка по временным интервалам
↗
6.
rolling: скользящие окна по индексу и по времени
↗
7.
map_groups: когда нужна пользовательская логика
↗
8.
Антипаттерны: group_by collect Python-цикл
↗
Модуль 13. Оконные функции
6 уроков
1.
Концепция окна: over и разделение по ключу
↗
2.
Ранжирование: rank, dense_rank, row_number
↗
3.
Доступ к соседним строкам: shift (lag/lead), forward/backward
↗
4.
Кумулятивные операции: cum_sum, cum_count, cum_min, cum_max
↗
5.
Оконные агрегаты: mean, sum, min/max в окне
↗
6.
mapping_strategy: group join vs explode implode
↗
Модуль 14. Соединение таблиц
8 уроков
1.
Концепция join: ключи и стратегии соединения
↗
2.
Inner join: пересечение двух таблиц
↗
3.
Left и right join: сохранение всех строк одной стороны
↗
4.
Semi и anti join: фильтрация через другую таблицу
↗
5.
Cross join и его опасности
↗
6.
Asof join: соединение по ближайшему времени
↗
7.
Join с несколькими ключами и разными именами колонок
↗
8.
Валидация join: проверка ключей, подсчёт строк до и после
↗
Модуль 15. Изменение формы данных
7 уроков
1.
concat: вертикальное и горизонтальное объединение
↗
2.
union: объединение с одинаковой схемой
↗
3.
pivot: строки в колонки
↗
4.
unpivot (melt): колонки в строки
↗
5.
explode: разворачивание списков в строки
↗
6.
partition_by: разбиение DataFrame по значениям колонки
↗
7.
transpose и другие редкие операции
↗
Модуль 16. LazyFrame — ленивые вычисления
8 уроков
1.
Идея LazyFrame: строим план, выполняем один раз
↗
2.
scan_csv и scan_parquet: ленивое чтение
↗
3.
Цепочки трансформаций: построение lazy-пайплайна
↗
4.
collect и fetch: выполнение плана
↗
5.
Профилирование lazy-запроса: profile, explain
↗
6.
Отладка lazy-пайплайнов: inspect и промежуточные collect
↗
7.
Кеширование планов: когда и как переиспользовать LazyFrame
↗
8.
Антипаттерны: collect в середине цепочки, потеря оптимизаций
↗
Модуль 17. Оптимизатор запросов
7 уроков
1.
Два плана: logical plan и physical plan
↗
2.
Predicate pushdown: фильтрация на источнике
↗
3.
Projection pushdown: чтение только нужных колонок
↗
4.
Slice pushdown: читаем не весь файл, а только нужные строки
↗
5.
Common subexpression elimination: не считаем дважды
↗
6.
Join optimization: порядок соединений и выбор стратегии
↗
7.
show_graph: визуализация плана для отладки
↗
Модуль 18. Streaming и данные больше памяти
6 уроков
1.
Streaming engine: обработка данных больше памяти
↗
2.
Когда streaming работает, а когда нет
↗
3.
Sinks: sink_csv, sink_parquet, sink_ipc — потоковая запись
↗
4.
Настройка памяти и OOM prevention
↗
5.
Практика: streaming-пайплайн для 50 млн заказов
↗
6.
Ограничения streaming и планирование падения на eager
↗
Модуль 19. Производительность и параллелизм
7 уроков
1.
Thread pool Polars: как устроен параллелизм
↗
2.
Chunks и rechunk: влияние на производительность
↗
3.
Профилирование: встроенные инструменты и внешние профайлеры
↗
4.
Проблема маленьких файлов: много Parquet = медленно
↗
5.
Parquet-статистика: row groups, min/max, predicate pushdown
↗
6.
Бенчмаркинг: как измерять и не обманывать себя
↗
7.
Чек-лист оптимизации Polars-пайплайна
↗
Модуль 20. Тестирование и качество данных
6 уроков
1.
Почему тестировать ETL обязательно: цена ошибки в данных
↗
2.
assert_frame_equal: сравнение ожидаемого и реального
↗
3.
Тестирование схем: проверка dtypes и структуры
↗
4.
Pytest и Polars: fixtures, parametrize, conftest
↗
5.
Тестирование с моками: подмена IO без реальных файлов
↗
6.
Great Expectations и другие фреймворки качества данных
↗
Модуль 21. Production ETL/ELT пайплайны
7 уроков
1.
Архитектура production-пайплайна: ingest transform publish
↗
2.
Идемпотентность: повторный запуск не ломает данные
↗
3.
Инкрементальная загрузка: только новые и изменённые данные
↗
4.
Партиционирование и хранение: Hive-партиции, layout
↗
5.
Обработка ошибок: retry, dead letter, graceful degradation
↗
6.
Логирование и мониторинг: как понять, что пайплайн сломался
↗
7.
Деплой: расписание, оркестрация, контейнеризация
↗
Модуль 22. Продвинутые интеграции
6 уроков
1.
Чтение из PostgreSQL: read_database, connection, query pushdown
↗
2.
Delta Lake: read_delta, scan_delta, time travel
↗
3.
Apache Iceberg: scan_iceberg, снапшоты, эволюция схемы
↗
4.
PyArrow interop: из Polars в Arrow и обратно
↗
5.
Pandas bridge: from_pandas, to_pandas, перенос мышления
↗
6.
Polars SQL: SQLContext и смешанные пайплайны
↗
Модуль 23. Итоговый проект: end-to-end ETL интернет-магазина
5 уроков
1.
Постановка задачи: end-to-end ETL для интернет-магазина
↗
2.
Ingestion и очистка: читаем, чистим, типизируем
↗
3.
Transform и enrichment: joins, агрегации, витрины
↗
4.
Production hardening: партиции, инкременты, тесты, мониторинг
↗
5.
Дорожная карта: куда расти дальше в мире Polars и Data…
↗