第8章 中醫證型關聯規則挖掘
阿新 • • 發佈:2019-01-29
資料預處理
首先從資料集中讀取資料。
1-6列分別進行聚類,然後分別存入新的DataFrame中。得到每一列的質心和聚類的個數。會與書中略有不同。
3.根據上面聚類的質心,替換表中的資料為類別。我採用的是cut方法。程式碼如下,不知道有沒有更方便的:
for r in range(6):
cr = result.iloc[::2,:].ix[r]
data_c.ix[:,r] = pd.cut(data_c.ix[:,r],cr,labels=[cr.name+str(i) for i in range(1,4)],right=False).astype('str' ).replace('nan',cr.name+'4')
得到的結果如下:
4.選取出需要求證關聯的的證型和結果列。進行Apriori關聯。
書中提供的程式碼在python3中有一處錯誤,修改如下:
def find_result(data):
start = time.clock()
print('\n轉換原始資料至0-1矩陣...')
ct = lambda x: pd.Series(1, index= x[pd.notnull(x)])
b = list(map(ct, data.as_matrix())) # 需要轉為list
data = pd.DataFrame(b).fillna(0 )
end = time.clock()
print('\n轉換完畢,用時:{:.2f}秒'.format(end-start))
del b
support = 0.06
confidence = 0.75
ms = '---'
start = time.clock()
print('\n開始搜尋關聯規則...')
find_rule(data, support, confidence, ms)
end = time.clock()
print('\n搜尋完成,用時:{:.2f}秒'.format(end-start))
因為是給定的資料,所以可以收斂,但不知道是不是所有的資料都可以收斂。得到結果如下,每次結果都不完全相同:
至於拓展思考的內容,基本就是在第4步選取不同的列即可,此處不再追溯。得到的結果並沒有第一條的結果那麼具有代表性。可見關聯演算法的結果也不完全有效。