Python 招聘岗位数据可视化

简介: Python 招聘岗位数据可视化

项目背景


最近朋友圈又有小伙伴被降薪、被裁员了。往年金三银四是找工作的好时机,但在今年疫情之下互联网似乎更冷了。为了更好的找到好工作,就要了解企业需要什么样的人才,地区之间人才需求数量,薪资、学历与经验之间的关系等等。本文以拉勾网  Python 岗位数据作为分析。


image.png


获取数据

获取数据比较简单,拉勾网是用 POST 提交 Ajax 请求数据。


image.png


部分爬取代码


def crawler(self):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
        'Host': 'www.lagou.com',
        'Referer': 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=',
        'Cookie': 'cookie',
        'X-Anit-Forge-Code': '0',
        'X-Anit-Forge-Token': 'None',
        'X-Requested-With': 'XMLHttpRequest'
    }
    page = 0
    totalCount = 1
    resultSize = 0
    while (page * resultSize) <= totalCount:
        page = page + 1
        url = "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false"
        datas = {
            'first': 'false',
            'pn': page,
            'kd': 'python'
        }
        if page == 1:
            datas['first'] = 'true'
        html = requests.post(url, headers=headers, data=datas)
        result = html.json()
        if page == 1:
            totalCount = result['content']['positionResult']['totalCount']
            resultSize = result['content']['positionResult']['resultSize']
        jobs = result['content']['positionResult']['result']
        for job in jobs:
            job_array = [job['positionName'], job['workYear'], job['salary'], job['city'], job['education'],
                            job['positionAdvantage'], "|".join(job['companyLabelList']),
                            job['financeStage'], job['companySize'], job['industryField'], job['firstType']]
            # 存入数据库
            self.cursor.execute(self.sql, tuple(job_array))
            self.conn.commit()
        r = random.randint(15, 30)
        time.sleep(r)


把抓取的数据存入 Mysql 数据库中


image.png


数据可视化

数据库中杂乱的数据必须经过分析才有意义,使用第三方的 pyecharts 模块 ( https://github.com/pyecharts/pyecharts ) 将招聘数据可视化。


安装 pyecharts


pip3 install pyecharts -U
# 全球国家地图pip3 install echarts-countries-pypkg# 中国省级地图pip3 install echarts-china-provinces-pypkg# 中国市级地图pip3 install echarts-china-cities-pypkg
# 缺少提示安装pip3 install pyecharts_snapshot


微信图片_20220212180435.jpg


image.png


在城市岗位热力图和柱状图中可以看出北上广超一线城市提供了大部分的工作岗位。二三线城市提供的岗位不是很多。


# 主要代码
sql = 'select city, count(1) counts from jobs group by city'
results = self.query(sql)
c = (
    Geo()
        .add_schema(maptype="china")
        .add(
        "城市热力图",
        list(results),
        type_=ChartType.HEATMAP,
    )
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
    ).render("拉钩城市热力图.html")
)
sql = 'select city,counts from (select city, count(1) counts from jobs group by city) a order by counts desc limit 20'
results = self.query(sql)
citys = []
values = []
for row in results:
    citys.append(row[0])
    values.append(row[1])
c = (
    Bar()
        .add_xaxis(citys)
        .add_yaxis("各城市的招聘数量 Top 20", values)
        .set_global_opts(
        xaxis_opts=opts.AxisOpts(name_rotate=60, name="城市", axislabel_opts={"rotate": 45})
    ).render("拉钩城市招聘图.html")
)


image.png


招聘岗位中本科学历的占比远大于大专、硕士和不限。1-5 年工作经验的本科人才能更快的找到工作,5-10年工作经验的岗位较少。


# 主要代码sql = 'select education,count(1) counts from jobs group by education'results = self.query(sql)c = (    Pie()        .add("", list(results))        .set_global_opts(title_opts=opts.TitleOpts(title='学历占比'))        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))        .render("拉勾学历.html"))
sql = 'select workYear,count(1) counts from jobs group by workYear'results = self.query(sql)c = (    Pie()        .add("", list(results))        .set_global_opts(title_opts=opts.TitleOpts(title='工作经验占比'))                            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c},{d}%"))                            .render("拉勾工作年限.html"))


年限与薪资


image.png


在上图表中可以看出工作经验与薪资是成正比的,其中 1-3 年工作经验薪资在 10K 到 25K之间,3-5年的在 10K 到 30K 之间, 5-10 年的在 15K 到 35K 之间。3-10 年工作经验的最高薪资可以达到 60K。


# 主要代码sql = 'SELECT workYear,replace(salary,\'k\',\'\') s FROM jobs group by workYear,salary order by workYear'results = self.query(sql)sum = {}for r in results:    rs = r[1].split('-')    a = sum.get(r[0], [])    a.extend(rs)    sum[r[0]] = a
for k in sum:    numbers = list(map(int, sum[k]))    v = list(set(numbers))    sum[k] = v
print(list(sum.values()))
c = Boxplot()c.add_xaxis(list(sum.keys()))c.add_yaxis("薪资与工作经验", c.prepare_data(list(sum.values())))c.set_global_opts(title_opts=opts.TitleOpts(title="薪资与工作经验"))c.render("拉勾薪资.html")


