Вопросы по Python для анализа данных
NumPy и pandas от индексов до groupby, merge, окон и дат, плюс чистка данных, производительность и графики. Закрывает техническую секцию собеса аналитика и Data Scientist: и вопросы «почему так», и live-coding на pandas.
Проверьте себя: тест по Python для анализа данных
20 вопросов, 10 минут, уровень junior, middle или senior
NumPy: массивы и векторизация
ndarray, dtype, shape, срезы и представления, broadcasting, агрегаты по осям.
Урок: NumPy за 7 минут: массивы, broadcasting, векторизация 7 мин- Что значит axis=0
- Broadcasting: форма результата
- Обрезка выбросов по перцентилям
- Скользящее среднее через cumsum
- Попарные расстояния через broadcasting
- Стандартизация столбцов матрицы (z-score)
- Запись float в целочисленный массив
- Fancy indexing возвращает копию
Ещё 15 вопросов и задач
- Правила broadcasting
- Strides и порядок C/F
- View и copy в NumPy
- Почему NumPy быстрее списков
- Переполнение целых в NumPy
- Функции NumPy и их результат
- Сравнение с NaN
- Broadcasting строки и столбца
- Срез, копия и сумма
- Когда reshape копирует
- Векторизация в NumPy на собесе
- View и copy: где ловят баги
- Почему np.vectorize не ускоряет
- Срез NumPy это представление
- np.where с тремя аргументами
Series, DataFrame и индекс
Как устроены Series и DataFrame, роль индекса, выравнивание по меткам, типы колонок.
Урок: Series, DataFrame и индекс в pandas 7 мин- Сложение Series с разными индексами
- axis в drop
- df["a"] и df[["a"]]
- Сложение с выравниванием и fill_value
- Средние по числовым колонкам
- Топ значений с долями
- Copy-on-Write и изменение выборки
- Неуникальный индекс
Ещё 15 вопросов и задач
- Выравнивание по индексу
- Как устроен Copy-on-Write
- Основные dtypes pandas
- Series и DataFrame
- inplace=True и присваивание
- Целые с пропуском
- Методы первого знакомства с данными
- Сколько памяти занимают строки
- Сложение Series по меткам
- inplace возвращает None
- Что делает reset_index
- shape и len у DataFrame
- Зачем нужен индекс в pandas
- Что изменилось в pandas 3.0
- Строковый dtype в pandas 3.0
Выборка и фильтрация
loc и iloc, булевы маски, query, isin, between, присваивание по условию без предупреждений.
Урок: Выборка и фильтрация в pandas: loc, iloc, маски 7 мин- and вместо & в фильтре
- Быстрый доступ к одной ячейке
- between включает границы
- События в диапазоне дат
- Фильтр заказов по сумме и статусу
- Топ-N строк по колонке
- Сегменты клиентов по условию без цикла
- Выборка и присваивание через loc
Ещё 16 вопросов и задач
- Логика в фильтрах pandas
- Цепочное присваивание
- loc и iloc
- iloc после сортировки
- Фильтр по списку значений
- Присваивание по условию
- Запись по несуществующей метке
- Новая колонка через loc с маской
- Строки и колонки в одном loc
- Правая граница среза в loc и iloc
- Отрицание условия и NaN
- loc и iloc на перевёрнутом индексе
- Маска, отрицание и пропуски
- Переменная внутри query
- Как фильтровать DataFrame без сюрпризов
- Индексация pandas: производительность и ловушки
Пропуски, дубли и типы
NaN и None, isna, fillna, dropna, drop_duplicates, astype, nullable-типы, строки через .str.
Урок: Пропуски, дубли и типы: чистка данных в pandas 7 мин- astype(int) с пропусками
- Заполнить пропуски медианой группы
- Последняя версия записи по ключу
- Отчёт о пропусках по колонкам
- Цены из грязных строк
- count и len при пропусках
- Неоднозначная дата без формата
- Что удаляет dropna по умолчанию
Ещё 16 вопросов и задач
- Какие строки отмечает duplicated
- Дубли в pandas
- Что делать с пропусками
- NaN, None и pd.NA
- Дубли и числа с плавающей точкой
- Оставить последнюю запись по ключу
- Заполнение пропусков и утечка
- Сумма и среднее пустой колонки
- Nullable-типы pandas
- Порядок чистки сырых данных
- duplicated и drop_duplicates
- Агрегаты на пропусках
- Как вы чистите сырые данные
- Неслучайные пропуски
- Нормализация строк перед подсчётом
- Числа из грязной колонки
groupby и агрегаты
split-apply-combine, agg с именованными агрегатами, transform, filter, apply и их цена.
Урок: groupby в pandas за 7 минут 7 мин- groupby: agg или transform
- Почему groupby.apply медленный
- as_index=False в groupby
- Отбор клиентов по условиям на группу
- Выручка и число клиентов по городам на pandas
- Доля заказа в выручке города: transform
- Топ-N заказов в каждом городе на pandas
- dropna=False в groupby
Ещё 15 вопросов и задач
- Как работает groupby в pandas
- Оставить группы по условию
- agg, transform, filter, apply: форма результата
- Средний чек: среднее от средних
- Именованная агрегация в pandas
- NaN в ключе группировки pandas
- cumcount в groupby
- groupby по category и observed
- groupby: size против count
- transform и NaN в ключе
- Разница size и count в groupby
- Ускорить groupby.apply
- Split-apply-combine
- Топ-N в группе без apply
- Доля от суммы группы
merge, join и concat
Типы соединений, ключи, размножение строк, validate, indicator, concat по осям.
Урок: merge, join и concat в pandas 7 мин- Анти-джойн в pandas
- Клиенты без заказов: анти-джойн
- Средние продажи с учётом пустых дней
- Left merge без размножения строк
- concat и повторяющийся индекс
- concat в цикле
- Размер cross join
- Какой how у merge по умолчанию
Ещё 13 вопросов и задач
- indicator=True в merge
- merge по ключам разного типа
- Фильтр после left merge
- Типы соединений merge
- merge_asof для данных по времени
- Соединение по времени в pandas
- Как безопасно соединять таблицы в pandas
- merge, join, concat
- merge с indicator
- merge и дубли ключа: сколько строк
- Почему после merge строк стало больше
- Суффиксы _x и _y
- Параметр validate в merge
pivot, melt и сводные
pivot и pivot_table, melt, stack и unstack, crosstab, широкий и длинный формат.
Урок: pivot, melt и сводные таблицы 6 мин- Колонки-месяцы в строки и сумма по месяцам
- Сводная таблица день × город
- Когортная таблица retention на pandas
- Когортный анализ retention в pandas
- crosstab с normalize
- melt: колонки-месяцы в строки
- Длинный и широкий формат
- margins в pivot_table
Ещё 11 вопросов и задач
Окна и сдвиги
shift, diff, pct_change, rolling, expanding, cumsum, rank и окна внутри групп.
Урок: Окна и сдвиги в pandas 7 мин- rolling с center=True в признаках
- Дней с предыдущего заказа клиента
- Самая длинная серия дней подряд: diff и cumsum
- Скользящее среднее за 7 дней с пропусками дат
- Накопительная доля выручки клиента
- Номер заказа клиента
- diff и pct_change
- rolling против expanding
Ещё 14 вопросов и задач
- Время между заказами клиента в pandas
- rolling в группах и MultiIndex
- Порядок шагов: интервалы между заказами
- rank: average, min, dense
- shift, diff и cumsum
- pct_change в pandas
- rank в pandas по умолчанию
- rank: аналоги ROW_NUMBER, RANK, DENSE_RANK
- Скользящее среднее при пропусках дат
- rolling и NaN в начале
- shift в pandas: первая строка
- shift по позиции и по времени
- shift без groupby
- Окна во временных рядах: ловушки
Даты и время
to_datetime, .dt, resample, периоды, часовые пояса, когорты и retention по датам.
Урок: Даты и время в pandas 7 мин- DAU по московскому времени из UTC на pandas
- Разбор дат дд.мм.гггг с битыми значениями
- Число сессий по таймауту на pandas
- Выручка по неделям с понедельника
- errors="coerce" в to_datetime
- DAU по московскому времени из UTC
- Аксессор .dt
- Частоты resample
Ещё 14 вопросов и задач
- tz_localize против tz_convert
- Операции с датами в pandas
- Сравнение дат с поясом и без
- NaT в pandas
- resample и пустые дни
- Timedelta: days и total_seconds
- Номер месяца жизни для когорт
- resample против groupby по дате
- Сессии по таймауту в pandas
- Timedelta.days отбрасывает часы
- to_datetime: день или месяц первым
- Скорость pd.to_datetime
- DAU в UTC и по Москве
- Подпись недели в resample
Чтение и запись данных
CSV, Excel, Parquet, SQL, JSON, кодировки, chunksize, dtype при чтении.
Урок: Чтение и запись данных в pandas 6 мин- Как прочитать большой файл в pandas
- Файл больше памяти в pandas
- Агрегат по кускам через chunksize
- Вложенный JSON заказов в таблицу
- Разбор выгрузки из Excel: sep, decimal, dtype
- Запятая в дробях при чтении CSV
- CSV для русского Excel
- read_csv для русской выгрузки
Ещё 13 вопросов и задач
- Целые числа стали float после чтения
- Ловушки при чтении данных
- Вложенный JSON в таблицу
- Ведущие нули после read_csv
- Строка NA превратилась в пропуск
- Nullable Int64
- NA при чтении CSV
- read_csv: ведущие нули и запятая
- Почему Parquet лучше CSV
- Где считать: в базе или в pandas
- Главные параметры read_csv
- Параметры в pd.read_sql
- Лишняя колонка Unnamed: 0
Производительность и память
Векторизация против apply и циклов, category, downcast, Copy-on-Write, когда брать Polars.
Урок: Производительность и память в pandas 7 мин- Чем заменить apply(axis=1)
- Когда помогает тип category
- Цепочное присваивание в pandas 3.0
- Обнулить тестовые заказы через loc
- Скидка по категории через map
- Категории сумм через np.select
- Ужать DataFrame: category и downcast
- category теряется при concat
Ещё 14 вопросов и задач
- Copy-on-Write в pandas 3.0
- Copy-on-Write: изменение колонки
- Copy-on-Write и SettingWithCopyWarning
- downcast числовых колонок
- iterrows против itertuples
- memory_usage без deep=True
- np.select
- Условная колонка без apply
- Порядок оптимизации кода на pandas
- downcast и int8
- np.where и np.select
- Когда переходить на Polars или DuckDB
- Как ускорить медленный код на pandas
- Векторизация в pandas
Графики и Jupyter
matplotlib, seaborn, выбор графика под вопрос, типичные ошибки, работа в Jupyter.
Урок: Графики и Jupyter для аналитика 6 мин