googleVis簡介

Mansun Kuo(coccolegacy@gmail.com)

2013/05/13

大綱

googleVis

圖形範例

GadgetExamples 就可以看到許多圖形範例與程式碼

應用方式

pandoc -s -S -t slidy  googleVis_demo.md -o googleVis_demo_slidy.html

注意事項

讀取googleVis

library(googleVis)
## Welcome to googleVis version 0.4.2
## 
## Please read the Google API Terms of Use before you use the package:
## https://developers.google.com/terms/
## 
## Type ?googleVis to access the overall documentation and
## vignette('googleVis') for the package vignette. You can execute a demo of
## the package via: demo(googleVis)
## 
## More information is available on the googleVis project web-site:
## http://code.google.com/p/google-motion-charts-with-r/
## 
## Contact: <rvisualisation@gmail.com>
## 
## To suppress the this message use:
## suppressPackageStartupMessages(library(googleVis))

臺北旅遊網-景點資料使用範例

library(RJSONIO)
# 臺北旅遊網-景點資料(中文)
travel.filename = "./data.json"
# fileUrl = "http://data.taipei.gov.tw/opendata/apply/query/MzVERDUyOTItNjI1NC00NjcyLUE3OEItNDY3ODhDMURFM0Yy?$format=json"
# download.file(fileUrl,destfile=travel.filename)
con = file(travel.filename)
travel.json = readLines(con, warn=F)    #避免沒讀到EOF的warning message
travel.json = fromJSON(travel.json, encoding="UTF-8")
close(con)

共讀了212筆景點資料,在R中會讀成一個長度為212的List。

class(travel.json)
## [1] "list"
str(travel.json)
## List of 212
##  $ : Named chr [1:25] "24" "10" "景點" "單車遊蹤" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "49" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "73" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "96" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "118" "10" "景點" "公共藝術" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "142" "10" "景點" "藍色公路" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "163" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "164" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "165" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "166" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "167" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "168" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "169" "10" "景點" "其他" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "170" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "171" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "172" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "173" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "174" "10" "景點" "城市公園" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "175" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "176" "10" "景點" "城市公園" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "177" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "178" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "179" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "180" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "181" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "50" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "51" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "52" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "53" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "54" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "55" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "56" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "57" "10" "景點" "城市公園" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "58" "10" "景點" "城市公園" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "59" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "60" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "61" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "62" "10" "景點" "城市公園" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "63" "10" "景點" "城市公園" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "64" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "65" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "66" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "67" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "68" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "69" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "70" "10" "景點" "城市公園" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "71" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "72" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "74" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "75" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "76" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "77" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "78" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "79" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "80" "10" "景點" "教堂" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "81" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "82" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "83" "10" "景點" "公共藝術" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "84" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "85" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "86" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "87" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "88" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "89" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "90" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "91" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "93" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "94" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "95" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "92" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "183" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "184" "10" "景點" "親子共遊" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "185" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "186" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "187" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "188" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "189" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "190" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "191" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "192" "10" "景點" "展演會館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "193" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "194" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "195" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "196" "10" "景點" "公共藝術" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "197" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "198" "10" "景點" "其他" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "199" "10" "景點" "其他" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "200" "10" "景點" "其他" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "201" "10" "景點" "親子共遊" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "202" "10" "景點" "其他" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "203" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "204" "10" "景點" "其他" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "205" "10" "景點" "城市公園" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "119" "10" "景點" "親山健行" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "120" "10" "景點" "博物館" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "121" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "122" "10" "景點" "公共藝術" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "123" "10" "景點" "廟宇" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##  $ : Named chr [1:25] "124" "10" "景點" "歷史建築" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
##   [list output truncated]

每一筆景點資料也是一個List,共有25個資料欄位,。

class(travel.json[1])
## [1] "list"
str(travel.json[1])
## List of 1
##  $ : Named chr [1:25] "24" "10" "景點" "單車遊蹤" ...
##   ..- attr(*, "names")= chr [1:25] "rownumber" "ref_wp" "cat1" "cat2" ...
names(travel.json[[1]])
##  [1] "rownumber"   "ref_wp"      "cat1"        "cat2"        "serial_no"  
##  [6] "memo_tel"    "memo_fax"    "memo_cost"   "memo_time"   "stitle"     
## [11] "xbody"       "avbegin"     "avend"       "idpt"        "xurl"       
## [16] "address"     "xpostdate"   "langinfo"    "poi"         "info"       
## [21] "longitude"   "latitude"    "mrt"         "servicetype" "file"

將json轉為data.frame。

travel.data = matrix(nrow=length(travel.json),
                     ncol=length(travel.json[[1]])
                     )
