51job中大数据分析师岗位情况分析(在Jupyter Notebook中处理)

第一步:载入库、搭建环境,载入并观察数据

In []
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
import warnings
warnings.filterwarnings(“ignore”)#取消警告内容
plt.rcParams[‘font.sans-serif’]=[‘SimHei’] #用来正常显示中文标签
plt.rcParams[‘axes.unicode_minus’]=False #用来正常显示负号

第二步:清洗数据

1.删除职位、薪酬NA值,并将薪酬单位规范统一为 N千/月

In []
data=pd.read_excel(“51joball.xlsx”,sheet_name=“Sheet1”,header=0)#载入数据,并观察概况
data.info()
#data.describe()
#data.head(5)

Out[]
<class ‘pandas.core.frame.DataFrame’>
RangeIndex: 9553 entries, 0 to 9552
Data columns (total 13 columns):
职位 9374 non-null object
公司 9378 non-null object
薪酬 9102 non-null object
地点 9378 non-null object
工作经验 9378 non-null object
学历 9378 non-null object
福利 7706 non-null object
职位信息 9420 non-null object
公司性质 9418 non-null object
公司规模 9238 non-null object
行业 9362 non-null object
获取网址 9553 non-null object
获取时间 9553 non-null datetime64[ns]
dtypes: datetime64ns, object(12)
memory usage: 970.3+ KB

In[]
data1=data.dropna(subset=[“职位”])#删除职位NA值
#data1.info()
data1=data1.dropna(subset=[“薪酬”])#删除薪酬NA值
data1.info()
data1[“薪酬”].head()#观察薪酬单位

Out[]
<class ‘pandas.core.frame.DataFrame’>
Int64Index: 9099 entries, 0 to 9551
Data columns (total 13 columns):
职位 9099 non-null object
公司 9099 non-null object
薪酬 9099 non-null object
地点 9099 non-null object
工作经验 9099 non-null object
学历 9099 non-null object
福利 7653 non-null object
职位信息 9099 non-null object
公司性质 9097 non-null object
公司规模 9034 non-null object
行业 9090 non-null object
获取网址 9099 non-null object
获取时间 9099 non-null datetime64[ns]
dtypes: datetime64ns, object(12)
memory usage: 995.2+ KB
0 2-3万/月
1 6-8千/月
2 1-1.5万/月
3 6-8千/月
4 0.8-1万/月
Name: 薪酬, dtype: object

对薪酬单位转化的函数

In[]
def word_cut(word,method):
pos=word.find("-")
pos1=word.find(“万/月”)
pos2=word.find(“万/年”)
pos3=word.find(“千/月”)
if pos1 !=-1:
low=float(word[:pos])*10
hig=float(word[pos+1:pos1])*10
elif pos2 !=-1:
low=float(word[:pos])*10/12
hig=float(word[pos+1:pos2])*10/12
elif pos3 !=-1:
low=float(word[:pos])
hig=float(word[pos+1:pos3])
else:
low=np.nan
hig=np.nan
if method==“low”:
return low
else:
return hig

data1[“low_salary”]=data1[“薪酬”].apply(word_cut,method=“low”)#用apply方法调用word_cut函数,新建最低薪酬
#data1[“low_salary”]
data1[“hig_salary”]=data1[“薪酬”].apply(word_cut,method=“hig”)#用apply方法调用word_cut函数,新建最高薪酬
#data1[“hig_salary”]
data1.head()
data2=data1.dropna(subset=[“low_salary”])#删除NA值
data2.info()

Out[]
<class ‘pandas.core.frame.DataFrame’>
Int64Index: 8990 entries, 0 to 9551
Data columns (total 15 columns):
职位 8990 non-null object
公司 8990 non-null object
薪酬 8990 non-null object
地点 8990 non-null object
工作经验 8990 non-null object
学历 8990 non-null object
福利 7579 non-null object
职位信息 8990 non-null object
公司性质 8988 non-null object
公司规模 8925 non-null object
行业 8981 non-null object
获取网址 8990 non-null object
获取时间 8990 non-null datetime64[ns]
low_salary 8990 non-null float64
hig_salary 8990 non-null float64
dtypes: datetime64ns, float64(2), object(12)
memory usage: 1.1+ MB

