##############线性回归######################### 最佳拟合线(或趋势线)是一条直线,它被认为是最能代表散点图上数据的直线 这条直线可以通过一些散点,也可以不通过一些散点 拟合线可以帮助我们发现不太明显的趋势

####1.导入需要的绘图库
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

#######先来认识一下绘制最佳拟合线函数#########
***sns.lmplot()***在DataFrame
##########绘制最佳的拟合线#########

x1 = np.linspace(0,10,50)
y=2*x1+5+np.random.randn(50)*10 #加上随机数,模拟我们在现实中收集数据时候带来的噪音
plt.scatter(x1,y)#有噪音的情况下

python 直线拟合 python拟合线性函数_开发语言

有噪音的情况下是散点图

y1=2*x1+5  #没有噪音情况
plt.scatter(x1,y1);

python 直线拟合 python拟合线性函数_开发语言_02


这是在没有噪音的情况下的是直线

###画拟合线的第一步##
data =pd.DataFrame({'x1':x1,'y':y})#把所有的数据导入到我们 Dataframe
data =pd.DataFrame({'x1':x1,'y':y})#把所有的数据导入到我们 Dataframe是为了符合sns的画图风格,利用字典的形式创造x1,y1的列
gridobj = sns.lmplot("x1",'y',data=data) #必须通过data+字符串的方式来读取数据

python 直线拟合 python拟合线性函数_开发语言_03


**事实上,sns.lmplot的画图功能复杂参数也很丰富(39个),我们可以通过它来创造一个在数据集上不同子集上拟合回归模型的便捷界面,对于有众多分类特征的回归类型数据非常有效。

**

#比如说我们要将点分类?
x2 = [0]*10+[1]*40#产生10个0与40个1
plt.rcParams['font.sans-serif']=['Simhei']
data =pd.DataFrame({'x1':x1,'x2':x2,'y':y})#放入dataframe
gridobj = sns.lmplot('x1','y',data=data,hue = 'x2',truncate=False)#hue,Legend =false)##它是有内部识别出来的是散点
plt.legend(["类别0","类别1"],fontsize=16);#这个图列画出来的是一条线

python 直线拟合 python拟合线性函数_python_04

绘制一图多线的图

####1.导入需要的绘图库
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

重要的参数:
1: x,y,data:横坐标,纵坐标,数据
2: hue: 取出数据集的子集,对数据进行分类,其实HUE是色调的意思,与之前的c联系起来,对输入不同类型,可以显示不同的颜色
3: legend: 是否显示图列
*

绘制一图两线的线性拟合图

df=pd.read_csv('mpg_ggplot2.csv') #与汽车相关的数据集
df.head()

python 直线拟合 python拟合线性函数_数据_05


python 直线拟合 python拟合线性函数_数据_06

df.columns #返回的列名
name=['汽车制造商','型号名称','发动机排量(L)','制造年份','气缸数量','手动/自动','驱动类型','城市里程/加仑','公路里程/加仑','汽油种类','车辆种类']
[*zip(df.columns.values,np.array(name))]

python 直线拟合 python拟合线性函数_python_07


绘制图像 重要的一些参数

height:图像的高度

aspect:图像的纵横比,

aspect*height=每张图的高度

palette:类似于matplotlib中的colormap,表示使用什么色板/光谱,可以选择不同的颜色

df.loc[df.cyl.isin([4,8]),:].head()  #切割处理气缸数量为4和8的列表
#函数isin的用法:a.isin(x),表示判断x是否存在于a的序列中,若存在返回true。若不存在则返回false
#注意函数isin专用于DataFrame,其他的数据结构都不好使

python 直线拟合 python拟合线性函数_python 直线拟合_08


注意这里 返回的都是cyl为4和1的数以及isin的用法

#数据准备
df_select=df.loc[df.cyl.isin([4,8]),:]
#绘制图像
sns.set_style("darkgrid") #s设立风格

gridobj = sns.lmplot(x='displ',#横坐标:发动机的排量
                     y='hwy', #纵坐标 :公路里程/加仑
                     hue='cyl',#分类,子集,气缸数量
                     data=df_select, #能够输入的数据
                     height=8,      #高度/纵向
                     aspect=1.6,    #纵横比
                     palette='rainbow', #色板。tab10 rainbow  summer有不同色板
                     legend=False, #不显示图列
                     scatter_kws=dict(s=60,linewidths=.7,edgecolors='black'),#其它参数凸包
                     truncate=False  #可以解决拟合线太短的问题
                     
                    )
#装饰图像
gridobj.set(xlim=(0.5,7.5),ylim=(0,50))
plt.rcParams['font.sans-serif']=['Simhei']  #显示中文,为微软雅黑
plt.xlabel('发动机排量(L)',fontsize=20)
plt.ylabel('公路里程/加仑',fontsize=20)
plt.xticks(fontsize=16)  #标尺的大小
plt.yticks(fontsize=16)
plt.legend(['气缸数量:4','气缸数量:8'],fontsize=22)
plt.title('scatterplot with line ofbest',fontsize=20)
plt.show()

