1. 請使用R 實作, 並以“.R”檔繳交可運行之程式碼,以做為評分參考
  2. 本期末考為Open Book, Open Computer 測驗,除抄襲其他人外, 所有公開資源都可以參考
  3. 考試時間為一星期 (2018/09/03 12:00:00 ~ 2018/09/11 23:59:59)
  4. 實作完期末考者,可以將.R 檔寄至 david@largitdata.com , 並在信件主旨上標注[繳交CDC R語言期末考]以做後續評分
  5. 考試以60分為標準, 超過60分方算及格

基礎 R 語言 與資料視覺化 (12題共60分)

從疫情中心的開放資料網站蒐集到「登革熱近12個月每日確定病例統計」,資料如下:

library(readr)
dataset <- read_csv('https://raw.githubusercontent.com/ywchiu/cdc_course/master/data/Dengue_Daily_last12m.csv')
## Parsed with column specification:
## cols(
##   .default = col_character(),
##   發病日 = col_date(format = ""),
##   個案研判日 = col_date(format = ""),
##   通報日 = col_date(format = ""),
##   確定病例數 = col_integer()
## )
## See spec(...) for full column specifications.
str(dataset)
## Classes 'tbl_df', 'tbl' and 'data.frame':    365 obs. of  26 variables:
##  $ 發病日            : Date, format: "2017-09-01" "2017-09-03" ...
##  $ 個案研判日        : Date, format: "2017-09-05" "2017-09-09" ...
##  $ 通報日            : Date, format: "2017-09-05" "2017-09-08" ...
##  $ 性別              : chr  "男" "男" "女" "男" ...
##  $ 年齡層            : chr  "40-44" "30-34" "15-19" "35-39" ...
##  $ 居住縣市          : chr  "新北市" "新北市" "桃園市" "台北市" ...
##  $ 居住鄉鎮          : chr  "新店區" "永和區" "大園區" "大安區" ...
##  $ 居住村里          : chr  "大同里" "新廍里" "菓林里" "民炤里" ...
##  $ 最小統計區        : chr  "A6506-0261-00" "A6504-0058-00" "None" "A6303-0351-00" ...
##  $ 最小統計區中心點X : chr  "121.541220302" "121.512814046" "None" "121.536889132" ...
##  $ 最小統計區中心點Y : chr  "24.980690477" "25.016252648" "None" "25.035476567" ...
##  $ 一級統計區        : chr  "A6506-13-011" "A6504-05-002" "None" "A6303-35-002" ...
##  $ 二級統計區        : chr  "A6506-13" "A6504-05" "None" "A6303-35" ...
##  $ 感染縣市          : chr  "None" "None" "None" "None" ...
##  $ 感染鄉鎮          : chr  "None" "None" "None" "None" ...
##  $ 感染村里          : chr  "None" "None" "None" "None" ...
##  $ 是否境外移入      : chr  "是" "是" "是" "是" ...
##  $ 感染國家          : chr  "越南" "印度" "越南" "越南" ...
##  $ 確定病例數        : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ 居住村里代碼      : chr  "6500600-004" "6500400-045" "6800600-011" "6300300-004" ...
##  $ 感染村里代碼      : chr  "None" "None" "None" "None" ...
##  $ 血清型            : chr  "None" "None" "None" "第四型" ...
##  $ 內政部居住縣市代碼: chr  "65" "65" "68" "63" ...
##  $ 內政部居住鄉鎮代碼: chr  "6500600" "6500400" "6800600" "6300300" ...
##  $ 內政部感染縣市代碼: chr  "None" "None" "None" "None" ...
##  $ 內政部感染鄉鎮代碼: chr  "None" "None" "None" "None" ...
##  - attr(*, "spec")=List of 2
##   ..$ cols   :List of 26
##   .. ..$ 發病日            :List of 1
##   .. .. ..$ format: chr ""
##   .. .. ..- attr(*, "class")= chr  "collector_date" "collector"
##   .. ..$ 個案研判日        :List of 1
##   .. .. ..$ format: chr ""
##   .. .. ..- attr(*, "class")= chr  "collector_date" "collector"
##   .. ..$ 通報日            :List of 1
##   .. .. ..$ format: chr ""
##   .. .. ..- attr(*, "class")= chr  "collector_date" "collector"
##   .. ..$ 性別              : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 年齡層            : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 居住縣市          : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 居住鄉鎮          : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 居住村里          : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 最小統計區        : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 最小統計區中心點X : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 最小統計區中心點Y : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 一級統計區        : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 二級統計區        : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 感染縣市          : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 感染鄉鎮          : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 感染村里          : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 是否境外移入      : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 感染國家          : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 確定病例數        : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ 居住村里代碼      : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 感染村里代碼      : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 血清型            : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 內政部居住縣市代碼: list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 內政部居住鄉鎮代碼: list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 內政部感染縣市代碼: list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ 內政部感染鄉鎮代碼: list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr  "collector_guess" "collector"
##   ..- attr(*, "class")= chr "col_spec"

