Pandas では少しの工夫で特徴を捉えるためのデータを出力することが出来ます。
特に、クロス集計表は便利な機能で質的データの割合を確認するのによく使います。
多くのデータには欠損値(PandasではNaN)が含まれますが、デフォルトでは欠損値(NaN)を除いて集計しているので、無回答の割合が解りません。
そこで、本記事では、Pandas の クロス集計表にNaNを含める方法を紹介します。
本記事を最後まで読むと1行でNaNを含むクロス集計表を出力する方法が解ります。
NaNを含めてクロス集計するサンプルコード(Colab で利用可能)
出力イメージ
クロス集計表に<NaN>という項目を追加し NaN の割合を出力します。
コード
下記コードを Google Colaboratory のセルにコピペして実行することで直ぐに使えます。
import pandas as pd
def pyCrosstabDispNaN(_df:pd.core.frame.DataFrame, _rowname, colnames):
# NaNを考慮するために、Nan を <NaN> という文字列に置換してからクロス集計を実施
print(pd.crosstab(_df[_rowname].fillna('<NaN>'), _df[colnames].fillna('<NaN>'), margins=True, normalize=True))
return
使用例
「社会科学のためのデータ分析」で用いられているオープンデータセットでの使用例を紹介します。
使用例:戦時における民間人の被害を測定する
取得したデータの「violent.exp.ISAF」カラムと「violent.exp.taliban」カラムのNaNを考慮したクロス集計表を出力します。
df_afghan = pd.read_csv('https://raw.githubusercontent.com/kosukeimai/qss/master/MEASUREMENT/afghan.csv')
pyCrosstabDispNaN(df_afghan, "violent.exp.ISAF", "violent.exp.taliban")
violent.exp.ISAF | 回答者がISAFから暴力を受けた経験 |
violent.exp.taliban | 回答者がタリバンから暴力を受けた経験 |
クロス集計表からわかること
- 無回答率はいずれも2%未満
まとめ
本記事では、Pandas の クロス集計表にNaNを含める方法を紹介しました。
データ分析に関して、一つ一つ丁寧に確認したい方は下記記事をご覧ください。
ご参考になりましたら twitter をフォローして SNS でシェアして頂ければ幸いです。