• python数据分析小案例:把招聘数据做可视化处理~


    前言

    大家早好、午好、晚好吖~

    在前一章:python在线采集聘用数据,这不得学会找份新工作~

    我们讲了如何采集zhaopin网站数据,现在~我们来对数据进行可视化操作

    下面,我们直接上代码~

    目录(可点击自己想去得地方哦~😋)

    代码提供者:青灯教育-自游老师

    代码

    import pandas as pd
    from pyecharts.charts import *
    from pyecharts import options as opts
    import re
    from pyecharts.globals import ThemeType
    from pyecharts.commons.utils import JsCode
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 读取数据
    df = pd.read_csv("招聘数据.csv")
    df.head()
    
    • 1
    • 2
    • 3
    df.info()
    
    • 1
    df['薪资'].unique()
    df['bottom']=df['薪资'].str.extract('^(\d+).*')
    df['top']=df['薪资'].str.extract('^.*?-(\d+).*')
    df['top'].fillna(df['bottom'],inplace=True)
    
    df['commision_pct']=df['薪资'].str.extract('^.*?·(\d{2})薪')
    df['commision_pct'].fillna(12,inplace=True)
    df['commision_pct']=df['commision_pct'].astype('float64')
    df['commision_pct']=df['commision_pct']/12
    
    df.dropna(inplace=True)
    
    df['bottom'] = df['bottom'].astype('int64')
    df['top'] = df['top'].astype('int64')
    df['平均薪资'] = (df['bottom']+df['top'])/2*df['commision_pct']
    df['平均薪资'] = df['平均薪资'].astype('int64')
    
    df.head()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    df['薪资'] = df['薪资'].apply(lambda x:re.sub('.*千/月', '0.3-0.7万/月', x))
    df["薪资"].unique()
    
    • 1
    • 2
    df['bottom'] = df['薪资'].str.extract('^(.*?)-.*?')
    df['top'] = df['薪资'].str.extract('^.*?-(\d\.\d|\d)')
    df.dropna(inplace=True)
    df['bottom'] = df['bottom'].astype('float64')
    df['top'] = df['top'].astype('float64')
    df['平均薪资'] = (df['bottom']+df['top'])/2 * 10
    df.head()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    完整可视化代码可加Q裙:832157862

    mean = df.groupby('学历')['平均薪资'].mean().sort_values()
    x = mean.index.tolist()
    y = mean.values.tolist()
    c = (
        Bar()
        .add_xaxis(x)
        .add_yaxis(
            "学历",
            y
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="不同学历的平均薪资"),datazoom_opts=opts.DataZoomOpts())
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    )
    c.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
     完整可视化代码可加Q裙:832157862
    color_js = """new echarts.graphic.LinearGradient(0, 1, 0, 0,
        [{offset: 0, color: '#63e6be'}, {offset: 1, color: '#0b7285'}], false)"""
    
    color_js1 = """new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                offset: 0,
                                color: '#ed1941'
                            }, {
                                offset: 1,
                                color: '#009ad6'
                            }], false)"""
    
    dq = df.groupby('城市')['职位'].count().to_frame('数量').sort_values(by='数量',ascending=False).reset_index()
    x_data = dq['城市'].values.tolist()[:20]
    y_data = dq['数量'].values.tolist()[:20]
    b1 = (
            Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK,bg_color=JsCode(color_js1),width='1000px',height='600px'))
            .add_xaxis(x_data)
            .add_yaxis('',
                       y_data ,
                       category_gap="50%",
                       label_opts=opts.LabelOpts(
                            font_size=12,
                            color='yellow',
                            font_weight='bold', 
                            font_family='monospace',
                            position='insideTop',  
                            formatter = '{b}\n{c}'  
                        ),
                      )
            .set_series_opts(
                itemstyle_opts={
                    "normal": {
                        "color": JsCode(color_js),
                        "barBorderRadius": [15, 15, 0, 0],
                        "shadowColor": "rgb(0, 160, 221)",
                    }
                }
            )
            .set_global_opts(
                title_opts=opts.TitleOpts(title='招 聘 数 量 前 20 的 城 市 区 域',
                                           title_textstyle_opts=opts.TextStyleOpts(color="yellow"),
                                           pos_top='7%',pos_left = 'center'
                                         ),
                legend_opts=opts.LegendOpts(is_show=False),
                xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
                yaxis_opts=opts.AxisOpts(name="",
                                         name_location='middle',
                                         name_gap=40,
                                         name_textstyle_opts=opts.TextStyleOpts(font_size=16)),
                             datazoom_opts=[opts.DataZoomOpts(range_start=1,range_end=50)]
                            )
    
        )
    b1.render_notebook()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
     完整可视化代码可加Q裙:832157862
    boss = df['学历'].value_counts()
    x = boss.index.tolist()
    y = boss.values.tolist()
    data_pair = [list(z) for z in zip(x, y)]
    c = (
        Pie(init_opts=opts.InitOpts(width="1000px", height="600px", bg_color="#2c343c"))
        .add(
            series_name="学历需求占比",
            data_pair=data_pair,
            label_opts=opts.LabelOpts(is_show=False, position="center", color="rgba(255, 255, 255, 0.3)"),
        )
        .set_series_opts(
            tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="{a} 
    {b}: {c} ({d}%)"
    ), label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"), ) .set_global_opts( title_opts=opts.TitleOpts( title="学历需求占比", pos_left="center", pos_top="20", title_textstyle_opts=opts.TextStyleOpts(color="#fff"), ), legend_opts=opts.LegendOpts(is_show=False), ) .set_colors(["#D53A35", "#334B5C", "#61A0A8", "#D48265", "#749F83"]) ) c.render_notebook()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
     完整可视化代码可加Q裙:832157862
    boss = df['经验'].value_counts()
    x = boss.index.tolist()
    y = boss.values.tolist()
    data_pair = [list(z) for z in zip(x, y)]
    c = (
        Pie(init_opts=opts.InitOpts(width="1000px", height="600px", bg_color="#2c343c"))
        .add(
            series_name="经验需求占比",
            data_pair=data_pair,
            label_opts=opts.LabelOpts(is_show=False, position="center", color="rgba(255, 255, 255, 0.3)"),
        )
        .set_series_opts(
            tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="{a} 
    {b}: {c} ({d}%)"
    ), label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"), ) .set_global_opts( title_opts=opts.TitleOpts( title="经验需求占比", pos_left="center", pos_top="20", title_textstyle_opts=opts.TextStyleOpts(color="#fff"), ), legend_opts=opts.LegendOpts(is_show=False), ) .set_colors(["#D53A35", "#334B5C", "#61A0A8", "#D48265", "#749F83"]) ) c.render_notebook()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
     完整可视化代码可加Q裙:832157862
    boss = df['公司领域'].value_counts()
    x = boss.index.tolist()
    y = boss.values.tolist()
    data_pair = [list(z) for z in zip(x, y)]
    c = (
        Pie(init_opts=opts.InitOpts(width="1000px", height="600px", bg_color="#2c343c"))
        .add(
            series_name="公司领域占比",
            data_pair=data_pair,
            label_opts=opts.LabelOpts(is_show=False, position="center", color="rgba(255, 255, 255, 0.3)"),
        )
        .set_series_opts(
            tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="{a} 
    {b}: {c} ({d}%)"
    ), label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"), ) .set_global_opts( title_opts=opts.TitleOpts( title="公司领域占比", pos_left="center", pos_top="20", title_textstyle_opts=opts.TextStyleOpts(color="#fff"), ), legend_opts=opts.LegendOpts(is_show=False), ) .set_colors(["#D53A35", "#334B5C", "#61A0A8", "#D48265", "#749F83"]) ) c.render_notebook()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    from pyecharts import options as opts
    from pyecharts.charts import Pie
    from pyecharts.faker import Faker
    boss = df['经验'].value_counts()
    x = boss.index.tolist()
    y = boss.values.tolist()
    data_pair = [list(z) for z in zip(x, y)]
    
    c = (
        Pie()
        .add("", data_pair)
        .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
        .set_global_opts(title_opts=opts.TitleOpts(title="经验要求占比"))
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    )
    c.render_notebook()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    完整可视化代码可查看并点击网页主页(文章)左侧的流动文字免费获取哦~(可能需要往下划一下呐)

    也可以直接查看文章下方推广加助理小姐姐V免费获取呐~

    效果(部分)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    尾语

    好了,我的这篇文章写到这里就结束啦!

    有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

    喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

    请添加图片描述

  • 相关阅读:
    buildSrc 定义插件(1)
    使用 Apache Commons Exec 管理外部进程
    Enviro 3 - Sky and Weather
    web安全最亲密的战友Burp Suite2--target模块体验
    性能测试VS负载测试VS压力测试
    ElasticSearch7.3学习(二十八)----聚合实战之电视案例
    线程常见的几种方法
    行业洞察 | 未来人形机器可能是最懂你的人
    程序设计与算法(三)C++面向对象程序设计笔记 第十周 C++11新特性和C++高级主题
    Java UML 类图
  • 原文地址:https://blog.csdn.net/weixin_62853513/article/details/125874540