BlankTar

about | blog | works | photo

謹賀新年

keyword: 新年

最近pandasが楽しいです。楽しくてしょうがないです。
ばばっとまとめて計算出来るし、何も考えなくてもそれなりに速いし、データの保存もHDFStoreを使えばがつっと…
がつっと…

>>> import pandas
>>> pandas.HDFStore('test.h5')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/site-packages/pandas/io/pytables.py", line 385, in __init__
    raise ImportError('HDFStore requires PyTables, "{ex}" problem importing'.format(ex=str(ex)))
ImportError: HDFStore requires PyTables, "No module named 'tables'" problem importing

あれぇ…?

エラーを見る限り、PyTablesとやらが足りないらしい。
PyTablesってのはtablesって名前でpipに登録されているらしいので、入れる。

$ pip install tables
Collecting tables
  Downloading tables-3.2.2.tar.gz (7.0MB)
    100% |████████████████████████████████| 7.0MB 51kB/s 
    Complete output from command python setup.py egg_info:
    /var/folders/hr/7zxpydvd1y71t9pfmjc8vd9m0000gn/T/H5closey6mnsvjy.c:1:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
    main (int argc, char **argv) {
    ^
    /var/folders/hr/7zxpydvd1y71t9pfmjc8vd9m0000gn/T/H5closey6mnsvjy.c:2:5: warning: implicit declaration of function 'H5close' is invalid in C99 [-Wimplicit-function-declaration]
	H5close();
	^
    2 warnings generated.
    ld: library not found for -lhdf5
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    * Using Python 3.5.0 (default, Sep 14 2015, 02:37:27)
    * USE_PKGCONFIG: True
    .. ERROR:: Could not find a local HDF5 installation.
       You may need to explicitly state where your local HDF5 headers and
       library can be found by setting the ``HDF5_DIR`` environment
       variable or by using the ``--hdf5`` command-line option.
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/hr/7zxpydvd1y71t9pfmjc8vd9m0000gn/T/pip-build-8jsswtkr/tables

…あれぇ?

hdf5が見つからないらしい。しかたがないのでhomebrewで入れる。

$ brew tap homebrew/science
$ brew install hdf5

無事HDF5が入ったら、再挑戦。

$ pip install tables

今度こそ入るはず。

試す。

>>> pandas.HDFStore('test.h5')
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
Empty

いけた。

っていうことを試行錯誤しながら頑張ってやったのですが、公式のリポジトリのREADMEに全部書いてありました。
公式を読もうな。な。

pythonで株やFXなんかで使うローソク足チャートを書きたかったのですが、ちょっと苦戦したのでメモ。
完成品はこんな感じです。
matplotlibで作ったローソク足チャート

ソースコードはこんな感じ。

import pandas
import matplotlib.pyplot as plt
from matplotlib.finance import candlestick_ohlc


dat = pandas.read_csv('usdjpy.csv', parse_dates=['日付'])  # ファイルの読み込み。
dat = dat[-50:]  # データが多すぎるので減らす。

dates = dat['日付']  # あとでつかう。

tmp = dat['日付'].values.astype('datetime64[D]')  # ナノ秒精度とか無意味なので、精度を日単位まで落とす。
dat['日付'] = tmp.astype(float)  # Datetime64形式だと使えないので、floatに変換。

plt.xticks(  # 横軸の値と表示の対応の設定。[::5]はラベルを1週間ごとにするために使っている。
	dat['日付'][::5],
	[x.strftime('%Y-%m-%d') for x in dates][::5]
)
plt.grid()

ax = plt.subplot()
candlestick_ohlc(  # グラフを作る。
	ax,
	dat.values,  # 入力データ。左から順に、始値、高値、安値、終値にする。その後にデータが続いてても良いらしい。
	width=0.7,  # 棒の横幅。今回は日単位の精度に落としてあるので、0.7日分の幅になる。
	colorup='skyblue',
	colordown='black'
)

plt.show()

わりと簡単。

データファイルはマネースクウェア・ジャパンが配布しているドル円のcsvファイルを使う前提で書いています。
まあ、始値高値安値終値の順番が正しければなんでも良い。

candlestick_ochlなんて関数もあって、こっちは始値終値高値安値の順番になります。お好みで。

横軸の表示を設定する方法は色々あるようなのですが、もっとも単純っぽいこの方法にしました。
あまりにもデータ数が多いときには問題が出るかもしれませんが、そうでなければこれで良いはず。

お手軽にわりと綺麗なグラフが出て素敵なんですが、細かい調整はどうも出来ないようです。
箱に枠線を付けるとか、そういうのは無理っぽい。もしくはすごく面倒臭そう。

参考:
Candlestick OHLC graphs with Matplotlib - Python Programming Tutorials
python - plotting dates from time() since the epoch with matplotlib - Stack Overflow
finance — Matplotlib 1.5.0 documentatio

[ << ] [ 9 ] [ 11 ] [ 13 ] [ >> ]