Mapreduce之购物篮分析

article/2025/1/12 21:05:18

Mapreduce之购物篮分析

购物篮分析是一个流行的数据挖掘技术,在市场营销中这个技术可以揭示不同商品或商品组之间的相似度

MBA原理

通过MapReduce框架,设计相关的解决方案生成交易的关联规则,从而查找最常见的商品对

应用领域

  • 信用卡交易分析
  • 电话呼叫模式分析
  • 欺诈识别
  • 电信服务交易分析
  • 大型在线零售商的每日/每周交易分析

样例输入

crackers,bread,banana
crackers,coke,butter,coffee
crackers,bread
crackers,bread
crackers,bread
crackers,bread,coffee
butter,coke
butter,coke,bread,crackers

样例输出

在这里插入图片描述

mapper阶段任务

maper阶段的map()函数根据购物篮子中的商品生成如下键-值对
[<crackers,icecream>,1]
[<crackers,coke.,1]
但是在程序自动分类过程中会和出现如下现象
购物篮T1:crackers,icecream,coke
购物篮T2:icecream,coke,crackers
根据关联规则,对于T1会生成如下规则
[(crackers,icecream),1]
[(crackers,coke),1]
[(icecream,coke),1]
对于T2则会生成如下规则
[(icecream,coke),1]
[(icecream,crackers),1]
[(coke,crackers),1]
从中我们可以看到,有六对规则,但是我们发现(crackers,icecream)和(icecream,crackers)是一样的,在这里会被分成不同的规则,所以在生成规则之前需要对商品按照字母顺序进行排序,就可以避免这个问题

mapper阶段编码

在这个过程中使用快速排序算法对商品进行排序

package com.deng.MBA;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;public class MBAMapper extends Mapper<LongWritable,Text,Text,IntWritable>{int numberOfPairs;public static final int DEFAULT_NUMBER_OF_PAIRS=2;protected void setup(Context context) throws IOException,InterruptedException{this.numberOfPairs=context.getConfiguration().getInt("number.of.pairs",DEFAULT_NUMBER_OF_PAIRS);}public void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException{String line=value.toString();List<String> items=convertItems(line);if((items==null)||items.isEmpty()){return ;}generateMapperOutput(numberOfPairs,items,context);}private static List<String> convertItems(String line){if((line==null)||line.length()==0){return null;}String[] tokens=line.split(",");if((tokens==null)||(tokens.length==0)){return null;}List<String> items=new ArrayList<String>();for(String token:tokens){if(token!=null){items.add(token.trim());}}return items;}private void generateMapperOutput(int numberOfPairs, List<String> items, Context context)throws IOException, InterruptedException{List<List<String>> sortedCombinations =Combination.findSortedCombinations(items,numberOfPairs);for(List<String> itemsList: sortedCombinations){context.write(new Text(itemsList.toString()),new IntWritable(1));}}
}

其中combinations是一个简单的工具,使用Combinations.generateCombinations(s1,s2,…,sn)方法可以生成给定的集合,如下所示
假设购物篮为{a,b,c}
假设生成具有两个商品的规则,则分类结果如下所示
[a,b],[a,c],[b,c]

Combination编码

package com.deng.MBA;import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;public class Combination {public static <T extends Comparable<? super T>> List<List<T>>findSortedCombinations(Collection<T> elements,int n){List<List<T>> result =new ArrayList<List<T>>();if(n==0){result.add(new ArrayList<T>());return result;}List<List<T>> combinations=findSortedCombinations(elements,n-1);for(List<T> combination:combinations){for(T element:elements){if(combination.contains(element)){continue;}List<T> list=new ArrayList<T>();list.addAll(combination);if(list.contains(element)){continue;}list.add(element);Collections.sort(list);if(result.contains(list)){continue;}result.add(list);}}return result;}public static void main(String[] args) {List<String> elements = Arrays.asList("a", "b", "c", "d", "e");List<List<String>> combinations = findSortedCombinations(elements, 2);System.out.println(combinations);}
}

