value_counts()の結果を円グラフにする方法を説明します。 分析にはほとんど使わない円グラフですが、プレゼン資料では大活躍です。 更に、一つのパイ切れを引っ張り出して強調する方法も説明します。 


チートシート

やりたいこと コーディング
value_counts()の結果を円グラフの
ソースデータにする
pie = df['Col'].value_counts()
df_pie = pd.DataFrame(pie)
インデックスラベルをシリーズオブジェクトで受ける  labels = df_JobRole.index.tolist()

'Col' : 任意の列名 labels: ラベル名のシリーズオブジェクト


今回のデータについて

  1. df[‘JobRole’].value_counts() した結果をデータフレームにします
  2. df.shape => 9 x 1 に集約しています。 データフレーム名 df_JobRole
  3. インデックスは各JobRole名になります。

サンプルデータセットについての記事で紹介しているHRデータです。 1470行 x 35列のサイズがあります。

df_JobRole

サンプルオペレーション

デフォルトの0から始まるインデックスをラベルインデックスに変更します。

1
2
# JobRole の各要素数を`value_counts()`で取る
df['JobRole'].value_counts()

結果は以下のとおりです。

Sales Executive              326
Research Scientist           292
Laboratory Technician        259
Manufacturing Director       145
Healthcare Representative    131
Manager                      102
Sales Representative          83
Research Director             80
Human Resources               52
Name: JobRole, dtype: int64

円グラフ用のデータフレームを作成します。 インデックスをJobRole名にします。

1
2
3
4
# JobRole の各要素数を`value_counts()`で取る
JobRole = df['JobRole'].value_counts()
df_JobRole = pd.DataFrame(JobRole)
df_JobRole

結果は、以下のとおりです。

df.shape

円グラフを作図します

1
2
3
4
5
6
7
# Year of Month でインデックスする
sizes = df_JobRole['JobRole']
labels =  df_JobRole.index.tolist()
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=0)
ax1.axis('equal')
plt.show()

df.shape

これだけでも十分ですが、プレゼン用にLabratory Technician だけ少し引っ張り出して強調させて見ましょう。

1
2
3
4
5
6
7
sizes = df_JobRole['JobRole']
labels =  df_JobRole.index.tolist()
explode = (0,0,0.1,0,0,0,0,0,0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=0, explode=explode, shadow=True)
ax1.axis('equal')
plt.show()

df.shape

line by line で解説します。

  1. JobRole をdf_JobRole のデータフレームから取り出し、変数sizes に代入します。sizesはシリーズオブジェクトです
  2. 変数labesにインデックス(JobRole名)を代入します。lablesもシリーズオブジェクトです
  3. 変数explodeに各pie ピースのうち、explode(引っ張ってくる)pieピースに0.1を与える配列を定義します。
  4. plt.subplot()に入れる変数を定義します
  5. 円グラフの本体axiにpieの大きさ、ラベル、pieの中に記入する%のフォーマット等を設定します
  6. ax1の均等スケーリング equal を指定します
  7. おまじないの作図命令

ついでに、棒グラフは以下のとおりです。 仲間内にはこのグラフで十分かと思います。 これは、ラベルでインデックスして plt.bar で棒グラフ化するの記事で紹介している方法です。

1
df_JobRole.plot.bar()

df.shape

参照ページ一覧

以下のページ(本サイト内及び外部サイト)も参照してください。

1) df.value_counts() の結果をパワポ用にビジュアル化する
2) 日本語対応した matplotlib 2軸グラフ
3) クロス集計表とヒートマップでデータセットを理解する
4) matplotlib_documentation

ひとこと

データの集約化から可視化へのワークフローを確立することをおすすめします。データ解析自体より意外と時間と手間のかかるまとめのプレゼン資料作成がぐんと楽になります。