1. 程式人生 > >第8章 中醫證型關聯規則挖掘

第8章 中醫證型關聯規則挖掘

  1. 資料預處理
    首先從資料集中讀取資料。
    這裡寫圖片描述

  2. 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步選取不同的列即可,此處不再追溯。得到的結果並沒有第一條的結果那麼具有代表性。可見關聯演算法的結果也不完全有效。