《第三關-簡單數據分析》

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

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

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

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

首先整理一下思路:

1 目標是什么:

根據提供的銷售數據表,得到:月均消費次數,月均消費金額,客單價,消費趨勢。

2 打開數據表,看看有什么內容:

購藥時間,社??ㄌ枺唐肪幋a,商品名稱,銷售數量,應收金額,實收金額。

注意到社??ㄌ栍兄貜偷模蔷驼f明,同一個人會有多次購買的情況。

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

商品編碼和名稱,有重復和混亂的情況,不過在這里不是重點。

銷售數量,應收金額,實收金額等都是具體的數字。

3 如何獲得分析結果:

a 月均消費次數,這個是比較簡單的數學運算,總的消費次數/月份數,這里的月份數應該是這個表中所記錄到的月份數,默認一年是12個月,但是我好想并沒有看到11月和12月,這個可能是數據的缺失,但是不影響對于目標的分析。

b 月均消費金額,和上一個指標類似,總的消費次數/月份數。

c 客單價,就是每個人的平均消費金額,總的消費金額/人數,這個人數不應該是人次,因為有人多次購買,可以用社??ㄌ枀^分出來。

d 消費趨勢,即每周的消費總額,這里需要按一個周的時間來統計消費金額,當然我想按月統計應該也是可以的。

4 具體的操作步驟:

一 數據處理:

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

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

重命名的函數有fix(),但是這個函數只能手動修改,不實用。

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

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

c 刪除缺失數據:

關于缺失值處理的函數,參考《R語言實戰》4.5。

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

即判斷時間那一列,用?。ǚ牵﹣硖蕹齆A行。

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

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

d 處理日期

日期在R語言中處理的比較多,是一個重要的指標,關于日期的處理,可以參見《R語言實戰》4.6 P76:

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

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

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

e 數據類型轉換

需要將日期轉換為date類型,才能進行相應的日期函數的處理。代碼如下:

f 數據排序

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

結果如下:

若要降序,需要加入參數,decreasing=True,猴子的代碼:

二 數據分析

a 月均消費次數

注意,同一天內,同一個人多次消費算一次。

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

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

接下來是統計月份數,首先要知道總天數,有了總天數,除余30天,就可以得到有幾個月。代碼如下:

得到結果,899.67次,用函數format和round使其顯示小數點后六位。

b 月均消費金額

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

得到結果,50771.71元每月。

猴子老師的代碼如下:

c 客單價

首先要知道有多少客戶,用總的消費金額除以客戶數量即可。

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

得到結果,125.57元/客。

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

得到結果:56.43元/客。

d 消費趨勢

消費趨勢指的是每周的營業額的走勢,需要繪制圖形。

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

得到結果如下:

關于繪圖的操作可以看《R語言實戰》第三章相關內容。

總結與疑問:

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

我想主要的難點在于:

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

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

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

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

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

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

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

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容