R簡單數據處理和分析
本文為猴子老師數據分析系列課程第3講:簡單數據處理和分析的具體實踐。
數據:朝陽醫院2016年銷售數據.xlsx
業務指標:
月均消費次數 月均消費金額 客單價 消費趨勢
R的解決思路與步驟:
一、讀取Excel數據
二、對數據進行預處理
Step1:列名重命名
Step2:刪除缺失數據
Step3:處理日期
Step4:數據類型轉換
Step5:數據排序
三、 數據分析
1、月均消費次數(註:同一天內,同一個人發生的所有消費算作一次消費。月均消費次數=總消費次數/月份數)
2、月均消費金額(月均消費金額=總消費金額/月份數)
3、客單價(客單價=總消費金額/總消費次數)
4、消費趨勢(以周-消費金額繪製曲線圖)
在練習時碰到好幾個陌生的函數,在具體的步驟展現之前,先補充一下針對這些陌生函數我通過查找資料整理的一些函數運用相關知識:
字元串處理包stringr中,str_split( ) 與 str_split_fixed( )函數,用於分解字元串。
▼str_split(string, pattrn, n = Inf, simplify = FALSE),默認simplify = FALSE,返回的結果是字元型向量,simplify = TRUE返回的結果是一個矩陣。
▼str_split_fixed(string, pattern, n),返回的結果是一個矩陣。
▼str_split與str_split_fixed,某種條件下可以返回同為矩陣的結果。
!duplicated,提取唯一的無重複的元素。
%U,日期格式符號
%U含義:week number of year, with Sunday as first day of week.
tapply,分組函數,對向量的子集進行操作。
tapply(參數):tapply(向量,因子/因子列表,函數/函數名)
默認simplify = TRUE,把返回的結果本來是一個列表,把它簡化成一個向量。simplify = FALSE,返回得到列表。
ex:tapply(excelData$actualmoney,format(excelData$time,"%Y-%U"),sum)
語句理解:對"excelData$actualmoney"這個向量,按照指定格式"年-周別"進行分組,並對每一組求和。
按照上面的參數, "format(excelData$time,"%Y-%U")"輸出的日期值為一個因子,那應該怎麼將它理解成因子,輸出的日期值是有序型變數嗎?有點繞不過來......
round,數學函數
round(x,digits=n),將x舍入為指定位的小數。
ex:round(3.475,digits=2) 返回值為3.48
format(x, ...)
ex:format(13.7, nsmall = 3)返回值為13.700,nsmall為小數點後的最小位數。
R處理步驟再現:
一、讀取Excel數據(openxlsx包,可以導入大數據量的Excel數據)
這裡使用openxlsx包讀取Excel數據,導入前先安裝、載入"openxlsx"包。
二、對數據進行預處理
Step1:列名重命名(names)
在編碼的世界裡,很多操作都是英文方便,將中文的列名重命名為英文。
Step2:刪除缺失數據(!is.na)
從數據框中選出銷售時間不為空的數據。第6579行缺失數據被剔除。
Step3:處理日期(str_split_fixed、as.Date)
在導入的Excel數據里,購葯時間格式為字元串「2016-01-01 星期五」,分拆出我們想要的字元串「2016-01-01」。
將字元串格式的日期轉換為日期格式。
這裡沒有給出用於讀入日期的適當格式,是因為日期值的默認輸入格式為%Y-%m-%d。
Step4:數據類型轉換(判斷is,轉換as)
Step5:數據排序(order,默認的排序順序是升序)
對銷售數據按照銷售時間進行升序排序。
三、 數據分析
1、月均消費次數(!duplicated、%/%)(註:同一天內,同一個人發生的所有消費算作一次消費。月均消費次數=總消費次數/月份數)
在獲取總消費次數時注意,根據消費數據里的購葯時間、社保卡號先判斷出哪些消費數據是重複的(購葯時間和社保卡號兩個值都相同的數據為重複,只能算作一次消費), 再去掉重複的數據,只保留一條記錄。
獲取時間範圍(天數)
計算月份數,這裡只考慮一個月30天的情況,沒有考慮複雜的情況。
月均消費次數,舍入保留為小數點後兩位。
2、月均消費金額(sum、na.rm=TRUE)(月均消費金額=總消費金額/月份數)
3、客單價(客單價=總消費金額/總消費次數)
門店的銷售額是由客單價和顧客數所決定的。
舍入保留為小數點後兩位。
4、消費趨勢(tapply、plot)(以單位周的消費金額繪製曲線圖)
分組函數tapply計算出每周的消費總金額
運用tapply計算後得到的是一個二維數組,一維是第幾周的序號,二維是對應的這周的消費總金額,將生成的數組轉換成數據框結構。
對轉換後的數據框列名進行重命名,並獲取周別數,即具體分成了多少周。
** 這裡查看了對象week$time的類型,顯示為因子,符合前文對tapply(參數):tapply(向量,因子/因子列表,函數/函數名)的說明。
繪製曲線圖
曲線圖是畫出來了,但是還有最後一點疑問未解決,就是在對tappy函數生成的二維數組進行數據框轉換時,為什麼使用的代碼是as.data.frame.table,這跟使用as.data.frame有什麼區別??
推薦閱讀:
※數據處理及分析-讀寫Excel
※全棧 - 13 ggplot2 在 R 中進行可視化
※R學習筆記--《R語言實戰》第4章
※學習與實踐筆記—第三講簡單數據處理
※R語言可視化——數據地圖離散百分比填充(環渤海)
TAG:R |