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)

3 使用Python實現

感覺學了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常用操作(附一些面試原題)
如何寫出一篇讓人滿意的數據分析報告?

TAG:R编程语言 | Python | 数据分析 |