Spark 离线数据处理实例

在jupyter中进行

一 .需求分析

1.分析美妆商品信息,找出每个“商品小类”中价格最高的前5个商品。
2.每月订购情况,统计每个月订单的订购数量情况和消费金额。
3.按订单的地区,统计各地在订购数量上的排行情况,取最高的前20个城市。
4.按商品的类型,分别统计各美妆产品的订购数量排行,以了解产品的畅销程度和需求情况。
5.分析各省的美妆订购数量,以了解哪些地方的商品需求量最大。
6.通过RFM模型挖掘客户价值。

二、准备工作

1.数据清洗(pandas) 
2.窗口操作(Spark SQL) 
3.数据可视化(pyecharts) 

1、数据清洗(pandas)

(0)模块库的安装

pip install pandas==1.1.5 安装pandas
pip show pandas 查看pandas版本
pip install pyecharts==1.9.0 安装pyecharts
pip install pyspark-stubs 安装pyspark-stubs
pip show pyecharts 查看pyecharts版本
pip show pyspark-stubs 查看pyspark-stubs版本
(1) 导入库

import pandas as pd

(2)加载数据文件信息

prod_info = pd.read_csv('../Stu_pack_12/beauty/beauty_prod_info.csv')

(3)查看加载进来的数据文内容
prod_info.head(10)

prod_sales = pd.read_csv('C:/Users/Administrator/Desktop/Stu_pack_12/beauty/beauty_prod_sales.csv')
prod_sales.head(10)

print(prod_sales)

print(prod_info)

(4)查看加载进来的数据文件基本信息
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_info[prod_info['商品编号'].duplicated()].count()
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()

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

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

prod_sales.isnull().sum()
prod_sales.info()

(10)下面对存在问题的订单日期、订购数量、订购单价这几个字段进行处理
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['订单日期'].min()

prod_sales['订单日期'].max()

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('float64')

prod_sales.info()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值