ContactLinkedin

1. 取得資料

Data acquisition methods:

  • Combine data from local files and different formats (txt, csv, xls, xlsx)
  • Download files from website
  • Accessing an API
  • Scraping a web page (not included in this session)

開放資料平台結構化資料統計




STR CLASS TYPE.MAIN COUNT PERC
YES Sheets CSV 7224 35.03 %
XML 6879 33.36 %
JSON 1579 7.66 %
RSS 113 0.55 %
MAPs KML 51 0.25 %
WMS 31 0.15 %
SHP 82 0.4 %
KMZ 9 0.04 %
WMTS 7 0.03 %
WebPage WebPage 2 0.01 %
API ASMX 1 0 %
DEMDSM 1 0 %

網路下載資料集

  • 交通部臺灣區國道高速公路局「交通資料庫」
  • Hints:
    • URL 有規則 => 依照規則產生不同 URL : url <- paste(), as.Date(x = "2016/12/08") %>% format(format="%Y%m%d")
    • 批次自動下載: download.file()
    • 批次讀取子資料夾內檔案 / 整理到一個 data.frame: list.files(), read.csv, library(dplyr)
    • 存成 csv 或資料庫中: write.csv(), library(DBI)
url <- 'http://tisvcloud.freeway.gov.tw/history/TDCS/M03A/M03A_20161113.tar.gz'

download.file(url, destfile = "20161113.tar.gz")
untar("20161113.tar.gz")

all.files <- list.files(path = "./var", recursive = TRUE)

for (i in 1:10){
  
  # CODE here
  
  print(all.files[i])
}

使用 Web API 取得即時資料




# (1) .csv
url <- "http://data.gov.tw/iisi/logaccess/165?dataUrl=http://opendata.epa.gov.tw/ws/Data/AQX/?format=csv&ndctype=CSV&ndcnid=6074"
y <- read.csv(url, sep = ",", stringsAsFactors = F, header = T)

# (2) json files
library(jsonlite)
url <- 'http://data.gov.tw/iisi/logaccess/166?dataUrl=http://opendata.epa.gov.tw/ws/Data/AQX/?format=json&ndctype=JSON&ndcnid=6074'
y <- fromJSON(url, flatten = TRUE)
y <- as.data.frame(y$Records)

# (3) XML 
library(XML)
url <- 'http://data.gov.tw/iisi/logaccess/167?dataUrl=http://opendata.epa.gov.tw/ws/Data/AQX/?format=xml&ndctype=XML&ndcnid=6074'
x <- xmlParse(url) # 以 xmlParse 解析 XML 檔案
xmlfiles <- xmlRoot(x) # 將 root 設定到 content 層級(一個偷吃步的做法)
y <- xmlToDataFrame(xmlfiles) # 轉換成 dataframe

# 將整理完成的檔案存成 CSV
write.csv(file = 'open.csv', y, fileEncoding = 'big5')

OData

Open Data Protocol(OData),它是一個開源的協定,藉由簡單的 URL 參數傳遞,來識別並查詢資料庫資料,此協定支援 XML 及 JSON 格式。




2. 資料庫處理

RSQLite

  • DBI: R Database Interface
    • 提供一個簡便的資料庫介面讓 R User 可以處理超過記憶體容量的資料
  • SQLite (Structured Query Language)
SELECT DISTINCT column_list
FROM table_list
  JOIN table ON join_condition
WHERE row_filter
ORDER BY column
LIMIT count OFFSET offset
GROUP BY column
HAVING group_filter;
  • install.packages(c("DBI", "RSQLite"))
    • vignette("RSQLite")


3. 大「數據」(檔)的處理

data.table

library(data.table)
ubike <- fread(input = "./data/ubike-weather-big5.csv",
               data.table = FALSE, 
               colClasses = c("factor","integer","integer","factor","factor",
                              "numeric","numeric","integer","numeric","integer",
                              "integer","numeric","numeric","integer","integer",
                              "numeric","numeric","numeric","numeric","numeric",
                              "numeric", "numeric","numeric"),
               stringsAsFactors = F)

SparkR

Apache Spark 是一個開源叢集運算框架,最初是由加州大學柏克萊分校AMPLab所開發,使用記憶體內運算技術,能在資料尚未寫入硬碟時即在記憶體內分析運算。Spark在記憶體內執行程式的運算速度能做到比 Hadoop MapReduce 的運算速度快上100倍,即便是執行程式於硬碟時,Spark也能快上10倍速度,非常適合用於機器學習演算法。





Thanks!
Rafe C.H. Liu|ContactLinkedin

UPDATE: 2017-12-01