LoginSignup
8

More than 5 years have passed since last update.

posted at

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

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

感想

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8