Python&Colab:matplotlib でレーダーチャートの画像を生成 & ダウンロード

Python&Colab:matplotlib でレーダーチャートの画像を生成 & ダウンロード

分析したデータを流し込んで、『レーダーチャートの画像』をたくさん生成する」という必要にせまられて作成したコード。手順と内容のメモ。Google Colab と matplotlib、pandas を使用。

※ Python3 で作成

2019年1月21日 追記
1.Google Colab の matplotlib で日本語フォントを使えるようにする」を修正しました。

Google Colab:matplotlib でレーダーチャートの画像を "たくさん" 生成&ダウンロード

  1. Google Colab の matplotlib で日本語フォントを使えるようにする
  2. 必要なモジュールを読み込む
  3. 作業するファイルを指定
  4. ファイルを Google Colab にアップロード
  5. レーダーチャートの画像を連続して自動生成 & ダウンロード

1.Google Colab の matplotlib で日本語フォントを使えるようにする

モジュールをひとつインストールするだけで良い。

Google Colab: Cell-1

!pip install japanize-matplotlib

目次へ

ここから下の手順は不要だが、知識としてとっておく。(うまく動作しないことがある)

まず、日本語フォントをインストール。

!apt-get -y install fonts-ipafont-gothic

次に、matplotlib のフォントキャッシュの場所を確認。

import matplotlib
  matplotlib.get_cachedir()

上記を実行すると、フォントキャッシュの場所が/root/.cache/matplotlibなどと返ってくる。ここにあるfontList.jsonというのがフォントキャッシュ。以下で消す。

rm /root/.cache/matplotlib/fontList.json

上記までが完了したところでランタイムをリスタートする。リスタートしたら、日本語フォントを指定して matplotlib を実行すれば良い。

まずは日本語フォントを宣言しておく。

jp_font = {'fontname':'IPAGothic'}

目次へ

2.必要なモジュールを読み込む

matplotlib.use('Agg')というのは、matplotlib で画像を生成するために必要なコード。

Google Colab: Cell-2

import matplotlib
matplotlib.use( 'Agg' )
import matplotlib.pyplot as plt
import japanize_matplotlib

import os ,csv
import urllib.request
import numpy as np
import pandas as pd

from math import pi
from google.colab import files

目次へ

3.使用するファイルを指定

使用するファイルの名称と、Google Colab にファイルをアップロードするときの「ダウンロード先URL」を宣言しておく。(ややこしいが Google Colab からみると「ダウンロード」している)

Google Colab: Cell-3

fileName = '●●●●.csv'
DL_Pass = 'https://●●●●●.com/●●●/'

もしくは、Google Colab に直接アップロードすることもできる。その場合はDL_Passは不要。削除して次の手順(4.ファイルを Google Colab にアップロード)を飛ばす。

Google Colab に直接ファイルをアップロード

目次へ

4.ファイルを Google Colab にアップロード

成功すればhttps://●●●●●.com/●●/●●●.csvをダウンロードしました。と表示されます。

Google Colab: Cell-4

def download_file( DL_Pass ,fileName ) :
    url = f'{ DL_Pass }{ fileName }'
    try : 
        urllib.request.urlretrieve( url, fileName )
        print(f'{ url }をダウンロードしました。')
    except Exception :
        print(f'{ url }のダウンロードに失敗しました。')
    
if __name__=='__main__' :
    download_file( DL_Pass ,fileName )

目次へ

5.レーダーチャートの画像を連続して自動生成 & ダウンロード

Google Colab: Cell-5

target_col = ['トレンド出現','トレンド継続','カウンティング','価格変動','窓','ヒゲ']
target_index = 'コード'

