文章大纲
1.求某地铁站每日客流量,乘地铁经过、进出站人都包括在内 费米问题
结合费米问题的“拆解-假设-估算”
逻辑与SQL的“数据提取-聚合分析”能力,可以更系统地估算地铁站每日客流量。
- 以下是具体分析过程:
第一步:明确问题与数据基础
- 目标:估算某地铁站每日总客流量(含进站、出站、换乘/经过三类人群)。
假设我们有基础数据记录表subway_events
,结构如下:字段名 含义 示例值 user_id
乘客唯一标识 1001 station_id
地铁站ID S018 event_time
事件时间 2023-10-01 08:30:00 event_type
事件类型 ‘IN’(进站)、‘OUT’(出站)、‘TRANSFER’(换乘)
第二步:费米问题拆解框架
将总客流拆分为3个核心组成部分,再按“时段”细化(地铁运营时间通常为5:30-23:30,共18小时):
总客流 = 进站人数 + 出站人数 + 换乘/经过人数
关键假设(基于“二线城市区域中心站”场景)
时段划分:
高峰:7:00-9:00(早高峰,2h)、17:00-19:00(晚高峰,2h),共4h
;平峰:9:00-17:00(8h)、19:00-21:00(2h),共10h
;低峰:5:30-7:00(1.5h)、21:00-23:30(2.5h),共4h
。
客流组成假设:
- 进站 / 出站:
同一乘客的“进站”和“出站”是配对的,但单日同一乘客可能多次进出(如通勤+购物)
; - 换乘 / 经过:乘客在该站从A线换乘到B线,未出闸机,属于“经过”,记录为“TRANSFER”事件。
- 进站 / 出站:
第三步:用SQL实现“数据驱动的费米估算”
通过SQL提取各组成部分的量化数据,结合假设验证并汇总。
Step 1:按“时段+事件类型”统计基础数据
先用SQL分时段统计“进站、出站、换乘”的原始记录数(反映各环节的流量规模)
:
-- 按时段和事件类型分组统计
WITH time_segments AS (
SELECT
station_id,
DATE(event_time) AS stat_date,
-- 划分时段(高峰/平峰/低峰)
CASE
WHEN HOUR(event_time) BETWEEN 7 AND 8 OR HOUR(event_time) BETWEEN 17 AND 18
THEN 'peak' -- 早7-9、晚17-19(简化为整点时段,便于计算)
WHEN HOUR(event_time) BETWEEN 9 AND 16 OR HOUR(event_time) BETWEEN 19 AND 20
THEN 'flat' -- 平峰9-17、19-21
ELSE 'off_peak' -- 低峰5-7、21-23
END AS time_period,
event_type -- 事件类型:IN/OUT/TRANSFER
FROM subway_events
WHERE station_id = 'S018' -- 目标地铁站
)
-- 统计各时段的事件数量
SELECT
stat_date,
time_period,
SUM(CASE WHEN event_type = 'IN' THEN 1 ELSE 0 END)