《第三關(guān)-簡單數(shù)據(jù)分析》

首先預(yù)習(xí)了《R語言實(shí)戰(zhàn)》的第三章和第四章,第三章主要講的是關(guān)于簡單的繪圖,對(duì)于R的繪圖有了一定的了解。第四章是基本數(shù)據(jù)管理,講了一些基本的操作,對(duì)變量的處理,對(duì)缺失值的處理,還有日期值是一個(gè)以前沒有考慮過的概念,要很好的運(yùn)用和處理恐怕還需要很多實(shí)踐。類型轉(zhuǎn)換和數(shù)據(jù)排列都是很實(shí)用的工具,但是距離我自己主動(dòng)運(yùn)用還有很長的路要走。

看完這兩章的內(nèi)容,并且聽完了猴子老師的課,總共花了三天的時(shí)間。由于平時(shí)的工作中沒有可以接觸到的可用的表格數(shù)據(jù),我決定把老師給的數(shù)據(jù)和指標(biāo)按照自己的思路做一遍,看看不一樣的地方在哪。

猴子老師這一課講得較快,而且對(duì)于各種函數(shù)用法不熟悉的我來說,聽完一遍,只是有個(gè)初步的印象。

自己憑著記憶,并且按照自己已知的去操作實(shí)踐,實(shí)在不行的時(shí)候,再去翻翻ppt,直到最后第四個(gè)指標(biāo)實(shí)在不知道怎么做的時(shí)候,再打開源代碼看看,下面是我的實(shí)踐記錄:

首先整理一下思路:

1 目標(biāo)是什么:

根據(jù)提供的銷售數(shù)據(jù)表,得到:月均消費(fèi)次數(shù),月均消費(fèi)金額,客單價(jià),消費(fèi)趨勢。

2 打開數(shù)據(jù)表,看看有什么內(nèi)容:

購藥時(shí)間,社??ㄌ?hào),商品編碼,商品名稱,銷售數(shù)量,應(yīng)收金額,實(shí)收金額。

注意到社??ㄌ?hào)有重復(fù)的,那就說明,同一個(gè)人會(huì)有多次購買的情況。

時(shí)間格式為“2016-01-01 星期五”這樣的形式,但是順序是混亂的。

商品編碼和名稱,有重復(fù)和混亂的情況,不過在這里不是重點(diǎn)。

銷售數(shù)量,應(yīng)收金額,實(shí)收金額等都是具體的數(shù)字。

3 如何獲得分析結(jié)果:

a 月均消費(fèi)次數(shù),這個(gè)是比較簡單的數(shù)學(xué)運(yùn)算,總的消費(fèi)次數(shù)/月份數(shù),這里的月份數(shù)應(yīng)該是這個(gè)表中所記錄到的月份數(shù),默認(rèn)一年是12個(gè)月,但是我好想并沒有看到11月和12月,這個(gè)可能是數(shù)據(jù)的缺失,但是不影響對(duì)于目標(biāo)的分析。

b 月均消費(fèi)金額,和上一個(gè)指標(biāo)類似,總的消費(fèi)次數(shù)/月份數(shù)。

c 客單價(jià),就是每個(gè)人的平均消費(fèi)金額,總的消費(fèi)金額/人數(shù),這個(gè)人數(shù)不應(yīng)該是人次,因?yàn)橛腥硕啻钨徺I,可以用社??ㄌ?hào)區(qū)分出來。

d 消費(fèi)趨勢,即每周的消費(fèi)總額,這里需要按一個(gè)周的時(shí)間來統(tǒng)計(jì)消費(fèi)金額,當(dāng)然我想按月統(tǒng)計(jì)應(yīng)該也是可以的。

4 具體的操作步驟:

一 數(shù)據(jù)處理:

a 如何用R導(dǎo)入excel數(shù)據(jù)表,這里用到openxlsx包,具體的函數(shù)為:read.xlsx(),返回的是一個(gè)數(shù)據(jù)框,如下圖所示:

b 這個(gè)表的每一列名稱都是中文,但是中文操作不那么方便,我們需要把它們重新命名為英文,即列表重命名。

重命名的函數(shù)有fix(),但是這個(gè)函數(shù)只能手動(dòng)修改,不實(shí)用。

另一種方式是使用names()函數(shù),返回的是每一列名稱的向量,不僅可以讀取名稱,還可以修改,代碼如下:

第三種方式是函數(shù):rename(x, replace, warn_missing = TRUE, warn_duplicated = TRUE),注意要先安裝plyr包,replace=c(),oldname(修改前的名稱)不加雙引號(hào),新名稱需要加雙引號(hào),這個(gè)好處在于不用考慮順序。如圖所示:

c 刪除缺失數(shù)據(jù):

關(guān)于缺失值處理的函數(shù),參考《R語言實(shí)戰(zhàn)》4.5。

函數(shù)is.na(),判斷某個(gè)向量或數(shù)據(jù)框等中的元素是否為NA,返回false或者true。這里有個(gè)神奇的用法,值得學(xué)習(xí):

即判斷時(shí)間那一列,用!(非)來剔除NA行。

