iT邦幫忙

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

資料科學:使用 Clojure系列 第 7

Day 07 - 單元一:描述統計(二)

擴增表格(Adding derived columns)

如何在舊有資料上產生新的行(column)?

(defn ex-1-26 []
  (->> (load-data :uk-scrubbed)
       (i/add-derived-column :victors [:Con :LD] +)))

但是此函數會抱錯。原因在於有部分的資料是以 java.lang.String 物件儲存,而有部分是以 java.lang.Double 儲存。通過下列計算可以看出具體數量:


(->> (load-data :uk-scrubbed)
     ($ "Con")
     (map type)
     (frequencies))
;; {java.lang.Double 631, java.lang.String 19}

(->> (load-data :uk-scrubbed)
     ($ "LD") 
     (map type)
     (frequencies))
;; {java.lang.Double 631, java.lang.String 19}

讓我們用一開始介紹的 i/$where 來看看這些資料的具體狀況:

(defn ex-1-27 []
  (->> (load-data :uk-scrubbed)
       (i/$where #(not-any? number? [(% "Con") (% "LD")]))
       (i/$ [:Region :Electorate :Con :LD])))

;; |           Region | Electorate | Con | LD | 
;; |------------------+------------+-----+----| 
;; | Northern Ireland |    60204.0 |     |    | 
;; | Northern Ireland |    73338.0 |     |    | 
;; | Northern Ireland |    63054.0 |     |    | 
;; ... 

原來是因為該資料格為空白!**那我們應該過濾掉這些行,或者是填充為 0 呢?(filtered or assumed to be zero?)**在此資料情境下,填充為 0 會使得分析的強度下降,所以我們過濾掉這幾行。我們創建一個新的過濾後表格,並同時新增我們所需要的資料:

(defmethod load-data :uk-victors [_]
  (->> (load-data :uk-scrubbed)
       (i/$where {:Con {:$fn number?} :LD {:$fn number?}})
       (i/add-derived-column :victors [:Con :LD] +)
       (i/add-derived-column :victors-share [:victors :Votes] /)
       (i/add-derived-column :turnout [:Votes :Electorate] /))

於是我們有了三個新的行,與勝選人在此選區的得票比例有關係的數據::victors:victors-shareturnout。所以我們可以用 Q-Q plot 來觀察這些變數之間的關聯!


上一篇
Day 06 - 單元一:描述統計(一)
下一篇
Day 08 - 單元二:推論統計(一)
系列文
資料科學:使用 Clojure30

尚未有邦友留言

立即登入留言