Практика анализа данных электронной коммерции в 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)} записей")

Предобработка данных

Пример

# Извлечение признаков даты
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)

Анализ товаров

Пример

# Рейтинг продаж товаров
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())

Анализ по времени

Пример

# Анализ по временным периодам
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()
))
Другие расширения