進一步分析51job上寧波財務和IT的數據的招聘數據

進一步分析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')

下次要把準確地址爬下來,做個真正的熱力圖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章