1. 程式人生 > 實用技巧 >【資料分析】小案例之確診病例資料預測(只用於理解預測演算法理解)

【資料分析】小案例之確診病例資料預測(只用於理解預測演算法理解)

import pandas as pd   # 用來讀取資料的一個包. 
from sklearn.linear_model import LinearRegression  # 機器學習的包  用來做線性迴歸的-> 用咱們的資料幫我們求出一個函式
from sklearn.preprocessing import  PolynomialFeatures  # 機器學習的包 ..... 高次冪
import matplotlib.pyplot as plt  # 資料視覺化-> 用來畫圖的
import numpy as np        # 做矩陣. 


data = pd.read_csv("
data.csv", header=None) # 讀取資料 data["time"] = pd.to_datetime(data[0]) # 排序處理 print(data.head()) 0 1 2 time 0 2020-1-31 2102 5019 2020-01-31 1 2020-1-25 688 1309 2020-01-25 2 2020-1-24 444 1118 2020-01-24 3 2020-1-30 1982 4812 2020-01-30 4 2020-1-26 769 3806 2020-01-26 # 索引改成時間 data.index = data["
time"] data = data.sort_index() print(data.head()) 0 1 2 time time 2020-01-20 2020-1-20 77 27 2020-01-20 2020-01-21 2020-1-21 149 26 2020-01-21 2020-01-22 2020-1-22 571 393 2020-01-22 2020-01-23 2020-1-23 259 680 2020-01-23 2020-01-24 2020-1-24 444 1118 2020-01-24 #
計算每天的確診的總數量 totle = data[1].cumsum() # 獲取到確診病例. 然後進行累積計算 前1, 2,3,4,5,項累加 print(totle) time 2020-01-20 77 2020-01-21 226 2020-01-22 797 2020-01-23 1056 2020-01-24 1500 2020-01-25 2188 2020-01-26 2957 2020-01-27 4728 2020-01-28 6187 2020-01-29 7924 。 。 。 。 。 。 # x軸是數字 使用時間不好使用機器學習的包 totle = totle.reset_index()[1] # 去掉時間, 把時間轉化成數字. 方便計算, 2020-1-20 totle.index = totle.index + 1 print(totle) 1 77 2 226 3 797 4 1056 5 1500 6 2188 7 2957 plt.scatter(totle.index, totle) # 畫散點圖. 展示一下目前確診病例數量 plt.show()

1:線性迴歸的直線:

# 一元一次線性迴歸
liner_reg = LinearRegression() # 建立線性迴歸物件

x_data = totle.index[:, np.newaxis] # 增加維度, 拿到x

y_data = totle[:, np.newaxis] # 增加維度, 拿到y

liner_reg.fit(x_data, y_data) # 資料訓練

plt.scatter(x_data, y_data) # 畫點
plt.plot(x_data, liner_reg.predict(x_data), "red") # 畫迴歸線. 預測線, liner_reg.predict(x_data) 把x_data的值扔進去. 得到迴歸線上的y值

plt.show() # 展示資料

# 斜率 截距
# k b
# y = kx + b
# liner_reg.coef_, liner_reg.intercept_

2:線性迴歸的曲線(更合理):

poly = PolynomialFeatures(3) # 計算N冪次的公式# degree=4 ax2+bx+c ax3+bx2+cx1+dx0 升冪 1元二次方程# 1.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0次方 1次方 2次方 3次方

x_data_poly = poly.fit_transform(x_data) # 1 0. 2 1.4 2. 8 3.

liner_reg = LinearRegression() # 線性迴歸物件
liner_reg.fit(x_data_poly, y_data) # 資料訓練
# x0, x1, x2, x3, y???
# dx0+cx1+bx2+ax3 = y

plt.plot(x_data, liner_reg.predict(x_data_poly), "r") # 畫圖

# 預測值
plt.scatter(np.arange(1,50), liner_reg.predict([[i**0, i**1, i**2, i**3] for i in np.arange(1,50)])) # 幾次冪就填幾個i**n

plt.show()