小白學(xué)R—簡(jiǎn)單數(shù)據(jù)分析

一、本關(guān)目標(biāo)

對(duì)“朝陽(yáng)醫(yī)院2016年銷售數(shù)據(jù).xlsx"中的數(shù)據(jù)進(jìn)行處理和分析,并完成4個(gè)指標(biāo):1.月均消費(fèi)次數(shù);2.月均消費(fèi)金額;3.客單價(jià);4.消費(fèi)趨勢(shì)。

二、數(shù)據(jù)清洗

1、讀取文件

# 將Excel數(shù)據(jù)變?yōu)閏sv格式后導(dǎo)入
exceldata<-read.table(file.choose(),header = TRUE,
                 sep=",",stringsAsFactors = FALSE)

2、列重命名

# 對(duì)列名進(jìn)行重命名,可使用names()函數(shù)或者交互式編輯器fix()
names(exceldata) <- c("time","cardno","drugID","drugName",
                      "saleNumber","virtualmoney","actualmoney")

3、處理缺失值

exceldata<- exceldata[!is.na(exceldata$time),]
# na.omit()刪除所有含缺失數(shù)據(jù)的行,適用于只有少數(shù)缺失值或缺失值集中在一小部分觀測(cè)中

4、處理日期值

# 用stringr包中的字符串匹配函數(shù):str_split_fixed()
library(stringr)
timesplit <- str_split_fixed(exceldata$time," ",n=2)
exceldata$time <- timesplit[,1]

str_split () 與str_split_fixed ():字符串分割函數(shù)

str_split(string, pattern, n = Inf, simplify = FALSE)
str_split_fixed(string, pattern, n)
參數(shù)列表:
string: 字符串,字符串向量。
pattern: 匹配的字符
n: 分割個(gè)數(shù)(最后一組不會(huì)被分割)。

  • str_split()與str_split_fixed()的區(qū)別在于前者返回列表格式,后者返回矩陣格式。
  • 當(dāng)str_split()中simplify = TRUE時(shí),返回矩陣格式。

5、類型轉(zhuǎn)換

為了指標(biāo)的計(jì)算,需要將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換:

# 購(gòu)藥時(shí)間
exceldata$time <- as.Date(exceldata$time,"%Y-%m-%d")
# 銷售數(shù)量
exceldata$saleNumber <- as.numeric(exceldata$saleNumber)
# 應(yīng)收金額
exceldata$virtualmoney <- as.numeric(exceldata$virtualmoney)
# 實(shí)收金額
exceldata$actualmoney <- as.numeric(exceldata$actualmoney)

6、數(shù)據(jù)排序

# 按照購(gòu)藥時(shí)間對(duì)數(shù)據(jù)進(jìn)行升序排列
exceldata <- exceldata[order(exceldata$time,decreasing = FALSE),]
# order()默認(rèn)decreasing = FALSE,升序排列

三、指標(biāo)計(jì)算

1、月均銷費(fèi)次數(shù)=總消費(fèi)次數(shù)(去重)/月份數(shù)

# 總消費(fèi)次數(shù)(去重):5398
kpi1 <- exceldata[!duplicated(exceldata[,c(1,2)],fromLast = FALSE ),]
consumeNumber <- nrow(kpi1)
# duplicated()默認(rèn)fromLast=FALSE,即若樣本點(diǎn)重復(fù)出現(xiàn),則取首次出現(xiàn)的;去掉重復(fù)樣本值之后的行名

數(shù)據(jù)去重參考: http://blog.csdn.net/qq_35242986/article/details/68927909

# 月份數(shù):6
starttime <- kpi1$time[1]
endtime <- kpi1$time[nrow(kpi1)]
days <- endtime-starttime
months <- as.numeric(days)%/%30
# days為日期值,不能直接用除法,需要轉(zhuǎn)換類型

得到月均消費(fèi)次數(shù):899

# 月均消費(fèi)次數(shù)
monthconsume <- consumeNumber/months

2、月均銷費(fèi)金額=總消費(fèi)金額/月份數(shù)

# 總消費(fèi)金額:304630.3
totalmoney <- sum(exceldata$actualmoney,na.rm = TRUE)

得到月份消費(fèi)金額:50771.71

monthmoney <- round(totalmoney/months,2)

3、客單價(jià)=總消費(fèi)金額/總消費(fèi)次數(shù)(去重)

# 客單價(jià):56.43
pct <- totalmoney/consumeNumber

4、消費(fèi)趨勢(shì)

# 使用分組計(jì)算函數(shù)tapply(),以周的形式對(duì)實(shí)收金額進(jìn)行分組計(jì)算
week <- tapply(exceldata$actualmoney,
               format(as.Date(exceldata$time),"%Y-%W"),sum)

%W從周一到周日計(jì)算,%U從周一到周六計(jì)算,貌似%W更符合中國(guó)人的統(tǒng)計(jì)習(xí)慣。
關(guān)于更多日期格式,請(qǐng)參考:https://www.douban.com/note/347509632/

# 把數(shù)組形式的week轉(zhuǎn)換成數(shù)據(jù)框形式
week <- as.data.frame.table(week)
# 對(duì)數(shù)據(jù)框week的觀測(cè)進(jìn)行重命名
names(week) <- c("time","actualmoney")
# 轉(zhuǎn)換變量類型
week$time <- as.character(week$time)
# 在week數(shù)據(jù)框中增加一列變量
week$timenumber <- c(1:nrow(week))
# 繪制圖表
plot(week$timenumber,week$actualmoney,
     xlab = "時(shí)間(年份-第幾周)",
     ylab = "消費(fèi)金額",
     xaxt = "n", 
     main = "2016年朝陽(yáng)醫(yī)院消費(fèi)曲線",
     col = "blue",
     type ="b")
axis(1,at=week$timenumber,labels = week$time,cex.axis=1.5)
# 去除x軸上的刻度線
# cex.axis 坐標(biāo)軸刻度文字的縮放倍數(shù)


R語(yǔ)言plot函數(shù)參數(shù)合集:http://www.cnblogs.com/wutongyuhou/p/5873056.html

四、問題

1 、對(duì)于基本的數(shù)據(jù)分析“套路”還不清楚,只是跟著操作。
2、 對(duì)于很多函數(shù)以及里面的參數(shù)設(shè)置不熟悉,不清楚如何使用。
跟著老師的操作進(jìn)行了練習(xí),其中出現(xiàn)了很多問題,大部分都能夠自己解決。為了更清晰的理解和記憶,還需要找一些數(shù)據(jù)試著操作一下,發(fā)現(xiàn)問題,解決問題,才是學(xué)習(xí)的最佳途徑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容