Нашли ошибку?
Скачать чистый
мини-проект≈ 20 минупражнения: 0 из 5

Мини-проект: отчёт одной цепочкой

От сырого CSV до графика — читаемыми цепочками: функция подготовки как шаг pipe, месячная выручка, сводная по каналам с долей сайта, своя функция «лучшие товары категории» и график трёх каналов.

Python запустится при первом выполнении

Владелец «Кофейной лавки» хочет получать один и тот же отчёт каждый месяц — по свежей выгрузке. Значит, анализ должен быть записан так, чтобы его можно было запустить снова, ничего не меняя, и чтобы через полгода было понятно, что делает каждая строка. Соберём такой отчёт из цепочек. Новых методов в проекте нет.

[ ]Сырая выгрузка
import pandas as pd

raw = pd.read_csv("data/shop_orders.csv", parse_dates=["date"])
raw.head(3)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
order_id date customer_id city channel category product price quantity
0 10001 2025-01-01 C095 Москва маркетплейс Аксессуары Кофемолка ручная 3200 2
1 10001 2025-01-01 C095 Москва маркетплейс Чай Травяной сбор 50 г 260 1
2 10002 2025-01-01 C059 Москва приложение Сладости Шоколад горький 180 1

Шаг 1. Подготовка — одной функцией

Выручка строки и номер месяца нужны почти в каждом расчёте. Оформим их добавление функцией: тогда любая цепочка начнётся одинаково — .pipe(prepare).

[ ]Упражнение 1Функция prepare решено

Допишите функцию prepare(table): она возвращает таблицу с двумя новыми столбцами — revenue (цена × количество) и month (номер месяца из date). Исходную таблицу функция менять не должна. Затем сохраните в orders результат её применения к raw.

def prepare(table):
    return ...


orders = ...

Шаг 2. Выручка по месяцам

[ ]Упражнение 2Первая цепочка решено

Цепочкой от raw получите monthly — выручку по месяцам: подготовка через pipe, группировка по month, сумма revenue. В best_month сохраните номер месяца с наибольшей выручкой.

monthly = (
    raw
    # допишите шаги цепочки
)
best_month = ...

Шаг 3. Каналы и доля сайта

В цепочке можно не только сворачивать данные, но и добавлять столбцы к уже свёрнутой таблице — assign с lambda получит сводную таблицу «на этом шаге».

[ ]Упражнение 3Сводная с вычисляемыми столбцами решено

Цепочкой от raw получите channels: сводная таблица выручки (месяцы в строках, каналы в столбцах), к которой добавлены столбцы total — сумма трёх каналов — и site_share — доля сайта в total, три знака.

channels = (
    raw
    # допишите шаги цепочки
)

[ ]Первые месяцы
channels.head(4)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
channel маркетплейс приложение сайт total site_share
month
1 81700 106380 130860 318940 0.410
2 66650 50450 133330 250430 0.532
3 86720 96070 114990 297780 0.386
4 115660 66120 157510 339290 0.464
Вывод появится, когда решите упражнение «Сводная с вычисляемыми столбцами», — иначе он подскажет ответ. Ячейку можно и выполнить.

Здесь два assign подряд — так нагляднее, что site_share считается из уже готового total. Можно и одним: столбцы в assign создаются по порядку, и lambda следующего видит предыдущие.

Шаг 4. Свой шаг с параметрами

«Лучшие товары категории» пригодятся для любой категории и любого числа товаров — значит, это функция с параметрами. Внутри неё — тоже цепочка.

[ ]Упражнение 4Лучшие товары категории решено

Допишите функцию top_products(table, category, n): она возвращает таблицу из n товаров категории category с наибольшей выручкой — столбцы product и revenue, индекс с нуля. Затем получите top_tea — два лучших чая — цепочкой с двумя pipe.

def top_products(table, category, n):
    return (
        table
        # допишите шаги: отбор категории, сумма revenue по товарам, n лучших, индекс с нуля
    )


top_tea = ...

Шаг 5. График

Метод plot — такой же шаг, как остальные; им цепочка может заканчиваться.

[ ]Упражнение 5Каналы на графике решено

Цепочкой от raw постройте линейный график выручки трёх каналов по месяцам и сохраните в ax: подготовка, сводная таблица месяцы × каналы, plot с заголовком «Выручка по каналам, 2025». Подпишите оси: X — «месяц», Y — «₽».

ax = (
    raw
    # допишите шаги цепочки; последний — .plot(...)
)
# подпишите оси

Доля сайта — уже посчитанный столбец; для двенадцати значений подойдут столбцы:

[ ]Доля сайта по месяцам
channels["site_share"].plot(kind="bar", title="Доля сайта в выручке по месяцам", rot=0)
Выводсохранённый · нажмите «Выполнить», чтобы получить свойГрафик: Доля сайта по месяцам
Вывод появится, когда решите упражнение «Сводная с вычисляемыми столбцами», — иначе он подскажет ответ. Ячейку можно и выполнить.

Весь путь целиком

Вот как выглядит отчёт «от файла до графика» одной цепочкой. Здесь собрано многое из курса: чтение с датами, свой шаг, фильтр, индекс из дат, пересчёт в недели, окно и график.

[ ]От CSV до графика
(
    pd.read_csv("data/shop_orders.csv", parse_dates=["date"])
    .pipe(prepare)
    .query("category == 'Кофе'")
    .set_index("date")["revenue"]
    .resample("W")
    .sum()
    .iloc[1:-1]
    .rolling(4)
    .mean()
    .plot(title="Кофе: выручка за неделю, среднее за 4 недели")
)
Выводсохранённый · нажмите «Выполнить», чтобы получить свойГрафик: От CSV до графика

Прочитайте её сверху вниз: загрузить → подготовить → оставить кофе → даты в индекс → сложить по неделям → убрать неполные недели → сгладить окном в четыре недели → нарисовать. Каждая строка — один шаг, и каждый можно закомментировать, чтобы посмотреть на промежуточный результат.

Выводы

  • Сайт даёт от 39 до 66 % выручки в зависимости от месяца; самая высокая его доля — в октябре.
  • Лучшие чаи — улун и зелёный; по кофе лидирует «Эфиопия 250 г», за ней — килограммовая «Бразилия», а «Эспрессо-смесь» и «Колумбия 250 г» идут почти вровень.
  • У кофе есть весенний подъём в апреле и провал в июле — августе. На сглаженном графике пик виден на пару недель позже: скользящее среднее ставит значение в конец окна (урок о rolling).
Выводы с ответами появятся, когда решите все упражнения урока.

И главное — про сам код. Функцию prepare мы написали один раз и использовали на каждом шаге. Если владелец попросит считать выручку со скидкой, правка понадобится в одном месте. Это и есть «хороший код» для аналитика: не самый короткий и не самый хитрый, а такой, который легко прочитать, проверить и запустить снова.

Подробнее в справочнике

Практика по модулю

Задачи по pandas для самостоятельной практики появятся в разделе «Задачи → pandas».

Нашли ошибку?