用 Python 分析酒吧客流:先准备样本,再核对指标 #

本文回应“如何分析东莞酒吧这个月的客流”这一场景,但没有取得任何门店或全市的真实客流数据。以下只使用本站制作的合成交易记录,演示统计方法;不能据此判断当地经营水平、客单价或行业趋势。2026-10-30 修订,AI 辅助整理。

先明确你手里的数据代表什么 #

收银记录记录的是交易,会员 ID 记录的是某个账号或标识,两者都不能直接等同于进店人数。一位顾客一天可能付两次款,也可能与同行者共用一笔订单;未消费访客还可能完全不出现在收银表里。

因此,先分别定义三种指标:

指标本文口径不能当成什么
交易笔数选定时间窗内不同交易 ID 的数量进店人数
已观察到的独立顾客 ID 数时间窗内对顾客 ID 全局去重已核验的自然人数或整个城市客流
顾客日数每天去重后的顾客 ID 数再相加时间窗内独立顾客 ID 数

若缺少稳定顾客标识,就不能从交易笔数推算独立顾客数。若日志覆盖不完整,“没有记录”也不能写成“当天没有客人”。

用五条合成记录看出区别 #

本样本明确覆盖 2026-10-01 至 2026-10-03 三天,使用业务固定偏移 +08:00;第三天在这个人为构造的完整样本中确实没有交易。A、B、C 是虚构标识,不对应任何人。

交易 ID顾客 ID带来源偏移的交易时间
T01A2026-10-01T19:00:00+08:00
T02A2026-10-01T20:00:00+08:00
T03B2026-10-01T21:00:00+08:00
T04A2026-10-02T19:00:00+08:00
T05C2026-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、顾客日与实际进店人数的区别;补充可下载样本及失败处理。保留原内容的首次发布日期;原博客与方案入口统一指向本页。