使用Python對(duì)零售商品進(jìn)行數(shù)據(jù)分析
一、主要內(nèi)容:
1、清洗數(shù)據(jù)。將列名統(tǒng)一修改、處理缺失數(shù)據(jù)和異常數(shù)據(jù)、轉(zhuǎn)換日期等數(shù)據(jù)類型
2、查看總體銷售情況
3、商品維度進(jìn)行分析。主要分析內(nèi)容有:商品價(jià)格分析,商品銷售量、銷售額情況分析,商品關(guān)聯(lián)分析
4、店鋪維度進(jìn)行分析。主要分析內(nèi)容有:店鋪銷售量、銷售額法分析,店鋪促銷情況分析,店鋪銷售時(shí)間分析,周均消費(fèi)次數(shù)分析,客單價(jià)分析等
5、相關(guān)性分析:用關(guān)聯(lián)關(guān)系表和相關(guān)矩陣圖初步對(duì)變量之間的關(guān)系進(jìn)行分析。
6、用戶維度進(jìn)行分析。主要分析內(nèi)容有:分析用戶基本購買情況,按時(shí)間(周)對(duì)用戶購買情況進(jìn)行分析,用戶購買力分析,用戶復(fù)購率分析,RFM區(qū)分用戶。
二、使用工具
Python
三、數(shù)據(jù)來源
該數(shù)據(jù)集包含2018年6月1日-2018年7月5日的公司零售的交易信息。
四、字段含義
- SDATE(訂單日期)
- STORE_CODE(商店編號(hào))
- POSID(POS機(jī)編號(hào))
- BASK_CODE(用戶編號(hào))
- PROD_CODE(商品編號(hào))
- ITEM_QUANTITY(商品數(shù)量)
- ITEM_SPEND(商品實(shí)際價(jià)格)
- NORMAL_PRICE(商品單價(jià))
- DISCOUNT_TYPE(折扣類型)
- DISCOUNT_AMOUNT(折扣金額)
五、數(shù)據(jù)清洗
1、查看總體數(shù)據(jù)特征


從圖片中初步可以看出數(shù)據(jù)集可能存在的異常數(shù)據(jù)以及需要進(jìn)行初步處理的地方有以下幾點(diǎn):
1)數(shù)據(jù)表中的SDATE字段需要將數(shù)據(jù)類型轉(zhuǎn)換為日期型方便后續(xù)計(jì)算;
2)數(shù)據(jù)表中的ITEM_SPEND字段有負(fù)值,即商品實(shí)付金額為負(fù),為異常數(shù)據(jù);
3)數(shù)據(jù)表中的ITEM_QUANTITY字段有負(fù)值,即商品數(shù)量為負(fù),為異常數(shù)據(jù);
4)數(shù)據(jù)表中的DISCOUNT_AMOUTN字段數(shù)據(jù)有正值,即折扣后金額比折扣前金額高,為異常數(shù)據(jù)。
5)為方便閱讀與查看,將列名統(tǒng)一改為符合駝峰命名法
2、修改列名
item.columns = ['shop_date','store_id','pos_id','user_id','prod_id','item_quantity','item_spend','normal_price','discount_type','discount_amount']
3、檢驗(yàn)缺失數(shù)據(jù)
item.apply(lambda x: sum(x.isnull()) / len(x), axis=0)
4、查看并轉(zhuǎn)換數(shù)據(jù)類型
(1)查看數(shù)據(jù)表類型

如圖可發(fā)現(xiàn)數(shù)據(jù)中沒有缺失數(shù)據(jù),因此不需要進(jìn)行缺失值處理
(2)轉(zhuǎn)換數(shù)據(jù)類型
數(shù)據(jù)類型中的object表示如果一列中含有多個(gè)類型,則該列的類型會(huì)是object,同樣字符串類型的列也會(huì)被當(dāng)成object類型,因此object類型中SDATE數(shù)據(jù)類型應(yīng)為日期類型,此外數(shù)值類型由于涉及零售的金錢問題,也應(yīng)都調(diào)整為兩位小數(shù)。
因此最終數(shù)據(jù)表數(shù)據(jù)類型需要調(diào)整的地方主要有以下幾點(diǎn):
- 1)調(diào)整日期數(shù)據(jù)類型
- 2)將金錢調(diào)整為兩位小數(shù)
- 3)查看調(diào)整后數(shù)據(jù)類型
#日期數(shù)據(jù)類型
item.shop_date = pd.to_datetime(item.shop_date)
#金錢保留兩位小數(shù)
pd.set_option('display.float_format', lambda x: '%.2f' % x)#將所有數(shù)據(jù)轉(zhuǎn)換為兩位小數(shù)
(3)查看修改后數(shù)據(jù)表數(shù)據(jù)類型

