R 語言簡單數據處理和分析

實驗目標:

通過對朝陽醫院2016年銷售數據進行處理和分析,獲得以下4個指標:月均消費次數、月均消費金額、客單件、消費趨勢

實驗材料:

  • 朝陽醫院2016年銷售數據.xlsx
  • packages:openxlsx 和 stringr

實驗步驟:

1,選用 openxlsx 讀取 Excel數據

#安裝packages("openxlsx")

install.packages("openxlsx")

library("openxlsx")

#讀取數據

#指定數據路徑

readFilePath <- "/Users/chaorenbuhuifei/Documents/workspace/bigdata/闖關遊戲課程《從零學會大數據核心:數據分析》/第3關:簡單數據處理和分析/源代碼和數據/朝陽醫院2016年銷售數據.xlsx"

sellData <- read.xlsx(readFilePath,sheet = 1)

2,數據預處理

2.1 列名重命名

#考慮到R對中文支持不太好以及便於編寫代碼,對列進行重命名

names(sellData) <-c("time","SscNo","drugCode","drugName","sellAmount","receivables","received")

2.2 刪除缺失數據

#刪除所有含有缺失數據的行,此處僅刪除time為空的記錄

sellData <- sellData[!is.na(sellData$time),]

2.3 處理日期

#處理日期

#選用 R語言字元串處理包stringr

library(stringr)

timesplit <- str_split_fixed(sellData$time," ",n=2) #此處注意,雙引號之間是空格

sellData$time <- timesplit[,1]

2.4 數據類型轉換

#數據類型轉換

class(sellData$time)

sellData$time <- as.Date(sellData$time,"%Y-%m-%d")

class(sellData$time)

2.5 數據排序

#按照時間升序排列

sellData <- sellData[order(sellData$time,decreasing = FALSE),]

3,獲得4個指標

根據4個指標來看,我們需要獲取總消費次數、總月份、總消費金額

#同一天內,同一個人發生的所有消費算作一次消費,因此需要先根據此條件進行數據去重

kpi1 <- sellData[!duplicated(sellData[,c("time","SscNo")]),

#通過nrow函數獲取總消費次數

consumerNumber <- nrow(kpi1)

#開始獲取總月份處理

starttime <- kpi1$time[1]

endtime <- kpi1$time[nrow(kpi1)]

day <- endtime - starttime

# %%對"difftime"對象不適用,必須先轉換為numeric

month <- as.numeric(day) %/% 30

3.1 計算月均消費次數

#月均消費次數 等於 總消費次數 除以總月份

monthConsume <- consumerNumber / month

3.2 計算月均消費金額

#月均消費金額等於 總消費金額處以總月份

totalMoney <- sum(sellData$received,na.rm = TRUE)

monthMoney <- totalMoney / month

monthMoney

3.3 計算客單價

#客單價等於 總消費金額/總消費次數

pct <- totalMoney / consumerNumber

3.4 繪製消費趨勢

#消費趨勢

week <- tapply(sellData$received,

format(sellData$time,"%Y-%U"),

sum)

week

week <-as.data.frame.table(week)

names(week) <- c("time","recevied")

week$time <- as.character(week$time)

week$timeNumber <- c(1:nrow(week))

#注意,如果Plot遇到中文亂碼,請用family參數指定下本地計算機中的中文字體即可

plot(week$timeNumber,week$recevied,

family = STFangsong,

xlab = "時間(年份-第幾周)",

ylab ="消費金額",

xaxt = "n",

main = "2016年朝陽醫院消費曲線",col.main = "red",

col = "blue",

type = "b")

axis(1,at=week$timeNumber,labels = week$time,cex.axis = 1.5)

總結:

1,通過本次練習,複習了簡單數據處理的基本步驟 依次為列名重命名、刪除缺失的數據、處理日期、數據類型轉換、數據排序

2,通過本次練習,複習了列名重命名函數、數據類型轉換函數、排序函數、字元串處理函數、sum 函數、分組函數tapply

3,通過本次練習,複習了Plot 繪圖

4,sellData[order(sellData$time,decreasing = FALSE),] 實驗結果是按照時間生序排列,而非學習文檔中所說的降序排列

5,Plot繪圖會遇到中文亂碼的問題,實質在於未指定中文字體。本人使用mac 電腦解決方案是用family參數指定下本地計算機中已安裝的中文字體。

延伸:如何查看mac中已安裝的中文字體

  • command + 空格 調出搜索,錄入 字體
  • 雙擊字體冊
  • 查看字體的PostScript名稱,family 參數指定時候填寫PostScript名稱

6,知乎文章複製過來的代碼,一般不要直接在R 中執行,會有意想不到的錯誤。

推薦閱讀:

回顧與展望轉行數據科學路上的點點滴滴(2016-2018)
一些關於TI7隊伍的數據分析——Liquid篇
用戶畫像學習
數據分析(1)-Python基礎

TAG:R編程語言 | 數據分析 |