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).序列最小长度
如忘记保存,或后续再查看,可凭“订单号” 手动获取