用R語言處理Excel數據

數據源:

問題:解決以下四個業績問題

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

首先打開Excel表格,對數據進行大體的瀏覽,思考上面四個問題

解決步驟

第一步:導入源數據

R中,XLConnnect和openxlsx包來處理Excel文件,XLConnnect依賴於Java,我們選擇openxlsx包。R在導入源數據的時候注意導入路徑,如果路徑過長,中文等,會出現導入錯誤。

首先安裝並且導入openxlsx包

> install.packages("openxlsx")nInstalling package into 『D:/用戶目錄/我的文檔/R/win-library/3.3』(as 『lib』 is unspecified)ntrying URLnhttps://cran.rstudio.com/bin/windows/contrib/3.3/openxlsx_4.0.0.zipnContent type application/zip lengthn2379870 bytes (2.3 MB)ndownloaded 2.3 MBnpackage 『openxlsx』 successfully unpackednand MD5 sums checkednThe downloaded binary packages are inn C:UsersAdministratorAppDataLocalTempRtmpiKWFIydownloaded_packages n> library("openxlsx")n

> readFilepath <- "F:/bigdata/朝陽醫院2016年銷售數據.xlsx"#注意路徑書寫n> exceldata <- read.xlsx(readFilepath,"Sheet1")#讀入數據n> View(exceldata)#查看導入的Excel數據n第二步:數據預處理n

1、列名重命名:源數據中列名都是中文,為了保證編碼的正常運行,對其進行英文重命名

> names(exceldata) <- c("time","cardno","drugId","drugName","saleNumber","virtualmoney","actualmoney")n

2、刪除缺失值:缺失值以符號NA(not available)表示,「!」這一邏輯運算符,表示「非」的意思,這裡我們把time列的缺失值進行刪除,第6579行缺失數據被刪除

> exceldata <- exceldata[!is.na(exceldata$time),]n

3、處理日期:源數據中time列日期是以字元串的形式出現的(日期+星期),為了便於數據分析,需要將字元串拆分為相應的單列字元。

str_split_fixed 函數使用前,先使用 nstall.packages (stringr) 安裝,再使用nlibrary (stringr) 引用該包

> library(stringr)

> timesplit <-str_split_fixed(exceldata$time," ",n=2)# time里的字元串被成功分成兩列字元

> exceldata$time <- timesplit[,1]

欄位拆分:

欄位分割函數: str_split_fixed (x, split, n)nx:需要處理的欄位/字元nsplit:用於分割的字元串nn:分隔為多少列n返回值: data.framen4、數據類型轉換:由於運算的需要,需將Time中的字元型向量由「character」轉換為以數值形式存儲的日期變數,函數as.Date()用於執行這種轉化。n

> exceldata$time <-nas.Date(exceldata$time,"%Y-%m-%d")n> class(exceldata$time)n[1] "Date"n#銷售數量、應收金額以及實收金額("SaleNumber"、"Virtualmoney"以及"Actualmoney")這些數據也都可以轉換為數值類型nn> exceldata$saleNumber <-nas.numeric(exceldata$saleNumber)n> class(exceldata$saleNumber)n[1] "numeric"n> exceldata$virtualmoney <-nas.numeric(exceldata$virtualmoney)n

> exceldata$actualmoney <-nas.numeric(exceldata$actualmoney)

5、數據排序對銷售數據按照時間升序進行排列

> exceldata <-nexceldata[order(exceldata$time,decreasing=FALSE),]

第四步:數據分析

1.月均消費次數=總消費次數n/ 月份數(註:同一天內,同一個人發生的所有消費算作一次消費)

2.月均消費金額=總消費金額/n月份數(註:同一天內,同一個人發生的所有消費算作一次消費)

3.客單價(客單價=總消費金額/總消費次數,也即是平均交易金額,門店的銷售額是由客單價和顧客數(客流量)所決定的,因此,要提升門店的銷售額,除了儘可能多地吸引進店客流,增加顧客交易次數以外,提高客單價也是非常重要的途徑。)

4.

消費趨勢(周-消費金額曲線)

問題一、月均消費次數:由於同一天內,同一個人發生的所有消費算作一次消費,所以得剔除其本人當天超過一次的消費記錄。月數則根據30天為1個月進行粗略計算。

> kpi1 <-nexceldata[!duplicated(exceldata[,c("time","cardno")]),]#採用邏輯符號「!」以及"duplicated()"語句就能篩選出非重複的消費次數。

> consumeNumber <- nrow(kpi1) #總消費次數相當於行數n> consumeNumbern[1] 5394n> starttime <- kpi1$time[1] #最小的時間值n> starttimen[1] "2016-01-01"n> endtime <- kpi1$time[nrow(kpi1)] #最大的時間值n> endtimen[1] "2016-07-19"n> day <-nas.numeric(endtime-starttime) #天數n> dayn[1] 200n> month <- day %/% 30#整除法得出月數為6n> monthn[1] 6n> monthconsume <- consumeNumber / monthn> monthconsume#月均消費次數為899次/月n[1] "899.00"n> monthconsume <- format(round(monthconsume,2),nsmall=2)n> monthconsumen[1] "899.00"n

問題二:月均消費金額:月均消費金額=總消費金額/月數,總消費金額是實際消費金額的總和,月數則根據上次計算的6個月計算即可。

> totalmoney <- sum(exceldata$actualmoney,na.rm=TRUE) #採用函數sum求和,並用na.rm剔除缺失值,最終為只對有效值進行求和。n> totalmoneyn[1] 304658.3n> monthmoney <- totalmoney / month#月消費金額為50776.38元n> monthmoneyn[1] 50776.38n

問題三:客單價(pct(per customer transaction)):客單價=總消費金額/總消費次數

> pct <- totalmoney / consumeNumbern> pctn[1] 56.48095n> pct <- format.factor(round(pct,2),nsmall=2) #保留小數點後兩位n> pct#客單價為56.48元/次n[1] "56.48"n

問題四:消費趨勢:以周為時間橫軸,周消費金額為縱軸,繪製折線圖的方式得出周-消費金額曲線

> week <- tapply(exceldata$actualmoney,format(exceldata$time,"%Y-%U"),sum) #據說利用tapply()函數進行數組分類,sum()函數分別求和

> week <- as.data.frame.table(week)

> names(week) <- c("time","actualmoney")

> week$time <- as.character(week$time)

> plot(week$timeNumber,week$actualmoney,xlab="時間(年份-第幾周)",ylab="消費金額",xaxt="n",main="2016年朝陽醫院消費曲線",col="blue",type="b")

> axis(1,at=week$timeNumber,labels=week$time,cex.axis=1.5)

總結:堅持!

推薦閱讀:

大連市2016年空氣質量數據可視化
R語言可視化——ggplot繪製中心密度輻射圖
R語言可視化——數據地圖離散百分比填充(環渤海)
R語言分析告訴你應避開哪個國家以躲避空難
MySQL入門及其與R的交互

TAG:数据分析 | R | MicrosoftExcel |