標籤:

醫院銷售數據分析—數據分析的基本過程

一 提出問題

當面對一個csv或者excel文件的時候,第一步是用python打開文件然後進行隨便分析嗎?不是這樣的,任何的數據分析都是需要有一個過程的,首先要明白這次數據分析的目的是什麼,數據分析只是手段,只是工具而已,能不能解決所要分析的問題,能不能從數據中發現問題,發現商機,才是重點。

再重複一遍,分析之前一定要明白這次分析是為了什麼。

目前有一份朝陽醫院2018年的銷售數據,當看到這個數據的時候,我們不能隨便分析,能得到什麼結果算什麼結果,首先要有一個分析的目標,就是我們要從數據中發現什麼,針對這個數據,我們想要知道

  1. 月均消費次數
  2. 月均消費金額
  3. 客單價
  4. 消費趨勢

當明白我們想要分析的問題的時候,就可以進行下一步了。

二 理解數據

理解數據是為了數據清洗做準備的,在數據清洗之前,首先肯定要對數據有一個了解,了解數據是什麼類型的,有多少數據什麼的。

首先肯定先導入數據,代碼如下

#首先第一步導入包nimport pandas as pdnimport matplotlib.pyplot as pltnn#然後讀取文件,在讀取文件前,需要安裝xlrd包,n#讀取的時候都用object讀取,防止有些數據讀取不了nsales= pd.read_excel(D:朝陽醫院2018年銷售數據.xlsx,dtype = object)n#看看數據情況nsales.info()nn#結果n<class pandas.core.frame.DataFrame>nRangeIndex: 6578 entries, 0 to 6577nData columns (total 7 columns):n購葯時間 6576 non-null objectn社保卡號 6576 non-null objectn商品編碼 6577 non-null objectn商品名稱 6577 non-null objectn銷售數量 6577 non-null objectn應收金額 6577 non-null objectn實收金額 6577 non-null objectndtypes: object(7)nmemory usage: 359.8+ KBn

再看一下數據具體長什麼樣

圖1 醫院銷售數據樣例

通過對前幾行數據的觀察,我們發現,這個數據肯定是要進行進一步的數據清洗的,方便我們的數據分析。

三 數據清洗

1 選擇子集

在我們獲取到的數據中,數據量十分龐大,但是不是每一列都是我們所需要分析的呢,不一定,那麼這個時候就要選擇整個數據中合適的子集去進行分析,這樣可以使後續的分析變得更加方便,在本次案例中,不需要選擇子集,所以可以先跳過這一步。

2 列名重命名

在數據的獲取中,有時候會有一些列名和數據不那麼符合,或者容易產生歧義,一不小心就理解錯了,很不利於分析,在這個時候,就需要給列名重命名。代碼如下

#把購葯時間改成銷售時間比較有利於理解,inplace=True,直接在原數據框內改動nsales.rename(columns = {購葯時間:銷售時間}, inplace = True)n#看一下有沒有被改動nsales.head()n

3 缺失數據處理

任何一個得到的數據都很有可能會有缺失值,那麼對於這些缺失值一定需要處理一下,不然會干擾後來的分析結果。刪除缺失值用dropna函數,代碼如下

#沒有時間和社保卡號的消費數據對於本次分析是無效的,n#所以清理一下缺失值nsales = sales.dropna(subset = [ 銷售時間,社保卡號],how = any)n

4 數據類型處理

在導入的時候為了防止有些數據導入不進來,所以強制所有數據都是object類型,但在實際分析上這樣是不可能的,所以要把需要改變類型的數據類型改變了,通過觀察,我們發現,銷售數量,應收金額,實收金額,應該改成float類型,銷售時間應該清理後改成時間類型,對於改變成float類型的幾列,使用astype函數,代碼如下。

sales[銷售數量] = sales[銷售數量].astype(float)nsales[應收金額] = sales[應收金額].astype(float)nsales[實收金額] = sales[實收金額].astype(float)n

而銷售時間那一列,則需要進行處理後才能轉換為時間類型,把銷售時間的日期和星期分開

代碼如下:

sales[銷售時間], sales[銷售星期] = sales[銷售時間].str.split( , 1).strn

切分好之後,把銷售時間變為時間類型,代碼如下

sales[銷售時間] = pd.to_datetime(sales[銷售時間], nformat = %Y-%m-%d,errors = coerce)n

5 排序

但是在這個時候時間是無序排列的,所以還是需要排序一下,排序之後索引會被打亂,所以也需要重置一下索引。代碼如下

