某大型商超客户采购数据分析(Spark实战)

news/2024/11/14 15:13:45/文章来源:https://www.cnblogs.com/h4o3/p/18398809

写了一些使用sparksql以及spark机器学习来进行数据分析的东西,希望能给大家做一些参考

项目需求:对某大型商超客户采购数据集进行数据分析
数据来源:https://www.heywhale.com/mw/dataset/656069b19a74cc18269207c4/content

首先使用Spark读入数据集,读入文件前要先将文件转为csv格式

val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(sparConf) //建立Spark连接
val spark = SparkSession.builder().getOrCreate()
val df = spark.read.option("header", "true").csv("E:\\ShuJu\\sparkinput\\SuperStore\\SuperStore.csv") //读入文件

总体销售情况

df.agg(count("Order ID"), sum("Quantity"), sum("Sales"), sum("Profit")).show()
//对数据进行一次总体统计

5.1万个订单,销售商品总数为19.8万件,销售额1261.8万刀,利润146.7万刀


对各个地区市场的销售情况进行统计

df.groupBy("Market").agg(count("Order ID"), sum("Quantity"), sum("Sales"), sum("Profit")).show()
//对各个地区市场的销售情况进行统计


按照国家进行分组,按照订单个数进行递减排序,获取订单量前10的国家

val TopCountry = df.groupBy("Country").count() //提取出国家-订单个数的表格
TopCountry.sort(TopCountry("count").desc).show(10) //输出订单个数前10的国家

从图中可以看出美国对该商超的需求比较大,断层领先的第一名,需要优先对其客户进行关注。


对订单数排名前五的国家进行一次统计

val sumOrder = df.count() //sumOrder为所有订单个数的总和
val sumResult = TopCountry.select("count") //sumResult为订单数前五名国家的订单数总和.filter("count > 2000").rdd.map(row => row(0).asInstanceOf[Long]).reduce((a, b) => a + b)
val headConsumer = 1.0*sumResult/sumOrder
println("订单数前五名的国家在所有订单数中的占比为"+headConsumer*100+"%")

前五名为美国、澳大利亚、法国、墨西哥、德国,在全球总订单数中占比为39.7%


对订单商品类别进行查看

df.groupBy("Category").count().show() //查看所有产品类别
df.groupBy("Sub-Category").count().show() //查看所有子类别

在该数据集中共有三种产品类别,其中“办公用品”的销量最高,共产生了3万件订单,其次是“科技产品”和“家具”,分别有1万件和9千件


对产品类别下面的子类别进行统计

val SubCategory = df.groupBy("Sub-Category").count() //提取出子类别-订单个数的表格
SubCategory.sort(SubCategory("count").desc).show(10) //查看子类别中,销量最高的前十名

从销量榜上来看,粘结剂,储物盒,艺术品,纸张,椅子,手机等具有很高的销量数据。


对每一个子类别的总销售额进行统计分析

val SubCategorySale = df.select("Sub-Category", "Sales", "Quantity").withColumn("ASale", df("Sales") * df("Quantity")) //计算每一个类别的总销售额.groupBy("Sub-Category") //以类别进行分组.sum("ASale") //提取出子类别-销售额的表格SubCategorySale.sort(SubCategorySale("sum(ASale)").desc) //对每一个子类别的总销售额进行排序.withColumnRenamed("sum(ASale)", "AllSale") //重命名列名.show(10) //查看子类别中,销量额最高的前十名

从图片中可以看出手机、椅子、复印机、书架、储物盒、家用电器、配件、机器、桌子、文件夹的销售额从高到低,占有前十名



机器学习部分
这里的数据使用了前一千条来进行测试


对销售额进行预测
数据处理

    val cleanedData = df.na.fill(Map("Postal Code" -> "Unknown","Sales" -> "0","Profit" -> "0","Quantity" -> "0","Shipping Cost" -> "0","Discount" -> "0"))// 转换为数值类型val transformedData = cleanedData.withColumn("Sales", col("Sales").cast("Double")).withColumn("Profit", col("Profit").cast("Double")).withColumn("Quantity", col("Quantity").cast("Double")).withColumn("Shipping Cost", col("Shipping Cost").cast("Double")).withColumn("Discount", col("Discount").cast("Double"))// 检查转换后的数据类型transformedData.printSchema()// 删除包含 null 值的行val nonNullData = transformedData.na.drop(Seq("Quantity", "Shipping Cost", "Discount"))

回归预测

    // 特征选择val featureCols = Array("Quantity", "Shipping Cost", "Discount")val assembler = new VectorAssembler().setInputCols(featureCols).setOutputCol("features")val featureData = assembler.transform(nonNullData)// 划分数据集val Array(trainingData, testData) = featureData.randomSplit(Array(0.8, 0.2))// 训练模型val lr = new LinearRegression().setLabelCol("Sales").setFeaturesCol("features")val model = lr.fit(trainingData)// 进行预测并查看结果val predictions = model.transform(testData)predictions.select("features", "Sales", "prediction").show()// 评估模型val trainingSummary = model.summaryprintln(s"RMSE: ${trainingSummary.rootMeanSquaredError}")println(s"R2: ${trainingSummary.r2}")


