r 保留之前曲线_R简单数据处理和分析
本文為猴子老師數(shù)據(jù)分析系列課程第3講:簡單數(shù)據(jù)處理和分析的具體實踐。
數(shù)據(jù):朝陽醫(yī)院2016年銷售數(shù)據(jù).xlsx
業(yè)務(wù)指標:
■ 月均消費次數(shù) ■ 月均消費金額 ■ 客單價 ■ 消費趨勢
R的解決思路與步驟:
一、讀取Excel數(shù)據(jù)
二、對數(shù)據(jù)進行預(yù)處理
Step1:列名重命名
Step2:刪除缺失數(shù)據(jù)
Step3:處理日期
Step4:數(shù)據(jù)類型轉(zhuǎn)換
Step5:數(shù)據(jù)排序
三、 數(shù)據(jù)分析
1、月均消費次數(shù)(注:同一天內(nèi),同一個人發(fā)生的所有消費算作一次消費。月均消費次數(shù)=總消費次數(shù)/月份數(shù))
2、月均消費金額(月均消費金額=總消費金額/月份數(shù))
3、客單價(客單價=總消費金額/總消費次數(shù))
4、消費趨勢(以周-消費金額繪制曲線圖)
在練習(xí)時碰到好幾個陌生的函數(shù),在具體的步驟展現(xiàn)之前,先補充一下針對這些陌生函數(shù)我通過查找資料整理的一些函數(shù)運用相關(guān)知識:
★★★ 字符串處理包stringr中,str_split( ) 與 str_split_fixed( )函數(shù),用于分解字符串。
▼str_split(string, pattrn, n = Inf, simplify = FALSE),默認simplify = FALSE,返回的結(jié)果是字符型向量,simplify = TRUE返回的結(jié)果是一個矩陣。
▼str_split_fixed(string, pattern, n),返回的結(jié)果是一個矩陣。
▼str_split與str_split_fixed,某種條件下可以返回同為矩陣的結(jié)果。
★★★ !duplicated,提取唯一的無重復(fù)的元素。
★★★ %U,日期格式符號
%U含義:week number of year, with Sunday as first day of week.
★★★ tapply,分組函數(shù),對向量的子集進行操作。
tapply(參數(shù)):tapply(向量,因子/因子列表,函數(shù)/函數(shù)名)
默認simplify = TRUE,把返回的結(jié)果本來是一個列表,把它簡化成一個向量。simplify = FALSE,返回得到列表。
ex:tapply(excelData$actualmoney,format(excelData$time,"%Y-%U"),sum)
語句理解:對"excelData$actualmoney"這個向量,按照指定格式"年-周別"進行分組,并對每一組求和。
按照上面的參數(shù), "format(excelData$time,"%Y-%U")"輸出的日期值為一個因子,那應(yīng)該怎么將它理解成因子,輸出的日期值是有序型變量嗎?有點繞不過來......
★★★ round,數(shù)學(xué)函數(shù)
round(x,digits=n),將x舍入為指定位的小數(shù)。
ex:round(3.475,digits=2) 返回值為3.48
★★★ format(x, ...)
ex:format(13.7, nsmall = 3)返回值為13.700,nsmall為小數(shù)點后的最小位數(shù)。
R處理步驟再現(xiàn):
一、讀取Excel數(shù)據(jù)(openxlsx包,可以導(dǎo)入大數(shù)據(jù)量的Excel數(shù)據(jù))
這里使用openxlsx包讀取Excel數(shù)據(jù),導(dǎo)入前先安裝、載入"openxlsx"包。
二、對數(shù)據(jù)進行預(yù)處理
Step1:列名重命名(names)
在編碼的世界里,很多操作都是英文方便,將中文的列名重命名為英文。
Step2:刪除缺失數(shù)據(jù)(!is.na)
從數(shù)據(jù)框中選出銷售時間不為空的數(shù)據(jù)。第6579行缺失數(shù)據(jù)被剔除。
Step3:處理日期(str_split_fixed、as.Date)
在導(dǎo)入的Excel數(shù)據(jù)里,購藥時間格式為字符串“2016-01-01 星期五”,分拆出我們想要的字符串“2016-01-01”。
將字符串格式的日期轉(zhuǎn)換為日期格式。
這里沒有給出用于讀入日期的適當格式,是因為日期值的默認輸入格式為%Y-%m-%d。
Step4:數(shù)據(jù)類型轉(zhuǎn)換(判斷is,轉(zhuǎn)換as)
Step5:數(shù)據(jù)排序(order,默認的排序順序是升序)
對銷售數(shù)據(jù)按照銷售時間進行升序排序。
三、 數(shù)據(jù)分析
1、月均消費次數(shù)(!duplicated、%/%)(注:同一天內(nèi),同一個人發(fā)生的所有消費算作一次消費。月均消費次數(shù)=總消費次數(shù)/月份數(shù))
在獲取總消費次數(shù)時注意,根據(jù)消費數(shù)據(jù)里的購藥時間、社保卡號先判斷出哪些消費數(shù)據(jù)是重復(fù)的(購藥時間和社保卡號兩個值都相同的數(shù)據(jù)為重復(fù),只能算作一次消費), 再去掉重復(fù)的數(shù)據(jù),只保留一條記錄。
獲取時間范圍(天數(shù))
計算月份數(shù),這里只考慮一個月30天的情況,沒有考慮復(fù)雜的情況。
月均消費次數(shù),舍入保留為小數(shù)點后兩位。
2、月均消費金額(sum、na.rm=TRUE)(月均消費金額=總消費金額/月份數(shù))
3、客單價(客單價=總消費金額/總消費次數(shù))
門店的銷售額是由客單價和顧客數(shù)所決定的。
舍入保留為小數(shù)點后兩位。
4、消費趨勢(tapply、plot)(以單位周的消費金額繪制曲線圖)
分組函數(shù)tapply計算出每周的消費總金額
運用tapply計算后得到的是一個二維數(shù)組,一維是第幾周的序號,二維是對應(yīng)的這周的消費總金額,將生成的數(shù)組轉(zhuǎn)換成數(shù)據(jù)框結(jié)構(gòu)。
對轉(zhuǎn)換后的數(shù)據(jù)框列名進行重命名,并獲取周別數(shù),即具體分成了多少周。
** 這里查看了對象week$time的類型,顯示為因子,符合前文對tapply(參數(shù)):tapply(向量,因子/因子列表,函數(shù)/函數(shù)名)的說明。
繪制曲線圖
曲線圖是畫出來了,但是還有最后一點疑問未解決,就是在對tappy函數(shù)生成的二維數(shù)組進行數(shù)據(jù)框轉(zhuǎn)換時,為什么使用的代碼是as.data.frame.table,這跟使用as.data.frame有什么區(qū)別??
總結(jié)
以上是生活随笔為你收集整理的r 保留之前曲线_R简单数据处理和分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联通突然从4g变成3g了_中国联通最快明
- 下一篇: 多个容器一起打包_程序员修神之路容器技术