🌻 read.csv() - 讀取CSV(逗號分隔值)的文件

D = read.csv("data/comics1.csv")


5. 計算數量與比率

5.1 邏輯運算式的數量與比率

🌻 用 sum() 來計算一個邏輯向量裡面 TRUE 的個數

sum(D$align == "Good")
[1] 3178


🌻 用 mean() 來計算一個邏輯向量裡面 TRUE 的比例

mean(D$align == "Good")
[1] 0.4383


5.2 table() and prop.table()

🌻 table() 列出一個向量裡各不同的值出現的次數

table(D$align)

    Bad    Good Neutral 
   2915    3178    1157 


🌻 prop.table() 將計數轉換成比例

table(D$align) %>% prop.table

    Bad    Good Neutral 
 0.4021  0.4383  0.1596 


如果我們在table()中放入兩個變數,會發生什麼事呢?

table(D$align, D$sex)
         
          Female Male
  Bad        676 2239
  Good      1264 1914
  Neutral    432  725


❓ C查看prop.table的線上說明(F1),它的margin這個參數的作用是什麼?
❓ Check the online help of prop.table. What does argument margin works?

table(D$align, D$sex) %>% prop.table
         
           Female    Male
  Bad     0.09324 0.30883
  Good    0.17434 0.26400
  Neutral 0.05959 0.10000
table(D$align, D$sex) %>% prop.table(1)
         
          Female   Male
  Bad     0.2319 0.7681
  Good    0.3977 0.6023
  Neutral 0.3734 0.6266
table(D$align, D$sex) %>% prop.table(2)
         
          Female   Male
  Bad     0.2850 0.4590
  Good    0.5329 0.3924
  Neutral 0.1821 0.1486


我們來練習一下,

  • 資料中有多少個壞男人 ❓
  • 壞角色之中有多少比率是女的 ❓
  • 女性之中有多少比率是壞人 ❓


🏆 Group Competition Round 1

1. 我們有多少個壞人角色? 2915
2. 我們有多少個壞男性角色? 2239
3. 在所有角色當中,壞人的比例是多少? 0.4021
4. 在所有角色當中,壞男性角色的比例又是多少呢? 0.3088
5. 在所有男性角色中,壞人的比例是多少? 0.4590
6. 在所有壞角色中,男生的比例又是多少呢? 0.7681
7. 在哪個性別當中,中立的人比較多? Male
8. 女性的角色比較有可能是中立的嗎? TREU, 0.1821 > 0.1486



6. 分類運算與比較

6.1 分類運算功能 tapply()

🌻 tapply(value, group, fun) applies fun to value by each distinct group

tapply(D$align == "Neutral", D$sex, sum)
Female   Male 
   432    725 

按性別計算中立的人數

tapply(D$align == "Neutral", D$sex, mean)
Female   Male 
0.1821 0.1486 

按性別計算中立的比率


我們來練習一下,

每種頭髮顏色中女性的比例分別是多少 ❓

tapply(D$sex=="Female", D$hair, mean)
   Bald   Black   Blond   Brown      No  others     Red   White 
0.05921 0.34754 0.46642 0.26921 0.09186 0.35211 0.54839 0.22350 

每種頭髮顏色之中,各有多少女性 ❓

tapply(D$sex=="Female", D$hair, sum)
  Bald  Black  Blond  Brown     No others    Red  White 
    18    799    514    403     44    225    272     97 


🏆 Group Competition Round 2

1.在藍眼睛的角色中,男性的比例是多少?

mean(D$sex[D$eye=="Blue"] == "Male")        # exactly 1 answer
[1] 0.6443
tapply(D$sex=="Male", D$eye=="Blue", mean)  # comparing blue to the others
 FALSE   TRUE 
0.6876 0.6443 
tapply(D$sex=="Male", D$eye, mean)          # comparing among all colors
 Black   Blue  Brown  Green others    Red  White Yellow 
0.7528 0.6443 0.6973 0.4880 0.6713 0.8085 0.7285 0.7536 
table(D$eye, D$sex) %>% prop.table(1)       # comparing among all colors !!   
        
         Female   Male
  Black  0.2472 0.7528
  Blue   0.3557 0.6443
  Brown  0.3027 0.6973
  Green  0.5120 0.4880
  others 0.3287 0.6713
  Red    0.1915 0.8085
  White  0.2715 0.7285
  Yellow 0.2464 0.7536

