本项目仅使用真实采集数据,不包含任何模拟/编造数据生成逻辑。
ai_job_analysis/
├── crawlers/ # 爬虫代码(需在本地/具备公网权限的环境运行)
│ ├── crawl_51job.py # 前程无忧爬虫(Selenium复用浏览器JS签名)
│ └── README.md # 爬虫使用说明
├── data/
│ ├── 51job_ai_jobs_real.csv # 真实原始数据
│ ├── 51job_ai_jobs_clean.csv # 清洗后数据
│ ├── 51job_ai_jobs_features.csv # 特征工程后数据
│ ├── 51job_skill_frequency.csv # 技能出现频次统计
│ ├── 51job_model_metrics.csv # 模型评估指标
│ └── 51job_feature_importance.csv # 特征重要性
├── processing/
│ ├── data_cleaning.py # 数据清洗脚本
│ └── feature_engineering.py # 特征工程脚本
├── analysis/
│ ├── visualization.py # 可视化分析脚本
│ └── salary_prediction.py # 薪资预测建模脚本(线性回归+随机森林)
├── outputs_charts/ # 全部图表输出
├── report/
│ └── real_data_analysis_report.docx # 分析报告
├── translations.py # 中英类别翻译对照表,供图表英文化使用
└── main.py # 运行入口(数据清洗->特征工程->可视化->建模)
数据来自前程无忧(51job)真实采集结果,通过分析浏览器网络请求结构、复用页面JS 自动完成的接口签名获取,共12类人工智能相关岗位关键词,原始采集1600条, 按岗位ID去重后得到500条唯一有效记录,数据全部来自上海地区 (爬虫运行时的城市参数设置所致)。
智联招聘、BOSS直聘、拉勾网三个数据源在实测中均遇到不同类型的反爬虫机制
(分别是TLS指纹识别、安全验证挑战、WAF自动化特征检测),未能采集到有效数据,
详见 crawlers/README.md 中的实测结果对比表。
前提条件:你需要已经拥有真实采集的原始数据文件 data/51job_ai_jobs_real.csv
(通过 crawlers/crawl_51job.py 实际爬取获得)。本项目不会在缺少该文件时
用编造数据代替——main.py 会直接报错并终止,这是刻意设计的强制检查。
pip install pandas numpy matplotlib seaborn scikit-learn pypinyin
python main.py依次执行:数据清洗 → 特征工程 → 可视化分析 → 薪资预测建模,
全部图表输出至 outputs_charts/,清洗与特征工程后的数据文件输出至 data/。
所有图表(坐标轴、标题、图例、类别标签)使用英文,不依赖本地环境是否安装
中文字体,避免"中文显示为方块"的问题。中英文类别对照表见 translations.py,
未被预置翻译覆盖到的中文类别会自动用拼音转写兜底。
- 岗位分布:AI产品经理(56条)、大模型工程师(54条)、数据科学家(50条)是 数量最多的方向,大模型/智能体相关岗位已成为招聘市场的主流组成部分
- 薪资水平:计算机视觉、NLP工程师方向薪资中位数领先;大模型工程师均值最高(31.0K) 但中位数不是最高,内部薪资分化最明显
- 核心技能:Python、大模型/LLM、深度学习、C++、PyTorch构成核心技能集; Agent、RAG、模型微调(SFT/RLHF)、多模态等技能已进入Top15,是2026年新增的主流要求
- 模型效果:随机森林 R²≈0.16,MAE≈6.8K——真实数据的可解释性明显低于理想化假设, 这一发现本身也反映了真实招聘市场薪资的高不确定性
详细分析见 report/real_data_analysis_report.docx
- 数据仅覆盖上海一个城市,不支持城市间对比,结论不能直接推广到全国
- 样本量有限(500条),薪资预测模型的解释力(R²)较低,量化结论存在较大不确定性
- 仅覆盖前程无忧一个数据源,未能覆盖智联招聘、BOSS直聘、拉勾网(详见反爬虫机制说明)