Yahooファイナンスの株価を取得してみる

RでYahooファイナンスを取得するモジュール、RFinanceYJを改造し使っていたのですが、あまりの遅さに閉口してしまいました。丸一日掛けても14年分の日次株価は1000銘柄程度しか撮れていません。やり方はこの辺りにまとめています。

http://d.hatena.ne.jp/anagotan/searchdiary?word=%2A%5BR%5D

RaspberryPiを手に入れたこともあり、pythonで書き直してみました。pythonは2.7です

master.py

マスターを取得します 

hist.py

時系列データを取得します 

やっつけで作成しましたがとりあえずファイルに落とすところまでは確認できました。

ちなみに動作環境はRapberryPITypeB+のRASPBIANVersion:June 2014で動いています

Raspberry Pi TypeB+で遊ぶ

昨日ポチッたRaspberryPi、早速届きました。RSコンポーネンツさん仕事が早いです。

早速セットアップ。

MicroSD

上海問屋で以前入手したトラセンドの32G

microUSB電源アダプタ

ソニーエリクソンのMW1付属のものを流用。

モニタ

ソニーの液晶テレビ

要は家にある物でなんとかしてみました。セットアップはMacOSXで行います

SDのフォーマット

通常のフォーマットでFAT32にしておけばOK。

raspberry piのImageのダウンロード

http://www.raspberrypi.org/downloads/

こちらからRASPBIANのZIPファイルをダウンロード。解凍しておきます

イメージの書き込み

ディスクをマウントしコマンドプロンプトのdfで確認します

/dev/disk2s1がSDのデバイスです。マウントを外し書き込んでいきます。

4、5分でイメージが書き終わります。

起動

HDMIケーブルをテレビと接続し、SDカードをセットしたら電源コネクタにマイクロUSBの電源を差し込みます。テレビに起動コンソールが映り始めればOK

だめな場合には、LEDランプの緑がちかちかしているかどうか確認します。こちらがどうやらディスクアクセスのランプのようです。うまく起動画面が出ない場合にはSDにOSがうまく書き込めていないと思いますので、ディスクを変更するなどし再度チャレンジしてください。

RaspberryPIのセットアップ

起動したらディスクやLocaleの設定などを行います

1.Expand Filesystem

そのままの設定だと2GしかSDカードを使ってくれないのでこちらのメニューからすべての領域を使うようにします

4.Internationalisation Options

I1 Change Locale

ロケールをja_JP.UTF-8へと変更

I2 Change Timezone

Tokyoへ変更

I3 Change Keyboard Layout

General Keyboard 105 あたりからJapaneseを選択

8. Advanced Options

A4 SSH

これをONにしておくと外部からSSHでログイン可能

ここまででだいぶ使いやすくなるかと思います。あと固定IPの方が使いやすいのでネットワークの設定を行います。

自宅のネットワーク構成に合わせてaddressとgatewayを設定します。

これで一通りの設定ができたかと思います。必要なパッケージはapt-getが使えるので簡単にインストールできるのが楽ですね

Rでチャートを書いてみる(8)

前回までのスクリプトをぐるぐる回すようにしてみました。

一銘柄ずつとると時間がかかるので並列で動くようにしています

  • RFinanceYJPatch.R

  • getall.sh

現在4000銘柄弱ですのでこれでOKだと思います。ただこれでもまだまだ時間がかかりますが全部取得できるかと思います

Rでチャートを書いてみる(7)

前回でマスターまで取得ができたので、このマスターを用い、全銘柄分のデータを取得することにします。

取得したデータはリレーショナルデータベースへ格納するのが一般的かと思いますので、ここは簡単に扱えるSQLiteに入れることにします。

SQLiteをインストール

MacOSXの場合には以下のコマンドで一発です

つぎにRSQLiteパッケージをインストールします

準備が整ったらスクリプトを用意しこれを実行します

(前回までのRFinaiceYJの拡張関数を実行しておくこと)

かなり時間がかかると思いますが無事SQLiteにはいっていることが確認できます

  • 2014-8-24

もう少し使い勝手よくしてみました

Rでチャートを書いてみる(6)

株価を利用する際には株価コードの一覧が必要となってきます。そこで調子に乗って株価コードの一覧を取得してみました

例によってRFinanceYJに追加する関数です

YahooFinanceの銘柄名の頭文字から一覧を得るページがあるのでこちらからダウンロードするようにしました。

結果ですが、ページ数が多いので若干時間がかかります。

全銘柄とれるようになりました!

  • 2014.8.17

銘柄コード純になるように修正してみました

Rでチャートを書いてみる(5)

