Python(Pandas)でデータの特徴を出力するコードを紹介【R言語のSummary()ライク】

4 min

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

Pandas では describe() で基本統計量が出力出来ますが、質的データに関してはやや情報が不足していることありませんか?(R言語のSummary()関数のようにもう少しだけ情報が出力されれば・・)

本記事では、describe() を補完する形で、

質的データの変数毎に各値ごとの「件数・割合・割合の累積和」を出力するメソッドを紹介します。

本記事を最後まで読むと1行でデータの特徴を出力する方法が解ります。

広告_零号機

データの特徴(基本統計量や頻度)を出力するサンプルコード

出力イメージ

量的データと質的データが混在する DataFrame に対して、量的データは基本統計量を、質的データは件数・割合・割合の累積和を出力することが出来ます。

コード

下記コードを Google Colaboratory のセルにコピペして実行することで直ぐに使えます。

import pandas as pd

def pySummary(_df:pd.core.frame.DataFrame):
  vnames = [name for name in globals() if globals()[name] is _df]
  if len(vnames) > 0:
    print(f"★★★★ [{vnames[0]}]データフレームのSummaryを出力 ★★★★")

  try:
    print("★ 量的データ")
    print(_df.describe())
    print("")
  except:
    print("※数値変数なし")
    print("")

  try:
    print("★ 質的データ")
    print(_df.describe(exclude="number"))
    print("")
    # 質的データのみを対象
    for i in _df.describe(exclude="number").columns:
      print(f"■[{i}]")
      if len(_df[i].value_counts()) > 10:
        # データ件数が多い場合、上位5件と下位5件のみ表示
        print("-- 先頭(5件) --")
        print(pd.concat(
            [
            _df.rename(columns={i: "counts"})["counts"].value_counts(ascending=False).head(5), 
            _df.rename(columns={i: "normalize"})["normalize"].value_counts(ascending=False, normalize=True).head(5),
            _df.rename(columns={i: "cumsum"})["cumsum"].value_counts(ascending=False, normalize=True).cumsum().head(5)
            ], axis=1)
        )
        print("-- 末尾(5件) --")
        print(pd.concat(
            [
            _df.rename(columns={i: "counts"})["counts"].value_counts(ascending=False).tail(5), 
            _df.rename(columns={i: "normalize"})["normalize"].value_counts(ascending=False, normalize=True).tail(5),
            _df.rename(columns={i: "cumsum"})["cumsum"].value_counts(ascending=False, normalize=True).cumsum().tail(5)
            ], axis=1)
        )
      else:
        # データ件数の多い順
        print(pd.concat(
            [
            _df.rename(columns={i: "counts"})["counts"].value_counts(ascending=False), 
            _df.rename(columns={i: "normalize"})["normalize"].value_counts(ascending=False, normalize=True),
            _df.rename(columns={i: "cumsum"})["cumsum"].value_counts(ascending=False, normalize=True).cumsum()
            ], axis=1)
        )
      print("")

  except:
      print('※質的データなし')
      print("")

  return

使用例

社会科学のためのデータ分析」で用いられているオープンデータセットでの使用例を紹介します。

使用例①:最低賃金と失業率の調査のデータセット

df_minwage = pd.read_csv('https://raw.githubusercontent.com/kosukeimai/qss/master/CAUSALITY/minwage.csv')
pySummary(df_minwage)

使用例②:労働市場における人種差別の調査のデータセット

df_resume = pd.read_csv('https://raw.githubusercontent.com/kosukeimai/qss/master/CAUSALITY/resume.csv')
pySummary(df_resume)

「firstname」カラムの値が多いため、「件数・割合・割合の累積和」に関しては先頭・末尾それぞれ5件のみ出力しています。

まとめ

本記事では、describe() を補完する形で、質的データの変数毎に各値ごとの「件数・割合・割合の累積和」を出力するメソッドを紹介しました。

一つ一つ丁寧に確認したい方は下記記事をご覧ください。

ご参考になりましたら 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