4. 数据获取与预处理
招聘岗位数据与企业景气因子的实战分析,成败往往不在模型,而在数据入口。岗位数据来自招聘网站、企业官网、API 接口,格式各异、噪声极多;景气因子又依赖统计口径与时间频率。若获取与预处理环节失控,后续建模只是在放大误差。本节围绕四个关键动作展开:采集、清洗、解析、对齐。
一、核心原理:数据入口决定分析上限
招聘数据本质上是非结构化文本 + 半结构化字段的混合体。岗位名称、薪资、地点、经验要求可能藏在标题、正文或标签中;企业景气因子则来自统计公报、行业指数或财报,频率可能是日、周、月、季。两者要进入同一张分析表,必须经过统一的时间轴与字段口径。
采集阶段的核心是合法、稳定、可复现。网络爬虫适合公开页面,但需遵守 robots 协议、控制频率、设置 User-Agent;API 采集更稳定,但要注意配额、鉴权与字段版本。无论哪种方式,都应保留原始快照,便于回溯。
二、方法流程:从采集到对齐的四步链路
第一步是采集与落库。爬虫建议采用“列表页 + 详情页”两级抓取,列表页负责发现岗位链接,详情页负责抽取字段。API 采集则按分页参数循环拉取,并记录请求日志。
# 示例:API 分页采集伪代码
for page in range(1, max_page + 1):
resp = requests.get(api_url, params={"page": page, "size": 50}, headers=headers)
data = resp.json()
save_raw(data["items"], page)
if not data["has_next"]:
break
time.sleep(0.5) # 控制频率
第二步是去重与标准化。去重不能只看岗位 ID,还要考虑同一岗位在不同渠道的重复发布。常用策略是“岗位标题 + 公司 + 城市”生成指纹,再结合发布时间保留最新记录。标准化包括:城市统一为“省-市”格式、薪资统一为月薪区间、经验要求映射为数值区间。
第三步是岗位文本解析。从岗位描述中抽取技能关键词、学历要求、工具栈。可用规则 + 词典匹配,也可用轻量 NLP 模型。关键是建立可维护的技能词典,并定期更新。
第四步是时间序列对齐与缺失值处理。岗位数据按日或周聚合,景气因子按月发布,需统一到同一频率。常用方法有前向填充、线性插值、滚动均值。缺失值要区分“真实缺失”与“未发布”,前者可插值,后者应标记。
三、案例/场景:某互联网岗位数据清洗实战
假设我们从某招聘平台采集到 12 万条岗位记录,目标是与月度行业景气指数做回归。原始数据中,城市字段有“北京”“北京市”“北京-朝阳”三种写法;薪资有“15K-25K”“1.5-2.5万/月”“面议”;岗位描述里技能词混杂中英文。
处理策略如下:
- 城市标准化:用正则提取“市”前内容,再映射到标准城市名。
- 薪资解析:统一换算为月薪中位数,面议标记为缺失。
- 技能抽取:建立“Python、Java、SQL、机器学习”等词典,匹配岗位描述。
- 时间对齐:岗位按周聚合,景气因子按月,用月度均值对齐到周。
| 字段 | 原始示例 | 标准化后 | 处理方式 |
|---|---|---|---|
| 城市 | 北京-朝阳 | 北京 | 正则提取 + 映射表 |
| 薪资 | 1.5-2.5万/月 | 20000 | 区间中位数 |
| 经验 | 3-5年 | 4 | 区间均值 |
| 技能 | 熟悉Python和SQL | Python;SQL | 词典匹配 |
| 时间 | 2024-03-15 | 2024-W11 | 周粒度对齐 |
四、误区/复盘:预处理中最容易踩的坑
误区一:去重只看岗位 ID。同一岗位在不同渠道、不同时间重复发布,ID 不同但内容相同。应使用内容指纹去重。
误区二:缺失值一律填充。景气因子未发布导致的缺失,填充会引入虚假信号。应先区分缺失类型,再决定插值或标记。
误区三:时间对齐忽略频率差异。把月度因子直接按日展开,会造成信息重复。正确做法是聚合到统一频率,或使用滚动窗口。
复盘建议:每次预处理后,输出一份数据质量报告,包含字段覆盖率、去重率、时间连续性、异常值比例。这份报告比模型准确率更能反映数据是否可用。
采集、清洗、解析、对齐四步完成后,岗位数据才真正具备与企业景气因子联合分析的条件。后续建模阶段,应始终保留原始数据与处理日志,确保分析结果可追溯、可复现。