1
SQL и анализ данных
1. Задача: Вывести разницу income в % по каждой стране YoY, сравнивая октябрь 2022 с октябрем 2023
CREATE TABLE country
(
country_name varchar(32),
city varchar(32)
);
CREATE TABLE sales
(
date datetime,
city varchar(32),
income decimal(18,2)
);2. Задача: Подготовить запрос для retention анализа
CREATE TABLE event_log
(
event_uuid UUID,
ts TIMESTAMP,
user_id UUID,
event_name VARCHAR(32)
);Пример данных:
+-------------+---------------------+---------+------------------+
| event_uuid | ts | user_id | event_name |
+-------------+---------------------+---------+------------------+
| <some uuid> | 2019-01-15 23:55:02 | user_1 | Install |
| <some uuid> | 2019-03-01 12:12:32 | user_1 | Install |
| <some uuid> | 2019-03-01 13:30:05 | user_1 | Consultation |
| <some uuid> | ... | user_1 | ... |
| <some uuid> | 2019-03-15 13:30:05 | user_1 | Consultation |
| <some uuid> | 2019-03-03 13:30:32 | user_2 | Install |
| <some uuid> | 2019-03-06 13:34:32 | user_2 | Consultation |
+-------------+---------------------+---------+------------------+3. Задача: Провести агрегированный анализ данных о продажах
У вас есть набор данных о продажах в нескольких магазинах с информацией о клиентах, товарах и транзакциях.
+------------+---------+--------+---------+---------+----------+
| event_dt | store | item | amount | price | customer |
+------------+---------+--------+---------+---------+----------+
| 2019-01-15 | store_1 | item_1 | 1 | price_1 | user_1 |
| 2019-03-01 | store_2 | item_1 | 1 | price_1 | user_2 |
| 2019-03-15 | store_2 | item_2 | 2 | price_2 | user_3 |
| ... | ... | item_3 | ... | price_3 | user_3 |
| 2019-03-06 | store_3 | item_3 | 10 | price_3 | user_4 |
| 2019-03-06 | store_4 | item_4 | 3 | price_4 | user_5 |
| 2019-03-26 | store_5 | item_5 | 5 | price_5 | user_5 |
+------------+---------+--------+---------+---------+----------+Вывести для каждого магазина:
- общую сумму продаж
- среднюю цену товара
- количество уникальных товаров
Ответ
df['totalPrice'] = df['amount'] * df['price']
result = df.groupby('store').agg(
sales = ('totalPrice', 'sum'),
avg_price = ('price', 'mean'),
items = ('item', 'nunique')
).sort_values('totalPrice', ascending = False)2
A/B тестирование
4. Придумали АБ тест: на выдаче в тестовой группе половине врачей повесили шильдик «лучший врач», чтобы сфокусировать пользователя на конкретных карточках. Конверсия в запись на выдачу к любому врачу упала. Предположи, почему.