R語言實戰之簡單數據處理
文圖:蘇州東方之門
寫在前面:學習第三章第四章加闖第三關花了三天時間,效率不高,也不時鑽了牛角尖,但還是有興趣在這上面的,繼續前進!
前兩部分分別為R語言來預處理數據、分析數據,第三部分為Python實現前面的功能。
1 數據預處理
1.1 使用openxlsx包處理xlsx數據library(openxlsx)filepath=D:/Program Files/RStudio/Rwork/data/朝陽醫院2016年銷售數據.xlsxData<-read.xlsx(filepath,1)
1.2 處理缺失值數據
#a刪除所有含有缺失數據的行Data=na.omit(Data)#b清除具體某列含有缺失值的行Data<-Data[!is.na(Data$購葯時間),]dim(Data)
1.3重命名,將中文列名轉為英文
#列名重命名names(Data[1:7<-c(Time,Cardno,Drugld,DrugName,SaleNumber,VirtualMoney,ActualMoney)
1.4日期字元串處理(R語言中字元串看作是一個整體,需要分割)
#日期字元串處理Data$Time<-substr(Data$Time,1,10)#或者library(stringr)Data$Time<-str_split_fixed(Data$Time, ,2)[,1]Data$Time
1.5日期格式轉換
Data$Time<-as.Date(Data$Time,%Y-%m-%d)
1.6數值格式轉換
attach(Data)Data$SaleNumber<-as.numeric(SaleNumber)Data$VirtualMoney<-as.numeric(VirtualMoney)Data$ActualMoney<-as.numeric(ActualMoney)detach(Data)
1.7數據排序
Data<-Data[order(Data$Time,decreasing=FALSE),]
2. 數據處理
2.1 業務指標一:月均消費次數(總消費次數/月數)
#kpi1月均消費次數 ps一個人每天最多只能算消費一次##有效總消費數據kpi1<-Data[!duplicated(Data[,c(Time,Cardno)]),]consumNumber<-nrow(kpi1)##天數及月份數startTime<-kpi1$Time[1]endTime<-kpi1$Time[nrow(kpi1)]day<-as.numeric(endTime-startTime)month<-day %/% 30monthCosume<-consumNumber%/%month> monthCosume[1] 899
2.2 業務指標二:月均消費金額(總消費金額/月數)
#kpi2月均消費金額##總金額totalMoney<-sum(Data$ActualMoney,na.rm=TRUE)monthMoney<-totalMoney/month
2.3業務指標三:客單件(總消費金額/總消費次數)
##kpi3客單價pct<-totalMoney/consumNumber
2.4 業務指標四:業務消費趨勢(按每周消費金額來展示)
##kpi4業務消費趨勢week<-tapply(Data$ActualMoney,format(Data$Time,%Y-%U),sum)week<-as.data.frame.table(week) #轉為數據框dim(week)names(week)[1:2]<-c(time,actualmoney)week$time<-as.character(week$time)week$timeNumber<-c(1:nrow(week))plot(week$timeNumber,week$actualmoney, xlab = 時間(年份—第幾周), ylab=消費金額, main=2016年朝陽醫院消費曲線, type=b, col=blue, xaxt=n #不顯示X軸 )axis(1,at=week$timeNumber,labels=week$time,cex.axis=1)
感覺學了R就把Python忘了和搞混了,只怪我水平還不夠 。
import pandas as pdimport matplotlib.pyplot as pltfrom dateutil.parser import parsefrom datetime import datetime#讀取數據filePath=D:/Program Files/RStudio/Rwork/data/SaleData.xlsxData=pd.read_excel(filePath)#列名重命名Data.columns=[time,cardno,drugld,drugName,saleNumber,virtualmoney,actualmoney]#處理日期格式f=lambda x:x[0:10]Data.ix[:,0]=Data.ix[:,0].apply(f)#數據排序Data=Data.sort_values(by=time)#kpi1:月均消費次數(一個人每天最多 只能算消費一次)kpi1=Data.drop_duplicates([time,cardno])endDate=parse(kpi1.iloc[-1,0])startDate=parse(kpi1.iloc[1,0])day=(endDate-startDate).daysmonth=day//30consume=len(kpi1)consumeMonth=consume//month#kpi2月均消費金額totalMoney=sum(Data.actualmoney)monthMoney=totalMoney/month##kpi3客單價pct=totalMoney/consume#kpi4業務消費趨勢f=lambda x:parse(x).strftime("%Y-%W")kpi4=Data.actualmoney.groupby(Data.ix[:,0].apply(f)).sum()plt.plot(range(len(kpi4)),kpi4.values,g--o)plt.title(2016年朝陽醫院消費曲線,fontproperties=SimHei,fontsize=16)plt.xlabel(時間(年份—第幾周),fontproperties=SimHei,fontsize=12)plt.ylabel(消費金額,fontproperties=SimHei,fontsize=12)# xlabels=kpi4.index[lambda x:x%4==0]plt.xticks(range(len(kpi4))[::4],kpi4.index[::4],rotation=vertical)plt.show()
推薦閱讀:
※入門機器學習到底需要多少數學知識
※遠的數據分析之路
※用SQL實現 excel常用操作(附一些面試原題)
※如何寫出一篇讓人滿意的數據分析報告?