請試用R 語言回答以下問題:

  1. 請將血清型欄位資料中的None 變成遺失值NA ? (5分)
  2. 請統計血清型欄位遺失值的數量? (5分)
  3. 請將血清型欄位從字串資料型態變更為階層資料型態? (5分)
  4. 請統計資料中男性與女性的數量? (5分)
  5. 繼第4題,請計算男性與女性的比例? (5分)
  6. 繼第5題,請使用圓餅圖(Pir Chart) 呈現出男性與女性病例數比例 ? (5分)
  7. 請統計在病例資料中,居住於哪個縣市的病患最多? (5分)
  8. 請使用長條圖(Bar Chart) 呈現出病例數最多的前十居住縣市? (5分)
  9. 請統計各居住縣市各性別病例數? (5分)
  10. 繼第9題, 請使用長條圖呈現各居住縣市各性別病例數?(5 分)
  11. 請根據發病日,統計每日的病例數量? (5分)
  12. 繼第11題,請使用折線圖(Line Chart) 依發病日與病例數繪製病例趨勢圖 ? (5分)

統計與機器學習 (8題共40分)

library(readr)
diabetes <- read_csv('https://raw.githubusercontent.com/ywchiu/cdc_course/master/data/diabetes.csv')
## Parsed with column specification:
## cols(
##   Pregnancies = col_integer(),
##   Glucose = col_integer(),
##   BloodPressure = col_integer(),
##   SkinThickness = col_integer(),
##   Insulin = col_integer(),
##   BMI = col_double(),
##   DiabetesPedigreeFunction = col_double(),
##   Age = col_integer(),
##   Outcome = col_integer()
## )
str(diabetes)
## Classes 'tbl_df', 'tbl' and 'data.frame':    768 obs. of  9 variables:
##  $ Pregnancies             : int  6 1 8 1 0 5 3 10 2 8 ...
##  $ Glucose                 : int  148 85 183 89 137 116 78 115 197 125 ...
##  $ BloodPressure           : int  72 66 64 66 40 74 50 0 70 96 ...
##  $ SkinThickness           : int  35 29 0 23 35 0 32 0 45 0 ...
##  $ Insulin                 : int  0 0 0 94 168 0 88 0 543 0 ...
##  $ BMI                     : num  33.6 26.6 23.3 28.1 43.1 25.6 31 35.3 30.5 0 ...
##  $ DiabetesPedigreeFunction: num  0.627 0.351 0.672 0.167 2.288 ...
##  $ Age                     : int  50 31 32 21 33 30 26 29 53 54 ...
##  $ Outcome                 : int  1 0 1 0 1 0 1 0 1 1 ...
##  - attr(*, "spec")=List of 2
##   ..$ cols   :List of 9
##   .. ..$ Pregnancies             : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ Glucose                 : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ BloodPressure           : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ SkinThickness           : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ Insulin                 : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ BMI                     : list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ DiabetesPedigreeFunction: list()
##   .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
##   .. ..$ Age                     : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ Outcome                 : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr  "collector_guess" "collector"
##   ..- attr(*, "class")= chr "col_spec"

有一糖尿病數據集,資料欄位敘述如下:

  1. Number of times pregnant
  2. Plasma glucose concentration a 2 hours in an oral glucose tolerance test
  3. Diastolic blood pressure (mm Hg)
  4. Triceps skin fold thickness (mm)
  5. 2-Hour serum insulin (mu U/ml)
  6. Body mass index (weight in kg/(height in m)^2)
  7. Diabetes pedigree function
  8. Age (years)
  9. Class variable (0 or 1)

請試用R 語言回答以下問題:

  1. 請計算除了 Class Variable 外所有欄位的相關性? (5分)
  2. 繼第13題, 請使用corrplot 繪製相關性圖? (5分)
  3. 請將資料分為訓練與測試資料集,其中訓練資料集占80%, 測試資料集占20%? (5分)
  4. 請使用決策樹建立分類模型 (目標 y 為 Class Variable)? (5分)
  5. 繼第16題,請計算出模型準確度(Accuracy)? (5分)
  6. 繼第17題,請求出混淆矩陣(Confusion Matrix)? (5分)
  7. 請使用隨機森林建立分類模型 (目標 y 為 Class Variable, 樹的數量為100)? (5分)
  8. 請繪製隨機森林模型與決策樹的 ROC Curve, 並比較兩者的 AUC? (5 分)