数据读取与预处理

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)  # 通过字符串拼接打印关联规则

 

更多推荐