可视化用户旅程
将漏斗绘制为水平条形图,将留存矩阵绘制为热力图,以便向利益相关者传达分析结果。
可视化用户旅程 是 CoddyKit 上的免费 Pandas & NumPy Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Pandas & NumPy Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Pandas & NumPy Academy 课程共包含 4 节课。
为什么要将用户路径可视化
对于非技术利益相关者来说,原始事件表和以数字表示的转化率很难传达。用户路径的可视化表示——漏斗图、留存热力图和桑基图——可以让模式立即变得清晰。目标不是取代数字,而是以一种让洞察一目了然的形式呈现数字,从而减轻受众的理解负担。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Assume funnel_summary and retention_pct are already computed
print('Visualisation libraries loaded')漏斗的水平条形图
水平条形图是最简单、也最容易理解的漏斗可视化方式。每个条形代表一个漏斗步骤,条形长度代表用户数量。按照漏斗顺序从上到下排列各步骤,使图表呈现逐渐变宽的漏斗形状。所有条形使用一种具有对比度的颜色,让注意力集中在数值上,而不是颜色变化上。
FUNNEL_STEPS = ['homepage', 'product_page', 'add_to_cart', 'checkout', 'purchase']
users = [10000, 7200, 4100, 2300, 980]
fig, ax = plt.subplots(figsize=(9, 5))
bars = ax.barh(FUNNEL_STEPS[::-1], users[::-1], color='steelblue', height=0.6)
ax.set_xlabel('Unique Users')
ax.set_title('Conversion Funnel')
plt.tight_layout()
plt.show()在图表上标注转化率
使用 ax.text() 在每个条形的右边缘添加转化率标注。同时显示绝对用户数和步骤间转化百分比,使图表无需单独的数据表即可传达所有必要信息。将文本放置在条形末端稍外侧,并设置较小的水平偏移,避免文字与条形填充色重叠。
conversions = [None, 72.0, 56.9, 56.1, 42.6]
for i, (u, c) in enumerate(zip(users[::-1], conversions[::-1])):
label = f'{u:,} users'
if c is not None:
label += f' ({c}% conv)'
ax.text(u + 100, i, label, va='center', fontsize=9)
plt.tight_layout()
plt.show()再次认识留存热力图
留存热力图是群组分析的标准输出。每一行表示一个群组,每一列表示一个周偏移量,每个单元格根据留存百分比着色。使用 RdYlGn 色图(红色 = 低,绿色 = 高),并明确设置 vmin=0, vmax=100,确保不同演示文稿中的颜色范围保持一致,而不会针对每张热力图重新缩放。
import numpy as np
# Simulated retention data for illustration
data = [[100, 55, 42, 38, 35, 33],
[100, 52, 40, 36, 33, 0],
[100, 58, 45, 41, 0, 0],
[100, 60, 48, 0, 0, 0]]
retention_pct = pd.DataFrame(data, columns=range(6),
index=['Wk1', 'Wk2', 'Wk3', 'Wk4'])
fig, ax = plt.subplots(figsize=(10, 4))
sns.heatmap(retention_pct, annot=True, fmt='.0f', cmap='RdYlGn',
vmin=0, vmax=100, linewidths=0.5, ax=ax)
ax.set_title('Cohort Retention Heatmap')
plt.tight_layout()
plt.show()屏蔽不完整的群组单元格
较新的群组还没有足够时间经历所有周偏移量。这些单元格应显示为空白,而不是 0 %,以免读者将缺失数据误认为零留存。创建一个布尔掩码:当单元格值为 0 且列索引超过该群组已存在的周数时,将其标记为真,然后将掩码传递给 sns.heatmap(mask=...)。
mask = retention_pct == 0 # cells with no data yet
fig, ax = plt.subplots(figsize=(10, 4))
sns.heatmap(retention_pct, annot=True, fmt='.0f', cmap='RdYlGn',
vmin=0, vmax=100, linewidths=0.5,
mask=mask, ax=ax)
ax.set_title('Cohort Retention (incomplete cells masked)')
plt.tight_layout()
plt.show()绘制平均留存曲线
通过绘制留存矩阵各列的平均值,将平均留存曲线可视化。这条曲线概括了产品整体的留存情况。添加表示 ±1 个标准差的阴影带,以展示群组之间的差异。阴影带较窄表示各群组的表现相似;阴影带较宽则说明群组之间存在值得调查的重要差异。
avg = retention_pct.mean(axis=0)
std = retention_pct.std(axis=0)
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(avg.index, avg, marker='o', color='steelblue', linewidth=2)
ax.fill_between(avg.index, avg - std, avg + std, alpha=0.2, color='steelblue')
ax.set_xlabel('Week Number')
ax.set_ylabel('Avg Retention %')
ax.set_title('Average Cohort Retention Curve')
plt.tight_layout()
plt.show()分组漏斗:桌面设备与移动设备
并排绘制不同分组的漏斗,可以揭示产品问题是普遍存在还是仅与特定设备有关。使用带有横向偏移的 ax.bar(),为每个漏斗步骤创建包含两组条形的分组条形图。或者,使用 plt.subplots(1, 2) 在 1×2 的子图网格中绘制两个独立的漏斗图,以便更清晰地比较。
steps = ['Homepage', 'Product', 'Cart', 'Checkout', 'Purchase']
desktop = [5000, 3800, 2300, 1500, 700]
mobile = [5000, 3400, 1800, 900, 280]
x = range(len(steps))
fig, ax = plt.subplots(figsize=(10, 5))
ax.bar([i - 0.2 for i in x], desktop, width=0.4, label='Desktop', color='steelblue')
ax.bar([i + 0.2 for i in x], mobile, width=0.4, label='Mobile', color='darkorange')
ax.set_xticks(list(x))
ax.set_xticklabels(steps)
ax.legend()
ax.set_title('Funnel by Device Type')
plt.tight_layout()
plt.show()事件频率分布
将每个会话中的事件数量分布可视化,可以看出会话是集中在少量事件附近(说明用户能快速达成目标),还是分布在较大范围内(说明路径复杂或用户感到困惑)。使用 ax.hist() 绘制 event_count 列;如果分布明显右偏,则在 y 轴上使用对数刻度。
import numpy as np
event_counts = pd.Series([3, 5, 2, 8, 1, 12, 3, 4, 6, 20, 2, 3, 1, 7, 5])
fig, ax = plt.subplots(figsize=(8, 4))
ax.hist(event_counts, bins=15, color='steelblue', edgecolor='white')
ax.set_xlabel('Events per Session')
ax.set_ylabel('Number of Sessions')
ax.set_title('Session Event Frequency Distribution')
plt.tight_layout()
plt.show()热门事件序列
展示点击流中最常见的两个事件序列(二元组),以了解典型的用户路径。按会话分组,按照 event_rank 排序,并使用 zip(events, events[1:]) 提取相邻事件对。使用 Counter 统计事件对的频率,然后将排名前 10 的事件对绘制为水平条形图。这可以揭示哪些导航路径主导了用户行为。
from collections import Counter
events_per_session = [['homepage', 'product_page', 'add_to_cart'],
['homepage', 'search', 'product_page'],
['homepage', 'product_page', 'purchase']]
bigrams = Counter()
for session in events_per_session:
for pair in zip(session, session[1:]):
bigrams[pair] += 1
print(bigrams.most_common(5))会话时长分布
会话时长直方图可以揭示用户是短暂参与(少于 2 分钟)、中等程度参与,还是深度参与。如果少量超长会话会把大部分数据压缩到最左侧的区间中,请使用对数刻度的 x 轴。使用 ax.axvline() 在中位数处叠加一条垂直线,帮助受众理解“典型”会话时长。
durations = pd.Series([1.2, 3.5, 0.5, 12.3, 2.1, 8.7, 1.8, 0.3, 45.1, 4.6])
fig, ax = plt.subplots(figsize=(8, 4))
ax.hist(durations, bins=20, color='steelblue', edgecolor='white')
ax.axvline(durations.median(), color='red', linestyle='--', label=f'Median: {durations.median():.1f} min')
ax.set_xlabel('Session Duration (min)')
ax.set_ylabel('Sessions')
ax.legend()
plt.tight_layout()
plt.show()保存仪表板图形
使用带有 plt.subplots(2, 2, figsize=(14, 10)) 的子图网格,将多个可视化图表组合到一个仪表板图形中。将漏斗条形图、留存热力图、平均留存曲线和事件分布分别放入各个面板。将图形保存为 PNG 以用于网页发布,或保存为 PDF 以用于打印报告。统一的图形比四个独立文件更便于分享。
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# Panel 1: funnel
axes[0, 0].barh(FUNNEL_STEPS[::-1], users[::-1], color='steelblue')
axes[0, 0].set_title('Funnel')
# Panel 2: retention heatmap
sns.heatmap(retention_pct, ax=axes[0, 1], cmap='RdYlGn', annot=True, fmt='.0f', vmin=0, vmax=100)
axes[0, 1].set_title('Cohort Retention')
fig.suptitle('User Journey Dashboard', fontsize=16)
plt.tight_layout()
fig.savefig('user_journey_dashboard.png', dpi=150, bbox_inches='tight')
print('Dashboard saved')快速检查
测试您对本课数据分析概念的理解。
课程回顾
在本课中,您学习了:创建带标注的漏斗条形图和留存热力图、绘制带差异范围的平均留存曲线,以及将多个图表组合成一个保存为 PNG 的仪表板图形。接下来,我们将学习在高级数据清理中检测并移除重复记录。
用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「可视化用户旅程」课时是免费的吗?
是的 — 「可视化用户旅程」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Pandas & NumPy Academy 课程的其余内容,请升级到 CoddyKit PRO。 Pandas & NumPy Academy 课程共包含 4 节课。
「可视化用户旅程」这节课中我会学到什么?
将漏斗绘制为水平条形图,将留存矩阵绘制为热力图,以便向利益相关者传达分析结果。 你通过在浏览器中直接运行的动手代码来练习 Pandas & NumPy Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Pandas & NumPy Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Pandas & NumPy Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「可视化用户旅程」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Pandas & NumPy Academy 课中编写并运行代码吗?
能。每节 Pandas & NumPy Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。