国内数据分析师求职需求分析

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings 
from scipy.stats import norm,mode
import re
from wordcloud import WordCloud
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
warnings.filterwarnings('ignore')

读取csv,并且添加header

df=pd.read_csv(r'F:\data\boss.csv',header=None,names=['company','position','address','salary','requires','lables','tags'])
df.head(10)
image.png
df.shape
image.png

去重

df.duplicated().sum()
image.png
df.drop_duplicates(keep='first',inplace=True)
df.duplicated().sum()
image.png
df.shape
image.png

因为实习的薪资和全职计算不一样,所以去掉含有‘实习’的行,以方便统计

x=df['position'].str.contains('实习')
df=df[~x]
df.reset_index(drop=True,inplace=True)
df.shape
image.png

查看address字段是否需要清洗

df['address'].unique()
image.png

address可以使用,查看salary字段

df['salary'].unique()
image.png

将薪资列的值进行拆分,新增bottom,top两列,作为一个岗位薪资的最低值和最高值,单值的,用button填充top

df['bottom']=df['salary'].str.extract('^(\d+).*')
df['top']=df['salary'].str.extract('^.*?-(\d+).*')
df['top'].fillna(df['bottom'],inplace=True)
df.head(5)
image.png

有些公司标注1X薪等,故新增一列commission_pct计算每个岗位的奖金率

df['commision_pct']=df['salary'].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

把bottom,top,commission__pct列转换为数值,计算出每个岗位的平均薪资avg_salary

df['bottom'] = df['bottom'].astype('int64')
df['top'] = df['top'].astype('int64')
df['avg_salary'] = (df['bottom']+df['top'])/2*df['commision_pct']
df['avg_salary'] = df['avg_salary'].astype('int64')

cols=list(df)
cols.insert(4,cols.pop(cols.index('bottom')))
cols.insert(5,cols.pop(cols.index('top')))
cols.insert(6,cols.pop(cols.index('commision_pct')))
cols.insert(7,cols.pop(cols.index('avg_salary')))
df=df.loc[:,cols]
df.head(10)
image.png
df.describe()
image.png

去掉一些极端值,这里设置平均值为3k-70k

df=df[(df.avg_salary>3)&(df.avg_salary<70)]
df.describe()
image.png

观察requests

df.requires.unique()
image.png

将经验需求拆分出来放入experience字段,学历要求放入diploma字段

df['experience']=df['requires'].str.extract('^(\d+/?-\d+)')
df['diploma']=df['requires'].str[-2:]
df.head(10)
image.png

查看experience和diploma字段,替换null为'经验不限'

df['experience'].unique()
image.png
df['experience'].replace('1-3','1-3年',inplace=True)
df['experience'].replace('3-5','3-5年',inplace=True)
df['experience'].replace('5-10','5-10年',inplace=True)
df['experience'].replace(np.nan,'经验不限',inplace=True)
df['experience'].unique()
image.png
df['diploma'].unique()
image.png

观察lables列,对数量较少且为传统行业的数据归入其他行业

pd.set_option('max_row',100) 
df['lables'].value_counts()
image.png
df.loc[~df['lables'].isin(['互联网','计算机软件','移动互联网','电子商务','数据服务','信息安全','计算机服务','咨询','智能硬件','社交网络',
                           '互联网金融','游戏','在线教育','生活服务','O2O','医疗健康','贸易/进出口','物流/仓储 ','企业服务','银行','新零售']),'lables']='其他行业'
df['lables'].value_counts()
image.png

数据可视化和简单的分析

df.avg_salary.groupby(df['address']).agg(['mean','median']).plot.bar(figsize=(16,8))
image.png
fig=plt.figure(figsize=(12,6),dpi=80)
plt.hist(df['avg_salary'],bins=30,color='#f59311',alpha=0.3,edgecolor='k')
plt.ylabel('岗位数',fontsize=15)
plt.xlabel('薪资',fontsize=15)
plt.xticks(list(range(0,70,5)))
plt.show()
image.png

