Pythonを使うと、データを読み込んで自分の好きな形のグラフにすることができます。
今回の記事では、ネットにある為替のデータを取得してグラフとして表示してみます。
「Pythonでグラフを書いてみたい」
そんな方に読んでいただければと思います。
[toc]
為替データの取得
まずは表示するためのデータをサイトから入手しましょう。
為替データは日本銀行のサイトにあります。

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で保存するファイル名と解像度を指定します。
実行すると、以下のような画像ファイルが出来上がります。

まとめ
・データ読み取りの際には、パラメータを指定して必要なデータだけ読み取ろう
・matplotlibを使うと、グラフの描画ができる
参考
Python クローリング&スクレイピング データ収集・解析のための実践開発ガイド