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

Мини-проект: какой канал продаж лучше

Сравнить сайт, приложение и маркетплейс: выручка, заказы, покупатели, средний и медианный чек, доля канала в каждом городе и состав продаж — группировкой, agg и transform.

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

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

[ ]Продажи с выручкой строки
import pandas as pd

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

Шаг 1. Общая картина

[ ]Упражнение 1Выручка, заказы, покупатели решено

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

channels = ...

Шаг 2. Показатели

Абсолютные числа трудно сравнивать: у сайта всего больше. Перейдём к относительным.

[ ]Упражнение 2Доля, средний чек, частота решено

Добавьте в channels три столбца: share — доля канала в общей выручке, check — средний чек (выручка на заказ), orders_per_buyer — сколько заказов в среднем сделал один покупатель канала.

# добавьте в channels столбцы share, check и orders_per_buyer

[ ]Каналы в цифрах
channels.round(3)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
total orders buyers share check orders_per_buyer
channel
маркетплейс 876070 407 152 0.265 2152.506 2.678
приложение 902430 454 159 0.273 1987.731 2.855
сайт 1522920 715 193 0.461 2129.958 3.705
Вывод появится, когда решите упражнение «Доля, средний чек, частота», — иначе он подскажет ответ. Ячейку можно и выполнить.

Сайт даёт 46 % выручки — почти столько же, сколько два других канала вместе. Средний чек у сайта и маркетплейса почти одинаковый, у приложения — на 7 % ниже. Зато на сайт возвращаются чаще: 3.7 заказа на покупателя против 2.7–2.9.

Пояснение с ответом появится, когда решите упражнение «Доля, средний чек, частота».

Шаг 3. Каналы по городам

Одинакова ли картина в разных городах? Нужна доля канала в выручке своего города.

[ ]Упражнение 3Доля канала в городе решено

Сохраните в city_channel плоскую таблицу со столбцами city, channel, revenue — выручку по каждой паре «город, канал». Добавьте столбец share — долю этой выручки в выручке города.

city_channel = ...
# добавьте в city_channel столбец share

[ ]Упражнение 4Где сильны приложение и маркетплейс решено

Сохраните в app строки таблицы city_channel для приложения, отсортированные по убыванию доли, а в app_city — город, где доля приложения самая высокая. То же для маркетплейса: market и market_city.

app = ...
app_city = ...
market = ...
market_city = ...

Шаг 4. Что продаёт каждый канал

[ ]Упражнение 5Состав продаж решено

Сохраните в mix плоскую таблицу со столбцами channel, category, revenue — выручку по парам «канал, категория». Добавьте столбец share — долю категории в выручке канала, округлённую до трёх знаков. В dishes сохраните строки категории «Посуда».

mix = ...
# добавьте в mix столбец share
dishes = ...

На маркетплейсе посуда даёт 19 % выручки — вдвое больше, чем на сайте (8.5 %). Там чаще покупают разовые дорогие вещи, а за кофе приходят на сайт и в приложение.

Пояснение с ответом появится, когда решите упражнение «Состав продаж».

Шаг 5. Обычный заказ

Средний чек чувствителен к редким крупным заказам. Посмотрим на медиану — но для этого сначала нужны суммы заказов: сейчас одна строка — это позиция, а не заказ.

[ ]Упражнение 6Средний и медианный чек решено

Сохраните в order_totals плоскую таблицу channel, order_id, revenue — сумму каждого заказа с его каналом. По ней посчитайте typical — таблицу по каналам со столбцами mean и median суммы заказа.

order_totals = ...
typical = ...

Это приём «группировка в два шага»: сначала свернуть строки до нужной единицы (заказ), потом считать статистику по этим единицам.

Итог

[ ]Сводка по каналам
report = channels[["total", "share", "orders", "check", "orders_per_buyer"]].copy()
report["median_check"] = typical["median"]
report.round(2).sort_values("total", ascending=False)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
total share orders check orders_per_buyer median_check
channel
сайт 1522920 0.46 715 2129.96 3.70 1610.0
приложение 902430 0.27 454 1987.73 2.86 1450.0
маркетплейс 876070 0.27 407 2152.51 2.68 1620.0
Итог появится, когда решите все упражнения урока, — в нём ответы. Ячейку можно и выполнить.

Выводы

  • Сайт — основа бизнеса: 46 % выручки и самые лояльные покупатели (3.7 заказа на человека).
  • Приложение даёт столько же выручки, сколько маркетплейс, но чек там ниже: средний — 1990 ₽, медианный — 1450 ₽. Сильнее всего приложение в Екатеринбурге — 35 % выручки города.
  • Маркетплейс — канал разовых дорогих покупок: посуда занимает там 19 % выручки, а заказов на покупателя меньше всего. Его доля выше всего в Санкт-Петербурге — 31 %.
  • Медианный чек везде на четверть ниже среднего: типичный заказ скромнее, чем кажется по среднему.
Выводы с ответами появятся, когда решите все упражнения урока.

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

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

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

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

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