Представьте: вас взяли аналитиком в «Кофейную лавку» и прислали файл с продажами за год. Прежде чем отвечать на сложные вопросы, нужно познакомиться с данными и собрать короткую справку о магазине. Новых приёмов в проекте нет — только то, что было в четырёх уроках модуля.
Шаг 1. Загрузка
Загрузите файл data/shop_orders.csv в таблицу orders и сохраните в n_lines число её строк.
pd.read_csv("data/shop_orders.csv"); число строк — len(orders).Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
import pandas as pd
orders = ...
n_lines = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
import pandas as pd
orders = pd.read_csv("data/shop_orders.csv")
n_lines = len(orders)orders.tail(4)| order_id | date | customer_id | city | channel | category | product | price | quantity | |
|---|---|---|---|---|---|---|---|---|---|
| 2444 | 11574 | 2025-12-31 | C067 | Москва | сайт | Сладости | Печенье овсяное | 150 | 1 |
| 2445 | 11575 | 2025-12-31 | C057 | Новосибирск | маркетплейс | Сладости | Печенье овсяное | 150 | 2 |
| 2446 | 11575 | 2025-12-31 | C057 | Новосибирск | маркетплейс | Аксессуары | Фильтры бумажные | 240 | 1 |
| 2447 | 11576 | 2025-12-31 | C158 | Казань | приложение | Сладости | Зефир | 210 | 2 |
Напомним главное: одна строка — один товар в заказе. В заказе 11575 две строки — два разных товара.
Шаг 2. Заказы и покупатели
Сохраните в n_orders число разных заказов (столбец order_id), в n_customers — число разных покупателей
(столбец customer_id). Затем посчитайте: lines_per_order — сколько строк в среднем приходится на один заказ,
orders_per_customer — сколько заказов в среднем сделал один покупатель.
nunique().Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
n_orders = ...
n_customers = ...
lines_per_order = ...
orders_per_customer = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
n_orders = orders["order_id"].nunique()
n_customers = orders["customer_id"].nunique()
lines_per_order = n_lines / n_orders
orders_per_customer = n_orders / n_customersШаг 3. География
Сохраните в city_counts, сколько строк приходится на каждый город, в n_cities — сколько всего городов,
а в moscow_share — долю строк из Москвы: числом от 0 до 1.
orders["city"].value_counts() — Series с городами в индексе; его длина — число городов.city_counts["Москва"] / n_lines.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
city_counts = ...
n_cities = ...
moscow_share = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
city_counts = orders["city"].value_counts()
n_cities = len(city_counts)
moscow_share = city_counts["Москва"] / n_linesШаг 4. Деньги
Сохраните в revenue выручку каждой строки, в total — выручку за год, а в avg_check — средний чек:
сколько в среднем стоит один заказ.
orders["price"] * orders["quantity"]; за год — её сумма.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
revenue = ...
total = ...
avg_check = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
revenue = orders["price"] * orders["quantity"]
total = revenue.sum()
avg_check = total / n_ordersШаг 5. Что продаём
Series можно разделить на число — так из количеств получаются доли.
Сохраните в category_share долю каждой категории (столбец category) в строках таблицы — Series с числами
от 0 до 1. Затем в top_category — название самой частой категории, а в top_share — её долю.
orders["category"].value_counts() / n_lines — каждое количество делится на число строк.value_counts — от частого к редкому: название — category_share.index[0], доля — category_share.max().Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
category_share = ...
top_category = ...
top_share = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
category_share = orders["category"].value_counts() / n_lines
top_category = category_share.index[0]
top_share = category_share.max()Справка о магазине
print("строк:", n_lines, "· заказов:", n_orders, "· покупателей:", n_customers)
print("выручка:", total, "₽ · средний чек:", round(avg_check), "₽")
print("городов:", n_cities, "· доля Москвы:", round(moscow_share * 100, 1), "%")
print("главная категория:", top_category, "—", round(top_share * 100, 1), "% строк")строк: 2448 · заказов: 1576 · покупателей: 213 выручка: 3301420 ₽ · средний чек: 2095 ₽ городов: 5 · доля Москвы: 38.7 % главная категория: Кофе — 39.8 % строк
Выводы
За 2025 год в «Кофейной лавке» 1576 заказов от 213 покупателей — в среднем больше семи заказов на человека: у магазина постоянные клиенты. Заказ небольшой, полторы позиции, средний чек — около 2100 ₽. Магазин работает в пяти городах, почти 40 % покупок — Москва. Чаще всего покупают кофе — 40 % строк.
Заметьте оговорку: «40 % строк» — это доля покупок, а не денег. Сколько выручки приносит каждая категория и каждый город, мы пока посчитать не можем: для этого нужно отбирать строки по условию и группировать — этому посвящены следующие модули.