【Python10年经验总结】第六课 电商平台销售数据分析实践 – 分析结果(Analysis Insights)
工作常用的分析结果案例:
找出销售额最高的Top 10商品
分析各地区销售差异
识别高价值用户群体(RFM模型)
分析促销活动的拉动效果
分析新品上市对老品的冲击
分析退货率与商品类别的关系
分析用户复购路径
分析节假日前后销售波动
分析流量与转化率之间的关系
分析不同平台渠道的用户画像差异
我们将展示如何进行这些常见的分析任务。为了演示这些方法,我们需要使用一些常用的数据分析库,如 pandas 和 scikit-learn。首先,让我们创建一个示例DataFrame来模拟原始数据,并逐步应用这些分析任务。
创建示例数据
import pandas as pd
import numpy as np
# 创建示例时间序列数据
dates = pd.date_range(start='2023-01-01', end='2025-06-30', freq='D')
np.random.seed(42)
sales_data = np.cumsum(np.random.normal(loc=100, scale=20, size=len(dates)))
data = {
'order_id': range(1, len(dates) + 1),
'product_id': np.random.choice(['P{}'.format(i) for i in range(1, 101)], len(dates)),
'category_code': np.random.choice(['C{}'.format(i) for i in range(1, 11)], len(dates)),
'amount': sales_data,
'quantity': np.random.randint(1, 5, size=len(dates)),
'order_date': dates,
'customer_id': np.random.randint(1, 1001, size=len(dates)),
'region': np.random.choice(['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'], len(dates)),
'promotion': np.random.choice([True, False], len(dates)),
'return_status': np.random.choice([True, False], len(dates)),
'platform_channel': np.random.choice(['Online', 'Offline'], len(dates))
}
df = pd.DataFrame(data)
print("原始数据:")
print(df.head())
1. 找出销售额最高的Top 10商品
# 按产品ID聚合销售额
top_products = df.groupby('product_id')['amount'].sum().sort_values(ascending=False).head(10)
print("\n销售额最高的Top 10商品:")
print(top_products)
2. 分析各地区销售差异
# 按地区聚合销售额
region_sales = df.groupby('region')['amount'].sum()
print("\n各地区销售差异:")
print(region_sales)
3. 识别高价值用户群体(RFM模型)
from datetime import datetime
# 计算最近一次购买日期、购买频率和总消费金额
rfm_df = df.groupby('customer_id').agg({
'order_date': lambda x: (datetime.now() - x.max()).days, # Recency
'order_id': 'count', # Frequency
'amount': 'sum' # Monetary
}).reset_index()
rfm_df.rename(columns={
'order_date': 'Recency',
'order_id': 'Frequency',
'amount': 'Monetary'
}, inplace=True)
# 标准化每个特征
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
rfm_scaled = scaler.fit_transform(rfm_df[['Recency', 'Frequency', 'Monetary']])
# 使用KMeans聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, random_state=42)
rfm_df['Cluster'] = kmeans.fit_predict(rfm_scaled)
# 查看每个簇的平均值
cluster_analysis = rfm_df.groupby('Cluster').mean()
print("\n高价值用户群体(RFM模型):")
print(cluster_analysis)
4. 分析促销活动的拉动效果
# 按促销状态聚合销售额
promotion_effect = df.groupby('promotion')['amount'].sum()
print("\n促销活动的拉动效果:")
print(promotion_effect)
5. 分析新品上市对老品的冲击
# 假设新品是在2024年1月1日上市
new_product_ids = df[df['order_date'] >= '2024-01-01']['product_id'].unique()
old_product_ids = df[df['order_date'] < '2024-01-01']['product_id'].unique()
# 新品在2024年的销售额
new_product_sales = df[df['product_id'].isin(new_product_ids) & (df['order_date'] >= '2024-01-01')].groupby('product_id')['amount'].sum()
# 老品在2024年的销售额
old_product_sales = df[df['product_id'].isin(old_product_ids) & (df['order_date'] >= '2024-01-01')].groupby('product_id')['amount'].sum()
print("\n新品在2024年的销售额:")
print(new_product_sales)
print("\n老品在2024年的销售额:")
print(old_product_sales)
6. 分析退货率与商品类别的关系
# 计算每个类别的退货率
return_rates = df.groupby('category_code').agg({
'return_status': 'mean',
'amount': 'sum'
})
return_rates.rename(columns={'return_status': 'Return_Rate'}, inplace=True)
print("\n退货率与商品类别的关系:")
print(return_rates)
7. 分析用户复购路径
# 计算每个用户的订单次数
user_orders = df.groupby('customer_id')['order_id'].count().reset_index()
user_orders.columns = ['customer_id', 'Order_Count']
# 筛选出复购用户
repeat_customers = user_orders[user_orders['Order_Count'] > 1]
print("\n复购用户数量:")
print(len(repeat_customers))
# 查看复购用户的详细信息
repeat_customer_details = df[df['customer_id'].isin(repeat_customers['customer_id'])]
print("\n复购用户的详细信息:")
print(repeat_customer_details.head())
8. 分析节假日前后销售波动
# 添加节假日标志
holidays = pd.to_datetime([
'2023-01-01', '2023-02-22', '2023-04-05', '2023-05-01', '2023-10-01',
'2024-01-01', '2024-02-10', '2024-04-04', '2024-05-01', '2024-10-01',
'2025-01-01', '2025-02-19', '2025-04-04', '2025-05-01', '2025-10-01'
])
df['is_holiday'] = df['order_date'].isin(holidays).astype(int)
# 按是否是节假日聚合销售额
holiday_sales = df.groupby('is_holiday')['amount'].sum()
print("\n节假日前后销售波动:")
print(holiday_sales)
9. 分析流量与转化率之间的关系
假设我们有一个访问记录的DataFrame,用于计算转化率。
# 创建访问记录的DataFrame
visit_data = {
'customer_id': np.random.randint(1, 1001, size=len(dates)),
'visits': np.random.randint(1, 10, size=len(dates)),
'order_date': dates
}
df_visits = pd.DataFrame(visit_data)
# 合并订单和访问数据
merged_df = pd.merge(df, df_visits, on=['customer_id', 'order_date'], how='right')
# 填充缺失的订单金额为0
merged_df['amount'].fillna(0, inplace=True)
# 计算转化率
conversion_rate = merged_df.groupby('customer_id').agg({
'amount': lambda x: (x > 0).sum(),
'visits': 'sum'
}).reset_index()
conversion_rate['Conversion_Rate'] = conversion_rate['amount'] / conversion_rate['visits']
print("\n流量与转化率之间的关系:")
print(conversion_rate.head())
10. 分析不同平台渠道的用户画像差异
# 按平台渠道聚合销售额和其他指标
channel_analysis = df.groupby('platform_channel').agg({
'amount': 'sum',
'customer_id': 'nunique',
'order_id': 'count'
}).reset_index()
channel_analysis.rename(columns={
'customer_id': 'Unique_Customers',
'order_id': 'Total_Orders'
}, inplace=True)
print("\n不同平台渠道的用户画像差异:")
print(channel_analysis)
综合以上步骤,最终的分析结果如下:
这段代码展示了从原始数据到经过全面分析的结果的过程。你可以根据实际需求调整每一步的操作。
import pandas as pd
import numpy as np
from datetime import datetime
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
# 创建示例时间序列数据
dates = pd.date_range(start='2023-01-01', end='2025-06-30', freq='D')
np.random.seed(42)
sales_data = np.cumsum(np.random.normal(loc=100, scale=20, size=len(dates)))
data = {
'order_id': range(1, len(dates) + 1),
'product_id': np.random.choice(['P{}'.format(i) for i in range(1, 101)], len(dates)),
'category_code': np.random.choice(['C{}'.format(i) for i in range(1, 11)], len(dates)),
'amount': sales_data,
'quantity': np.random.randint(1, 5, size=len(dates)),
'order_date': dates,
'customer_id': np.random.randint(1, 1001, size=len(dates)),
'region': np.random.choice(['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'], len(dates)),
'promotion': np.random.choice([True, False], len(dates)),
'return_status': np.random.choice([True, False], len(dates)),
'platform_channel': np.random.choice(['Online', 'Offline'], len(dates))
}
df = pd.DataFrame(data)
# 找出销售额最高的Top 10商品
top_products = df.groupby('product_id')['amount'].sum().sort_values(ascending=False).head(10)
# 分析各地区销售差异
region_sales = df.groupby('region')['amount'].sum()
# 识别高价值用户群体(RFM模型)
rfm_df = df.groupby('customer_id').agg({
'order_date': lambda x: (datetime.now() - x.max()).days, # Recency
'order_id': 'count', # Frequency
'amount': 'sum' # Monetary
}).reset_index()
rfm_df.rename(columns={
'order_date': 'Recency',
'order_id': 'Frequency',
'amount': 'Monetary'
}, inplace=True)
scaler = StandardScaler()
rfm_scaled = scaler.fit_transform(rfm_df[['Recency', 'Frequency', 'Monetary']])
kmeans = KMeans(n_clusters=5, random_state=42)
rfm_df['Cluster'] = kmeans.fit_predict(rfm_scaled)
cluster_analysis = rfm_df.groupby('Cluster').mean()
# 分析促销活动的拉动效果
promotion_effect = df.groupby('promotion')['amount'].sum()
# 分析新品上市对老品的冲击
new_product_ids = df[df['order_date'] >= '2024-01-01']['product_id'].unique()
old_product_ids = df[df['order_date'] < '2024-01-01']['product_id'].unique()
new_product_sales = df[df['product_id'].isin(new_product_ids) & (df['order_date'] >= '2024-01-01')].groupby('product_id')['amount'].sum()
old_product_sales = df[df['product_id'].isin(old_product_ids) & (df['order_date'] >= '2024-01-01')].groupby('product_id')['amount'].sum()
# 分析退货率与商品类别的关系
return_rates = df.groupby('category_code').agg({
'return_status': 'mean',
'amount': 'sum'
})
return_rates.rename(columns={'return_status': 'Return_Rate'}, inplace=True)
# 分析用户复购路径
user_orders = df.groupby('customer_id')['order_id'].count().reset_index()
user_orders.columns = ['customer_id', 'Order_Count']
repeat_customers = user_orders[user_orders['Order_Count'] > 1]
repeat_customer_details = df[df['customer_id'].isin(repeat_customers['customer_id'])]
# 分析节假日前后销售波动
holidays = pd.to_datetime([
'2023-01-01', '2023-02-22', '2023-04-05', '2023-05-01', '2023-10-01',
'2024-01-01', '2024-02-10', '2024-04-04', '2024-05-01', '2024-10-01',
'2025-01-01', '2025-02-19', '2025-04-04', '2025-05-01', '2025-10-01'
])
df['is_holiday'] = df['order_date'].isin(holidays).astype(int)
holiday_sales = df.groupby('is_holiday')['amount'].sum()
# 分析流量与转化率之间的关系
visit_data = {
'customer_id': np.random.randint(1, 1001, size=len(dates)),
'visits': np.random.randint(1, 10, size=len(dates)),
'order_date': dates
}
df_visits = pd.DataFrame(visit_data)
merged_df = pd.merge(df, df_visits, on=['customer_id', 'order_date'], how='right')
merged_df['amount'].fillna(0, inplace=True)
conversion_rate = merged_df.groupby('customer_id').agg({
'amount': lambda x: (x > 0).sum(),
'visits': 'sum'
}).reset_index()
conversion_rate['Conversion_Rate'] = conversion_rate['amount'] / conversion_rate['visits']
# 分析不同平台渠道的用户画像差异
channel_analysis = df.groupby('platform_channel').agg({
'amount': 'sum',
'customer_id': 'nunique',
'order_id': 'count'
}).reset_index()
channel_analysis.rename(columns={
'customer_id': 'Unique_Customers',
'order_id': 'Total_Orders'
}, inplace=True)
print("原始数据:")
print(df.head())
print("\n销售额最高的Top 10商品:")
print(top_products)
print("\n各地区销售差异:")
print(region_sales)
print("\n高价值用户群体(RFM模型):")
print(cluster_analysis)
print("\n促销活动的拉动效果:")
print(promotion_effect)
print("\n新品在2024年的销售额:")
print(new_product_sales)
print("\n老品在2024年的销售额:")
print(old_product_sales)
print("\n退货率与商品类别的关系:")
print(return_rates)
print("\n复购用户数量:")
print(len(repeat_customers))
print("\n复购用户的详细信息:")
print(repeat_customer_details.head())
print("\n节假日前后销售波动:")
print(holiday_sales)
print("\n流量与转化率之间的关系:")
print(conversion_rate.head())
print("\n不同平台渠道的用户画像差异:")
print(channel_analysis)