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

abbamboo

タカハシ / 7年目の兼業トレーダー

このブログの目的は、「学習の備忘録」と「アウトプットして理解を深めること」。「トレードで稼ぐために学んだこと」を徹底的に公開していきます。

元・日本料理の板前、現・金融畑のウェブ屋さん
保有資格:証券外務員1種、認定テクニカルアナリスト

更新のお知らせは、各SNSやLINEで。LINEだと1対1でお話することもできます!

>> このブログと著者についての詳細
>> 使っているツールの紹介

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のアップグレード行う、もしくはその他のブラウザを使用しての閲覧をお願いします。