Presentation is loading. Please wait.

Presentation is loading. Please wait.

R財務分析與互動式介面 教學實務經驗分享 明新科技大學教師社群 田慧君 于昌永 靜宜大學財務與計算數學系 2017.05.10.

Similar presentations


Presentation on theme: "R財務分析與互動式介面 教學實務經驗分享 明新科技大學教師社群 田慧君 于昌永 靜宜大學財務與計算數學系 2017.05.10."— Presentation transcript:

1 R財務分析與互動式介面 教學實務經驗分享 明新科技大學教師社群 田慧君 于昌永 靜宜大學財務與計算數學系

2 Financial data Analysis System
靜宜大學 財務與計算數學系

3 WHY R? 1.隨著巨量資料分析發展,使用R語言將成為重要的基本能力。 2.REXER ANALYTICS調查顯示,R為資料分析師使用比例最高的工具。 3.GOOGLE、輝瑞藥廠、美國銀行、洲際酒店集團、殼牌石油皆等使用R。 4.ORACLE、MICROSOFT與IBM將R做為其產品中的主要資料分析工具。 R軟體的特色 免費的自由軟體、開放源碼且應用廣泛 有效的資料處理及存取能力 (可與C, C++和Fortran等程式連結) 方便的矩陣操作與運算能力 完整而連貫的資料分析能力(有大量套件程式可用) 強大的視覺化工具(繪圖功能) 跨平臺,可在Windows、UNIX和MacOS執行

4 R 與 財務金融 完整的財金功能套件 多樣方便的財務資料取得方式 容易上手的財務資料分析方式 不斷推陳出新的財金與各式各樣套件
R for trading strategy develop and testing algorithm trading R for finance time series data analysis

5 R--財務金融相關套件 Quantmod 、 Quantstrat 、 PortfolioAnalytics 、 PerformanceAnalytics…..

6 R 與 Rstudio 安裝及使用簡介 R下載安裝: download R之後 執行R-XXX-win.exe
RStudio下載安裝: download R之後 執行RStudio-XXX.exe

7 2. 安裝與執行套件範例: 若要安裝shiny套件 PackagesInstall shiny 若要執行shiny,在右邊shiny對應的方框中直接打勾 1. R 與 RSstudio安裝完成後, 可在應用程式檔案系統 Rstudio圖形 點選 ,即可啟動RStudio

8 整合式開發環境 RStudio Rstudio是個好用的IDE 革新套件讓R在三方面有開創性改變 網頁伺服器RStudio server
編輯程式區 執行程式 及 執行指令 記憶體內物件、變數 File:檔案清單 Plot:繪圖 Packages:套件清單 Help:套件與指令輔助說明 Rstudio是個好用的IDE 革新套件讓R在三方面有開創性改變 網頁伺服器RStudio server 互動式網頁Shiny 互動式文件Rmarkdown 資料整理工具dplyr tidyr 繪圖介面ggplot2 ggvis

9 R與財務資料分析--教材範例 範例: 2016.07 夏日大學教材 小單元 主題 Time R_fundamental I_1
R introduction與數據型態 15 min + 10 min R_fundamental I_2 基本運算與if、for、function R_fundamental II_1 資料結構 R_fundamental II_2 資料處理初步與結果顯示 R_quantmod 財務套件使用 R_shiny 互動式網頁

10 主單元: R_fundamental I 變數及資料型態: 將資料儲存於變數物件內,方便重複使用及分析
1.資料常用型態:numeric數值、integer整數、char字串、factor因數、Boolean邏輯 2.變數物件命名: 變數名稱只能以字母或.開頭 變數名稱大小寫是不同的 3.指派(儲存)資料給變數:使用<-或= > b=factor("male") # factor因子 > a [1] "male" > b [1] male Levels: male # factor呈報資料時,無"" > x< # numeric數值 > a<-"male" # char字串

11 主單元: R_fundamental I 常用運算: 算數操作、邏輯操作、if(條件式)、for迴圈 #for迴圈 x=0 #算數操作
for( k in 1:3){ x=x+k } #重複規律由k決定,而k是{1,2,3} #得到 x=0 x=x+1 x=x+2 x=x+3 #算數操作 > #加法 > 10 * a #乘法 > x/20 #除法 邏輯操作 與 關係比較 == Equal to < Less than > Greater than & Logical AND | Logical OR ! Logical NOT > 10>=9 [1] TRUE #if(條件式) {執行程式指令…} #只有條件式為真(TRUE)才會執行 #例子:袋子裡原本有四元,如果不足十元 # (小於十元)再加入五元,結果是9元 x=4 if(x < 10) { x = x + 5 }

12 主單元:R_fundamental II 內容: 1.儲存『複雜資料』常用結構 2.處理及初步觀察資料時常用指令 3.資料缺失值檢查與處理 4.處理資料後初步結果顯示