In[]
data2[“ava_salary”]=data2.apply(lambda x: (x.hig_salary+x.low_salary)/2,axis=1)#算出平均薪酬
data2[“ln_salary”]=data2.apply(lambda x:math.log(x.ava_salary),axis=1)#算出对数化后的平均薪酬
#data2.head()#观察结果

2.对工作地点进行规范

In[]
data2[“地点”].head()
data2[“city”]=data2.apply(lambda x: x.地点.split("-")[0],axis=1)
data2.head()

Out[]

3.按照职位数量将城市划分为N组

In[]
data2.city.value_counts()#观察每个城市的职位频数
Out[]
广州 1909
上海 1410
北京 1129
深圳 733
合肥 504
成都 399
杭州 376
武汉 268
南京 227
西安 144
苏州 127
长沙 113
重庆 111
佛山 104
南通 98
宁波 78
福州 78
郑州 78
昆明 75
东莞 71
天津 69
沈阳 67
济南 58
厦门 55
昆山 51
无锡 48
大连 47
珠海 35
青岛 33
南昌 32

泸州 1
泰州 1
包头 1
潮州 1
宿迁 1
盐城 1
十堰 1
扬州 1
宝鸡 1
海南省 1
三门峡 1
焦作 1
聊城 1
湖南省 1
钦州 1
九江 1
甘肃省 1
周口 1
淄博 1
保定 1
滁州 1
揭阳 1
鞍山 1
衢州 1
天门 1
池州 1
丹东 1
福建省 1
葫芦岛 1
吉林 1
Name: city, Length: 150, dtype: int64

In[]
for i in data2[“city”].index:
if data2.city[i] !="广州"and data2.city[i] !="上海"and data2.city[i] !="北京"and data2.city[i] !="深圳"and data2.city[i] !="合肥"and data2.city[i] !="成都"and data2.city[i] !="武汉"and data2.city[i] !="杭州"and data2.city[i] !=“南京”:
data2.city[i]=“其它”
else:
pass

data2.head()

Out[]

4.删除无关列,并重命名便于观察

In[]
data3=data2.drop([“职位”,“公司”,“薪酬”,“地点”,“获取网址”,“获取时间”,“low_salary”,“hig_salary”],axis=1)#删除无关列
#重命名
data4=data3.rename(columns={“工作经验”:“exp”,“学历”:“edu”,“福利”:“welfare”,“职位信息”:“jobinfo”,“公司性质”:“companytype”,“公司规模”:“scale”,“行业”:“industry”})
#data4.info()

5.将清洗好的数据保存到磁盘,防止意外

In[]
data4.to_excel(“51job_clean.xlsx”,index=False)

第三步:数据可视化

In[]
df_plot=data4#构建一个用于做数据可视化的
df_plot.head()

(一)单因素分析

1.用柱状图观察各城市职位数量分布情况

In[]
data_city=df_plot.city.value_counts()
#data_city
type(data_city)
ax1=data_city.plot(“bar”,figsize=(12,6),fontsize=“14”,ylim=[0,2300],rot=0,legend=True,grid=True)
plt.title(“各城市职位数量分布情况”,color=“blue”,fontsize=24,y=1.05)
for i in range(0,len(data_city)):
ax1.text(i-0.15,data_city[i]+30,data_city[i],fontsize=12,color=“k”)

#观察发现广州、上海、北京、深圳的职位数量排名靠前

2.用条形图观察不同学历层次岗位需求数量情况

