
Python 数据分析入门哪些商品经常一起买一文认识关联分析与购物篮分析适合人群Python 初学者 / 数据分析入门 / 数据挖掘入门 / 教学案例分享在真实的数据分析工作中我们经常会遇到这样的问题买了面包的人是不是也经常会买牛奶买泡面的人是不是也常常顺手带上火腿肠如果学校超市要做“组合促销”哪些商品最值得放在一起推荐这些问题看起来像是在“观察购物习惯”但如果数据量一大靠人工看小票几乎不可能完成。这时候就需要一种专门的方法帮我们从大量交易数据中自动找规律关联分析关联分析最经典的应用场景就是“购物篮分析”。它的核心任务就是找出哪些商品经常一起出现它们之间有没有值得利用的关联关系。这篇文章就用一个非常贴近学生生活的案例——校园超市购物小票分析带你入门什么是关联分析什么是购物篮分析什么是关联规则什么是支持度、置信度如何用 Python 对简单购物记录做初步统计摘要关联分析主要用于在一个数据集中找出各数据项之间的关联关系其中购物篮分析是最典型的应用场景即通过交易记录分析哪些商品经常一起出现。本文以“校园超市购物小票分析”为案例介绍关联分析的基本思想、关联规则的基本形式以及支持度、置信度这两个核心指标并通过 Python 代码对购物记录进行初步统计和简单规则计算帮助初学者建立对关联分析的直观认识。一、导语超市里的“搭配销售”其实可以用数据挖出来很多人去超市买东西时都会有一些固定搭配买面包时顺手拿一盒牛奶买泡面时再带两根火腿肠买饼干时可能顺便买饮料如果你只是随便看看可能会觉得这是“生活经验”。但如果你站在超市经营者的角度就会关心一个更实际的问题能不能通过历史购物小票把这些“常见搭配”自动找出来如果能找出来就可以做很多事商品摆放更合理组合促销更精准推荐搭配更贴近真实购买习惯这就是关联分析的价值所在。二、先从一个真实案例开始校园超市想做组合促销假设学校超市最近准备做一次促销活动负责人提出了几个问题面包和牛奶是不是经常一起买泡面和火腿肠是不是经常出现在同一张小票里哪些商品最适合做“组合优惠”或者“推荐搭配”这些问题看起来很生活化但背后其实就是一个标准的数据分析任务如何从大量购物记录中找出经常一起出现的商品组合如果交易记录只有十几条也许人工还能看一看。但如果是几百条、几千条、几万条购物记录人工观察不仅慢而且不稳定。所以这类问题更适合交给数据分析方法来做。三、什么是关联分析可以把关联分析简单理解为从一堆数据中找出“哪些东西经常一起出现”的规律。在购物场景里这个问题特别直观买面包的人常常也会买牛奶买尿布的人也可能会同时买啤酒买泡面的人经常还会带上火腿肠这种“商品之间经常一起出现的规律”就是关联分析想挖出来的内容。而在购物数据里最常见的一种规律就是频繁项集也就是经常一起出现的商品集合。例如{面包, 牛奶}{泡面, 火腿肠}{牛奶, 面包, 饼干}这些都可以看作商品组合。四、什么是关联规则先别被术语吓到在关联分析里经常会看到一种写法A - B这就是关联规则。它表示的意思很简单当 A 出现时B 也有较大可能同时出现。比如面包 - 牛奶可以理解为买了面包的人也倾向于同时购买牛奶。再比如泡面 - 火腿肠可以理解为买了泡面的人常常也会顺手买火腿肠。这里有一个初学者特别容易忽略的点面包 - 牛奶牛奶 - 面包这两条规则看起来很像但它们不一定一样强。因为买面包的人不一定都买牛奶买牛奶的人也不一定都买面包所以后面就需要用一些指标来判断规则到底有没有价值。五、关联规则是怎么挖出来的关联规则的发现通常可以分成两个步骤第一步先找出频繁项集也就是先找出哪些商品组合经常一起出现。例如{面包, 牛奶}{尿布, 啤酒}{面包, 牛奶, 尿布}第二步再把频繁项集变成规则例如从{面包, 牛奶}这个组合中可以生成面包 - 牛奶牛奶 - 面包然后再判断这些规则是否足够强、足够稳定、是否值得拿来做实际应用。所以关联分析不是“直接拍脑袋写规则”而是先找高频组合再从高频组合里提炼规则。六、怎么判断一条规则有没有价值在关联分析里最常见的两个指标是支持度Support置信度Confidence你可以先这样理解支持度这个组合常不常见置信度这条规则准不准七、支持度怎么理解一句话就够了支持度可以简单理解为某个商品或某个商品组合在所有交易记录中出现的比例。例如一共有 5 张购物小票如果“牛奶”出现在 4 张小票里那么牛奶的支持度就是4 / 5 0.8也就是说支持度越高说明它出现得越频繁支持度越低说明它出现得越少支持度主要回答的问题是这个商品或组合到底常不常见八、先用代码看看哪些商品最常出现下面先用一个小型样例数据模拟校园超市的购物记录。transactions[[面包,牛奶],[面包,尿布,啤酒,鸡蛋],[牛奶,尿布,啤酒,可乐],[面包,牛奶,尿布,啤酒],[面包,牛奶,尿布,可乐]]这 5 条数据可以理解为 5 张购物小票。我们先不急着上复杂算法而是先解决一个最基础的问题哪些商品出现得最频繁Python 代码统计商品出现次数和支持度fromcollectionsimportCounter transactions[[面包,牛奶],[面包,尿布,啤酒,鸡蛋],[牛奶,尿布,啤酒,可乐],[面包,牛奶,尿布,啤酒],[面包,牛奶,尿布,可乐]]# 统计单个商品出现次数item_counterCounter()fortintransactions:item_counter.update(t)print(各商品出现次数)foritem,countinitem_counter.items():print(item,count)# 计算支持度totallen(transactions)print(\n各商品支持度)foritem,countinitem_counter.items():print(item,round(count/total,2))九、这段代码在做什么这段代码只做了两件非常基础但很重要的事。1统计每个商品出现了几次例如面包出现了几次牛奶出现了几次啤酒出现了几次这一步是在找“高频商品”。2计算每个商品的支持度支持度 出现次数 / 总交易数如果一共有 5 张小票某商品出现了 4 次那么支持度就是4 / 5 0.8这一步能帮助初学者建立“频繁出现”的概念为后面的商品组合分析做铺垫。十、运行结果应该怎么看假设运行后看到类似结果各商品出现次数 面包 4 牛奶 4 尿布 4 啤酒 3 鸡蛋 1 可乐 2 各商品支持度 面包 0.8 牛奶 0.8 尿布 0.8 啤酒 0.6 鸡蛋 0.2 可乐 0.4可以这样理解面包、牛奶、尿布出现最频繁啤酒也比较常见鸡蛋只出现了 1 次不算高频商品这时就可以进一步思考既然面包和牛奶都出现得很多那它们是不是也经常一起出现尿布和啤酒是不是也可能构成一个值得关注的组合这就自然引出了下一步不只是看单个商品出现频率而是看商品组合出现频率。十一、那置信度怎么引出来从“组合”到“规则”前面我们已经知道面包出现很多次牛奶出现很多次但问题是买了面包的人真的会顺便买牛奶吗这就不能只看支持度了因为支持度只能说明“这个商品常不常见”却不能说明“买了A以后会不会更容易买B”。这时候就要引入第二个指标置信度置信度可以简单理解为在 A 已经出现的前提下B 同时出现的可能性有多大。例如我们想判断这条规则面包 - 牛奶可以先问自己两个问题一共有多少张小票里出现了“面包”在这些出现“面包”的小票里有多少张同时也出现了“牛奶”如果出现“面包”的小票有 4 张其中有 3 张同时买了“牛奶”那么置信度就是3 / 4 0.75也就是说买了面包的人有 75% 的概率也买了牛奶。十二、用代码算一条简单规则的置信度下面就用代码来计算规则面包 - 牛奶的置信度。transactions[[面包,牛奶],[面包,尿布,啤酒,鸡蛋],[牛奶,尿布,啤酒,可乐],[面包,牛奶,尿布,啤酒],[面包,牛奶,尿布,可乐]]# 统计包含“面包”的交易数bread_count0# 统计同时包含“面包”和“牛奶”的交易数bread_milk_count0fortintransactions:if面包int:bread_count1if牛奶int:bread_milk_count1confidencebread_milk_count/bread_countprint(包含面包的交易数,bread_count)print(同时包含面包和牛奶的交易数,bread_milk_count)print(规则 面包 - 牛奶 的置信度,round(confidence,2))十三、这段代码怎么理解这段代码的思路非常直接第一步数一数“面包”出现了几次也就是规则左边的商品出现了几次。第二步数一数“面包和牛奶”一起出现了几次也就是规则左右两边同时成立了几次。第三步相除得到置信度公式就是置信度 同时出现次数 / 前件出现次数如果运行后结果是包含面包的交易数 4 同时包含面包和牛奶的交易数 3 规则 面包 - 牛奶 的置信度 0.75就表示买了面包的人有 75% 的概率也买了牛奶。这就比“只看支持度”更进一步了因为它开始真正描述一种“搭配倾向”。十四、支持度和置信度到底怎么区分很多初学者第一次学这部分最容易混淆的就是这两个指标。你可以先用一句最简单的话记住支持度看的是这件事常不常发生例如面包常不常出现面包和牛奶这个组合常不常出现置信度看的是如果 A 发生了B 也发生的把握大不大例如如果有人买了面包他有多大概率也会买牛奶所以支持度更像“热度”置信度更像“可靠程度”十五、这一课最核心要记住什么学完第一课不需要马上记住复杂算法只需要先把下面几件事想清楚1关联分析是干什么的就是从数据中找出“哪些项目之间存在一起出现的规律”。2购物篮分析是什么就是通过交易记录研究哪些商品经常被一起购买。3关联规则长什么样通常写成A - B表示 A 出现时B 也倾向于出现。4关联规则怎么挖一般分两步先找频繁项集再由频繁项集生成规则5判断规则常用哪两个指标支持度常不常见置信度准不准十六、结尾总结这一课主要解决的是一个入门问题什么是关联分析为什么要从购物小票中找“经常一起买”的商品通过校园超市购物小票案例可以先建立最基本的理解关联分析的目标是发现数据项之间的搭配规律购物篮分析是最典型、最直观的应用场景关联规则通常用A - B的形式表示挖掘规则前通常要先找到高频组合支持度和置信度是判断规则有没有价值的基础指标对于初学者来说这一课最重要的不是立刻掌握复杂算法而是先建立一种意识原来购物小票里不仅有销售记录还藏着商品之间的搭配规律。而这些规律正是后面 Apriori 算法和 FP-Growth 算法要进一步自动挖掘的内容。写在最后如果这篇文章对你有帮助欢迎点赞、收藏、评论支持一下。你在看购物数据时第一反应会关注哪个商品卖得最多哪两个商品经常一起买还是哪些商品适合做组合促销欢迎在评论区交流。