简介:这是一份面向数据分析初学者与SQL实践者的厦门地区招聘数据实战项目资源,聚焦真实招聘场景下的数据清洗、多维分析与薪资预测全流程。资源包含100,077条2021年1月采集的厦门人才网原始招聘记录,覆盖行业、公司类型、岗位要求、薪资福利等19个字段,配套完整技术栈实现:pandas清洗、Hive ETL(含hql脚本)、SQL建表与查询(table.sql)、Python可视化(pyecharts+seaborn)、sklearn回归预测。压缩包共7个文件,含3个核心脚本(visualize.py/train.py/etl.py)、1个SQL建表文件、1个HQL调度脚本、1个Markdown项目说明及1个原始数据压缩包,总大小17.19MB,结构清晰、模块解耦,便于分步学习与复现。目前已有755人学习下载,提供从原始数据加载到交互式图表生成、词云展示及薪资建模的端到端参考方案,特别适合巩固SQL基础、提升Pandas数据处理能力及理解招聘市场分析逻辑。 2021年做厦门招聘数据分析这个项目,最早其实是冲着“整理一份求职参考”去的,结果越做越像一次完整的商业数据分析实战:从拿到一包不知道包含什么的压缩文件,到清洗出可用的结构化数据,再到用Excel和Python做可视化和交叉分析,最后得出一批对求职者、对HR、对做城市人才研究的人都有参考价值的结论。这篇文章把整个过程完整复盘一遍,包含数据清单的构建、清洗时的坑、核心分析维度、可视化做法,以及一些只有实际跑过数据才说得清的细节。如果你正准备找工作、想转行数据分析,或者手头正在做类似的城市招聘数据项目,这篇应该能给你不少可直接套用的思路。
1. 解压“2021厦门招聘数据分析.rar”:先搞清楚数据集里到底有什么
1.1 文件结构和字段盘点
拿到rar文件之后,第一反应是赶紧解压看内容。解压出来是一个典型的招聘类数据集,里面包含几张表,最核心的是招聘岗位明细表,辅以公司信息表、行业分类表和地区编码表。字段层面主要包含岗位名称、公司名称、公司规模、所在城市、城区、薪资区间、工作经验要求、学历要求、职位描述、发布日期等。
这里有个习惯值得养成:先做一张数据字典,把每个字段的含义、类型、是否唯一、是否可空全部列出来。尤其要注意同一个含义在不同表里叫法不一致的情况,比如岗位明细表里是city,公司信息表里是work_city,如果不做映射,后面join的时候就是一场灾难。
我当时拿到的是csv格式,还夹杂着部分excel文件,编码是UTF-8和GBK混着来。这里踩了一个典型的坑:直接用Python的pandas.read_csv去读GBK文件,跑出来一堆乱码,后来统一加上encoding='gbk'或者encoding='utf-8'逐一尝试才解决。遇到csv文件,建议用python脚本先嗅探一下编码,不要盲目用Excel打开,因为Excel打开后另存会破坏原始格式,反过来影响后面的批量处理。
1.2 清洗中最容易踩的坑
清洗阶段有几个问题特别典型:
第一个是薪资字段的格式混乱。很多岗位写的是“6千-8千”、“1万-1.5万”、“面议”,有些是“8K-12K”,还有少数按年薪写。要分析必然得先做归一化。我的处理方式是写一个函数:统一识别“k/千/万”等单位,把区间拆成下限和上限,面议记为NaN,最终生成salary_low、salary_high和salary_mid三个数值字段,单位统一成“元/月”。对于年薪字段,如果是“xx万/年”,就除以12得到月薪。
第二个是重复岗位。同一家公司同一个岗位可能在采集周期内出现多次,如果不做去重,后面统计岗位数量、平均薪资都会被严重放大。去重的关键不是简单drop_duplicates(),而是要根据业务场景定义“重复”:我当时的定义是“公司名+岗位名+薪资区间+学历要求+经验要求”完全一致才算重复,因为有些公司会分多个渠道发布,发布时间不同但内容一样,如果只按全部字段去重,根本去不干净。
第三个是岗位名称不统一。“数据分析师”、“数据分析专员”、“数据运营”、“BI分析师”、“商业分析”这些其实属于同族岗位,但字符串完全不同。解决思路是先做关键词归类,把包含“数据分析”“数据运营”“BI”“商业分析”的岗位打上job_category标签,再结合岗位职责描述做二次校验。这样做的好处是后面可以按类别算平均薪资和需求占比,而不是被几十种细碎岗位名淹没。
清洗完成后一定要做一轮数据质量体检:统计每个字段的缺失比例、唯一值数量、数值字段的取值范围、类别字段的频次分布。我习惯把体检结果输出成一份quality_report.xlsx,既能自己复核,也能作为项目交付物的一部分。
2. 2021年厦门就业市场的基本盘:需求、薪资与行业分布
2.1 岗位发布量与需求结构
清洗完数据,第一件做的事是看总量:整个数据集里共记录了2021年全年厦门相关招聘岗位信息几万条,覆盖互联网、制造、金融、教育、医疗、零售等多个行业。其中的第一层发现,是互联网/软件行业的岗位数量占比排在最前面,但并不是绝对主导——制造业和零售业的技术岗、数字化运营岗在2021年的发布量比预想中高出不少,这和厦门本地的产业基础(电子制造、半导体、生物医药、软件信息服务)是对得上的。
从招聘需求结构看,技术类岗位量最大的是Java后端、前端开发、测试,这和全国市场基本一致。但有一个区域特征很明显:厦门对“跨境电商运营”“海外社媒投放”“独立站运营”这类岗位的需求量非常大,而且发布时间全年保持高位。原因很好理解,厦门本来就有较强的外贸基因,加上2021年跨境电商正处于爆发期,很多公司在厦门设运营中心。如果你做的是求职导向的数据分析,这一类行业特征一定要抓出来,这是本地数据相对全国大盘最有差异感的地方。
另一个值得关注的维度是城区分布。厦门的数据基本集中在湖里区、思明区,其次是集美和翔安。思维上不要把行政区划当成一个普通字段处理,而是要把“城区+行业+薪资”做联动。比如思明区的软件园二期周边,互联网公司岗位多,薪资中位数高于全市平均;而翔安、同安更多是大型制造企业,岗位数量多但偏低薪区间。这种联动信息对求职者选区域非常有帮助,我最后把结论做成了热力图,效果很直观。
2.2 薪资水平的真实分布
薪资分析是整个项目里最容易被误解的部分。直接取平均值容易误导,因为区间数据存在明显长尾——少数高薪管理岗会拉高均值。我计算了按salary_mid的中位数和分位数,发现2021年厦门招聘岗位的全行业月薪中位数大概在几千元到一万元左右的区间(具体数值视岗位族差异较大),远低于平均数的感觉。所以做报告时一定注意呈现分布,而不是只放一个平均值。
分行业看,互联网/金融/生物医药的薪资上限高,但下限也高,说明入门门槛不低;制造业的薪资分布更“平坦”,中低段集中,但一定层级的技术岗和管理岗上限同样可观。这个发现提示求职者:不是只有互联网才有高薪,关键是岗位在产业链的位置,以及对经验/技能的要求等级。
再叠加学历因素,本科阶段是需求主力,但“本科+3-5年经验”是薪资跃升最陡峭的组合。硕士学历岗位的需求量比想象中少,但给出的薪资下限明显更高;专科岗位数量不少,大多集中在零售、客服、制造一线和管理培训生。学历和薪资的关系并非线性的“学历越高越赚钱”,而是与行业、岗位类型深度耦合。这一层交叉分析,是我认为这个项目里最有商业价值的一块。
3. 门槛与天花板:学历、经验、技能的组合规律
3.1 经验年限与薪资的关系
经验要求的分布很有规律:0-1年经验的岗位、1-3年、3-5年、5-10年各有占比,其中1-3年和3-5年占比最高。这说明2021年厦门招聘市场的主力需求不是应届生,也不是资深专家,而是有一定经验、能直接上手干活的人。
把经验要求和薪资中位数做交叉表,可以看到一条比较平滑的爬坡曲线:对应届生开的薪资下限不高,但3-5年经验的薪资中位数几乎是应届生的1.8到2倍。这个倍数在互联网行业更夸张,部分高薪岗位(如算法工程师、资深Java开发、数据分析师)5年经验的薪资中位数能到应届生的2.5倍以上。
需要注意的是,经验类型比年限长度更重要,也就是“相关经验”vs“泛经验”。同样的3年经验,做过电商用户增长的数据分析师,和只做过报表录入的“数据分析专员”,在市场上的薪资估值完全不一样。岗位描述里的副词会透露信号,比如“具备电商行业经验者优先”“有SQL和Python能力优先”这些句子,其实是薪资溢价的隐式标签。我后来专门做了技能关键词与薪资的回归分析,效果特别好。
3.2 技能高频词:市场对“会什么”的回答
技能分析是招聘数据挖掘里最有意思的部分。我使用的方法是:对职位描述做中文分词,再用停用词表过滤掉“任职要求”、“岗位职责”、“负责”、“相关”这类无意义词,统计高频词频。同时提前构建技能词典,把SQL、Python、Excel、Tableau、PowerBI、Java、Spring、Hadoop、Spark、机器学习、数据分析、用户增长、广告投放、PS、AI、LR等等纳入匹配。
结果比较清晰:
- 通用技能类:Excel、Office、沟通能力强、抗压能力、团队协作出现频率最高。这部分是“门槛型”技能,几乎每行招聘数据里都有,不加分但缺了不行。
- 数字化技能类:SQL、Python在数据分析、运营、产品、商业分析岗里高频出现;Java、Spring Boot在后端开发岗一骑绝尘;Vue、React在前端岗霸榜。
- 平台工具类:在厦门市场,Shopify、Amazon、Facebook Ads、Google Ads出现频率极高,直接反映了跨境电商行业特征。
- 数据分析专项:Tableau、PowerBI、Metabase、FineReport均有覆盖,但要求PowerBI的外企和外企风格公司居多。
这里给想强化技能的人一个实操建议:用“技能关键词+薪资区间”做技能溢价分析。统计包含某关键词的岗位薪资均值,与不包含该关键词的同族岗位薪资均值做对比。结果很明显,包含Python的数据分析岗位,平均薪资比不包含的高出20%-30%;包含Spark/Hadoop的大数据岗位,薪资上限高出更多。这说明技能不再只是“加分项”,而是直接决定招聘岗位等级和薪资区间的分桶变量。
4. 从数据到结论:可视化与报告的方法
4.1 用Excel快速上手的数据透视与图表
很多人一看到这份需求就问我:不会Python,纯用Excel能不能做?完全能。Excel的数据透视表功能非常适合这种数据集:选中清洗好的明细表,插入数据透视表,把“行业”拖到行标签,“岗位名称”拖到列标签,“薪资中位数”拖到值区域,选择平均值,立刻就能看到“哪个行业里哪类岗位给钱多”。数据可视化部分,在职级场景下用“城市”或“部门”等维度做“分析图”就可以完成大多数工作。
值得单说的是Excel里做薪资分布的技巧。直接插入柱状图是不够的,建议先用FREQUENCY数组公式或透视表把薪资分成区间(如0-5K,5K-8K,8K-12K,12K-20K,20K以上),再对区间频数做柱状图,这样就能一目了然看到偏态分布。这里提醒一个坑:Excel对字符型数字很宽容,但如果源数据里混有“8千-1.2万”这样的文本,必须提前用分列或公式清洗,否则透视表的平均值会算出来极其离谱。
4.2 Python数据分析与可视化路线
如果你熟悉Python,效率会大幅提升。推荐直接用pandas做清洗和分组聚合,matplotlib和seaborn做静态图表,plotly做交互图表。核心代码并不复杂,关键是有清晰的思路:
pandas.read_csv读入数据,统一把列名改成snake_case风格;- 用
pd.to_numeric配合errors='coerce'把薪资字段转成数值; - 用
groupby按“行业”或“城区”分组,计算salary_mid的均值、中位数、分位数; - 用
value_counts()看岗位类别、技能关键词的频次分布; - 用
matplotlib画分组箱线图、堆积柱状图、热力图。
实际项目里,我建议把分析脚本拆成两到三个.py文件:clean.py负责清洗,analysis.py负责聚合,visualize.py负责出图。不要全部堆在一个notebook里,因为后期调整参数、重新跑数会非常痛苦。可视化层面的关键技巧是“一图一观点”,每一张图都要带着一个具体问题去画。比如:“不同经验段对应的薪资分布箱线图”,回答的是门槛问题;“高频技能词TOP20水平柱状图”,回答的是技能需求问题。图多了反而会让报告失焦。
4.3 可视化报告要避免的误区
这个项目我反复迭代过好几次,总结出三个最容易让人翻车的地方:
第一,别让图表欺骗读者。比如Y轴从4000开始而不是0开始,会让不同行业薪资差异看起来比实际大得多。做对比类图表时,一定要保持坐标轴范围一致。再比如用色彩编码时,深浅跨度不要过大,否则打印出来根本分不清。
第二,别忽略样本量。有些岗位在整个数据集中只出现十几条,画箱线图时会显示异常宽的范围,这时候要和读者说明“样本较少,仅供参考”。不要为了让图表结果好看就把异常值强行删掉,而是要理解这些异常值背后的业务原因——有些是高管岗,有些是季节性急招,它们的“异常”本身就是信息。
第三,报告里要有“建议”而不是只有“数据”。我最后产出的报告,每个分析章节末尾都有一个“对求职者/对HR”的结论模块。比如“厦门跨境电商运营岗位需求量大且薪资有竞争力,但普遍要求1年以上实操经验,应届生进入难度较大”,这种结论比单纯堆数据有用得多。
5. 数据分析项目的正确打开方式:选型、思考链路与延伸方向
5.1 为什么这个项目值得做,以及选型思路
做数据分析项目,选数据很容易,选对方向很难。这个项目的价值在于它包含了一个完整的数据分析项目闭环:数据获取、数据清洗、探索性分析、交叉分析、可视化、结论输出,每一步都踩得到实际问题。对初学者来说,这是比用网上现成的“波士顿房价”或者“鸢尾花”顺手得多的练手对象,因为它自带业务味道,能逼你思考“这个数字到底说明了什么”。
选型方面也值得聊聊。你可能觉得,数据只有几万条,用Excel也能折腾,有必要上Python吗?我的答案是:如果你只是做一次性的报告,Excel足够;但如果你想把分析流程沉淀成可重复执行的方法,或者后续扩展到全国多城市数据,那Python和pandas几乎是必须的。不要为了炫技上用不上大而全的Hadoop和Spark,数据量根本没有到那个量级,本地用pandas跑几百万行数据完全没有压力,别动不动就把“大数据框架”搬出来。
工具链的完整建议是:Excel负责快速探索,Python负责清洗和建模,PowerBI或Tableau负责制作可交互的看板。前期数据质量不高时,用Excel反复操作效率低下,建议直接用Python脚本做清洗并导出中间层数据;这份中间层数据再导入PowerBI建模型,拖拽生成图表就很顺畅。
5.2 招聘数据如何拓展为城市人才洞察
做完厦门这一个城市的基础分析后,这个项目的可拓展性其实很高。
一个方向是做多城市对比。把2021年全国主要新一线城市和一线城市的招聘数据放在一起,比较同样岗位在不同城市的薪资中位数、需求规模、经验门槛。这份报告对求职者选择城市很有参考价值,也可以输出“城市人才吸引力指数”,是一个很好的商业分析作品。
另一个方向是做时间序列分析。如果手头能拿到更长时间跨度的数据,比如2020-2024年各月的数据,就可以分析岗位需求量的季节性波动、政策对行业的刺激效应等,还可以用statsmodels做简单的时间序列分解。不过时间序列分析要求的数据粒度更细,对字段质量要求也更高,建议先把横截面的分析做扎实再考虑。
还有一个方向是自然语言处理应用。职位描述文本本身包含大量有价值信息,可以用jieba分词、TF-IDF特征化和基于词向量的关键词聚类,把招聘需求中隐藏的主题组(比如出现频率高的几种岗位技能组合)挖掘出来。这块的技术难度更高,但做出来之后会非常出彩,适合简历上需要展示“实际项目落地能力”的人。
5.3 SQL、Excel和Python在一个分析项目里怎么分工
这个问题我经常被问到,尤其在数据分析面试里。
- 如果数据来自数据库,第一步必然是用SQL取数,这步没什么好说的,重点是用
WHERE、GROUP BY、JOIN把数据按需要的粒度取出; - 取出来后,如果量不大、只做简单分组统计,Excel透视表足够;
- 如果涉及多文件的合并清洗、自定义复杂函数、多字段条件循环,则必须交给Python的pandas;
- 最后的可视化,如果给业务方看,建议输出为PDF/HTML格式交互报告,方便别人自己筛选。
这三者不是替代关系,是接力关系。会合理分工,才是数据分析师最值得训练的底层能力。
6. 复盘:我做完这个数据项目后最想保留的三句话
第一句话:数据准备占用了超过60%的时间,它才是这个项目真正的重点。我最初以为写分析代码是最耗时的,结果跑下来发现处理编码问题、清洗薪资字段、统一岗位名称花的时间远远多于画图。任何招聘类数据分析项目,一定先把数据清洗想清楚再做,否则后续所有结果都是建在流沙上。
第二句话:给数据一个业务坐标系,分析才有意义。一个岗位的平均薪资是8K还是12K,孤立着看没有意义,要考虑城市生活成本、行业平均水平、经验要求、技能溢价、公司规模。2021年厦门的数据里,互联网行业的薪资看起来比制造业高,但考虑工作时长和岗位密度之后,可能制造业里某些细分技术岗才是性价比之选。这些结论,只有在把多个维度交叉起来之后才会出来。
第三句话:动手做比等数据完美更重要。很多人看到原始数据这么乱,第一反应是“这个数据不能用来分析”。但现实中,数据永远是不完美的,恰恰是那些缺失值、异常值、格式乱码让分析过程变得有价值。完整走完一遍这个项目,你学到的绝对值回票价。
如果你手里也有一份城市招聘数据想分析,别犹豫,直接开干吧。第一版不需要追求完美,先把全流程跑通,再回来迭代第二版,你会看到自己的进步。
本文还有配套的精品资源,点击获取