在之前 CSDN 上的一篇博客 —— 將一維時間序列轉化成二維圖片中,我翻譯了一篇文章,說的是將一個時間序列信號轉換成二維圖片:
然後在文章的最後發了一個 Github 代碼,這個代碼是原文作者的代碼,有人反應代碼不能跑起來。
這裏我使用 Python 的一個第三方庫 pyts,參考官方文檔,改寫了一下。測試了一下,可以在 Pyhon3.7 上成功運行。
1. 準備一維時間序列
我使用 MATLAB 生成了一個 sin x 的時間序列圖,plot 出來是這樣的:
總共有 512 個點,也就是最大能夠生成 512*512 的圖片。
要把生成的圖片保存爲 .csv 文件:
2. 轉換成圖片
接下來就是簡單地轉換成二維圖片了,先貼代碼吧,或者可以在我的 Github 上下載,裏面有批量處理和保存 GAF 圖片的代碼:
import numpy as np
import matplotlib.pyplot as plt
from pyts.image import GASF, GADF
x = np.loadtxt(open("sinx.csv","rb"),delimiter=",",skiprows=0).T
# print(type(x),x.shape)
X = x[0:]
X = X.reshape(1, -1)
print(type(X),X.shape)
image_size = 28
gasf = GASF(image_size)
X_gasf = gasf.fit_transform(X)
print(X_gasf.shape)
print(X_gasf[0,4,2],X_gasf[0,2,4])
gadf = GADF(image_size)
X_gadf = gadf.fit_transform(X)
print(X_gadf[0,1,2],X_gadf[0,2,1])
# Show the results for the first time series
plt.figure(figsize=(16, 8))
plt.subplot(121)
plt.imshow(X_gasf[0], cmap='rainbow', origin='lower')
plt.title("GASF", fontsize=16)
plt.subplot(122)
plt.imshow(X_gadf[0], cmap='rainbow', origin='lower')
plt.title("GADF", fontsize=16)
plt.savefig('sinx.jpg')
plt.show()
運行,出來的效果是這樣的:
文中的 .csv 文件和代碼都放在我的 repository 中,如果對你有幫助,可以在 Github 中給我個 Star,這會是對我的一份鼓勵與肯定!