[Python]Pandasでクロス集計表にNaNの割合を出力する方法【サンプルコードあり】【地味に嬉しい】

2 min

データ分析はデータの特徴を捉えるところから始めます

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 でシェアして頂ければ幸いです。

広告_零号機-エリア2
kewton

kewton

大学院卒業後、某大手SIerで10年以上SEとして従事。
社会人3年目までに基本情報・応用情報技術者、データベーススペシャリスト、簿記3級・2級を取得。
基幹系システム・IoTシステム開発のプロジェクト経験多数。AI活用システムの企画・プロト開発経験あり。
強みは、プロマネだけでなく自身で開発も実施してきたこと。
【扱える言語】
C#、java、python、javascript、Excel VBA
【扱えるDB】
oracle、sql server、postgreSQL、mongoDB

FOLLOW

関連記事

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA