使用Python绘制Cohort分析图
引言
Cohort分析是一种可以帮助我们理解用户行为的强大工具。它通过将用户分组(Cohorts),分析不同组在时间维度上的表现,从而揭示趋势和模式。本文将介绍如何使用Python绘制Cohort分析图,以解决特定的业务问题,比如用户留存率分析。
目标
我们的目标是通过Cohort分析,了解一个在线商城的用户留存率。我们希望回答以下问题:
- 不同注册月份的用户在后续月份的留存率如何?
- 留存率是否随时间推移而变化?
数据准备
首先,我们需要模拟一些用户数据。假设我们有以下字段:
user_id
: 用户IDsignup_date
: 注册日期purchase_date
: 购买日期
我们将生成一组示例数据,用于分析。
import pandas as pd
import numpy as np
import random
from datetime import datetime, timedelta
# 生成示例数据
def create_sample_data(num_users):
data = []
start_date = datetime(2021, 1, 1) # 开始日期
for i in range(num_users):
signup_date = start_date + timedelta(days=random.randint(0, 365))
for j in range(random.randint(0, 6)): # 用户最多购买6次
purchase_date = signup_date + timedelta(days=random.randint(0, 60))
data.append([i, signup_date, purchase_date])
return pd.DataFrame(data, columns=['user_id', 'signup_date', 'purchase_date'])
# 创建1000个用户的数据
df = create_sample_data(1000)
print(df.head())
数据处理
接下来,我们需要处理数据,以计算每个Cohort的留存率。具体来说,我们将以下步骤:
- 将用户按注册月份分组。
- 计算每个组在后续月份的用户留存情况。
# 添加'cohort_month'和'purchase_month'列
df['signup_month'] = df['signup_date'].dt.to_period('M')
df['purchase_month'] = df['purchase_date'].dt.to_period('M')
# 计算每个Cohort的用户数量
cohort_data = df.groupby(['signup_month']).agg(n_users=('user_id', 'nunique')).reset_index()
# 计算每个用户在后续月份的留存
def calculate_retention(group):
return group.groupby('purchase_month')['user_id'].nunique() / group['user_id'].nunique()
retention = df.groupby(['signup_month', 'user_id']).agg({'purchase_month': 'nunique'}).reset_index()
retention = retention.groupby(['signup_month', 'purchase_month']).agg(users_retained=('user_id', 'nunique')).reset_index()
retention['retention_rate'] = retention['users_retained'] / cohort_data['n_users'][cohort_data['signup_month'] == retention['signup_month']].values[0]
# 透视表展示留存率
cohort_pivot = retention.pivot(index='signup_month', columns='purchase_month', values='retention_rate').fillna(0)
print(cohort_pivot)
绘制Cohort分析图
最终,我们将使用matplotlib
来绘制Cohort分析图。图中每个单元格表示对应日期的留存率。
import seaborn as sns
import matplotlib.pyplot as plt
# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(cohort_pivot, annot=True, fmt=".2%", cmap='Blues')
plt.title('Cohort Analysis - User Retention Rates')
plt.ylabel('Signup Month')
plt.xlabel('Purchase Month')
plt.show()
序列图说明
在进行数据处理和可视化的过程中,我们可以简化理解多个环节的流程。接下来,用mermaid
语法展示我们的流程。
sequenceDiagram
participant U as 用户
participant SD as 数据生成
participant DP as 数据处理
participant V as 数据可视化
U->>SD: 生成用户数据
SD->>DP: 通过注册月份分组数据
DP->>V: 计算留存率并绘制图表
V->>U: 显示Cohort分析图
结论
通过上述步骤,我们成功地使用Python构建了Cohort分析,并通过热力图的形式展示了用户留存率。这个过程不仅帮助我们理解用户的行为模式,也为商业决策提供了数据支持。
希望通过本文的介绍,能够帮助您在实际工作中更好地运用Cohort分析。您可以根据自己的需求和业务目标,进一步扩展和优化此分析流程,获取更多的业务洞察。