进一步分析51job上宁波财务和IT的数据的招聘数据

本文分析了51job上宁波地区的财务和IT职位的招聘数据,通过pyecharts展示了需求比例,并绘制了平均工资热力图。结果显示,虽然市中心的鄞州区招聘需求高,但平均薪资在不发达区域较高,揭示了区域差异现象。作者计划下次获取更精确的地址数据以完善热力图。
摘要由CSDN通过智能技术生成

进一步分析51job上宁波财务和IT的数据的招聘数据

进一步分析上次爬的数据后发现上次应该把地址爬下来,现在的数据只能做个简单的热力图,不过也懒得重新去爬了。将就用吧。

一、看看财务和IT的需求比例

在这里插入图片描述
用pyecharts实现的,发现这个画的图很漂亮。
代码和官网的demo很像,基本没怎么改。

# -- coding:utf-8 --
import pymongo
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.charts import Map

conn = pymongo.MongoClient('127.0.0.1',port=27017)
db = conn['51job']['51job宁波财务']
db2= conn['51job']['51job宁波IT']
df=list(db.find())+list(db2.find())
df=pd.DataFrame(list(df))
df.drop("公司名",axis=1,inplace=True)
df.drop("职位名",axis=1,inplace=True)
df.drop("_id",axis=1,inplace=True)

#画饼图
def pie_rich_label() -> Pie:
    # cw=df['分类'].value_counts()
    cw = df['分类'].loc[df['分类'] == '财务'].value_counts()[0]
    it = df['分类'].loc[df['分类'] == 'IT'].value_counts()[0]
    c = (
        Pie()
        .add(
            "",
            [('财务',int(cw)),('IT',int(it))],
            # 饼图的半径,数组的第一项是内半径,第二项是外半径
            # 默认设置成百分比,相对于容器高宽中较小的一项的一半
            radius=["20%", "55%"],
            # 标签配置项
            label_opts=opts.LabelOpts(
                position="outside",
                formatter="{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",
                background_color="#eee",
                border_color="#aaa",
                border_width=1,
                border_radius=4,
                rich={
                    "hr": {"borderColor": "#aaa","width": "100%","borderWidth": 0.5,"height": 0,},
                    "b": {"fontSize": 16, "lineHeight": 33},
                    "per": {"color": "#eee","backgroundColor": "#334455","padding": [2, 4],"borderRadius": 2,},
                },
            ),
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="宁波财务和IT需求比例"))
    )
    return c
pie_rich_label().render(path='宁波财务和IT需求比例.html')

二、看看IT和财务的平均工资热力图

在这里插入图片描述
在这里插入图片描述
不管是IT还是财务,平均工资居然还是两头的不发达区工资高,而位于市中心的地区平均工资低,难以想象。

三、再看看各区招聘需求

在这里插入图片描述
在这里插入图片描述
果然还是中心地区需求高,特别是鄞州区,独占了宁波南部商务区,东部新城,高新区等几个新区。看上去果然活力满满啊。
特地回去看看了下周边地区平均工资高的原因。恩,举个例子,我和马云平均年薪好几亿,但上海市人民平均年薪只有几十万。
看来有机会还是要去鄞州区啊。
最后放个代码


