Python

【Python】ヒートマップをバブルチャートで示す方法【特許マップ】

Python

どうも、月見(@Suzuka14144156)です。

今回は、Pythonでヒートマップをバブルチャートで示す方法を解説します。

今回作れるようになるグラフはこのようなイメージです。

横軸が、年数で縦軸が会社。

例えば、よくあるのが各社特許を何年のよく出願しているかを示すグラフです。

ヒートマップでいいのでは?

  • 結論、ヒートマップでもいい
  • しかし、例えば特許分析の世界だと、これをバブルチャートで示す文化がある
  • なので、バブルチャートで示すニーズは少々ある。(分かりやすい。見やすい。)
import seaborn as sns
sns.heatmap(df)

なので、Pythonでバブルチャートで本チャートを示す方法を解説します。

ヒートマップをバブルチャートで示すための環境の構築

今回は、Jupyte Labを用います。

Juptrer Labのインストール

インストール方法は以下2種類ある。

  1. Anacondaをインストール
  2. JupyterLabを直接インストール
月見
月見
  • どちらでもOKです

ただ、Anacondaをインストールする方が時間がかかるのでお急ぎの方は、「JupyterLabを直接インストール」がオススメ。

Anacondaをインストール

以下の記事を参考にしてください。

JupyterLabを直接インストール

コマンドプロンプトから、以下のコードを入力ください。

pip install jupyterlab

JupyterLabの起動

以下に示すように、コードと同じフォルダにdata.csvを格納してください。

data.csv

以下からダウンロード可能です。

以下のようにcmdと入力すると、カレントディレクトリとしてdata.csvを格納した場所を開くことが可能です。

コマンドプロンプトから、以下のコードを入力ください。

jupyterlab

以下赤枠のアイコンをクリック。

これで起動します。

ライブラリのインストール

使用するライブラリ
  • pandas:データ処理
  • numpy:配列処理
  • matplotlib:可視化
  • japanize-matplotlib:可視化の日本語対応

pandasのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install pandas

numpyのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install numpy

matplotlibのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install matplotlib

japanize-matplotlibのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install japanize-matplotlib

ヒートマップをバブルチャートで示すためのコード

流れ
  • 1
    csvデータの読み込み
  • 2
    データの前処理
  • 3
    可視化

csvデータの読み込み

import pandas as pd

df = pd.read_csv('data.csv',index_col=0)
df

このデータの形からは、ヒートマップを描くことができます。

しかし、バブルチャートで示す場合は、散布図にする必要があるため、データの形式を変える必要があります。

データの前処理

#リスト作成
list_1 = []
list_2 = []
list_3 = []

#リストにデータを格納
for i in range(len(df)):
    for j in range(len(df.columns)):
        list_1.append(df.index[i])
        list_2.append(df.columns[j])
        list_3.append(df.iloc[i,j])

#データフレーム化
list_1 = pd.DataFrame(list_1)
list_2 = pd.DataFrame(list_2)
list_3 = pd.DataFrame(list_3)

#連結
all_df = pd.concat([list_1,list_2,list_3],axis=1)
all_df

可視化

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm
import japanize_matplotlib

#データをアサイン
x = all_df.iloc[:,1]
y = all_df.iloc[:,0]
sizes = all_df.iloc[:,2]
categories = list(set(y))

# 色マップを作成
colors = cm.rainbow(np.linspace(0, 1, len(categories)))
colors = {categories[i]: colors[i] for i in range(len(categories))}
colors = [colors[item] for item in y]

# 散布図を作成
fig, ax = plt.subplots()
plt.grid()   
ax.scatter(x, y, s=sizes, c=colors)

# 散布図に数値を表示
for i, txt in enumerate(sizes):
    ax.annotate(txt, (x[i], y[i]), textcoords="offset points", xytext=(1,1), ha='left', va='bottom')

#xラベルを60度回転
plt.xticks(rotation=60)

# 図を表示
plt.show()

バブルチャートの色の変更方法

# 色マップを作成
colors = cm.tab20c(np.linspace(0, 1, len(categories)))
# 色マップを作成
colors = cm.jet(np.linspace(0, 1, len(categories)))
# 色マップを作成
colors = cm.Pastel1(np.linspace(0, 1, len(categories)))

本記事の関連の参考書や講座

基本的なPythonのコード知識を学ぶには、以下の書物がオススメです。

Udemy

Udemyはオンライン口座です。

一度購入すれば、ずっと閲覧できるのでオススメです。

【世界で8万人が受講:Python for Finance】Pythonを使って学ぶ現代ファイナンス理論と実践
ポートフォリオ理論、コーポレートファイナンス、資本資産評価モデル(CAPM)、デリバティブの値決め、モンテカルロシミュレーションといった内容を中心に、Pwcなどで活躍した講師が理論と実践に基づき解説します。

まとめ

この記事では、Pythonでヒートマップをバブルチャートで示す方法を解説しました。

コメント

タイトルとURLをコピーしました