reduce阶段任务

这个阶段就是对规则的支持度进行统计

reduce阶段编码

package com.deng.MBA;
import java.io.IOException;
import java.io.WriteAbortedException;import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Reducer;public class MBAReduce extends Reducer<Text,IntWritable,Text,IntWritable> {public void reduce(Text key,Iterable<IntWritable> values,Context context)throws IOException,InterruptedException{int sum=0;for(IntWritable value:values){sum+=value.get();}context.write(key,new IntWritable(sum));}
}

完整代码

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;
import java.util.*;public class MBADriver  {public static class Combination {public static <T extends Comparable<? super T>> List<List<T>>findSortedCombinations(Collection<T> elements, int n){List<List<T>> result =new ArrayList<List<T>>();if(n==0){result.add(new ArrayList<T>());return result;}List<List<T>> combinations=findSortedCombinations(elements,n-1);for(List<T> combination:combinations){for(T element:elements){if(combination.contains(element)){continue;}List<T> list=new ArrayList<T>();list.addAll(combination);if(list.contains(element)){continue;}list.add(element);Collections.sort(list);if(result.contains(list)){continue;}result.add(list);}}return result;}}public static class MBAMapper extends Mapper<LongWritable,Text,Text,IntWritable> {int numberOfPairs;public static final int DEFAULT_NUMBER_OF_PAIRS=2;protected void setup(Context context) throws IOException,InterruptedException{this.numberOfPairs=context.getConfiguration().getInt("number.of.pairs",DEFAULT_NUMBER_OF_PAIRS);}public void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException{String line=value.toString();List<String> items=convertItems(line);if((items==null)||items.isEmpty()){return ;}generateMapperOutput(numberOfPairs,items,context);}private static List<String> convertItems(String line){if((line==null)||line.length()==0){return null;}String[] tokens=line.split(",");if((tokens==null)||(tokens.length==0)){return null;}List<String> items=new ArrayList<String>();for(String token:tokens){if(token!=null){items.add(token.trim());}}return items;}private void generateMapperOutput(int numberOfPairs, List<String> items, Context context)throws IOException, InterruptedException{List<List<String>> sortedCombinations = com.deng.MBA.Combination.findSortedCombinations(items,numberOfPairs);for(List<String> itemsList: sortedCombinations){context.write(new Text(itemsList.toString()),new IntWritable(1));}}}public static class MBAReduce extends Reducer<Text,IntWritable,Text,IntWritable> {public void reduce(Text key,Iterable<IntWritable> values,Context context)throws IOException,InterruptedException{int sum=0;for(IntWritable value:values){sum+=value.get();}context.write(key,new IntWritable(sum));}}public static void main(String[] args) throws Exception{FileUtil.deleteDirs("output");Configuration conf=new Configuration();String[] otherArgs=new String[]{"input/MBA","output","3"};if(otherArgs.length!=3){System.out.println("参数错误");}Job job=new Job(conf,"MBA");job.getConfiguration().setInt("number.of.pairs",Integer.parseInt(otherArgs[2]));FileInputFormat.addInputPath(job,new Path(otherArgs[0]));FileOutputFormat.setOutputPath(job,new Path(otherArgs[1]));job.setJarByClass(MBADriver.class);job.setMapperClass(MBAMapper.class);job.setReducerClass(MBAReduce.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);job.setOutputValueClass(Text.class);job.setOutputKeyClass(IntWritable.class);job.setCombinerClass(MBAReduce.class);System.exit(job.waitForCompletion(true)?0:1);}
}

写在最后

代码是个很神奇的东西,多看看别人优秀的代码才能提升自己的代码风格


http://chatgpt.dhexx.cn/article/5qHmo7S6.shtml

相关文章