#對數據按照時間排序nsales = sales.sort_values(銷售時間, ascending = True)n#排序之後再重置一下indexnsales = sales.reset_index(drop = True)nsales.head()n

6 異常值處理

在排序結束之後簡單看一下數據的整體情況

圖2 數據基本情況

從數據基本情況可以看出,銷售數量和應收金額,實收金額,都有負的異常值,需要把這些值捨去,即選取銷售數量和應收金額大於0的列,代碼如下

#選取銷售數量和應收金額大於0的列nsales = sales[(sales[銷售數量] > 0) & (sales[應收金額] > 0)]n

做完以上的幾個步驟之後,就基本上完成了數據清洗得到大部分內容了,可以對數據進行一個分析了。

四 數據分析

數據分析就是要解決第一步的時候所提出的問題的,針對問題,運用不同的分析方法。

1 月均消費次數

這裡的約均消費次數定義為總次數除以月份,其中假如一個人一天買了兩次葯,但只算做消費了一次,即計算次數的時候需要進行去重處理。

#首先對數據進行一個去重,使用drop_duplicates函數nsalesqc = sales.drop_duplicates(subset = [銷售時間, 社保卡號])n#去重後看一下共有多少條購買數據(結果為5363)nTotal = salesqc.shape[0]nn#再計算月份n#用銷售時間的最大值減去最小值即可得到天數,再除以(地板除)三十就可以得到月份了nmonth = (sales[銷售時間].max() - sales[銷售時間].min()).days//30nnKPI1 = Total / monthnprint(月均消費次數為:, KPI1)nn輸出結果為:n月均消費次數為: 893.8333333333334n

即可得知,月均消費次數約為894次。

2 月均消費金額

同樣,月均消費金額為總金額除以月份,在計算總金額的時候不能去重,需要都計算上金額。

#計算總金額nTotal1 = sales[實收金額].sum()nnKPI2 = Total1 / monthnnprint(月均消費金額為:, KPI2)nn月均消費金額為: 50909.695n

可以知道,月均消費金額約為50909元。

3 客單價

客單價就是總的消費金額除以總的購買次數。

kdj = Total1 / Totalnnprint(客單價為:, kdj)nn客單價為: 56.9565858661n

4 消費趨勢

關於消費趨勢,首先我們先來看一下每天的消費總金額的變化,把數據按天聚合,繪圖,代碼如下。

##對去重後的數據按照天進行重新採樣n#首先要把索引變成時間nsales.index = pd.DatetimeIndex(sales[銷售時間])n#然後對其按照每天從新採樣nsalesd = sales.resample(D).count()nn#畫圖nsalesd.plot(x = salesd.index, y = 實收金額)nplt.xlabel(Time)nplt.ylabel(Money)nplt.title(xiao shou shu ju)nplt.show()n

圖3 每天消費數據總額

可以看出每天消費總額有高有低,其中出現幾個峰值消費數據特別高,下面按月採樣看一下每個月的總銷售額是否有很大的差異。

#按月採樣nsalesm = sales.resample(M).count()n#畫圖nsalesm.plot(x = salesm.index, y = 實收金額)nplt.xlabel(Time)nplt.ylabel(People)nplt.title(ke liu liang (month))nplt.show()n

圖4 按月的消費總額

圖5 按月的客流量走勢

由這兩個圖我們其實可以看出,該藥店的銷售總額和客流量基本成正比。二月份的客流量最少,同樣銷售業績也最差,同樣的四月份客流量最高,銷售總額也最多。

但是六月份客流量變少了,而消費總額卻變多了,可能是因為人均買的葯更貴了,具體原因尚且不得而知,七月份的數據如此小的原因是因為七月份只統計了半個月的數據,數據不全,不能拿來做比較。

將銷售數據按星期分組,得到如下結果。

圖6 按星期的銷售總額

通過這裡,我們可以發現,周五周六的銷售總額要顯著的的高於其他日期,即周五周六應該前來買葯的人更多,銷售的藥品更多。

即每周的銷售趨勢是周日到周四銷售總額會有波動,但是幅度不大,周五周六的銷售總額相對較高,按月份比較的話,四月份的銷售總額顯著的高,而二月份的銷售總額顯著的低,猜測銷售總額非常低是因為春節的緣故。

大概的數據分析過程就是這樣了~


推薦閱讀:

歐先生(R語言)玩轉Tensorflow(四)
數據的分組匯總-基於R的reshape包
FinTech Club【上海站】報名|數據驅動科技金融新增長

TAG:数据分析 |