df['列名'].value_counts()はデータセットの理解のはじめの一歩として必ず使うcodeの一つです。 今回は、この結果を報告用にビジュアル化してそのまま、パワポに画像貼り付けするためのHint&Tipsをブログにしてみました。

サンプルデータセット

サンプルデータセットは以下のようなデータフレームです。 サンプルとして135行x 1列でその列名には、「問2 フリーワードで検索できるシステムは必要だと思いますか。」という質問項目がそのまま列名となっている列が一つだけとその値がラベル名で与えられています。 ラベル名は

  1. 必要である
  2. どちらかといえば、必要である
  3. どちらかといえば、不要である
  4. 不要である

の4種類です。 問2 のアンケートの結果のデータフレームでアンケートの問いが列名となって要素として各々のラベル名で入っているとします。

merge_left

各々のラベルの要素数を調べる

各々のラベルの要素の数を調べるには、以下のCodeで一発で分かります。

1
df.value_counts()

結果は以下のようになりました。 アンケートの単純集計であれば、問2の質問の内容と各々のラベルの数で十分な場合があります。

問2 フリーワードで検索できるシステムは必要だと思いますか
必要である                             80
どちらかといえば必要である                    44
不要である                              8
どちらかといえば不要である                     3
dtype: int64

報告用に整形する方に手間取る

このJupyter Notbookの出力結果をそのまま画面ショットを撮るなどして報告用としてもいいですが、すると度数がズレていたりして、たった一発のコマンド結果なのに、それをEXCELやパワポの表に整形する方に手間がかかったりすることがままあります。

この場合も以下のが画面ショットの結果です。

merge_left

報告用にデータフレームをPandas の機能で整形する

そこで以下のようなCode でデータフレームを整形してみましょう。 このCodeの目的はデータフレームを表のようにしてパワーポイントで画像を貼り付け使えるようにすることです。

1
2
3
4
5
6
7
8
9
col_name = '問2 フリーワードで検索できるシステムは必要だと思いますか。'

df[col_name].value_counts()
tab = df[col_name].value_counts()
tab = pd.DataFrame(tab)
tab = tab.rename_axis(col_name)
tab.rename(columns={col_name: '度数'}, inplace = True)

display(tab)

merge_left

円グラフにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt 
from pylab import rcParams
import japanize_matplotlib
sns.set(font='IPAGothic')
plt.rcParams['font.family']='IPAexGothic'
%matplotlib inline
rcParams['figure.figsize'] = 9,6

sizes = tab['度数']
labels = tab.index.tolist()
fix1, ax1 = plt.subplots()
colors = sns.color_palette('pastel')[0:5]
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=0, colors=colors)
ax1.set_title(col_name, pad=8, fontsize=14, color='blue')
plt.show()

ここまで、Jupyter Notebook でしておけば、報告用のパワポの作業が断然省力化できます。

index_join

おまけ 構成比率を追加しました

おまけとして、データフレームにも度数に加えて構成比を追加してみました。  format_dict = { '構成比': '{:.1%}'} で%表示にしています。 これも報告用に整形する際のマストアイテムですね。

1
2
3
4
5
6
7
8
9
df[col_name].value_counts()
tab = df[col_name].value_counts()
tab = pd.DataFrame(tab)
tab = tab.rename_axis(col_name)
tab['構成比'] = (tab[col_name] / tab[col_name].sum() )
tab.rename(columns={col_name: '度数'}, inplace = True)

format_dict = { '構成比': '{:.1%}'}
display(tab.style.format(format_dict))

index_join


参照ページ一覧

このブログと一緒にこのサイト内の以下のページも併せてご覧ください。

1) value_counts()の結果を plt.subplots()で円グラフ化する
2) 日本語対応した matplotlib 2軸グラフ
3) クロス集計表とヒートマップでデータセットを理解する