# グラフを作成する関数
def make_rader_graph_file( values ,categories ,angles ,graph_file_name ) :
    # グラフの初期化
    plt.figure()

    # レーダーチャートを作成
    ax = plt.subplot( 111, polar=True )

    # レーダーのスタートを12時の方向にし時計回りに描画していく 
    #(デフォルトは3時で反時計回り)
    ax.set_theta_offset( pi / 2 ) 
    ax.set_theta_direction( -1 ) 

    # x軸(中心から各頂点に向かう軸)の設定
    plt.xticks( angles[:-1] ,categories ,color='#424242' ,size=20 )
    #plt.xticks( angles[:-1] ,categories ,color='#424242' ,size=20 ,**jp_font )

    # y軸の設定
    ax.set_rlabel_position( 0 )
    plt.yticks( [50 ,80] ,["50" ,"80"] ,color="#424242" ,size=24 )
    #plt.yticks( [50 ,80] ,["50" ,"80"] ,color="#424242" ,size=24 ,**jp_font )
    plt.ylim( 20 ,100 )
    
    # 背景色と透過
    ax.patch.set_facecolor( 'white' )
    ax.patch.set_alpha( 0 )
    
    # グリットの設定
    ax.xaxis.grid( color='#424242' )
    ax.yaxis.grid( color='#BDBDBD' ,linestyle='dashed' )
    
    # グラフを描画
    ax.plot( angles ,values ,color='#ffab00' ,linewidth=5 ,linestyle='solid' )
    ax.fill( angles ,values ,color='#ffdd4b' ,alpha=0.3 )
    
    # グラフを画像として保存
    plt.savefig( graph_file_name ,bbox_inches="tight" ,facecolor=ax.get_facecolor() ,pad_inches=0.0 )

# メイン機能の関数
def make_dl_graphs() :
    DIR = os.getcwd()
    filePath = os.path.join( DIR ,fileName )
    df = pd.read_csv( filePath ,index_col=0 )
    df = df.reset_index().set_index( target_index )
    df = df.loc[ : ,target_col ]
    
    # データの数だけループ処理
    for symbol in df.index :
        graph_file_name = f'{symbol}'
        
        # レーダの項目と数
        categories = list(df)
        N = len(categories)

        # 角度の算出
        angles = [ n / float(N) * 2 * pi for n in range(N) ]
        angles += angles[ :1 ]
        
        # 各項目の数値を取得
        values = df.loc[ symbol ].values.flatten().tolist()
        values += values[ :1 ]
        
        # グラフを描画してダウンロード
        make_rader_graph_file( values ,categories ,angles ,graph_file_name )
        files.download( f'{graph_file_name}.png' )
        


if __name__=='__main__' :
    # 実行する
    make_dl_graphs()

必要なデータは以下のような構成のもの。

CSVのサンプル

コード,トレンド出現,トレンド継続,カウンティング,価格変動,窓,ヒゲ
6364,53,58,52,41,46,45
7268,52,51,52,60,17,62
2892,59,68,55,65,9,55
8387,42,43,42,48,53,52

実行結果は以下のようになる。グラフの数だけ画像が生成され、ブラウザを通してダウンロードされる。100ファイルの生成でも、問題なく動作した。

実行結果

目次へ

参考にしたサイト

Back to Top

最高のトレード環境を実現する「サクソバンク証券」

ボクが唯一つかっている取引会社です。

世界中のほとんどの市場に対応していて、日本株をCFDで取引すれば個別株とFXの損益を通算することもできます。何よりも、ひとつの口座に入金するだけですべての銘柄を取引できるのが本当に便利。

SaxoTraderGO
  • 「FX口座」150以上の通貨ペア
  • 「株価指数CFD口座」約250種類
  • 「個別株CFD口座」日米中など世界22カ国・34市場
  • 「バラエティCFD口座」債券やVIX、商品など約100種類
  • MT4にも対応!

Investment Tech Hack

Sorry... doesn't support your browser

To get the best possible experience using our site we recommend that you upgrade to a modern web browser. Investment Tech Hackではご利用中のブラウザサポートはしていません。
Internet Explorerのアップグレード行う、もしくはその他のブラウザを使用しての閲覧をお願いします。