Pandas电商数据分析实战指南

1. 电商数据分析概述

电商数据分析是通过对电商平台产生的海量数据进行收集、处理、分析和可视化,从而洞察用户行为、优化运营策略、提升销售业绩的过程。在当今数据驱动的商业环境中,电商数据分析已成为企业决策的重要支撑。

1.1 电商数据分析的核心价值

分析维度核心价值典型应用场景
用户行为分析了解用户偏好和购买习惯个性化推荐、精准营销
销售趋势分析掌握产品销售动态库存管理、促销策略
运营效率分析优化业务流程物流优化、客服改进
市场竞争分析把握市场定位定价策略、产品规划

2. 电商数据分析技术栈

2.1 核心工具组合

电商数据分析主要依赖Python生态中的三大核心库:Pandas用于数据处理,NumPy用于数值计算,Matplotlib用于数据可视化。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 创建示例电商数据
def create_sample_ecommerce_data():
    """生成模拟电商数据集"""
    np.random.seed(42)
    dates = pd.date_range('2024-01-01', periods=100, freq='D')
    
    data = {
        'order_id': range(1000, 1100),
        'user_id': np.random.randint(1001, 1051, 100),
        'product_id': np.random.randint(1, 21, 100),
        'category': np.random.choice(['电子产品', '服装', '家居', '美妆', '食品'], 100),
        'quantity': np.random.randint(1, 5, 100),
        'price': np.round(np.random.uniform(10, 500, 100), 2),
        'order_date': dates,
        'payment_method': np.random.choice(['支付宝', '微信', '银行卡'], 100),
        'city': np.random.choice(['北京', '上海', '广州', '深圳', '杭州'], 100)
    }
    
    df = pd.DataFrame(data)
    df['total_amount'] = df['quantity'] * df['price']
    return df

# 加载数据
ecommerce_df = create_sample_ecommerce_data()
print("电商数据概览:")
print(ecommerce_df.head())

3. 电商数据分析实战案例

3.1 数据清洗与预处理

数据清洗是电商数据分析的第一步,确保数据质量对后续分析至关重要。

def data_cleaning(df):
    """电商数据清洗函数"""
    print("原始数据形状:", df.shape)
    
    # 处理缺失值
    print("缺失值统计:")
    print(df.isnull().sum())
    
    # 处理重复数据
    duplicates = df.duplicated().sum()
    print(f"重复数据数量: {duplicates}")
    df = df.drop_duplicates()
    
    # 数据类型转换
    df['order_date'] = pd.to_datetime(df['order_date'])
    
    # 异常值处理 - 价格异常检测
    price_q1 = df['price'].quantile(0.25)
    price_q3 = df['price'].quantile(0.75)
    iqr = price_q3 - price_q1
    lower_bound = price_q1 - 1.5 * iqr
    upper_bound = price_q3 + 1.5 * iqr
    
    outliers = df[(df['price'] < lower_bound) | (df['price'] > upper_bound)]
    print(f"价格异常值数量: {len(outliers)}")
    
    return df

cleaned_df = data_cleaning(ecommerce_df)

3.2 销售趋势分析

通过时间序列分析掌握销售动态,为库存管理和促销策略提供依据。

def sales_trend_analysis(df):
    """销售趋势分析"""
    # 按日期分组计算每日销售额
    daily_sales = df.groupby('order_date').agg({
        'total_amount': 'sum',
        'order_id': 'count'
    }).rename(columns={'order_id': 'order_count', 'total_amount': 'daily_revenue'})
    
    # 计算移动平均平滑趋势
    daily_sales['revenue_ma_7'] = daily_sales['daily_revenue'].rolling(window=7).mean()
    
    # 可视化销售趋势
    plt.figure(figsize=(12, 6))
    plt.subplot(1, 2, 1)
    plt.plot(daily_sales.index, daily_sales['daily_revenue'], 
             label='日销售额', alpha=0.7)
    plt.plot(daily_sales.index, daily_sales['revenue_ma_7'], 
             label='7日移动平均', linewidth=2)
    plt.title('销售额趋势分析')
    plt.xlabel('日期')
    plt.ylabel('销售额')
    plt.legend()
    plt.xticks(rotation=45)
    
    plt.subplot(1, 2, 2)
    daily_sales['order_count'].plot(kind='bar', alpha=0.7)
    plt.title('日订单量分布')
    plt.xlabel('日期')
    plt.ylabel('订单数量')
    plt.xticks(rotation=45)
    
    plt.tight_layout()
    plt.show()
    
    return daily_sales

sales_trend = sales_trend_analysis(cleaned_df)

3.3 用户行为分析

深入分析用户购买行为,为个性化营销提供数据支持。

