【Python】為替データをグラフ化する

 

Pythonを使うと、データを読み込んで自分の好きな形のグラフにすることができます。

 

今回の記事では、ネットにある為替のデータを取得してグラフとして表示してみます。

 

「Pythonでグラフを書いてみたい」

 

そんな方に読んでいただければと思います。

 

 

為替データの取得

 

まずは表示するためのデータをサイトから入手しましょう。

 

為替データは日本銀行のサイトにあります。

 

http://www.stat-search.boj.or.jp/

 

為替という項目があるので選択します。

 

 

1970年からのデータを取得するように、赤枠の部分を1970に書き換えます。そうしたら、下の方にスクロールします。

 

 

データ表示というボタンがあるのでそれを押すと、為替データのcsvファイルがダウンロードできます。ダウンロード後に、ファイル名が長いのでexchange.csvと名前を変更しました。

 

exchange.csv

?f?[?^?R?[?h,FM08'FXERM07,FM09'FX180110002
?n??,"?????s??@?h???E?~?@?X?|?b?g?@17?????_/????????","?????????בփ??[?g?w??"
1970/01,      ,58.29
1970/02,      ,58.14
1970/03,      ,58.34
1970/04,      ,58.38
  :

 

macなので文字化けしちゃってますが、データはしっかりとありますね。これはあとで使うので、とっておきましょう。

 

必要なライブラリのインストール

 

Pythonのpandasとmatplotlibというライブラリをインストールします。

 

Anacondaを使っている方は、Anaconda Navigatorを起動しましょう。

 

 

Search Packagesの欄に「pandas」「matplotlib」と入れると出てくるのでそれぞれインストールしましょう。

左のドロップダウンメニューでは、Not Installedを選択して下さいね

 

 

インストールが終わるとこんな感じで追加されているのが確認できます。

 

コーディング

 

先ほどのcsvファイルを読み込んでグラフ化してみましょう。Pythonのコードとexchange.csvは同じディレクトリに配置してください。

 

データの読み込み(pandas)

 

Pandasを使って、データを読み込んでみます。

 

import pandas as pd

df = pd.read_csv('exchange.csv', encoding='cp932')

print(df)

 

先ほどcsvの中身を見たときに文字化けしていたので、windowsの文字コードであるCP932を指定します。

 

実行してみると、以下のような出力になりました。

 

      データコード               FM08'FXERM07 FM09'FX180110002
0       系列名称  東京市場 ドル・円 スポット 17時時点/月中平均      実質実効為替レート指数
1    1970/01                                       58.29
2    1970/02                                       58.14
3    1970/03                                       58.34
4    1970/04                                       58.38
5    1970/05                                        57.8
    :

 

0行目がデータになっていません。列(カラム)とデータの対応が分かりづらいですし、データが無い列は無視したいですね。

 

以下のように、コードを書き換えてみます。

 

import pandas as pd

df = pd.read_csv('exchange.csv', encoding='cp932', header=1, names=['date', 'dol', 'rate'], skipinitialspace=True,
                 index_col=0, parse_dates=True)

print(df)

 

read_csvのパラメータを整理してみます。

 

header 指定した行からデータを読み込む
names 任意の列名を指定する
skipinitialspace スペースを無視する
index_col インデックスにしたい列を指定する
parse_dates 日付を加える

 

header=1になっているので、1行目から読み込むようにしています。0行目はデータに関係のない部分なのでスキップします。

 

namesで年月をdate、ドル・円レートをdol、為替レート指数をrateというようにカラムに名前をつけています。

 

index_colで、0列目つまりdateをindexとして読み込んでいます。

 

parse_datesは、dateに年月だけでなく日付を加えるようにしています。

 

実行結果は以下の通り。

 

               dol   rate
date                     
1970-01-01     NaN  58.29
1970-02-01     NaN  58.14
1970-03-01     NaN  58.34
1970-04-01     NaN  58.38
1970-05-01     NaN  57.80
  :

 

整理されて必要なデータだけになりました。

 

グラフ化(matplotlib)

 

matplotlibを使って先ほどのデータをグラフ化します。

 

pandas_exchange.py

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime


df = pd.read_csv('exchange.csv', encoding='cp932', header=1, names=['date', 'dol', 'rate'], skipinitialspace=True,
                 index_col=0, parse_dates=True)

# x軸の最小値
min_date = datetime(1970, 1, 1)

# x軸の最大値
max_date = datetime.now()

plt.plot(df.index, df.dol, label='USD/JPY')
plt.xlim(min_date, max_date)
plt.ylim(50, 250)
plt.legend(loc='best')

plt.savefig('historical_data.png', dpi=300)

 

plotで描画するデータを指定しています。x軸に日付、y軸にドル・円レートを指定しています。

 

xlimとylimで、x軸とy軸の最小値と最大値を定め、savefigで保存するファイル名と解像度を指定します。

 

実行すると、以下のような画像ファイルが出来上がります。

graph

 

まとめ

 

・pandasを使うと、csvのデータを読み取ることができる
・データ読み取りの際には、パラメータを指定して必要なデータだけ読み取ろう
・matplotlibを使うと、グラフの描画ができる

 

参考

 

Python クローリング&スクレイピング データ収集・解析のための実践開発ガイド

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog