天天看點

資料集處理方法之多元時間序列篇

多元時間序列取出來的值是一個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
           

本人學藝不精,是以處理過程顯得有些繁瑣。歡迎有更好的方法的大神們指教指教我。