今回はPython外部ライブラリのPandasとMatplotlibを使用して円グラフとドーナッツグラフを描画していきたいと思います。
データ分析ではよくカテゴリーデータを扱うことが多いので、各カテゴリーごとの総数を調べたり比率などを円グラフとして描画していきます。
実行環境 |
---|
Windows Subsystem for Linux |
Python 3.6.9 |
pip 9.0.1 |
使用ライブラリ | ライセンス |
---|---|
matplotlib==3.1.1 | PSF |
pandas==1.0.0 | BSD |
pipを使用してインストールします。
※ここでは「使用ライブラリ」のバージョンで実装します
$ pip install matplotlib pandas
カテゴリカルなデータを準備したら、PandasのSeriesもしくわDataFrameにそれぞれ格納して各カテゴリー要素の数を調べていきます。
Seriesに格納する場合はリストもしくわタプルで渡します。
import pandas as pd
data = ['cat', 'monkey', 'cat', 'dog', 'dog', 'monkey', 'human', 'cat', 'dog', 'cat', 'cat']
ser = pd.Series(data)
ser
0 cat
1 monkey
2 cat
3 dog
4 dog
5 monkey
6 human
7 cat
8 dog
9 cat
10 cat
dtype: object
value_countsを使用してカテゴリーごとの数を取得します。
ser.value_counts()
cat 5
dog 3
monkey 2
human 1
dtype: int64
カテゴリーネームとカテゴリーの値をそれぞれ取得します。
※リストにしているのは見やすくしているだけなので、無くても取得できます。
print(list(ser.value_counts().index))
print(list(ser.value_counts()))
# ['cat', 'dog', 'monkey', 'human']
# [5, 3, 2, 1]
次にDataFrameに格納した際の例ですが、ほぼ同じです。
先ほどSeriesに渡したリストのデータを、辞書型のCategoryキーに格納してDataFrameに渡します。
dict_data = {'Category': data}
df = pd.DataFrame(dict_data)
df
Category
0 cat
1 monkey
2 cat
3 dog
4 dog
5 monkey
6 human
7 cat
8 dog
9 cat
10 cat
カテゴリー要素のカラム名を指定してvalue_countsで各要素を取得します。
df['Category'].value_counts()
cat 5
dog 3
monkey 2
human 1
Name: Category, dtype: int64
カテゴリーネームとその要素をそれぞれ取得します。
※リストにしているのは見やすくしているだけなので、無くても取得できます。
print(list(df['Category'].value_counts().index))
print(list(df['Category'].value_counts()))
# ['cat', 'dog', 'monkey', 'human']
# [5, 3, 2, 1]
それぞれ円グラフの描画に必要な要素を取得することができたので、さっそくMatplotlibを使用していきます。
Matplotlibで円グラフを描画するには、「pie」オブジェクトに要素を渡します。
公式サイトでも幾つかサンプルコードがあるので参照してみてください。
ライブラリをインポートして、最初は基本的な円グラフを描いてみます。
カテゴリーデータは先ほど準備したDataFrameの方を使用します。
import matplotlib.pyplot as plt
sizes = df['Category'].value_counts() # まとまったカテゴリーの要素
labels = df['Category'].value_counts().index # カテゴリーネーム
plt.figure(figsize=(10, 8)) # グラフ自体のサイズ(幅、高さ)
plt.pie(
sizes,
labels=labels,
counterclock=False, # 時計回りに比率が高い順の設定
startangle=90, # 表示のアングルを調整
)
plt.title('Pie Chart', fontsize=25) # グラフタイトル
#plt.savefig('Circle_1.png') # グラフイメージを保存
plt.show() # グラフを表示
基本的な円グラフは描けたかと思います。
続いて、pieオブジェクトのパラメータを少し変更して、比率の表示、ラベル(テキスト)のサイズ、凡例枠、円の影、半径のサイズ等を設定してドーナッツ型のグラフを描画してみます。
plt.figure(figsize=(10, 8))
plt.pie(
sizes,
labels=labels,
counterclock=False,
startangle=90,
autopct='%1.1f%%', # 比率の表示
wedgeprops=dict(width=0.5, edgecolor='w'), # widthで半径のサイズ、edgecolorで境界線の色指定
shadow=True, # 円の影
)
plt.rcParams['font.size'] = 25 # ラベルテキストのサイズ設定
plt.legend(fontsize=15) # 凡例枠の設定
plt.title('Pie Chart', fontsize=40)
#plt.savefig('Circle_2.png') # グラフイメージを保存
plt.show()
他にも様々な設定ができるので、公式ドキュメントをご参照してみて下さい。
今回はPandasのデータ構造からカテゴリーデータを取得し、円グラフを描画してみました。
それでは以上となります。
最後までご覧いただきありがとうございました。