iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 11
0
Big Data

R語言與機器學習見面會系列 第 11

Day11 R語言資料集合操作

上一篇我們複習了R語言資料集合,裡頭可以住著許多整理好的型別們並且存放著資料,不過有時會臨時增加資料行(欄位)、增加資料列,又或者篩選資料等等,我們今天依序來複習幾種常用的資料集合指令,救出高塔中長髮公主。
為了方便學習,我們直接選最常使用到的dataframe(資料框)做練習,另外從微軟關聯式資料庫SQL Server資料庫輸入進來的資料型態也是dataframe。

  • 查看結構
  • 資料行、資料列合併
  • 查出元素
  • 回測
  • 資料集篩選
  • 變更欄位名稱

http://ithelp.ithome.com.tw/upload/images/20161211/20103434Wj52jmV9qJ.png'

這邊我們要用iris及自建的簡單資料集,Iris是R語言內建的資料集, 經常使用在幾種機器學習演算法中作為範例。
iris資料集有150筆生物樣本觀測值 ,中文是鳶尾花,共有5個資料行,前4個資料行(欄位)是作為定量分析的特徵(花萼+花瓣長寬),最後1個是亞種:

#http://archive.ics.uci.edu/ml/datasets/Iris
#如果要模擬一種新的演算法,也可以從UCI 加州大學網站下載適合的資料集。

查看DataFrame結構


在Day11.R中輸入程式碼

#(1)查看一下iris結構 

nrow(iris) 
ncol(iris) 
dim(iris) 

執行結果:   查看資料列、資料行個數。

http://ithelp.ithome.com.tw/upload/images/20161211/20103434NM30XO2m5I.png

在Day11.R中輸入程式碼

names(iris) 
str(iris) 

執行結果: 顯示欄位名稱、dataframe 結構(structure)
http://ithelp.ithome.com.tw/upload/images/20161211/20103434IKieMPNg2c.png

資料行及資料列結合函式


有時會把幾個向量(vector)結合成dataframe,集合的方式有資料列(row),也有資料行(column),我們來複習!

在Day11.R中輸入程式碼

(2)cbind函數

names <- c("David", "Charlemagne", "Caesar", "Alexandre") 
Marks <- c("K", "K", "K", "K") 
df <- cbind(names, Marks) 
df 

執行結果: 2個資料行合併完成!

http://ithelp.ithome.com.tw/upload/images/20161211/20103434WEyacnqo3j.png

在Day11.R中輸入程式碼

(3)rbind函數

#先製作1筆資料 
dfQueen <- data.frame(names = "Athena", Marks = "Q") 
dfQueen 
 
#合併 
df <- rbind(df, dfQueen) 
df 

執行結果: 先產生雅典娜1筆資料的dataframe(dfQueen),然後合併到剛剛的dataframe(df)

http://ithelp.ithome.com.tw/upload/images/20161211/20103434uVtuTQoRsg.png

資料列索引 (row indexing operator)


如果想要取幾筆資料列出來面對廣大的粉絲?

在Day11.R中輸入程式碼

#(4)row index (列) 
#取出前3筆資料 
df[1:3,] 
#取出第5筆資料 
df[5,] 

執行結果:

http://ithelp.ithome.com.tw/upload/images/20161211/20103434pTjSAB21Xi.png

回測


前面複習了取出指定資料列,接著我們直接下場實戰。
當我們在訓練模型時,如果想要很快取得模型貼近真實模擬的正確率(回測) ,我們可以將觀測出的樣本直接分為2組進行樣本外測試(out of sample test)

#訓練組樣本 ,通常的比例是70%-80資料。
#測試組樣本 ,剩下來的20-30%,用來驗證模型的正確率。

在Day11.R中輸入程式碼

#先取得資料框的筆數 
n <- nrow(df) 
#抽樣選出index 
t_idx <- sample(seq_len(n), size = round(0.8 * n)) 
#訓練組樣本 
traindatatraindata <- df[t_idx,] 
#測試組樣本 
testdata <- df[ - t_idx,] 
 
#觀察結果 
traindata 
testdata 

訓練組4筆(80%,測試組1筆(20%)

http://ithelp.ithome.com.tw/upload/images/20161211/20103434O7yw2O0R2r.png

資料行索引


如果想要取得特定資料行(欄位)的資料出來面對?

在Day11.R中輸入程式碼

#(5)column index (行) 
df[, 1] 
df[, 2]  

執行結果: 分別取出5個人物名稱和5個撲克牌號碼

http://ithelp.ithome.com.tw/upload/images/20161211/20103434uPWyvRD0O8.png

比較推薦用$取,還有智慧提示intellisense

df$Marks 

http://ithelp.ithome.com.tw/upload/images/20161211/20103434PTqC73KIl2.png

執行結果: 取出第5筆資料的人物名稱:雅典娜和5個撲克牌號碼
http://ithelp.ithome.com.tw/upload/images/20161211/20103434k0aFt7li8c.png

資料Filter


在Day11.R中輸入程式碼

#(6)filter條件 
df_sub <- subset(df, Marks == "K") 
df_sub 

執行結果
http://ithelp.ithome.com.tw/upload/images/20161211/20103434Mjvluu9T9t.png

變更欄位名稱


在Day11.R中輸入程式碼

#(7)修改欄位名稱colnames 
colnames(df) <- c("人物名稱", "號碼") 
df 

執行結果 : 欄位名稱被修改了!

http://ithelp.ithome.com.tw/upload/images/20161211/2010343463wBQJPMHC.png

如果有時間,推薦大家可以再多嘗試apply家族的函式,使用起來很方便。

呼~R語言的語法基礎終於要砍就了。


整理完畢以後就會很整齊了
http://ithelp.ithome.com.tw/upload/images/20161211/20103434xIzg6KGIbE.png

2016-07 攝於日の出公園,上富良野,北海道,Japan


上一篇
Day10 R語言的資料集合種類
下一篇
Day12 R語言外部資料介面(Excel)
系列文
R語言與機器學習見面會30

尚未有邦友留言

立即登入留言