python 直线拟合 python拟合线性函数_拟合_09


#这里可以准备一些每次绘图都需要的一些参数

###################预设的一些参数每次绘图可能需要的参数设置##################
large=22; small=12; med=16
params ={'axes.titlesize':large,#子图上标题的大小
         'legend.fontsize':med,#图例的字体的大小
         'figure.figsize':(16,10),#图像的画布的大小
         'axes.labelsize':med, #标签的字体的大小
         'xtick.labelsize':med,#x轴上标尺的字体的大小
         'ytick.labelsize':med,#y轴上标尺的字体的大小
         'figure.titlesize':large #整个画布的标题字体的大小
        }
plt.rcParams.update(params)#设置各种各样的属性

########################################

#一图四线
#col:表示按照这个特征中的分类绘制图像,并且一个类别绘制一张图一条拟合线,排成一排
#col_wrap:当参数col有效时,表示每行最多显示col_wrap个图
gridobj = sns.lmplot(x='displ',#横坐标:发动机的排量
                     y='hwy', #纵坐标 :公路里程/加仑
                     hue='cyl',#分类,子集,气缸数量
                     data=df, #能够输入的数据
                     height=7,      #高度/纵向
                     robust=True,  #
                     truncate ='False',
                     aspect=1.6,    #纵横比
                     palette='Set1', #色板。tab10 rainbow  summer有不同色板  
                     legend=True, #不显示图列
                     scatter_kws=dict(s=60,linewidths=.7,edgecolors='black'),#其它参数凸包
                     #palette='Setl'  #调色板的颜色
                    
                     #####新增的两个属性###########
                     #col='cyl',#表示按照这个特征中的分类绘制图像,并且一个类别绘制一张图一条拟合线,排成一排
                     #col_wrap = 2 #表示对col中的类别属性进行折叠,让一行变成多行 表示一行有多少图
                      )
#装饰图像
plt.rcParams['font.sans-serif']=['Simhei']
gridobj.set(xlim=(0.5,7.5),ylim=(0,50),xlabel='排量',ylabel='公路里程/加仑')
plt.show()

这里最主要的的是col 与col_wrap的用法
#col:表示按照这个特征中的分类绘制图像,并且一个类别绘制一张图一条拟合线,排成一排
#col_wrap:当参数col有效时,表示每行最多显示col_wrap个图

#一图四线
#col:表示按照这个特征中的分类绘制图像,并且一个类别绘制一张图一条拟合线,排成一排
#col_wrap:当参数col有效时,表示每行最多显示col_wrap个图

gridobj = sns.lmplot(x='displ',#横坐标:发动机的排量
                     y='hwy', #纵坐标 :公路里程/加仑
                    
                     hue='cyl',#分类,子集,气缸数量
                     data=df, #能够输入的数据
                     height=7,      #高度/纵向
                     #robust=True,  #
                      truncate ='False',
                     aspect=1.6,    #纵横比
                     palette='Set1', #色板。tab10 rainbow  summer有不同色板  
                     legend=True, #不显示图列
                     scatter_kws=dict(s=60,linewidths=.7,edgecolors='black'),#其它参数凸包
                     #palette='Setl'  #调色板的颜色
                     ###
                     #####新增的两个属性###########
                     #col='cyl',#表示按照这个特征中的分类绘制图像,并且一个类别绘制一张图一条拟合线,排成一排
                     #col_wrap = 2 #表示对col中的类别属性进行折叠,让一行变成多行 表示一行有多少图
                      )
#装饰图像

plt.rcParams['font.sans-serif']=['Simhei']
gridobj.set(xlim=(0.5,7.5),ylim=(0,50),xlabel='排量',ylabel='公路里程/加仑')
plt.show()

python 直线拟合 python拟合线性函数_数据_10

gridobj = sns.lmplot(x='displ',#横坐标:发动机的排量
                     y='hwy', #纵坐标 :公路里程/加仑
                    
                     hue='cyl',#分类,子集,气缸数量
                     data=df, #能够输入的数据
                     height=7,      #高度/纵向
                     #robust=True,  #
                      
                     aspect=1.6,    #纵横比
                     palette='Set1', #色板。tab10 rainbow  summer有不同色板  
                     legend=True, #不显示图列
                     scatter_kws=dict(s=60,linewidths=.7,edgecolors='black'),#其它参数凸包
                     #palette='Setl'  #调色板的颜色
                     ###
                     #####新增的两个属性###########
                     col='cyl',#表示按照这个特征中的分类绘制图像,并且一个类别绘制一张图一条拟合线,排成一排
                     col_wrap = 2 #表示对col中的类别属性进行折叠,让一行变成多行 表示一行有多少图
                      )
#装饰图像

plt.rcParams['font.sans-serif']=['Simhei']
gridobj.set(xlim=(0.5,7.5),ylim=(0,50),xlabel='排量',ylabel='公路里程/加仑')
plt.show()
###有折断##

python 直线拟合 python拟合线性函数_python_11