Apriori算法——中医病症辩证关联规则分析
·
数据读取与预处理
import pandas as pd
df = pd.read_excel('中医辨证.xlsx')
df.head()

# 简单演示下tolist()函数
df['病人症状'].tolist()

# 转换为双重列表结构
symptoms = []
for i in df['病人症状'].tolist():
symptoms.append(i.split(','))
print(symptoms)
print(symptoms)

通过apyori库来实现Apriori算法
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) # 通过字符串拼接的方式更好呈现结果

通过mlxtend库来实现Apriori算法
from mlxtend.preprocessing import TransactionEncoder
TE = TransactionEncoder() # 构造转换模型
data = TE.fit_transform(symptoms) # 将原始数据转化为bool值
data

import pandas as pd
df = pd.DataFrame(data, columns=TE.columns_) # 用DataFrame存储bool数据
df.head()

from mlxtend.frequent_patterns import apriori
items = apriori(df, min_support=0.1, use_colnames=True)
items

items[items['itemsets'].apply(lambda x: len(x)) >= 2]

from mlxtend.frequent_patterns import association_rules
rules = association_rules(items, min_threshold=0.7)
rules

for i, j in rules.iterrows(): # 遍历DataFrame二维表格的每一行
X = j['antecedents'] # 关联规则的前件
Y = j['consequents'] # 关联规则的后件
x = ', '.join([item for item in X]) # 连接前件中的元素
y = ', '.join([item for item in Y]) # 连接后件中的元素
print(x + ' → ' + y) # 通过字符串拼接打印关联规则

更多推荐



所有评论(0)