iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
AI & Data

資料三十-那些最基本的資料處理與分析技能系列 第 24

【Day24-序列】時間序列型資料的基本處理——以0050股票價格為例:尋找峰值、移動平均、曲線擬合

前面我們雖然有講到除了基本的數值類型資料以外,一共主要會有文字、圖片、聲音這三大類型,而在數值類型的資料裡面還有一種特別的類型是(時間)序列型的資料

今日範例-0050股價資料

import twstock
stock = twstock.Stock("0050")
price = np.array(stock.price)
date = stock.date
plt.plot(date,price)
plt.xticks(rotation = 30)
plt.title("0050")

序列資料處理技巧

以股票資料為例,我們當然會希望找出價格的高點,那對於一個序列類型的資料要怎麼找出它的高點呢?這邊我們可以使用scipy的套件來做到這件事情

尋找峰值

# 尋找峰值
from scipy.signal import argrelextrema
max_index = argrelextrema(price, np.greater)[0]
peak = price[max_index]  
print(f"peak:{peak}")
peak:[141.   142.55 141.95 141.6  140.5  140.   137.05 135.35]
# 繪圖峰值
plt.plot(date,price)
plt.xticks(rotation = 30)
for index in max_index:
    plt.scatter(date[index],price[index],c="r")
plt.show()

移動平均

而因為時間序列類型的資料經常伴隨著噪聲,通常一個可以同時儘量維持序列的趨勢卻又可以一定程度的去除掉它局部的噪音影響

# 計算移動平均
series_price = pd.Series(price)
series_price_ma3 = series_price.rolling(3).mean()
series_price_ma5 = series_price.rolling(5).mean()
# 移動平均繪圖比較
p1 = plt.plot(date,series_price)
p2 = plt.plot(date,series_price_ma3)
p3 = plt.plot(date,series_price_ma5,c="r")
plt.legend(['origin', '3 day MA', "5 day MA"])
plt.xticks(rotation = 30)
plt.title("0050")

曲線擬合

然後這個技巧倒不一定是序列類型資料專用,不過對於需要簡單的用線性模型去擬合一串點的時候還是挺好用的,這邊我們用numpy.polyfit來做到這件事情

# 取出np類型的資料
y = np.array(series_price_ma5)[4:]
x = np.array(range(len(y)))
# 用polyfit去擬合曲線
parameter=np.polyfit(x,y,10) # 以一個10次方程去擬合
parameter_fn=np.poly1d(parameter)
plt.plot(parameter_fn(x),c="r",linestyle="--")
plt.plot(x,y)


上一篇
【Day23-降維】相信你的眼睛,在訓練模型之前一定要做的事情——利用降維技巧檢視資料分群狀態:PCA, tSNE, SVD, SOM
下一篇
【Day25-評估】連韓組長也混淆的混淆矩陣?——學會正確解讀模型價值的常用指標:Recall, Precision, Specificity, F1-Score
系列文
資料三十-那些最基本的資料處理與分析技能30

尚未有邦友留言

立即登入留言