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


<<:  Day 24:作品集

>>:  Day24:使i用 ForEach、ScrollView 构建 UI

【D27】熟练一下厨具-bid and ask #2:选择权价差单如何组成

前言 介绍了什麽是bid and ask,也说明了选择权这个食材,那厨具和食材要怎麽组合呢? 这边会...

Progressive Web App 个案分析: 乐天 24 导入 PWA 後带来的好处 (10)

小编在读 PWA 相关技术文章的时候,刚好读到了乐天 24 这篇导入 PWA 的个案分析,乐天 24...

第14天~

自己写看看转场-0.0从空白开始 从res右键选transition 再从Transition去新增...

Day22 AR隐形眼镜 让你闭着眼睛都能追剧!玩游戏!

本期我们来介绍前几期有提到的AR隐形眼镜。 在前几期我们有提到,我们在AR世界中,能看到的视野其实和...

Day 08. Zabbix 设定 SNMP 监控 Synology NAS DS920+

今天跟大家分享将Synology NAS DS920+透过SNMP加入监控 因为今年 Google ...