本文正在参加「金石计划 . 瓜分6万现金大奖」

一.本次需求布景

本文主题:招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、运用线性回归算法拟合散点图处理详解

之前的文章咱们现已对爬取的数据做了清洗处理,然后又对其数据做了一个薪资数据的歪斜状况以及盒图离群点的探究。

咱们这次的需求是:

运用散点图、运用线性回归算法拟合散点图处理数据 运用部分回归(Loess)曲线(添加一条光滑曲线到分布图)办法处理数据

技术要点:爬虫库(Beautifulsoup、requests-html、Scrapy)、数据预处理(python、kettle)、数据可视化(matplotlib、pyecharts、tebleau)、python-web结构(Flask)

二.职位招聘数据的分位数图、分位数-分位数图

咱们这次先看一下作用图:本次使命最终的作用便是下面这俩个图:

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

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)
java_min=xin1
java_max=xin2
​

2.开始画图:将java数据的上限和下限别离作为两个特征值,传入进行绘图作业:

这儿留意一点,咱们在进行绘图之前需求运用sort对数据进行一个排序操作。X轴是公司个数,Y轴是薪资,单位K:

java岗位的薪资分位数图 java职位薪酬下限:绿色。java职位薪酬上限:红色

x=range(0,df['最高薪资'].count())
y=np.sort(xin1)
y1=np.sort(xin2)
plt.scatter(x,y,marker='.',c='green',alpha=0.4,label='bulge')
plt.scatter(x,y1,marker='.',c='red',alpha=0.4,label='scratch')
plt.xlabel('公司个数')
plt.ylabel('薪资,单位K')
plt.title('java岗位的薪资分位数图\njava职位薪酬下限:绿色。java职位薪酬上限:红色')
plt.show()

3.绘图作用如下:

java岗位的薪资分位数图

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

Python岗位的薪资分位数图

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

Go岗位的薪资分位数图

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

5.分位数—分位数图: 因为java岗位的数据远远的大于Python岗位的数据,我这儿的主意是将java岗位的下限和上限别离和Python岗位的下限和上限做为特征值,进行绘图作业。 下限代码如下:

分位数——分位数图

特征值:java下限薪资和python下限薪资:

ava_min=java_min[:len(python_min)]
y=np.sort(java_min)
y1=np.sort(python_min)
​
plt.scatter(y,y1)
plt.plot([y[0],y[-1]],[y1[0],y1[-1]])
plt.scatter([np.quantile(y,0.25),np.quantile(y,0.5),np.quantile(y,0.75)],[np.quantile(y1,0.25),np.quantile(y1,0.5),np.quantile(y1,0.75)])
plt.xlabel('java下限薪资:单位k')
plt.ylabel('python下限薪资:单位k')
plt.title('分位数——分位数图\n特征值:java下限薪资和python下限薪资')
plt.show()

上限代码如下::

分位数——分位数图

特征值:java上限薪资和python上限薪资

java_max=java_min[:len(python_max)]
y=np.sort(java_max)
y1=np.sort(python_max)
​
plt.scatter(y,y1)
plt.plot([y[0],y[-1]],[y1[0],y1[-1]])
plt.scatter([np.quantile(y,0.25),np.quantile(y,0.5),np.quantile(y,0.75)],[np.quantile(y1,0.25),np.quantile(y1,0.5),np.quantile(y1,0.75)])
plt.xlabel('java上限薪资:单位k')
plt.ylabel('python上限薪资:单位k')
plt.title('分位数——分位数图\n特征值:java上限薪资和python上限薪资')
plt.show()

6.分位数—分位数图作用图如下:

java薪资下限和Python薪资下限的分位数-分位数图:

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

java薪资上限和Python薪资上限的分位数-分位数图

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

三.运用散点图、运用线性回归算法拟合散点图处理数据

留意:Linear Regression

线性回归算法:线性回归是运用数理统计中回归剖析,来确认两种或两种以上变量间相互依赖的定量联系的一种统计剖析办法,运用非常广泛。 其表达形式为y = w’x+e,e为误差服从均值为0的正态分布。

线性回归算法模型非常简略。每个数据有n个特征,每个特征对应于其本身的权重值。权重加上偏移值的乘积便是线性回归模型。公式如下:

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

公式如下:

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

在回归剖析中,只包括一个自变量和一个因变量,它们的联系可以近似地用一条直线表明。这种回归剖析称为线性回归剖析。假如回归剖析包括两个或多个自变量,且因变量和自变量之间的联系是线性的,则称为多元线性回归剖析。

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)
java1=xin1
java2=xin2

2.运用上面的列表数据进行绘图—散点图:

X轴:各岗位薪资下限,y轴:各岗位薪资上限

plt.scatter(java1,java2,c="red",marker='o',label='java')
plt.scatter(python1,python2,c="green",marker='+',label='python')
plt.scatter(go1,go2,c="yellow",marker='^',label='go')
plt.xlabel('各岗位薪资下限')
plt.ylabel('各岗位薪资上限')
plt.legend(loc=2)
plt.show()

以java为例,其他的俩种言语类似:

plt.scatter(java1,java2,c="red",marker='o',label='java')
plt.xlabel('Java岗位薪资下限')
plt.ylabel('Java岗位薪资上限')
plt.legend(loc=1)
plt.show()

3,作用图如下:

各岗位薪资的的下限和上限散点图:

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

java岗位薪资的的下限和上限散点图:

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

Python岗位薪资的的下限和上限散点图

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

Go岗位薪资的的下限和上限散点图

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

4.运用线性回归算法拟合散点图 运用线性回归算法进行计算,拟合值。

fromsklearnimportlinear_model
linear=linear_model.LinearRegression()
linear.fit(np.reshape(java1,(-1,1)),np.reshape(java2,(-1,1)))
print("trainingscore",linear.score(np.reshape(java1,(-1,1)),np.reshape(java2,(-1,1))))

5.对其拟合结果进行绘图

X轴:java岗位薪资下限 y轴:java岗位薪资上限

运用线性回归算法拟合散点图

特征值:java岗位薪资下限和java岗位薪资上限

importmatplotlib.pyplotasplt
importnumpyasnp
plt.scatter(np.reshape(java1,(-1,1)),np.reshape(java2,(-1,1)),color="red")
plt.scatter(np.reshape(java1,(-1,1)),np.reshape(java2,(-1,1)))
plt.scatter(np.reshape(java1,(-1,1)),np.dot(np.reshape(java1,(-1,1)),linear.coef_)+linear.intercept_)
plt.xlabel('java岗位薪资下限')
plt.ylabel('java岗位薪资上限')
plt.title("运用线性回归算法拟合散点图\n特征值:java岗位薪资下限和java岗位薪资上限")
plt.show()

6.作用图如下:

java岗位薪资的的下限和上限的线性拟合散点图

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

Python岗位薪资的的下限和上限的线性拟合散点图:

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

Go岗位薪资的的下限和上限的线性拟合散点图

【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

总结:

体会从需求出发,到规划、编码、测验、发布的整体流程,熟悉软件开发过程。熟悉和掌握数据预处理流程。可以在实践中运用数据整理、数据集成、数据改换、数据规约的技术和办法处理数据。培养快速学习和共享新知识,并在项目中运用的才能及独立解决问题的才能。

本次完成了:招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、运用线性回归算法拟合散点图处理。

后面咱们研究:运用部分回归(Loess)曲线(添加一条光滑曲线到分布图)办法处理数据以及运用分箱、回归、聚类办法 查看离群点及光滑数据;