Julia Advent Calendar 2015の12日目の記事です。
Juliaで時系列データを扱えるパッケージTimeArray
を使ってみた(マニュアルを写経)所感を記載します。
v0.4.2を使用しています。
TimeSeriesの機能紹介の前に、Juliaには日付型などの時間を表す型が存在ます。
それらの型に対応した関数も同時に用意されています。
参考URL : http://julia.readthedocs.org/en/release-0.4/stdlib/dates/#dates-and-time
※ Dates.
が前についている関数は時間を表す型を扱う関数を指します。
使用データ
MarketData.jl
より呼び出す。
データの詳細はこちらを参照
機能紹介
TimeArray
の主な機能は
- TimeArray型のデータの作成
- TimeArray型のデータから要素を取り出す
- TimeArray型の操作
- TimeArray型の結合
前準備
# パッケージの読み込み
using TimeSeries, MarketData
TimeArray型を作成する
# 日付型の1次元配列を作成
dates = [Date(1999,1, 1):Date(2000, 12, 31);]
# 先の配列と同じ長さの乱数を生成しカラム名に"test"とつけたTimeArrayを作成
mytime = TimeArray(dates, rand(length(dates)), ["test"])
データから要素を取り出す
# 行を選択して抽出
ohlc[1:3]
# カラムを選択して出力
ohlc["Open", "Close"]
# 時間を指定
ohlc[[Date(2000, 1, 3):Date(2000, 1, 10);]]
# 行と列を選択
ohlc["Open", "Close"][1:3]
# カラム名と時間
ohlc["Open", "Close"][Date(2000, 1, 3):Date(2000, 1, 10)]
# Dates.daynameは曜日を返す関数を適応させclから月曜日のデータのみを取り出す
when(cl, Dates.dayname, "Monday")
# 2001-12-27からデータの終わりまでを取り出す
from(cl, 2001, 12, 27)
# データの頭から2001-1-5まで
to(cl, 2001, 1, 5)
# 定めた条件(ここではCloseがOpenよりも大きい)に対してtrueとなる日付を返す
green = findwhen(ohlc["Close"] .> ohlc["Open"])
ohlc[green]
# 定めた条件(ここではCloseがOpenよりも大きい)にtrueとなる値を行数で返す
red = findall(ohlc["Close"] .< ohlc["Open"])
ohlc[red]
TimeArray型の操作
# 2期ずらす
lag(cl[1:3], 2)
# lagとは逆方向にずらす
lead(cl[1:3], 2)
# 前期と比較し何%変化したのか
percentchange(cl[1:3])
# 10期ずらしで移動平均をとる
moving(cl, mean, 10)
# 上の期と演算を行う。ここでは累積和となる
upto(cl, sum)
# Baseモジュールにある関数を適用させる. cumsum(cl)ではダメ
basecall(cl, cumsum)
TimeArray型の結合
# TimeArrayに対応したmerge, ただしinner joinのみ
Caterapple = merge(AAPL, CAT)
# collapse:periodで指定した枠組みでデータを圧縮する
collapse(cl, last, period = Dates.month) # 月の最後の値を出力する
感想
時系列ならではの時間(年・月・週・日など)でデータを切ったり要約する分には今のところ不自由は感じなかった。時系列データの解析・可視化まわりについてはノータッチなので、追々調査してみたい。