def user_behavior_analysis(df):
    """用户行为深度分析"""
    
    # RFM分析 - 用户价值分层
    current_date = df['order_date'].max()
    
    rfm_df = df.groupby('user_id').agg({
        'order_date': lambda x: (current_date - x.max()).days,  # 最近购买时间
        'order_id': 'count',  # 购买频率
        'total_amount': 'sum'  # 购买金额
    }).rename(columns={
        'order_date': 'recency',
        'order_id': 'frequency',
        'total_amount': 'monetary'
    })
    
    # RFM评分
    rfm_df['R_Score'] = pd.qcut(rfm_df['recency'], 3, labels=[3, 2, 1])
    rfm_df['F_Score'] = pd.qcut(rfm_df['frequency'], 3, labels=[1, 2, 3])
    rfm_df['M_Score'] = pd.qcut(rfm_df['monetary'], 3, labels=[1, 2, 3])
    
    rfm_df['RFM_Score'] = rfm_df['R_Score'].astype(str) + rfm_df['F_Score'].astype(str) + rfm_df['M_Score'].astype(str)
    
    # 用户价值分层
    def rfm_segment(row):
        if row['R_Score'] == 3 and row['F_Score'] == 3 and row['M_Score'] == 3:
            return '高价值用户'
        elif row['R_Score'] == 3 and row['F_Score'] >= 2:
            return '潜力用户'
        elif row['R_Score'] <= 2:
            return '流失风险用户'
        else:
            return '一般用户'
    
    rfm_df['segment'] = rfm_df.apply(rfm_segment, axis=1)
    
    # 用户分层统计
    segment_stats = rfm_df['segment'].value_counts()
    
    # 可视化用户分层
    plt.figure(figsize=(10, 5))
    plt.subplot(1, 2, 1)
    segment_stats.plot(kind='pie', autopct='%1.1f%%')
    plt.title('用户价值分层分布')
    
    plt.subplot(1, 2, 2)
    rfm_df.groupby('segment')['monetary'].mean().plot(kind='bar')
    plt.title('各分层用户平均消费金额')
    plt.xticks(rotation=45)
    
    plt.tight_layout()
    plt.show()
    
    return rfm_df

rfm_analysis = user_behavior_analysis(cleaned_df)

3.4 商品品类分析

分析各商品品类的销售表现,优化产品结构和库存策略。

def category_analysis(df):
    """商品品类深度分析"""
    
    # 品类销售统计
    category_stats = df.groupby('category').agg({
        'order_id': 'count',
        'total_amount': 'sum',
        'quantity': 'sum'
    }).rename(columns={
        'order_id': 'order_count',
        'total_amount': 'category_revenue',
        'quantity': 'total_quantity'
    })
    
    category_stats['avg_order_value'] = category_stats['category_revenue'] / category_stats['order_count']
    category_stats['revenue_ratio'] = category_stats['category_revenue'] / category_stats['category_revenue'].sum()
    
    # 畅销商品分析
    top_products = df.groupby('product_id').agg({
        'order_id': 'count',
        'total_amount': 'sum'
    }).nlargest(10, 'total_amount')
    
    # 可视化分析
    plt.figure(figsize=(15, 5))
    
    plt.subplot(1, 3, 1)
    category_stats['category_revenue'].plot(kind='bar')
    plt.title('各品类销售额')
    plt.xticks(rotation=45)
    
    plt.subplot(1, 3, 2)
    plt.pie(category_stats['revenue_ratio'], 
            labels=category_stats.index, 
            autopct='%1.1f%%')
    plt.title('品类销售额占比')
    
    plt.subplot(1, 3, 3)
    top_products['total_amount'].plot(kind='bar')
    plt.title('畅销商品TOP10')
    plt.xticks(rotation=45)
    
    plt.tight_layout()
    plt.show()
    
    return category_stats, top_products

category_stats, top_products = category_analysis(cleaned_df)

3.5 地域分布分析

分析不同地区的销售表现,优化区域营销策略。

def regional_analysis(df):
    """地域销售分析"""
    
    regional_stats = df.groupby('city').agg({
        'order_id': 'count',
        'total_amount': 'sum',
        'user_id': 'nunique'
    }).rename(columns={
        'order_id': 'order_count',
        'total_amount': 'regional_revenue',
        'user_id': 'unique_customers'
    })
    
    regional_stats['avg_customer_value'] = regional_stats['regional_revenue'] / regional_stats['unique_customers']
    regional_stats['order_per_customer'] = regional_stats['order_count'] / regional_stats['unique_customers']
    
    # 可视化地域分析
    fig, axes = plt.subplots(2, 2, figsize=(12, 10))
    
    regional_stats['regional_revenue'].plot(kind='bar', ax=axes[0,0])
    axes[0,0].set_title('各地区销售额')
    axes[0,0].tick_params(axis='x', rotation=45)
    
    regional_stats['unique_customers'].plot(kind='bar', ax=axes[0,1])
    axes[0,1].set_title('各地区用户数量')
    axes[0,1].tick_params(axis='x', rotation=45)
    
    regional_stats['avg_customer_value'].plot(kind='bar', ax=axes[1,0])
    axes[1,0].set_title('各地区客单价')
    axes[1,0].tick_params(axis='x', rotation=45)
    
    regional_stats['order_per_customer'].plot(kind='bar', ax=axes[1,1])
    axes[1,1].set_title('各地区人均订单数')
    axes[1,1].tick_params(axis='x', rotation=45)
    
    plt.tight_layout()
    plt.show()
    
    return regional_stats

