iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 13
1

分類這個章節的重點在於掌握多種不同數據類型,例如:連續(身高、長度)、等第(名次)、項目(種類)等。這個章節的相關程式碼在 Chapter 04,主要使用著名的鐵達尼號資料集(data about the passengers on the Titanic)。

檢視資料

如同往常,先來看看資料的具體內容及「骯髒」程度。

(defn load-data [file]
  (-> (io/resource file)
      (str)
      (iio/read-dataset :delim \tab :header true)))

(defn ex-4-1 []
  (i/view (load-data :titanic)))

資料包含了蠻多的類別資料,例如::sex:pclass(座艙等級)、以及:embarked(登船口),有一些欄位則比較混亂,例如 :tickerboat:body。有些資料可以當成離散,也可當成連續,例如伴侶數量 :sibsp

我們可以通過頻率表來觀察資料分布的狀況。

(defn frequency-table [sum-column group-columns dataset]
  (->> (i/$ group-columns dataset)
       (i/add-column sum-column (repeat 1))
       (i/$rollup :sum sum-column group-columns)))

(defn ex-4-2 []  
  (->> (load-data "titanic.tsv")       
       (frequency-table :count [:sex :survived])))

;; | :survived |   :sex | :count | 
;; |-----------+--------+--------| 
;; |         n |   male |    682 | 
;; |         n | female |    127 | 
;; |         y |   male |    161 | 
;; |         y | female |    339 | 

上面的程式輸出的結果是生還者數量跟性別的關聯性。

相對風險與勝算比

  • 相對風險(relative risk)
  • 勝算比(odds ratio)

在一個兩變數的表格中,我們可以計算類別對另一類別所造成的影像為何(假如有關聯)。

(defn frequency-map [sum-column group-cols dataset]
  (let [f (fn [freq-map row]
            (let [groups (map row group-cols)]
              (->> (get row sum-column)
                   (assoc-in freq-map groups))))]
    (->> (frequency-table sum-column group-cols dataset)
         (:rows)
         (reduce f {}))))

於是我們就可以用這個頻率表下去計算我們所需要的值!

(defn ex-4-3 []
  (->> (load-data "titanic.tsv")
       (frequency-map :count [:sex :survived])))

;; {"female" {"y" 339, "n" 127}, "male" {"y" 161, "n" 682}}

上一篇
Day 12 - 單元三:相關性(三)
下一篇
Day 14 - 單元四:分類(二)
系列文
資料科學:使用 Clojure30

尚未有邦友留言

立即登入留言