🌷 以上四種作法都可以回答相同的問題,但是 …

  • 分析本身就是把資料變少的過程,輸出資料並不是越詳細越好
  • 產生表格通常是為了要做分類比較
  • 用兩個變數做table()會產生二維的矩陣,要在哪一個方向上轉成比例、哪一個方向上面做比較就需要先考慮清楚。


2.在男性角色中,藍眼睛角色的數量是多少?

tapply(D$eye=="Blue", D$sex, sum)
Female   Male 
   881   1596 

3.男性的存活比例是多少?

tapply(D$alive=="Living", D$sex, mean)
Female   Male 
0.7757 0.7071 

4.哪個陣營(好人陣營 or 壞人陣營)比較有可能存活? Which align is more likely to stay alive?

tapply(D$alive=="Living", D$align, mean)
    Bad    Good Neutral 
 0.6816  0.7634  0.7571 


6.2 分類運算與條件機率 - 壞人的長相

列出在各種眼睛顏色之中壞人的人數?

tapply(D$align=="Bad", D$eye, sum) %>% sort
Yellow others  White  Black    Red  Green  Brown   Blue 
   118    150    164    281    288    289    788    837 

列出在各種眼睛顏色之中壞人的比例?

tapply(D$align=="Bad", D$eye, mean) %>% sort
  Blue  Brown others  Green  Black  White Yellow    Red 
0.3379 0.3566 0.4178 0.4352 0.4540 0.5636 0.5700 0.6809 

❓ 壞人最有可能有哪一種頭髮眼睛組合呢?
❓ 哪一種頭髮眼睛組合最有可能是壞人呢?
❓ 如果我們想要根據長相來辨識壞人,我們應該要問 …

  • 壞人之中哪一種眼珠顏色的人數最多
  • 哪一種眼珠顏色之中壞人的人數最多
  • 壞人之中哪一種眼珠顏色的比率最高 (P[eye|bad]) 還是
  • 哪一種眼珠顏色之中壞人的比率最高 (P[bad|eye]) 呢?


🌻 和table一樣,tapply也可以接受多於一個分類變數

我們可以算出每一種頭髮眼睛組合之中壞人的人數 …

tapply(D$align=="Bad", list(eye=D$eye, hair=D$hair), sum) 
        hair
eye      Bald Black Blond Brown No others Red White
  Black    16   141    11    34 24     25  10    20
  Blue     39   204   244   148 13     72  51    66
  Brown    49   341    36   285  4     34  16    23
  Green     6    49    33    27 93     23  51     7
  others    8    38     9    24 24     32   6     9
  Red      25    64    11    28 72     38  21    29
  White    14    38    11    13 42     14   7    25
  Yellow    4    26     7     9 47     10   8     7

棕色眼睛、黑色頭髮的壞人是最多的,所以棕眼黑髮的人比較有可能是壞人嗎 ❓

我們也可以算出每一種頭髮眼睛組合之中壞人的比率

tapply(D$align=="Bad", list(eye=D$eye, hair=D$hair), mean) 
        hair
eye        Bald  Black  Blond  Brown     No others    Red  White
  Black  0.5714 0.4299 0.4400 0.4416 0.5581 0.4545 0.5000 0.4651
  Blue   0.5571 0.3656 0.2965 0.3814 0.3514 0.3318 0.2550 0.3587
  Brown  0.4495 0.3370 0.4390 0.3527 0.3077 0.3908 0.4000 0.3898
  Green  0.5000 0.4414 0.3929 0.3214 0.8857 0.2614 0.3168 0.3684
  others 0.5333 0.4130 0.3103 0.3810 0.5714 0.4324 0.4286 0.3000
  Red    0.7576 0.6957 0.5789 0.6364 0.6857 0.7170 0.6000 0.6905
  White  0.5833 0.6032 0.4583 0.5909 0.6462 0.3889 0.5833 0.5556
  Yellow 0.3077 0.6047 0.4375 0.8182 0.6812 0.3448 0.5714 0.5833

所以,哪一種長相的人,最有可能是壞人呢 ❓



💡 學習重點
在上面的練習之中,我們學到了 …
  ■ 用 table() 計算數量
  ■ 用 tapply() 做分類運算
  ■ table, tapply 和 索引的綜合運用
  ■ 分類運算與條件機率