本文正在参加「金石方案 . 分割6万现金大奖」
对于薪资数据的歪斜状况以及盒图离群点的探求
一.需求布景
课题中心:招聘网站的职位招聘数据预处理
之前的文章,咱们现已对职位薪资数据进行了爬取(9000条)数据,然后进行了数据的清洗,终究得到了4000条有用数据。
具体需求:
- 按不同的类别区分职位中的薪酬数据,画盒图/箱线图,查看孤立点/离群点;
- 运用分位数图、分位数-分位数图办法处理数据;
本次使命的结构图:
技能要点: 爬虫库(Beautifulsoup、requests-html、Scrapy)、数据预处理(python、kettle)、数据可视化(matplotlib、pyecharts、tebleau)、python-web结构(Flask)
二. 使命开端
2.1 薪酬的中位数、均值和众数和数据歪斜模块具体规划
已Java为例,python和Go相似流程:
1.经过过去的爬虫和数据清理等过程,咱们得到了4000条左右的有用数据,咱们先将其读取进来:
data=pd.read_csv("A-06-终究有用数据.csv",encoding="gbk")
2.以Java为例:咱们运用关键词“java”对数据进行挑选,循环挑选过程中将职位名,薪资需求的关键字放到列表里边,然后存入字典里,经过pandas的处理:
xingzhi={}
zhiwei=[]
xin1=[]
xin2=[]
foriinrange(len(data)):
if"java"indata.iloc[i]['职位名']:
a=re.findall("\d+\.?\d*",data.iloc[i]['薪资'])
#print(data.iloc[i]['职位名'])
zhiwei.append(data.iloc[i]['职位名'])
xin1.append(int(a[0]))
xin2.append(int(a[1]))
xingzhi={"职位名":zhiwei,'最低薪资':xin1,'最高薪资':xin2}
df=pd.DataFrame(xingzhi)
2.输出题目要求的均值,中位数和众数:
print("java职位最低薪资的均值为:",df['最低薪资'].mean())
print("java职位最高薪资的均值为:",df['最高薪资'].mean())
print("java职位最低薪资的中位数为:",df['最低薪资'].median())
print("java职位最高薪资的中位数为:",df['最高薪资'].median())
print('java职位最低薪资的众数:',df['最低薪资'].mode())
print('java职位最高薪资的众数:',df['最高薪资'].mode())
3.输出作用如下:
4.指定默认字体:处理plot不能显现中文问题,处理保存图像是负号’-‘显现为方块的问题。
mpl.rcParams['font.sans-serif']=['STZhongsong']
mpl.rcParams['axes.unicode_minus']=False
5.对x和y轴数据进行规范化,x轴运用数据的长度循环列表
importmatplotlib.pyplotasplt
y1=xin1
x1=range(0,df['最低薪资'].count())
x2=range(0,df['最高薪资'].count())
y2=xin2
fig=plt.figure()
plt.subplot(2,1,1)
plt.bar(x1,y1,color="green")
plt.ylabel('薪资,单位K')
plt.title('java岗位的薪资状况(最低薪资-最高薪资)')
plt.subplot(2,1,2)
plt.bar(x2,y2,color="red")
plt.xlabel('公司个数')
plt.ylabel('薪资,单位K')
#plt.title('java岗位的薪资状况(最低薪资-最高薪资)')
plt.legend()
plt.show()
6.显现作用:
7.计算结果:
java职位: java职位最低薪资的均值为: 15.938611789326822 java职位最高薪资的均值为: 26.44890129054761 java职位最低薪资的中位数为: 15.0 java职位最高薪资的中位数为: 25.0 java职位最低薪资的众数: 0 15 Name: 最低薪资, dtype: int64 java职位最高薪资的众数: 0 30 Name: 最高薪资, dtype: int64 python职位: python职位最低薪资的均值为: 13.84330985915493 python职位最高薪资的均值为: 24.184859154929576 python职位最低薪资的中位数为: 15.0 python职位最高薪资的中位数为: 25.0 python职位最低薪资的众数: 0 15 Name: 最低薪资, dtype: int64 python职位最高薪资的众数: 0 30 Name: 最高薪资, dtype: int64 Go职位: Go职位最低薪资的均值为: 19.64329268292683 Go职位最高薪资的均值为: 34.707317073170735 Go职位最低薪资的中位数为: 19.0 Go职位最高薪资的中位数为: 30.0 Go职位最低薪资的众数: 0 15 Name: 最低薪资, dtype: int64 Go职位最高薪资的众数: 0 30 Name: 最高薪资, dtype: int64
2.2 按不同的类别区分职位中的薪酬数据,画盒图/箱线图,查看孤立点/离群点
1.与上文一样,咱们运用关键词“java”对数据进行挑选,循环挑选过程中将职位名,薪资需求的关键字放到列表里边,然后存入字典里,经过pandas的处理: 将上限和下限别离处理:
xingzhi={}
zhiwei=[]
xin1=[]
xin2=[]
foriinrange(len(data)):
if"java"indata.iloc[i]['职位名']:
a=re.findall("\d+\.?\d*",data.iloc[i]['薪资'])
#print(data.iloc[i]['职位名'])
zhiwei.append(data.iloc[i]['职位名'])
xin1.append(int(a[0]))
xin2.append(int(a[1]))
xingzhi={"职位名":zhiwei,'最低薪资':xin1,'最高薪资':xin2}
df=pd.DataFrame(xingzhi)
labels='Java职位薪酬下限','Java职位薪酬上限'
A=xin1
B=xin2
2.开端画图,将上面传入的进行处理
plt.grid(True)#显现网格
plt.boxplot([A,B],
medianprops={'color':'red','linewidth':1.5},
meanline=True,
showmeans=True,
meanprops={'color':'blue','ls':'--','linewidth':1.5},
flierprops={"marker":"o","markerfacecolor":"red","markersize":10},
labels=labels)
plt.yticks()
plt.show()
3.Python和GO言语的相似,如下:(GO言语代码省略不写)与这几个大致相同。
xingzhi={}
zhiwei=[]
xin1=[]
xin2=[]
foriinrange(len(data)):
if"python"indata.iloc[i]['职位名']:
a=re.findall("\d+\.?\d*",data.iloc[i]['薪资'])
zhiwei.append(data.iloc[i]['职位名'])
xin1.append(int(a[0]))
xin2.append(int(a[1]))
xingzhi={"职位名":zhiwei,'最低薪资':xin1,'最高薪资':xin2}
df=pd.DataFrame(xingzhi)
labels='python职位薪酬下限','python职位薪酬上限'
A=xin1
B=xin2
plt.grid(True)#显现网格
plt.boxplot([A,B],
medianprops={'color':'red','linewidth':1.5},
meanline=True,showmeans=True,
meanprops={'color':'blue','ls':'--','linewidth':1.5},
flierprops={"marker":"o","markerfacecolor":"red","markersize":10},
labels=labels)
plt.yticks()
plt.show()
4.运行结果如下:
后边的使命会还会发布相关的文章。