In[]
data_edu=df_plot.edu.value_counts()
ax2=data_edu.plot(“barh”,figsize=(12,6),fontsize=“14”,xlim=[0,4000],legend=True)
ax2.set_legend=([“博士”,“本科”])
plt.title(“不同学历层次岗位需求数量情况”,color=“blue”,fontsize=24,y=1.05)
for i in range(0,len(data_edu)):
ax2.text(data_edu[i]+30,i-0.15,data_edu[i],fontsize=12,color=“k”)

#观察发现本科学历的岗位需求数量最多

3.用箱图观察不同城市薪酬分布情况

In[]
#观察不同城市薪酬分布情况
#箱图的粗细表示所包含的数据量大小
ax3=df_plot.boxplot(column=“ln_salary”,by=“city”,figsize=(12,6),fontsize=14,widths=df_plot.city.value_counts()/2500)
ax3.set_title(“不同城市的薪酬分布情况”,fontsize=24,color=“blue”,y=1.1)
ax3.set_xlabel(“城市”,fontsize=14)
ax3.set_ylabel(“平均薪酬”,fontsize=14)
#观察发现上海、北京、杭州、深圳平均薪酬相对较高,合肥、成都、武汉平均薪酬相对较低,广州薪酬差异较大

4.用箱图观察不同学历薪酬分布情况

In[]
#观察不同学历层次的薪酬情况
ax4=df_plot.boxplot(column=“ln_salary”,by=“edu”,figsize=(12,6),fontsize=14,widths=0.5)
ax4.set_title(“不同学历层次的薪酬分布情况”,fontsize=24,color=“blue”,y=1.1)
ax4.set_xlabel(“学历”,fontsize=14)
ax4.set_ylabel(“平均薪酬”,fontsize=14)
#观察发现博士学历的平均薪酬显著高于其它学历层次,本科薪酬差异较大

5.用直方图观察硕士、本科、大专3个不同学历层次的薪酬分布情况

In[]
fig,ax5=plt.subplots(figsize=(12,8))
ax5.set_title(“硕士、本科、大专3个不同学历层次的薪酬分布情况”,fontsize=24,color=“blue”,y=1.02)
ax5.hist(x=df_plot[df_plot.edu==“硕士”].ln_salary,bins=20,facecolor=“red”,alpha=1)
ax5.hist(x=df_plot[df_plot.edu==“本科”].ln_salary,bins=20,facecolor=“green”,alpha=0.5)
ax5.hist(x=df_plot[df_plot.edu==“大专”].ln_salary,bins=20,facecolor=“blue”,alpha=0.5)
ax5.legend([“硕士”,“本科”,“大专”])

(二)多因素分析

6.观察不同公司类型、不同公司规模的薪酬情况

In[]
df_plot.head()#观察数据

In[]
#观察不同公司类型、不同公司规模的平均薪酬情况
df_company=df_plot.groupby([“companytype”,“scale”]).mean()
df_company.head()
ax6=df_company.ava_salary.plot.barh(figsize=(28,20))
ax6.set_title(“不同公司类型、不同公司规模的平均薪酬情况”,fontsize=24,color=“blue”,y=1.02)
for i in range(0,len(df_company.ava_salary)):
ax6.text(df_company.ava_salary[i]+0.12,i-0.2,"%.2f"%df_company.ava_salary[i]+“千/月”,fontsize=12,color=“k”)#添加数据标签

#观察发现规模为1000人到5000人的事业单位平均薪酬最高

7.观察不同城市、不同学历层次的薪酬情况

In[]
#观察不同城市、不同学历层次的薪酬情况
df_city_edu=df_plot.groupby([“city”,“edu”]).mean()
df_city_edu.head(10)
ax7=df_city_edu.ava_salary.plot.barh(figsize=(28,30))
ax7.set_title(“不同公司城市、不同学历层次的平均薪酬情况”,fontsize=24,color=“blue”,y=1.02)
for i in range(len(df_city_edu)):
ax7.text(df_city_edu.ava_salary[i]+0.15,i-0.18,"%.2f"%df_city_edu.ava_salary[i]+“千/月”,fontsize=12,color=“k”)#添加数据标签

