R語言第二戰之朝陽醫院銷售數據解密

一、安裝openxlsx包並載入包

install.packages("openxlsx")library("openxlsx")

我在Rstudio里安裝出錯,所以我搜索了下要退出Rstudio,進入R x64 3.4.1命令行去裝,然後成功了,openxlsx只能讀取xlsx後綴的文件,xls的自己手動轉化一下。

二、導入xlsx文件

readFilePath<-"D:/BaiduYunDownload/從零入門大數據核心:數據分析/闖關遊戲課程《從零學會大數據核心:數據分析》/第3關:簡單數據處理和分析/作業/朝陽醫院2016年銷售數據.xlsx"excelData<-read.xlsx(readFilePath,"Sheet1")

注意路徑的里的斜杠為正斜杠「/」

三、對數據做預處理

#修改數據框中的數據excelData<-edit(excelData)#去掉數據框中缺失的數據excelData<-na.omit(excelData)#用names函數對數據框列名重新命名names(excelData)<-c("time","cardno","drugId","drugName","saleNumber","vitualmoney","actualmoney")#去除空的時間的值excelData<-excelData[!is.na(excelData$time),]

你可以用edit調用編輯器手動修改excel導入後的數據,然後通過na.omit函數去除缺失數據,再把中文列名轉化為英文列名,最後去除時間為空的值,is.na()函數用來判斷excelData$time列中的數據是否為空的,若為空則返回TRUE,感嘆號是非的意思,連起來就是判斷excelData$time中非TURE的數據,然後通過數據框把這些數據查詢出來放入excelData中,注意右中括弧內的逗號一定要有,不然報錯,!is.na(excelData$time)這部分代表行查詢,列查詢為空。

四、分割time中的數據並轉換

#安裝字元串處理包要退出Rstudioinstall.packages("stringr")#載入包library("stringr")timeSplit<-str_split_fixed(excelData$time," ",2)#將矩陣中的第一列數據全部複製到excelData的time中excelData$time<-timeSplit[,1]#用class函數查看excelData$time的類型為字元串class(excelData$time)#轉換time的字元串為日期類型,例如:2016-01-01excelData$time<-as.Date(excelData$time,"%Y-%m-%d")

這裡說下 str_split和str_split_fixed分割字元串函數的區別

函數定義:str_split(string, pattern, n = Inf)str_split_fixed(string, pattern, n)參數列表:string: 字元串,字元串向量。pattern: 匹配的字元。n: 分割個數對字元串進行分割。

用str_split()函函數分割,結果類型是list,用str_split_fixed()函數分割,結果類型是matrix。

分割完後就將字元串的類型轉換成日期型,這裡要多注意用class查看你從excel導入的數據類型,為了後期運算做準備,下面把銷售數量等字元串都轉換成數字

#銷售數量excelData$saleNumber<-as.numeric(excelData$saleNumber) #應收金額(打折前的金額)excelData$vitualmoney<-as.numeric(excelData$vitualmoney)#實收金額(打折後的金額)excelData$actualmoney<-as.numeric(excelData$actualmoney)

五、排序、去重複提取自己需要的數據

#按照銷售時間對數據進行降序排序#decreasing是減少的意思,減少為FALSE就是增加=升序(由小到大),減少為TRUE就是減少=為降序(由大到小)excelData<-excelData[order(excelData$time,decreasing=FALSE),]#去除日消費次數重複,!duplicated去除重複行函數,選取time和cardno一樣的行刪除。kpi1<-excelData[!duplicated(excelData[,c("time","cardno")]),]#獲取總的消費次數colsumenumber<-nrow(kpi1)#最小的時間值startTime<-kpi1$time[1]#最大的時間值,或者寫成endTime<-kpi1$time[colsumenumber]endTime<-kpi1$time[nrow(kpi1)]#天數=最大時間-最小時間然後轉換成數字day<- as.numeric(endTime -startTime)#月份數month<- day%/%30#獲取月均消費次數monthConsume<-colsumenumber/monthmonthConsume <- format(round(monthConsume, 2), nsmall = 2)#獲取月均消費金額totalMoney<-sum(excelData$actualmoney,na.rm = TRUE)monthMoney<-totalMoney/month#客單價計算pct<-totalMoney/colsumenumber#計算每周的消費金額,tapply匯總後計算出每周的消費情況week<-tapply(excelData$actualmoney,format(excelData$time,"%Y-%U"),sum)