for (i in 1:length(travel.json)){
    for (j in 1:length(travel.json[[1]])){
        travel.data[i, j] = travel.json[[i]][[j]]
    }
}
colnames(travel.data) = names(travel.json[[1]])
travel.data = data.frame(travel.data, stringsAsFactors=F)

資料成功轉為data.frame。

str(travel.data)
## 'data.frame':    212 obs. of  25 variables:
##  $ rownumber  : chr  "24" "49" "73" "96" ...
##  $ ref_wp     : chr  "10" "10" "10" "10" ...
##  $ cat1       : chr  "景點" "景點" "景點" "景點" ...
##  $ cat2       : chr  "單車遊蹤" "博物館" "博物館" "歷史建築" ...
##  $ serial_no  : chr  "2011051800000037" "2011051800000125" "2011051800000182" "2011051800000399" ...
##  $ memo_tel   : chr  "" "02-8733-5678、 02-8369-5104" "02-2831-4551" "02-2861-8325" ...
##  $ memo_fax   : chr  "" "" "2831-4405" "" ...
##  $ memo_cost  : chr  "" "" "" "" ...
##  $ memo_time  : chr  "" "園區水鄉庭園戲水池於2012年5月19日(星期六)起正式開放。\n夏日期間(每年7月1日至8月31日)自上午9點開放至晚上8點(售票至7點);非夏日期"| __truncated__ "開放時間 每週一休館(如遇國定假日則延至隔日休館,詳情請注意新聞通知,或可以打電話至本館詢問)。 \n週日及週二至周五:從上午九時"| __truncated__ "每日9:00~17:00" ...
##  $ stitle     : chr  "基隆河左、右岸親水" "自來水博物館" "臺北市立天文科學教育館" "陽明山光復樓" ...
##  $ xbody      : chr  "從左岸的林安泰疏散門進入河濱腳踏車道,遊客可以看見紀錄著基隆河緣起,整治故事的解說牌,讓民眾在運動休閒之餘,還能瞭解基隆河長長"| __truncated__ "位於新店溪與思源街旁的臺北自來水發源地--臺北水源地唧筒室,其主體建築於1908年,迄今已有近百年歷史。其建築最大特色是採新古典主義"| __truncated__ "你知道天文的奧妙嗎?臺北市立天文科學教育館。半圓形的建築物是全天域劇院,直徑35 米,外表覆蓋金黃色面板,是一個顯目的地標,裡面有"| __truncated__ "陽明公園的地標之一辛亥光復樓,隱身在濃密的樹林間,是一座中國式富麗堂皇的2層建築,在民國60年為了紀念辛亥起義一甲子所建,位於陽明"| __truncated__ ...
##  $ avbegin    : chr  "2010-02-14" "2008-08-13" "2008-08-13" "2008-08-13" ...
##  $ avend      : chr  "2012-04-19" "2012-12-04" "2012-06-28" "2012-01-19" ...
##  $ idpt       : chr  "臺北旅遊網" "臺北旅遊網" "臺北旅遊網" "臺北旅遊網" ...
##  $ xurl       : chr  "http://www.riversidepark.taipei.gov.tw/" "http://waterpark.twd.gov.tw/index_c.asp" "http://www.tam.gov.tw/MP_104051.html" "" ...
##  $ address    : chr  "臺北市  士林區基隆河左、右岸" "臺北市  中正區思源街1號" "臺北市  士林區基河路363號" "臺北市  北投區湖山路2段26號" ...
##  $ xpostdate  : chr  "2012-04-19" "2012-12-04" "2012-06-28" "2012-01-19" ...
##  $ langinfo   : chr  "10" "10" "10" "10" ...
##  $ poi        : chr  "Y" "Y" "Y" "Y" ...
##  $ info       : chr  "捷運站名:1.左岸:淡水線圓山站,往民族東路、新生北路方向步行,穿越中山高速公路底下涵洞,再右轉即抵達。2.右岸:內湖線大直站往大"| __truncated__ "自來水博物館區:捷運公館站4號出口,左轉往思源街與汀州路口方向步行約5分鐘。親水體驗教育區:捷運公館站1號出口,往汀州路三段160巷"| __truncated__ "捷運站名:捷運淡水線:捷運紅線 (淡水線):劍潭、士林或芝山站下車後步行約20分鐘左右可達。接駁公車:紅12、41、紅3、紅30(經捷運劍潭"| __truncated__ "捷運站名:劍潭站轉乘紅5或休閒公車111至陽明山停車場1.公車:230、260、小9、休閒公車109、111、公路局(臺北往金山)可達 2.車位:陽"| __truncated__ ...
##  $ longitude  : chr  "121.530239" "121.530965" "121.51897" "121.540118" ...
##  $ latitude   : chr  "25.071668" "25.014091" "25.09606" "25.159277" ...
##  $ mrt        : chr  "圓山" "公館" "劍潭" "劍潭" ...
##  $ servicetype: chr  "" "" "無障礙設施" "" ...
##  $ file       : chr  "<file><img description=\"基隆河左岸\">http://www.taipeitravel.net/d_upload_ttn/sceneadmin/pic/11000840.jpg</img><img descriptio"| __truncated__ "<file><img description=\"自來水博物館_1\">http://www.taipeitravel.net/d_upload_ttn/sceneadmin/pic/11000794.jpg</img><img descri"| __truncated__ "<file><img description=\"臺北市立天文科學教育館_1\">http://www.taipeitravel.net/d_upload_ttn/sceneadmin/pic/11000770.jpg</img><"| __truncated__ "<file><img description=\"陽明山光復樓\">http://www.taipeitravel.net/d_upload_ttn/sceneadmin/pic/11000975.jpg</img><img descript"| __truncated__ ...

