一、excel中数据分析功能做线性回归练习
(一)用excel打开下载的身高体重文件夹。
如果编辑受限就点击启用编辑
(二)添加数据分析的工具:
1.文件—更多—选项
2.点击加载项,后点击跳转
3.勾选分析工具库和分析工具库—VBA,后点击确定
4.点击查看右上角有一个数据分析,则添加成功
(三)用excel表完成线性回归
1.点击数据—数据分析—回归,点击确定
2.选择体重做Y值,身高X值,选取20个数据
输入自己适合的输出区域,选择线性拟合图,点击确定
2.输出图表如下
3.双击体重,设置坐标轴格式,点击坐标轴选项,设置最大最小值,间隔单位
4.修改后图像如下
图太小了可以用鼠标拉大一点儿
5.点击选择原始数据,鼠标右键
6.选择添加趋势线,设置趋势线格式为线性,点击选择显示公式,显示R平方值
8.以同样的方法选择200个数据
8.其图像数据如下
9,继续选择2000个数据
10.获得回归图像、方程、相关系数如下
二、jupyter编程(不借助第三方库),最小二乘法,重做第1题
(一)打开jupyter notebook程序
(二)进入页面新建文件
(四)代码以及结果
- 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
df=pd.read_excel('C:\\Users\\zjh\\weights_heights.xls')
dl=df.head(20)
x=dl["Weight"]
y=dl["Height"]
plt.scatter(x,y)
plt.axis([0,180,65,72])
#计算平均值
x_mean=mean(x)
y_mean=mean(y)
num=0.0#分子
d=0.0#分母
m=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
m+=(y_i+y_mean)**2
a=num/d
b=y_mean-a*x_mean
y_hat=a*x+b
plt.scatter(x,y)#散点图绘制数据x,y
plt.plot(x,y_hat,color='coral')#绘制图线
plt.axis([80,180,65,72])#规定范围
plt.show()#调用显示
显示输出
print("所得直线方程为y=",a,"x",b)
print("R_squred:",((num/math.sqrt(d*m)**2)))
此处编译报错weight找不到,可能是因为下载的xls文件里面有两个工作表,然后代码df=pd.read_excel(‘C:\Users\zjh\weights_heights.xls’)是默认读取第一个工作表,所以我打开该文件把要用到的拖到了第一个再运行就没报错了
2.200组数据
结果:
3.2000组数据
结果:
三、jupyter编程,借助skleran,重做第1题
(一)20组数据
1.代码部分
(1)调用包
记得修改下面读取excel文件的路径
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:\\Users\\zjh\\weights_heights.xlsx')
(2)读取数据
df.shape
(3)赋值变量取20组数据
x=array(df[['Weight']].values[:20,:])
y=array(df[['Height']].values[:20,:])
(4)调用线性回归函数
model=LinearRegression(fit_intercept=True,normalize=True)
model.fit(x,y)
(5)输出斜率
print(model.coef_)
(6)输出截距
(7)输出线性回归表达式
(8)计算R的平方
model.score(x,y)
(9)绘图输出
plt.figure()
plt.scatter(x,y)#散点图绘制原始数据
plt.plot(x,y_hat,color='coral')
plt.show()
(二)200组数据
1.代码,其他与第一题类似
结果:
(三)2000组数据
1.代码与第一题类似
2.结果
四、总结
用python写代码加深了我对线性回归的认识,然后excel和jupyter借用skleran来做线性回归比较简单,不用对线性回归有多少了解也能做,在本次实验中由于下载的文件有两个工作表,导致读取excel文件时读取到了非目标工作表导致编译出错。修改了相关事物后得以成功。
参考链接:
https://blog.csdn.net/weixin_56102526/article/details/120495151