python可视化学习四(线性拟合)

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

####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)#有噪音的情况下

在这里插入图片描述有噪音的情况下是散点图

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

在这里插入图片描述
这是在没有噪音的情况下的是直线

###画拟合线的第一步##
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+字符串的方式来读取数据

在这里插入图片描述
**事实上,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);#这个图列画出来的是一条线

在这里插入图片描述

绘制一图多线的图

####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()

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
绘制图像 重要的一些参数
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,其他的数据结构都不好使

在这里插入图片描述
注意这里 返回的都是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()

在这里插入图片描述
#这里可以准备一些每次绘图都需要的一些参数

###################预设的一些参数每次绘图可能需要的参数设置##################
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()

在这里插入图片描述

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()
###有折断##

在这里插入图片描述

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python可以使用pandas库来读取Excel文件,使用numpy库进行线性拟合。下面是具体步骤: 1. 首先,需要安装pandas和numpy库。可以使用以下命令进行安装: ``` pip install pandas pip install numpy ``` 2. 导入所需的库: ```python import pandas as pd import numpy as np from scipy import stats ``` 3. 使用pandas的`read_excel`函数读取Excel文件: ```python df = pd.read_excel('filename.xlsx') ``` 4. 提取所需的列数据: ```python x = df['x_column_name'] y = df['y_column_name'] ``` 5. 使用numpy的`polyfit`函数进行线性拟合: ```python slope, intercept, r_value, p_value, std_err = stats.linregress(x, y) ``` `slope`为拟合线的斜率,`intercept`为截距,`r_value`为拟合线与实际数据的相关系数,`p_value`为统计推断的双侧p值,`std_err`为估计的标准误差。 完整的代码示例: ```python import pandas as pd import numpy as np from scipy import stats df = pd.read_excel('filename.xlsx') x = df['x_column_name'] y = df['y_column_name'] slope, intercept, r_value, p_value, std_err = stats.linregress(x, y) ``` 以上就是使用Python读取Excel并进行线性拟合的方法。 ### 回答2: Python读取Excel并进行线性拟合相对较简单。首先,我们需要安装`pandas`和`numpy`这两个库。 ``` pip install pandas numpy ``` 然后,我们可以使用`pandas`库的`read_excel`函数读取Excel文件,并将数据存储到DataFrame中。例如,假设我们要读取名为`data.xlsx`的Excel文件中的数据。 ```python import pandas as pd # 读取Excel数据 df = pd.read_excel('data.xlsx') ``` 接下来,我们可以使用`numpy`库中的`polyfit`函数进行线性拟合。这个函数可以根据给定的x和y值,拟合出一个一次多项式(直线)。例如,我们可以使用`df['x']`作为x值,`df['y']`作为y值进行线性拟合,其中`'x'`和`'y'`是Excel文件中的列名。 ```python import numpy as np # 进行线性拟合 coefficients = np.polyfit(df['x'], df['y'], 1) ``` 拟合结果存储在`coefficients`中,其中`coefficients[0]`表示斜率,`coefficients[1]`表示截距。你可以根据拟合结果进行相应的分析和操作。 最后,如果你想绘制拟合线,可以使用`matplotlib`库。首先,安装`matplotlib`库: ``` pip install matplotlib ``` 接着,使用下面的代码绘制拟合线: ```python import matplotlib.pyplot as plt # 绘制原始散点图 plt.scatter(df['x'], df['y'], label='Original Data') # 绘制拟合线 plt.plot(df['x'], np.polyval(coefficients, df['x']), color='red', label='Fitted Line') plt.xlabel('x') plt.ylabel('y') plt.legend() plt.show() ``` 这样,你就可以读取Excel数据,并进行线性拟合,并将拟合结果可视化出来。 ### 回答3: 要用Python读取Excel并进行线性拟合,首先需要安装`pandas`和`numpy`这两个库。可以使用`pip`命令进行安装。 一旦安装好了这两个库,就可以使用以下步骤来实现线性拟合: 1. 导入所需的库: ```python import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression ``` 2. 使用`pandas`库的`read_excel`函数来读取Excel文件,将数据读取到一个DataFrame对象中: ```python data = pd.read_excel('data.xlsx') ``` 3. 提取需要进行线性拟合的自变量和因变量的值: ```python x = data['自变量列名'].values y = data['因变量列名'].values ``` 4. 将自变量和因变量转换为二维数组的形式,以便进行线性回归拟合: ```python X = x.reshape(-1, 1) Y = y.reshape(-1, 1) ``` 5. 创建线性回归模型,并进行拟合: ```python model = LinearRegression() model.fit(X, Y) ``` 6. 输出拟合的斜率和截距: ```python slope = model.coef_[0] intercept = model.intercept_ print('斜率:', slope) print('截距:', intercept) ``` 完成了以上步骤,就可以获得线性拟合的结果。这个方法可以帮助我们使用Python读取Excel并进行线性拟合分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值