使用Python绘制Cohort分析图

引言

Cohort分析是一种可以帮助我们理解用户行为的强大工具。它通过将用户分组(Cohorts),分析不同组在时间维度上的表现,从而揭示趋势和模式。本文将介绍如何使用Python绘制Cohort分析图,以解决特定的业务问题,比如用户留存率分析。

目标

我们的目标是通过Cohort分析,了解一个在线商城的用户留存率。我们希望回答以下问题:

  1. 不同注册月份的用户在后续月份的留存率如何?
  2. 留存率是否随时间推移而变化?

数据准备

首先,我们需要模拟一些用户数据。假设我们有以下字段:

  • user_id: 用户ID
  • signup_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的留存率。具体来说,我们将以下步骤:

  1. 将用户按注册月份分组。
  2. 计算每个组在后续月份的用户留存情况。
# 添加'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分析。您可以根据自己的需求和业务目标,进一步扩展和优化此分析流程,获取更多的业务洞察。