電商交易數據分析


一、數據描述

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))

 

 

五、主要結論

通過對電商歷史交易數據的清洗和分析,給出一些可以提升銷量的建議,當然這只是簡單的分析,需要更好的提升銷量還需要更加深入和專業的分析才行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM