工作常用的分析结果案例:

找出销售额最高的Top 10商品
分析各地区销售差异
识别高价值用户群体(RFM模型)
分析促销活动的拉动效果
分析新品上市对老品的冲击
分析退货率与商品类别的关系
分析用户复购路径
分析节假日前后销售波动
分析流量与转化率之间的关系
分析不同平台渠道的用户画像差异

我们将展示如何进行这些常见的分析任务。为了演示这些方法,我们需要使用一些常用的数据分析库,如 pandasscikit-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)