iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
1
AI & Data

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

[Data Science系列]運用R語言Factor因子來分析資料-哥布林村的人口激增?

"恩君,恩君~"村長氣喘呼呼的跑了過來
"怎麼了村長?"
"最近村子來了很多不同種族的魔物,聽說你幫你叔叔帳目打理得很好阿,特地跑來早你做一下整理"

今天進入村莊共有50個魔物,村長用字母來區分各個進入村莊的種族,O代表獸人orc, E代表精靈elf, GO代表哥布林goblin, H代表鳥人harpy, HO代表哈布林hoblin
下面是PUP共50個數值代表進入村里的魔物

 PUP
 [1] HO GO HO H  O  O  GO GO O  E  H  E  GO E  E  HO H  HO O  HO O  GO H  HO GO H  H  GO E  HO
[31] HO H  GO O  HO H  GO E  HO HO H  E  GO GO HO O  GO GO E  GO

但PUP所代表的是vector向量,這邊可以用is.vector()來進行確認或是用is.factor()也可以,當然答案也會不同才對。

is.vector(PUP)
[1] TRUE

is.factor(PUP)
[1] FALSE

好的,接下來在用我們必須把資料轉成factor因子來進行分析,並用levels及lables將其命名,這邊有兩個方式
第一種是用分開的方式來命名。先設定轉成factor,後面再用levels()直接命名對應的代號。

PUP_factor <- factor(PUP)
PUP_factor

HO GO HO H O O GO GO O E H E GO E E HO H HO O HO O GO H HO GO H H GO E HO HO H GO O HO H GO E HO HO H E GO GO HO O GO GO E GO 
Levels:
'E' 'GO' 'H' 'HO' 'O' 

levels(PUP_factor) <- c("Elf", "Goblin", "Harpy", "Hoblin", "Orc")

雖然ㄧ筆一筆的很好確認,但有個問題就是,我們必須要知道代號數值的排序,若沒有特別指示,R將會以字母的順序來排。如上面ㄧ樣,當我們叫出PUP_factor時Levels是以E,GO,H,HO,O 來排,因此在設定這個部份要特別注意。

第二種則是直接將levels值設定好,直接告訴R我們想要怎麼排,再來設定要的對應名稱

PUP_factor <- factor(PUP, levels = c("O", "E", "GO", "H", "HO"),
                          labels = c("Orc", "Elf", "Goblin", "Harpy", "Hoblin"))

PUP_factor

Hoblin Goblin Hoblin Harpy Orc Orc Goblin Goblin Orc Elf Harpy Elf Goblin Elf Elf Hoblin Harpy Hoblin Orc Hoblin Orc Goblin Harpy Hoblin Goblin Harpy Harpy Goblin Elf Hoblin Hoblin Harpy Goblin Orc Hoblin Harpy Goblin Elf Hoblin Hoblin Harpy Elf Goblin Goblin Hoblin Orc Goblin Goblin Elf Goblin 

Levels:
'Orc' 'Elf' 'Goblin' 'Harpy' 'Hoblin' 

"很好阿,不過每個種族特性不同阿,比如精靈族最有錢,哥布林族最窮,我們怎麼樣才可以知道或如何來做比較呢"

簡單阿,依據種族富有程度來排列就好啦,運用ordered = TRUE這個指令,若輸入ordered後,記得levels排列的順序將影響到大小值

PUP_wealth_factor <- factor(PUP_factor, ordered = TRUE, levels = c("Goblin", "Hoblin", "Orc", "Harpy", "Elf"))

PUP_wealth_factor
Hoblin Goblin Hoblin Harpy Orc Orc Goblin Goblin Orc Elf Harpy Elf Goblin Elf Elf Hoblin Harpy Hoblin Orc Hoblin Orc Goblin Harpy Hoblin Goblin Harpy Harpy Goblin Elf Hoblin Hoblin Harpy Goblin Orc Hoblin Harpy Goblin Elf Hoblin Hoblin Harpy Elf Goblin Goblin Hoblin Orc Goblin Goblin Elf Goblin 

Levels:
'Goblin' 'Hoblin' 'Orc' 'Harpy' 'Elf' 

接著當我們用[]中括號來取某個特定值,這樣就可以比較啦
比如第49位的魔物和第1位的魔物到底誰比較有錢呢?

PUP_wealth_factor[49] > PUP_wealth_factor[1]
[1] TRUE

最後,做個總整理,可以用summary()及str()來看資料整理後的樣子,我們以最後的因子PUP_wealth_factor

summary(PUP_wealth_factor)

Goblin    Hoblin    Orc    Harpy    Elf
    14       12      7        9      8

str(PUP_wealth_factor)
Ord.factor w/ 5 levels "Goblin"<"Hoblin"<..: 2 1 2 4 3 3 1 1 3 5 ...

str就是structure,也就是觀察因子的結構,ord.factor表示是排列的因子並有5個levels。後面的數字則是對應levels的排列,以上面來看1就是哥布林,2就是哈布林。


上一篇
[Data Science系列]R語言的二維世界-運用矩陣管理帳目(下)-我要成為哥布林富翁
下一篇
[Data Science系列]R語言多維空間的管理-解析分類人物屬性值
系列文
[Data Science系列]成為哥布林的那件事-非常粗(初)心者30

尚未有邦友留言

立即登入留言