【项目实战】Python基于Apriori关联规则算法实现商品零售购物篮分析

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 购物篮分析是商业领域最前沿、最具挑战性的问题之一&#xff0c;也是许多企业重点研究的问题。购物篮分…

数据挖据——如何利用SQL语句实现购物篮分析?

提到购物篮分析&#xff0c;就不得不说到一个无数次被提及的故事——啤酒与尿不湿的故事&#xff0c;这个经典案例常被拿到各种会场、餐桌和文章中&#xff0c;以至于听到耳朵都要磨成茧。购物篮分析&#xff0c;就是分析一段时间内客户购物篮中商品的规律&#xff0c;通过数据…

Apriori算法:购物篮分析

一、作业要求 编写Apriori算法程序&#xff0c;平台自选。用Apriori 算法找出频繁项集&#xff0c;支持度和置信度根据情况自行设定。找出强关联规则以及相应的支持度和置信度完成挖掘报告数据部分&#xff1a; 数据已上传网盘&#xff1a; 链接&#xff1a;https://wwn.lanzo…

【数据分析】产品关联度分析和购物篮分析(1)

产品关联度分析 关联分析是发现交易数据库中不同商品&#xff08;项&#xff09;之间的联系&#xff0c;主要应用于电商网站 推荐、线下零售门店商品摆放等场景中。 关联规则&#xff1a; 1.支持度&#xff08;support&#xff09;&#xff1a;数据集中包含某几个特定项的概率…

【Clemetine】市场购物篮分析

一、实验目的及要求 通过项目的训练学习&#xff0c;了解数据挖掘在零售业中应用状况&#xff0c;掌握数据挖掘在零售业中分析方法及过程。 二、实验仪器设备 系统环境&#xff1a;Windows10 软件环境&#xff1a;SPSS Clementine11.1 三、实验内容 &#xff08;一&#x…

购物篮分析模型实例——数据分析必备模型

要想做好数据分析必定要理解和熟悉掌握各类数据分析模型&#xff0c;但大部分文章只是给你罗列出了有哪几种数据分析模型及对应理论&#xff0c;并未用实例来辅助说明。 很多时候这些模型都进了收藏夹吃灰&#xff0c;大家也没有深刻理解这种分析模型&#xff0c;等到下次要开始…

商品零售购物篮分析——关联挖掘

一、实验目的 掌握对数据进行预处理和探索性分析的方法&#xff1b;掌握如何利用Apriori关联规则算法进行购物篮分析。 二实验内容 构建零售商品的Apriori关联规则模型&#xff0c;分析商品之间的关联性&#xff1b;根据模型结果给出销售策略。 三、实验操作步骤和结果分析…

使用Apriori关联规则算法实现购物篮分析

Apriori算法是一种挖掘关联规则的频繁项集算法&#xff0c;其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集&#xff0c;而且算法已经被广泛的应用到商业&#xff0c;网络安全等各个领域。 购物篮分析是通过发视频顾客再一次购物行为中放入购物篮中不同…

r语言商品购物篮分析

商品购物篮分析 现代商品种类繁多&#xff0c;顾客往往会由于需要购买的商品众多而变得疲于选择&#xff0c;且顾客并不会因为商品选择丰富而选择购买更多的商品。 对于某些商品&#xff0c;顾客会选择同时购买&#xff0c;如面包与牛奶、薯片与可乐等&#xff0c;当面包与牛…

销售需求丨购物篮分析

​ BOSS&#xff1a;那个谁&#xff0c;对&#xff0c;就是你&#xff0c;你给我研究研究咱商场物品摆放是否合理&#xff1f;&#xff01; 白茶&#xff1a;&#xff08;Excuse me&#xff1f;&#xff09;…BOSS&#xff0c;那个我就是个码字的&#xff01; BOSS&#xff1a;…

[Python] 电商平台用户的购物篮分析

