R語言第三、四章學習心得

一、整體計劃按時完成

二、猴子老師布置的任務已完成

簡單數據處理和分析:朝陽醫院2016年銷售數據.xlsx

首先,安裝「openxlsx」包,讀取表格

數據預處理:

Step1:列名重命名

Step2:刪除缺失數據

Step3:處理日期

Step4:數據類型轉換

Step5:數據排序

業務指標1:月均消費次數=總消費次數/月份數

注意:總消費次數中同一天內同一個人發生的所有的消費算作一次消費

總消費次數:

Ps:老師ppt課件中算出來的總消費次數是5394,但是自己算出來的是5398,一開始以為是自己算錯了,還進行了反向驗證,反過來計算表格總行數6577,重複數1179,非重複數=6577-1179-5938,證明自己算的結果也沒錯。之後問老師,老師說數據有修改,以實際運算結果為準,哈哈哈哈原來不是自己計算錯誤,瞬間開心了~

月份數:

這裡提示%/%對"difftime"對象不適用,將difftime轉換為numeric

月均消費次數=總消費次數/月份數

業務指標2:月均消費金額=總消費金額/月份數

業務指標3:客單價=總消費金額/總消費次數

業務指標4:消費趨勢

計算每周的消費金額---分組函數tapply----繪製曲線圖----Plot

【簡單數據處理分析總結

  1. 讀取Excel數據

  2. 數據預處理的步驟

  3. 數據分析

數據預處理總結:

Step1:列名重命名

Step1:刪除缺失數據

Step3:處理日期

Step4:數據類型轉換

Step5:數據排序

三、第四章主要知識點

1、創建新變數:變數名<-表達式,transform()

> mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))

> mydata

x1x2

1 2 3

2 2 4

3 6 2

4 4 8

>mydata<-transform(mydata,sumx=x1+x2,means=(x1+x2)/2)

> mydata

x1x2 sumx means

1 2 3 5 2.5

2 2 4 6 3.0

3 6 2 8 4.0

4 4 8 12 6.0

2、變數的重編碼

邏輯運算符:>,<,>=,<=,==,!=,&,|,!(大於,小於,大於等於,小於等於,等於,不等於,與,或,非。)

>leadership<-within(leadership,{agecat<-NA

+ agecat[age>75]<-"Elder"

+agecat[age>=55&age<=75]<-"Middle Aged"

+agecat[age<55]<-"Young"})

> leadership

managerID testDate country gender age q1 q2 q3 q4 q5 agecat

1 1 10/24/08 US M 32 5 4 5 5 5 Young

2 2 10/28/08 US F 45 3 5 2 5 5 Young

3 3 10/1/08 UK F 25 3 5 5 5 2 Young

4 4 10/12/08 UK M 39 3 3 4 NA NA Young

5 5 5/1/09 UK F NA 2 2 1 2 1 <NA>

3、變數重命名

方法一:fix(leadership)

方法二:names()函數

>names(leadership)[2]<-"testData"

> leadership

方法三:plyr包中的rename()函數

leadership<-rename(leadership,c(manager="managerID",teseDate="testDate"))

leadership

4、缺失值:is.na()函數,檢測缺失值是否存在

>is.na(leadership[,6:10])

重編碼某些值為缺失值:

>leadership$age[leadership$age==99]<=NA

在分析中排除缺失值:

na.rm=TRUE,可以在計算前移除缺失值並使用剩餘值進行計算

x<-c(1,2,NA,3)

y<-sum(x,na.rm=TRUE)

na.omit(),刪除左右含有缺失值數據的行

>leadership

>newdata<-na.omit(leadership)

>newdata

5、日期值:as.Date(),語法:as.Date(x,」input_format)

日期格式:

Sys.Date(),返回當天的日期

Date(),返回當前的日期和時間

> Sys.Date()

[1] "2017-03-29"

> date()

[1] "Wed Mar 29 21:35:56 2017"

可以使用format(x,format=」output=」output_format」)來輸出指定格式的日期值,並可以提取日期值中的某些部分:

> today<-Sys.Date()

> format(today,format="%B %d%Y")

[1] "三月 29 2017"

> format(today,format="%A")

[1] "星期三"

> startdate<-as.Date("2004-02-13")

> enddate<-as.Date("2011-01-22")

> days<-enddate-startdate

> days

Time difference of 2535 days

也可以使用函數difftime()來計算時間間隔,並以星期、天、時、分、秒來表示:

> today<-Sys.Date()

> dob<-as.Date("1956-10-12")

> difftime(today,dob,units="weeks")

Time difference of 3154.714 weeks

※星期幾齣生呢?

>today<-as.Date("1992-09-18")

>format(today,format="%A")

[1] "星期五"

將日期轉換為字元型變數:as.character()

strDates<-as.character(dates)

6、類型轉換

判斷 含義 轉換

is.numeric() 數值型數據 as.numeric()

is.character() 字元型數據 as.character()

is.vector() 向量數據 as.vector()

is.matrix() 矩陣數據 as.matrix()

is.data.frame() 數據框數據 as.data.frame()

is.factor() 因子數據 as.factor()

is.logical() 邏輯型數據 as.logical()

> a<-c(1,2,3)

> a

[1] 1 2 3

> is.numeric(a)

[1] TRUE

> is.vector(a)

[1] TRUE

> a<-as.character(a)

> a

[1] "1" "2" "3"

> is.numeric(a)

[1] FALSE

> is.vector(a)

[1] TRUE

> is.character(a)

[1] TRUE

7、數據排序:order()函數,默認升序排列,加「-」即降序排列

※升序(方法一:attach)

???attach提示以下向量被掩蓋,但是結果是正確的,還在百度原因中

(方法二:with)

※降序

8、數據集的合併

橫向合併:merge(),通過一個或多個共有變數進行聯結。

cbind(),直接橫向合併兩個矩形或數據框,不需要指定公共索引

縱向合併:rbind(),注意:兩個數據框必須相同的變數,否則會出現以下提示:

把向量名稱改為一致後,可得出結果:

9、選入(保留)向量:3種方法

剔除(丟棄)向量:三種方法

在某一列的下標前加一個減號(-)就會剔除那一列:

選入觀測:三種方法:傳統法+attach+with

subset()

隨機抽樣:sample()

10、使用SQL語句操作數據框

首先安裝包:install.packages("sqldf")

???運行sqldf包後,提示載入需要的程輯包:gsubfn、載入需要的程輯包:proto

載入需要的程輯包:RSQLite,但是結果還是可以運行的。

四、感想

  1. 現在還只能按照老師寫的代碼,自己一個個敲,希望在今後的日子裡通過自己多加練習,爭取早早不看視頻不看ppt自己能敲代碼出來;
  2. 敲代碼時一定一定要細心謹慎,目前大多數代碼運行錯誤,都是由於自己敲錯代碼了(大小寫混了、字母拼錯...),今後一定要多加多加多加註意。

推薦閱讀:

TAG:R編程語言 | 數據分析 |