第三關:簡單數據處理和分析
目標
此次的實踐內容是對文件:「朝陽醫院2016年銷售數據.xlsx"中的數據進行處理和分析,並最終完成4個指標:1.月均消費次數;2.月均消費金額;3.客單價;4.消費趨勢。
準備工作
使用R語言對EXCEL表格進行讀取並處理數據可以使用包:openxlsx。那麼第一步就是來安裝這個openxlsx包:
install.packages("openxlsx")nlibrary(openxlsx)n
讀取文件
filePath <- "/Users/Cameron/project/chaoyang/朝陽醫院2016年銷售數據.xlsx"nmytable <- read.xlsx(filePath,"salenumber")n
個人認為在前期處理數據時,必須無情的將含有缺失值的行全部刪除
mytable <- na.omit(mytable)n
考慮到中英文的兼容性,對數據的觀測值更名
names(mytable) <- c("time","cardno","drugId","drugName",n "saleNumber","vritualMoney","actualMoney")n
考慮到指標2為月均消費金額,那麼此時可以提前得出總消費金額:totalmoney
totalmoney <- sum(mytable$actualMoney)n
由於同一個社保卡號在同一天無論消費幾次,都只能算作一次,那麼需要刪除重複行,這裡使用 duplicated()函數 提煉出需要的行
首先,提煉出重複的行
mytable <- mytable[duplicated(mytable[,c("time","cardno")]),]n
通過RStudio觀測當下mytable,如圖:
在duplicated()前面加邏輯運算符「!」,即可反向提煉出我們需要的行,所以最終代碼為:mytable <- mytable[!duplicated(mytable[,c("time","cardno")]),]n
totaltimes <- nrow(mytable)n
指標月均消費次數和月均消費金額,都需要計算出總天數,總天數/30 可得出月份數,
最後一天減去第一天,即為總天數,當下mytable中的time列格式為「2016-02-22 星期一」,這不是正常的Date類型變數,所以我們需要對「2016-02-22 星期一」進行分割以提煉出正常的Date變數。這裡用到stringr包中的字元串匹配函數:str_split_fixed()
str_split_fixed(string, pattern, n)
參數列表:- string: 字元串,字元串向量。
- pattern: 匹配的字元。
- n: 分割個數
library(stringr)ntimeSplit <- str_split_fixed(mytable$time," ", n = 2)n
mytable$time <- timeSplit[,1]n
要得到最早的和最晚的一天,需要對time列的元素進行排序,從早到晚,使用order()函數
mytable <- mytable[order(mytable$time),]n
mytable$time <- as.Date(mytable$time)n
計算總天數totalday,並把得出的結果轉換為數字變數:200
totalday <- as.numeric(mytable$time[nrow(mytable)] - mytable$time[1])】n
總天數/30,即為月份數 monthnumber:6
monthnumber <- totalday %/% 30n
得出指標1:月均消費次數,monthoftimes: 899
monthoftimes <- totaltimes %/% monthnumbern
指標2:月均消費金額 = 總金額 /月份數:50771.71
monthofmoney <- totalmoney / monthnumbern
指標3:客單價 = 總金額 / 總次數 :56.4339
pct <- totalmoney / totaltimesn
指標4:消費趨勢
使用分組計算函數tapply(),以周的形式對實收金額進行分組計算總和
week <- tapply(mytable$actualMoney,format(mytable$time,"%Y-%U"),sum,simplify = TRUE)n
把數組形式的week轉換成數據框形式
week <- as.data.frame.table(week)n
對數據框week的觀測進行重命名
names(week) <- c("time","atualmoney")n
轉換變數類型
week$time <- as.character(week$time)n
在week數據框中增加一列變數
week$timeNumber <- c(1:nrow(week))n
輸出pdf格式文件,由於Mac系統中的RStudio對中文不友好,這裡需要指定字元編碼
pdf(family = "GB1",file = "chaoyang1.pdf")nplot(week$timeNumber,week$atualmoney,main = "2016年朝陽醫院消費曲線",n xlab = "時間(年份-第幾周)",n ylab = "消費金額",n xaxt = "n",n col = "blue",n type = "b" )naxis(1,at = week$timeNumber,labels = week$time,cex.axis = 1 )ndev.off()n
推薦閱讀:
※【譯文】R語言中的缺失值處理
※【R語言基礎】05 數據整合Ⅰ
TAG:R编程语言 |