從零學數據分析-簡單數據處理與分析
練習數據:
練習目的:通過數據的整理和分析得出以下指標解決思路和步驟:
1、讀取Excel文件
2、數據預處理
a. 列名重命名 b. 刪除缺失數據 c. 處理日期 d. 數據類型轉換 e.數據排序
3、數據分析
計算出:1.月均消費次數:病人到醫院當天消費,不管產生多少消費記錄均看作一次消費次數。月均消費次數=消費總次數/月份數。2.月均消費金額:消費總金額/月份數 3.客單價:消費總金額/消費總次數 4.消費趨勢:以周為單位統計每周消費金額的情況並繪製趨勢圖。
實現過程:
#導入數據並進行查看nlibrary(openxlsx)nexceldata <- read.xlsx("H:/RworkDir/朝陽醫院2016年銷售數據.xlsx", sheet = 1)nhead(exceldata)n
#將列名改為英文名稱nnames(exceldata)nnames(exceldata) <- c("time", "cardno", "drugId", "drugName", "saleNumber", "virualmoney", "actualmoney")nnames(exceldata)n
#time這一列中含有中文的星期內容,要去掉。nlibrary(stringr)ntimesplit <- str_split_fixed(exceldata$time, " ", n = 2) #注意冒號中間有個空格nhead(timesplit) #從這裡可以看出,timesplit是一個數據框nexceldata$time <- timesplit[, 1] #將timesplit的第一列賦值給exceldata中的timen
str_split_fixed()是stringr包中的一個函數,可以對一個字元串向量進行特定形式的分隔。它有三個常用的參數:str_split_fixed(向量, "根據什麼進行分隔", n),其中n表示要分隔成幾份。在上面的實例中,exceldata$time是向量,根據空格將其拆分成兩部分,並將拆分結果返回給timesplit。
#去掉NA數據nexceldata1 <- exceldata[!is.na(exceldata$time),] #只去掉time中含有NA的行nexceldata2 <- na.omit(exceldata) #去掉全部含有NA的行nstr(exceldata)nstr(exceldata1)nstr(exceldata2) #可以看到兩種方法處理後得到的數據框是一樣的,這是因為例子中的表格只有1個含NA的行n
#將字元型的日期轉換為數值型的日期,便於後續操作
數據排列#按銷售時間對全部數據進行升序排列nexceldata <- exceldata[order(exceldata$time, decreasing = FALSE), ]nhead(exceldata)n
數據分析
計算月均消費次數需要分別計算出總消費次數以及總月數。
總消費次數的計算:
#計算總消費次數nkpi1 <- exceldata[!duplicated(exceldata[, c("time", "cardno")]), ]nconsumeNumber <- nrow(kpi1)nhead(kpi1)n
duplicated()函數的左右是去掉向量、數據框或者array中重複的觀測。返回值是由TRUE或者FALSE組成的向量、數據框或者array
exceldata[,c("time", "cardno")] 返回一個含有time和cardno兩個列的數據框,
duplicated(exceldata[, c("time", "cardno")] 返回由TRUE或者FALSE組成的數據框,提供了重複數據的位置。!duplicated(exceldata[, c("time", "cardno")] 就是非重複數據的位置。
總月數的計算:
#計算總月數nstartTime <- kpi1$time[1] nendTime <- kpi$time[nrow(kpi1)]nday <- endTime - startTimenmonth <- day %/% 30n
#月均消費次數nmonthConsume <- consumeNumber / month nn#月均消費額ntotalmoney <- sum(exceldata$actualmoney, na.rm = TRUE)nmonthMoney <- totalmoney / monthn
客單價:
pct <- totalmoney / consumeNumbernpctn
消費趨勢:要繪製消費趨勢,首先要將原數據中的時間和actualmoney分別按周匯總計算,這裡用到分組函數tapply
#繪製消費趨勢nweek <- tapply(exceldata$actualmoney, format(exceldata$time, "%Y-%U"), sum)#生成一個周數-金額的數組nweeknweek <- as.data.frame.table(week)nweeknnames(week) <- c("time", "actualmoney")nweek$time <- as.character(week$time)n
這時周數和每周金額都有了,就可以繪圖了
plot(week$time, week$actualmoney,)n
但是這個圖稍顯簡陋
美化一下:plot(week$time, week$actualmoney,n xlab = "時間(年份-周數)",n ylab = "消費金額", n n main = "朝陽醫院消費趨勢", n col = "blue",n type = "b")naxis(1, at = week$timeNumber, labels = week$time, cex.axis = 1.5)n
就能得到本文開頭處的圖表了。
推薦閱讀:
※Excel如何使用數據透視表進行「中國式」排名
※常見數據分析模型(4)——留存分析
※3個步驟+3個模型,極簡數據分析法
※Kaggle-紐約的士旅程數據簡要分析