目录
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中函数的方法。