计算机岗位招聘薪资分析与可视化系统
有需要本项目的代码、文档、完整资源,或者需要部署调试的朋友,可以私信博主。
做这个系统的初衷很直接:招聘网站上每天都会产生大量岗位信息,但求职者真正想知道的并不只是某一个岗位招不招人,而是不同城市的机会在哪里,哪类公司给出的薪资更有竞争力,学历、经验、技术关键词到底会怎样影响薪资水平。单靠人工浏览,很难把这些信息串起来,也很难形成一张可以辅助判断的就业市场地图。
所以我把项目定位成一个“招聘数据采集、清洗、入库、分析、预测、管理”一体化系统。它不是单独画几张图,也不是只跑一个模型,而是把数据工程、Web系统、可视化大屏和机器学习预测结合到一个完整流程里。公开展示版保留系统功能、开发思路和运行效果,涉及原始链接、账号、数据库记录、真实岗位明细等内容已经做了脱敏处理。
图1系统整体处理链路示意
一、项目整体定位:把分散岗位信息变成可分析的就业画像
计算机岗位本身变化快,岗位名称也很“碎”:前端开发、Java工程师、Python开发、数据分析、机器学习、人工智能工程师、测试、运维、嵌入式、算法、数据开发等方向都属于同一个大类,但对应的城市分布、薪资空间和能力要求并不一样。这个系统围绕计算机相关岗位展开,采集并整理了超过6万条岗位记录,覆盖岗位名称、公司名称、薪资、城市、学历、经验、公司类型、公司规模、行业、任职要求、搜索关键词等多个字段。
系统最终面向两类使用场景:一类是普通用户,通过可视化页面查看城市、公司、薪资、学历、经验、技能关键词等维度的统计结果,也可以在预测模块中输入个人或岗位条件,获得薪资估算参考;另一类是管理员,通过后台完成用户管理、数据维护、记录新增、编辑、删除和分页检索。前端界面强调直观交互,后端则围绕数据处理和模型服务做支撑。
技术栈上,数据采集使用Python与Selenium,数据处理使用Pandas,结构化存储采用MySQL,Web服务由Flask搭建,图表展示以ECharts和Pyecharts为主,薪资预测采用CatBoost回归模型。这样组合的好处是上手成本可控,模块边界清晰,后续无论是扩展数据源、增加图表,还是替换模型,都比较方便。
二、数据采集:按城市和关键词拆分任务,先保证数据可用
数据采集阶段,我没有把目标设定成“越复杂越好”,而是先解决稳定获取和可追溯两个问题。系统按城市和关键词拆分采集任务,每个关键词对应一个独立CSV文件,采完一部分就可以立刻检查数据量和字段质量。这样即使某个关键词中断,也不会影响其他数据文件,后续整合时也能保留关键词来源。
在页面采集上,系统通过浏览器自动化方式处理动态加载页面,并设置了等待、重试和异常跳转机制。对于尾页判断、页面为空、元素加载失败等情况,程序会自动切换到下一个关键词或城市。公开展示时不展开具体登录、反爬处理和页面定位细节,只保留采集流程和运行效果,避免把可直接复用的采集逻辑完整暴露。
图2数据采集与原始文件保存展示
三、数据清洗:薪资、城市、字段命名是重点
原始招聘数据不能直接拿来分析,最明显的问题就是格式不统一。比如薪资字段既有“15-25千·13薪”,也有“8-12万/年”“200-300元/天”等不同写法;城市字段有时带区县,有时只有城市;任职要求、行业类型、公司性质等字段还会出现缺失或混杂。清洗阶段的工作就是把这些“看起来像文本”的内容整理成可以统计和建模的结构化字段。
薪资清洗是整个预处理里最关键的一步。我把不同单位统一换算为月薪口径,同时提取薪资下限、薪资上限、薪资发放次数和月均薪资等字段,方便后续做区间分析和预测评估。城市字段则按照市级维度进行归一,避免同一城市因为新区、区县、开发区写法不同而被重复统计。字段命名也从中文列名映射成英文变量名,便于数据库建表、后端接口和模型输入保持一致。
清洗后的数据同时保留CSV和Excel格式。CSV更适合批量入库和程序读取,Excel则方便人工抽查。这个步骤看起来不如大屏和模型“亮眼”,但它决定了后面所有统计结果是否可信。如果薪资单位没有统一,或者城市维度没有合并,图表再漂亮也会出现偏差。
图3数据清洗与字段标准化处理展示
四、数据入库与系统结构:让分析结果能够被系统持续调用
完成清洗后,岗位数据被导入MySQL集中管理。数据库部分不只是简单保存表格,而是要考虑字段类型、主键、索引和后续查询效率。系统中的招聘数据表包含岗位、公司、经验、学历、行业、薪资、城市、关键词等字段,用户表和管理员表分别服务于前台登录与后台权限控制。
在Web层面,Flask负责路由、接口、会话状态和后端逻辑。前端页面通过接口获取统计结果,再交给ECharts渲染。用户访问可视化页面时,不需要关心后台SQL如何执行,只会看到可交互的图表;管理员进入后台时,可以通过表格组件完成检索、编辑和数据维护。这样的结构把数据层、服务层和展示层分开,后期维护会更轻一些。
系统也预留了继续扩展的空间。例如可以把采集任务做成定时任务,把图表接口做成统一API,把模型服务独立成单独模块,甚至可以加入岗位推荐、简历关键词匹配和自动报告生成。当前版本已经完成从数据到应用的闭环,后续升级主要是在数据源、模型解释和产品体验上继续打磨。
图4数据库存储与核心关系结构展示
五、多维可视化:从城市、公司、学历经验到技能关键词
可视化部分是这个系统最适合公开展示的内容。我把统计维度分成地点分析、公司分析、关键词分析、薪资分析、行业与岗位分析等几类,每一类下面再拆成多个专题图表。用户既可以看整体大屏,也可以进入单项图表查看更具体的分布。
城市维度主要回答“机会在哪里”和“薪资差异在哪里”。系统统计不同城市的岗位数量、平均月薪、最高薪资以及区域地图分布。对于计算机岗位来说,一线城市和产业聚集城市通常岗位数量更多,薪资区间也更高;但从求职角度看,高薪并不等于一定适合,还要结合生活成本、岗位数量、学历门槛和经验要求一起判断。
图5地域分布、城市薪资与岗位需求展示
关键词和技能维度主要回答“市场正在招什么”。系统对搜索关键词、岗位名称和任职要求进行统计,并用柱状图、词云图等方式展示高频技术栈。Python、Java、前端、数据分析、机器学习、人工智能工程师等关键词在结果中出现频率较高,说明当前计算机岗位对编程基础、数据处理能力和智能化方向能力都有持续需求。
图6岗位关键词、技能要求与词云展示
公司与学历经验维度更适合做职业规划参考。不同公司类型、公司规模、工作经验和学历要求对应的薪资差异并不完全一样。系统把这些因素拆开呈现,可以帮助用户判断自己当前更适合投递哪类岗位,也可以反过来提醒学习者:如果想进入更高薪区间,除了技术栈,还要关注行业场景、项目经验和岗位层级。
图7公司属性、经验学历与薪资关系展示
六、可视化大屏:把核心指标集中到一个页面
除了普通图表页面,我还做了一个深色主题的数据大屏,把岗位总量、重点城市岗位数量、平均薪资、岗位词云、技能热度、学历分布、经验分布、地图等内容集中到一个页面。大屏的价值不只是“看起来炫”,更重要的是把分散指标放在同一视图里,方便快速把握整体市场结构。
大屏采用左中右三栏布局,中间展示核心词云和地图,两侧放置柱状图、折线图、饼图等辅助指标。页面顶部保留关键统计数字,图表支持动态渲染和轮询更新。公开版截图已经对顶部标题和部分明细做了弱化处理,但仍然能看到整体布局、图表组合和交互风格。
图8系统可视化大屏运行效果
七、薪资预测:把统计分析进一步变成可交互工具
只做图表展示还不够,所以系统加入了薪资预测模块。模型输入包括岗位名称、公司性质、工作经验、学历要求、所属行业、城市、搜索关键词、公司规模等特征,输出为预测月薪,并进一步换算年薪和薪资等级。这个功能适合用来做求职前的参考:用户可以调整学历、经验、城市或岗位方向,观察预测结果的变化。
模型部分采用CatBoost回归算法。招聘数据里有大量类别型变量,比如城市、学历、公司类型、行业、关键词等,CatBoost对这类变量比较友好,不需要做过于复杂的独热编码。训练完成后,模型在测试集上的R²约为0.82,平均绝对误差约为2400元。考虑到招聘薪资本身通常是区间值,这个误差水平作为就业市场参考是可以接受的。
在系统集成上,训练好的模型被序列化保存,Flask后端提供预测接口,前端表单提交参数后即可返回结果。界面中保留了预测输入项、计算按钮、预测月薪和年薪展示。公开资源里不会展开完整训练参数和源码结构,只展示模型思路、核心指标和上线效果。
图9模型评估与薪资预测交互展示
八、用户端:从登录到图表浏览,再到在线预测
用户端的流程比较清晰:先登录或注册账号,然后进入主界面选择不同分析模块。左侧导航栏按照分析主题组织,包括地点分析、公司分析、搜索关键词分析、薪资分析、行业与岗位分析、炫酷大屏和智能模型等入口。用户不需要理解数据库和模型,只需要根据自己的关注点点击对应模块即可。
预测模型入口做成表单交互,用户可以选择岗位名称、公司名称、工作经验、学历要求、企业性质、公司规模、任职要求、所属行业、回复速度、薪资发放次数、工作城市、搜索关键词等条件。系统返回结果后,页面以较直观的方式呈现预测数值,适合用于毕业生求职前的薪资预期判断,也适合做课程设计、毕业设计或项目作品集展示。
图10用户端登录、注册、主界面与预测入口展示
九、管理端:用户管理和数据维护形成运营闭环
管理端主要解决系统运营问题。管理员登录后可以查看后台概览,包括数据总量、用户总量、系统负载、近期趋势等指标,也可以进入用户管理页面查看注册用户、编辑账号信息、删除异常用户或调整权限。为了公开展示,截图中的用户名、邮箱、电话、QQ、微信等内容已经脱敏。
图11管理员后台概览与用户管理展示
数据管理模块负责维护招聘记录。管理员可以按学历、所属行业、企业性质等条件检索数据,也可以新增岗位记录、编辑已有记录或删除错误记录。表格支持分页显示,避免一次加载过多数据影响体验。这个模块让系统不再只是静态展示页面,而是具备了基本的数据运营能力。
图12数据管理模块增删改查流程展示
十、项目适合怎么继续扩展
当前版本已经完成了从采集到展示、从图表到预测、从用户端到管理端的完整链路。继续往下做,可以优先考虑五个方向:第一,加入多平台数据源,把不同招聘平台的数据统一到同一套字段口径;第二,做定时更新和自动化任务调度,让岗位数据持续刷新;第三,引入文本语义分析,把岗位描述、任职要求和技能标签做得更细;第四,增加模型解释功能,用特征贡献说明为什么某个岗位薪资更高;第五,面向求职者加入简历关键词匹配和岗位推荐。
如果用于毕业设计或课程项目,这套系统的完整度比较高,既有数据采集和预处理,又有数据库、Web前后端、可视化大屏、机器学习预测和后台管理。展示时可以从“数据从哪里来、怎么清洗、怎么入库、怎么展示、怎么预测、怎么管理”这条线讲清楚,逻辑会比单纯介绍算法或单纯展示页面更完整。
当然,真正上线使用还需要进一步完善权限控制、参数化查询、日志审计、异常监控、数据合规说明和部署脚本。公开展示版已经对敏感信息做了处理,完整资源更适合在可控环境下学习、复现和二次开发。
从学习和复用角度看,这套系统也适合拆成阶段性任务:先完成岗位数据采集与字段清洗,再完成数据库建表与接口封装,随后接入统计图表和大屏,最后把机器学习预测和后台管理补齐。按这个顺序推进,既能看到阶段成果,也能避免一开始就被完整系统的复杂度压住。
每文一语
真正能跑起来的项目,往往不是靠某一个炫目的功能撑起来,而是靠每一个扎实的环节一步一步连起来。