13 主單元: R_fundamental II 儲存『複雜資料』常用結構: vector: 同類型資料 matrix: 同類型資料, 同長度
data.frame: 不同類型資料, 同長度 list : 不同類型資料, 不同長度 特殊結構: 不同R套件,設計特定儲存資料結構如:zoo、xts(常用於財務交易數據) 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] matrix矩陣:將多個同類型向量資料,存在矩陣內 > a=matrix(x,nrow=3,ncol=3) #產生矩陣變數 > a [,1] [,2] [,3] [1,] [2,] [3,]

14 處理資料最常用的結構,將多組長度一致的向量(欄) (不同向量內的資料類型可不同)存在data.frame內
與Matrix最大不同在於允許不同column有相異型別 以R提供的內建資料集為範例 > data() #查看有那些內建資料集 > data(esoph) #載入esoph資料集-- esophagealcancer(食道癌) #載入後,產生esoph的data.frame物件 > str(esoph) #查看esoph資料集的結構 > View(esoph) # V大寫,將esoph資料集內容顯示于編輯區

15 主單元: R_fundamental II #在help中,輸入esoph查看此資料集詳細說明
# A data frame with records for 88 age/alcohol/tobacco combinations(法國) #共5個欄位,88筆資料 agegp年齡(Age group): factor 6個level : year salcgp 酒精(Alcohol consumption): factor 4個level: —79 80— gm/day Tobgp抽煙(Tobacco consumption): factor 4個level: gm/day Ncases癌症人數(Number of cases): numeric ncontrols未罹癌人數(Number of control):numeric #可發現此5個欄位中,有4種資料,前3個欄位雖然皆是factor, #但其level構造不同,屬於不同資料。後2個欄位皆為numeric。

16 主單元: R_fundamental II 處理及初步觀察資料時常用指令: boolean取值、max、sum、mean、sd
> x=c(-4,5,10,-1,6,2,33,44,55) #產生向量變數 > x[x>3] # boolean取值,取得所有大於3的元素 > max(x) #選取x中最大元素 > min(x) #選取x中最小元素 > sum(x) # x中所有元素作和 > mean(x) # x中所有元素之平均值 > sd(x) # x元素之標準差 資料缺失值檢查與處理: 缺失值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)(去除相關行column) > sum(y) #去除NA後,再套用函數 [1] 3 > which(is.na(x)) #檢查NA在那裡 [1] 1 注意: 1.雖然NA是空值,但也有其代表意義,例如:溫度記錄temp=c(36.5,36.2, 37, NA, 37) 2.許多財務資料中都會有NA值,務必以is.na()、which(is.na())先檢查,並進行適當處理,如na.omit()

17 主單元: R_fundamental II 處理資料後初步結果顯示: summary、fivenum、table、hist、plot
> x= x=c(-4,5,10,-1,6,2,33,44,55) # 產生數值向量變數 > summary(x) # 依資料型態 回傳x的大致資訊 Min. 1st Qu. Median Mean 3rd Qu. Max. > fivenum(x) #用於數值資料 minimum, lower-hinge, median, upper-hinge, maximum [1] hist():畫出數值分佈的長條圖,提供觀察依據 plot():依資料型態畫圖提供觀察依據 > hist(table(esoph$agegp))

18 data.frame數據框基本分析 $ : 取欄位(column)
table():將factor數據依level進行分群,然後對每一群資料資料筆數進行統計, 結果組合成一個比較表格返回 aggregate() :群集函數,將按指定栏位的factor資料進行分群, 然後對每一群資料的某特定欄位資料套用指定函數, 最後把結果組合成一個比較表格返回 以R提供的內建資料集為分析範例 > data() #查看有那些內建資料集 > data(esoph) #載入esoph資料集-- esophageal cancer(食道癌)載入後,產生data.frame物件 > head(esoph) #查看esoph內前6筆資料,對資料內容有概念 > which(is.na(esoph)) #查看esoph內是否有NA值 integer(0) #查無NA值

19 data.frame数据框基本分析 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也頗均勻

20 data.frame數據框基本分析 cbind(ncases,ncontrols) ~ alcgp
> aggregate(cbind(ncases,ncontrols)~ alcgp,esoph,sum) cbind(ncases,ncontrols) ~ alcgp 表示使用 alcgp 的factor,分成多個資料群, 對ncases、 ncontrols 數據都各自進行sum()操作 結果分析: 1. 酒精消耗量,得到有/無食道癌人數 2. 酒精消耗量愈大的群體, 得食道癌比例明顯愈高 可進一步以統計檢定 Note:由此看出 前一頁中僅以人數觀察容易誤導, 應該看比例較正確 人數:75人 比例:75/355 (21%) 人數:45人 比例:45/67 (67%)

21 主單元:quantmod套件與財務資料分析
quantmod是應用在財務方面的R語言套件。 quantmod套件提供許多功能:搜集金融資料、繪畫歷史股價、計算報酬率 資料分析:價格趨勢、風險估測、投資組合及其他財務應用 下載及安裝 quantmod套件 > install.packages("quantmod") # 下載quantmod套件 > library("quantmod") # 安裝quantmod套件 透過網路,由yahoo finance 取得股票交易數據 > tw2330 <- getSymbols("2330.TW",auto.assign=FALSE) # 若要將台積電股票資料儲存在變數tw2330上,需要加auto.assign=FALSE #這段指令才能成功儲存在變數tw2330上。

