Практика анализа данных электронной коммерции в Pandas
В этом разделе используется полный пример анализа данных электронной коммерции, чтобы комплексно применить различные возможности Pandas для анализа данных.
Обзор кейса
Анализ данных о заказах платформы электронной коммерции, включая тенденции продаж, эффективность товаров, анализ клиентов и другие измерения.
Подготовка данных
Пример
import pandas as pd
import numpy as np
# Имитация данных о заказах электронной коммерции
np.random.seed(42)
n_orders = 1000
orders = pd.DataFrame({
"Order ID": range(1, n_orders + 1),
"Customer ID": np.random.randint(100, 200, n_orders),
"Product ID": np.random.randint(1, 20, n_orders),
"Order Date": pd.date_range("2024-01-01", periods=n_orders, freq="30min"),
"Quantity": np.random.randint(1, 5, n_orders),
"Unit Price": np.random.uniform(10, 500, n_orders).round(2)
})
# Рассчитать сумму заказа
orders["Order Amount"] = (orders["Quantity"] * orders["Unit Price"]).round(2)
print("Обзор данных о заказах:")
print(orders.head(10))
print(f"\nОбъем данных: {len(orders)} записей")
import numpy as np
# Имитация данных о заказах электронной коммерции
np.random.seed(42)
n_orders = 1000
orders = pd.DataFrame({
"Order ID": range(1, n_orders + 1),
"Customer ID": np.random.randint(100, 200, n_orders),
"Product ID": np.random.randint(1, 20, n_orders),
"Order Date": pd.date_range("2024-01-01", periods=n_orders, freq="30min"),
"Quantity": np.random.randint(1, 5, n_orders),
"Unit Price": np.random.uniform(10, 500, n_orders).round(2)
})
# Рассчитать сумму заказа
orders["Order Amount"] = (orders["Quantity"] * orders["Unit Price"]).round(2)
print("Обзор данных о заказах:")
print(orders.head(10))
print(f"\nОбъем данных: {len(orders)} записей")
Предобработка данных
Пример
# Извлечение признаков даты
orders["Date"] = orders["Order Date"].dt.date
orders["Hour"] = orders["Order Date"].dt.hour
orders["Weekday"] = orders["Order Date"].dt.day_name()
orders["Month"] = orders["Order Date"].dt.month
print("После добавления временных признаков:")
print(orders.head())
print()
# Проверка пропущенных значений
print("Проверка пропущенных значений:")
print(orders.isnull().sum())
orders["Date"] = orders["Order Date"].dt.date
orders["Hour"] = orders["Order Date"].dt.hour
orders["Weekday"] = orders["Order Date"].dt.day_name()
orders["Month"] = orders["Order Date"].dt.month
print("После добавления временных признаков:")
print(orders.head())
print()
# Проверка пропущенных значений
print("Проверка пропущенных значений:")
print(orders.isnull().sum())
Анализ продаж
Общая ситуация с продажами
Пример
# Общие показатели продаж
print("=== Общая ситуация с продажами ==="\n")
print(f"Всего заказов: {len(orders):,}")
print(f"Общая сумма продаж: ¥{orders['Order Amount'].sum():,.2f}")
print(f"Средняя сумма заказа: ¥{orders['Order Amount'].mean():,.2f}")
print(f"Медианная сумма заказа: ¥{orders['Order Amount'].median():,.2f}")
print()
# Ежемесячная статистика
monthly = orders.groupby("Month").agg({
"Order ID": "count",
"Order Amount": "sum",
"Customer ID": "nunique"
}).rename(columns={
"Order ID": "Order Count",
"Order Amount": "Sales Amount",
"Customer ID": "Customer Count"
})
print("Ежемесячная динамика продаж:")
print(monthly)
print("=== Общая ситуация с продажами ==="\n")
print(f"Всего заказов: {len(orders):,}")
print(f"Общая сумма продаж: ¥{orders['Order Amount'].sum():,.2f}")
print(f"Средняя сумма заказа: ¥{orders['Order Amount'].mean():,.2f}")
print(f"Медианная сумма заказа: ¥{orders['Order Amount'].median():,.2f}")
print()
# Ежемесячная статистика
monthly = orders.groupby("Month").agg({
"Order ID": "count",
"Order Amount": "sum",
"Customer ID": "nunique"
}).rename(columns={
"Order ID": "Order Count",
"Order Amount": "Sales Amount",
"Customer ID": "Customer Count"
})
print("Ежемесячная динамика продаж:")
print(monthly)
Анализ товаров
Пример
# Рейтинг продаж товаров
product_sales = orders.groupby("Product ID").agg({
"Order ID": "count",
"Quantity": "sum",
"Order Amount": "sum"
}).rename(columns={
"Order ID": "Order Count",
"Quantity": "Sales Volume",
"Order Amount": "Sales Amount"
}).sort_values("Sales Amount", ascending=False)
print("=== Топ-10 продаж товаров ==="\n")
print(product_sales.head(10))
print()
# Самый продаваемый товар
print(f"Самый продаваемый товар: Товар {product_sales.index)
print(f"Сумма продаж: ¥{product_sales.iloc)
product_sales = orders.groupby("Product ID").agg({
"Order ID": "count",
"Quantity": "sum",
"Order Amount": "sum"
}).rename(columns={
"Order ID": "Order Count",
"Quantity": "Sales Volume",
"Order Amount": "Sales Amount"
}).sort_values("Sales Amount", ascending=False)
print("=== Топ-10 продаж товаров ==="\n")
print(product_sales.head(10))
print()
# Самый продаваемый товар
print(f"Самый продаваемый товар: Товар {product_sales.index)
print(f"Сумма продаж: ¥{product_sales.iloc)
Анализ клиентов
Пример
# Анализ расходов клиентов
customer_sales = orders.groupby("Customer ID").agg({
"Order ID": "count",
"Order Amount": "sum"
}).rename(columns={
"Order ID": "Order Count",
"Order Amount": "Total Spending"
})
print("=== Анализ клиентов ==="\n")
print(f"Количество активных клиентов: {len(customer_sales)}")
print(f"Среднее число заказов на клиента: {customer_sales['Order Count'].mean():.1f}")
print(f"Средние расходы на клиента: ¥{customer_sales['Total Spending'].mean():,.2f}")
print()
# Сегментация клиентов
customer_sales["Segment"] = pd.cut(
customer_sales["Total Spending"],
bins=[0, 1000, 5000, 10000, float("inf")],
labels=["Обычный", "Серебряный", "Золотой", "VIP"]
)
print("Статистика по сегментам клиентов:")
print(customer_sales["Segment"].value_counts())
customer_sales = orders.groupby("Customer ID").agg({
"Order ID": "count",
"Order Amount": "sum"
}).rename(columns={
"Order ID": "Order Count",
"Order Amount": "Total Spending"
})
print("=== Анализ клиентов ==="\n")
print(f"Количество активных клиентов: {len(customer_sales)}")
print(f"Среднее число заказов на клиента: {customer_sales['Order Count'].mean():.1f}")
print(f"Средние расходы на клиента: ¥{customer_sales['Total Spending'].mean():,.2f}")
print()
# Сегментация клиентов
customer_sales["Segment"] = pd.cut(
customer_sales["Total Spending"],
bins=[0, 1000, 5000, 10000, float("inf")],
labels=["Обычный", "Серебряный", "Золотой", "VIP"]
)
print("Статистика по сегментам клиентов:")
print(customer_sales["Segment"].value_counts())
Анализ по времени
Пример
# Анализ по временным периодам
hourly = orders.groupby("Hour")["Order Amount"].sum()
print("=== Анализ продаж по периодам времени ==="\n")
print(f"Час пика продаж: {hourly.idxmax()} ч.")
print(f"Сумма продаж за этот период: ¥{hourly.max():,.2f}")
print()
# Анализ по дням недели
weekday = orders.groupby("Weekday")["Order Amount"].sum().reindex([
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
])
print("Продажи по дням недели:")
for day, amount in weekday.items():
print(f"{day}: ¥{amount:,.2f}")
hourly = orders.groupby("Hour")["Order Amount"].sum()
print("=== Анализ продаж по периодам времени ==="\n")
print(f"Час пика продаж: {hourly.idxmax()} ч.")
print(f"Сумма продаж за этот период: ¥{hourly.max():,.2f}")
print()
# Анализ по дням недели
weekday = orders.groupby("Weekday")["Order Amount"].sum().reindex([
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
])
print("Продажи по дням недели:")
for day, amount in weekday.items():
print(f"{day}: ¥{amount:,.2f}")
Сводка анализа
Пример
print("""
=== Сводка анализа данных электронной коммерции ===
1. Обзор продаж
- Всего заказов: {0}
- Общий объем продаж: ¥{1:,.2f}
- Средняя стоимость заказа: ¥{2:.2f}
2. Эффективность продуктов
- Самый продаваемый товар: Товар {3}
- Распределение продаж товаров неравномерно, при этом ведущие товары приносят значительную выручку
3. Аналитика клиентов
- Активные клиенты: {4} человек
- Рекомендуется отдавать приоритет удержанию ценных клиентов
4. Временные закономерности
- Пик продаж около {5} часов
- Маркетинговые стратегии можно корректировать в зависимости от пиковых периодов
5. Рекомендации по оптимизации
- 1) Увеличьте запасы и продвижение для самых продаваемых товаров
- 2) Предоставляйте персонализированные услуги ценным клиентам
- 3) Увеличьте штат службы поддержки в часы пик продаж
""".format(
len(orders),
orders["Order Amount"].sum(),
orders["Order Amount"].mean(),
product_sales.index[0],
len(customer_sales),
hourly.idxmax()
))
=== Сводка анализа данных электронной коммерции ===
1. Обзор продаж
- Всего заказов: {0}
- Общий объем продаж: ¥{1:,.2f}
- Средняя стоимость заказа: ¥{2:.2f}
2. Эффективность продуктов
- Самый продаваемый товар: Товар {3}
- Распределение продаж товаров неравномерно, при этом ведущие товары приносят значительную выручку
3. Аналитика клиентов
- Активные клиенты: {4} человек
- Рекомендуется отдавать приоритет удержанию ценных клиентов
4. Временные закономерности
- Пик продаж около {5} часов
- Маркетинговые стратегии можно корректировать в зависимости от пиковых периодов
5. Рекомендации по оптимизации
- 1) Увеличьте запасы и продвижение для самых продаваемых товаров
- 2) Предоставляйте персонализированные услуги ценным клиентам
- 3) Увеличьте штат службы поддержки в часы пик продаж
""".format(
len(orders),
orders["Order Amount"].sum(),
orders["Order Amount"].mean(),
product_sales.index[0],
len(customer_sales),
hourly.idxmax()
))