初识线性回归(Excel&Python实现)

1、通过Excel对数据进行线性分析

①、打开Excel文件(这个文件在最后有下载链接)

打开文件之后,文件应该是这样的
在这里插入图片描述

②、添加数据分析工具

点击Excel左上角的文件选项:
在这里插入图片描述
点击右下角的‘选项’按钮:
在这里插入图片描述
进入到Excel选项界面:点击加载项,然后再点击其中的‘转到’
在这里插入图片描述
进入到加载项界面,将分析工具库和分析工具库-VBA两个选项勾选上,然后点击确定即可
在这里插入图片描述
最后回到最开始的界面中,点击‘数据’选项,如果图中标识的位置也出现了数据分析,那么就添加成功了在这里插入图片描述

③、进行数据分析:

点击刚才添加的数据分析按钮,并将分析工具选为回归,然后点击确定
在这里插入图片描述
将身高选为自变量x,体重为因变量y,并选择合适的输出位置, 并勾选上线性拟合图选项
在这里插入图片描述
结果图是这样的:
在这里插入图片描述
图标:
在这里插入图片描述
设置范围和尺度:
双击图表,先修改y轴的范围和尺度,选择“垂直(值)轴”
在这里插入图片描述
然后点击方框中的按钮,并设置好最适合的参数
在这里插入图片描述
调整之后的图表:
在这里插入图片描述
同理,这里的x轴也可以进行同样的修改。

选择图表中的原始数据,右键点击,并选择添加趋势线:
在这里插入图片描述
将趋势线设置成下图所示:
在这里插入图片描述
设置完成:
在这里插入图片描述
按照上面的步骤继续选择200个数据:结果图表如图所示
在这里插入图片描述
再选择2000个数据:
在这里插入图片描述

2、通过jupyter进行数据分析(不适用第三方库),再次进行上面的试验

①、打开jupyter(点击方框中的按钮):

在这里插入图片描述

②、并新建一个文件:

在这里插入图片描述

③、了解最小二乘法求回归曲线的步骤

1、求出x,y的数学期望,分别为x_mean, y_mean
2、斜率b:(∑(xi-x_mean)²) / (∑(xi-x_mean)(yi-y_mean))
在这里插入图片描述 截距a:a = y_mean - b * x_mean
在这里插入图片描述
3、方程:y=bx+a

④、编写代码:(读取20行数据)

import pandas as pd
import numpy as np
from numpy import array
from numpy import mean
import os
import matplotlib.pyplot as plt
import math

'''
求出x,y的数学期望,分别为x_mean, y_mean
斜率b:(∑(xi-x_mean)²) / (∑(xi-x_mean)(yi-y_mean))
截距a:a = y_mean - b * x_mean
'''
df=pd.read_excel('C:\\迅雷下载\\weights_heights.xls', header=0)  # 从这个路径中读取数据
dl=df.head(20)
x=dl["Weight"]
y=dl["Height"]

#计算平均值
x_mean=mean(x)
y_mean=mean(y)
num=0.0#分子
d=0.0#分母

for x_i,y_i in zip(x,y):
    num+=(x_i-x_mean)*(y_i-y_mean)
    d+=(x_i+x_mean)**2
    
b=num/d
a=y_mean-b*x_mean
y_hat=b*x+a
plt.scatter(x,y)#散点图绘制数据x,y
plt.plot(x,y_hat,color='coral')#绘制图线
plt.axis([80,180,65,72])#规定范围
plt.show()#调用显示

⑤、结果

在这里插入图片描述

⑥、200行数据

修改代码,找到dl=df.head(20),将括号中的20修改为200,读取200行数据

dl=df.head(200)

在这里插入图片描述

⑦、2000行代码

将代码中的20修改为2000
在这里插入图片描述

3、通过jupyter进行数据分析(借助skleran),再次进行上面的试验

①、20行代码

import numpy as np
import pandas as pd
from contextlib import contextmanager as _contextmanager
import logging
from numpy import array
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import math


df=pd.read_excel('C:\\迅雷下载\\weights_heights.xls', header=0)  
df.shape  # 读取数据

# 读取20行数据
x=array(df[['Weight']].values[:20,:]) 
y=array(df[['Height']].values[:20,:])

# 线性回归方程
model=LinearRegression(fit_intercept=True,normalize=True)  
model.fit(x,y)  

# 分别表示截距和斜率
a=model.intercept_
b=model.coef_

y_hat=b*x+a

plt.figure()
plt.scatter(x,y)#散点图绘制原始数据
plt.plot(x,y_hat,color='coral')
plt.show()

②、结果(程序运行成功之后会有一个警报,但是不会妨碍结果的正常输出)

在这里插入图片描述

③、200行代码

修改代码:找到这两行代码

x=array(df[['Weight']].values[:20,:]) 
y=array(df[['Height']].values[:20,:])

将代码中的20改为200即可
在这里插入图片描述

④、2000行代码

跟上面一样修改代码
在这里插入图片描述

4、测试文件

注意:这个xls文件中有两个sheet,但是这个程序读取的是第一个,而数据在第二个sheet中,所以最好将第一个sheet删除掉
在这里插入图片描述
百度网盘链接 验证码:2023

5、总结

在这次试验中遇到的第一个问题,也是困扰了我很久的问题,就是在上面说到的第一个sheet和第二个sheet的问题,这个程序只能从第一个sheet中读取到数据,但是我又没有注意到xls中有两个sheet,所以在这里卡了有点久。
同时,为了写这个程序,也应该要了解最小二乘法求回归曲线的方法和调用skleran中函数的方法。

6、引用

引用文章

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值