時系列分析における系列変換
沖本本のアウトプットを共有目的と自分用のメモ目的で書きます。
時系列分析の目的
時系列分析の目的は、複雑な観測データが持つ多様な特徴のうち 分析者にとって重要な特徴のみを簡単に表現できるモデルを構築することです。 このように作成したモデルを基に、目的に応じた分析を行います。
時系列分析における変換の目的
何も加工されていない観測データそのものの時系列データは原系列 と呼ばれます。 原系列は観測データそのものですが、 自然現象を観測データにする際にもある程度の情報の取捨選択が行われていることは一応念頭に置いておくべきです。
基本的に時系列分析の目的は、この原系列の性質を明らかにして予測などを行うことが多いですが、 原系列に対して時系列分析をするよりも何らかの変換を施して分析を進めるほうがいいことが多いです。 なので、分析におけるざっくりとした方針は以下のようになります。
- 原系列に対して何らかの変換を施す
- 原系列を変換した系列に対して分析を行う
- 変換を逆変換して原系列に戻すことで、原系列の性質を明らかにする
変換の種類
- 対数変換
原系列に対して対数の変換を施します。 たとえば、経済・ファイナンスデータなどは、値が大きくなるにつれてばらつきが大きくなるデータなどがあり、 時系列分析において重要な性質である定常性の仮定を満たさない場合があります。 そのような場合は対数変換を施した対数系列 にすることで定常過程に従う時系列データにする場合があります。
- 差分変換
原系列に対して1時点離れたデータの差を新たな系列に変換して分析することもあります。 これを差分系列と呼びます。 時系列データには、定常性を持つ定常過程に従う時系列データの他に、単位根過程に従う時系列データなどが存在します。 今回は、単位根過程の詳しい説明は省略しますが、単位根過程の差分系列は定常過程 になるということだけは抑えておいても良さそうです。 基本的に時系列分析において時系列データが定常過程に従うと仮定できると解析しやすくなるので、 その点でも単位根過程の差分系列が定常過程に従うという事実は重要です。
- 対数差分変換
上記の対数系列の差分系列である対数差分系列に変換します。 この変換を施す動機は変化率に興味がある場合です。 離散データの場合は、対数差分系列に100を掛けて変化率とする ことができます。 対数差分系列がなぜ変化率を表現しているのかに関しては1次のテイラー展開の近似から説明できます。
- 季節調整
時系列データには季節性を含んだデータも多いです。たとえば株価などがわかりやすい例として考えられます。 たとえば、一般的に株価は年の前半は上昇トレンドですが、年の後半は減少トレンドであることが知られています。 時系列分析において、季節変動では説明できない時系列データの動きに興味のあることが多いように思います。 季節調整自体は難しい問題で、僕自身も勉強不足なので扱いきれていませんが、Pythonのstatsmodelsというライブラリの中で季節調整のできる関数が実装されています。
from statsmodels.tsa.seasonal import seasonal_decompose seasonal_decompose(x, freq)
xにはarray-likeな時系列データを渡して、freqで季節性の周期を渡します。たとえば、日次のデータだとfreq=7
にすることで一週間の季節性を排除します。説明のために簡易的になってしまいましたが、その他も調整するパラメータが存在するので
公式ドキュメントを確認してみてください。
まとめ
今回は時系列データの変換に関してまとめました。 機械学習におけるデータのスケール変換と同様に上記で示した変換はモデルの精度に影響が及ぶため、 重要だと思います。 統計モデリングにおいてなぜこの変換をするのか、今現在どういう仮定の下でモデリングをしているのかは 常に人に説明できるようにしておくことが重要だと日々感じています。 まだまだ勉強不足なのでアウトプットと並行しながらインプットも進めていきたいですね。
経済・ファイナンスデータの計量時系列分析 (統計ライブラリー)
- 作者: 沖本竜義
- 出版社/メーカー: 朝倉書店
- 発売日: 2010/02/01
- メディア: 単行本
- 購入: 4人 クリック: 101回
- この商品を含むブログ (6件) を見る
python+SeleniumでWebページのデータを自動取得する
SeleniumはWebブラウザの自動操作ライブラリです。Seleniumを用いることで人間がWebブラウザ上で行う作業を自動化することができます。
Seleniumの一般的な用途としては、単純作業の自動化の他にWebアプリケーションの自動化などが挙げられます。
今回はSeleniumでWebページにアクセスしてcsvファイルをダウンロードするという作業を自動化します。
使用するもの
今回の主役です。様々な言語に対応して提供されていますが、今回はpythonを使用します。
- ChromeDriver
ブラウザ(Chrome, Firefox, Safari etc...)のdriverを指定することでSeleniumを各ブラウザで実行することができます。
それぞれのブラウザではヘッドレスモード(ブラウザを実際にGUI上に立ち上げずに実行するモード)が可能です。今回はデータを取得するだけなのでヘッドレスモードで実行します(オプションで--headless
で指定するだけ)。
2018年6月2日ヘッドレスブラウザの代名詞だったPhantomJSの開発が終了アーカイブ化されたので、上記のブラウザを使用することをおすすめします。
なお、今回高頻度で利用することはないのでCircleCIは使用しません。
Selenium操作の基本部分
from selenium.webdriver import Chrome, ChromeOptions options = ChromeOptions() options.add_argument('--headless') driver = Chrome('chromedriverのパス', options=options) driver.get('操作したいブラウザのURL')
この部分がSeleniumによるブラウザ自動操作の基本部分になります。
オプションで--headless
を指定することでヘッドレスモードを選択できます。
driverでChromeを指定したあとは、driver.get(URL)
でブラウザを開くことができます。
スクレイピング
Seleniumを用いたスクレイピングも一般的なスクレイピング同様HTMLの要素にアクセスして実行していきます。
# idで取得 driver.find_element_by_id('ID') # classで取得 driver.find_element_by_class_name('CLASS_NAME') # nameで取得 driver.find_element_by_name('NAME') # xpathで取得 driver.find_element_by_xpath('XPATH')
ChromeのDeveloper toolsを使えばWebページを構成するHTMLがわかるので地道にみながら操作していく感じです。 elementの部分をelementsにすると該当する要素が複数取得できます。 elementでアクセスした際、要素が複数ある場合は一番はじめの要素にアクセスできます。
データの自動取得
今回は日本経済新聞の経済指標ダッシュボードのcsvデータを取得します。
https://vdata.nikkei.com/economicdashboard/macro/
経済指標ダッシュボードは日本経済の動向を把握するのに役に立つ経済指標が一覧できるサイトです。 ブラウザ上で表示されているグラフをクリックするとcsvがダウンロードできるボタンが表示されます。
基本方針としては、csvデータのURLが含まれる要素まで行ってgetAttribute()
で名前付けされた属性の値を取得しにいくという方針です。
そしてそこで取得したURLに対して
import urllib urllib.request.urlretrieve('指定のURL', '保存先のファイル名')
でURLからデータをダウンロードします。
githubにコードを上げてあります。
まとめ
Seleniumでブラウザ操作が自動化できるとかなり効率化につながりますね。まだまだ勉強できていないので色々試しながらやっていきたいです。
以下は今回勉強するに当たって参考にしたサイトです。大変勉強になりました。
HTML付近の勉強は下の本をチラ見しながら勉強しました。図が豊富でわかりやすいです。
- 作者: 高橋朋代,森智佳子
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2013/12/14
- メディア: 単行本
- この商品を含むブログ (11件) を見る