5、查看異常值并刪除
根據(jù)上一小節(jié)對(duì)數(shù)據(jù)的初步查看發(fā)現(xiàn)的問題進(jìn)行操作,在上一小節(jié)中發(fā)現(xiàn)數(shù)據(jù)表中商品數(shù)量、訂單總金額、商品實(shí)付金額均有負(fù)值,且折扣金額為正,折扣金額的計(jì)算可能受到金額為負(fù)的影響,此外,數(shù)據(jù)也可能存在空值。因此,異常值的刪除主要有以下幾個(gè)操作:
1)將商品數(shù)量、訂單總金額、商品實(shí)付金額為負(fù)值的調(diào)整為正值;
2)新建銷售總金額字段:銷售總金額=單價(jià)*數(shù)量根據(jù)修改后的數(shù)據(jù)進(jìn)行折扣金額的計(jì)算:折扣金額=銷售總金額-實(shí)際付款金額(ITEM_SPEND),與實(shí)際折扣金額不同的可以判定為異常數(shù)據(jù),進(jìn)行刪除操作;
3)刪除過后分析是否還存在折扣金額為正的數(shù)據(jù),若存在,也進(jìn)行刪除操作。

最后發(fā)現(xiàn)不存在折扣金額與實(shí)際折扣不同的數(shù)據(jù),可以判定無異常值。
六、數(shù)據(jù)分析
1、總體銷量數(shù)據(jù)

由總體銷售情況分析可知,商店在2018年6月1日-2018年7月5日共有280878個(gè)用戶進(jìn)店購買過商品,總銷售額為22216624.17元,有流水的商品數(shù)共19261個(gè)。
2、商品維度分析
(1)商品價(jià)格分析

由初步價(jià)格箱型圖可知,客戶比較青睞店鋪內(nèi)的低價(jià)商品,且由此圖無法很明顯的看出商品價(jià)格具體情況,因此下面將商品價(jià)格為0-50的價(jià)格提取出來進(jìn)行分析

#求商品價(jià)格的四分位數(shù) df_1 = pd.to_numeric(item_normal['normal_price']) q = [df_1.quantile(i) for i in [0,.25,.5,.75,1]];q[-1] += 1 q
[0.5, 3.6, 7.0, 13.8, 51.0]
由最后的箱型圖可知,商品價(jià)格最多的在3.6元~13.8元之間,也符合消費(fèi)者在零售商店購買的商品價(jià)格會(huì)比較低,店家可以根據(jù)消費(fèi)者的消費(fèi)情況對(duì)商品進(jìn)行調(diào)整,多上架一些平價(jià)、常用的商品供消費(fèi)者選擇。
(2)查看銷量排名前十和最后的商品


本小節(jié)分析了商品銷售量前10和商品銷售量最后的商品數(shù)量,此外將商品銷售量前10的商品繪制柱狀圖進(jìn)行分析。
由圖表可知,前3銷售量的商品很明顯比后面商品銷量多,差別至少為2000以上,而商品銷量最后的商品在計(jì)算過程中發(fā)現(xiàn)有很多商品銷量為1,將所有銷量為1的商品提取出來,共有2673個(gè),這2673個(gè)商品在這一段時(shí)間只銷售了1個(gè)商品,可能為商品為不常用商品,也可能是商品本身有其他問題。
(3)查看銷售額排名前十和后十的商品


本小節(jié)主要分析了商品銷售額前10和商品銷售量后10的商品,此外將商品銷售量前10的商品繪制柱狀圖進(jìn)行分析。由圖表可知,前3銷售量的商品很明顯比后面商品銷售額多,差別至少為50000以上,而商品銷量最后的商品僅僅在1元左右,這些商品無論是數(shù)量還是銷售額都很少,商品可能存在問題。
(4)查看銷售量與銷售額關(guān)系
由于商品銷售量最后的銷售量為1,數(shù)量共2673個(gè),因此查看銷售量最后2673個(gè)商品中同時(shí)銷售額在后10的商品,發(fā)現(xiàn)銷售額最后的商品均為銷量為1的商品,本小節(jié)查看了銷售額和銷售量最后的商品編號(hào),找出之后根據(jù)具體的商品,找出原因,考慮如何優(yōu)化或者是否要下架。
(5)商品關(guān)聯(lián)度分析

