1. 从Excel到.dat:数据准备实战指南
第一次用Biogeme做Nested Logit模型时,最让我头疼的就是数据格式转换。交通调查数据通常躺在Excel里,而Biogeme需要.dat格式的纯文本文件。这里分享一个我验证过的标准化流程:
-
原始数据清洗:打开你的Excel文件,检查出行方式字段是否统一编码(比如1=步行、2=公交...)。曾经有个项目因为"公交车"和"公共汽车"混用,导致后续分析全乱套。建议用VLOOKUP函数统一转换。
-
成本矩阵合并:用INDEX-MATCH函数把Emme输出的Time/Cost矩阵匹配到个人出行记录。注意矩阵的ZoneID要和调查数据的起讫点字段完全对应,我习惯用
=TEXT(A2,"000")统一格式。 -
导出为CSV:另存为CSV时,记得取消"导出Unicode"选项。有次我导出的中文乱码导致Biogeme报错,折腾了半天才发现是这个坑。
-
DAT转换脚本:用Python处理更高效:
python复制import pandas as pd
df = pd.read_csv('survey.csv')
# 处理缺失值
df.fillna(-999, inplace=True)
# Biogeme要求的格式
df.to_csv('input.dat', sep='\t', index=False, header=False)
注意:Biogeme对缺失值敏感,建议用-999代替NA。如果数据量超过10万条,建议先用
df.sample(10000)测试模型结构。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 构建Nested Logit树:三层结构设计心得
模型树结构设计是Nested Logit的核心难点。根据关宏志教授书中的建议,结合我处理城市通勤数据的经验,推荐这种分层逻辑:
2.1 第一层:机动化 vs 非机动化
- 步行直接作为单独分支(lambda=1)
- 自行车根据城市特点决定是否单独分层
- 机动化方式进入第二层
2.2 第二层:公共交通 vs 私人交通
- 公交/地铁归为公共交通分支
- 小汽车/出租车归为私人交通分支
- 共享单车可根据使用场景灵活归类
2.3 第三层:具体方式细分
- 公交
