@猴子 近日,剛學完Python資料分析課程,以下是課堂筆記。
資料來源:朝陽醫院2018年銷售資料.xlsx
(為了友善大家的練習,原始資料如下。拜托,一定要點贊哦。)
提取碼:rffc
1.提出問題
一切分析都是以解決問題為最終目标,是以,我們搜集了業務方提出的以下需求:
2.了解資料
1)讀取資料
#讀取Excel資料,統一先按照str讀入,之後轉換
import pandas as pd
import numpy as np
fileNameStr='E:/朝陽醫院2018年銷售資料.xlsx'
xls=pd.ExcelFile(fileNameStr,dtype='object')
salesDf=xls.parse('Sheet1',dtype='object')
2)資料資訊
列印資料前幾行
salesDf.head()
資料行列資訊
salesDf.shape
檢視列資料類型
salesDf.dtypes
3.資料清洗
1)選擇子集
subSalesDf=salesDf.loc[0:4,'購藥時間':'銷售數量']
subSalesDf
2)列名重命名
colNameDict={'購藥時間':'銷售時間'}
salesDf.rename(columns=colNameDict,inplace=True)
salesDf.head()
3)缺失資料處理
print('删除缺失值前大小',salesDf.shape)
salesDf=salesDf.dropna(subset=['銷售時間','社保卡号'],how='any')
print('删除缺失後大小',salesDf.shape)
4)資料類型轉換
字元串轉換為數值(浮點數)
salesDf['銷售數量']=salesDf['銷售數量'].astype('float')
salesDf['應收金額']=salesDf['應收金額'].astype('float')
salesDf['實收金額']=salesDf['實收金額'].astype('float')
print('轉換後的資料類型:\n',salesDf.dtypes)
處理日期-字元串分割
def splitSaletime(timeColSer):
timeList=[]
for value in timeColSer:
dateStr=value.split(' ')[0]
timeList.append(dateStr)
timeSer=pd.Series(timeList)
return timeSer
timeSer=salesDf.loc[:,'銷售時間']
dateSer=splitSaletime(timeSer)
dateSer[0:3]
salesDf.loc[:,'銷售時間']=dateSer
字元串轉換日期
salesDf.loc[:,'銷售時間']=pd.to_datetime(salesDf.loc[:,'銷售時間'],
format='%Y-%m-%d',
errors='coerce'
)
salesDf=salesDf.dropna(subset=['銷售時間','社保卡号'],how='any')
排序
salesDf=salesDf.sort_values(by='銷售時間',ascending=True)
print(salesDf)
重命名行名
salesDf=salesDf.reset_index(drop=True)
每一列的描述統計資訊:
salesDf.describe()
通過條件判斷篩選出資料
querySer=salesDf.loc[:,'銷售數量']>0
print('删除異常值前:',salesDf.shape)
salesDf=salesDf.loc[querySer,:]
print('删除異常值後:',salesDf.shape)
4.構模組化型
業務名額1:月均消費次數
月均消費次數=總消費次數/月份數
(規定同一天内,同一個人發生的所有消費算作一次消費。)
求總消費次數:
step1:删除重複資料
step2:有多少行
kpi1_Df=salesDf.drop_duplicates(subset=['銷售時間','社保卡号'])
totalI=kpi1_Df.shape[0]
print('總消費次數=',totalI)
求月份數:
step1:排序
step2:擷取時間範圍
step3:計算月份數
kpi1_Df=kpi1_Df.sort_values(by='銷售時間',ascending=True)
kpi1_Df=kpi1_Df.reset_index(drop=True)
startTime=kpi1_Df.loc[0,'銷售時間']
endTime=kpi1_Df.loc[totalI-1,'銷售時間']
daysI=(endTime-startTime).days
monthsI=daysI//30
print('月份數:',monthsI)
業務名額1:月均銷售次數=
kpi1_I=totalI//monthsI
print('業務名額1:月均消費次數=',kpi1_I)
業務名額2:月均消費金額=總消費金額/月份數
totalMoneyF=salesDf.loc[:,'實收金額'].sum()
monthMoneyF=totalMoneyF/monthsI
print('業務名額2:月均消費金額=',monthMoneyF)
業務名額3:客單價=總消費金額/總消費次數
pct=totalMoneyF/totalI
print('客單價:',pct)
5.資料可視化
稍後補充。
記得點贊哦~