基于python的招聘数据采集与可视化分析,可视化用pyechart

1 设计背景

1.1项目简介

近年来,随着经济的快速发展和信息技术的普及,人才市场的信息化水平不断提高。广西作为中国经济快速发展的省份之一,其劳动力市场的动态变化对区域经济发展和产业升级具有重要影响。理解和掌握广西地区的招聘信息,不仅能够帮助企业制定更有效的招聘策略,还能指导求职者更好地进行职业规划。然而,传统的人才市场数据收集与分析方式往往存在信息滞后、获取不便和处理效率低的问题。

互联网的普及和在线招聘平台的发展,使得大量的招聘信息可以通过网络进行传播和获取。广西人才网作为该地区重要的招聘信息平台,汇集了大量的职位信息,涵盖了不同行业、岗位和区域。通过对这些数据的分析,能够揭示出广西人才市场的供需关系、行业发展趋势、薪资水平等关键指标。

在这一背景下,利用现代数据分析工具对广西人才网的招聘数据进行系统性采集和分析,可以为企业和求职者提供及时、准确的市场洞察。同时,数据的可视化分析不仅有助于更直观地理解市场动态,还能够支持政府和研究机构进行劳动力市场的政策制定和研究。这种基于数据驱动的方法,正逐渐成为人才市场分析的重要趋势,为区域经济发展提供了新的视角和支持。

1.2课题目标

本项目的研究目标是利用Python技术对广西人才网的招聘数据进行全面采集与深入分析,以揭示广西地区人才市场的动态特征,并提供有价值的见解和决策支持。具体目标包括以下几个方面:

数据采集与整合:通过爬虫定期从广西人才网获取最新的招聘信息,确保数据的实时性和准确性。对采集到的原始数据进行清洗和整合,以形成结构化的数据集,为后续分析奠定基础。

市场趋势分析:利用采集的数据,分析广西地区的就业市场趋势,包括热门行业、职位需求变化、区域性就业特点等,从而帮助企业洞察市场动态,调整招聘策略。

薪资水平研究:对不同职位、行业和地区的薪资数据进行对比分析,了解广西地区的薪资结构和发展趋势。这将为求职者提供参考,帮助他们在职业选择和薪资谈判中做出更加明智的决策。

可视化呈现:通过直观的图表展示分析结果,使复杂的数据信息更易于理解和分享。利用可视化技术,不仅能帮助用户快速获取关键信息,还能增强数据报告的影响力和说服力。

2 设计思路

2.2技术架构

项目的技术架构分为数据采集、数据处理和数据可视化三个主要部分。

  1. 数据采集:主要利用Python的requests库来实现。这一过程涉及构建自动化脚本,以定期从广西人才网获取最新的招聘信息。requests库能够方便地处理HTTP请求,通过GET方法从网站服务器获取网页HTML内容。为了确保数据的有效性和全面性,可以设置定期请求和动态参数,模拟用户访问行为。获取到的HTML数据需要进一步解析,这里我们使用api接口,它能够有效地解析岗位数据,并通过接送提取招聘信息,如职位名称、公司、地点、薪资等关键信息。

  2. 数据处理:在完成数据采集后,数据处理环节利用pandas库来对数据进行整理和分析。首先,将采集到的原始数据转换为pandas数据框格式,以便于后续的处理操作。在数据清洗阶段,需要处理缺失值、重复数据和不一致的数据格式,这可以通过pandas的内置函数如dropna()、drop_duplicates()和astype()来实现。接下来,利用pandas强大的数据分析能力,可以对不同维度的数据进行统计和分析。例如,可以对各行业的招聘数量进行聚合,分析区域之间的薪资水平差异,以及职位需求的变化趋势。这些分析结果为进一步的可视化提供了基础。

  3. 数据可视化:数据可视化是项目的最后阶段,借助pyecharts库实现。pyecharts提供了丰富的图表类型,包括柱状图、折线图、饼图等,适合用于展示多维度的数据分析结果。在本项目中,柱状图可以用于展示不同行业的招聘趋势,饼图则直观地显示行业占比,而地图适合展示区域性的薪资水平和招聘热度。pyecharts的交互功能允许用户通过鼠标悬停查看详细数据,增强了数据探索的可能性。此外,图表可以轻松嵌入到网页或报告中,便于分享和传播。