從以上的結(jié)果可以總結(jié)出:
從總體上看,所有組合商品中支持度數(shù)值偏低,這是由于平臺(tái)銷售的商品種類繁多,也可能是用戶同時(shí)購買兩個(gè)商品的可能性低,需要進(jìn)一步進(jìn)行分析;
商品組合[1570] --> [1557]的置信度最高,表示支持率在1%的情況下購買商品編號(hào)1570的用戶中有70%會(huì)購買商品編號(hào)1557,可以對(duì)這兩種商品進(jìn)行捆綁銷售;
3、店鋪維度分析
進(jìn)行店鋪維度的分析可以分析各店鋪銷售情況,判斷哪些店鋪銷售情況不好,考慮是否需要對(duì)店鋪員工進(jìn)行培訓(xùn)或裁員。
(1)店鋪銷售量情況分析


本小節(jié)分析了商品銷售量前10的店鋪,可以發(fā)現(xiàn)商品銷售數(shù)量前2的店鋪銷售量遠(yuǎn)超過后面的店鋪,超過150000個(gè)商品,說明D002和A001兩個(gè)店鋪商品數(shù)量銷售情況很好。


本小節(jié)分析了商品銷售額前10的店鋪,進(jìn)行圖表分析,可以發(fā)現(xiàn)A001和D002兩個(gè)店鋪銷售額遠(yuǎn)超其他店鋪,至少超過了2000000元,根據(jù)上小節(jié)分析,這兩個(gè)店鋪銷售量與銷售額均遠(yuǎn)超其他店鋪,說明兩個(gè)店鋪銷售情況良好。
(2)店鋪促銷情況分析


4、銷售情況分析
(1)下單時(shí)間分析

(2)銷售額分析

由于數(shù)據(jù)表中時(shí)間僅有日期,沒有具體的銷售時(shí)間,且數(shù)據(jù)量由2018年6月1日-2018年7月5日,僅有約一個(gè)月的時(shí)間,因此分析月銷售量沒有很大的意義,因此首先對(duì)每周周一至周日的銷售情況進(jìn)行分組計(jì)算,求出一周內(nèi)不同天的銷售情況,分析每周哪一天銷售情況最好。
由圖表可以看出,周一至周五的下單量在一條線上下波動(dòng),沒有很大的起伏,周六和周日兩天的下單量遠(yuǎn)遠(yuǎn)高于周一至周五的下單量,高出了至少50000單,銷售額也是同樣的趨勢,超出了至少400000元,可以看出一般周末用戶的下單量與交易額會(huì)遠(yuǎn)遠(yuǎn)高于工作日的下單情況,商家可以考慮在周末多上一些商品供用戶選擇。
(3)每日銷售額/銷售量分析


本小節(jié)分組計(jì)算了日銷售額與日銷售量的數(shù)據(jù),并繪制了折線圖進(jìn)行趨勢對(duì)比分析,由圖中可知,銷售量與銷售額的趨勢幾乎相同,且均在2018年6月16日達(dá)到最高,。
(4)周均消費(fèi)次數(shù)/金額
總訂單數(shù) 280878 次
周數(shù) 6 周
周均消費(fèi)次數(shù) 46813 次
周均消費(fèi)金額為: 3702770.0 元
(5)客單價(jià)
商場(超市)每一個(gè)顧客平均購買商品的金額,客單價(jià)也即是平均交易金額。
客單價(jià)為: 79.0 元
由于數(shù)據(jù)表中數(shù)據(jù)量由2018年6月1日-2018年7月5日,僅有約一個(gè)月的時(shí)間,因此分析月銷售量沒有很大的意義,因此首先對(duì)每周周一至周日的銷售情況進(jìn)行分組計(jì)算,求出不同周的大致銷售情況,最終結(jié)果可知總訂單數(shù)為280878次,共有6周的數(shù)據(jù),周均消費(fèi)次數(shù)為46813次
5、相關(guān)性分析
查看數(shù)據(jù)相關(guān)性


我們可以查看數(shù)據(jù)的相關(guān)性,值越接近1,說明相關(guān)性越強(qiáng)。也可以把相關(guān)性信息進(jìn)行可視化,顏色越接近黃色相關(guān)性越高,越接近紫色相關(guān)性越低。由相關(guān)性圖可知,商品銷售總額與商品數(shù)量、折扣金額和商品銷售總額相關(guān)性相對(duì)強(qiáng),周數(shù)和銷售額相關(guān)性最弱
6、用戶分析
(1)用戶角度分析


