標籤:

第三關:簡單數據處理和分析

目標

此次的實踐內容是對文件:「朝陽醫院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

這裡可以立刻得到一個我們需要數值:總消費次數。即此刻mytable數據框的行數:5398

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

把矩陣timeSplit的V1列賦值給mytable$time列

mytable$time <- timeSplit[,1]n

要得到最早的和最晚的一天,需要對time列的元素進行排序,從早到晚,使用order()函數

mytable <- mytable[order(mytable$time),]n

把mytable的time元素轉換成日期變數便於計算

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编程语言 |