LoginSignup
97
110

More than 5 years have passed since last update.

PythonでQuandlからデータを取得する

Last updated at Posted at 2015-01-04

株価の取得方法について調べていて見つけたQuandlというサービスが良さげだったので使ってみた。

Quandl

Quandlは金融、経済などの数値データの検索エンジンで、さまざまなソースから得られたデータを検索し、グラフや表を表示させることができる。またデータはJSON、CSVなどの形式でダウンロードしたり、Plotlyなどのサービスに取り込ませることもできる。

Getting Started

一部有料のデータもあるが多くのデータについては無料で取得することができる。

様々な言語のライブラリも用意されており(https://www.quandl.com/help/libraries )、APIを用いてデータの取得や検索ができるようになっている。

各データを個別に提供しているだけではなく、データをまとめているページがある。
画面左上からData > Data Browser とクリックすると国やデータの種類でまとめられている中から探すことができる。
例えば、以下のようなページがある。

Pythonライブラリのインストール

Quandlのライブラリはpipを使ってインストールすることができる。(Numpyとpandasが必要)

$ pip install Quandl

Pythonライブラリの使い方

Quandlモジュールをインポートし、get関数にQuandl Codeを渡すと、pandasのDataFrameとしてデータを取得することができる。Quandl Codeはデータを検索すると画面の右上の方に表示されている。

>>> import Quandl
>>> df = Quandl.get('GOOG/NASDAQ_GOOG')
>>> df[:5]
             Open   High    Low  Close  Volume
Date                                          
2004-08-19  49.96  51.98  47.93  50.12     NaN
2004-08-20  50.69  54.49  50.20  54.10     NaN
2004-08-23  55.32  56.68  54.47  54.65     NaN
2004-08-24  55.56  55.74  51.73  52.38     NaN
2004-08-25  52.43  53.95  51.89  52.95     NaN

[5 rows x 5 columns]

トークンの使用

Quandlのアカウントがない場合にはAPIの使用回数は1日に50回までに制限されている。
Quandlにアカウント登録しアカウントページに表示されているトークンを一緒に渡せばAPIを無制限に使うことができる。

>>> df = Quandl.get('GOOG/NASDAQ_GOOG', authtoken='YOUR_AUTH_TOKEN')

複数のデータの同時取得

以下の例のようにQuandl Codeのリストを引数として渡すことで同時に複数のデータを取得することができる。
データ間の比較をしたいときなどには便利。

>>> df = Quandl.get(["WORLDBANK/JPN_IT_NET_USER_P2",
...                  "WORLDBANK/KOR_IT_NET_USER_P2",
...                  "WORLDBANK/CHN_IT_NET_USER_P2"])
>>> df.columns = ["Japan", "Korea", "China"]
>>> df[:5]
               Japan     Korea     China
Date                                    
1990-12-31  0.020294  0.023265  0.000000
1991-12-31  0.040438  0.046124       NaN
1992-12-31  0.096678  0.098404       NaN
1993-12-31  0.401278  0.249947  0.000169
1994-12-31  0.799684  0.311359  0.001168

データの検索

search関数を使ってデータを検索することができる。verboseはデフォルトではTrueになっており、Trueの場合上位4件のデータを標準出力へ出力する。

>>> dataset = Quandl.search("Internet User", source="WORLDBANK", verbose=False)

結果の数が多い場合にはページが分割されているので、ページ数を指定して繰り返し実行する必要がある。ページ数が多すぎるとスロットリングに引っかかることがあるので注意。

>>> page = 0
>>> dataset = []
>>> import itertools as it
>>> for page in it.count():
...     d = Quandl.search("Internet User", page=page, source="WORLDBANK", verbose=False)
...     if not d:
...         break
...     dataset.extend(d)

基本的にはブラウザで検索するのと同じだが、Quandl Codeをまとめて取得したいときなどはAPIを使うと楽かもしれない。

その他

その他のAPIの詳細についてはドキュメントを参照。

PythonライブラリではサポートされていないオプションなどについてはAPIのドキュメントを参照。urllib2などを使って直接URLを開くことで使うこともできる。

参考

97
110
1

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
97
110