You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

绘制用户出行次数ECDF图表遇异常,求正确实现方案

解决用户出行次数ECDF绘制问题

问题分析

你遇到两个问题:

  1. 图表显示1次出行的用户占比约70%,但你认为应为50%
  2. ECDF曲线未从0开始

先明确数据统计结果:你的数据集里共有3个唯一user_id(10、84、179):

  • user_id=10的trip_id有2个唯一值(101、102),对应2次出行
  • user_id=84和user_id=179各有1个唯一trip_id,对应1次出行

因此1次出行的用户占比为2/3≈66.7%,图表显示的约70%是正确的,你的50%预期是对数据的误解。如果确实需要50%的占比,需检查user_id或trip_id的定义是否符合你的业务逻辑。

解决曲线未从0开始的问题

使用seaborn.ecdfplot时,默认不会包含x轴起始点(0),只需添加include_lowest=True参数,即可让曲线从(0,0)开始绘制。

修正后的完整代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(style="whitegrid")

# 数据集
df = pd.DataFrame(
    {'id': [54, 54, 54, 54, 54, 16, 16, 16, 50, 50, 28, 28, 28, 19, 19, 32, 32, 32, 81, 81, 81, 81, 81],
     'user_id': [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 84, 84, 84, 84, 84, 179, 179, 179, 179, 179],
     'trip_id': [101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 841, 841, 841, 841, 841, 1796, 1796,
                 1796, 1796, 1796],
     'travel_mode': ['train', 'train', 'train', 'train', 'train', 'walk', 'walk', 'walk', 'train', 'train', 'train',
                             'train', 'train', 'taxi', 'taxi', 'bus', 'bus', 'bus', 'train', 'train', 'train', 'train', 'train']}
)

# 计算每个用户的唯一出行次数
trips_per_user = df.groupby('user_id')['trip_id'].nunique()
plot_data = trips_per_user.reset_index(name='num_trips')

# 绘制修正后的ECDF
plt.figure(figsize=(5, 4))
# 添加include_lowest=True参数让曲线从0开始
sns.ecdfplot(data=plot_data, x='num_trips', stat='proportion', complementary=False, include_lowest=True)
plt.xlabel('Number of Trips')
plt.ylabel('Cumulative Proportion')
plt.show()

额外说明

如果你的业务逻辑中user_id=10的出行次数应该被统计为1次(比如认为同一用户的不同出行方式属于同一次出行),则需要调整统计逻辑,例如按user_id和travel_mode分组,或者重新定义trip_id的唯一性规则。

内容的提问来源于stack exchange,提问作者Amina Umar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:05:16