Lecture : 財 務 資 料 分 析 - 使 用 R Time: 7/19( 二 ) 1:30pm~4:30pm 小 單 元 主 題 Time Exercise R_fundamental I_1 R introduction 與 資 料 型 態 15 min + 10 min 1.1~1.2 R_fundamental I_2 基 本 運 算 與 if for function 15 min + 10 min R_fundamental II_1 資 料 結 構 15 min + 10 min 2.1~2.2 R_fundamental II_2 資 料 處 理 初 步 與 結 果 顯 示 15 min + 10 min R_quantmod 財 務 套 件 使 用 15 min + 10 min 3.1~3.3 R_shiny 互 動 式 網 頁 15 min + 10 min 備 註 : 每 個 小 單 元 皆 為 15min 介 紹 與 10min 學 生 操 作, 一 節 課 由 2 個 小 單 元 組 成 主 單 元 : R_fundamental I 內 容 : 1. 介 紹 R 與 操 作 環 境 2. 介 紹 R 儲 存 資 料 常 用 型 態 :numeric integer char factor boolean 3. 介 紹 常 用 運 算 : + - * / 關 係 比 較 if 判 斷 for 迴 圈 4. 介 紹 函 數 function 主 單 元 : R_fundamental II : 內 容 : 1. 儲 存 複 雜 資 料 常 用 結 構 :vector matrix data frame list 2. 處 理 及 初 步 觀 察 資 料 時 常 用 指 令 : boolean 取 值 mean sd 3. 資 料 缺 失 值 檢 查 與 處 理 :is.na which 4. 處 理 資 料 後 初 步 結 果 顯 示 : summary fivenum table hist plot
主 單 元 : R_quantmod 財 務 套 件 內 容 : 1. 透 過 網 路, 由 yahoo finance 取 得 股 票 交 易 數 據 2. 儲 存 / 讀 取 檔 案 數 據 3. 檢 視 數 據 及 計 算 交 易 報 酬 率 4. 技 術 分 析 圖 型 主 單 元 : R_shiny 互 動 式 網 頁 內 容 : 1. 介 紹 shiny 2. 將 quantmod 單 元 之 結 果, 以 shiny 製 作 互 動 式 網 頁 呈 現
主 單 元 : R_fundamental I 內 容 : 1. 介 紹 R 與 操 作 環 境 R 是 免 費 的 自 由 軟 體, 隨 著 巨 量 資 料 分 析 發 展, 使 用 R 語 言 將 成 為 重 要 的 基 本 能 力 根 據 Rexer Analytics 連 續 數 年 調 查 顯 示,R 擊 敗 所 有 商 業 及 開 放 源 碼 軟 體, 為 資 料 分 析 師 使 用 比 例 最 高 的 工 具 知 名 企 業 如 :Google Facebook IBM 輝 瑞 藥 廠 默 克 製 藥 美 國 銀 行 洲 際 酒 店 集 團 殼 牌 石 油 皆 等 使 用 R 世 界 三 大 軟 體 公 司 :Oracle MicroSoft 與 IBM 更 將 R 融 入 其 產 品 中, 成 為 主 要 資 料 分 析 工 具 R 軟 體 的 特 色 免 費 的 自 由 軟 體 開 放 源 碼 且 應 用 廣 泛 有 效 的 資 料 處 理 及 存 取 能 力 ( 可 與 C, C++ 和 Fortran 等 程 式 連 結 ) 方 便 的 矩 陣 操 作 與 運 算 能 力 完 整 而 連 貫 的 資 料 分 析 能 力 ( 有 大 量 套 件 程 式 可 用 ) 強 大 的 視 覺 化 工 具 ( 繪 圖 功 能 ) 跨 平 台, 可 在 Windows UNIX ( 含 FreeBSD 與 Linux) 和 MacOS 執 行 本 課 程 將 使 用 圖 形 化 使 用 者 介 面, 在 整 合 式 開 發 環 境 RStudio 進 行 實 機 操 作, 著 重 基 本 觀 念 資 料 整 理 組 織 與 財 務 套 件 使 用, 幫 助 初 學 者 運 用 免 費 又 強 大 的 R 軟 體, 建 立 使 用 R 完 成 資 料 分 析 工 作 的 基 礎 參 考 教 材 附 錄 一 : R 與 RStudio 安 裝 及 使 用 簡 介 RStudio 圖 形 化 開 發 介 面 2. R 儲 存 資 料 常 用 型 態 : 將 資 料 儲 存 於 變 數 物 件 內, 方 便 重 複 使 用 及 分 析
資 料 常 用 型 態 :numeric 數 值 integer 整 數 char 字 串 factor 因 子 Boolean 邏 輯 變 數 物 件 命 名 : 變 數 名 稱 只 能 以 字 母 或. 開 頭 變 數 名 稱 大 小 寫 是 不 同 的 指 派 ( 儲 存 ) 資 料 給 變 數 : 使 用 <- 或 = > x<-10.0 # numeric 數 值 > a<-"male" # char 字 串 > b=factor("male") # factor 因 子 > a [1] "male" > b [1] male Levels: male # factor 呈 報 資 料 時, 無 "" 3. 介 紹 常 用 運 算 : + - * / 關 係 比 較 if 判 斷 for 迴 圈 (a) 算 數 操 作 (Arithmetic Operator) > 10 + 20 # 加 法 > 10 * 20 # 乘 法 > 10/20 # 除 法 (b) 邏 輯 操 作 與 關 係 比 較 操 作 == Equal to!= Not equal to < Less than > Greater than <= Less than or equal to >= Greater than or equal to is.na(x) Missing( 缺 失 值 )? & Logical AND Logical OR! Logical NOT > 10>=9 [1] TRUE (c) if 判 斷 if( 條 件 式 ) { 執 行 程 式 } 只 有 條 件 式 為 真 (TRUE) 才 會 執 行 例 子 : 袋 子 裡 原 本 有 四 元, 如 果 不 足 十 元 ( 小 於 十 元 ) 再 加 入 五 元, 結 果 是 9 元
x=4 if(x < 10) { x = x + 5 } (d) for 迴 圈 x=0 for( k in 1:5){ x=x+k } 重 複 規 律 由 k 決 定, 而 k 是 {1,2,3,4,5} 得 到 x=0 x=x+1 x=x+2 x=x+3 x=x+4 x=x+5 4. 介 紹 函 數 function: 函 數 名 稱, 輸 入 參 數, 輸 出 值 輸 入 參 數 可 以 沒 有 或 很 多 輸 出 值 最 多 只 能 有 一 個, 但 可 以 是 物 件 (vector, matrix, data frame ) 例 一 : 自 定 簡 單 函 數 # 沒 有 輸 入 參 數, 執 行 結 果 是 輸 出 值 say.hello <- function(){ print("hello, World!") } say.hello() # 執 行 呼 叫 函 數 例 二 : 華 氏 與 攝 氏 轉 換 (F-32)*5/9=C # 輸 入 參 數 為 x, 利 用 return 回 傳 執 行 結 果 ftoc = function(x) { return((x-32)*5/9) } ftoc(32) # 執 行 呼 叫 函 數 練 習 題 : (1) 利 用 for 如 何 計 算 Fibanacci 數 列 第 6 個 數 字 : (2) 寫 一 functiond 輸 入 整 數 n, 當 n<10 時 可 計 算 Fibanacci 數 列 第 n 個 數 字 為 輸 出 值 當 n>=10 時 輸 出 值 為 -1
主 單 元 : R_fundamental II : 內 容 : 1. 儲 存 複 雜 資 料 常 用 結 構 :vector matrix data frame list 2. 處 理 及 初 步 觀 察 資 料 時 常 用 指 令 : boolean 取 值 mean sd 3. 資 料 缺 失 值 檢 查 與 處 理 :is.na which 4. 處 理 資 料 後 初 步 結 果 顯 示 : summary fivenum table hist plot 1. 儲 存 複 雜 資 料 常 用 結 構 :vector matrix data.frame list vector 向 量 : 將 多 個 同 類 型 資 料 存 在 一 維 向 量 內 > x=c(-4,5,10,-1,6,2,33,44,55) # 產 生 向 量 變 數, 常 用 c() > z=c("mary","john","ellen") > x[3] 使 用 位 置 指 標 取 得 元 素, 利 用 [] 指 定 元 素 位 置 > x[c(1,4,2)] # 取 得 第 1 4 2 個 元 素 [1] -4-1 5 matrix 矩 陣 : 將 多 個 同 類 型 向 量 資 料, 存 在 矩 陣 內 > a=matrix(x,nrow=3,ncol=3) # 產 生 矩 陣 變 數 > a [,1] [,2] [,3] [1,] -4-1 33 [2,] 5 6 44 [3,] 10 2 55 data.frame 資 料 框 : 處 理 資 料 最 常 用 的 結 構, 將 多 組 長 度 一 致 的 向 量 ( 欄 ) ( 不 同 向 量 內 的 資 料 類 型 可 不 同 ) 存 在 data.frame 內 以 R 提 供 的 內 建 資 料 集 為 範 例 > data() # 查 看 有 那 些 內 建 資 料 集 > data(esoph) # 載 入 esoph 資 料 集 -- esophageal cancer( 食 道 癌 ) # 載 入 後, 產 生 esoph 的 data.frame 物 件 -------------------------------------------------------------------------------------- # 在 help 中, 輸 入 esoph 查 看 此 資 料 集 詳 細 說 明 # A data frame with records for 88 age/alcohol/tobacco combinations( 法 國 ): 共 5 個 欄 位, 88 筆 資 料 agegp 年 齡 (Age group): factor 6 個 level : 25--34 35--44 45--54 55--64 65--74 75+ years alcgp 酒 精 (Alcohol consumption): factor 4 個 level: 0--39 40 79 80 119 120+ gm/day tobgp 抽 煙 (Tobacco consumption): factor 4 個 level: 0--9 10--19 20--29 30+ gm/day ncases 癌 症 人 數 (Number of cases): numeric ncontrols 未 罹 癌 人 數 (Number of control):numeric 可 發 現 此 5 個 欄 位 中, 有 4 種 資 料, 前 3 個 欄 位 雖 然 皆 是 factor, 但 其 level 構 造 不 同, 屬 於 不 同 資 料 後 2 個 欄 位 皆 為 numeric
-------------------------------------------------------------------------------------- > str(esoph) # 查 看 esoph 資 料 集 的 結 構 > View(esoph) # V 大 寫, 將 esoph 資 料 集 內 容 顯 示 於 編 輯 區 註 : list 資 料 結 構 因 時 間 關 係, 先 行 省 略 -------------------------------------------------------- 註 : 許 多 資 料 來 源 在 R 內 皆 是 以 data.frame 的 物 件 儲 存 及 分 析, 如 : 1. 內 建 資 料 集 2. 網 路 下 載 資 料 3. 外 部 檔 案 ------------------------------------------------------- 2. 處 理 及 初 步 觀 察 資 料 時 常 用 指 令 : boolean 取 值 max sum mean sd > x[x>3] # boolean 取 值, 取 得 所 有 大 於 3 的 元 素 > max(x) # 選 取 x 中 最 大 元 素 > min(x) # 選 取 x 中 最 小 元 素 > sum(x) # x 中 所 有 元 素 作 和 > mean(x) # x 中 所 有 元 素 之 平 均 值 > sd(x) # x 元 素 之 標 準 差 3. 資 料 缺 失 值 檢 查 與 處 理 :is.na which 缺 失 值 NA: Not Available 常 出 現 在 許 多 資 料 中 : char numeric factor > x=c(na,1,2) > sum(x) # 有 NA, 在 套 用 函 數 時, 可 能 導 致 結 果 為 NA [1] NA > is.na(x) # 檢 驗 變 數 是 否 有 NA [1] TRUE FALSE FALSE > y<-na.omit(x) # 去 除 缺 失 值 (NA)( 去 除 相 關 行 如 果 x 為 矩 陣 或 資 料 框 ) > sum(y) # 去 除 NA 後, 再 套 用 函 數 [1] 3 > which(is.na(x)) # 檢 查 NA 在 那 裡 [1] 1
註 : 許 多 財 務 資 料 中 都 會 有 NA 值, 務 必 以 is.na() which(is.na()) 先 檢 查, 並 進 行 適 當 處 理, 如 na.omit() 4. 處 理 資 料 後 初 步 結 果 顯 示 : summary fivenum table hist plot >summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max. -4.00 2.00 6.00 16.67 33.00 55.00 > fivenum(x) [1] -4 2 6 33 55 data.frame 資 料 框 取 值 與 資 料 基 本 分 析 : $ table() aggregate() hist() > head(esoph) # 查 看 esoph 內 前 6 筆 資 料, 對 資 料 內 容 與 大 小 有 概 念 > which(is.na(esoph)) # 查 看 esoph 內 是 否 有 NA 值 integer(0) # 查 無 NA 值 table(esoph$agegp) table() 函 數 的 功 能 很 方 便, 它 首 先 將 數 據 依 factor level 進 行 分 組, 然 後 對 每 一 組 數 據 資 料 筆 數 進 行 統 計, 最 後 把 結 果 組 合 成 一 個 比 較 表 格 返 回, 可 了 解 數 據 資 料 筆 數 分 布 > table(esoph$agegp) # esoph$agegp 取 出 欄 位 值,$ 是 data.frame 取 欄 位 值 符 號 # table() 可 針 對 指 定 欄 位, 依 factor level, 彙 整 資 料 筆 數 > table(esoph$agegp,esoph$alcgp) # table(x,y) 可 彙 集 x,y two-way table 註 : 1. 數 據 資 料 筆 數 均 勻 分 布 在 年 齡 的 各 level 2. 數 據 資 料 筆 數 分 布 在 年 齡 及 酒 精 組 合 的 各 level 也 頗 均 勻 > a <- table(esoph$agegp,esoph$alcgp) > a/margin.table(a) # 分 析 資 料 背 景 分 布 比 例
註 : 數 據 資 料 分 布 比 例 在 年 齡 及 酒 精 組 合 的 各 level 頗 均 勻 > hist(table(esoph$agegp)) # 以 hist() 畫 出 數 值 分 布 的 直 方 圖, 提 供 觀 察 依 據 > plot(table(esoph$agegp)) # 以 plot() 畫 圖 Aggregate() 群 集 函 數, 它 首 先 將 數 據 進 行 分 群 ( 按 指 定 欄 位 ), 然 後 對 每 一 群 數 據 的 某 特 定 欄 位 資 料 套 用 指 定 函 數, 最 後 把 結 果 組 合 成 一 個 比 較 表 格 返 回 例 : aggregate(esoph$ncases,by=list(esoph$alcgp),sum) 將 資 料 依 by=list(esoph$alcgp) 中 的 alcgp 的 factor level 分 成 多 個 資 料 群 再 將 esoph$ncases 欄 位 資 料, 依 資 料 群, 逐 一 套 用 sum() 函 數 aggregate(ncases~ alcgp,esoph,sum) 此 寫 法 亦 可, 且 更 簡 單 易 懂 :data.fram 資 料 為 esoph, ncases~ alcgp 表 示 依 alcgp 的 factor, 分 成 多 個 資 料 群, 將 ncases 數 據 套 用 sum() 函 數
結 果 : 各 酒 精 群, 得 到 食 道 癌 人 數 aggregate(ncases~ alcgp+agegp,esoph,sum) ncases~alcgp+agegp 表 示 依 年 齡 及 酒 精 (alcgp 和 agegp) 的 factor 組 合, 分 成 多 個 資 料 群, 對 ncases 數 據 進 行 sum() 結 果 : 各 ( 年 齡 及 酒 精 ) 組 合, 得 到 食 道 癌 人 數 aggregate(cbind(ncases,ncontrols)~ alcgp,esoph,sum) cbind(ncases,ncontrols) ~ alcgp 表 示 使 用 alcgp 的 factor, 分 成 多 個 資 料 群, 對 ncases ncontrols 數 據 都 各 自 進 行 sum() 操 作 練 習 題 : (1) 建 立 一 個 5x5 的 矩 陣 A, 其 內 容 資 料 如 下 50.21 15.44 39.09 24.04 60.52 33.64 6.19 10.00 52.08 53.52 64.36 9.69 64.39 34.52 68.66 32.18 92.63 58.31 35.24 54.39 84.76 8.19 24.28 4.94 45.63 (2) 以 ggplot2 套 件 提 供 的 內 建 資 料 集 diamonds( 鑽 石 ) 為 範 例 分 析 1. 下 載 及 安 裝 ggplot2 套 件 > install.packages("ggplot2") # 下 載 ggplot2 套 件 > library("ggplot2") # 安 裝 ggplot2 套 件
> data(diamonds) # 載 入 diamonds 資 料 集, 可 得 到 diamonds 資 料 框 > View(diamonds) # 查 看 資 料 > str(diamonds) # 查 看 資 料 結 構 2. 試 用 table() 及 aggregate() 分 析 diamonds 資 料
主 單 元 : R_quantmod quantmod 便 是 應 用 在 財 務 方 面 的 R 語 言 套 件 quantmod 套 件 提 供 許 多 功 能 讓 使 用 者 能 夠 有 效 率 且 方 便 的 蒐 集 金 融 數 據 繪 畫 歷 史 股 價 計 算 報 酬 率, 進 而 從 這 些 數 據 中 分 析 出 可 能 的 價 格 趨 勢 風 險 估 測 投 資 組 合 及 其 他 財 務 應 用 下 載 及 安 裝 quantmod 套 件 > install.packages("quantmod") # 下 載 quantmod 套 件 > library("quantmod") # 安 裝 quantmod 套 件 package quantmod was built under R version 3.1.3 (1) 透 過 網 路, 由 yahoo finance 取 得 股 票 交 易 數 據 下 載 金 融 數 據 的 指 令 以 getsymbols() 為 主, 以 下 有 兩 種 使 用 方 法 方 法 1 > getsymbols("2330.tw") # 取 得 台 積 電 股 票 數 據,TW 代 表 台 股 > `2330.TW` # 檢 視 資 料 提 醒 :` 必 須 是 鍵 盤 上 tab 按 鍵 上 方 ` 的 符 號 方 法 2 > tw2330 <- getsymbols("2330.tw",auto.assign=false) # 若 要 將 台 積 電 股 票 數 據 儲 存 在 變 數 tw2330 上, 需 要 加 auto.assign=false # 這 段 指 令 才 能 成 功 儲 存 在 變 數 tw2330 上 > View(tw2330) # 檢 視 資 料 註 : 1. getsymbols() 下 載 金 融 數 據 後, 儲 存 於 xts 格 式 的 物 件,xts 常 用 於 時 間 序 列 資 料 2. xts 格 式 的 物 件 可 轉 為 data.frame 格 式 > tw2330.df<-as.data.frame(tw2330)
.. 註 : 股 票 的 代 碼 可 以 從 雅 虎 股 市 https://tw.stock.yahoo.com/h/getclass.php 查 詢 (2) 儲 存 / 讀 取 檔 案 數 據 每 次 重 新 啟 動 R 軟 體, 其 工 作 區 內 資 料 會 被 清 除 因 此 最 好 將 目 前 的 數 據 儲 存 於 檔 案 中 儲 存 下 載 的 股 票 數 據 的 指 令 如 下 : > savesymbols(file.path = " 選 擇 存 放 的 檔 案 路 徑 ") # 將 下 載 的 股 票 數 據 建 檔 儲 存, 檔 案 形 式 為 Rdata 如 果 要 讀 取 在 電 腦 本 機 端 的 數 據, 讀 取 檔 案 的 步 驟 如 下 : > setwd(" 工 作 目 錄 ") # 設 定 工 作 目 錄 為 檔 案 所 在 ( 若 已 經 在 檔 案 目 錄, 此 步 驟 省 略 ) > load("2330.tw.rdata") # 讀 取 2330 這 支 股 票 數 據 的 R 檔 案 如 果 要 刪 除 不 需 要 的 股 票 數 據 與 下 載 紀 錄, 可 以 輸 入 以 下 的 指 令 > removesymbols("2330.tw") # 指 定 刪 除 2330( 台 積 電 ) 這 支 股 票 數 據 與 下 載 紀 錄 > removesymbols() # 刪 除 全 部 股 票 數 據 與 下 載 紀 錄 讀 取 本 地 端 檔 案 (csv 檔 案 R 檔 案 ) 的 方 法 假 設 工 作 目 錄 下 已 有 MSFT 的 csv 檔 案 > getsymbols.csv('msft',env=globalenv()) 另 外, 從 getsymbols 取 得 的 股 票 數 據 儲 存 成 csv 檔 案 到 電 腦 本 機 端 的 方 法 如 下 : > write.zoo(`2330.tw`,"2330.tw.csv",sep = ",",qmethod = "double") 註 : 如 果 是 用 > write.csv(`2330.tw`,"2330.tw.csv") 的 方 法 儲 存 成 csv 檔 案, 那 麼 檔 案 中 將 會 遺 漏 日 期 (3) 檢 視 數 據 及 計 算 交 易 報 酬 率 從 getsymbols 取 得 的 物 件 其 行 名 稱 一 般 是 下 列 名 稱 :Open( 當 日 開 盤 價 ) High( 當 日 最 高 價 ) Low ( 當 日 最 低 價 ) Close ( 當 日 收 盤 價 ) Volume ( 成 交 量 ) 以 及 Adjust ( 調 整 後 股 價 ) 簡 稱 為 : 開 高 低 收 (OHLC)
> head(`2330.tw`) # 檢 視 2330 這 支 股 票 的 最 前 面 6 筆 資 料 > tail(cl(`2330.tw`)) # 檢 視 2330 這 支 股 票 收 盤 價 的 最 後 6 筆 資 料 給 定 起 始 日 期 與 結 尾 日 期, 再 依 報 酬 型 態 ( 日 報 酬 週 報 酬 月 報 酬 季 報 酬 年 報 酬 ) 計 算 報 酬 率, 日 報 酬 : 當 日 收 盤 價 昨 日 收 盤 價 昨 日 收 盤 價 相 關 指 令 如 下 : dailyreturn weeklyreturn monthlyreturn quarterlyreturn yearlyreturn 範 例 : > re.2330=monthlyreturn(`2330.tw`) # 計 算 2330.TW 股 票 月 報 酬 > head(re.2330) # 顯 示 月 報 酬 的 前 6 筆 資 料 > plot(re.2330) # plot() 畫 時 間 序 列 圖, 觀 察 各 時 期 的 月 報 酬 率 變 化 > hist(re.2330) # hist() 畫 出 報 酬 率 分 布 的 直 方 圖, 觀 察 報 酬 率 分 布 (4) 技 術 分 析 圖 型 畫 圖 工 具 可 以 提 供 各 式 財 務 常 用 圖 形 如 :candles matches bars 和 lines 附 加 提 供 基 本 函 數 用 來 技 術 分 析 > chartseries(`2330.tw`,subset='2007::2008-01',theme="white",name=" 台 積 電 ") # subset='2007::2008-01 股 價 走 勢 圖 的 時 間 起 始 點 設 定 在 2007 年 ~2008-01 年 # theme="white" 股 價 走 勢 圖 的 背 景 設 定 為 白 色 # name=" 台 積 電 " 股 價 走 勢 圖 的 標 頭 名 稱 設 定 為 台 積 電 畫 出 股 價 走 勢 圖 後, 可 以 再 加 上 技 術 指 標 作 為 投 資 的 參 考, 例 如 常 用 的 MACD 技 術 指 標 (Moving Average Convergence/Divergence, 指 數 平 滑 異 同 移 動 平 均 線 ) 與 RSI 技 術 指 標 (Relative Strength Index, 相 對 強 弱 指 數 ), 也 可 以 加 上 移 動 平 均 線 (Moving Average)
相 關 指 令 如 下 :addmacd addrsi addsma addta 指 令 範 例 : > chartseries(`2330.tw`, subset='2007::2008-01',theme="white",name=" 台 積 電 ") > addmacd() > addrsi() > addsma(n = 5, col = "red") > addsma(n = 20, col = "blue") # 附 加 上 台 積 電 的 5 日 均 線 與 20 日 均 線,5 日 均 線 以 紅 線 表 示,20 日 均 線 以 藍 線 表 示 --------------------------------------------------------------------- 注 意 : 必 須 先 chartseries() 畫 出 一 張 股 價 圖, 才 能 加 上 其 他 技 術 指 標 -------------------------------------------------------------------- 練 習 題 : (1) 透 過 網 路, 由 yahoo finance 取 得 某 上 市 公 司 股 票 交 易 數 據 (2) 計 算 此 上 市 公 司 股 票 投 資 月 報 酬 率 並 以 plot 及 hist 畫 圖 (3) 畫 出 此 上 市 公 司 股 價 走 勢 圖, 的 時 間 起 始 點 設 定 在 2008 年 ~2015 年, 並 加 上 20 日 均 線 與 250 日 均 線
主 單 元 : R_shiny 互 動 式 網 頁 內 容 : 1. 介 紹 shiny 2. 將 quantmod 單 元 之 結 果, 以 shiny 製 作 互 動 式 網 頁 呈 現 library(shiny) library("quantmod") server<-function(input, output) { datastock <- reactive({ }) getsymbols(input$stock,auto.assign = FALSE) output$chart <- renderplot({ timeup<<-as.character(input$time[1]) timedown<<-as.character(input$time[2]) time <-paste0(timeup,"::",timedown) chartseries(datastock()[time],theme="white") c( if(input$d5){addsma(n=5,col="red")}, if(input$d20){addsma(n=20,col="green")}, if(input$d240){addsma(n=240,col="purple")} ) } }) ui<-fluidpage( titlepanel("stock input"), sidebarlayout( sidebarpanel( textinput("stock", label = h3("stock Symbol"), value = "2330.TW"), daterangeinput("time",start = "2008-01-01",end ="2012-06-01", label = h3("time")), fluidrow( column(4,checkboxinput("d5", label = "5D", value = TRUE)), column(4,checkboxinput("d20", label = "20D", value = TRUE)), column(4,checkboxinput("d240", label = "240D", value = TRUE)) )
), mainpanel( plotoutput("chart") ) ) ) shinyapp(ui=ui,server=server) 有 關 R 的 參 考 資 訊 1. R-project 官 方 網 站 :http://www.r-project.org/ 官 方 網 站 提 供 相 當 多 參 考 文 件 套 件 的 說 明 及 下 載 2. R-Wiki:http://wiki.r-project.org/rwiki/doku.php 可 以 針 對 R 中 不 同 的 套 件 有 相 似 的 統 計 分 析 或 指 令 有 系 統 的 整 理 3. R-forge:http://r-forge.r-project.org/ 提 供 R 中 心 平 台 套 件 R 相 關 軟 體 及 後 續 計 畫 的 發 展 訓 息 4. The R Journal:http://journal.r-project.org/ 最 近 才 成 立 的 R 雜 誌, 提 供 R 相 關 的 報 導 及 研 究 5. Simple R( 中 文 網 站 ):http://blog.xuite.net/yearend/r 入 門 者 可 多 參 考, 淺 顯 易 懂! 6. Learn R:http://www.fort.usgs.gov/BRDScience/LearnR.htm 提 供 完 整 的 R 教 學 7. Statistics with R:http://zoonek2.free.fr/UNIX/48_R/all.html 提 供 完 整 統 計 相 關 主 題 及 許 多 R 程 式 範 例 8. Shiny by RStuio: http://shiny.rstudio.com/ 提 供 完 整 shiny 相 關 主 題 及 許 多 shiny 程 式 範 例
附 錄 一 : R 與 RStudio 安 裝 及 使 用 簡 介 依 下 列 說 明, 先 下 載 及 安 裝 R, 再 下 載 及 安 裝 RStudio 1. R 下 載 及 安 裝 : http://www.cc.ntu.edu.tw/chinese/epaper/0030/20140920_3006.html 2. RStudio 下 載 安 裝 如 下 下 載 RStudio dowload for Desktop (free of charge)https://www.rstudio.com/products/rstudio/download/ 下 一 步. 下 一 步. 完 成 R 與 RSstudio 安 裝 完 成 後 可 在 應 用 程 式 檔 案 系 統 中 看 到
1. 點 選 Rstudio 圖 形, 即 可 啟 動 RStudio 若 欲 安 裝 套 件, 範 例 如 下 1. 載 入 (install) shiny 套 件 (Packages) (Install) 2. 執 行 套 件 shiny, 在 方 框 中 直 接 打 勾
練 習 題 參 考 答 案 : Exercise 1-1: 利 用 for 如 何 計 算 Fibanacci 數 列 第 6 個 數 字 : Ans: a=1 b=1 for (i in 3:6){ c=a+b a=b b=c } c Exercise 1-2: 寫 一 functiond 輸 入 整 數 n, 當 n<10 時 可 計 算 Fibanacci 數 列 第 n 個 數 字 為 輸 出 值 當 n>=10 時 輸 出 值 為 -1 Ans: fiba<-function(n){ a=1 b=1 if (n<10){ for (i in 3:n){ c=a+b a=b b=c } return(c)
} else { return(-1) } } Exercise 2-1: 建 立 一 個 5x5 的 矩 陣 A, 其 內 容 資 料 如 下 50.21 15.44 39.09 24.04 60.52 33.64 6.19 10.00 52.08 53.52 64.36 9.69 64.39 34.52 68.66 32.18 92.63 58.31 35.24 54.39 84.76 8.19 24.28 4.94 45.63 Exercise 2-2: 以 ggplot2 套 件 提 供 的 內 建 資 料 集 diamonds( 鑽 石 ) 為 範 例 分 析 Exercise 3-1: 透 過 網 路, 由 yahoo finance 取 得 某 上 市 公 司 股 票 交 易 數 據 Exercise 3-2: 計 算 此 上 市 公 司 股 票 投 資 月 報 酬 率 並 以 plot 及 hist 畫 圖 Exercise 3-3: 畫 出 此 上 市 公 司 股 價 走 勢 圖, 的 時 間 起 始 點 設 定 在 2008 年 ~2015 年, 並 加 上 20 日 均 線 與 250 日 均 線