1.1项目简介
在现代社会,招聘市场的竞争日趋激烈,企业和求职者都希望能够更有效地找到合适的机会与人才。猎聘网作为国内领先的人力资源服务平台,汇聚了大量的招聘信息和求职者数据,为研究招聘市场趋势提供了丰富的素材。基于Python的猎聘网招聘数据采集与可视化分析,旨在通过技术手段深入挖掘招聘数据背后的价值。通过爬虫技术,可以自动化地获取猎聘网的招聘信息,包括职位名称、薪资范围、工作地点、公司规模等关键数据,为后续分析打下基础。通过图表和可视化工具,研究者能够直观地展示招聘市场的趋势和变化,帮助企业和求职者更好地把握市场动态,做出明智决策。同时,分析结果还可以为招聘策略的制定提供数据支持,助力企业优化人才招聘流程。
基于Python的猎聘网招聘数据采集与可视化分析,不仅为研究招聘市场提供了工具和方法,也为行业发展提供了重要的决策依据,具有重要的理论和实际意义。
1.2课题目标
基于Python的猎聘网招聘数据采集与可视化分析的研究目标主要集中在以下几个方面。
数据采集是本研究的核心目标之一。通过使用Python中的爬虫技术,系统化地获取猎聘网上的招聘信息,包括职位名称、薪资、工作地点、公司类型、招聘时间等关键信息。通过自动化的数据采集,节省人工收集时间,确保数据的全面性和准确性,为后续分析提供坚实的数据基础。
数据清洗和预处理是确保分析结果可靠的重要环节。研究目标包括对采集到的数据进行去重、缺失值处理和数据格式标准化等操作,以提高数据质量,从而增强分析的有效性和准确性。
数据分析是另外一个重要目标。利用Python的Pandas和NumPy等库,深入分析招聘数据中的趋势和特征,包括薪资水平的分布、热门职位的变化、地区招聘需求及其增长等。通过对数据进行定量分析,揭示招聘市场的潜在规律和发展趋势。
数据可视化是提升分析结果传播效果的关键环节。通过使用Matplotlib和Seaborn等可视化工具,将分析结果以图表形式呈现,使得复杂数据变得直观易懂。研究的最终目标是为企业和求职者提供可视化的市场洞察,帮助他们更有效地制定招聘和求职策略,推动招聘市场的优化发展。通过这些研究目标,旨在为人力资源管理和决策提供科学依据。
2 设计思路
2.1开发环境与工具
开发环境主要包括Python编程语言、网络爬虫技术、数据处理与分析库、数据可视化工具以及Pycharm开发环境,并运用到 Requests,Pandas,Numpy,等库。该项目的开发环境如下表 2-1 所示。
表2-1 系统开发环境版本表
开发工具 | 版本 |
---|---|
Pycharm | PyCharm Community Edition 2023.2.1 |
Python | Python 3.9 |
Pandas | Pandas 1.1.5 |
Matplotlib | Matplotlib 3.5.3 |
2.1.1 Pycharm
PyCharm是一款强大的Python集成开发环境(IDE),由JetBrains公司开发,广泛应用于数据分析、Web开发、人工智能等多个领域。在基于Python的猎聘网招聘数据采集与可视化分析项目中,PyCharm提供了众多便利的功能,极大地提升了开发效率和编码体验。PyCharm具备智能代码补全和实时错误检测的功能,能够帮助开发者快速编写高质量的Python代码。在进行数据采集时,使用PyCharm可以轻松调用第三方库,如BeautifulSoup和Scrapy,进行网页爬虫和数据提取。同时,其内置的调试工具使得开发者能够逐步调试代码,快速定位和修复问题,从而提升数据采集的准确性和效率。PyCharm提供了强大的项目管理功能,支持虚拟环境的创建和管理,方便开发者在不同项目间切换,避免库版本冲突。在猎聘网招聘数据分析中,使用PyCharm可以轻松管理各种数据处理和可视化库,如Pandas、Matplotlib和Seaborn,使得数据处理和可视化分析更加顺畅。
2.2.2 Python
Python是一种广泛使用的高级编程语言,以其简洁易读的语法和强大的功能而闻名。在基于Python的猎聘网招聘数据采集与可视化分析中,Python的优势体现在多个方面,使其成为数据科学和分析领域的热门选择。Python拥有丰富的库和框架,特别适合数据处理和可视化。例如,使用BeautifulSoup和Scrapy等库,可以轻松实现网页爬虫,自动化地从猎聘网采集招聘信息。同时,Pandas库为数据清洗和整理提供了强大的支持,让用户能够高效地处理和分析数据;而NumPy则为数值计算提供了基础,能够加速数据处理过程。Python在数据可视化方面同样表现出色。借助Matplotlib和Seaborn等可视化库,开发者可以将分析结果以图表的形式呈现,直观地展示招聘市场的趋势和特点。这种可视化能力不仅有助于分析结果的理解和传播,还能帮助企业和求职者做出更为明智的决策。Python具有良好的跨平台特性,能够在Windows、macOS和Linux等多种操作系统上运行,方便开发者在不同环境中进行工作。同时,Python社区活跃,丰富的在线资源和文档,使得开发者在遇到问题时能够快速找到解决方案。
2.2.3 Requests
在基于Python的猎聘网招聘数据采集与可视化分析中,Requests库作为一款强大的HTTP库,扮演着至关重要的角色。Requests库使得编写网络爬虫变得简单而高效,极大地简化了HTTP请求的过程,成为数据采集的热门工具。Requests库的一个主要优势是其友好的接口和易于使用的语法。通过简单的几行代码,开发者可以发送GET或POST请求,获取目标网页的HTML内容。这对于猎聘网等招聘平台的数据采集尤为重要,用户只需指定目标URL,Requests库便可自动处理连接和请求,返回的数据也易于解析和存储。Requests库支持各种HTTP功能,包括请求头的自定义、会话管理、Cookie处理等。在数据采集过程中,有时需要模拟真实用户的访问行为,以避免被网站识别为爬虫。通过设置请求头和使用会话对象,开发者能够有效地模拟浏览器请求,增强抓取的成功率。Requests库与BeautifulSoup等解析库结合使用,可以实现更为强大的数据提取功能。采集到的HTML内容可以通过BeautifulSoup进行解析,提取所需的招聘信息,如职位名称、薪资、公司名称等。这样,开发者可以灵活地获取和处理数据,为后续的分析和可视化奠定基础。
2.2.4 Pandas
在基于Python的猎聘网招聘数据采集与可视化分析中,Pandas库发挥着核心作用。Pandas是一个强大的数据处理和分析库,特别适合处理结构化数据,使得数据操作变得高效而简便。Pandas提供了两种主要的数据结构:Series和DataFrame。其中,DataFrame是一个二维的表格结构,类似于电子表格或数据库的表格,非常适合存储和操作来自猎聘网的招聘数据。在数据采集完成后,开发者可以轻松地将爬取到的招聘信息(如职位名称、薪资、公司名称和工作地点等)存储为一个DataFrame,便于后续的数据清洗和分析。Pandas具备强大的数据处理功能。通过其丰富的方法,用户可以快速进行数据筛选、排序、分组、合并和透视等操作。这些功能使得开发者能够对招聘数据进行深入分析,识别出热门职位、薪资水平和不同地区的招聘需求等趋势。例如,可以利用Pandas对薪资数据进行分组统计,从而揭示不同职位或行业的薪资差异。Pandas与数据可视化库(如Matplotlib和Seaborn)无缝集成,方便将分析结果以直观的图表形式展现。开发者可以直接通过Pandas生成图表,帮助用户更好地理解招聘市场的变化和趋势。
2.2技术架构
基于Python的招聘数据采集与可视化分析的技术架构主要包括数据采集、数据处理和分析、以及数据可视化三个关键部分:
-
爬虫模块:数据采集是整个分析流程的第一步,主要通过Python中的Requests库。具体流程包括:发送HTTP请求:使用Requests库发送GET请求,获取猎聘网上的招聘信息页面。解析网页内容:采用json解析获取的api接口数据,提取所需的信息,例如职位名称、薪资范围、公司名称、招聘要求和工作地点等。存储数据:将提取到的数据存储为CSV文件,为后续的数据处理做准备。
-
数据清洗模块:这一部分主要使用Pandas库来进行数据清洗、处理和分析,具体步骤包括:通过Pandas对采集到的数据进行去重、缺失值处理和格式标准化,以保证数据的质量和一致性。利用Pandas进行数据分组、聚合和统计分析,识别招聘市场的趋势和特征。例如,分析不同职位的薪资水平、地区招聘需求的变化等。将数据进行整理和转化,以便于后续的可视化包括将数据转换为适合绘图的格式,或计算新的特征变量。
-
在数据可视化阶段,主要通过Matplotlib和Seaborn等可视化库实现。具体步骤包括:根据分析结果,使用Matplotlib和Seaborn绘制柱状图、折线图、饼图等多种图表,以展示招聘数据的趋势和特征。对图表进行美化和定制,包括设置标题、坐标轴标签、颜色方案等,提高可读性和视觉效果。将可视化结果汇总成报告,为企业和求职者提供决策依据。
技术架构图如下2-1:
图2-1技术架构图
3 数据采集
本项目采集猎聘网招聘网站招聘数据4093条存入csv。采集的网页信息如下图:
数据采集的实现过程主要依赖于使用Requests库向猎聘网的API发送请求,并处理返回的数据。具体的过程如下:
代码中定义了一个名为post_data的函数,负责进行数据采集。该函数首先设置了请求的目标URL,即猎聘网的招聘信息API接口。然后,定义了HTTP请求的头信息(headers),这些头信息模拟了真实用户的浏览器请求,以避免被网站识别为爬虫。这些头信息包括了常见的用户代理、内容类型和来源等信息,确保请求能够顺利通过。
代码定义了一个职位行业的列表,覆盖多个行业类别,如“大数据”等。对于每个行业,程序将循环遍历每一页的招聘信息,最多获取21页的数据。每页的请求都包含了特定的请求体(data),其中mainSearchPcConditionForm部分指定了城市、当前页面、每页大小以及行业类型等参数。这样,通过设置不同的请求参数,程序能够获取到不同页面的招聘信息。
在每次发送POST请求后,程序会通过requests.post方法将请求发送到指定的URL,并将响应结果存储在response对象中。为避免对服务器造成过大压力,代码中使用了time.sleep(2),让程序在每次请求之间暂停2秒,控制请求频率。
一旦成功接收到响应,程序会调用parse_data函数解析响应内容。该函数首先尝试将JSON格式的响应数据转换为Python对象,并从中提取出招聘信息列表jobCardList。如果解析成功,程序会将提取到的招聘信息传递给sync_data2db函数进行后续处理。
在sync_data2db函数中,程序会遍历所有的招聘信息,并将每条信息的相关字段(如岗位名称、学历要求、工作经验、发布时间、链接、地区、薪资、标签、公司名称、行业、公司规模和融资情况)写入到CSV文件中。使用Python内置的CSV模块,程序以追加模式打开目标CSV文件,并使用csv.writer将每条招聘数据写入新的一行。主要代码如下图。
采集结果如下图:
4 数据处理
4.1数据去重和标准化
具体实现如下:
去重处理:使用data.drop_duplicates(inplace=True)方法去除数据中的重复行。这一步骤对于确保分析结果的准确性非常重要,因为重复的数据可能会导致统计结果失真。
学历信息标准化:在处理学历数据时,使用data['学历']=data['学历'].str.replace('统招本科','本科')将学历字段中的“统招本科”统一替换为“本科”,保证数据的一致性,减少分类时的困扰。去重和标准化后数据集信息如下图。
4.2数据分组统计和汇总
主要包括对不同维度数据的分组统计和汇总。具体实现如下:
薪资分布的分段:使用pd.cut方法将薪资数据分为多个区间,并为每个区间指定标签。price_bin = pd.cut(data['薪资'], bins=[0,5000,10000,15000,20000,25000,30000,1000000], ...)将薪资信息划分为“<5000元”、“5000元-10000元”等多个等级,便于后续进行分布分析和可视化。
岗位数量统计:使用data.groupby方法对不同类别(如学历、工作经验、行业、公司规模、公司融资情况)进行分组,并统计每个类别下的岗位数量。例如,data1=data.groupby('学历')['岗位名'].count().reset_index()将数据按学历分组,计算每个学历类别下的岗位数量,并将结果存储在data1中。
平均薪资计算:同样使用groupby方法计算不同类别(如学历、工作经验、行业等)的平均薪资。data11=data.groupby('学历')['薪资'].mean().reset_index()实现了对每个学历类别的平均薪资计算,结果存储在data11中。分组统计和汇总后结果如下图。
4.3 数据合并
在统计得到岗位数量和薪资数据后,代码中有多个数据合并的步骤。具体实现如下:
合并岗位数量和平均薪资:使用pd.merge方法将岗位数量和平均薪资数据表合并,以便于后续的可视化展示。例如,combined_data = pd.merge(data3, data33, on='行业')将行业岗位数量与行业平均薪资合并在一起,便于进行行业分析。结果如下图:
5 数据分析与可视化
5.1薪资分布环形图实现
薪资分布环形图的实现主要通过以下几个步骤完成,具体过程如下:
薪资数据的分布通过pd.cut函数进行了分段处理。代码中使用price_bin = pd.cut(data['薪资'], bins=[0, 5000, 10000, 15000, 20000, 25000, 30000, 1000000], include_lowest=True, right=False, labels=['<5000元', '5000元-10000元', '10000元-15000元', '15000元-20000元', '20000元-25000元', '25000-30000元', '>30000元'])将薪资数据划分为七个区间,从而便于进行分布分析。每个薪资区间都被指定了相应的标签,便于后续在图中展示。使用pd.value_counts(price_bin)统计每个薪资区间的岗位数量,从而生成了一个包含各薪资区间及其对应数量的Series df_price。这一步骤的目的是为绘制环形图提供基础数据。在绘制环形图时,代码使用了plt.pie函数。其中,df_price作为数据源,labels=df_price.index用于指定各个区间的标签,autopct='%1.1f%%'用于显示每个区间所占总数的百分比,startangle=90则将图形的起始角度设置为90度,以便更好地展示数据。colors=plt.cm.tab20.colors指定了图形的颜色,使得图形更加美观。最后,为了形成环形图的效果,代码添加了一个白色中心圆,,程序成功绘制了薪资分布的环形图,直观地体现了不同薪资区间的岗位数量分布,帮助受众更清晰地理解薪资结构。如下图
5.2学历分布分析饼图实现
学历分布分析的饼图通过以下步骤实现。数据的清洗和整理是绘制饼图的基础。使用data.groupby('学历')['岗位名'].count().reset_index()统计不同学历类别下的岗位数量,结果存储在data1中。之后,饼图的绘制主要依赖于Matplotlib库中的plt.pie函数。具体实现中,代码plt.figure(figsize=(8, 8))设置了图形的大小,确保饼图在视觉上更加清晰。接着,使用plt.pie(data1['岗位名'], labels=data1['学历'], autopct='%1.1f%%', startangle=140)绘制饼图,其中data1['岗位名']提供了每个学历类别的岗位数量,labels=data1['学历']用于标注各个扇区的学历类型,autopct='%1.1f%%'设置了每个扇区占总数的百分比显示,startangle=140则指定了图形的起始绘制角度,以便优化扇区的视觉效果。最后,plt.title('学历分布分析')为饼图添加标题,并使用plt.axis('equal')确保饼图为圆形。通过这些步骤,程序成功生成了展示不同学历层次岗位数量比例的饼图,直观地反映了招聘市场中各学历层次的分布情况,帮助分析者理解学历与岗位数量之间的关系。如下图。
5.3工作经验与岗位数量分布柱形图实现
工作经验与岗位数量的分布柱形图通过以下步骤实现。数据的分组和统计是绘制柱形图的基础。通过data.groupby('工作经验')['岗位名'].count().reset_index()对数据进行分组,统计各工作经验类别下的岗位数量,并将结果存储在data2中。这一过程确保了数据结构适合进行可视化展示。使用Matplotlib库中的plt.bar()函数生成柱形图。代码plt.figure(figsize=(10, 6))设置了图形的大小,使图表更具可读性。随后,plt.bar(data2['工作经验'], data2['岗位名'], color='skyblue')绘制柱形图,其中data2['工作经验']为X轴的数据,表示不同的工作经验要求;data2['岗位名']为Y轴的数据,表示对应的岗位数量,color='skyblue'则为柱形图选择了明亮的颜色,增强了视觉效果。为了使图表更加清晰,代码中加入了X轴和Y轴的标签,分别通过plt.xlabel('工作经验')和plt.ylabel('岗位数量')进行设置,同时使用plt.title('工作经验与岗位数量分布')为图表添加了标题。plt.xticks(rotation=45)将X轴的标签倾斜45度,以防止文字重叠并提高可读性。通过这些步骤,程序成功绘制了展示不同工作经验要求下岗位数量分布的柱形图,为分析招聘市场对工作经验的需求提供了直观的视角。如下图。
5.4岗位数量和平均薪资组合柱形图实现
岗位数量和平均薪资的组合柱形图实现过程主要包括数据准备、图形创建和多Y轴的绘制。通过合并岗位数量和平均薪资数据,使用pd.merge函数将两个数据框结合,具体实现为combined_data = pd.merge(data3, data33, on='行业')。此操作将行业的岗位数量与平均薪资整合到一个数据框中,便于后续分析和可视化。接下来,使用Matplotlib库进行图形绘制,通过fig, ax1 = plt.subplots(figsize=(12, 6))创建一个图形和一个坐标轴,并设置图形大小,以增强视觉效果。绘制岗位数量的柱形图,代码ax1.bar(top_industries['行业'], top_industries['岗位数量'], color='tab:blue', alpha=0.6, label='岗位数量')将行业名称作为X轴,岗位数量作为Y轴,设置了柱子的颜色和透明度。为了更好地展示平均薪资,创建一个共享同一X轴的第二个Y轴,使用ax2 = ax1.twinx()实现。然后,使用ax2.plot(top_industries['行业'], top_industries['平均薪资'], color='tab:orange', marker='o', label='平均薪资')绘制描述平均薪资的折线图,设置了独特的颜色和标记样式,使得两种数据能够清晰区分。通过设置图表标题plt.title('行业岗位数量与平均薪资前十的组合柱形图')和显示图形plt.show(),将组合图展示给用户,使其能够直观地理解各行业在岗位数量和平均薪资方面的关系,从而为招聘决策提供数据支持。如下图。
5.5公司规模数量占比及公司规模平均薪资组合图实现
公司规模数量占比及公司规模平均薪资的组合图通过一系列步骤实现,主要利用Matplotlib库来展示数据。首先,数据准备阶段使用pd.merge将公司规模的岗位数量和对应的平均薪资合并到一个新的数据框中,代码实现为combined_data = pd.merge(data4, data44, on='公司规模')。这个操作确保每个公司规模的类别都有相应的岗位数量和平均薪资信息,方便后续的可视化。图形的绘制分为两个部分:环形图和柱形图。首先,通过fig, ax1 = plt.subplots(1, 2, figsize=(14, 6))创建一个包含两个子图的画布,设置图形大小,以便清晰展示信息。在第一个子图中,使用ax1[0].pie(combined_data['岗位数量'], labels=combined_data['公司规模'], autopct='%1.1f%%', startangle=90, colors=plt.cm.tab20.colors)绘制公司规模数量的占比环形图。此处,autopct='%1.1f%%'用于显示每个扇区的百分比,startangle=90则调整图形的起始角度,使得图形更加美观。
在第二个子图中,使用ax1[1].bar(combined_data['公司规模'], combined_data['平均薪资'], color='skyblue')绘制公司规模的平均薪资柱形图,X轴为公司规模,Y轴为平均薪资,颜色设置为明亮的天蓝色以增强视觉吸引力。此外,添加适当的标签和标题,通过ax1[1].set_xlabel('公司规模')和ax1[1].set_ylabel('平均薪资')进行X轴和Y轴的标注,确保用户可以轻松理解轴的含义。最后,通过plt.tight_layout()进行布局调整,确保图形元素不重叠,最终使用plt.show()展示组合图,使得信息清晰地呈现在用户面前,为分析公司规模与招聘市场的动态提供有力的可视化支持。如下图。
5.6公司融资情况岗位数量及公司平均薪资对比实现
公司融资情况的岗位数量及公司平均薪资对比图通过几个关键步骤实现,主要利用Matplotlib库的双Y轴功能来展示数据。数据准备阶段使用pd.merge将公司融资情况的岗位数量与平均薪资合并,具体实现为combined_data = pd.merge(data5, data55, on='公司融资情况')。这一步确保了每个融资情况类别都包含了相应的岗位数量和平均薪资,形成了便于可视化的数据框。
绘图部分的实现首先通过fig, ax1 = plt.subplots(figsize=(10, 6))创建一个新的图形和坐标轴,设置图形的大小以便于信息的清晰展示。然后,使用ax1.bar(combined_data['公司融资情况'], combined_data['岗位数量'], color='skyblue', label='岗位数量')绘制公司融资情况的岗位数量柱形图,其中X轴表示公司融资情况,Y轴表示岗位数量,柱子的颜色为天蓝色,便于视觉识别。
为了同时展示平均薪资,使用ax2 = ax1.twinx()创建一个共享同一X轴的第二个Y轴。然后,利用ax2.plot(combined_data['公司融资情况'], combined_data['平均薪资'], color='orange', marker='o', label='平均薪资')绘制公司平均薪资的折线图,设置独特的颜色和标记,以便于与柱形图区分。通过ax1.set_ylabel('岗位数量', color='skyblue')和ax2.set_ylabel('平均薪资', color='orange')设置两个Y轴的标签,确保用户可以明确理解两个数据系列的含义。最后,使用plt.title('公司融资情况岗位数量及公司平均薪资对比')为图表添加标题,并通过plt.tight_layout()调整布局,确保信息展示不重叠,最终使用plt.show()展示图形。这种组合图形有效地展示了不同融资情况对岗位数量和平均薪资的影响,为分析招聘市场的动态提供了重要的可视化支持。如下图。
6 总结与展望
6.1总结
基于Python的猎聘网招聘数据采集与可视化分析项目,充分展示了数据科学在现代招聘市场中的应用潜力。通过有效的数据采集手段,利用Requests库从猎聘网的API中提取大量的招聘信息,程序实现了自动化的数据收集,极大地提高了效率。在数据处理阶段,借助Pandas库对原始数据进行了清洗和分析,确保了数据的准确性和一致性。分析过程中,统计了岗位数量、薪资水平、公司规模和融资情况等因素,提供了对招聘市场的深入见解。
可视化方面,Matplotlib和Seaborn等库使得数据的展示更加直观和生动。通过饼图、柱形图和组合图等多种形式,项目成功展示了学历分布、工作经验要求、行业趋势以及公司融资情况对招聘市场的影响。这些结果不仅为求职者提供了丰富的信息,也为企业在制定招聘策略时提供了有力的数据支持。总体来说,该项目有效地将数据采集、处理和可视化结合在一起,展示了数据分析在招聘领域的实际应用价值。
6.2展望
展望未来,基于Python的猎聘网招聘数据采集与可视化分析项目可以进一步拓展多个方向。
可以考虑引入机器学习算法,对招聘市场数据进行更深入的分析与预测,例如利用历史数据预测未来的招聘趋势或薪资变动。这将有助于企业更好地规划招聘策略,优化人才配置。
增强数据采集的灵活性和全面性也是一个重要方向。未来可以考虑结合更多的数据源,例如其他招聘网站、社交媒体以及行业报告,从而获取更全面的招聘市场视角。此外,提升数据处理的自动化程度,利用定时任务和数据管道技术使数据更新更加实时化,将极大增强分析的时效性。
在可视化方面,可以探索更多交互式图表和仪表板的实现,例如使用Plotly或Dash等库,构建实时数据展示平台,使用户能够更方便地进行数据查询和分析。这些改进和扩展将增强项目的实用性和应用范围,为招聘市场的研究与分析提供更强有力的支持。