<НА ГЛАВНУЮ

Интерактивная аналитика для e‑commerce с PyGWalker: полноценный дашборд

'Пошаговое руководство по созданию реалистичного e‑commerce датасета и интерактивного дашборда в PyGWalker для поиска трендов, корреляций и инсайтов.'

Кратко

В этом руководстве показано, как создать полный интерактивный аналитический дашборд с помощью PyGWalker и pandas. Мы генерируем реалистичный e‑commerce датасет с временными, демографическими и маркетинговыми признаками, готовим аналитические представления и запускаем PyGWalker для визуального исследования закономерностей и трендов.

Установка и импорты

Установите нужные пакеты и импортируйте библиотеки, которые используются в материале.

!pip install pygwalker pandas numpy scikit-learn
 
 
import pandas as pd
import numpy as np
import pygwalker as pyg
from datetime import datetime, timedelta

Генерация богатого e‑commerce датасета

Определяем функцию, моделирующую транзакции по категориям, продуктам, сегментам клиентов, регионам и времени. В синтетических данных учитываются сезонность, скидки, маркетинговые каналы и удовлетворенность клиентов.

def generate_advanced_dataset():
   np.random.seed(42)
   start_date = datetime(2022, 1, 1)
   dates = [start_date + timedelta(days=x) for x in range(730)]
   categories = ['Electronics', 'Clothing', 'Home & Garden', 'Sports', 'Books']
   products = {
       'Electronics': ['Laptop', 'Smartphone', 'Headphones', 'Tablet', 'Smartwatch'],
       'Clothing': ['T-Shirt', 'Jeans', 'Dress', 'Jacket', 'Sneakers'],
       'Home & Garden': ['Furniture', 'Lamp', 'Rug', 'Plant', 'Cookware'],
       'Sports': ['Yoga Mat', 'Dumbbell', 'Running Shoes', 'Bicycle', 'Tennis Racket'],
       'Books': ['Fiction', 'Non-Fiction', 'Biography', 'Science', 'History']
   }
   n_transactions = 5000
   data = []
   for _ in range(n_transactions):
       date = np.random.choice(dates)
       category = np.random.choice(categories)
       product = np.random.choice(products[category])
       base_prices = {
           'Electronics': (200, 1500),
           'Clothing': (20, 150),
           'Home & Garden': (30, 500),
           'Sports': (25, 300),
           'Books': (10, 50)
       }
       price = np.random.uniform(*base_prices[category])
       quantity = np.random.choice([1, 1, 1, 2, 2, 3], p=[0.5, 0.2, 0.15, 0.1, 0.03, 0.02])
       customer_segment = np.random.choice(['Premium', 'Standard', 'Budget'], p=[0.2, 0.5, 0.3])
       age_group = np.random.choice(['18-25', '26-35', '36-45', '46-55', '56+'])
       region = np.random.choice(['North', 'South', 'East', 'West', 'Central'])
       month = date.month
       seasonal_factor = 1.0
       if month in [11, 12]:
           seasonal_factor = 1.5
       elif month in [6, 7]:
           seasonal_factor = 1.2
       revenue = price * quantity * seasonal_factor
       discount = np.random.choice([0, 5, 10, 15, 20, 25], p=[0.4, 0.2, 0.15, 0.15, 0.07, 0.03])
       marketing_channel = np.random.choice(['Organic', 'Social Media', 'Email', 'Paid Ads'])
       base_satisfaction = 4.0
       if customer_segment == 'Premium':
           base_satisfaction += 0.5
       if discount > 15:
           base_satisfaction += 0.3
       satisfaction = np.clip(base_satisfaction + np.random.normal(0, 0.5), 1, 5)
       data.append({
           'Date': date, 'Category': category, 'Product': product, 'Price': round(price, 2),
           'Quantity': quantity, 'Revenue': round(revenue, 2), 'Customer_Segment': customer_segment,
           'Age_Group': age_group, 'Region': region, 'Discount_%': discount,
           'Marketing_Channel': marketing_channel, 'Customer_Satisfaction': round(satisfaction, 2),
           'Month': date.strftime('%B'), 'Year': date.year, 'Quarter': f'Q{(date.month-1)//3 + 1}'
       })
   df = pd.DataFrame(data)
   df['Profit_Margin'] = round(df['Revenue'] * (1 - df['Discount_%']/100) * 0.3, 2)
   df['Days_Since_Start'] = (df['Date'] - df['Date'].min()).dt.days
   return df

