首页 > 其他分享 >某大型商超客户采购数据分析(Spark实战)

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

时间:2024-11-14 15:08:34浏览次数:1  
标签:数据分析 count val df sum Sales 商超 Spark Quantity

写了一些使用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.summary
    println(s"RMSE: ${trainingSummary.rootMeanSquaredError}")
    println(s"R2: ${trainingSummary.r2}")


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




手动关键词

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

标签:数据分析,count,val,df,sum,Sales,商超,Spark,Quantity
From: https://www.cnblogs.com/h4o3/p/18398809

相关文章

  • 【面试】月薪35k,5面上岸腾讯数据分析师经验贴
    经过5次面试,前不久终于进入了自己心仪的头部互联网大厂腾讯,目前主要是从事信息安全方面的数据运营分析相关工作,CDA数据分析师二级持证人。今天主要跟来分享一下面试求职中的一些经验教训。主要准备从五个方面跟大家分享一下:1、面试前的准备。2、面试中的表现,3、面试后......
  • 充电桩基础设施的时空大数据分析:以深圳市为例
    随着全球对可持续交通解决方案的需求不断增长,电动汽车(EV)作为减少交通领域碳排放的重要手段,受到了广泛的关注。然而,电动汽车的普及和发展面临着诸多挑战,其中充电基础设施的建设和管理尤为关键。为了更好地理解和解决这些问题,本篇文章利用ST-EVCDP和ST-EVCDP-v2数据集进行深入的......
  • 大数据项目-基于python实现的人才招聘数据分析与可视化平台
    《[含文档+PPT+源码等]精品基于python实现的人才招聘数据分析与可视化平台》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyog后台管......
  • 第四届计算建模、仿真与数据分析国际学术会议(CMSDA 2024)
    连续3届EI检索|ACM出版、EI检索稳且快第四届计算建模、仿真与数据分析国际学术会议(CMSDA2024)20244th InternationalConferenceonComputationalModeling,SimulationandDataAnalysis重要信息大会官网:www.icmsda.com【会议投稿、参会方式可详情了解】大会时间......
  • 三个使用R语言进行数据分析的案例【初级版】
    案例一:分析电影评分数据数据背景假设我们有一个包含电影评分的数据集,数据集包含三列:电影名称、评分和评论数量。目标绘制电影评分的直方图。计算电影评分的平均值找出评分最高的电影步骤1.1.数据导入#数据导入movie_data<-read.csv("movie_ratings.csv")1.2.数......
  • 【分享】电商商品采集商品数据分析需要用到的API
    商品采集API接口是一种应用程序接口(API),它使得开发者能够从电商平台、数据库或其他服务中快速获取商品信息。这些接口通常由电商平台或数据提供商以RESTfulAPI或SOAPAPI等形式对外开放。通过商品采集API接口,开发者可以轻松地获取商品的详细信息,如价格、库存、描述、图片等,进而在......
  • Spark 的容错机制:保障数据处理的稳定性与高效性
    Spark的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客Spark的Standalone集群环境安装与测试-CSDN博客PySpark本地开发环境搭建与实践-CSDN博客Spark程序开发与提交:本地与集群模式全解析-CSDN博客SparkonYARN:Spark集群模式之Yarn模式的原理、搭建与实践-CSDN博客S......
  • R 语言数据分析常用操作指令
    R语言数据分析常用操作指令引言R语言是一种广泛用于统计分析和图形表示的编程语言。它提供了丰富的数据处理和分析工具,使得数据科学家和分析师能够高效地处理和分析数据。本文将介绍R语言中常用的数据分析操作指令,帮助读者快速上手R语言进行数据分析。1.数据导入在......
  • Python数据分析-超市销售数据分析和可视化
    一、研究背景在现代零售业中,超市作为顾客日常消费的重要场所,承担着提供各种商品和服务的角色。随着数字化和电子商务的快速发展,消费者需求日益多样化,零售业竞争愈发激烈,了解消费者的购物行为、偏好、和消费模式成为超市经营和管理的关键因素之一。利用数据分析方法对超市销售......
  • 大数据项目-基于python实现的人才招聘数据分析与可视化平台
    《[含文档+PPT+源码等]精品基于python实现的人才招聘数据分析与可视化平台》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyog后台管......