投資信託「eMAXIS」のデータを分析する−1(データ取得関数作成編)

eMAXIS」という手数料の安い素晴らしいインデックスファンドを三菱UFJ投信さんが出しておられてて、サイトをよくみると今までの基準価額がcsvで取得できるようになっているではないか!…ということでそれを自動的に引っ張ってきてRのデータに倒す関数書いた。ついでに最近の地震の影響が金融市場にどの程度影響を与えているのかも見てみる。現時点(2011/4/7)では

という合計10投資信託のデータが取得可能。まずデータ取得の関数は↓のような感じ。ありったけのデータを引っ張って来るようになってます。各投資信託の取得可能なデータ項目はコードの中にも書いてあるように

  • 基準価額 :
  • 基準価額(分配金再投資)
  • 分配金(税引前)
  • 純資産(億円)

の4つ。

GeteMAXIS <- function(){
  #各資産の列名(英語),順に以下のものの略
  #基準日:Date
  #基準価額 : Constant value
  #基準価額(分配金再投資):Gross Constant value
  #分配金(税引前):Profit distribution
  #純資産(億円):Net Asset Value
  COL.NAMES <- c("DATE", "CV", "GCV", "PD", "NAV")
  #データの取得
  url.data <- "http://maxis.muam.jp/e/fund/download/"
  eMAXIS <- read.table(url.data, sep=",", stringsAsFactor = FALSE)
  #全資産クラス数(1行目に文字が入ってる数だけ資産クラスが存在しているとして処理)
  num.assets <- sum(eMAXIS[1,] != "")
  #各資産ごとにデータをlistで区切る。
  size <- ncol(eMAXIS) / num.assets
  eMAXIS <- lapply(1:num.assets, function(i){
      x <- eMAXIS[, (size*(i - 1) + 1) : (size*(i - 1) + size)]
      colnames(x) <- COL.NAMES	
      return(x)
    })
  #リストの要素をファンド名に
  names(eMAXIS) <- sapply(eMAXIS, function(x)x[1,1])
  #型変換、データあるとこだけ抽出
  eMAXIS <- lapply(eMAXIS, function(x){
      warn.old <- getOption("warn")
      options(warn = -1)
      x$CV   <- as.numeric(x$CV)
      options(warn = warn.old)
      x      <- na.omit(x)
      x$GCV  <- as.numeric(x$GCV)
      x$PD   <- as.numeric(x$PD)
      x$NAV  <- as.numeric(x$NAV)
      x$DATE <- as.Date(x$DATE)
      return(x)
    })
  return(eMAXIS)
}


この関数で取得したデータを日付で揃えてパフォーマンスグラフ*1にしてみると・・・

な感じで311の地震がとても大きな影響を与えているのがわかる。このグラフを作る時に使ったスクリプト

#データ取得&基準価額のデータへつのデータフレームへ
eMAXIS <- GeteMAXIS()
gcv <- lapply(eMAXIS, function(x)x[, c("DATE","GCV")])
gcv <- Reduce(function(x,y)merge(x,y,by="DATE"), gcv)
rownames(gcv) <- gcv$DATE
gcv <- gcv[, -1]
colnames(gcv) <- names(eMAXIS)
#チャート表示
library(PerformanceAnalytics)
charts.PerformanceSummary(CalculateReturns(gcv))

続き:投資信託「eMAXIS」のデータを分析する−2(簡単な分析編) - My Life as a Mock Quant

*1:基準価額(分配金再投資)で計算したもの