Pythonでツリーマップを作成(feat. GNIデータ分析)
多くの人は、データの視覚化を通じて複雑な情報を直感的に理解することを好みます。 特に、ツリーマップ(treemap)は、このようなニーズを満たす良いツールです。

今回の記事では、Pythonでツリーマップを作る方法を説明し、それを使って2014年の国別国民総所得(GNI)を分析してみます。
ツリーマップとは?
ツリーマップは、階層的なデータを長方形の形で視覚化する方法です。 各 長方形のサイズはそのデータの値を表し、互いに その他の色でグループを区別することができます。
Pythonコードの説明
1.必要なパッケージのインストールとロード
Pythonでは パンダ, matplotlib, 二乗するそして rpy2 パッケージを使います。まず、必要なパッケージをインストールしてロードします。
import pandas as pd
matplotlib.pyplot を plt としてインポートします。
import font_manager, rc from matplotlib import font_manager, rc
import squarify
rpy2.robjects を robjects としてインポートします。
rpy2.robjects from rpy2.robjects import pandas2ri import panda2ri
# MacOSでハングルフォントを設定します。
font_path = '/Library/Fonts/Arial Unicode.ttf' # 実際のフォントファイルのパスに変更します。
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)
# 必要なパッケージのインストール(もしインストールが必要な場合)
# !pip install pandas matplotlib squarify rpy2
# Rpy2を利用したRパッケージのインストールとロード
robjects.r('install.packages("treemap", repos="http://cran.us.r-project.org")')
robjects.r('library(treemap)')- Pandas: Pythonでデータ分析のための高性能データ構造とデータ分析ツールを提供するライブラリです。DataFrameオブジェクトを通じてデータを簡単に操作して分析することができます。
- Matplotlib: Pythonでデータを様々な形で可視化できるライブラリです。プロット、グラフ、ヒストグラムなどを生成することができます。
- Squarify: ツリーマップを生成するPythonライブラリです。データの相対的な大きさを長方形の形で視覚化することができます。
- Rpy2: RとPythonをつなぐインターフェースで、RのデータセットをPythonで読み込むことができます。
2.データの読み込みと前処理
rpy2を利用して Rの ツリーマップ パッケージが提供してるGNI2014データセットを取り込んで前処理します。Pythonパッケージの中で使えるデータが見つからなかったので、Rパッケージからデータを借りてきました。
# Rデータをpandas DataFrameに変換します。
pandas2ri.activate()
# RのtreemapパッケージからGNI2014のデータセットを読み込む
robjects.r('data("GNI2014")')
GNI2014 = robjects.r('as.data.frame(GNI2014)')
GNI2014 = pandas2ri.rpy2py(GNI2014)
#上位25% GNI国にラベルを追加します。
GNI2014['label'] = GNI2014.apply(lambda x: x['country'] if x['GNI'] > GNI2014['GNI'].quantile(0.75) else '', axis=1)3.ツリーマップの作成
さあ 二乗すると matplotlibを使用してツリーマップを生成します。
# トリマップ生成
plt.figure(figsize=(12, 8))
colors = plt.cm.viridis(GNI2014['GNI'] / max(GNI2014['GNI']))
squarify.plot(sizes=GNI2014['GNI'], label=GNI2014['label'], color=colors, alpha=.8)
plt.axis('off')
plt.title('GNI 2014 データセットトリマップ', fontsize=20)
plt.suptitle('国別国民総所得(GNI)比較', fontsize=16)
plt.show()成果物の解釈
上記のコードを実行すると、ポスト上部のように、国別のGNIを直感的に比較できるツリーマップを得ることができます。 各長方形の大きさは、その国のGNIを示し、色はGNIの値によって異なります。
よくある質問
- Pandasを使うと何ができますか?
- Pandasは、データフレームを介してデータを読み取り、書き込み、操作、分析することができます。CSVファイルを読み込んだり、データの特定の列を選択するなどの作業を簡単に行うことができます。 - Matplotlibと他の可視化ライブラリの違いは何ですか?
- Matplotlibは非常に柔軟性が高く、様々なタイプのプロットを作成することができますが、初心者には使い方が複雑になる可能性があります。SeabornはMatplotlibをベースにしてよりシンプルな可視化を提供し、Plotlyはインタラクティブなグラフを簡単に作成することができます。 - Squarifyはどのような場合に役立ちますか?
- Squarifyはツリーマップを作成するときに便利です。ツリーマップはデータを直感的に比較するのに役立ち、特に階層的なデータや比較を視覚的に明確に表現するのに役立ちます。 - Treemapライブラリは何を提供していますか?
- Treemapライブラリはツリーマップ可視化のためのデータセットを提供し、例題データで練習することができます。ここではload_gni2014関数を使って2014年のGNIデータをロードしました。 - ツリーマップを作成する際、各矩形の色を異なる色に設定するにはどうすればよいですか?
- SquarifyとMatplotlibを一緒に使用して色を設定することができます。 plt.cm.viridisのようなcolormapを使用してデータ値に応じて色を指定することができます。 - データ前処理でapply関数は何をするのですか?
- apply関数はデータフレームの各行または各列に関数を適用することができます。ここでは、各国のGNIが上位25%に該当する場合、国名をラベルとして追加するために使用されました。
全体のコードと仕上げ
最後に、全体のコードをまとめてみます。
import pandas as pd
matplotlib.pyplot を plt としてインポートします。
import font_manager, rc from matplotlib import font_manager, rc
import squarify
rpy2.robjects を robjects としてインポートします。
rpy2.robjects from rpy2.robjects import pandas2ri import panda2ri
# MacOSでハングルフォントを設定します。
font_path = '/Library/Fonts/Arial Unicode.ttf' # 実際のフォントファイルのパスに変更します。
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)
# 必要なパッケージのインストール(もしインストールが必要な場合)
# !pip install pandas matplotlib squarify rpy2
# Rpy2を利用したRパッケージのインストールとロード
robjects.r('install.packages("treemap", repos="http://cran.us.r-project.org")')
robjects.r('library(treemap)')
# Rのデータをpandas DataFrameに変換します。
pandas2ri.activate()
# RのtreemapパッケージからGNI2014のデータセットを読み込みます。
robjects.r('data("GNI2014")')
GNI2014 = robjects.r('as.data.frame(GNI2014)')
GNI2014 = pandas2ri.rpy2py(GNI2014)
#上位25% GNI国にラベルを追加します。
GNI2014['label'] = GNI2014.apply(lambda x: x['country'] if x['GNI'] > GNI2014['GNI'].quantile(0.75) else '', axis=1)
# トリマップ生成
plt.figure(figsize=(12, 8))
colors = plt.cm.viridis(GNI2014['GNI'] / max(GNI2014['GNI']))
squarify.plot(sizes=GNI2014['GNI'], label=GNI2014['label'], color=colors, alpha=.8)
plt.axis('off')
plt.title('GNI 2014 データセットトリマップ', fontsize=20)
plt.suptitle('国別国民総所得(GNI)比較', fontsize=16)
plt.show()
この記事では、Pythonを使ってツリーマップを作成する方法を学びました。 このような可視化技術を活用することで、データをより効率的に分析し、伝達することができます。今後、より多くのデータ可視化技術を探求してみましょう!
もし、PythonじゃなくてRを使って同じように視覚化をした過程や結果が気になる方は Rでtreemapを可視化する:GNI 2014データセットを活用した国別国民総所得(GNI)比較 ポストをご覧ください。