Функция фиксирует сид генератора случайных чисел и создаёт 5000 транзакций за два года с показателями, полезными для анализа: выручка, маржа, скидки, удовлетворенность, временные признаки и категориальные признаки.

Генерация и первичный просмотр

Сгенерируйте датасет и получите сводную информацию: количество транзакций, диапазон дат и суммарную выручку.

print("Generating advanced e-commerce dataset...")
df = generate_advanced_dataset()
print(f"\nDataset Overview:")
print(f"Total Transactions: {len(df)}")
print(f"Date Range: {df['Date'].min()} to {df['Date'].max()}")
print(f"Total Revenue: ${df['Revenue'].sum():,.2f}")
print(f"\nColumns: {list(df.columns)}")
print("\nFirst few rows:")
print(df.head())

Просмотр подтверждает структуру данных и их пригодность для визуализации и сегментации.

Подготовка агрегированных представлений

Посчитайте ежедневные продажи, сводки по категориям и показатели по сочетанию сегмент/регион для удобной перегрузки в визуализатор.

daily_sales = df.groupby('Date').agg({
   'Revenue': 'sum', 'Quantity': 'sum', 'Customer_Satisfaction': 'mean'
}).reset_index()
 
 
category_analysis = df.groupby('Category').agg({
   'Revenue': ['sum', 'mean'], 'Quantity': 'sum', 'Customer_Satisfaction': 'mean', 'Profit_Margin': 'sum'
}).reset_index()
category_analysis.columns = ['Category', 'Total_Revenue', 'Avg_Order_Value',
                            'Total_Quantity', 'Avg_Satisfaction', 'Total_Profit']
 
 
segment_analysis = df.groupby(['Customer_Segment', 'Region']).agg({
   'Revenue': 'sum', 'Customer_Satisfaction': 'mean'
}).reset_index()
 
 
print("\n" + "="*50)
print("DATASET READY FOR PYGWALKER VISUALIZATION")
print("="*50)

Эти таблицы позволяют формировать временные ряды, KPI по категориям и перекрёстные аналитические представления для дальнейшей визуальной работы.

Запуск PyGWalker и интерактивное исследование

Откройте PyGWalker, чтобы перетаскиванием полей быстро создавать графики, фильтровать данные и менять визуальные представления.

print("\n Launching PyGWalker Interactive Interface...")
walker = pyg.walk(
   df,
   spec="./pygwalker_config.json",
   use_kernel_calc=True,
   theme_key='g2'
)
 
 
print("\n PyGWalker is now running!")
print(" Try creating these visualizations:")
print("   - Revenue trend over time (line chart)")
print("   - Category distribution (pie chart)")
print("   - Price vs Satisfaction scatter plot")
print("   - Regional sales heatmap")
print("   - Discount effectiveness analysis")

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

Советы по исследованию

  • Применяйте временные фильтры и скользящие агрегаты, чтобы выявлять краткосрочные акции и сезонные всплески.
  • Анализируйте показатели по сегментам клиентов для сравнения выручки и удовлетворенности.
  • Сопоставляйте маркетинговые каналы с выручкой и количеством продаж, чтобы оценить эффективность каналов.
  • Экспортируйте графики и сохраняйте снимки для отчётов и презентаций.

Этот подход демонстрирует, как PyGWalker упрощает визуальное исследование данных на базе pandas DataFrame с минимальной настройкой.

🇬🇧

Switch Language

Read this article in English

Switch to English