Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

株価の取得方法について調べていて見つけた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を開くことで使うこともできる。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした