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