本文代码及数据下载
文章目录
- 使用Pandas和Mlxtend进行关联分析:从药物处方数据到关联规则
- 开始之前
- 加载和准备数据
- 发现频繁项集
- 生成关联规则
- 美化输出
- 保存结果到Excel
- 绘制关联规则网络图
使用Pandas和Mlxtend进行关联分析:从药物处方数据到关联规则
关联规则分析是一个用于发现变量之间相互关联或相互依赖性的有用工具,它在市场分析、生物信息学、产品推荐、医疗诊断等领域有广泛的应用。
在本教程中,我们将探讨如何使用Python的pandas
和mlxtend
库从药物处方数据中发现频繁项集和生成关联规则。
开始之前
确保你已经安装了pandas
和mlxtend
库。如果没有,你可以通过以下pip命令安装:
pip install pandas mlxtend
加载和准备数据
首先,我们使用pandas
库读取处方数据。这里我们假设有一个名为处方与对应的药物(用于频繁项集与关联分析).xlsx
的Excel文件,包含了药物处方的数据集。
import pandas as pd# 示例数据集
data = pd.read_excel(r'处方与对应的药物(用于频繁项集与关联分析).xlsx')df = pd.DataFrame(data)
发现频繁项集
使用mlxtend.frequent_patterns
中的apriori
方法可以帮助我们找到频繁项集。这里,min_support
参数是我们用来定义项集出现频率的最小阈值。在本例中,我们设置为0.01,意味着所有出现频率至少为1%的项集都会被考虑。
from mlxtend.frequent_patterns import apriorifrequent_itemsets = apriori(df, min_support=0.01, use_colnames=True)print(frequent_itemsets)
生成关联规则
一旦我们有了频繁项集,就可以使用association_rules
方法来生成关联规则。这里,我们通过设置metric
为confidence
和min_threshold
为0.1,来找出至少有10%置信度的规则。
from mlxtend.frequent_patterns import association_rulesrules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.1)
美化输出
默认情况下,antecedents
和consequents
列会以frozenset
对象的形式呈现。为了更友好的展示,我们可以通过应用lambda
函数,将它们转换为逗号分隔的字符串。
rules['antecedents'] = rules['antecedents'].apply(lambda x: ', '.join(list(x)))
rules['consequents'] = rules['consequents'].apply(lambda x: ', '.join(list(x)))
保存结果到Excel
最后,我们将关联规则保存到一个Excel文件中。这样不仅可以方便地查看这些规则,而且还避免了frozenset
对象的直接输出问题。
rules.to_excel('关联规则分析结果.xlsx', index=False)
打印部分关联规则以供预览:
print(rules[['antecedents', 'consequents', 'support', 'confidence', 'lift']])
至此,我们完成了从加载数据、发现频繁项集到生成和保存关联规则的整个过程。
绘制关联规则网络图
因为Python中并没有很方便的接口直接绘制,所以作者自行实现了一个函数,以网络的形式可视化了各个中药材的置信度的强度。
代码量相对大,请看这篇文章