22 主單元:quantmod套件與財務資料分析
1. getSymbols()下載金融數據後,儲存於xts格式的物件,xts常用於時間序列資料 2. xts格式的物件可轉為data.frame格式 > tw2330.DF<-as.data.frame(tw2330) 檢視數據 > View(tw2330) #檢視資料 開高低收 (OHLC) Open(當日開盤價)、High (當日最高價) Low (當日最低價)、Close (當日收盤價) Volume (成交量) 、Adjust (調整後股價) 靜宜大學 財務與計算數學系

23 主單元:quantmod套件與財務資料分析
計算交易報酬率 相關指令如下: dailyReturn、weeklyReturn、monthlyReturn、quarterlyReturn、yearlyReturn > re.2330=monthlyReturn(`2330.TW`) #計算2330.TW股票月報酬 > head(re.2330) #顯示月報酬的前6筆資料 > plot(re.2330) # plot()畫時間序列圖,觀察各時期的月報酬率變化 > hist(re.2330) # hist()畫出報酬率分佈的長條圖,觀察報酬率分佈 结果分析: 1.2008~2009年,金融海嘯期間,月報酬率波動幅度較大 2.長條圖顯示,正報酬機率較高 需進一步以統計檢定

24 主單元:quantmod套件與財務資料分析
技術分析圖型 財務常用圖形:candles、matches、bars和lines。 技術分析基本函數: addMACD()、addRSI()、addSMA()、addTA() > chartSeries(`2330.TW`,subset='2007:: ',theme="white",name="台積電") # subset='2007:: ’股價走勢圖的時間起始點設定在2007年~ 年 # theme="white"股價走勢圖的背景設定為白色 # name="台積電"股價走勢圖的標頭名稱設定為台積電 畫出股價走勢圖後,可以再加上技術指標 > addMACD() > addRSI() > addSMA(n = 5, col = "red") > addSMA(n = 20, col = "blue") 1.5日均線向下穿越20日均線-->轉弱賣出訊號 2.RSI < 30 -->買進訊號

25 主單元:quantmod套件與財務資料分析
自行操作及練習 Exercise 3-1: 1.透過網路,由yahoo finance取得某上市公司股票交易資料 2.計算此上市公司股票投資月報酬率並以plot及hist畫圖 Exercise 3-2: 畫出此上市公司股價走勢圖,的時間起始點設定在2008年~2015年, 並加上20日均線與250日均線

26 主單元: shiny互動式網頁 1.shiny是一個可製作互動式網頁的R套件,在Rstudio上執行,由Rstudio擔任網頁伺服器
2.製作互動式網頁程式由2個函數負責:ui與server library(shiny) library("quantmod") ui負責網頁畫面 版面、輸入、輸出 ui<-fluidPage( titlePanel("stock input"), sidebarLayout( sidebarPanel( textInput("stock", label = h3("Stock Symbol"), value = "2330.TW"), dateRangeInput("time",start = " ",end =" ", 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") 輸入參數 stock time D5 D20 D240 送到server抓數據、畫圖,再將圖chart送回來由ui的plotOutput()呈現在網頁上 輸出網頁畫面

27 主單元: shiny互動式網頁 shiny製作互動式網頁由2個函數負責:ui與server
stock、time D5、D20、D240 由input物件携带至server函数 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")} ) } 用getSymbol() 依input$stock參數抓資料 server由output$chart 將圖送回ui 依input$time參數確定資料日期區間 畫chartSeries圖 依參數input$D5 input$D input$D240 決定是否加上移動平均線 送到server抓數據、畫圖,再將圖chart送回來由plotOutput()呈現在網頁上 server負責~~所有的運算、資料處理與畫圖~~(後臺) ui負責~~頁面呈現與參數接收~~ (前臺)

28 學習R的障礙與重點 1.資料類型與結構很複雜 使用R提供的功能前,
一定要確認此功能要求的是何種物件: factor 、char、…data.frame、xts…. R裡面為此需求,有很多as.XXX函數可呼叫 例: 檢查: is.factor()、is.character()、is.data.frame()、is.xts()… 轉換:as.factor()、as.character()、as.data.frame()、as.xts()… 2.R有超過6000個package  使用package各式各樣功能前, 最好download提供的documentation R-project官方網站: 3. 遇到的問題  google別人的程式或到官網及論壇發問 4.要持之以恆,經常 寫/測試/用R解決問題

29 謝謝聆聽 歡迎指教


Download ppt "R財務分析與互動式介面 教學實務經驗分享 明新科技大學教師社群 田慧君 于昌永 靜宜大學財務與計算數學系 2017.05.10."

Similar presentations


Ads by Google