na.rm=true,用于sum函數(shù)加和,若是元素中有NA值,則會(huì)返回NA值,這條判斷語句可以刪除NA值,然后把剩下的數(shù)據(jù)相加。

na.omit(),刪除含有缺失數(shù)據(jù)的行,返回刪除這些行后的數(shù)據(jù)框。

d 處理日期

日期在R語言中處理的比較多,是一個(gè)重要的指標(biāo),關(guān)于日期的處理,可以參見《R語言實(shí)戰(zhàn)》4.6 P76:

as.Date(x,"input_format"),以數(shù)值形式存儲(chǔ)日期變量。

給的表中日期為“2016-01-01 星期五”,但是我們需要的是“2016-01-01”,日期值的默認(rèn)輸入格式為yyyy-mm-dd,代碼如下:

另一種猴子老師給的方法是,安裝stingr包,利用str_split_fixed()函數(shù),將字符串分離,代碼如下:

e 數(shù)據(jù)類型轉(zhuǎn)換

需要將日期轉(zhuǎn)換為date類型,才能進(jìn)行相應(yīng)的日期函數(shù)的處理。代碼如下:

f 數(shù)據(jù)排序

用到order()函數(shù),默認(rèn)的排序是升序,代碼如下:

結(jié)果如下:

若要降序,需要加入?yún)?shù),decreasing=True,猴子的代碼:

二 數(shù)據(jù)分析

a 月均消費(fèi)次數(shù)

注意,同一天內(nèi),同一個(gè)人多次消費(fèi)算一次。

這里用到函數(shù)duplicated() ,判斷哪些元素是比它下標(biāo)小的元素的復(fù)制,輸出是一個(gè)邏輯值,而這個(gè)邏輯值可以用于篩選數(shù)據(jù)框的行和列,代碼如下:

kpi1是一個(gè)新的向量,把和date&cardno都一樣的“復(fù)制行”都給刪了,而它的行數(shù)就是總的消費(fèi)次數(shù)。

接下來是統(tǒng)計(jì)月份數(shù),首先要知道總天數(shù),有了總天數(shù),除余30天,就可以得到有幾個(gè)月。代碼如下:

得到結(jié)果,899.67次,用函數(shù)format和round使其顯示小數(shù)點(diǎn)后六位。

b 月均消費(fèi)金額

首先要得到總的消費(fèi)金額,再除以月份數(shù)即可。這里要用到sum()函數(shù),代碼如下:

得到結(jié)果,50771.71元每月。

猴子老師的代碼如下:

c 客單價(jià)

首先要知道有多少客戶,用總的消費(fèi)金額除以客戶數(shù)量即可。

這里的客戶數(shù)量,我的理解有誤,我認(rèn)為是整個(gè)時(shí)間段內(nèi)同一個(gè)客戶多次購買行為只算一次,但其實(shí)猴子老師給的客戶數(shù)量是同一天同一個(gè)客戶的多次購買行為只算一次,于是我的代碼如下:

得到結(jié)果,125.57元/客。

猴子老師的代碼,這里的consumeNumber<-nrow(kpi1):

得到結(jié)果:56.43元/客。

d 消費(fèi)趨勢

消費(fèi)趨勢指的是每周的營業(yè)額的走勢,需要繪制圖形。

這里要用到分組函數(shù)tapply(),但是具體的用法不是很清楚,跟著猴子的代碼打了一遍,如下:

得到結(jié)果如下:

關(guān)于繪圖的操作可以看《R語言實(shí)戰(zhàn)》第三章相關(guān)內(nèi)容。

總結(jié)與疑問:

即使聽課的時(shí)候聽懂了,實(shí)際操作起來也是麻煩重重,正是“紙上得來終覺淺,絕知此事要躬行”。

我想主要的難點(diǎn)在于:

1 對(duì)于基本的數(shù)據(jù)分析“套路”還不清楚,思路比較混亂,甚至連一開始的思路都沒有。

2 對(duì)于很多函數(shù)以及里面的參數(shù)不熟悉,不知道如何設(shè)置,不清楚如何使用。

自己磕磕碰碰地按照自己的思路“爬了一遍”,其中也出現(xiàn)了很多問題,大部分都通過Google,Rstudio中的幫助,以及自檢解決了。有一點(diǎn)心得:處理數(shù)據(jù)時(shí),少新造一些變量名,自己容易搞混,之后還會(huì)忘了使用。

還有一些疑問,記錄下來:

1 rtools是干什么的,Google了一下并沒有找到滿意的答案?

2 我自己把excel表格中的某個(gè)數(shù)改為NA或者直接刪掉,但是卻無法用函數(shù)is.na()判斷出來?

3 as.Date()并不能改變已有的日期字符串的年月日順序,但是可以把后面的“星期五”給刪除了,那么用什么函數(shù)可以改變?nèi)掌诘娘@示格式呢?

4 insatll.packages("stringr")和 insatll.packages('stringr'), 前者不行,后者成功?

5 關(guān)閉Rstudio之后,第二天打開,代碼中的中文變成了亂碼?

6 tapply() ,format() ,as.data.frame.table()用法不清楚?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容