いつの間にかQiitaに引用されていました。(^^!

http://qiita.com/HirofumiYashima/items/4b3a3a3e49be59d81e4f

うまく動かないとのことなので修正をしてみました。

RFinanceYJはYahooのHTML変更に振り回されているようで、うまく動かない場合が多いです。

どうもStockTsDataの↓の部分でテーブルの形を決まりきった物として扱っているので、Yahoo側のちょっとした変更(たとえば上の方になんか広告などを追加するとか)に負けてしまっています。

Xpathで解析するようにし、若干の変更には耐えられるように修正してみました。この株価ページにはテーブルが3個あり、その2番目が株価のテーブルですので、最新版の0.3.1にまたまたパッチを当ててみました。こう書き換えます。

この関数だけを読み込んでもだめなので全体を記述しそれをlibrary(RFinanceYJ)に続けて読んでやります

実行結果

長いヒストリカルデータも何のその!!

2014.8.19

HirofumiYashima様の指摘により修正してみました

なお、実行環境はMacOS10.9のR version 3.0.3 です

2015.1.20

こちらの記事はYahooの仕様変更によりとれなくなってしまいました

http://d.hatena.ne.jp/anagotan/20150120

こちらを参照ください

Backbone.UndoをTypescriptで使ってみた その3

昨日のサンプルは、クリックイベントの処理がモデルの中に入っているので、ちょっとイマイチだったので、コントローラ側でその辺りの処理をするように再度修正してみました。また、ArrayなどのUndoに対応できる用にコントローラ側でデータ修正する際に、深いコピーでモデルに入れるようにしないといけないのでその辺りも合わせて修正しました。

  • app.ts

  • index.html

次に単体テストをmochaを使用して記述してみます。

予めmocha.js,mocha.d.ts,mocha.css,asert.js,assert.d.tsを用意しておく必要があります。

書いていてわかったのですが、実はBackbone.undo.jsはデータをスタックする際にタイムスタンプを用いているらしいので、テストユニットでババっと流すと、同じタイムスタンプでスタックされてしまい、思い通りの動きになりません。

そこで、テストユニットにはsettimeoutで少し実行間隔を開けてやることにします。

  • app-test.ts

done()を入れることにより、同期をとったテストを実行できます

  • app-test.html

本来ならば、gruntとphantom.jsを用いてコマンドラインから実行するのが普通でしょうが、このapp-test.htmlをブラウザで開くだけでもテストを実行できます。エラーなどはchromeのデバッグツールで確認して下さい

サンプルはこちらにアップしておきました

https://github.com/anagotan/typescript_sample/tree/master/undo

Backbone.UndoをTypescriptで使ってみた その2

前回のサンプルではModelとView辺がうまく分離できていなかったので修正してみた

Backbone.Modelに状態を保存し、イベントを拾って、Undoなどの処理を行うようにしてみた

  • app.ts

  • index.html

AppModelクラスが状態を保存している。このBackboneModelに対し、各マウスイベントで発生したClickイベントの関数からModelに対し値をセット。Backboneのchangeイベントが発生するのでそれを拾って処理を行う感じ

Backboneをこのように使うのかどうかは不明。。自己流です

Backbone.UndoをTypescriptで使ってみた

backbone.undo.jsというBackboneJS用のUNDOモジュールが有ります。

http://backbone.undojs.com/

こちらをTypescriptで使用してみました。うまくいったのでサンプルを掲載しておきます

通常、Typescriptで既存のライブラリを使用する際には、Typescript用に型定義ファイルを作成してやる必要が有ります。

世の中にはいい人がいて、たいていのライブラリは型定義されていたりします。

https://github.com/borisyankov/DefinitelyTyped

しかし、今回使用するbackbone.undo.jsはまだこちらでは定義されていませんでしたので、適当に作成してみました。

https://github.com/anagotan/DefinitelyTyped/tree/master/backbone.undo

これを利用してUndo機能を実装してみます。

仕様としては、addボタンを押すと「name=0,value=0」のボタンが追加されていきます。update_nameおよびupdate_valueのボタンでランダムな数値に置き換わります。

これをもとにundoおよびredoを実装してみました。

  • index.html

  • app.ts

実行する際には別途,jquery,underscore.js,backbone.js を用意しておく必要が有ります

scalaのRedisクライアントbrandoを使ってみる(その3)

PlayFramework2.2でscalaのRedisクライアントbrandoを使用する際にはちょっと注意が必要です。

brando1.0はakka2.3対応らしく、Play2.2ではまだakka2.2の対応となっているためそのままでは動きません。

仕方がないのでbrando0.3にバージョンを落として使用します。

また前回のサンプルだと、キーに値がない場合にはエラーになってしまいます。

そこでbrando0.3を少し改造します

  • brand.Brando.scala

これで使いやすくなりました