こんにちは、はやたす(@hayatasuuu )です。
この記事では「PythonでCoinMarketCap APIを使う方法」を紹介します。
CoinMarketCap APIを使えば、仮想通貨の各種データを取得できます。
今回はその中でも仮想通貨ランキングを取得して、CSVに出力するところまでやっていきます。
PythonでCoinMarketCap APIの使い方を分かりやすく解説
仮想通貨ランキングを取得してCSVに出力するには、以下の3ステップが必要になります。
- アカウント作成とAPI Keyの取得
- APIを叩いてランキングを取得する
- データフレームを作成してCSVに出力する
順番に紹介していきます。
STEP1 : アカウント作成とAPI Keyの取得
まずはCoinMarketCapのアカウントを作成します。
APIの申請ページで「GET YOUR API KEY NOW」をクリックしましょう。
Sign Upページに遷移したら、以下項目を記入しましょう。
CoinMarketCap APIは有料プランもあります。
まあまあ高いのでまずは無料で良いと思います。「Basic」を選択してください。
記入が完了したら「CREATE MY ACCOUNT」をクリックします。
STEP2 : APIを叩いてランキングを取得する
アカウントを作成したらダッシュボードを開いてください。
ここでシークレットになっているAPI Keyをコピーしましょう。
API KeyをコピーしたらPythonを実行できる環境を準備してください。
HTTPリクエストを投げるので、requests
ライブラリが必要になります。
もしインストールしていなければ、以下のコマンドでインストールしましょう。
$ pip install requests
requests
をインストールしたら、Pythonファイルを準備して以下のコードを貼り付けてください。
※スクリプトで書いてますが、あとでデータフレームの作成からCSVの出力をおこなうのでJupyter推奨です。
from requests import Request, Session
from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
fiat = 'USD'
API_KEY = '' # Set your api key
headers = {
'Accepts': 'application/json',
'X-CMC_PRO_API_KEY': API_KEY,
}
params = {
'start':'1',
'limit':'5000',
'convert':fiat
}
session = Session()
session.headers.update(headers)
try:
r = session.get(url, params=params)
except (ConnectionError, Timeout, TooManyRedirects) as e:
print(e)
print(r.json())
エラーにならなければ、CoinMarketCapの仮想通貨ランキングをJSON形式で取得できるはずです。
STEP3 : データフレームを作成してCSVに出力する
JSON形式で取得できましたが、これだとデータ分析するには扱いづらいです。
PythonライブラリのPandasを使って、JSONからデータフレームに変換していきましょう。
続きから以下のコードを書きます。
import pandas as pd
df = pd.DataFrame(r.json()['data'])
df.head()
Jupyter環境で実行すれば、以下のようなデータフレームを作成できるはずです。
これでデータが扱いやすい形になりました。
APIの利用には制限があるので、データフレームを保存しておくと良いですね。
f_name = 'cmc_coinlist.pickle'
df.to_pickle(f_name)
これでいつでもデータ分析できるようになりました。
もちろんto_pickle()
をto_csv()
に変えればCSVファイルを出力できます。
df.to_csv('cmc_coinlist.csv', index=None, encoding='utf-8-sig')
これで、CoinMarketCap APIで取得した「仮想通貨ランキングデータ」を、CSVに出力するまで完了しました。
おまけ : セル内の辞書をアンパックする方法
データフレームを見ると分かりますが、tags
やquote
カラムはセル内にリストや辞書を持っています。
これではデータを扱いづらいので、今回はquote
だけバラしてあげたいと思います。
そのためには、少し横暴ですが以下のコードを書けばOKです。
for target_key in df.quote.iloc[0][fiat]:
df[fiat+'_'+target_key] = df.quote.map(lambda d: d[fiat][target_key])
quote
内に格納されている辞書のKeyを一つずつ取り出し、それをデータフレームのカラムとして新しく追加しています。
これに関しては、手元の環境で実行してみるのが早いと思います。
もしセル内の辞書を展開したいと思ったら、こちら使ってみてください。