用 Python 分析酒吧客流:先准备样本,再核对指标 #
本文回应“如何分析东莞酒吧这个月的客流”这一场景,但没有取得任何门店或全市的真实客流数据。以下只使用本站制作的合成交易记录,演示统计方法;不能据此判断当地经营水平、客单价或行业趋势。2026-10-30 修订,AI 辅助整理。
先明确你手里的数据代表什么 #
收银记录记录的是交易,会员 ID 记录的是某个账号或标识,两者都不能直接等同于进店人数。一位顾客一天可能付两次款,也可能与同行者共用一笔订单;未消费访客还可能完全不出现在收银表里。
因此,先分别定义三种指标:
| 指标 | 本文口径 | 不能当成什么 |
|---|---|---|
| 交易笔数 | 选定时间窗内不同交易 ID 的数量 | 进店人数 |
| 已观察到的独立顾客 ID 数 | 时间窗内对顾客 ID 全局去重 | 已核验的自然人数或整个城市客流 |
| 顾客日数 | 每天去重后的顾客 ID 数再相加 | 时间窗内独立顾客 ID 数 |
若缺少稳定顾客标识,就不能从交易笔数推算独立顾客数。若日志覆盖不完整,“没有记录”也不能写成“当天没有客人”。
用五条合成记录看出区别 #
本样本明确覆盖 2026-10-01 至 2026-10-03 三天,使用业务固定偏移 +08:00;第三天在这个人为构造的完整样本中确实没有交易。A、B、C 是虚构标识,不对应任何人。
| 交易 ID | 顾客 ID | 带来源偏移的交易时间 |
|---|---|---|
| T01 | A | 2026-10-01T19:00:00+08:00 |
| T02 | A | 2026-10-01T20:00:00+08:00 |
| T03 | B | 2026-10-01T21:00:00+08:00 |
| T04 | A | 2026-10-02T19:00:00+08:00 |
| T05 | C | 2026-10-02T20:00:00+08:00 |
先预测结果,再核对:交易共 5 笔;全时间窗只有 3 个独立顾客 ID(A、B、C);每天的独立 ID 数分别为 2、2、0,相加为 4 顾客日。A 在两天出现,因此顾客日数比全时间窗去重数多。按这三天完整覆盖的样本,日均独立 ID 数为 4 ÷ 3,约 1.3333;这不是人均消费,也不是月度行业均值。
下载并复现 #
下载 合成 CSV 样本 和 Python 示例脚本,放在同一个文件夹。脚本使用 Python 标准库,不需要安装 pandas,也不会连接网络或上传输入。
python visitor-metrics-example.py
在 Windows 上也可用已安装的 Python 启动器运行 py visitor-metrics-example.py。示例使用 Python 3.9 及以上版本的语法;本次在 Python 3.13.13 上运行,核对了样本结果、重复交易、缺失 ID、裸时间、越界日期、无效日期和未知覆盖等 8 项检查。
核心做法是给每一天建立一个集合,同时为整个时间窗维护另一个集合:
daily_ids[day].add(customer_id)
observed_ids.add(customer_id)
observed_unique_ids = len(observed_ids)
observed_customer_days = sum(len(ids) for ids in daily_ids.values())
完整脚本先读取 CSV、检查交易 ID 和顾客 ID,再把带偏移的时间转换为业务固定 +08:00 后取日期。datetime 官方文档区分 aware 和 naive 对象;本示例对来源时区未知的裸时间明确报错,不把它默认为 UTC 或本机时区。
检查失败时怎样处理 #
- 交易 ID 重复:先核对是重复导出,还是一笔交易的不同明细。示例会报错,不会静默删行。生产数据要先定义交易粒度。
- 顾客 ID 缺失:补充可用的匿名标识,或只报告交易笔数;不要凭金额、时间或设备记录猜测身份。
- 时间没有来源偏移:向数据提供方确认时区约定,再归类。可用 固定偏移日期校验器 理解日期边界。
- 某天覆盖情况不明:脚本的
confirmed_complete_days只填写已确认完整的日期;未知日期的完整日指标输出null。时间窗不完整时日均指标也输出null。 - 记录落在时间窗外:先核对业务日期和筛选范围,不把范围外记录混入结果。
下载脚本里“三天完整覆盖”的声明只适用于配套合成 CSV。替换为自己的数据时,必须同时修改日期范围和覆盖声明;不要沿用示例的完整性假设。
得到结果后,可以决定什么 #
这些计数可以帮助核对重复交易、每日活跃标识和数据覆盖。想分析新老客,需要更长历史中的首次出现记录;想分析停留时长,需要适当来源且定义清晰的到离店数据;想判断活动效果,还要考虑星期、营业时段、节假日和样本差异。当前五条合成数据不能支持上述结论。
本文不提供东莞真实客流、客单价或“正常门店应达到多少”的基准。需要真实经营判断时,应使用有明确来源、覆盖范围与授权的业务记录,并解释未被记录的人群。
来源与修订说明 #
- Python CSV 文档:CSV 与字典形式记录的读取方式。
- Python datetime 文档:aware/naive 与固定偏移转换。
- 五条 CSV、三天覆盖声明及指标解释由本站为教学构造,不是上述文档提供的数据。
- 2026-10-30:移除旧版没有可核验出处的地区客流、客单价区间;明确交易、独立 ID、顾客日与实际进店人数的区别;补充可下载样本及失败处理。保留原内容的首次发布日期;原博客与方案入口统一指向本页。