电商平台零售交易数据分析案例part1

av81847305

 

数据集:https://www.kaggle.com/lakshmi25npathi/online-retail-dataset

为了不花钱买 强行从kaggle上对比着名字和大小找到了这份数据

就是要等待它以20kb/s左右的速度下载

发现我kaggle的账号还是之前上挖掘课的时候注册的dm+学号 且改不了……

 

字段:

InvoiceNo:订单编号,每笔交易有6个整数,退货订单编号以字母C开头

StockCode:产品编号,由5个整数组成

Description:产品描述

Quantity:产品数量,有负号的表示退货

InvoiceDate:订单日期和时间

UnitPrice:单价(英镑),单位产品的价格

CustomerID:客户编号,由5位数字组成

Country:每个客户所在国家/地区的名称

 

目标:

建立用户分类RFM模型,对比分析不同用户群体在时间、地区等维度下的交易量和交易金额指标,并根据分析结果提出优化建议

R:最近一次消费时间(最近一次消费到参考时间的时间长度)

F:消费的频次(单位时间内消费了多少次)

M:消费的金额(单位时间内总消费金额)

 

整理数据:

下载的数据为xlsx格式且文件中有两个表单,所以需要合并成一个csv格式来处理

参考链接:https://blog.csdn.net/WenWu_Both/article/details/70945914

作者:WenWu_Both
出处:http://blog.csdn.net/wenwu_both/article/
版权:本文版权归作者和CSDN博客共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文链接;否则必究法律责任

 

第一步,将包含多个sheet的xlsx表格都转为csv文件

alt+f11打开vba编辑窗口 贴入以下代码

Sub SaveToCSVs()
    Dim fDir As String
    Dim wB As Workbook
    Dim wS As Worksheet
    Dim fPath As String
    Dim sPath As String
    fPath = "C:\Users\JiaoTong\Desktop\data\"
    sPath = "D:\csvdata\"
    fDir = Dir(fPath)
    Do While (fDir <> "")
        If Right(fDir, 4) = ".xls" Or Right(fDir, 5) = ".xlsx" Then
            On Error Resume Next
            Set wB = Workbooks.Open(fPath & fDir)
            'MsgBox (wB.Name)
            For Each wS In wB.Sheets
                wS.Copy 'to a new workbook
                wS.SaveAs sPath & wB.Name & ".csv", xlCSV
            Next wS
            wB.Close False
            Set wB = Nothing
        End If
        fDir = Dir
        On Error GoTo 0
    Loop
End Sub

其中,fPath为存放原始数据(excel文件)的路径,sPath为存放生成数据(csv文件)的路径

第二步,合并多个csv文件

在所在文件夹地址栏中输入cmd打开命令行窗口

执行copy *.csv data.csv
即可将所有csv文件集合生成data.csv

 

数据清洗:

1、缺失值统计

电商平台零售交易数据分析案例part1_第1张图片

有比较多缺失值的有description和customerid两个字段

 

2、缺失值处理

description字段由于是描述商品信息的,与分析无关,所以可以直接删去

#删除对分析无意义的description字段
df.drop(['Description'],axis=1,inplace=True)

customerid空缺较多但对分析有用,对其进行补全

#填充customerID的空缺值
df['Customer ID'] = df['Customer ID'].fillna('U')
#因为这些字段都只有一个缺失值 对整体影响不大 暂且删除
#how:any-只要有空值就删除(默认),all-全部为空值才删除 
df = df.dropna(axis=0, how='any')

 

3、数据类型归一

电商平台零售交易数据分析案例part1_第2张图片

quantity&price应该改为数值类型,便于之后计算分析

#列的类型都转化为数值型,出错的地方填入NaN,再把NaN的地方补0
df['Quantity'] = df['Quantity'].apply(pd.to_numeric, errors='coerce').fillna(0)
#列的类型都转化为数值型,出错的地方填入NaN,再把NaN的地方补0
df['Price'] = df['Price'].apply(pd.to_numeric, errors='coerce').fillna(0)
#增加合计金额字段便于分析
#Quantity:产品数量,有负号的表示退货
df['amount'] = df['Quantity'] * df['Price']

对时间字段进行处理

在试图用split拆分时间字段时报错了,程序运行只有取split后的list[0]时没问题,取list[1]&list[2]都提示out of range

开始觉得应该是因为有的行这个字段有错,没有可以分割的符号,所以分割完成后只有list[0]

尝试用for+if判断是否为none出了好几次错且吃完饭回来还没跑完

尝试用filter()也大失败

最后想看看都是哪几行有问题就尝试输出异常值(好像是用的df[df['year].str.len() > 4] 不是很好的方法)

发现是当时合并csv时把第二个表的表头也一起加进数据里了,以后记得要把表头删掉……

取指定数字行:df.iloc[0]

df.drop(labels=525461,axis=0,inplace=True)

删掉这行就可以正常split了

#拆分年月日
df['year'] = [x.split('/')[2] for x in df['date']]
df['month'] = [x.split('/')[0] for x in df['date']]
df['day'] = [x.split('/')[1] for x in df['date']]

在写后面的数据分析part的时候发现我把月和日弄反了 出现了第31个月 还是要看仔细……

最后把date的格式变成datetime

df['date'] = pd.to_datetime(df['date'])

 

4、数值统计找到异常值

电商平台零售交易数据分析案例part1_第3张图片

电商平台零售交易数据分析案例part1_第4张图片

观察异常值的特点并分析为何出现这种情况

df2['Price'].groupby(df2['Price']).count()

 

5、删除重复行

df = df.drop_duplicates()

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数据分析)