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

Мини-проект: покупки по городам

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

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

Менеджер «Кофейной лавки» прислал список вопросов. На каждый можно ответить выборкой — приёмами этого модуля. Новых методов в проекте нет.

[ ]Таблица продаж
import pandas as pd

orders = pd.read_csv("data/shop_orders.csv")
orders.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. Крупные покупки в Казани

«Покажи строки из Казани, где одна позиция принесла 5000 ₽ и больше».

Столбца с выручкой в таблице нет — есть цена и количество. Но маску можно построить по любому Series той же длины, не только по столбцу таблицы: посчитаем выручку отдельно и сравним её с порогом.

[ ]Упражнение 1Позиции от 5000 ₽ решено

Сохраните в revenue выручку каждой строки (цена × количество), а в kazan_big — строки таблицы orders, где город — Казань и выручка строки не меньше 5000.

revenue = ...
kazan_big = ...

Вопрос 2. Правда ли, что зимой чаще берут чай?

Нужно сравнить долю чая в зимних строках и в остальных. Зима — декабрь, январь и февраль. Даты в таблице пока хранятся текстом, но в формате «год-месяц-день» с ведущими нулями. Такие строки сравниваются правильно: текст сравнивается символ за символом слева направо, а слева стоит самое важное — год, потом месяц, потом день.

[ ]Даты как текст
print(orders["date"].min(), orders["date"].max())
print("2025-02-28" < "2025-03-01")
print((orders["date"] >= "2025-12-01").sum())
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
2025-01-01 2025-12-31
True
329

С настоящими датами работать удобнее — до них дойдём в модуле об очистке. Пока хватит сравнения строк.

И ещё одно: маской можно отбирать значения не только у таблицы, но и у любого Series той же длины — в том числе у другой маски. Например, если is_big — маска крупных покупок, а is_kazan — маска строк Казани, то is_big[is_kazan] — значения is_big только в строках Казани, а их среднее — доля крупных покупок среди казанских.

[ ]Упражнение 2Чай зимой решено

Сохраните в is_winter маску зимних строк: дата раньше 1 марта или не раньше 1 декабря. В is_tea — маску строк с категорией «Чай». Затем посчитайте tea_winter — долю чая среди зимних строк и tea_rest — долю чая среди остальных.

is_winter = ...
is_tea = ...
tea_winter = ...
tea_rest = ...

Вопрос 3. Маркетплейс против сайта

«На маркетплейсе покупают более дорогие товары, чем на сайте?»

[ ]Упражнение 3Средняя цена по каналам решено

Сохраните в site_price среднюю цену товара в строках с каналом «сайт», в market_price — с каналом «маркетплейс». В market_costly сохраните долю строк с ценой от 1000 ₽ среди строк маркетплейса.

site_price = ...
market_price = ...
market_costly = ...

Вопрос 4. Где покупают самое дорогое

[ ]Упражнение 4Дорогие товары по городам решено

Сохраните в pricey_cities, сколько строк с ценой выше 2000 приходится на каждый город, а в pricey_moscow — число таких строк в Москве.

pricey_cities = ...
pricey_moscow = ...

Вопрос 5. Рекордная покупка

У Series, как и у таблицы, есть iloc: столбец.iloc[0] — первое по порядку значение.

[ ]Упражнение 5Больше всего штук решено

Сохраните в record строку таблицы с наибольшим количеством штук — таблицей из одной строки. В record_city сохраните город этой покупки — строкой текста.

record = ...
record_city = ...

Ответы менеджеру

[ ]Итог
print("крупных покупок в Казани:", len(kazan_big))
print("доля чая зимой:", round(tea_winter * 100, 1), "% · в остальное время:", round(tea_rest * 100, 1), "%")
print("средняя цена: сайт", round(site_price), "₽ · маркетплейс", round(market_price), "₽")
print("покупок дороже 2000 ₽ в Москве:", pricey_moscow, "из", pricey_cities.sum())
print("рекорд:", record["quantity"].iloc[0], "шт. —", record["product"].iloc[0], "·", record_city)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
крупных покупок в Казани: 5
доля чая зимой: 35.1 % · в остальное время: 24.6 %
средняя цена: сайт 677 ₽ · маркетплейс 728 ₽
покупок дороже 2000 ₽ в Москве: 26 из 66
рекорд: 10 шт. — Кофе без кофеина 250 г · Новосибирск
Итог появится, когда решите все упражнения урока, — в нём ответы. Ячейку можно и выполнить.

Выводы

  • Крупных покупок в Казани всего пять: кофемолки и оптовые партии кофе.
  • Зимой чай действительно берут чаще: 35 % строк против 25 % в остальное время.
  • На маркетплейсе средняя цена товара выше, чем на сайте: 728 ₽ против 677 ₽ — там чаще покупают дорогие позиции.
  • Покупки дороже 2000 ₽ распределены по городам примерно так же, как все покупки: больше всего — в Москве.
Выводы с ответами появятся, когда решите все упражнения урока.

Каждый ответ — это фильтр и простой итог. Но считать отдельно по каждому каналу и городу утомительно: три канала — три строки кода. В модуле о группировке pandas сделает это одной командой.

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

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

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

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