少部分人高工资,月薪一万至两万的岗位不在少数。然而四千至五千的岗位居然是最多的。

plt.figure(figsize=(16,16),dpi=80)
plt.subplot(121)
temp = df[df.avg_salary<10].groupby('address').avg_salary.count()
plt.pie(temp,labels=temp.index,autopct='% .2f%%')
plt.title('薪资小于10K各城市占比')
plt.subplot(122)
temp = df[df.avg_salary>10].groupby('address').avg_salary.count()
plt.pie(temp,labels=temp.index,autopct='% .2f%%')
plt.title('薪资大于10K各城市占比')
image.png

从以上饼图可以看到,各城市间薪资水平差异非常大,低薪岗位主要分布于江苏及中西部城市,北上杭深相对工资就高一些。

data1=df[df.address=='北京']['avg_salary']
data2=df[df.address=='上海']['avg_salary']
data3=df[df.address=='广州']['avg_salary']
data4=df[df.address=='深圳']['avg_salary']
data5=df[df.address=='杭州']['avg_salary']
plt.figure(figsize=(12,6),dpi=80)
plt.boxplot([data1,data2,data3,data4,data5],labels=['北京','上海','广州','深圳','杭州'], 
            flierprops={'marker':'o','markerfacecolor':'r','color':'k'},
            patch_artist=True,boxprops={'color':'k','facecolor':'#FFFACD'})
ax=plt.gca()
ax.patch.set_facecolor('#FFFAFA')
ax.patch.set_alpha(0.8)
plt.title('主要城市薪资水平箱线图',fontsize=15)
plt.ylabel('薪资(单位:k)',fontsize=12)
plt.show()
image.png

选取薪资水平较高的五个城市进行分析可以发现,北京的薪资水平是最高的,杭州上海深圳相对两级分化大一些。

d = df['avg_salary'].groupby(df['diploma'])
d_avg = d.mean()
c = list(d_avg.index)
v = list(range(1,len(c)+1))
w = d_avg.values.astype('int64')
x = d.median().values.astype('int64')
move = 0.4
plt.figure(figsize=(14,8),dpi=80)
plt.bar(v,w,width=move,color='#eed777')
plt.bar([i+move for i in v],x,width=move,color='#334f65')
a = np.arange(0,7)+1.2
plt.xticks(a,c)
plt.yticks(list(range(0,40,5)))
plt.legend(['均值','中位数'])
plt.title('各学历薪资均值及中位数比较图',fontsize=16)
plt.xlabel('学历',fontsize = 12)
plt.ylabel('薪资(单位K)',fontsize = 12)
for e,f in zip(v,w):
    plt.text(e,f,'{}k'.format(f),ha='center',fontsize=12)
for g,h in zip([i+move for i in v],x):
    plt.text(g,h,'{}k'.format(h),ha='center',fontsize=12)
plt.show()
image.png

从学历看是否是本科,对薪资水平的影响很大

本科与硕士之间并没有特别大的差距,博士的薪资水平远远高于其他学历。

data = df['diploma'].value_counts()
y=data.values
plt.figure(figsize=(10,10),dpi=80)
plt.pie(y,labels=data.index,autopct='%.1f %%')
plt.show()
image.png

从市场需求来看,要求本科占据绝大多数,要求硕士的较少,而博士则是极少数。

d = df['avg_salary'].groupby(df['experience'])
d_avg = d.mean()
c = list(d_avg.index)
v = list(range(1,len(c)+1))
w = d_avg.values.astype('int64')
x = d.median().values.astype('int64')
move = 0.4
plt.figure(figsize=(14,8),dpi=80)
plt.bar(v,w,width=move,color='#002c53')
plt.bar([i+move for i in v],x,width=move,color='#0c84c6')
a = np.arange(0,4)+1.2
plt.xticks(a,c)
plt.yticks(list(range(0,40,5)))
plt.legend(['均值','中位数'])
plt.title('各工作年限薪资均值及中位数比较图',fontsize=16)
plt.xlabel('工作经验',fontsize = 12)
plt.ylabel('薪资(单位K)',fontsize = 12)
for e,f in zip(v,w):
    plt.text(e,f,'{}k'.format(f),ha='center',fontsize=12)