#观察发现杭州博士学历的平均薪酬最高,深圳硕士的平均薪酬次之,上海博士的平均薪酬再次之

(三)词云图

8.作福利待遇的词云图

In[]
df_plot.welfare.head(10)

Out[]
0 五险一金/补充医疗保险/补充公积金/弹性工作/交通补贴/餐饮补贴/年终奖金/绩效奖金/定期体…
1 做五休二/五险一金/绩效奖金/全勤奖/节日福利/专业培训/餐饮补贴/定期体检/
2 免费班车/一日三餐/员工宿舍/员工旅游/五险一金/年终奖金/绩效奖金/定期体检/专业培训/
3 五险一金/专业培训/员工旅游/出国机会/绩效奖金/年终奖金/股票期权/弹性工作/周末双休/
4 五险一金/员工旅游/年终奖金/出国机会/专业培训/
5 五险一金/补充医疗保险/补充公积金/员工旅游/出国机会/专业培训/绩效奖金/
6 NaN
7 五险一金/员工旅游/专业培训/出国机会/绩效奖金/年终奖金/弹性工作/股票期权/
8 五险一金/员工旅游/周末双休/不加班/早九晚五/带薪年假/节假日福利/专业培训/晋升空间大/…
9 NaN
Name: welfare, dtype: object

In[]
#welfare_cloud1=df_plot.welfare.dropna()
welfare_cloud1=df_plot.welfare.str.split("/")#以/为分隔符将福利项目分开
welfare_cloud2=welfare_cloud1.dropna().apply(pd.value_counts)#删除NaN,并统计福利项目的值
#welfare_cloud2
welfare_cloud3=welfare_cloud2.unstack()#转换为交叉表
#welfare_cloud3
#print(type(welfare_cloud3))
welfare_cloud4=welfare_cloud3.dropna().reset_index()#删除NaN,并统计用各福利项目在不同索引的是否有的值1为有,再将索引重设
#welfare_cloud4
welfare_cloud5=welfare_cloud4[“level_0”]#罗列出各项福利
#print(type(welfare_cloud5))
#welfare_cloud5
welfare_cloud5.to_csv(“wordcloud5.txt”,sep="\t",index=False)#不带index,保存为txt文件

In[]
import wordcloud
import jieba
#构建词云图
word=open(“wordcloud5.txt”,“r”,encoding=“utf-8”).read()
#word
#type(word)
weflare_words_cloud=wordcloud.WordCloud(width=1000,height=700,max_font_size=80,min_font_size=10,scale=1.5,font_path=“simhei.ttf”,collocations=False)#设置云图格式
#weflare_words_cloud.generate(word)
weflare_words_cloud.generate(" ".join(jieba.cut(word)))#两种方法都可实现
weflare_words_cloud.to_file(“weflare_words_cloud2.png”)#保存图片

In[]
%%html
<img src=".\weflare_words_cloud2.png", width=840, heigth=300>
#读取词云图

9.作行业分布词云图

In[]
df_plot.industry.head(10)#观察数据

Out[]
0 互联网/电子商务
1 酒店/旅游,互联网/电子商务
2 互联网/电子商务,计算机软件
3 金融/投资/证券
4 金融/投资/证券
5 金融/投资/证券
6 计算机软件
7 金融/投资/证券
8 金融/投资/证券,专业服务(咨询、人力资源、财会)
9 金融/投资/证券
Name: industry, dtype: object

