10.4 超市客户聚类分析_第1页
10.4 超市客户聚类分析_第2页
10.4 超市客户聚类分析_第3页
10.4 超市客户聚类分析_第4页
10.4 超市客户聚类分析_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

超市客户聚类分析主讲:李强任务描述在现代市场经济中,由于现代企业资源的有限性和消费需求的多样性,对客户进行必要的分类是非常重要的,这关系到未来营销战略的成败。目前很多大中型企业已经意识到了客户分类的重要性,开始寻求大数据的相关方法来解决客户分类问题。因为客户的需求具有异质性,即不是所有客户的需求都相同。由于客户需求、欲望及购买行为是多元的,所以客户需求满足呈现差异。对客户进行细分,可以让市场营销、销售人员以及企业的决策层从一个比较高的层次来观察客户信息数据仓库中的客户信息,使得企业可以针对不同类型的客户采用相应的营销策略,使企业市场营销服务活动的目标性和有效性得到提高,从而相对降低营销成本,最大限度的开发和维护客户资源,使企业的长期利润和持续发展得到保证。本任务将运用SparkSQL对超市客户数据进行探索分析,同时使用SparkMLlib提供的K-means算法构建聚类模型,最终实现对超市客户的聚类。任务分析超市客户的聚类分析的实现步骤如下。(1)Scala插件安装,包括在线安装与离线安装介绍。(2)配置Spark运行环境。(3)对超市客户数据进行数据探索,包括性别分布统计、年龄分布统计,然后对数据进行特征构建,包括构建年收入等级特征、构建消费等级特征。(4)将构建好特征的数据保存至Hive数据库中。(5)使用K-means算法构建聚类模型,实现对超市客户的聚类。10.4.1Scala插件安装1.在线安装Scala插件在线安装Scala插件的操作步骤如下。(1)打开IntelliJIDEA,单击界面右下角的“Configure”下拉列表,选择“Plugins”选项,如图10-15所示。(2)弹出“Plugins”对话框,如图10-16所示,直接单击“Scala”下方的“Install”按钮下载Scala插件即可。图10-16Plugins对话框图10-15Plugins安装1.在线安装Scala插件(3)下载完成后,单击“RestartIDE”按钮重启IDEA,如图10-17所示。图10-17Scala插件在线安装2.离线安装Scala插使用离线安装的方式安装Scala插件时,Scala插件需要提前下载至本机计算机中。本书的IntelliJIDEA版本使用的Scala插件为“scala-intellij-bin-2018.3.6.zip”,可从IDEA官网下载。离线安装Scala插件的操作步骤如下。(1)在图10-16所示的“Plugins”对话框中,单击图标,在下拉列表中选择“InstallPluginfromDisk...”选项,弹出图10-18所示的界面,选择Scala插件所在路径,单击“OK”按钮进行安装。图10-18Scala插件离线安装图10-19Scala插件安装完成10.4.2配置Spark运行环境1.创建Maven工程(1)参考项目2,创建名称定义为“MallCustomer_K”的Maven工程,MallCustomer_K工程页面如图10-20所示。(2)选择菜单栏中的“File”→“ProjectStructure”选项,打开图10-21所示的界面。也可以使用“Ctrl+Alt+Shift+S”快捷键打开。图10-20MallCustomer_K工程页面图10-21工程结构1.创建Maven工程(3)打开图10-21所示的工程结构配置界面后,选择“Libraries”选项,单击“+”按钮,选择“ScalaSDK”选项,在弹出的界面中选中2.12+版本的Scala插件单击“OK”,如图10-22所示,单击“OK”按钮即可将Scala插件加入到工程中。(4)将Hive安装目录下的/conf/hive-site.xml、Hadoop安装目录下的/etc/hadoop/core-site.xml和hdfs-site.xml下载、复制到resource文件夹中,如图10-23所示。图10-23添加配置文件图10-22添加Scala插件2.添加Spark开发依赖包选择菜单栏中的“File”→“ProjectStructure”选项,打开图10-24所示的界面。也可以使用“Ctrl+Alt+Shift+S”快捷键打开。图10-24工程结构2.添加Spark开发依赖包打开图10-24所示的工程结构配置界面后,选择“Libraries”选项,单击“+”按钮,选择“Java”选项,在弹出的界面中找到Spark安装目录下的jars文件夹,将整个文件夹导入,如图10-25所示,单击“OK”按钮即可将Spark开发依赖包加入到工程中。至此Spark的编程环境配置完成。图10-25添加Spark开发依赖包10.4.3数据探索与特征构建数据探索与特征构建超市客户数据集包含某超市通过会员卡获得一些客户的基本数据,包括客户ID、年龄、性别、年收入和消费分数。其中消费分数是根据定义的参数(例如客户行为和购买数据)分配给客户的,字段说明如表10-8所示。读取超市客户数据,并创建DataFrame。由于数据比较多,将数据集文件上传至HDFS文件系统的/user/root目录下,同时在Hive中创建名为“mall”的数据库。如代码10-24所示。本案例的完整流程都将在IDEA开发环境中通过编程实现,具体步骤如下。表10-8数据集变量说明变量名变量说明变量类型及说明CustomerID客户的唯一ID编码IntGender客户性别StringAge客户年龄IntAnnualIncome客户的年收入Int,单位(k$)SpendingScore消费分数Int,范围(1-100)代码10-24将数据上传至HDFS//将数据上传至HDFShdfsdfs-put/data/Mall_Customers.csv/user/root///在Hive中创建名为“mall”的数据库createdatabasemall;数据探索与特征构建(1)配置SparkSession并读取数据右键单击MallCustomer_K工程下的src/main/java文件夹,依次选择“New”→“ScalaClass”选项,在包下新建一个Scala类,将Scala类的类名设置为“customerDataAnalyse”,并在“Kind”右侧的下拉列表中选择“Object”选项,单击“OK”按钮,完成Scala类的创建。配置SparkSession,从HDFS中读取超市客户数据为DataFrame,并查看DataFrame的前6行数据,如代码10-25所示,返回结果如图10-26所示。代码10-25配置SparkSession并读取数据//配置SparkSessionvalspark=SparkSession.builder().master("local[*]").appName("customerDataAnalyse").enableHiveSupport().getOrCreate()spark.sparkContext.setLogLevel("WARN")//读取超市客户数据valdata=spark.read.option("header","true").option("inferSchema","true").option("delimiter",",").csv("hdfs://master:8020/user/root/Mall_Customers.csv")//查看DataFrame的前6行数据data.show(6,false)图10-26查看前6行数据数据探索与特征构建(2)性别分布统计由于男女性在对待购物这件事情上看法可能会有所差别,所以先查看不同性别的客户人数以及占比情况,如代码10-26所示,返回结果如图10-27所示。代码10-26性别分布统计importorg.apache.spark.sql.functions._println("性别分布统计,统计各性别人数,计算占比情况:")data.groupBy("Gender").count().withColumn("GenderPercent",round(col("count")/data.count()*100,2)).show(false)图10-27性别分布统计数据探索与特征构建(3)年龄分布统计不同年龄的人在对待购物这件事情上的看法也可能有所差别,因此需要查看客户年龄的分布情况,如代码10-27所示,返回结果如图10-28所示。代码10-27年龄分布统计println("年龄分布统计,统计各年龄人数,计算占比情况:")data.groupBy("Age").count().withColumn("AgePercent",round(col("count")/data.count(),2)).sort(desc("count")).show(false)图10-28年龄分布统计数据探索与特征构建(4)构建年收入等级特征客户的年收入水平同样是一个显著影响客户消费的指标,根据客户的年收入构建年收入等级特征,作为新的一列保存至新的DataFrame中,并查看分布情况,如代码10-28所示,返回结果如图10-29所示。代码10-28构建年收入等级特征//年收入等级划分,根据收入字段划分并新建收入水平字段,//<35,35~56,56~77,77~98,>98,划分为5个等级,并计算各等级数量和占比情况println("年收入等级划分:")valnewdata1=data.withColumn("IncomeLevel",when(col("AnnualIncome(k$)")<35,1).when(col("AnnualIncome(k$)")>35andcol("AnnualIncome(k$)")<=56,2).when(col("AnnualIncome(k$)")>56andcol("AnnualIncome(k$)")<=77,3).when(col("AnnualIncome(k$)")>77andcol("AnnualIncome(k$)")<=98,4).when(col("AnnualIncome(k$)")>98,5).otherwise(6))newdata1.groupBy("IncomeLevel").count().withColumn("IncomeLevelPercent",round(col("count")/data.count()*100,2)).show()图10-29年收入等级统计数据探索与特征构建(5)构建消费等级特征消费分数代表着客户对于商城的贡献和价值,也可以侧面反映出客户对于此商城的满意程度。根据用户的消费分数构建客户消费等级特征,将其作为新的一列保存至新的DataFrame中,并查看分布情况,如代码10-29所示,返回结果如图10-30所示。代码10-29构建消费等级特征//消费得分分布,根据消费字段新建消费水平等级字段,//<10,10~30,30~50,50~70,70~100,划分为5个等级,并计算各个等级的数量和占比情况println("消费等级分布:")valnewdata2=newdata1.withColumn("SpendLevel",when(col("SpendingScore(1-100)")<=10,1).when(col("SpendingScore(1-100)")>10andcol("SpendingScore(1-100)")<=30,2).when(col("SpendingScore(1-100)")>30andcol("SpendingScore(1-100)")<=50,3).when(col("SpendingScore(1-100)")>50andcol("SpendingScore(1-100)")<=70,4).when(col("SpendingScore(1-100)")>70andcol("SpendingScore(1-100)")<=100,5))newdata2.groupBy("SpendLevel").count().withColumn("SpendLevelPercent",round(col("count")/data.count()*100,2)).show()图10-30消费等级分布统计10.4.4保存数据至Hive保存数据至Hive在Xshell中输入命令启动Hive的metastore服务以及hiveserver2服务,如代码10-30所示。对客户年收入与消费分数两个字段进行重命名,方便后续机器学习的模型构建,并将修改后的客户数据写入至Hive中,如代码10-31所示。在Hive中查看已导入的数据,如图10-31所示。代码10-30启动Hive服务//启动metastore服务与hiveserver2服务hive--servicemetastore&hive--servicehiveserver2&代码10-31重命名字段并保存数据至Hive//重命名字段println("对字段名进行重命名:")valnewdata3=newdata2.withColumnRenamed("AnnualIncome(k$)","Income").withColumnRenamed("SpendingScore(1-100)","Spending")//写入数据至Hivenewdata3.write.mode("overwrite").option("header","true").saveAsTable("mall.customer")println("写入数据至Hive表...成功!")图10-31查看customer表10.4.5K-means聚类K-means聚类在MallCustomer_K工程下的src/main/java文件夹下创建类名为“kmeansModel”的Scala类,“Kind”选择“Object”选项,单击Enter键完成Scala类的创建。在构建K-means聚类模型前,需要将建模所需的特征字段类型修改为Double类型,使用StringIndexer方法将客户性别(Gender)字段的值编码成标签索引,再

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论