df['薪资范围'],df['年月'] = df['薪资'].str.split('/',n=1).str
df.drop("薪资",axis=1,inplace=True)#删除原有的列
df['最低薪资'],df['最高薪资0'] = df['薪资范围'].str.split('-',n=1).str
df.drop("薪资范围",axis=1,inplace=True)
df['单位'] = df['最高薪资0'].str.extract(r'([\u4E00-\u9FA5])')
df['最高薪资'] = df['最高薪资0'].str.extract(r'(\d+.\d+|\d+)')
df.drop("最高薪资0",axis=1,inplace=True)
df.单位[df['单位']=='千']=1000
df.单位[df['单位']=='万']=10000
df.年月[df['年月']=='年']=12
df.年月[df['年月']=='月']=1
#删除‘最低薪资’列,值为‘薪资’的所有行
df = df[(True^df['最低薪资'].isin(['薪资']))]
df = df[(True^df['最高薪资'].isin(['薪资']))]
#删除所有包含空值的行
df = df.dropna()
df['最低薪资']=df['最低薪资'].astype(float)
df['最高薪资']=df['最高薪资'].astype(float)
df['单位']=df['单位'].astype(float)
df['年月']=df['年月'].astype(float)
df['最低薪资(元)']=(df['最低薪资']*df['单位']/df['年月']).round(0)
df['最高薪资(元)']=(df['最高薪资']*df['单位']/df['年月']).round(0)
df.drop("最高薪资",axis=1,inplace=True)
df.drop("最低薪资",axis=1,inplace=True)
df.drop("单位",axis=1,inplace=True)
df.drop("年月",axis=1,inplace=True)
df['最低薪资(元)'] = df['最低薪资(元)'].loc[ df['最低薪资(元)'] < 50000]
df['最高薪资(元)'] = df['最高薪资(元)'].loc[ df['最高薪资(元)'] < 50000]
df = df.dropna()
df['工作地点0'],df['工作地点'] = df['工作地点'].str.split('-',n=1).str
df.drop("工作地点0",axis=1,inplace=True)
dfdz = df.dropna()
#排除某一列
dfdz.replace('高新区','鄞州区',inplace=True)
dfcw = dfdz[(True^dfdz['分类'].isin(['IT']))]
dfit = dfdz[(True^dfdz['分类'].isin(['财务']))]
#global ningbo_city,aa,bb,cc,dd
ningbo_city = ["慈溪市", "余姚市", "镇海区", "海曙区", "江北区", "鄞州区", "北仑区", "奉化区", "象山县", "宁海县"]
aa=[]
bb=[]
cc=[]
dd=[]
for i in ningbo_city:
    A = [dfcw[(dfcw['工作地点']==i)].mean()[0].round(0)]
    if A is None:
        aa =aa+''
    else: aa = aa+A
    B = [dfit[(dfit['工作地点']==i)].mean()[0].round(0)]
    if B is None:
        bb=bb+''
    else: bb = bb+B
    C = list(dfcw['工作地点'].loc[dfcw['工作地点']==i].value_counts())
    if C==[]:
        cc=cc+[0]
    else: cc = cc+C
    D = list(dfit['工作地点'].loc[dfit['工作地点']==i].value_counts())
    if D==[]:
        dd=dd+[0]
    else:dd = dd+D

def map_aa() -> Map:
    c = (
        Map()
        .add("财务", [list(z) for z in zip(ningbo_city, aa)], "宁波")
        .set_global_opts(
            title_opts=opts.TitleOpts(title="宁波地图财务平均薪资"),
            visualmap_opts=opts.VisualMapOpts(max_=max(aa),min_=min(aa)),
        )
    )
    return c
map_aa().render(path='宁波地图财务平均薪资.html')

def map_bb() -> Map:
    c = (
        Map()
        .add("IT", [list(z) for z in zip(ningbo_city, bb)], "宁波")
        .set_global_opts(
            title_opts=opts.TitleOpts(title="宁波地图IT平均薪资"),
            visualmap_opts=opts.VisualMapOpts(max_=max(bb),min_=min(bb)),
        )
    )
    return c
map_bb().render(path='宁波地图IT平均薪资.html')

def map_cc() -> Map:
    c = (
        Map()
        .add("财务", [list(z) for z in zip(ningbo_city, cc)], "宁波")
        .set_global_opts(
            title_opts=opts.TitleOpts(title="宁波地图财务平均需求"),
            visualmap_opts=opts.VisualMapOpts(max_=max(cc),min_=min(cc)),
        )
    )
    return c
map_cc().render(path='宁波地图财务平均需求.html')

def map_dd() -> Map:
    c = (
        Map()
        .add("IT", [list(z) for z in zip(ningbo_city, dd)], "宁波")
        .set_global_opts(
            title_opts=opts.TitleOpts(title="宁波地图IT平均需求"),
            visualmap_opts=opts.VisualMapOpts(max_=max(dd),min_=min(dd)),
        )
    )
    return c
map_dd().render(path='宁波地图IT平均需求.html')

下次要把准确地址爬下来,做个真正的热力图。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值