2017年6月20日 星期二

r ? <- $ () [] {} [[ @ :: 常用特殊運算子 (operators)

本篇文章說明使用R時, 會有不同特殊運算子需求, 以下說明使用方式.

?問號

?符號功能是查詢線上說明, 例: ?plot, 其功能與 help(plot) 相同, 當然使用 ?'plot'?"plot"結果皆相同. 例: ?'+' 可查詢算數運算功能.


<-運算子

<-為指派運算子, 將右邊的運算結果指派至左邊物件, 強烈建議指派運算子不要使用等號(=), 以免與函數中的參數相混淆.

> lotto <- sample(49,6)
> lotto
[1] 16  1 49 46 43  7

$符號

$符號用於取出物件內容,亦可用於串列資料的讀取.

# 取出iris資料集的Species欄位資料, 其結果為向量
iris$Species

()小括號

()符號大概是接觸R最常使用符號, 其使用時機為函數名稱

readLines(system.file("DESCRIPTION")) , summary(iris), plot(iris), 如果在小括號前加上資料物件名稱, 此時會有錯誤產生.

[]中括號

[]中括號用於將資料進行條件篩選的指標(indexing), 例: 一維或二維資料物件取出部份符合條件資料.

# Species為setosa的Sepal.Length資料
iris$Sepal.Length[iris$Species == "setosa"]

# 符合Sepal.Length大於5且Sepal.Width大於4的所有資料
iris[iris$Sepal.Length >5 & iris$Sepal.Width > 4,]

二維資料如matrix, data.frame 使用[列, 行] 方式取出資料或是取出直行欄位資料.
# 讀取iris第1至4欄資料
iris[1:4]

{}大括號

{}大括號用於標註套件名稱程式區塊.

?plot 會顯示 plot {graphics}表示 plot 函數隸屬於graphics套件.

# 程式區塊
> for (i in 1:10) {
+   if (i %% 2 == 0) {
+     print(paste0(i, "是偶數"))
+   } else {
+     print(paste0(i, "是奇數"))
+   }
+ }
[1] "1是奇數"
[1] "2是偶數"
[1] "3是奇數"
[1] "4是偶數"
[1] "5是奇數"
[1] "6是偶數"
[1] "7是奇數"
[1] "8是偶數"
[1] "9是奇數"
[1] "10是偶數"

[[ 二個左中括號

如果資料物件有顯示此符號, 一般為串列(list).
> list("RWEPA", c("R", "Python", "Julia"))
[[1]]
[1] "RWEPA"

[[2]]
[1] "R"      "Python" "Julia"

> mylist <- list(web="RWEPA", programming=c("R", "Python", "Julia"))
> mylist$programming
[1] "R"      "Python" "Julia"
> mylist[[2]]
[1] "R"      "Python" "Julia"

@運算子

@符號用於取出S4物件內容(Slot). 目前已套件支援S4物件型態, 例: kernlab 套件. S4資料物件存取須使用@運算子. 
參考: ?'@' 線上說明
參考: http://adv-r.had.co.nz/S4.html


::運算子 (Double Colon)

::運算子一般用於指定套件的函數, 如果不同套件,確有相同函數名稱,此時使用
套件名稱::函數名稱

# 本例僅作為::的說明使用, 不加上::運算子亦可執行
graphics::plot(as.ts(iris[-5]), main="")


程式碼

# ?問號
?plot
help(plot)
?'plot'
?"plot"
?'+'

# <-運算子
# 隨機選取1~49的6個數值
lotto <- sample(49,6)
lotto

# $符號
# 取出iris資料集的Species欄位資料, 其結果為向量
iris$Species

# () 小括號
readLines(system.file("DESCRIPTION"))
summary(iris)
plot(faithful)

# []中括號
# Species為setosa的Sepal.Length資料
iris$Sepal.Length[iris$Species == "setosa"]

# 符合Sepal.Length大於5且Sepal.Width大於4的所有資料
iris[iris$Sepal.Length >5 & iris$Sepal.Width > 4,]

# 讀取iris第1至4欄資料
iris[1:4]

# {}大括號
# 套件名稱
# plot {graphics}

# 程式區塊
for (i in 1:10) {
  if (i %% 2 == 0) {
    print(paste0(i, "是偶數"))
  } else {
    print(paste0(i, "是奇數"))
  }
}

# [[ 串列
list("RWEPA", c("R", "Python", "Julia"))
mylist <- list(web="RWEPA", programming=c("R", "Python", "Julia"))
mylist$programming
mylist[[2]]

2017年6月19日 星期一

r quantmod 套件下載財金資料與錯誤解決方法-Errors Downloading Stock Price Data from Yahoo Finance

本篇文章說明 quantmod 套件的使用方法與遭遇錯誤 "Errors Downloading Stock Price Data from Yahoo Finance" 的解決方法.

安裝 quantmod 套件

install.packages("quantmod")
library(quantmod)

下載財金資料 - Input

使用 getSymbols 函數以下載財金資料, 該函數預設的資料來源是 yahoo finance, 使用 from 參數可設定開始日期, 同理to參數可設定結束日期, 本例使from參數

getSymbols("IBM", from="2010-1-1")

理解財金資料 - Process


  • 使用 class 函數可知回傳物件是xts物件與zoo物件, 其中 xts 物件延伸來自於 zoo物件(注意: zoo不是動物園物件 ^_^). 
  • 使用 str 函數, 可知資料有1877列, 6欄資料. 
  • summary函數結果顯示 Index 屬性 為年月日資料
  • head 結果是從2010年1月4日開始, tail 結果表示資料至2017年6月16日結束.
  • 使用?periodReturn 可查詢計算報酬率的使用, 包括週,日,月,季的報酬率.


























繪製結果 - Output

  • plot 函數即可繪製資料圖形, 預設是以 Close 欄位為主
  • plot(IBM, major.ticks='years') , major.ticks 參數可顯示主要縱軸刻度位置, 本例為年, 此時圖形會較簡潔.
  • chartSeries(IBM) 提供收盤價(Close)與成交量(Volume)股票圖.

台股範例

台股使用的符號是 ^TWII, 如果有 NA, 可配合na.omit 將該NA資料刪除.
getSymbols("^TWII", from="2010-1-1") 

程式碼

# 安裝 quantmod 套件
install.packages("quantmod")
library(quantmod)

# 下載財金資料
getSymbols("IBM", from="2010-1-1")

# 理解財金資料
class(IBM)
str(IBM)
summary(IBM)

head(IBM)
tail(IBM)

# ?periodReturn
allReturns(IBM)
periodReturn(IBM, period='monthly',subset='2013::')  # 回傳自2013年至目前報酬率
periodReturn(IBM, period='yearly',subset='2013')     # 回自2013年報酬率
monthlyReturn(IBM, subset='2013::')
yearlyReturn(IBM, subset='2013::')

# 繪製結果
plot(IBM)
plot(IBM, major.ticks='years')
chartSeries(IBM)

# 台股範例,讀取資料-台灣加權指數 TWII (TSEC weighted index)
getSymbols("^TWII", from="2010-1-1")
dim(TWII)
summary(TWII)
chartSeries(TWII)



!!!Errors Downloading Stock Price Data from Yahoo Finance


在使用 quantmod 套件時, 如果資料下載顯示有錯誤, 參考以下步驟設定, 如果一般安裝與下載皆正常, 則不用使用此方法.

步驟1: 下載 Rtools 程式, 本程式具有建立套件等輔助工具
連結 http://cran.csie.ntu.edu.tw/bin/windows/Rtools/ , 選取 Rtools Downloads 下載.

步驟2: 安裝 Rtools 程式, 使用預設安裝選項,不可更改安裝路徑, 安裝完成後的目錄為 C:\Rtools

步驟3: 在 RStudio 程式中安裝 devtools 套件, 輸入 install.packages("devtools")

步驟4: 在 RStudio 程式中輸入以下R程式即可完成 quantmod 安裝.

devtools::install_github("joshuaulrich/quantmod", ref="157_yahoo_502")

# 參考: https://robotwealth.com/solved-errors-downloading-stock-price-data-yahoo-finance/
# end