In[]
industry_cloud1=df_plot.industry.str.split("/")#以/为分隔符将行业名称分开
#industry_cloud1
#print(type(industry_cloud1))
industry_cloud2=industry_cloud1.dropna().apply(pd.value_counts)#删除NaN,并统计行业名称的值
#industry_cloud2
#print(type(industry_cloud2))
industry_cloud3=industry_cloud2.unstack()#转换为交叉表
#industry_cloud3
#print(type(industry_cloud3))
industry_cloud4=industry_cloud3.dropna().reset_index()#删除NaN,并统计用各行业名称在不同索引的是否有的值1为有,再将索引重设
#industry_cloud4
industry_cloud5=industry_cloud4[“level_0”]
industry_cloud5
industry_cloud5.to_csv(“industry_cloud.txt”,sep="\t",index=False)#保存为txt文件

In[]
word2=open(“industry_cloud.txt”,encoding=“utf-8”).read()
#word2
#print(type(word2))
industry_words_cloud=wordcloud.WordCloud(width=1000,height=700,max_font_size=80,min_font_size=10,scale=1.5,font_path=“simhei.ttf”,collocations=False)
industry_words_cloud.generate(word2)
#industry_words_cloud.generate(" ".join(jieba.cut(word2)))#两种方法都可实现
industry_words_cloud.to_file(“industry_words_cloud.png”)#保存图片

In[]
%%html
<img src=".\industry_words_cloud.png", width=840, heigth=300>#读取图片

第四步 数据挖掘 作回归分析

In[]
import statsmodels.api as sm
from statsmodels.formula.api import ols
df_ols = pd.read_excel(‘51job_clean.xlsx’)
df_ols.head()#观察数据

In[]
#10.作方差分析观察工作经验的P值
print(“工作经验的P值为:%.4f” %sm.stats.anova_lm(ols(‘ln_salary ~ C(exp)’,data=df_ols).fit())._values[0][4])

Out[]
工作经验的P值为:0.0000

In[]
#构建回归方程
lm = ols(“ln_salary ~ C(companytype)+C(exp)+C(edu)+C(scale)+C(industry)”,data=df_ols).fit()
lm_summary = lm.summary()
lm_summary

观察结果如下: 1.Adj.R-squraed:0.383 表示回归方程的解释准确率只有38.3%; 2.Prob(F-statistic):0.00 表示回归方程成立,具有统计学意义 3.Model:OLS 最小二乘法作多元线性回归 4.观察右侧系数表中P>|t|的值,只要有一项亚变量存在<0.05,则可以容纳于回归方程,遵循同进同出的原则