工作类型


image.png


移动互联网行业在招聘上占比大。数据服务、企业服务、金融、电商行业招聘人数较少。


# 主要代码sql = 'select industryField from jobs'results = self.query(sql)rows = []for row in results:    r = row[0].replace(',', ' ').replace('丨', ' ').replace('、', ' ')    rows.extend(r.split(' '))sum = {}for r in rows:    num = sum.get(r, 0) + 1    sum[r] = numtup = sorted(sum.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)sum = {}for k, v in tup[0:20]:    sum[k + str(v)] = vlocation = list(sum.keys())values = list(sum.values())
c = (    PictorialBar()        .add_xaxis(location)        .add_yaxis(        "",        values,        label_opts=opts.LabelOpts(is_show=False),        symbol_size=18,        symbol_repeat="fixed",        symbol_offset=[0, 0],        is_symbol_clip=True,        symbol=SymbolType.ROUND_RECT,    )        .reversal_axis()        .set_global_opts(        title_opts=opts.TitleOpts(title="热门行业"),        xaxis_opts=opts.AxisOpts(is_show=False),        yaxis_opts=opts.AxisOpts(            axistick_opts=opts.AxisTickOpts(is_show=False),            axisline_opts=opts.AxisLineOpts(                linestyle_opts=opts.LineStyleOpts(opacity=0)            ),        ),    )        .render("拉勾行业.html"))


企业融资


image.png


从融资上市来看上市融资的企业招聘岗位数量还是很多的,不需要融资的企业也占了 30% 的比例,未融资的企业只有 12% 左右。


results = self.query('select companySize,count(1) counts from jobs group by companySize')c = (    Pie()        .add("", list(results))        .set_global_opts(title_opts=opts.TitleOpts(title='企业大小'))                            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c},{d}%"))                            .render("拉勾企业大小.html"))


福利时间


image.png


带薪年假、绩效奖金、扁平管理、弹性工作等是多数企业能给员工的福利。


# 主要代码
sql = 'select positionAdvantage,companyLabelList from jobs'
results = self.query(sql)
data = {}
for row in results:
    # 去掉特殊符号
    positionStr = re.sub('\W+', ' ', row[0])
    labelStr = re.sub('\W+', ' ', row[1])
    a = positionStr.split(' ')
    b = labelStr.split(' ')
    a.extend(b)
    for i in a:
        data[i] = data.get(i, 0) + 1
    sum = []
    for k in data:
        sum.append((k,data[k]))
(
    WordCloud()
    .add(series_name="热点分析", data_pair=sum, word_size_range=[6, 66])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )
    .render("拉勾福利.html")
)


总结

招聘岗位相对来说还是较少的,本科以上、有工作经验的人才可以更快的找到工作。融资上市的企业招聘不在少数。

目录
相关文章
|
18天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
16天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
17天前
|
数据可视化 Python
使用Python进行数据可视化的初学者指南
在数据的海洋里,我们如何能够不迷失方向?通过数据可视化的力量,我们可以将复杂的数据集转化为易于理解的图形和图表。本文旨在为初学者提供一份简明的入门手册,介绍如何使用Python中的Matplotlib库来揭示数据背后的故事。我们将从基础的图表开始,逐步深入到更高级的可视化技术,确保每个步骤都清晰易懂,让初学者也能轻松上手。让我们开始绘制属于你自己的数据图谱吧!
|
28天前
|
机器学习/深度学习 人工智能 数据可视化
使用Python进行数据可视化:探索与实践
在数字时代的浪潮中,数据可视化成为了沟通复杂信息和洞察数据背后故事的重要工具。本文将引导读者通过Python这一强大的编程语言,利用其丰富的库函数,轻松入门并掌握数据可视化的基础技能。我们将从简单的图表创建开始,逐步深入到交互式图表的制作,最终实现复杂数据的动态呈现。无论你是数据分析新手,还是希望提升报告吸引力的专业人士,这篇文章都将是你的理想指南。
38 9
|
24天前
|
数据可视化 数据处理 Python
Python编程中的数据可视化技术
在Python编程中,数据可视化是一项强大的工具,它能够将复杂的数据集转化为易于理解的图形。本文将介绍如何使用matplotlib和pandas这两个流行的Python库来实现数据可视化,并展示一些实用的代码示例。通过这些示例,读者将学会如何创建各种图表,包括折线图、柱状图和散点图等,以便更好地理解和呈现数据。
|
1月前
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
96 19
|
29天前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
45 3
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1月前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
1月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
28 1
下一篇
DataWorks