技术架构图如下2-1:

图2-1技术架构图

3 数据采集

本项目采集广西人才网网站招聘数据1830条存入csv。采集的网页信息如下图:

数据采集的实现过程主要依赖于使用Requests库向广西人才网的API发送请求,并处理返回的数据。具体的过程如下:

其核心在于利用Python的requests库发送HTTP请求,并使用POST方法获取指定关键词和条件的招聘数据。首先,代码设置了请求的URL和HTTP头部信息,模拟浏览器行为以通过反爬虫机制。请求头中包括了常见的用户代理信息让服务器认为请求来自真实用户。

在数据采集过程中,程序通过循环逐页请求数据,具体实现上设定了一个范围,从第一页到第六十一页,确保能够获取尽可能多的招聘信息。每次请求发送一个数据字典,其中包含了查询条件(如地区ID、关键词“计算机”、分页信息等),服务器返回的数据格式为JSON,通过调用.json()方法进行解析。

解析后的数据存储在response变量中,包含多个招聘信息条目。通过遍历response列表,程序提取各招聘信息的详细字段,包括学历要求、企业规模、行业类型、企业名称等。为防止数据缺失导致的错误,get方法提供默认值“未知”。

提取的数据按特定格式写入CSV文件中,使用Python的csv库进行操作。初始时通过写入表头创建CSV文件,随后每获取一条招聘信息即追加写入,确保数据的完整存储。该实现不仅自动化了数据采集过程,还使得最终的数据存储格式便于后续分析和处理。。主要代码如下图。

采集结果如下图:

4 数据处理

4.1数据读取和去重

具体实现如下:

使用 pandas 库的 read_csv 方法读取名为 广西人才网数据集.csv 的数据文件。使用 drop_duplicates 方法去除数据中的重复记录。结果如下图

4.2工资数据的处理与转换

使用 convert_salary 函数将工资数据统一转换为“万/年”的格式。通过正则表达式提取工资范围和月数(如有)。根据工资单位(如“万”、“K”、“元/天”、“元/月”)进行不同的转换逻辑。对于无法解析的数据,标记为“无法解析”。将转换后的工资数据存储在新的 DataFrame 列 薪资 中。过滤掉无法解析的薪资数据。进一步将薪资数据拆分为 薪资_min 和 薪资_max,并转换为浮点数,便于后续分析。

4.3 数据分组统计

分组的维度,比如学历、企业规模、行业等。在进行数据清洗和预处理之后,通过groupby方法按指定的列进行分组。比如,对于按学历进行分组,可以使用data.groupby('学历')。接下来,通过count()函数计算每个组的大小,即各类别在数据集中的出现次数。为了便于分析,结果通过sort_values方法按降序或升序排序,以识别数据中的趋势或模式。例如,data.groupby('学历').count().sort_values(ascending=False)可以统计并排序不同学历的人数分布。结果如下图:

4.4 福利数据的处理

将 positionWelfareNames 列中的福利信息进行清洗,去除多余字符,如方括号和引号。使用 collections.Counter 对不同福利出现的次数进行统计。结果如下图:

5 数据分析与可视化

5.1行业数据的柱形图实现

行业数据的柱形图是通过Pyecharts库中的Bar对象实现的。首先,代码通过get_year_l函数创建一个柱形图。在这个函数中,调用Bar类,并设置初始选项init_opts,指定主题为'dark',并设定图表的宽度和高度以及背景颜色。接着,使用add_xaxis方法设置X轴数据为行业名称列表,通过add_yaxis方法添加Y轴数据,即每个行业的职位数量,同时设置标签样式以在柱子顶部显示数量。为了美观,使用set_series_opts和set_global_opts方法进行样式设定,比如隐藏X轴,调整Y轴标签样式和设置图表标题。此外,图表通过reversal_axis方法将X轴和Y轴进行反转,使得柱形图水平展示。最终,使用render方法将生成的柱形图保存为HTML文件,命名为“行业分析柱形图.html”。整体过程利用Pyecharts的灵活性和强大的可视化能力,将行业数据直观地呈现出来,帮助分析人员快速理解数据的分布情况。如下图

