首先預(yù)習(xí)了《R語(yǔ)言實(shí)戰(zhàn)》的第三章和第四章裤纹,第三章主要講的是關(guān)于簡(jiǎn)單的繪圖永毅,對(duì)于R的繪圖有了一定的了解把跨。第四章是基本數(shù)據(jù)管理,講了一些基本的操作沼死,對(duì)變量的處理着逐,對(duì)缺失值的處理,還有日期值是一個(gè)以前沒(méi)有考慮過(guò)的概念意蛀,要很好的運(yùn)用和處理恐怕還需要很多實(shí)踐耸别。類型轉(zhuǎn)換和數(shù)據(jù)排列都是很實(shí)用的工具,但是距離我自己主動(dòng)運(yùn)用還有很長(zhǎng)的路要走县钥。
看完這兩章的內(nèi)容秀姐,并且聽完了猴子老師的課,總共花了三天的時(shí)間若贮。由于平時(shí)的工作中沒(méi)有可以接觸到的可用的表格數(shù)據(jù)省有,我決定把老師給的數(shù)據(jù)和指標(biāo)按照自己的思路做一遍,看看不一樣的地方在哪兜看。
猴子老師這一課講得較快锥咸,而且對(duì)于各種函數(shù)用法不熟悉的我來(lái)說(shuō),聽完一遍细移,只是有個(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)趨勢(shì)。
2 打開數(shù)據(jù)表原茅,看看有什么內(nèi)容:
購(gòu)藥時(shí)間吭历,社保卡號(hào)擂橘,商品編碼晌区,商品名稱,銷售數(shù)量通贞,應(yīng)收金額朗若,實(shí)收金額。
注意到社辈郑卡號(hào)有重復(fù)的哭懈,那就說(shuō)明,同一個(gè)人會(huì)有多次購(gòu)買的情況峡迷。
時(shí)間格式為“2016-01-01 星期五”這樣的形式银伟,但是順序是混亂的你虹。
商品編碼和名稱绘搞,有重復(fù)和混亂的情況,不過(guò)在這里不是重點(diǎn)傅物。
銷售數(shù)量夯辖,應(yīng)收金額,實(shí)收金額等都是具體的數(shù)字董饰。
3 如何獲得分析結(jié)果:
a 月均消費(fèi)次數(shù)蒿褂,這個(gè)是比較簡(jiǎn)單的數(shù)學(xué)運(yùn)算,總的消費(fèi)次數(shù)/月份數(shù)卒暂,這里的月份數(shù)應(yīng)該是這個(gè)表中所記錄到的月份數(shù)啄栓,默認(rèn)一年是12個(gè)月,但是我好想并沒(méi)有看到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)橛腥硕啻钨?gòu)買爆袍,可以用社笔追保卡號(hào)區(qū)分出來(lái)。
d 消費(fèi)趨勢(shì)陨囊,即每周的消費(fèi)總額蛮瞄,這里需要按一個(gè)周的時(shí)間來(lái)統(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語(yǔ)言實(shí)戰(zhàn)》4.5。
函數(shù)is.na()蠢甲,判斷某個(gè)向量或數(shù)據(jù)框等中的元素是否為NA僵刮,返回false或者true。這里有個(gè)神奇的用法,值得學(xué)習(xí):
即判斷時(shí)間那一列妓笙,用H艉印(非)來(lái)剔除NA行。
na.rm=true寞宫,用于sum函數(shù)加和萧福,若是元素中有NA值,則會(huì)返回NA值辈赋,這條判斷語(yǔ)句可以刪除NA值鲫忍,然后把剩下的數(shù)據(jù)相加。
na.omit()钥屈,刪除含有缺失數(shù)據(jù)的行悟民,返回刪除這些行后的數(shù)據(jù)框。
d 處理日期
日期在R語(yǔ)言中處理的比較多篷就,是一個(gè)重要的指標(biāo)射亏,關(guān)于日期的處理,可以參見《R語(yǔ)言實(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ù)赁还。
接下來(lái)是統(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è)客戶多次購(gòu)買行為只算一次励两,但其實(shí)猴子老師給的客戶數(shù)量是同一天同一個(gè)客戶的多次購(gòu)買行為只算一次,于是我的代碼如下:
得到結(jié)果囊颅,125.57元/客当悔。
猴子老師的代碼,這里的consumeNumber<-nrow(kpi1):
得到結(jié)果:56.43元/客踢代。
d 消費(fèi)趨勢(shì)
消費(fèi)趨勢(shì)指的是每周的營(yíng)業(yè)額的走勢(shì)盲憎,需要繪制圖形。
這里要用到分組函數(shù)tapply()胳挎,但是具體的用法不是很清楚饼疙,跟著猴子的代碼打了一遍,如下:
得到結(jié)果如下:
關(guān)于繪圖的操作可以看《R語(yǔ)言實(shí)戰(zhàn)》第三章相關(guān)內(nèi)容慕爬。
總結(jié)與疑問(wèn):
即使聽課的時(shí)候聽懂了窑眯,實(shí)際操作起來(lái)也是麻煩重重,正是“紙上得來(lái)終覺(jué)淺医窿,絕知此事要躬行”磅甩。
我想主要的難點(diǎn)在于:
1 對(duì)于基本的數(shù)據(jù)分析“套路”還不清楚,思路比較混亂姥卢,甚至連一開始的思路都沒(méi)有卷要。
2 對(duì)于很多函數(shù)以及里面的參數(shù)不熟悉渣聚,不知道如何設(shè)置,不清楚如何使用僧叉。
自己磕磕碰碰地按照自己的思路“爬了一遍”奕枝,其中也出現(xiàn)了很多問(wèn)題,大部分都通過(guò)Google瓶堕,Rstudio中的幫助倍权,以及自檢解決了。有一點(diǎn)心得:處理數(shù)據(jù)時(shí)捞烟,少新造一些變量名薄声,自己容易搞混,之后還會(huì)忘了使用题画。
還有一些疑問(wèn)默辨,記錄下來(lái):
1 rtools是干什么的,Google了一下并沒(méi)有找到滿意的答案苍息?
2 我自己把excel表格中的某個(gè)數(shù)改為NA或者直接刪掉缩幸,但是卻無(wú)法用函數(shù)is.na()判斷出來(lái)?
3 as.Date()并不能改變已有的日期字符串的年月日順序竞思,但是可以把后面的“星期五”給刪除了表谊,那么用什么函數(shù)可以改變?nèi)掌诘娘@示格式呢?
4 insatll.packages("stringr")和 insatll.packages('stringr')盖喷, 前者不行爆办,后者成功?
5 關(guān)閉Rstudio之后课梳,第二天打開距辆,代碼中的中文變成了亂碼?
6 tapply() ,format() ,as.data.frame.table()用法不清楚暮刃?