Posted at
JuliaDay 12

【Julia】Juliaで時系列データにふれあいたい

More than 3 years have passed since last update.

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) # 月の最後の値を出力する


感想

時系列ならではの時間(年・月・週・日など)でデータを切ったり要約する分には今のところ不自由は感じなかった。時系列データの解析・可視化まわりについてはノータッチなので、追々調査してみたい。