【Python】Pandas で取得した Ticker を使ってチャートを描画する
おはようございます。
前回に引き続き、Ticker 情報を利用してあれこれ試していきたいと思います。
今回は、matplotlib を使ってチャートを描画してみます。
プログラムは前回のものを流用します。
【Python】Pandas を使って MySQLのデータを読み込む
スポンサーリンク
パッケージ追加
matplotlib のパッケージをインストールします。
上部メニューの「File」>「Default Settings」を選択します。
Default Setting画面が表示されるので、右上の対象プロジェクト環境を今回作成した環境に変更し、右側にある「+」ボタンをクリックします。
パッケージ検索画面で、「matplotlib」と検索します。
一覧に表示された「matplotlib」を選択して「Install Package」ボタンをクリックします。
プログラムの修正
インポート宣言の追加
BfTool.py
import matplotlib.pyplot as plt import pandas as pd
データ取得処理の追加
BfTool.py
class GetTicker(RequestHandler): """ ティッカー情報を取得 """ def initialize(self): logging.info("GetTicker [initialize]") def post(self): logging.info("GetTicker [post]") # ティッカー情報の取得 mysql = MySQLUtil() df = mysql.convert_table_to_df() # 最終取引価格を浮動小数点に変換 df['LTP'] = df['LTP'].astype("float") # 取引日時の型を変換 df['TIME_STAMP'] = pd.to_datetime(df['TIME_STAMP']) # 取引日時をインデックスに設定 df.set_index('TIME_STAMP', inplace=True) """ 1分毎のデータを抽出 freq="H" 時間 freq="T" or "min" 分 freq="S" 秒 freq="5T" 5分 """ span = pd.date_range('2018-04-12 00:00:00', periods=1000, freq="T") df = df[df.index.isin(span)] # 同じ日時のデータがある場合は、そのうちの最大値をとる grouped = df.groupby("TIME_STAMP") df = grouped.max() # プロットの設定 df["LTP"].plot(legend=True, figsize=(10, 6)) plt.xticks(df.index) plt.xlabel("日時 TIME_STAMP") plt.ylabel("最終取引価格 LTP") plt.show() self.write(df.to_json(orient="records"))
起動してみる
起動して「取得」ボタンをクリックすると「matplotlib」のビューアが立ち上がり、チャートが表示されます。
よく見てみると、Y、X軸のラベルが文字化けしてしまっています。
「matplotlib」にはデフォルトで日本語が表示できるフォントがないようなので、
別途フォントをインストールして文字化け解消してみます。
プロットの文字化け解消
フォントのダウンロード
次のURLからフォントファイルをダウンロードします。
「IPAexフォント Ver.xxxx」をクリックします。
IPAex ゴシックのリンクをクリックしてダウンロードします。
フォントファイルの配置
ダウンロードした「ipaexg.ttf」を次のディレクトリにコピーします。
ディレクトリ:
[プロジェクトホーム]\venv\Lib\site-packages\matplotlib\mpl-data\fonts\fonts\ttf\
リソースファイルの修正
次のファイルを、ユーザー設定のディレクトリにコピー
ファイル:
[プロジェクトホーム]\venv\Lib\site-packages\matplotlib\mpl-data\matplotlibrc
格納先:
C:\Users\[user_name]\.matplotlib\
コピーしたファイルに次の記述を追加
matplotlibrc
font.family : IPAexGothic
再度起動してみる
無事に文字化けが解消されました。
該当する時間の本家のチャートを見ると、なんとなく合ってそうですね。笑
まとめ
とりあえずは matplotlib 付属の画面に表示しましたが、そのうちブラウザで表示できるようにしたいですね。
とりあえず次回は別のチャートもやってみようと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません