电商交易数据分析

一、数据描述

1.1数据集描述

数据集为某电商平台2016年一整年的交易数据, 数据包含104557条数据,10个字段。

1.2数据展示

电商交易数据分析

二、问题提出

1、各个月的订单数是否均衡?

2、在不同价格段之间的商品销售情况?

3、在不同时间段下单情况如何?

 

 

三、数据清洗和预处理

3.1缺失值处理

df.isnull().sum(axis=0)    # 查看缺失值
----------------------------------------
orderId        0
userId         0
productId      0
cityId         0
price          0
payMoney       0
channelId      8
deviceType     0
createTime     0
payTime        0
deviceName    87
dtype: int64

发现 deviceName 有87个缺失值,而 deviceType 没有缺失值,看一下 deviceType 的取值分布:

df["deviceType"].value_counts()
----------------------------------
2    52448
3    42948
1     7054
4     2017
6       87
5        3
Name: deviceType, dtype: int64

发现这一列有类别为6的值,数量刚好为87,而设备信息文件并没有6这个类别,怀疑是信息填错了,将其重新归类为5,同时将 deviceName 的缺失值用"other"进行填充:

df[deviceType].replace({6: 5}, inplace = True)
df.fillna({"deviceName": "other"}, inplace=True)

还有一列有8个缺失值,数据占比较少,我们直接将其删除:

df.dropna(inplace=True)
df.isnull().sum(axis=0)  
------------------------
orderId       0
userId        0
productId     0
cityId        0
price         0
payMoney      0
channelId     0
deviceType    0
createTime    0
payTime       0
deviceName    0
dtype: int64

删除缺失值之后,再来看一下数据集的大小:

df.shape
--------------------------
(104549, 11)

3.2异常值处理

可以通过数据概况初步探索异常值:

df.describe()

电商交易数据分析

 

 

 

根据上面的结果可以看出 productId 最小值是0,payMoney 有负值,这明显是不合理的,我们需要对其进行处理。

首先看看 productId 值为0的数量,数量较少的话直接删除:

df.productId[(df.productId == 0)].size
-------------------------------------------------
177

# 177条记录,数量不多,直接删掉
df.drop(index=df[df.productId==0].index, inplace=True)

对于 payMoney 存在负值的记录,直接将其删除:

df.productId[(df.payMoney < 0)].size
----------------------------------------
6

# 只有6条记录,直接删除
df.drop(index=df[df.payMoney < 0].index, inplace=True)

再看一下这两列值的情况:

df[["productId", "payMoney"]].describe()
------------------------------------------
            productId    payMoney
count    104366.000000    1.043660e+05
mean    505.417626    8.690449e+04
std    287.629531    9.075357e+04
min    1.000000    0.000000e+00
25%    255.000000    3.360000e+04
50%    508.000000    5.500000e+04
75%    759.000000    1.040000e+05
max    1000.000000    2.294200e+06

四、各变量相关性数据分析与可视化

4.1总体情况分析

先来看一下2016年一年的总体情况:

# 总订单数,总下单用户,总销售额,有销售的商品数
print(df.orderId.count())
print(df.userId.unique().size)
print(df.payMoney.sum()/100)        # 原单位是“分”,需要转换成“元”
print(df.productId.unique().size)
--------------------------------------
104356
102474
906931.2370000001
1000

再看看一下各个月的情况:

# 增加一个月份列,方便按照月份来进行统计
df[month] = df["payTime"].dt.month

month = df["month"].unique()
order_count = df.groupby(by=month).count()["orderId"]
plt.bar(month, order_count)                 
plt.show()

电商交易数据分析

4.1各维度分析

分析数据可以从两方面开始考虑,一个是维度,一个是指标,维度可以看做x轴,指标可以看成是y轴,同一个维度可以分析多个指标,同一个维度也可以做降维升维。

价格分析

对于价格,可以看下所有商品价格的分布,这样可以知道什么价格的商品卖的最好:

# 原单位是“分”,需要转换成“元”
df[price] = df[price] / 100

# 先按照100的区间取分桶
bins = np.arange(0, 7500, 100)
print(pd.cut(df.price, bins).value_counts())
-----------------------------------------------
(400, 500]      14791
(300, 400]      10737
(200, 300]       9966
(500, 600]       9189
(600, 700]       8777
(100, 200]       7123
(700, 800]       7111
....
(6400, 6500]        2
(5500, 5600]        1
(7300, 7400]        0
Name: price, Length: 74, dtype: int64


plt.figure(figsize=(16, 16))
plt.hist(df[price], bins)

电商交易数据分析

 

下单时间分析

按小时分析:

# 按小时的下单量分布,可以按时间做推广
df[orderHour] = df.createTime.dt.hour
df.groupby(orderHour).count()[orderId].plot()

电商交易数据分析

 

 

从上图可以看出, 中午12-14点下单比较多,应该是午休的时候,然后是晚上20点左右,晚上20点左右几乎是所有互联网产品的一个高峰,下单高峰要注意网站的稳定性、可用性。下单高峰时间段也可以考虑进行推广,效果会更佳。

按星期分析:

df[orderWeek] = df.createTime.dt.dayofweek + 1
df.groupby(orderWeek).count()[orderId].plot()

电商交易数据分析

 

 从上面可以看出,上班时间订单量不断上升,在周六达到顶峰,休息时间人们有更强的购买欲望,这也是比较符合现实的。

 

支付时间分析

可以看一下客户在下单之后多久时间会进行支付:

def get_seconds(x):
    return x.total_seconds()
df[payDelta] = (df[payTime] - df[createTime]).apply(get_seconds)

bins = [0, 50, 100, 1000, 10000, 100000]
pd.cut(df.payDelta, bins).value_counts()
---------------------------------------
(0, 50]            79229
(100, 1000]        12899
(50, 100]          10674
(1000, 10000]        968
(10000, 100000]      231
Name: payDelta, dtype: int64

从上面可以看出,大部分人下单50秒以内就会进行支付,说明用户基本很少犹豫,购买的目的性很强。

用饼图看一下比例:

pd.cut(df.payDelta, bins).value_counts().plot(kind=pie, autopct=%d%%, shadow=True, figsize=(10, 4))

电商交易数据分析

 

 

五、主要结论

通过对电商历史交易数据的清洗和分析,给出一些可以提升销量的建议,当然这只是简单的分析,需要更好的提升销量还需要更加深入和专业的分析才行。

电商交易数据分析

上一篇:客制化键盘Kira96简单介绍以及外壳的更换


下一篇:为什么for循环中的a=a++,a总是0