LoginSignup
7
8

More than 5 years have passed since last update.

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

Posted at

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

感想

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

7
8
0

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
  3. You can use dark theme
What you can do with signing up
7
8