前の関連記事:numpyの多次元配列の「軸を入れ換える」ということについての学習
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理のp176「5.6.2パネル」がよくわからなかったのでJupyter Notebookで確認したメモ。
pandasのパネルは3次元のデータフレームに相当するらしい
pandasのデータフレームのp169「5.5階層型インデックス」(MultiIndex)を使うと2次元の表だけでなんとかなるそうですが、p176「5.6.2パネル」(pandas.Panel)という3次元のデータフレームに相当するものの例が紹介されていました。
まずpandas.io.dataでGoogle Financeからサンプルデータを得てそれをパネルに収納します。
In [44]:
import pandas as pd
import pandas.io.data as web
In [45]:
pdata=pd.Panel(dict((stk, web.get_data_google(stk, '2015/1/1','2015/6/1')) for stk in ['AAPL','GOOG','MSFT']))
これでアメリカ(ニューヨーク?)証券市場のアップル社、GooGle社、マイクロソフト社の証券コードを使って2015年1月1日から2015年6月1日までの株価のデータを取得できます。
本にある例のget_data_yahooをget_data_googleに変更しています。
Google Financeでは「TYO:証券コード」で検索するとSony Corpという感じで東京証券市場の株価の履歴も得られるので、東証の株価が取得できると期待したのですが期待はずれでした。
アメリカ市場のGoogle Incと違ってcsvファイルが提供されておらず、output=csvオプションでエラーが出るので東京市場の株価の取得はできません。
これははきっと東証が有料で株価データを提供している関係でcsvの公開ができないのだと推測します。
pandas.Panelクラスの引数で証券コードをキーとしてCSVデータを値にした辞書を引数にしてパネルをインスタンス化しています。
本にある例のget_data_yahooをget_data_googleに変更しています。
Google Financeでは「TYO:証券コード」で検索するとSony Corpという感じで東京証券市場の株価の履歴も得られるので、東証の株価が取得できると期待したのですが期待はずれでした。
アメリカ市場のGoogle Incと違ってcsvファイルが提供されておらず、output=csvオプションでエラーが出るので東京市場の株価の取得はできません。
これははきっと東証が有料で株価データを提供している関係でcsvの公開ができないのだと推測します。
pandas.Panelクラスの引数で証券コードをキーとしてCSVデータを値にした辞書を引数にしてパネルをインスタンス化しています。
In [46]:
pdata
Out[46]:
3x103x5の形状のパネルpdataができました。
itemの3つはpandas.Panelクラスの引数の辞書のキーにした証券コードの'AAPL','GOOG','MSFT'です。
103個あるmajor軸はCSVの2行目以降の2列目から「日付」が入っていました。
5個のminor軸はCSの2列目以降の2行目から「始値」「高値」「安値」「終値」「出来高」が入っていました。
pdataに取得したアップル社の株価の履歴をみてみましょう。
itemの3つはpandas.Panelクラスの引数の辞書のキーにした証券コードの'AAPL','GOOG','MSFT'です。
103個あるmajor軸はCSVの2行目以降の2列目から「日付」が入っていました。
5個のminor軸はCSの2列目以降の2行目から「始値」「高値」「安値」「終値」「出来高」が入っていました。
pdataに取得したアップル社の株価の履歴をみてみましょう。
In [47]:
pdata['AAPL']
Out[47]:
In [48]:
pdata=pdata.swapaxes('items','minor')
本の例ではここで軸交換しています。
軸交換は視覚的に表現が難しいですがnumpyの多次元配列の「軸を入れ換える」ということについての学習と同様に${value}_{(items,major,minor)}$が${value}_{(minor,major,items)}$と$value$(ここでは株価と出来高)の添字が変わるだけ、と考えればよいと思います。
添字が変わるとどうのようなデータ構成になるかはpandasが考えてくれます。
軸交換は視覚的に表現が難しいですがnumpyの多次元配列の「軸を入れ換える」ということについての学習と同様に${value}_{(items,major,minor)}$が${value}_{(minor,major,items)}$と$value$(ここでは株価と出来高)の添字が変わるだけ、と考えればよいと思います。
添字が変わるとどうのようなデータ構成になるかはpandasが考えてくれます。
In [49]:
pdata
Out[49]:
itemsとminor_axisが入れ替わったので3x103x5の形状だったパネルが、5x103x3に変化しています。
itemsのClose(終値)でpdataをみると各社の終値の時系列が得られます。
itemsのClose(終値)でpdataをみると各社の終値の時系列が得られます。
In [50]:
pdata['Close']
Out[50]:
ix属性で一部のインデックスのデータを指定して他のデータを抽出できます。
この機能を使えばさっきの軸交換をしなくてもpdata.ix[:,:,"Close"]で同じ結果を得られます。
この機能を使えばさっきの軸交換をしなくてもpdata.ix[:,:,"Close"]で同じ結果を得られます。
In [51]:
pdata.ix[:,'2015/5/28',:]
Out[51]:
これでmajor_axisが'2015/5/28'であるデータが抽出されそれに合わせてインデックスが表示されています。
連続したデータを取り出して表示するにはto_frame()メソッドでデータフレームに変換して表示します。
連続したデータを取り出して表示するにはto_frame()メソッドでデータフレームに変換して表示します。
In [52]:
pdata.ix[:,'2015/5/28':,:].to_frame()
Out[52]:
'2015/5/28'から最後の'2015/6/1'までのデータが表示されました。
Outセル中の表は長いため削ってあります。
Google Financeからダウンロードしたcsvファイルの日付は「29-May-15」という形式になっていて、Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理の例の日付の形式は「5/28/2015」で、出力セルの日付は「2015-05-29」というバラバラでしたが問題なく動きました。
わかりにくいので「2015/5/28」で統一しました。
参考にしたサイト
pandas: powerful Python data analysis toolkit — pandas 0.16.2 documentation
pandasの公式マニュアル。詳細すぎるせいなのかなかなかほしい情報にたどりつけません。
Google Finance: Stock market quotes, news, currency conversions & more
東京証券市場の株価もみれますがcsvファイルの提供はされていませんでした。
0 件のコメント:
コメントを投稿