sc.stop()//关闭Spark连接




手动关键词

Spark数据分析,Spark项目,Spark机器学习,sparksql,大数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833436.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024鹏城杯-re

Rafflesia 先去花指令 a = H@^jHwpsH)[jH{M/\\tBBK_|-O{W.iJZ7\\)|~zaB^H+Lwv{SS|-j@\\_[Y flag = for i in range(len(a)):flag += chr(ord(a[i])^0x18) print(flag)PXFrPohkP1CrPcU7DlZZSGd5WcO6qRB/D1dfbyZFP3ToncKKd5rXDGCA 接着是tls改了表 HElRNYGmBOMWnbDvUCgcpu1QdPqJ…

IDEA如何创建web项目及tomcat设置等

一、Java EE插件启用 1.在启动IDEA时,点击右下角并进入Plugins设置2.选择Java EE相关插件,点击OK然后重启二、创建Web项目 1.点击File->New Project,点击Java Enterprise,勾选web Application。确保已选择正确的jdk2.输入项目名称和存放路径,点击Finish完成三、设置tomca…

.net core生成二维码

安装Net.Codecrete.QrCodeGenerator dotnet add Net.Codecrete.QrCodeGenerator var qr = QrCode.EncodeText("https://baidu.com", QrCode.Ecc.Medium); var bytes = qr.ToBmpBitmap(0, 5, 0, 16777215);//5表示单个像素大小,可按需调整,0表示背景色白色,1677721…

Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解

title: Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解 date: 2024/11/14 updated: 2024/11/14 author: cmdragon excerpt: schema:beforeWrite 钩子是 Vite 提供的一个功能强大的生命周期钩子,允许开发者在 JSON Schema 被写入之前执行自定义操作。利用这个钩子,您可以…

最新项目管理软件趋势,2024年全面盘点11款工具!

2024年,项目管理软件领域继续朝着更加智能化、协同化和自动化的方向发展,满足不同规模企业的需求。随着企业对灵活性、透明度和效率的要求不断提高,项目管理软件在功能和使用方式上持续创新。以下是2024年项目管理软件的最新趋势,并涵盖了国内外多款主流项目管理工具。 1. …

PMP百科网精选:项目管理软件怎么选?这里有答案!

在选择项目管理软件时,企业和项目经理需要综合考虑多个因素,以确保所选的软件能够有效支持项目的各个阶段并满足团队的具体需求。PMP百科网的精选内容通常会根据项目管理的实际需求来推荐适合的软件。以下是选择项目管理软件时应该考虑的几个关键因素: 1. 项目的规模和复杂性…

设备管理系统功能拆解——设备巡检管理

工厂生产过程中,设备的稳定性和可靠性非常重要,设备巡检管理则是确保设备正常运行的关键环节。如果生产线上某台设备在没有任何预兆的情况下出现故障,可能会导致整条生产线停滞,影响后续的交付与客户满意度。 而设备巡检管理则是通过定期和系统性的检查,确保设备在运行过程…

DisplayPort的TYPE-C信号定义和配置功能描述

DisplayPort的备用模式重新配置TYPE-C连接器上的某些引脚以支持其他协议.例如DisplayPort备用模式的USB-C型连接器引脚分配。 VESA规范中列出了不同的解决方案,这些解决方案通过特定的连接器插脚和电线支持USB Type-C上的DP。 24引脚的USB Type-C连接器可以分为七个功能类型:…

OSS对象存储服务器(存储桶)

因公司业务的需要,需要做大批量数据存储,因而分布式存储提上日程,研究了很久发现,使用第三方或云存储确实是一个不错的选择,以下是我介绍的一个比较好用的存储桶,支持私有化部署。 1.首先,此存储软件为:MinIo,如果商用,请注意版权问题。 2.在Windows的环境下,请尽量使…

SBT40100VFCT-ASEMI低压降肖特基SBT40100VFCT

SBT40100VFCT-ASEMI低压降肖特基SBT40100VFCT编辑:ll SBT40100VFCT-ASEMI低压降肖特基SBT40100VFCT 型号:SBT40100VFCT 品牌:ASEMI 封装:TO-220F 特性:插件二极管 正向电流:40A 反向耐压:100V 恢复时间:35ns 引脚数量:3 芯片个数:2 芯片尺寸:MIL 浪涌电流:300A 漏电…

jenkins控制台不输出shell详细信息---已解决

命令执行是成功的,但是控制台没有输出ls -l 详细的内容,如下:解决:打开SSH Server下面的高级选项----勾选Verbose output in console

LeetCode刷题笔记9.9-9.15

LeetCode刷题笔记9.9-9.15 二叉树 主要学两种遍历方式:层序遍历、递归遍历 1)层序遍历BFS 基本思想:逐层遍历元素,可以借助队列,先进先出,队首出元素的同时进该元素的左右节点(这也是最简单的实现方式)队列Q:1 -> 出1 进2,3(2,3)-> 出2 进4(3,4)-> 出3 …