從用戶角度看,每位用戶平均購買8.83單位的商品,最多的用戶購買了6581個(gè)商品,屬于狂熱用戶。用戶的平均消費(fèi)金額(客單價(jià))79.1元,標(biāo)準(zhǔn)差是291.24,結(jié)合分位數(shù)和最大值看,平均值和50~75分位之間的接近,肯定存在小部分的高額消費(fèi)用戶。
(2)按周維度分析

按周統(tǒng)計(jì)每周的商品銷量和銷售額。從圖中可以看到,銷售量和銷售額趨勢相同,沒有什么異常的地方,前幾周銷量比較平穩(wěn),甚至有些下降,而后面幾周銷量逐漸高漲,可能是商店逐漸被用戶所認(rèn)可。
(3)觀察用戶消費(fèi)購買力

左邊的直方圖的x軸代表item_spend的分組,一共30組。y軸代表item_spend中對(duì)應(yīng)到各個(gè)分組的頻數(shù)。從直方圖看,大部分用戶的消費(fèi)能力確實(shí)不高,高消費(fèi)用戶在圖上幾乎看不到。這也確實(shí)符合消費(fèi)行為的行業(yè)規(guī)律。
(4)分析用戶的復(fù)購率
復(fù)購率 = 單位時(shí)間內(nèi),消費(fèi)兩次及以上的用戶數(shù) / 購買總用戶數(shù)

圖上復(fù)購率可知復(fù)購率一直在62%以上,可能因?yàn)槭橇闶凵痰?,用戶?huì)經(jīng)常購買商品,尤其到最后幾周復(fù)購率更高,可能因?yàn)橛脩粢呀?jīng)開始信任店鋪
(5)用戶RFM分析




通過RFM方法,我們根據(jù)用戶購買商品的數(shù)據(jù)進(jìn)行分析,對(duì)用戶進(jìn)行了歸類。在促銷等很多過程中,可以更加精準(zhǔn)化,針對(duì)不同類別的用戶進(jìn)行不同的符合其特點(diǎn)的促銷方式和銷售方式,不至于出現(xiàn)用戶反感的情景。
以上就是使用Python對(duì)零售商品進(jìn)行數(shù)據(jù)分析的詳細(xì)內(nèi)容,更多關(guān)于Python數(shù)據(jù)分析零售商品的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
通過python3實(shí)現(xiàn)投票功能代碼實(shí)例
這篇文章主要介紹了通過python3實(shí)現(xiàn)投票功能代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
pandas dataframe 中的explode函數(shù)用法詳解
這篇文章主要介紹了pandas dataframe 中的explode函數(shù)用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python 時(shí)間的訪問和轉(zhuǎn)換 time示例小結(jié)
Python 的 time 模塊提供了各種與時(shí)間處理相關(guān)的功能,包括獲取當(dāng)前時(shí)間、操作日期/時(shí)間以及執(zhí)行與時(shí)間相關(guān)的各種其它功能,這篇文章主要介紹了python 時(shí)間的訪問和轉(zhuǎn)換 time,需要的朋友可以參考下2024-05-05
python自動(dòng)循環(huán)定時(shí)開關(guān)機(jī)(非重啟)測試
這篇文章主要為大家詳細(xì)介紹了python自動(dòng)循環(huán)定時(shí)開關(guān)機(jī)(非重啟)測試,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
Python 實(shí)現(xiàn)使用空值進(jìn)行賦值 None
這篇文章主要介紹了Python 實(shí)現(xiàn)使用空值進(jìn)行賦值 None,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Python實(shí)現(xiàn)自動(dòng)添加腳本頭信息的示例代碼
這篇文章給大家介紹的一段腳本是自動(dòng)添加注釋信息的腳本,添加的信息包括腳本名稱、作者和時(shí)間等之類的,對(duì)于團(tuán)隊(duì)形成統(tǒng)一的編碼規(guī)則很有幫助。有需要的可以參考借鑒。2016-09-09
Python實(shí)現(xiàn)的Kmeans++算法實(shí)例
這篇文章主要介紹了Kmeans和kmeans++算法,講解了Kmeans算法的缺點(diǎn)和kmeans++算法的實(shí)現(xiàn)思路,以及Python和matlab中實(shí)現(xiàn)的Kmeans++算法,需要的朋友可以參考下2014-04-04
Python如何設(shè)置指定窗口為前臺(tái)活動(dòng)窗口
這篇文章主要介紹了Python如何設(shè)置指定窗口為前臺(tái)活動(dòng)窗口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08

