標籤:

數據結構從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:數據分析 |