【Python】時系列データ(為替データ)をグラフ表示してみた。
公開日:
:
最終更新日:2018/12/16
Python Matplotlib, pandas, グラフ表示, 為替データ
今回は、pandas・matplotlib ライブラリを使って、時系列データ(為替データ)をグラフ表示してみました。
OS は Linux の Ubuntu です。
Contents
pandas ライブラリのインストール
CSV や Excel ファイルを読み込み、必要な部分を抽出するために、python の pandas ライブラリを使います。
pandas のインストールは以下のコマンドで行います。
1 2 3 |
$ sudo pip install pandas $ sudo python3 -m pip install pandas |
CSV ファイルを読み込む
以下の日本銀行のホームページから、為替のデータをダウンロードします。
https://www.stat-search.boj.or.jp/
ブラウザからダウンロードすると処理がめんどくさいので wget でダウンロードしました。
1 |
$ wget https://www.stat-search.boj.or.jp/ssi/html/nme_R031.31278.20181213170658.02.csv |
ただし、こちらは2018年12月時点でのデータとなっています。
CSV ファイルでは以下のようになっています。
以下のスクリプトで読み込みを行います。
ただし、CSV のファイル名は「exchange.csv」にあらかじめ変更しておきます。
1 2 3 |
import pandas as pd # pandas を pd という名前でインポートする print( pd.read_csv('exchange.csv', encoding='cp932') ) |
以下のように表示されます。
もう少し、見やすく整形します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import pandas as pd # pandas を pd という名前でインポートする # # オプション説明 # encoding :ファイルのエンコーディング # header :これより前の行は無視される # names :列の名前リスト # skiounitaialspace:Trueとすると、区切り文字の後に続くスペースを無視する # index_col :インデックスとして使用する列番号 # parse_dates :True にすると、インデックスに使用した列に対して日時としてのパースを試みる # df_exchange = pd.read_csv('exchange.csv', encoding='cp932', header=1, names=['date', 'USD', 'rate'], skipinitialspac e=True, index_col=0, parse_dates=True) print(df_exchange) |
すると、以下のように見やすくなりました。
matplotlib ライブラリをインストール
先ほど読み込んだデータを使って、グラフ表示させるために matplotlib ライブラリをインストールします。
1 2 3 4 5 6 7 |
# グラフ中で日本語を扱うためのフォント $ sudo apt-get install -y fonts-migmix $ sudo pip install matplotlib $ sudo python3 -m pip install matplotlib |
以下のようなスクリプトを実行して画像を保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
from datetime import datetime import pandas as pd # pandas を pd という名前でインポートする import matplotlib # 描画のバックエンドとしてデスクトップ環境が不要な Agg を使う matplotlib.use('Agg') import matplotlib.pyplot as plt def main(): # # 為替データの読み込み # オプション説明 # encoding :ファイルのエンコーディング # header :これより前の行は無視される # names :列の名前リスト # skiounitaialspace:Trueとすると、区切り文字の後に続くスペースを無視する # index_col :インデックスとして使用する列番号 # parse_dates :True にすると、インデックスに使用した列に対して日時としてのパースを試みる # df_exchange = pd.read_csv('exchange.csv', encoding='cp932', header=1, names=['date', 'USD', 'rate'], skipinitial space=True, index_col=0, parse_dates=True) # X軸の最小値 min_date = datetime(1973, 1, 1) # X軸の最大値 max_date = datetime.now() # 為替データ plt.plot(df_exchange.index, df_exchange.USD, label='dol-yen') # X軸の範囲を設定 plt.xlim(min_date, max_date) # Y軸の範囲を設定 plt.ylim(50, 300) # 凡例を最適な位置に表示 plt.legend(loc='best') # 画像を保存 plt.savefig('exchange_data.png', dpi=300) if __name__=='__main__': main() |
ターミナル上で画像を表示
eog は eye of gnome の略のようです。
1 |
$ sudo apt install eog |
以下のコマンドで画像を表示
1 |
$ eog exchange_data.png |
エラーが出て表示できませんでした。ちょっと調べたが原因わからずです。。
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused(eog:4466): Gtk-WARNING **: cannot open display:
参考書籍
これらの内容は、以下の書籍を参照しました。
関連記事
-
-
【Pandas】 DetaFrame の列ごとに演算する方法【Python】
今回は、DetaFrame の列ごとに平均や加算・減算なのど演算をし、結果を DetaFrame 型
-
-
【Python】pip3 で「cannot import name ‘main’」エラーが出たときの対処法。
Python でライブラリをインストールする際に、pipを使います。 Python2 と Py
-
-
【Python】Wikipedia のデータセットを取得し、文章を抽出する方法。
Wikipedia のデータセットを取得し、Python のライブラリを用いて文章を抽出する方法を紹
-
-
【Pandas】 DataFrame のインデックスを置き換える方法【Python】
今回は、Pandas の DataFrame型で、インデックス(index)を分かりやすいものに置き
-
-
【Spyder】引数のあるスクリプトを実行する方法。
Python の統合開発環境(IDE)である Spyder では、簡単にスクリプトを実行できます。
-
-
【Python】プログレスバーを表示させる【tqdm】
Python でスクリプトの実行時間が長くなると、進捗状況が知りたくなったので、標準出力にどのくらい
-
-
【matplotlib】 Python でヒストグラムの横軸と棒(ビン)の数を調整する方法。
Python の matplotlib を使ってヒストグラムを描画し、横軸の目盛りと棒(ビン)がそろ
-
-
【Google Colaboratory】クラウド上でPythonを使って機械学習を行う。
Python をブラウザ上で実行して、手軽に機械学習ができる環境「Google Colaborato
-
-
【Python】 Series 型を dict(辞書型)に変換する方法。
Python で Series 型を dict(辞書型)に簡単に変換する方法を紹介します。 「
-
-
【Pandas】 DataFrame の行を抽出する方法【Python】
今回は、Python の Pandas で、DataFrame 型の行を抽出する方法を紹介します。