5.2各地区招聘数量的柱形图实现

各地区招聘数量的柱形图是通过使用Pyecharts库中的Bar对象来实现的。首先,代码定义了一个变量b1,使用Bar类创建一个新的图表实例,并在init_opts中设置图表的主题为ThemeType.DARK,同时定义了图表的宽度、高度和背景颜色。接下来,通过add_xaxis方法将排序后的工作地点列表(df6_sorted['workPlace'].tolist()[:20])作为X轴数据,并使用add_yaxis方法将相应的招聘数量(df6_sorted['薪资'].tolist()[:20])作为Y轴数据。为增强视觉效果,代码利用set_series_opts设置了柱子的样式,包括柱子顶部的标签样式,使用红色字体显示招聘数量并格式化为{b}\n{c}以便更清晰地展示数据。同时,使用set_global_opts方法进行全局样式设置,如标题、图例的显示与否、X轴标签旋转角度等。此外,图表还增加了DataZoom组件,使得用户可以通过缩放进一步探索数据。最后,通过调用render方法,将生成的柱形图保存为一个HTML文件,命名为“各地区招聘数量分析.html”,便于在浏览器中查看和分享。这个图表直观地展示了不同地区的招聘数量分布,帮助用户识别哪些地区的招聘需求较高。如下图。

5.3不同薪资区间的饼图实现

同薪资区间的饼图是通过Pyecharts库中的Pie对象来实现的。数据处理部分将薪资范围分成若干个区间(如<3.6万/年,3.6万/年-6万/年等),并利用Pandas的cut函数对最高薪资进行区间划分,随后通过value_counts函数统计每个区间的数据点数量,结果存储在df_price中。饼图的实现是通过创建一个Pie对象。首先,调用Pie类,并在init_opts中设置主题为ThemeType.DARK,同时定义了图表的宽度、高度以及背景颜色。然后,使用add方法构建饼图,数据来源于listn,这是一组由区间名称和对应数量构成的列表。这里通过radius参数定义了环形饼图的内外半径,呈现出环状效果。在视觉效果上,代码通过itemstyle_opts设置了饼图的样式,包括阴影、透明度等,使得图表更加美观。此外,set_series_opts用于配置标签样式,特别是formatter参数用来定义标签的显示格式,显示每个区间的百分比。为了提升图表的可读性,set_global_opts方法设置了全局选项,包括图表标题的位置和样式,视觉映射组件visualmap_opts定义了不同值的颜色范围,并且隐藏了图例以减少干扰。最后,通过调用render方法,将生成的饼图保存为HTML文件,命名为“最高薪资分布.html”。这个饼图直观地展示了数据集中不同薪资区间的分布情况,帮助用户快速理解薪资水平的整体趋势和特征。如下图。

5.4不同学历的玫瑰图实现

不同学历的玫瑰图是通过Pyecharts库的Pie对象实现的,具体过程如下:数据经过处理以统计不同学历的数量分布,并整理为一个列表,其中每个元素由学历名称和对应数量构成。创建一个Pie对象实例,并在init_opts中设置主题为ThemeType.DARK,这样可以为图表应用深色主题。使用add方法将数据添加到玫瑰图中,指定radius参数以定义图表的半径,同时设置rosetype='radius'以启用南丁格尔玫瑰图样式,这种样式使得扇区半径随数值大小而变化,直观地反映出不同学历的比例差异。在数据展示方面,通过set_series_opts配置标签样式,特别是使用formatter参数格式化标签显示,以“{b}: {d}%”的格式呈现学历名称及其所占的百分比。为了增强图表的美观性和可读性,set_global_opts方法被用来设置标题和其他全局选项。此外,可以隐藏图例以减轻视觉干扰。最后,调用render方法将图表渲染为HTML文件,命名为“不同学历分布.html”,便于在浏览器中查看和分享。这个玫瑰图形象地展示了数据集中不同学历的分布,让用户一目了然地了解各学历层次的需求情况。如下图。