for g,h in zip([i+move for i in v],x):
    plt.text(g,h,'{}k'.format(h),ha='center',fontsize=12)
plt.show()
image.png

应届生的工资还是比较低的,一旦有3年工作经验,工资水平将直线上升。

data = df['experience'].value_counts()
y=data.values
plt.figure(figsize=(10,10),dpi=80)
plt.pie(y,labels=data.index,autopct='%.1f %%')
plt.show()
image.png

市场上对于工作经验的要求还是很强烈,1-5年的经验要求占绝大多数,工作经验是入职成功与否的关键因素。

d = df['avg_salary'].groupby(df['lables'])
d_avg = d.mean()
c = list(d_avg.index)
v = list(range(1,len(c)+1))
w = d_avg.values.astype('int64')
x = d.median().values.astype('int64')
move = 0.4
plt.figure(figsize=(20,8),dpi=80)
plt.bar(v,w,width=move,color='#9de0ff')
plt.bar([i+move for i in v],x,width=move,color='#ffa897')
a = np.arange(0,19)+1.3
plt.xticks(a,c)
plt.yticks(list(range(0,40,5)))
plt.legend(['均值','中位数'])
plt.title('各行业薪资均值及中位数比较图',fontsize=16)
plt.xlabel('行业',fontsize = 12)
plt.ylabel('薪资(单位K)',fontsize = 12)
for e,f in zip(v,w):
    plt.text(e,f,'{}k'.format(f),ha='center',fontsize=12)
for g,h in zip([i+move for i in v],x):
    plt.text(g,h,'{}k'.format(h),ha='center',fontsize=12)
plt.show()
image.png
data = df['lables'].value_counts()
y=data.values
plt.figure(figsize=(10,10),dpi=80)
plt.pie(y,labels=data.index,autopct='%.1f %%')
plt.show()
image.png

上2图显示 互联网行业和电子商务对该岗位的需求非常大,同时薪资水平相比于其他行业也高了很多。而其他传统行业相对来说,无论是需求量还是薪资水平,都低一些。

from wordcloud import WordCloud
text = df['tags'].dropna().to_string()
# 绘制词云图
plt.figure(figsize=(10,8))
wordcloud = WordCloud(font_path = "simhei.ttf",
                      background_color = "white",
                      min_font_size = 10,
                      color_func = lambda *args, **kwargs:(0,0,0),
                      width = 900, height = 600).generate(text)
plt.imshow(wordcloud)
plt.axis("off")
image.png

发现有些意义不大的字段重复率高,去掉以后再看。

from wordcloud import WordCloud
text = df['tags'].dropna().to_string()
text=text.replace("数据分析师",'')
text=text.replace("数据分析工程师",'')
text=text.replace("数据分析员",'')
text=text.replace("数据分析",'')

# 绘制词云图
plt.figure(figsize=(10,8))
wordcloud = WordCloud(font_path = "simhei.ttf",
                      background_color = "white",
                      min_font_size = 10,
                      color_func = lambda *args, **kwargs:(0,0,0),
                      width = 900, height = 600).generate(text)
plt.imshow(wordcloud)
plt.axis("off")
image.png

此图显示各个企业对数据分析师职业技能需求的关键字。数据挖掘,商业分析,python,数据仓库,建模,SQL是最需要的技能。

通过以上简要分析,可以发现,如果要成功转行,应该往北上广深行这几个城市考虑,这些城市的薪资水平高。而行业方面应该着眼于互联网及电子商务等新兴行业,这些行业对该岗位的需求都比较大,而且薪资水平也普遍高。工作经验对于该岗位而言非常重要,能否成功转行的关键门槛在于是否有工作经验,与薪资水平呈正相关。而转行成功以后,只有在迈过3年这个坎,才会有比较大的突破。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容