pandas 处理数据
import pandas as pd
import matplotlib.pyplot as plt
# jupyter 关于绘图的参数配置
plt.style.use('ggplot')
%config InlineBackend.figure_format = 'retina'
%matplotlib inline
获取数据
数据不是很完美,接下来利用 pandas处理下
df = df.rename(columns={'Unnamed: 0':'0'})
df = df.set_index(keys=['0'])
为了分析长度和宽度之间的线性关系,所以我们先取数据
xcord = df.loc['长度']
ycord = df.loc['宽度']
plt.scatter(xcord,ycord,s=30,c='red',marker='s')
从宽度和长度的数据分布,可以看出具有一定的线性关系,接下来我们用最小二乘法来拟合这条直线
最小二乘法
原理和计算方法推荐这个博客,最小二乘法
- 假设 y = mx + c
通过公式计算 m、c
## xy 的均值
(xcord*ycord).mean()
## x 的均值乘以 y 的均值
xcord.mean()* ycord.mean()
## x 的平方均值
pow(xcord,2).mean()
## x 的均值的平方
pow(xcord.mean(),2)
# m 分子是 xy 的均值减去 x 的均值乘以 y 的均值;
# m 分母是 x 平方的均值 减去 x 的均值的平方
m = ((xcord*ycord).mean() - xcord.mean()* ycord.mean())/(pow(xcord,2).mean()-pow(xcord.mean(),2))
# c 等于 y 的均值 - m 乘以 x 的均值
c = ycord.mean() - m*xcord.mean()
# 绘图
plt.scatter(xcord,ycord,s=30,c='red',marker='s')
x=np.arange(90.0,250.0,0.1)
y=m*x+c
plt.plot(x,y)
plt.show()