5.5公司规模的漏斗图实现

公司规模的漏斗图是通过使用Pyecharts库中的Funnel对象来实现的。需要对数据进行处理,统计每个公司规模类别的数量,并将结果存储在一个列表中,其中每个元素由公司规模类别名称及对应的数量构成。创建一个Funnel对象实例,并在init_opts中设置主题为ThemeType.DARK,从而应用深色主题以增强视觉对比。接着,使用add方法将数据添加到漏斗图中,定义图表的显示顺序为降序或升序,通常通过sort_参数设置为'ascending'或'descending'。在数据展示方面,通过set_series_opts配置标签样式,可以使用formatter参数来格式化标签显示,以“{b}: {c}”的格式呈现公司规模类别及其对应的数量。为了提升图表的整体美观性和可读性,可以通过set_global_opts设置全局选项,包括标题的文本和位置、图例的显示与位置等。此外,可以调整漏斗图的宽度和高度以适应具体的数据显示需求。最后,通过调用render方法,将生成的漏斗图保存为HTML文件,命名为“公司规模分布.html”,以便于在浏览器中查看和分享。这个漏斗图直观地展示了不同公司规模的数量分布,帮助用户快速理解数据集中各公司规模的分布情况和相对比例。如下图。

5.6企业性质和工作经验的饼图实现

企业性质和工作经验的饼图通过Pyecharts库的Pie对象分别进行创建,旨在可视化这两个维度的数据分布。对数据进行预处理,以统计每种企业性质和每种工作经验的数量,结果分别存储在两个列表中,每个列表的元素由类别名称和对应的数量构成。为每组数据创建一个Pie对象实例,并在init_opts中设置主题为ThemeType.DARK,使图表呈现深色主题以增强对比度和视觉效果。使用add方法,将企业性质或工作经验的数据添加到各自的饼图中,同时定义radius参数以确定饼图的大小和样式。为了有效地展示数据,set_series_opts被用来配置标签的样式和格式,通过formatter参数格式化标签,以“{b}: {d}%”的格式显示类别名称及其所占的百分比,这样可以帮助观众清晰地理解数据的比例分布。通过set_global_opts设置全局选项,如标题文本及其位置、图例的显示和位置等,以提升图表的整体可读性和美观性。此外,图表的布局和样式可以根据需要进行细微调整,以确保在不同设备上都有良好的显示效果。分别调用render方法,将各自的饼图保存为HTML文件,命名为“企业性质分布.html”和“工作经验分布.html”,以便在浏览器中查看和分享。这些饼图直观地展示了不同企业性质和工作经验的分布情况,帮助用户快速了解数据的整体特征和趋势。如下图。

5.7福利数据词云图实现

福利数据的词云图通过使用stylecloud库生成。首先,从数据集中提取每个职位福利信息,如额外福利、奖金等,并对这些文本数据进行处理,将其整理为一串用空格分隔的字符串,以便后续生成词云。使用stylecloud.gen_stylecloud函数创建词云图,该函数接收多个参数,包括要生成词云的文本、字体路径、颜色调色板、最大字体大小、图标形状和背景颜色等。图标选择了日元符号形状,以增强视觉吸引力,并指定了输出文件的名称为“福利.jpg”。整个过程通过将频繁出现的福利以更大的字体展示,使读者能够快速识别和理解数据中常见的福利特征。这种可视化方法直观地呈现了数据中的重要信息,有助于分析和传达企业的福利状况。如下图。添加图片注释,不超过 140 字(可选)

作者:python编程狮

物联沃分享整理
物联沃-IOTWORD物联网 » 基于python的招聘数据采集与可视化分析,可视化用pyechart

发表回复