目录 一、背景1. 项目描述2. 数据描述 二、相关模块1. 相关模块2. 数据导入3. 数据处理 三、商品销售分析1. 日销售情况2. 月销售情况3. 观察畅销品 四、 购物篮分析1. 购物篮系数2. 指定商品的购物篮系数3. 指定商品的人气指数 五、用户行为分析1. 用户的消费情况2. 用户初次购…

【Python数据挖掘】购物篮分析

购物篮分析 变量解释 变量含义说明ReceiptID收据单号Value支付金额pmethod支付渠道1现金&#xff0c;2信用卡&#xff0c;3电子支付&#xff0c;4其他sex性别1男性&#xff0c;2女性homeown是否有住宅1有&#xff0c;2无&#xff0c;3未知income收入age年龄其他其他购买的各种…

python数据分析与挖掘实战(商品零售购物篮分析)

一、引言 购物篮分析是商业领域最前沿、最具挑战性的问题之一&#xff0c;也是许多企业重点研究的问题。购物篮分析是通过发现顾客在一次购买行为中放入购物篮中不同商品之间的关联&#xff0c;研究顾客的购买行为&#xff0c;从而辅助零售企业制定营销策略的一种数据分析方法。…

数据挖掘实战—商品零售购物篮分析

文章目录 引言一、数据探索性分析1.数据质量分析1.1 缺失值分析1.2 异常值分析1.3 重复数据分析 2.数据特征分析2.1 描述性统计分析2.2 分布分析2.2.1 商品热销情况分布分析2.2.2 按类别划分商品销量分布分析2.2.3 商品内部结构分布分析 二、数据预处理三、模型构建 案例数据百…

购物篮分析( Apriori算法)—零售数据实战

购物篮分析&#xff08; Apriori算法&#xff09;—零售数据实战 【开题】在我从事零售行业的期间&#xff0c;曾拜读过"啤酒与尿布"一书&#xff0c;对于沃尔玛的购物篮分析模型产生极大的兴趣。由于网上对Aprioro算法介绍的内容较少&#xff0c;故而本人不得已回去…

商品零售购物篮分析

1 案例背景 购物篮分析是通过发现顾客在一次购买行为中放入购物篮中不同商品之间的关联&#xff0c;研究顾客的购买行为&#xff0c;从而辅助零售企业制定营销策略的一种数据分析方法。 通过对商场销售数据进行分析&#xff0c;得到顾客的购买行为特征&#xff0c;并根据发现的…

数据分析一定要懂的模型——购物篮模型

要想做好数据分析必定要理解和熟悉掌握各类数据分析模型&#xff0c;但网络上的大部分文章只是给你罗列出了有哪几种数据分析模型及对应理论&#xff0c;并未用实例来辅助说明。 很多时候&#xff0c;看完就只是看完&#xff0c;并没有深刻理解这种分析模型&#xff0c;等到下…

购物篮分析的基本概念、商业价值与算法介绍

作者 | gongyouliu 编辑 | auroral-L 全文共4915字&#xff0c;预计阅读时间45分钟。 购物篮分析的基本概念、商业价值与算法介绍 1. 什么是购物篮分析 2. 购物篮分析的商业价值 2.1 指导线下门店商品排列、摆放 2.2 优化线下采购、供应链与库存 2.3 为活动营销提供数据支…

给Windows系统配置host

以管理员身份运行命令提示符&#xff1b;注意&#xff1a;一定要管理员身份运行&#xff0c;否则后面存host的时候会出现没有修改权限的问题在命令行中键入&#xff1a;notepad&#xff0c;然后回车&#xff1b;这是打开记事本命令在记事本中工具栏选择“文件-打开”&#xff0…

#vue# 【二】本地电脑如何配置host文件?

#vue# 本地电脑如何配置host文件&#xff1f; &#xff08;1&#xff09;host概念 在进行请求接口之前&#xff0c;我们需要先配备好host Hosts&#xff1a;它是一个没有扩展名的系统文件&#xff0c; 而它的的基本作用&#xff0c;就是将一些我们个人常用的网址和相对应的IP…