多元時間序列取出來的值是一個m*n的矩陣。以UCI資料集中RobotFailure為例,資料檔案下載下傳下來是這樣的:
其中每一段資料的第一行表示狀态,其實也就是分類。每一列是一段時間序列,多段時間序列組成了MTS。具體的含義可以到官網上看。
為了在接下來的程式中對這些時間序列進行聚類以及評估聚類效果,需要讀取這些資料,并且将狀态(分類)作為标簽附在每一段資料上。鑒于标簽和時間序列的格式不一緻,本人采用了字典格式。
具體代碼如下:
def seperate(infile):
# 讀取檔案内容,鑒于lp1.data中每一行格式有差異,于是每一行單獨處理
input_file = open(infile, mode="r", encoding="utf-8")
infile_content = input_file.readlines()
# 定義空清單存儲臨時資料,将同一組資料存儲在同一清單中
list_temp = []
# 定義字典存儲臨時資料
mydict = {}
# 定義空清單存儲所有資料
data = []
# 為了友善後續程式查找,給每一個字典添加了一個序号
count = 1
# i用來标記該行是否是标簽行
i = 0
for each in infile_content:
# 因為檔案lp1.data中每一段資料間有兩行空行,是以作此處理
# 遇見空行表示一段資料已經讀取完畢,将字典内容存儲進data清單
if each == '\n' and list_temp != []:
mydict["count"] = count
mydict["time_series"] = list_temp
data.append(mydict)
count +=1
list_temp = []
mydict = {}
i = 0
elif each != '\n':
if i == 0:
# i==0 表示該行是标簽行,存儲進字典
mydict["class"] = each.strip()
i = i + 1
else:
# 如果不是标簽行,則将資料存儲進臨時清單list_temp
list_temp.append(each.split())
# 關閉檔案
input_file.close()
return data
本人學藝不精,是以處理過程顯得有些繁瑣。歡迎有更好的方法的大神們指教指教我。