当前位置: 首页 > backend >正文

Spark离线数据处理实例

工具:Jupyter notebook

# 一、需求分析

     (1)分析美妆商品信息,找出每个“商品小类”中价格最高的前5个商品。

    (2)每月订购情况,统计每个月订单的订购数量情况和消费金额。

    (3)按订单的地区,统计各地在订购数量上的排行情况,取最高的前20个城市。

    (4)按商品的类型,分别统计各美妆产品的订购数量排行,以了解产品的畅销程度和需求情况。

    (5)分析各省的美妆订购数量,以了解哪些地方的商品需求量最大。

    (6)通过RFM模型挖掘客户价值。

# 二、准备工作

   1.数据清洗(Pandas)

    2.窗口操作(Spark SQL)

    3.数据可视化(pyecharts)

###  1.数据清洗(Pandas)

#### (1)模块库的安装

pip install pandas==1.1.5

pip list

pip show pandas

pip install pyecharts==1.9.0

pip show pyecharts

pip install pyspark-stubs==2.4.0

pip show pyspark-stubs

#### (1)导入库

import pandas as pd

如果pandas导入错误执行图上代码,否则跳过此步骤

#### (2)记载数据文件信息

prod_info=pd.read_csv('beauty_prod_info.csv')

prod_info=pd.read_csv('/home/spark/beauty_prod_info.csv')

prod_info.head(10)

prod_sales=pd.read_csv('/home/spark/beauty_prod_sales.csv')

prod_sales.head()

#### (3、4)查看加载进来的数据文件基本信息

print(prod_info)

print(prod_sales)

prod_info.info()

prod_sales.info()

#### (5)检查是否存在完全重复的数据行

prod_info[prod_info.duplicated()]

prod_info[prod_info.duplicated()].count()

prod_sales[prod_sales.duplicated()]

prod_sales[prod_sales.duplicated()].count()

#### (6)检查美妆商品信息中的“商品编号”是否存在重复值

prod_info[prod_info['商品编号'].duplicated()]

prod_sales[prod_sales['订单编码'].duplicated()]

(7)统计美妆商品信息数据是否存在“空值”字段

因为如果商品编号有重复,后面在关联两个数据文件时就会遇到问题

prod_info.isnull()

prod_info.isnull().sum()

prod_sales.isnull().sum()

至此,美妆商品信息数据文件的初步分析工作就结束了,结论是不存在数据异常的情况。接下来继续分析美妆商品订单数据文件,加载美妆商品订单数据文件beauty_prod_sales.csv,并查看前5行的数据

(8)将重复数据去除并重建Pandas内部的索引,再查看重复数据是否成功去除

prod_sales.drop_duplicates(inplace=True) #删除重复的数据并保留一条

prod_sales[prod_sales.duplicated()].count() #查看是否有重复数据

prod_sales.head()

prod_sales.reset_index(drop=True,inplace=True) #重建记录的索引,确定没有重复数据

prod_sales[prod_sales.duplicated()].count()

print(prod_sales)  #31452变为31446

(9)采取“bfill向后”和“ffill向前”的填充方式,即当出现“空值”时,分别参考上一条数据和下一条数据的值

(此时有两种解决方案:一是将“空值”字段的数据行直接删除;二是参考其他正常的数据进行填充,或者 以某种数学手段进行填充。)

prod_sales.fillna(method='ffill',inplace=True)  #参考前向数据填充 保证不重复

prod_sales.fillna(method='bfill',inplace=True)  #参考后向数据填充 保证不重复

prod_sales.isnull().sum()

prod_sales.info()

(10)下面对存在问题的订单日期、订购数量、订购单价这几个字段进行处理
错误原因:

prod_sales['订单日期'].astype('datetime64')        #转换类型 说明有非法字符

 prod_sales['订购数量'].astype('int64')    #多了文字(个)    

prod_sales['订购单价'].astype('float64')  #多了元

转换类型:

prod_sales['订单日期'] =prod_sales['订单日期'].apply(lambda x :pd.to_datetime(x,format='%Y#%m#%d') \

                                             if isinstance (x,str) and '#' in x else x)   #将有#和字符串的转换为日期格式

prod_sales['订单日期']=prod_sales['订单日期'].astype('datetime64')

prod_sales['订购数量']=prod_sales['订购数量'].apply(lambda x :x.strip('个') if isinstance(x,str) else x)

prod_sales['订购数量']=prod_sales['订购数量'].astype('int64')

prod_sales['订购单价']=prod_sales['订购单价'].apply(lambda x :x.strip('元') if isinstance(x,str) else x)

prod_sales['订购单价']=prod_sales['订购单价'].astype('int64')

prod_sales.info()

http://www.xdnf.cn/news/7532.html

相关文章:

  • 20250520在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04.3时跑通4G模块EC20
  • 大模型——多模态检索的RAG系统架构设计
  • CentOS系统上挂载磁盘
  • 【图像大模型】Stable Diffusion 3 Medium:多模态扩散模型的技术突破与实践指南
  • CentOS Stream安装MinIO教程
  • 算力:数智时代的核心生产力引擎​
  • idea 插件开发自动发布到 nexus 私服中(脚本实例)
  • 界面控件DevExpress WinForms v24.2——PDF Viewer功能升级
  • Visual Studio 2019/2022:当前不会命中断点,还没有为该文档加载任何符号。
  • 基于海绵结构的密码杂凑算法Master
  • 云原生主要架构模式
  • C++(4)if的终极使用 +三目运算符
  • Java 08集合
  • 网络安全之网络攻击spring临时文件利用
  • 2024年热门AI趋势及回顾
  • CPQ报价系统多层战略,加快企业销售周期
  • 利用Spring Boot和Redis构建高性能缓存系统
  • List优雅分组
  • 开源CMS系统中哪些常见的安全漏洞最需要注意?
  • AWS CodePipeline+ Elastic Beanstalk(AWS中国云CI/CD)
  • HCIP实验五
  • MyBatis实战指南(一)MyBatis入门基础与利用IDEA从零开始搭建你的第一个MyBatis系统
  • linux关闭某端口暂用的进程
  • 【前端开发】Uniapp日期时间选择器:实现分钟动态步长设置
  • 链表面试题9之环形链表进阶
  • 微服务架构中的多进程通信--内存池、共享内存、socket
  • Canvas SVG BpmnJS编辑器中Canvas与SVG职能详解
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Rotating Navigation (旋转导航)
  • 新浪《经济新闻》丨珈和科技联合蒲江政府打造“数字茶园+智能工厂+文旅综合体“创新模式
  • Python、Pytorch、TensorFlow、Anconda、PySide、Jupyter