設定經緯度和超連結

travel.data$LatLon = paste(travel.data$latitude, 
                           travel.data$longitude,
                           sep=":")
travel.data$LatLon[1]
## [1] "25.071668:121.530239"
travel.data$tips = paste("<a href='",
                         travel.data$xurl,
                         "'>",
                         travel.data$stitle, 
                         "</a>",
                         sep="")
travel.data$tips[1]
## [1] "<a href='http://www.riversidepark.taipei.gov.tw/'>基隆河左、右岸親水</a>"

gvisTable

gvisdata = data.frame(travel.data[, c("tips", "memo_tel", "LatLon", 
                                      "address", "mrt")])
Table = gvisTable(gvisdata, options=list(page="enable"))
print(Table, "chart")

gvisMap

Map = gvisMap(travel.data, "LatLon", "tips",
              options=list(showTip=TRUE, 
                           enableScrollWheel=T,
                           width=750, height=500,
                           useMapTypeControl=T,
                           mapType='normal'
                           )
              )

print(Map, "chart") 

gvisBar

將捷運站附近有超過五個景點之挑出來以長條圖呈現。

mrt = table(travel.data$mrt)
gvisdata = data.frame(mrt)
gvisdata = gvisdata[order(gvisdata[, 2], decreasing=T), ]
gvisdata[which(gvisdata[,1] == ""), ] = NA
Bar = gvisBarChart(gvisdata[which(gvisdata[,2]>5),])

print(Bar, "chart") 

gvisMerge

合併gvis物件

Map = gvisMap(travel.data, "LatLon", "tips",
              options=list(showTip=TRUE, 
                           enableScrollWheel=T,
                           useMapTypeControl=T,
                           width=450, height=500,
                           mapType='normal'
                           )
              )
Bar = gvisBarChart(gvisdata[which(gvisdata[,2]>5),], 
                   options=list(width=300, height=500,
                                chartArea="{left: '30%', top:'20%'}",
                                legend="{position: 'top'}")
                   )
Merge = gvisMerge(Bar, Map, horizontal=T)

print(Merge, "chart")

薪資及生產力統計資料使用範例

這裡我們使用 薪資及生產力統計資料查詢系統 之資料來示範Motion Chart和Shiny。

library(xlsx)
worker_data = read.xlsx2("MoreTable01.xls", 1, stringsAsFactors=F)
colnames(worker_data) = gsub("\\.", "", colnames(worker_data))
worker_data[worker_data == "-"] = NA
index = which(colnames(worker_data) != "行業")
for(i in index){
    worker_data[, i] = as.numeric(worker_data[, i])
}
worker_data$時間年 = worker_data$時間年 + 1911
worker_data$平均時薪 = worker_data$平均薪資/worker_data$平均工時

