數據結構從0到1——初級篇
拯救世界的機會可不是每天都有的,好好享受吧。
——但丁《鬼泣》
下面就看一看簡單的數據分析的步驟:
1. 導入原始數據
2. 數據預處理
- 列名重命名
- 刪除缺失數據
- 處理日期
- 數據類型轉換
- 數據排序
3. 數據分析(實際需求)
"這裡的數據分析以朝陽醫院2016年銷售數據為例 "
Step1: 導入原始數據
- 這裡需要導入的文件格式是.xlsx,需要提前安裝openxlsx包(用於讀取Excel數據),將.xlsx文件讀入R中,並將數據保存在excelData中。
#安裝openxlsx包install.packages("openxlsx") #向文件中引入openxlsx包 library("openxlsx") #讀取導入文件readFilePath <- "C:/Users/Administrator/Desktop/朝陽醫院2016年銷售數據.xlsx" #將導入的表格(Sheet1)數據賦給excelData數據框excelData <- read.xlsx(readFilePath,"Sheet1")
Step2: 數據預處理
- 列表重命名
#列表重命名names(excelData) <- c("time","cardno","drugId","drugName","saleNumber","virtualmoney","actualmoney")
=>
# names()的用法
- 刪除缺失數據
excelData <- excelData[!is.na(excelData$time),]
# is.na()的用法
- 處理日期
需要提前安裝stringr包
#安裝stringr包install.packages("stringr")#向文件中引入stringr包library("stringr")#調用str_split_fixed()函數timeSplit <- str_split_fixed(excelData$time, " ",2)#將返回值給excelData$timeexcelData$time <- timeSplit[,1]
# str_split_fixed()的用法
=>
- 數據類型轉換
#查看數據類型(excelData$time為"character",不能進行邏輯運算)class(excelData$time)#轉換數據類型("character" -> "Date")excelData$time <- as.Date(excelData$time,"%Y-%m-%d")#銷售數量("character" -> "numeric")excelData$saleNumber <- as.numeric(excelData$saleNumber)#應收金額(打折前的金額)("character" -> "numeric")excelData$virtualmoney <- as.numeric(excelData$virtualmoney)#實收金額(打折後的金額)("character" -> "numeric")excelData$actualmoney <- as.numeric(excelData$actualmoney)
# as.xxxxx()的用法
# is.xxxxxx()的用法
- 數據排序
#調用order()函數,根據excelData$time按升序排序(decreasing = FALSE),返回值返回給excelDataexcelData <- excelData[order(excelData$time,decreasing = FALSE),]
# order()的用法
Stept3: 數據分析(實際需求)
需求:
- 月均消費次數
- 月均消費金額
- 客單價
- 消費趨勢
1.月均消費次數:
月均消費次數 = 總消費次數 / 月份數
總消費次數:同一天內,同一人發生的所以消費算作一次消費
- 總消費次數
#調用duplicated()函數,按照time和cardno一樣的行刪除重複行kpi1 <- excelData[!duplicated(excelData[,c("time","cardno")])]#總消費次數consumeNumber <- nrow(kpi1)
#duplicated()的用法
- 月份數
#獲取時間範圍#最小時間startTime <- kpi1$time[1]#最大時間endTime <- kpi1$time[nrow(kpi1)]#天數day <- endTime - startTime#月份數(需要把day的數據類型轉為數字型,才能進行算術運算)month <- as.numeric(day)%/%30
- 月均消費次數
#月均消費次數monthConsume <-consumeNumber / month
2. 月均消費金額
月均消費金額 = 總消費金額 / 月份數
總消費金額為實收金額(actualmoney)
- 總消費金額
#總消費金額totalMoney <- sum(excelData$actualmoney,na.rm = TRUE)
- 月均消費金額
#月均消費金額monthMoney <-totalMoney / month
3. 客單價
客單價 = 總消費金額 / 總消費次數
#客單價pct <-totalMoney / consumeNumber
4. 消費趨勢
這裡我們按周為單位來觀察消費趨勢的變化
首先計算每周的消費金額
- 周消費金額
#周消費金額week <-tapply(excelData$actualmoney,format(excelData$time, "%Y-%U"),sum)
# tappy()的用法
最後繪製(周消費金額 — 周)曲線圖
#曲線圖繪製信息預處理#將week轉換成數據框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 = "消費金額",main = "2016年朝陽醫院消費曲線",col="blue",type="b")#自定義坐標系axis(1,at=week$timeNumber,labels = week$time,cex,axis = 1.5)
# plot()的用法
# axis()的用法
學習總結
經過對醫院數據的處理,讓我明白了,第一,數據的預處理真的很重要,因為數據在採集中必然會存在多多少少的錯誤,比如誤讀,缺失,所以在預處理部分需要把不正確的數據刪掉,再進行,其中就用到了is.na(),處理缺失的數據。第二,對於數據類型來說,在邏輯和算術運算中很重要,不同的數據類型在計算中的規則不一樣,在這次數據分析中,我們用is/as.xxxx()進行判斷/轉換,以及class()的說明。第三,引入了stringr包,利str_split_fixed()的功能,對字元串進行拆分,對處理字元串問題幫助很大。第四,實現了數據的可視化,對處理的數據進行繪圖,其中用到了plot()對繪圖的參數進行設置,axis()定義了符合需求的坐標系。
通過這次學習,讓我學會了對數據的簡單操作,以及一些函數的使用,使用R的規則等等。
以後的路上,做個永遠的行動派!
推薦閱讀:
※利用KMeans聚類進行航空公司客戶價值分析
※python文本分析實例:螞蜂窩上的驢友們在聊些什麼?
※Kaggle: 5000 TMDb電影數據分析實戰
※Python語言基礎
※用Power BI瀑布圖查看服飾公司財務狀況(以李寧和阿迪達斯為例)
TAG:數據分析 |