51Job大数据分析师岗位项目相关推荐

  1. python海量数据分析师职业技能_大数据分析师技能图谱详解与零基础自学内容大全...

    全球的数据量正在以每18个月翻一倍的惊人速度增长,世界正在高速数字化,大数据堪比石油,如何掘金大数据是所有个人.企业和国家的机遇和挑战.中国是人才大国,能理解和应用大数据的创新人才更是稀缺资源.大数据 ...

  2. 大数据项目一般金额多少_大数据分析师年薪一般多少?学什么专业才能从事大数据?...

    近几年,大数据为各个领域带来了全新的变革,大数据的重要性越来越被企业和国家所看到,大数据工作者的需求再次被无限放大,他们的薪资和社会地位也在不断上涨.马云在演讲中就提到,未来的时代将不是IT时代,而是 ...

  3. 做好领导最喜欢的可视化报表,30岁依然能转行大数据分析师

    我今年30岁了,已经工作了快8年,上有老下有小,但是我看不到自己工作的未来,想辞职又不敢,这种情况下可以转行吗? 一般情况下,我不告诉当事人晚或者不晚这个非黑即白的答案.因为懂的人都知道,这个得分情况 ...

  4. 2022年大数据BI工程师项目实训介绍

    来自[仅悦数据]<大数据BI工程师项目实训>的介绍,精心整理,盗用必究- 本文阅读约需15分钟,感谢观看~ 最新播报:2022年BI大数据实训全面升级,我们必将更专业.更用心! 一.202 ...

  5. python金融大数据分析师工资待遇_国内数据分析待遇如何?

    本文用数据分析的方法告诉你,数据分析师在不同阶段分别是值多少钱! 项目简介 自学数据分析的相关技能有一段时间,到现在也算学到不少内容,接下来打算慢慢找工作.在这之前打算将之前学的东西,练习一遍,慢慢增 ...

  6. 大数据薪水大概多少_大数据就业岗位有哪些?薪资多少?

    大数据免费全套视频课程,在文末留言"学习"抢! 很多小伙伴想入行大数据,只是听说大数据薪资很高,但对大数据行业具体情况不了解.大数据到底是做什么的?有哪些岗位?就业薪资具体是多少? ...

  7. 大数据分析师,比数据分析师厉害在哪

    最近看到个段子: 你是个数据分析师,平时主要都用 Python 的 Pandas 处理分析数据,一天,上司甩来一个文件让你清洗好顺便提取些数据,下班前给到他. 你一看文件有几十个 GB 大,有点傻眼, ...

  8. 资深讲师分享大数据分析师职业规划

    最近有不少同学向咨询有关大数据分析职业发展的问题,由此可见,随着大数据分析的飞速发展,大数据分析职业也成为很多同学关注的目标.不要急,这就给大家介绍大数据分析的职业发展. 一.为什么要做大数据分析师 ...

  9. 解密大数据领域岗位职业发展路径

    我们迎来了一个新的时代,这就是大数据的时代. -经济学家 詹姆斯·莫里斯 行业背景 国家信息中心<2017中国大数据产业发展报告>对我国大数据产业发展的人才.政策.投融资.创新创业.产业发 ...

最新文章

  1. 现有的iOS项目集成ReactNative的记录文档
  2. [HTML5游戏开发]简单的《找没有同汉字版〗爆去考考您狄综力吧
  3. add_compile_options和CMAKE_CXX_FLAGS的区别
  4. Java bytecode instruction listings
  5. 【转】带你玩转Visual Studio——01.开篇介绍
  6. linux 查看进程的信号,Linux 进程信号查看与控制
  7. python开发系统架构设计师_系统架构设计师在线题库
  8. 「镁客·请讲」Site24×7李飞:云服务是大势所趋,云监控生意又要怎么做?...
  9. 数据结构中的7种排序算法
  10. 《Java 解惑》笔记(一)
  11. HP推出UFT新版本UFT12 5以及LeanFT
  12. Linux主流架构运维工作简单剖
  13. U盘文件突然变成html文件,U盘里面的文件跟文件夹突然乱码了怎么办
  14. stm32f10x寄存器设置脚本
  15. Windows XP 默认蓝色桌面的 RGB
  16. OV5640_MIPI_1LEN调试记录
  17. 用户帐户控制---为了对电脑进行保护,已经阻止此应用。---管理员已阻止你运行此应。有关详细信息,请与管理员联系。
  18. Character Controller角色控制器组件
  19. linux_5.10 iptables踩坑
  20. 做汽车工程师需要哪些计算机语言,做好汽车研发工程师,需要懂哪些?

热门文章

  1. .Net Micro Framework 4.0 RTM一览
  2. idea pom cpu占有率_组装电脑哪个CPU好?如何选择CPU?2020年CPU推荐及分析。
  3. ARM之汇编学习---如何编写ARM汇编程序
  4. 关于混沌的几点认识(摘自得到app《混沌》)
  5. 计算机主板上的扩展插槽是什么的物理表现,电脑主板上的ISA插槽是起什么作用 关于电脑主板isa插槽知识...
  6. VMware 虚拟机安装 Ubuntu 20.04-server 详细图文教程
  7. 红警2在Y460和win10下运行
  8. html5 步骤条,steps.js 步骤条点击问题?
  9. SpringBoot的自动装配
  10. 怎么用栅格系统做出完美的logo作品