str(worker_data)
## 'data.frame':    661 obs. of  17 variables:
##  $ 時間年              : num  1973 1973 1973 1973 1973 ...
##  $ 行業                : chr  "工業部門" "礦業及土石採取業" "製造業" "電力及燃氣供應業" ...
##  $ 受僱員工人數        : num  1652079 60655 1456309 14424 114276 ...
##  $ 平均薪資            : num  2254 2964 2179 4331 2558 ...
##  $ 經常性薪資          : num  1919 2335 1832 3642 2558 ...
##  $ 非經常性薪資        : num  335 629 347 689 NA 298 376 137 423 538 ...
##  $ 加班費              : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ 平均工時            : num  223 186 226 236 205 ...
##  $ 正常工時            : num  203 181 204 184 205 ...
##  $ 加班工時            : num  19.2 4.9 21.1 51.7 NA 18.3 14.8 4.6 16.3 54.3 ...
##  $ 進入率              : num  5.43 5.37 4.85 0.88 13.74 ...
##  $ 退出率              : num  4.88 4.78 4.43 0.66 11.5 3.3 4.73 4.52 4.29 0.99 ...
##  $ 勞動生產力指數      : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ 單位產出勞動成本指數: num  NA NA NA NA NA NA NA NA NA NA ...
##  $ 平均薪資指數        : num  5.3 5.56 5.14 4.45 6.53 6.53 7.24 8.49 6.88 6.52 ...
##  $ 經常性薪資指數      : num  5.61 5.74 5.45 5.54 7.21 7.29 7.9 10.8 7.42 8.82 ...
##  $ 平均時薪            : num  10.13 15.93 9.66 18.34 12.47 ...

Motion Chart

Motion = gvisMotionChart(worker_data, 
                         idvar="行業", 
                         timevar="時間年",
                         xvar="受僱員工人數",
                         yvar="平均時薪")
# plot(Motion)
print(Motion, "chart")

Shiny

server.R

library(googleVis)
library(shiny)
library(xlsx)

worker_data = read.xlsx2("MoreTable01.xls", 1, stringsAsFactors=F)
colnames(worker_data) = gsub("\\.", "", colnames(worker_data))
worker_data[worker_data == "-"] = NA
index = which(colnames(worker_data) != "行業")
for(i in index){
    worker_data[, i] = as.numeric(worker_data[, i])
}
worker_data$時間年 = worker_data$時間年 + 1911
worker_data$平均時薪 = worker_data$平均薪資/worker_data$平均工時
str(worker_data)

choices_vector = c("受僱員工人數",
                   "平均薪資",
                   "經常性薪資",
                   "非經常性薪資",
                   "加班費",
                   "平均工時",
                   "正常工時",
                   "加班工時",
                   "進入率",
                   "退出率",
                   "勞動生產力指數",
                   "單位產出勞動成本指數",
                   "平均薪資指數",
                   "經常性薪資指數",
                   "平均時薪"
                   )

shinyServer(function(input, output) {
    datasetInput = reactive({
        year = input$year
        print(year)
        var = input$var
        print(var)
        is_sort = input$is_sort
        print(is_sort)
        sub_data = worker_data[which(worker_data$時間年 == year), 
                                  c("行業", var)]
        if (is_sort){
            index = order(sub_data[, var], decreasing=T)
            sub_data = sub_data[index, ]
        }
        data.frame(sub_data)
    })

    typeInput = reactive({
        type = input$type
    })

    gvis_list = list("Motion"=gvisMotionChart,
                         "長條圖"=gvisBarChart,
                         "圓餅圖"=gvisPieChart,
                         "表格"=gvisTable)


    output$view = renderGvis({
        if (typeInput() != "Motion"){
            gvis_list[[typeInput()]](datasetInput())
        }
    })

    output$motion = renderGvis({
        if (typeInput() == "Motion"){
            gvisMotionChart(worker_data, 
                            idvar="行業", 
                            timevar="時間年",
                            xvar="受僱員工人數",
                            yvar="平均時薪")
        }
    })

})

ui.R

shinyUI(pageWithSidebar(
    headerPanel("薪資及生產力統計資料"),
    sidebarPanel(
        selectInput("type", "樣式", 
                    choices = c("Motion", "長條圖", "圓餅圖", "表格"),
                    selected = "Motion"
                    ),

        conditionalPanel("input.type != 'Motion'",
            selectInput("var", "項目", 
                        choices = c("受僱員工人數",
                                    "平均薪資",
                                    "經常性薪資",
                                    "非經常性薪資",
                                    "加班費",
                                    "平均工時",
                                    "正常工時",
                                    "加班工時",
                                    "進入率",
                                    "退出率",
                                    "勞動生產力指數",
                                    "單位產出勞動成本指數",
                                    "平均薪資指數",
                                    "經常性薪資指數",
                                    "平均時薪"
                                    ),
                        selected = "平均時薪"
                        ),

            sliderInput("year", "西元年",
                        min=1973, max=2012, value=2012, step=1,
                        format="###0"
                        ),

            checkboxInput("is_sort", "排序", T)
        )
    ),
    mainPanel(
        conditionalPanel("input.type != 'Motion'",
                         htmlOutput("view")
                         ),
        conditionalPanel("input.type == 'Motion'",
                         htmlOutput("motion")
                         )
    )
))

參考資料