Джейд Картер – Библиотеки Python Часть 2. Практическое применение (страница 18)
{'product': 'Tablet', 'price': 300, 'quantity': 3, 'user_id': 2}
])
# Чтение данных из sales
sales_df = pd.read_sql("SELECT * FROM sales", engine)
# Расчёт дохода для каждого пользователя
sales_df['revenue'] = sales_df['price'] * sales_df['quantity']
user_revenues = sales_df.groupby('user_id')['revenue'].sum().reset_index()
# Сохранение в новую таблицу
user_revenues.to_sql('user_revenues', engine, if_exists='replace', index=False)
# Проверка результатов
saved_user_revenues = pd.read_sql("SELECT * FROM user_revenues", engine)
print(saved_user_revenues)
```
Результат:
```
user_id revenue
0 1 2000
1 2 900
```
Задача 11: Поиск последнего действия пользователей
Описание:Для каждого пользователя из таблицы `activity_log` найдите его последнее действие.
Решение:
```python
# Поиск последнего действия
last_actions = activity_df.sort_values('timestamp').groupby('user_id').last().reset_index()
last_actions = last_actions[['user_id', 'action', 'timestamp']]
print(last_actions)
```
Результат:
```
user_id action timestamp
0 1 logout 2025-01-01 10:10:00
1 2 logout 2025-01-01 11:10:00
```
Задача 12: Фильтрация пользователей с высоким доходом
Описание: Используя таблицу `user_revenues`, выберите всех пользователей, чей доход превышает 1500.
Решение:
```python
# Чтение данных из user_revenues
user_revenues = pd.read_sql("SELECT * FROM user_revenues", engine)
# Фильтрация пользователей с доходом > 1500
high_revenue_users = user_revenues[user_revenues['revenue'] > 1500]
print(high_revenue_users)
```
Результат:
```
user_id revenue
0 1 2000
```
Задача 13: Распределение доходов по продуктам
Описание: Определите, какой процент от общего дохода приносит каждый продукт.
Решение:
```python
# Подсчет общего дохода
total_revenue = sales_df['revenue'].sum()
# Расчет процента дохода по продуктам
sales_df['revenue_percent'] = (sales_df['revenue'] / total_revenue) * 100
product_revenue_percent = sales_df.groupby('product')['revenue_percent'].sum().reset_index()
print(product_revenue_percent)
```
Результат:
```
product revenue_percent
0 Laptop 50.793651
1 Phone 25.396825