regional_stats = regional_analysis(cleaned_df)

4. 高级分析与优化技巧

4.1 性能优化策略

在处理大规模电商数据时,性能优化至关重要。

def performance_optimization(df):
    """Pandas性能优化技巧"""
    
    # 1. 使用合适的数据类型
    print("优化前内存使用:")
    print(df.info(memory_usage='deep'))
    
    # 优化数据类型
    df_optimized = df.copy()
    categorical_columns = ['category', 'payment_method', 'city']
    for col in categorical_columns:
        df_optimized[col] = df_optimized[col].astype('category')
    
    print("
优化后内存使用:")
    print(df_optimized.info(memory_usage='deep'))
    
    # 2. 使用向量化操作
    # 不好的做法:使用循环
    # 好的做法:使用向量化操作
    
    # 计算每个订单的折扣金额(假设有折扣逻辑)
    df_optimized['discount_amount'] = np.where(
        df_optimized['total_amount'] > 200,
        df_optimized['total_amount'] * 0.1,  # 满200打9折
        0
    )
    
    return df_optimized

optimized_df = performance_optimization(cleaned_df)

4.2 综合业务洞察报告

def generate_business_insights(df, rfm_df, category_stats, regional_stats):
    """生成综合业务洞察报告"""
    
    insights = {}
    
    # 核心业务指标
    total_revenue = df['total_amount'].sum()
    total_orders = df['order_id'].nunique()
    total_customers = df['user_id'].nunique()
    avg_order_value = total_revenue / total_orders
    
    insights['核心指标'] = {
        '总销售额': total_revenue,
        '总订单数': total_orders,
        '总客户数': total_customers,
        '平均订单价值': avg_order_value
    }
    
    # 用户洞察
    high_value_customers = len(rfm_df[rfm_df['segment'] == '高价值用户'])
    high_value_ratio = high_value_customers / total_customers
    
    insights['用户洞察'] = {
        '高价值用户数量': high_value_customers,
        '高价值用户占比': f"{high_value_ratio:.2%}",
        '流失风险用户': len(rfm_df[rfm_df['segment'] == '流失风险用户'])
    }
    
    # 商品洞察
    top_category = category_stats.loc[category_stats['category_revenue'].idxmax()]
    insights['商品洞察'] = {
        '最畅销品类': category_stats['category_revenue'].idxmax(),
        '该品类销售额': top_category['category_revenue'],
        '该品类订单数': top_category['order_count']
    }
    
    # 地域洞察
    top_city = regional_stats.loc[regional_stats['regional_revenue'].idxmax()]
    insights['地域洞察'] = {
        '销售额最高城市': regional_stats['regional_revenue'].idxmax(),
        '该城市销售额': top_city['regional_revenue'],
        '该城市客单价': top_city['avg_customer_value']
    }
    
    return insights

business_insights = generate_business_insights(
    cleaned_df, rfm_analysis, category_stats, regional_stats
)

print("电商业务洞察报告:")
for category, metrics in business_insights.items():
    print(f"
{category}:")
    for metric, value in metrics.items():
        print(f"  {metric}: {value}")

5. 实战建议与最佳实践

5.1 学习路径建议

对于电商数据分析的学习,建议遵循系统化的学习路径:

  1. 基础阶段:掌握Pandas核心数据结构(Series、DataFrame)和基本操作
  2. 进阶阶段:学习数据清洗、转换、分组聚合等高级功能
  3. 实战阶段:通过真实电商案例深化理解,如本指南中的各个分析模块
  4. 优化阶段:学习性能优化技巧和最佳实践

5.2 工具与资源推荐

工具类型推荐工具适用场景
数据处理Pandas、NumPy数据清洗、转换、计算
数据可视化Matplotlib、Seaborn趋势分析、分布展示
数据库连接SQLAlchemy从数据库提取数据
报告生成Jupyter Notebook交互式分析和报告

电商数据分析是一个持续迭代的过程,需要结合业务理解和技术工具,通过数据驱动的方式不断优化电商运营的各个环节。本指南提供的实战案例和分析方法可以作为入门基础,在实际工作中需要根据具体业务需求进行调整和扩展。


参考来源

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