最近學習了Python數據分析的壹些基礎知識,就找了壹個藥品數據分析的小項目來練壹下手。
數據分析的目的:
本篇文章中,假設以朝陽醫院2018年銷售數據為例,目的是了解朝陽醫院在2018年裏的銷售情況,通過對朝陽區醫院的藥品銷售數據的分析,了解朝陽醫院的患者的月均消費次數,月均消費金額、客單價以及消費趨勢、需求量前幾位的藥品等。
數據分析基本過程包括:獲取數據、數據清洗、構建模型、數據可視化以及消費趨勢分析。
數據準備
數據是存在Excel中的,可以使用pandas的Excel文件讀取函數將數據讀取到內存中,這裏需要註意的是文件名和Excel中的sheet頁的名字。讀取完數據後可以對數據進行預覽和查看壹些基本信息。
獲取數據:朝陽醫院2018年銷售數據.xlsx(非真實數據) 提取碼: 6xm2
導入原始數據
數據準備
數據是存在Excel中的,可以使用pandas的Excel文件讀取函數將數據讀取到內存中,這裏需要註意的是文件名和Excel中的sheet頁的名字。讀取完數據後可以對數據進行預覽和查看壹些基本信息。
獲取數據:朝陽醫院2018年銷售數據.xlsx(非真實數據) 提取碼: 6xm2
導入原始數據
數據清洗
數據清洗過程包括:選擇子集、列名重命名、缺失數據處理、數據類型轉換、數據排序及異常值處理
(1)選擇子集
在我們獲取到的數據中,可能數據量非常龐大,並不是每壹列都有價值都需要分析,這時候就需要從整個數據中選取合適的子集進行分析,這樣能從數據中獲取最大價值。在本次案例中不需要選取子集,暫時可以忽略這壹步。
(2)列重命名
在數據分析過程中,有些列名和數據容易混淆或產生歧義,不利於數據分析,這時候需要把列名換成容易理解的名稱,可以采用rename函數實現:
(3)缺失值處理
獲取的數據中很有可能存在缺失值,通過查看基本信息可以推測“購藥時間”和“社保卡號”這兩列存在缺失值,如果不處理這些缺失值會幹擾後面的數據分析結果。
缺失數據常用的處理方式為刪除含有缺失數據的記錄或者利用算法去補全缺失數據。
在本次案例中為求方便,直接使用dropna函數刪除缺失數據,具體如下:
(4)數據類型轉換
在導入數據時為了防止導入不進來,會強制所有數據都是object類型,但實際數據分析過程中“銷售數量”,“應收金額”,“實收金額”,這些列需要浮點型(float)數據,“銷售時間”需要改成時間格式,因此需要對數據類型進行轉換。
可以使用astype()函數轉為浮點型數據:
在“銷售時間”這壹列數據中存在星期這樣的數據,但在數據分析過程中不需要用到,因此要把銷售時間列中日期和星期使用split函數進行分割,分割後的時間,返回的是Series數據類型:
此時時間是沒有按順序排列的,所以還是需要排序壹下,排序之後索引會被打亂,所以也需要重置壹下索引。
其中by:表示按哪壹列進行排序,ascending=True表示升序排列,ascending=False表示降序排列
先查看數據的描述統計信息
通過描述統計信息可以看到,“銷售數量”、“應收金額”、“實收金額”這三列數據的最小值出現了負數,這明顯不符合常理,數據中存在異常值的幹擾,因此要對數據進壹步處理,以排除異常值的影響:
數據清洗完成後,需要利用數據構建模型(就是計算相應的業務指標),並用可視化的方式呈現結果。
月均消費次數 = 總消費次數 / 月份數(同壹天內,同壹個人所有消費算作壹次消費)
月均消費金額 = 總消費金額 / 月份數
客單價 = 總消費金額 / 總消費次數
從結果可以看出,每天消費總額差異較大,除了個別天出現比較大筆的消費,大部分人消費情況維持在1000-2000元以內。
接下來,我銷售時間先聚合再按月分組進行分析:
結果顯示,7月消費金額最少,這是因為7月份的數據不完整,所以不具參考價值。
1月、4月、5月和6月的月消費金額差異不大.
2月和3月的消費金額迅速降低,這可能是2月和3月處於春節期間,大部分人都回家過年的原因。
d. 分析藥品銷售情況
對“商品名稱”和“銷售數量”這兩列數據進行聚合為Series形式,方便後面統計,並按降序排序:
截取銷售數量最多的前十種藥品,並用條形圖展示結果:
結論:對於銷售量排在前幾位的藥品,醫院應該時刻關註,保證藥品不會短缺而影響患者。得到銷售數量最多的前十種藥品的信息,這些信息也會有助於加強醫院對藥房的管理。
每天的消費金額分布情況:壹橫軸為時間,縱軸為實收金額畫散點圖。
結論: 從散點圖可以看出,每天消費金額在500以下的占絕大多數,個別天存在消費金額很大的情況。
</article>