1、round() 函數為四捨五入函數

例:x <- c(3.1416, 15.377, 269.7)

round(x, 0) #保留整數位

round(x, 2) #保留兩位小數

round(x, -1) #保留到十位

2、format()函數為格式化數字和字元串,可以使用format()函數將數字和字元串格式化為特定樣式。

格式化函數的基本語法是 -

format(x, digits, nsmall, scientific, width, justify = c("left", "right", "centre", "none"))

以下是所使用的參數的描述 -

x是向量輸入。

digits是顯示的總位數。

nsmall是小數點右邊的最小位數。

科學設置為TRUE以顯示科學記數法。

width指示通過在開始處填充空白來顯示的最小寬度。

justify是字元串向左,右或中心的顯示。

3、sum(x) #對x中的元素求和

4、tapply()函數用於向量的匯總分析,tapply(x,f,g)x為向量,f為因子列,g為操作函數

六、數據轉換成需要畫圖的數據框,然後通過plot函數繪圖

#數據轉換成數據框week<-as.data.frame.table(week)#重命名列名names(week)<-c("time","actualmoney")week$time<-as.character(week$time)week$timeNumber<-c(1:nrow(week))#繪製圖形plot(week$timeNumber,week$actualmoney, xlab="時間(年份-第幾周)", ylab="消費金額", xaxt="n", main="2016年朝陽醫院消費曲線", col="blue", type="b")axis(1,at=week$timeNumber,labels = week$time)

1、plot(week$timeNumber,week$actualmoney)代表X軸數據為時間(年份-第幾周),Y軸數據代表消費金額。

plot函數中xlab和ylab代表xy軸的標籤,xaxt="n" 意思是禁用x軸的刻度線,main代表圖形的標題,col代表劃線的顏色, type代表圖形類型。

2、axis()來創建自定義的坐標軸,而非使用R中的默認坐標軸。

axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...)

side 一個整數,表示在圖形的哪邊繪製坐標軸(1=下,2=左,3=上,4=右);案例中是1代表下面的坐標軸。

at 一個數值型向量,表示需要繪製刻度線的位置 ;繪製了30個軸的刻度線。

labels 一個字元型向量,表示置於刻度線旁邊的文字標籤(如果為 NULL,則將直接使用at 中的值)。

  • 總結:
  • 1、通過本次學習,學會了怎樣載入包,也就是通常說的函數庫,也學習了很多新的函數,日常的一些分割函數,數學函數,數據類型的轉換函數,格式化函數,繪圖函數等。
  • 2、數據框的數據調用格式很重要,數據類型從excel讀取後還要把類型用class函數複查一下,關於數據類型的讀取和轉換我還有個例子:

#用openxlsx的convertToDate轉成R中的日期格式excelData$time<-convertToDate(excelData$time)#查看time是否為日期格式class(excelData$time)#停機時長轉換成小時數比如:4:45(4小時45分鐘)excelData$stoptime<-convertToDateTime(excelData$stoptime)excelData$stoptime<-format(excelData$stoptime,format="%H:%M:%S")

excel讀取的數據不少坑,這個以後要注意,前期的數據準備和預處理做的好不好會嚴重影響後期的運算和編碼速度,細心的進行預處理很重要。

  • 3、對你所想計算的數值你要有個預先熟悉的過程,比如總銷售次數,這個涉及到業務層面怎麼計算的,跟業務這塊溝通好,然後自己根據銷售數據取到,取出來的數據需要把匯總到數據框里,然後通過對數據框的數據進行繪圖,也就是從眾多數據中整理,匯總,然後為你最後達成的目標所用。繪圖函數只有多使用,才能體會到繪圖函數的用法。

推薦閱讀:

TAG:数据分析 | R编程语言 | 入门指南 |