iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
0
AI & Data

[Data Science系列]成為哥布林的那件事-非常粗(初)心者系列 第 10

[Data Science系列]利用R語言處理更多資料-利用data.frame優化恩君的交友平台

昨天我們提到利用list能將所有不同類型的資料儲存起來所以list裡面可以放任何東西,資料的型態可以很多元。

雖然list能儲存多元的資料,但相較matrix矩陣資料還是比較不太好管理,並不像矩陣有直排橫列,看起來也更優化
還記得矩陣必須要是數值,因此透過資料框data.frame()便可以達成。

換句話說,可以把data.frame當成matrix和list之間它們有很多觀念都很相似,使用的手法也幾乎雷同

一樣我們在取出之前的資料,和之前在設定list一樣,只要把前面改成data.frame就可以製作成類似矩陣的表格。

na <- c("Billy", "Bloodhoof", "Scars", "Dean", "Sammy")
ra <- c("Orc", "Hoblin", "Goblin", "Elf", "Harpy")
sa <- c(120, 88, 50, 190, 166)
we <- factor(c("OK", "POOR", "POOR", "RICH", "RICH" ), ordered = TRUE, levels = c("POOR", "OK", "RICH"))

村莊狀態 <- data.frame( "名字" = na, "種族" = ra, "儲蓄" = sa, "富有度" = we )
print(村莊狀態)
       名字   種族 儲蓄 富有度
1     Billy    Orc  120     OK
2 Bloodhoof Hoblin   88   POOR
3     Scars Goblin   50   POOR
4      Dean    Elf  190   RICH
5     Sammy  Harpy  166   RICH

假設數據比較龐大,我們可以透過tail()和head()來擷取資料

tail(村莊狀態)
head(村莊狀態)

通常會擷取資料的前六筆或後六筆

另外透過緯度dim()可以查詢比數狀態

dim(村莊狀態)
[1] 5 4

5代表共5筆,
5代表共5筆觀測值(Observations,Obs)來稱呼資料框中水平方向的資料,4代表變數(Variables)來稱呼資料框中垂直方向的資料。

資料方向 矩陣 資料框
水平 Rows Observations
垂直 Columns Variables

同樣的來看看資料的結構吧!

str(村莊狀態)
'data.frame':	5 obs. of  4 variables:
 $ 名字  : Factor w/ 5 levels "Billy","Bloodhoof",..: 1 2 5 3 4
 $ 種族  : Factor w/ 5 levels "Elf","Goblin",..: 5 4 2 1 3
 $ 儲蓄  : num  120 88 50 190 166
 $ 富有度: Ord.factor w/ 3 levels "POOR"<"OK"<"RICH": 2 1 1 3 3

注意到這邊名字種族都被轉換成factor
當轉成data frame的時候,R會將資料自動轉換成factor,來比較一下原先的資料,

na <- c("Billy", "Bloodhoof", "Scars", "Dean", "Sammy")

str(na)
chr [1:5] "Billy" "Bloodhoof" "Scars" "Dean" "Sammy"

因此透過stringsAsFactors = FALSE的指令我們可以告訴R不要將資料轉成factor
當然如果我們要將種族保留成factor,名字改成charactor也是可以的
首先先將ra設定成factor在帶入指令

ra_factor <- as.factor(ra)
村莊狀態 <- data.frame( "名字" = na, "種族" = ra_factor, "儲蓄" = sa, "富有度" = we, stringsAsFactors =  FALSE)
村莊狀態

'data.frame':	5 obs. of  4 variables:
 $ 名字  : chr  "Billy" "Bloodhoof" "Scars" "Dean" ...
 $ 種族  : Factor w/ 5 levels "Elf","Goblin",..: 5 4 2 1 3
 $ 儲蓄  : num  120 88 50 190 166
 $ 富有度: Ord.factor w/ 3 levels "POOR"<"OK"<"RICH": 2 1 1 3 3

這邊可以看到名字已改回字元chr,種族的部分還是保留為因子。


上一篇
[Data Science系列]利用R語言來管理清單-恩君考慮開間交友平台?
下一篇
[Data Science系列]利用R語言來管理-增加或選擇特定資料
系列文
[Data Science系列]成為哥布林的那件事-非常粗(初)心者30

尚未有邦友留言

立即登入留言