零售商品数据分析
文章目录
零售商品数据分析1、数据集描述2、明确分析目的3、理解数据4、数据清洗4、1 缺失数据4、1、1 统计缺失率4、1、2 删除缺失值
4、2 转换数据类型4、3 重复值处理4、4 处理日期型数据4、5 根据需要新建数列
5、数据分析5、1 目标1:找出购买商品数量前十的国家5、2 目标2:找出交易额前十的国家5、3 目标3:公司在哪些月份的销售量比较好5、4 目标4:客单价是多少5、5 目标5:用户行为分析5、6 目标6:基于RFM模型,对用户进行分类5、6、1 再次进行数据清洗5、6、1、1 转换Customer ID的数据类型为str5、6、1、2 处理日期5、6、1、3 新建字段5、6、1、4 重复值处理5、6、1、5 异常值处理
5、6、2 R、F、M5、6、2、1 R5、6、2、2 F5、6、2、3 M
5、6、3 用户分级5、6、4 拼接R、F、M5、6、5 定义分级函数5、6、6 统计用户等级分布情况5、6、7 对结果可视化
5、7 目标7:退货订单分析
6、总结
这篇文章尝试着对一份零售商品数据进行分析,主要手段为描述统计与利用FRM模型进行客户分类,期望通过此次分析能达到如下目的:
1、找出购买商品数量前十的国家2、找出交易额前十的国家3、公司在哪些月份的销售量比较好4、客单价是多少5、用户行为分析6、基于FRM模型,对用户进行分类7、退货订单分析
我会将文中使用到的数据和源代码放在Github上,以便用得到的小朋友们下载:点此访问Github
1、数据集描述
这儿使用到的数据集来自Kaggle,该数据集包含2009-2010及2010-2011两个工作簿,记录了在英国注册的某公司网上零售的交易信息。主要销售产品为礼品。字段如下:
字段描述Invoice订单编号StockCode产品编号Description产品描述Quantity订单商品数量InvoiceDate订单日期与时间Price商品单价Customer ID客户IDCountry客户所在国家/地区
2、明确分析目的
1、找出购买商品数量前十的国家2、找出交易额前十的国家3、公司在哪些月份的销售量比较好4、客单价是多少5、用户行为分析6、基于FRM模型,对用户进行分类7、退货订单分析
3、理解数据
# 导入相关库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly as py
import plotly.graph_objects as go
import csv
import os
pyplot = py.offline.plot
os.getcwd()
os.chdir("F:\DataSets\online_retail")
文中只对表格中的第一个工作簿进行分析(即2009-2010数据集),第二个工作簿分析可类似进行
# 数据读入
online_data = pd.read_excel("online_retail_II.xlsx")
# 查看数据情况
online_data.shape
(525461, 8)
online_data.head()
online_data.info()
online_data.columns
RangeIndex: 525461 entries, 0 to 525460
Data columns (total 8 columns):
Invoice 525461 non-null object
StockCode 525461 non-null object
Description 522533 non-null object
Quantity 525461 non-null int64
InvoiceDate 525461 non-null datetime64[ns]
Price 525461 non-null float64
Customer ID 417534 non-null float64
Country 525461 non-null object
dtypes: datetime64[ns](1), float64(2), int64(1), object(4)
memory usage: 32.1+ MB
Out[3]:Index(['Invoice', 'StockCode', 'Description', 'Quantity', 'InvoiceDate',
'Price', 'Customer ID', 'Country'],
dtype='object')
4、数据清洗
4、1 缺失数据
4、1、1 统计缺失率
# 统计缺失率
online_data.apply(lambda x: sum(x.isnull()) / len(x), axis=0)
Invoice 0.000000
StockCode 0.000000
Description 0.005572
Quantity 0.000000
InvoiceDate 0.000000
Price 0.000000
Customer ID 0.205395
Country 0.000000
dtype: float64
Description 0.005572 Description存在数据缺失的情况,缺失率约为0.56%,暂时无法进行填充Customer ID 0.205395 Customer ID存在数据缺失,缺失率20.5%
4、1、2 删除缺失值
# 删除缺失值
df1 = online_data.dropna(how="any").copy()
df1.info()
Int64Index: 417534 entries, 0 to 525460
Data columns (total 8 columns):
Invoice 417534 non-null object
StockCode 417534 non-null object
Description 417534 non-null object
Quantity 417534 non-null int64
InvoiceDate 417534 non-null datetime64[ns]
Price 417534 non-null float64
Customer ID 417534 non-null float64
Country 417534 non-null object
dtypes: datetime64[ns](1), float64(2), int64(1), object(4)
memory usage: 28.7+ MB
4、2 转换数据类型
# 转换数据类型
# 转换Customer ID的数据类型为str
df1["Customer ID"] = df1["Customer ID"].astype(str)
df1.info()
|