python資料視覺化案例
本章介紹一下python中用來實現視覺化的工具matplotlib和seaborn。
seaborn和matplotlib的區別在於,seaborn很多視覺化都是設定好的,只需要用簡單的程式碼就可以實現好看的輸出,缺點是seaborn的視覺化輸出結果有時可能不能滿足要求,而matplotlib則可以高度定製化繪圖實現符合心意的輸出,但是相應的matplotlib的引數更復雜一些。
下面分享一個用matplotlib和seaborn完成優衣庫銷售資料分析視覺化案例
背景:根據提供的資料回答如下三個問題
1。整體銷售情況隨著時間的變化是怎樣的?
2。不同產品的銷售情況是怎樣的?顧客偏愛哪一種購買方式?
3。銷售額和產品成本之間的關係怎麼樣?
資料鏈接:
https://
pan。baidu。com/s/1MqtOU2
lilcBFRnLF9_3iMA
提取碼:
m398
我是用Anaconda中自帶的Jupyter Notebook練習程式設計的
————————————————————————————————————————————————-
進入正題
首先我們把需要的包調進來,然後匯入資料
pandas和numpy是兩個常用的資料分析包,matplotlib和seaborn是用來實現視覺化的,我這裡匯入資料用的是絕對路徑,利用pandas包中的read_csv命令把csv檔案匯入進來。
透過info()命令檢視資料集長什麼樣子
info()命令可以查看錶中有哪些列別和其對應的資料型別,還可以方便檢視有無缺失值,這裡可以看到每列都是22293行,看上去好像沒有缺失值。
再利用head()函式檢視前5列,head()預設前5列,當然也可以用head(10)檢視前10列,與head()相對的tail()命令是檢視檔案的最後5行。
product(產品類別),customer(顧客人數),revenue(銷售額),order(訂單數量),quant(銷售數量),unit_cost(單件產品成本)為產品類資料也是分析著重圍繞的重點資料。
然後我們用describe()檢視一下資料有沒有異常值
describe()命令可以檢視資料的行數(count),平均數(mean),標準差(std),最大最小值以及四分位數。發現有個明顯的異常值是revenue的最小值是負值,而且revenue的最大值比上四分位數大了許多,可以看一下revenue極值的數量,如果比較少可以刪除清晰分析結果。
這裡根據revenue的值利用‘cut’函式建一個數據桶對renvenue進行分類,right=False表示分類區間為左閉右開。
結果發現renvenue大於2000的值只有62個,以及一個小於0的負值,數量不多可以刪除。
這裡用‘&’運算子,表示邏輯‘與’,下圖為運算子作用表。
表中gender_group和age_group裡存在Unkown值(應是Unknown資料來源寫錯了),先將其轉換成null值,再確認缺失值佔比,如果佔比很少,則可以刪除而對接下來的分析幾乎無影響,這裡要用到numpy中的np。nan命令
loc[unq。age_group==‘Unkown’,‘age_group’]=np。nan表示取
‘
age_group’列中所有age_group值為‘Unkown’的行賦值為np。nan也就是null值。
python中 ==為篩選條件,=為賦值
發現缺失值佔比很少,可以刪除
直接用dropna刪除為空值的行,inplace=True表示直接對原始物件修改,不建立返回新的改變物件。
資料清洗結束
1。整體銷售情況隨著時間的變化是怎樣的?
時間上的列是wkd_ind(只分了工作日和週末),銷售情況可以看customer(顧客人數),revenue(銷售額),order(訂單數量),quant(銷售數量),這裡我們選銷售額。
透過柱狀圖對比工作日和週末的銷售額情況。
透過seaborn中的barplot畫柱狀圖,這裡barplot對比的是revenue的
平均值
,如果要看其他值可以引入‘estimator’引數,從describe()中
發現工作日的銷售額度均高於週末的。
2。不同產品的銷售情況是怎樣的?顧客偏愛哪一種購買方式?
同樣的透過柱狀圖分析不同產品類別對應的銷售額比較。
出現了很多warning,並且柱狀圖下方類別顯示不出來,font說明這是由於字型顯示的問題,換一種可以顯示的字型
https://
segmentfault。com/a/1190
000005144275
具體方法可以看下上方連結
可以把柱狀圖按照從大到小的順序排列嗎?當然可以。
可以先做一個索引排序
按照revenue的平均值進行從大到小(ascending=False)的排序,然後輸出index
sort_values()是python中常用來排序的函式,具體使用可以參考上圖。
將索引序列給到order,這樣柱狀圖就可以按照從大到小展示。
發現毛衣,配件的平均銷售額最高,短褲和襪子的平均銷售額最低。
顧客偏愛哪一種購買方式?
這個問題可以透過分析不同類別的客戶線上線下的購買方式佔比。
上圖為透過分析
不同城市
的客戶在線上線下購買商品的總額的柱狀對比圖,
圖上沒有深圳,杭州北京南京等城市的線上資料,可能資料來源不是很可靠,上海,重慶,西安的客戶更偏向於線下購物;因為資料來源有點問題,從總量上就不對比了。
透過分析
不同性別
的客戶:
這邊性別有未知的,前面資料清洗沒有做到位。
無論男女,都更偏好線下交易。
但是如果看平均值的話會發現線上交易的銷售平均額度都高於線下。
這個也許是因為優衣庫只有滿200才能免運費,或者線上優惠券比較多從而消費比較多
透過分析
不同年齡
的客戶:
從年齡上分析,這個比較明顯,都是線下的總額高於線上。
3。銷售額和產品成本之間的關係怎麼樣?
透過銷售額和產品成本可以看出商品的利潤,我們可以看下不同產品的利潤如何。
我們新建一列[‘margin’]來記錄利潤,利潤=單件銷售額-單件成本
發現毛衣,裙子,配件的利潤均值最高
平均的利潤是正的,那是否有個別產品的利潤是負的呢?利用箱線圖可以觀察
這裡我們用到SNS總的‘boxplot’
發現毛衣雖然平均利潤高但是有許多產品是負利潤的,T恤有很多高利潤的產品,這可能說明優衣庫經常進行毛衣的促銷活動,從總體角度來看活動可能帶動了毛衣的銷量提升了產品的總利潤。
如果我們要來看銷售額和成本是否有相關性,該怎麼看呢?可以用熱力圖分析
我們可以分析‘利潤’,‘單件銷售額’,‘單件成本’三個變數的相關性,用corr()函式分析,可以發現‘利潤’和‘單件銷售額’有很高的正相關性。
可以呼叫seaborn中的heatmap()畫熱力圖,顏色越淺表示相關性越高,從圖中可以清晰地看出margin和unit_revenue的相關性很高,銷售額和單件成本也是正相關,
說明產品成本越高,銷售額越高,業務上可以多引入高階商品。