使用Python实现数据挖掘中的关联规则分析

03-01 8阅读

在数据挖掘领域,关联规则学习是一种用于发现大量数据集中项目之间的有趣关系的技术。关联规则分析最著名的应用之一是市场篮子分析(Market Basket Analysis),它可以帮助零售商了解哪些商品经常一起被购买。通过这些信息,企业可以优化货架布局、制定促销策略等。

本文将介绍如何使用Python实现关联规则分析。我们将使用mlxtend库,这是一个专门为机器学习和数据分析设计的Python库,提供了许多实用的功能来执行关联规则挖掘任务。同时,我们还会用到pandas库进行数据处理,以及matplotlibseaborn库来进行可视化展示。

环境搭建

首先需要确保安装了必要的Python库。可以通过以下命令安装:

pip install mlxtend pandas matplotlib seaborn

数据准备

为了演示关联规则分析的过程,我们将创建一个简单的模拟交易数据集。这个数据集表示顾客购买的商品组合。每个事务都是一次购物记录,其中包含了一组商品。这里我们假设有一个小型超市,销售几种常见的食品和饮料。

import pandas as pd# 创建示例数据data = {    'TransactionID': [1, 2, 3, 4, 5],    'Items': [        ['面包', '牛奶'],        ['面包', '尿布', '啤酒', '鸡蛋'],        ['牛奶', '尿布', '啤酒', '可乐'],        ['面包', '牛奶', '尿布', '啤酒'],        ['面包', '牛奶', '尿布', '可乐']    ]}df = pd.DataFrame(data)print("原始数据:")print(df)# 将数据转换为适合算法处理的形式from mlxtend.preprocessing import TransactionEncoderte = TransactionEncoder()te_ary = te.fit_transform(df['Items'])df_encoded = pd.DataFrame(te_ary, columns=te.columns_)print("\n编码后的数据:")print(df_encoded)

输出结果如下:

原始数据:   TransactionID                    Items0             1                [面包, 牛奶]1             2  [面包, 尿布, 啤酒, 鸡蛋]2             3  [牛奶, 尿布, 啤酒, 可乐]3             4  [面包, 牛奶, 尿布, 啤酒]4             5  [面包, 牛奶, 尿布, 可乐]编码后的数据:      面包     牛奶     尿布     啤酒     鸡蛋     可乐0   True    True   False   False    True   False1   True   False    True    True    True   False2  False    True    True    True   False    True3   True    True    True    True   False   False4   True    True    True   False   False    True

关联规则挖掘

接下来,我们将使用Apriori算法来找出频繁项集,并基于这些频繁项集生成关联规则。Apriori算法是一个经典的关联规则挖掘算法,它利用了“如果一个项集是频繁的,则它的所有子集也必须是频繁的”这一性质来减少搜索空间。

from mlxtend.frequent_patterns import apriori, association_rules# 找出支持度大于等于0.6的频繁项集frequent_itemsets = apriori(df_encoded, min_support=0.6, use_colnames=True)print("\n频繁项集:")print(frequent_itemsets)# 根据频繁项集生成关联规则rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)print("\n关联规则:")print(rules[['antecedents', 'consequents', 'support', 'confidence']])

运行上述代码后,你将看到类似如下的输出:

频繁项集:       support          itemsets0         0.8           (面包)1         0.8           (牛奶)2         0.8           (尿布)3         0.6           (啤酒)4         0.6      (面包, 牛奶)5         0.6      (面包, 尿布)6         0.6      (牛奶, 尿布)7         0.6  (面包, 牛奶, 尿布)关联规则:  antecedents consequents  support  confidence0     (牛奶)      (面包)       0.6         0.751     (面包)      (牛奶)       0.6         0.752     (面包)      (尿布)       0.6         0.753     (尿布)      (面包)       0.6         0.754     (牛奶)      (尿布)       0.6         0.755     (尿布)      (牛奶)       0.6         0.756  (面包, 牛奶)      (尿布)       0.6         0.757  (面包, 尿布)      (牛奶)       0.6         0.758  (牛奶, 尿布)      (面包)       0.6         0.75

结果解释

从上面的结果可以看出,在我们的小样本数据中,存在一些有趣的关联模式。例如,当顾客购买牛奶时,有75%的概率会同时购买面包;同样地,当顾客购买面包时,也有75%的概率会买牛奶。此外,我们还发现了其他一些有意义的关联规则,比如面包、牛奶和尿布之间的强关联性。

值得注意的是,实际应用中可能会涉及更大规模的数据集,因此可能需要调整参数(如最小支持度和置信度阈值)以获得更合理的规则集合。此外,还可以考虑引入额外的评价指标,如提升度(lift),来衡量规则的有效性和重要性。

可视化展示

最后,让我们通过图形化的方式来直观地展示所得到的关联规则。我们可以绘制一张网络图,节点代表不同的商品,边则表示它们之间存在的关联关系及其强度。

import networkx as nximport matplotlib.pyplot as pltdef draw_network(rules):    G = nx.Graph()    # 添加节点    for rule in rules.itertuples():        for item in rule.antecedents:            G.add_node(item)        for item in rule.consequents:            G.add_node(item)    # 添加边    for rule in rules.itertuples():        for antecedent in rule.antecedents:            for consequent in rule.consequents:                G.add_edge(antecedent, consequent, weight=rule.confidence)    # 绘制图形    pos = nx.spring_layout(G)    edge_labels = {(u, v): f"{d['weight']:.2f}" for u, v, d in G.edges(data=True)}    nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=3000, font_size=12, font_weight='bold')    nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)    plt.title('关联规则网络图')    plt.show()draw_network(rules)

这段代码将会生成一张包含各个商品节点及它们之间连接关系的图表,帮助我们更好地理解数据中的关联模式。请注意,由于绘图过程中涉及到复杂的计算,对于非常大的数据集来说,可能需要花费较长时间才能完成渲染。

总结

本文介绍了如何使用Python中的mlxtend库实现关联规则分析的基本流程。从数据准备、挖掘过程到最后的结果展示,整个过程相对简单易懂。当然,在实际项目中,还需要根据具体需求对模型参数进行调优,并结合业务背景深入解读结果。希望这篇文章能够为你提供一定的参考价值!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第694名访客 今日有15篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!