Apriori中医病症辩证关联规则分析

发布时间:2021-12-04 付费文章:2.0元

Apriori中医病症辩证关联规则分析

import pandas as pd
df = pd.read_excel('该数据集下载地址见页底.xlsx')
df.head()

病人编号 病人症状 0 1 消化不良,便秘 1 2 心悸,失眠 2 3 腰疼,脱发,眼干 3 4 腹胀,便秘,哮喘,胸闷气短,消化不良 4 5 神经衰弱,失眠,月经不调

df['病人症状'].tolist()
# 分割症状为多维数组
symptoms = []
for i in df['病人症状'].tolist():
    symptoms.append(i.split(','))
symptoms
[['消化不良', '便秘'],
 ['心悸', '失眠'],
 ['腰疼', '脱发', '眼干'],
 ['腹胀', '便秘', '哮喘', '胸闷气短', '消化不良'],
 ['神经衰弱', '失眠', '月经不调'],
 ['神经衰弱', '消化不良', '月经不调'],
 ['失眠', '眼干', '月经不调'],
 ['腹胀', '便秘', '哮喘', '胸闷气短', '消化不良'],
 ['腰疼', '脱发', '眼干', '心悸'],
 ['神经衰弱', '消化不良', '月经不调'],
 ['腰疼', '眼干', '月经不调'],
 ['心悸', '腹胀', '便秘', '消化不良'],
 ['心悸', '月经不调', '消化不良'],
 ['心悸', '失眠', '月经不调'],
 ['心悸', '神经衰弱', '消化不良', '便秘'],
 ['失眠', '月经不调', '胸闷气短'],
 ['心悸', '失眠', '脱发', '眼干', '月经不调'],
 ['哮喘', '胸闷气短'],
 ['心悸', '月经不调', '消化不良'],
 ['消化不良', '月经不调'],
 ['腹胀', '便秘', '消化不良'],
 ['失眠', '月经不调'],
 ['腰疼', '脱发', '眼干', '易怒'],
 ['失眠', '月经不调'],
 ['哮喘', '腰疼'],
 ['心悸', '腹胀'],
 ['失眠', '眼干', '月经不调'],
 ['失眠', '眼干', '月经不调'],
 ['消化不良', '便秘'],
 ['失眠', '月经不调'],
 ['消化不良', '便秘'],
 ['心悸', '神经衰弱', '消化不良', '便秘'],
 ['哮喘', '鼻炎', '脱发'],
 ['心悸', '腹胀'],
 ['心悸', '失眠', '月经不调'],
 ['腰疼', '眼干', '便秘'],
 ['心悸', '失眠'],
 ['心悸', '神经衰弱', '易怒', '消化不良'],
 ['神经衰弱', '消化不良'],
 ['心悸', '失眠', '月经不调'],
 ['哮喘', '胸闷气短'],
 ['心悸', '失眠', '眼干', '月经不调', '消化不良'],
 ['哮喘', '胸闷气短'],
 ['消化不良', '月经不调'],
 ['神经衰弱', '失眠', '月经不调'],
 ['心悸', '神经衰弱', '消化不良', '便秘'],
 ['腹胀', '便秘', '哮喘', '胸闷气短', '消化不良'],
 ['心悸', '月经不调', '胸闷气短'],
 ['消化不良', '便秘'],
 ['心悸', '失眠'],
 ['心悸', '失眠', '脱发', '眼干', '胸闷气短'],
 ['失眠', '哮喘', '鼻炎', '耳鸣耳聋'],
 ['腰疼', '脱发', '眼干'],
 ['失眠', '眼干', '月经不调'],
 ['心悸', '失眠', '脱发', '眼干', '月经不调'],
 ['神经衰弱', '消化不良'],
 ['心悸', '失眠'],
 ['眼干', '腰疼'],
 ['消化不良', '腰疼', '脱发', '眼干', '易怒'],
 ['哮喘', '胸闷气短'],
 ['心悸', '失眠', '腰疼', '眼干', '月经不调'],
 ['失眠', '月经不调'],
 ['神经衰弱', '消化不良', '便秘'],
 ['心悸', '神经衰弱', '消化不良'],
 ['哮喘', '胸闷气短'],
 ['心悸', '失眠', '鼻炎', '月经不调'],
 ['心悸', '眼干', '易怒'],
 ['心悸', '失眠'],
 ['心悸', '失眠', '月经不调'],
 ['腹胀', '便秘'],
 -----

# 导入apyori库自行分析
from apyori import apriori
rules = apriori(symptoms, min_support=0.1, min_confidence=0.7)
results = list(rules)
for i in results:  # 遍历results中的每一个频繁项集
    for j in i.ordered_statistics:  # 获取频繁项集中的关联规则
        X = j.items_base  # 关联规则的前件
        Y = j.items_add  # 关联规则的后件
        x = ', '.join([item for item in X])  # 连接前件中的元素
        y = ', '.join([item for item in Y])  # 连接后件中的元素
        if x != '':  # 防止出现关联规则前件为空的情况
            print(x + ' → ' + y)  # 通过字符串拼接的方式更好呈现结果
便秘  消化不良
失眠  月经不调
神经衰弱  消化不良
脱发  眼干
腰疼  眼干
失眠, 心悸  月经不调
心悸, 神经衰弱  消化不良

 

# apriori其他参数说明:
min_support -- The minimum support of relations (float).最小支持度,可用来筛选项集
min_confidence -- The minimum confidence of relations (float).最小可信度,可用来筛选项集
min_lift -- The minimum lift of relations (float).最小提升度
max_length -- The maximum length of the relation (integer).序列最小长度