どうも、月見(@Suzuka14144156)です。
今回は、Pythonでヒートマップをバブルチャートで示す方法を解説します。
今回作れるようになるグラフはこのようなイメージです。
横軸が、年数で縦軸が会社。
例えば、よくあるのが各社特許を何年のよく出願しているかを示すグラフです。
ヒートマップでいいのでは?
- 結論、ヒートマップでもいい
- しかし、例えば特許分析の世界だと、これをバブルチャートで示す文化がある
- なので、バブルチャートで示すニーズは少々ある。(分かりやすい。見やすい。)
import seaborn as sns
sns.heatmap(df)
なので、Pythonでバブルチャートで本チャートを示す方法を解説します。
ヒートマップをバブルチャートで示すための環境の構築
今回は、Jupyte Labを用います。
Juptrer Labのインストール
インストール方法は以下2種類ある。
- どちらでもOKです
ただ、Anacondaをインストールする方が時間がかかるのでお急ぎの方は、「JupyterLabを直接インストール」がオススメ。
Anacondaをインストール
以下の記事を参考にしてください。
Python Anacondaとは?|インストール〜Jupyter Notebookの立ち上げ
JupyterLabを直接インストール
コマンドプロンプトから、以下のコードを入力ください。
pip install jupyterlab
JupyterLabの起動
以下に示すように、コードと同じフォルダに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
ヒートマップをバブルチャートで示すためのコード
- 1csvデータの読み込み
- 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はオンライン口座です。
一度購入すれば、ずっと閲覧できるのでオススメです。
まとめ
この記事では、Pythonでヒートマップをバブルチャートで示す方法を解説しました。
コメント