「”すぐ” このデータまとめて欲しい」に ”すぐ”に超簡単に応えられる Python の・・・(その5)


~手元データの要約、視覚化を超簡単に実現して、探索的データ解析(EDA)しよう(DataPrep編)~

はじめに

 
「”すぐ” このデータまとめて欲しい」に ”すぐ”に超簡単に応えられる Python の・・・ と題し、

「おい、悪いが”すぐに”このデータまとめてくれ」

に応えるための探索的データ分析(EDA)ツールを、これまでに4つ紹介しました。

今回紹介するのは、DataPrepという名のEDA。
この手のAutoEDAツールでは、PandasProfiling(以下参照)が一番ポピュラーではないかと思いますが、

DataPrepは、よりインタラクティブで、しかも処理がめちゃくちゃ速いので、個人的には一番のおすすめです。

この記事で紹介するDataprepについて

DataPrep.EDAは、Pythonで最も速く、最も簡単なEDA(Exploratory Data Analysis)ツールです。数行のコードで美しいプロファイルレポートを作成することができます。
このライブラリは、公式のGithub に公開されているDemo in Colab をベースに ①外部ファイルの読込み、②フォームによるカラム設定、③日本語化 を図ったものです。

データについて

  1. csvデータの表形式は以下としてください。
列1 列2 列3 列4 列5 列6
data data data data data
data data data data data
  • [注意] csvデータは文字コードを「UTF-8」としてください。

実行手順

  1. メニューバーの「ランタイム」から「すべてのセルを実行」をクリック。
  2. ライブラリインストール完了後、[ファイル選択] を促されるので、クリックしてデータ(csvファイル)を指定する。
  3. Google colabのフォーム機能を利用し、分析を行うカラムを番号で指定できるようにしています。指定番号変更後は該当のセルを再実行してください。

 

実行条件など

Google colabで実行
Titanicのデータセットで実行

ライブラリのインストールおよびインポート

Python
!pip install -U git+https://github.com/sfu-db/dataprep.git@develop --quiet
Python
# ライブラリのインポート
from dataprep.eda import *
from dataprep.datasets import load_dataset
from dataprep.eda import plot, plot_correlation, plot_missing, plot_diff, create_report
import pandas as pd
import warnings # 実行に関係ない警告を無視
warnings.filterwarnings('ignore')

ファイル読込み

Python
#@title ファイルを指定してください
from google.colab import files
uploaded = files.upload()

if len(uploaded.keys()) != 1:
    print("アップロードは1ファイルにのみ限ります")
else:
    target = list(uploaded.keys())[0]

df = pd.read_csv(target)

プロファイルレポート作成

create_report() で、データセットの包括的なプロファイルレポートを生成します。 このレポートには、以下の情報が含まれています。

  • 概要:データフレーム内の列の種類を検出する
  • 変数:変数の種類、ユニークな値、distint count、欠損値
  • 最小値、Q1、中央値、Q3、最大値、範囲、四分位範囲などの四分位統計量
  • 平均値、最頻値、標準偏差、総和、中央値絶対偏差、変動係数、尖度、歪度などの記述統計量
  • 長さ、サンプル、レターなどのテキスト分析
  • 相関関係:相関の高い変数のハイライト、スピアマン、ピアソン、ケンドール行列
  • 欠損値:欠損値の棒グラフ、ヒートマップ、スペクトル
Python
#@title プロファイルレポート
create_report(df)

** ↓ 以下がプロファイルレポート**

データセット概観

plot()関数は、データセットの分布と統計量を調査します。
データフレームdfに対するplot()の機能は以下の通りです。

  • plot(df): 各カラムの分布をプロットし,データセットの統計量を計算する
  • plot(df, x): 列xの分布を様々な方法でプロットし、列の統計量を計算する
  • plot(df, x, y): 列 x と y の間の関係を表すプロットを生成する
Python
#@title データカラム、欠損値とデータ型の確認
df.info()

Python
#@title データセットの各カラムの統計量と分布のプロット
plot(df)

要素毎の詳細確認

欠損値の影響確認

plot_missing()関数は、欠損値とそれがデータセットに与える影響を確認することができます。
データフレーム df に対する plot_missing() の機能は以下の通りです。

  • plot_missing(df): 欠損値の量と位置、および列間の関係をプロットする。
  • plot_missing(df, x): 列 x の欠損値が他の全ての列に与える影響をプロットする。
  • plot_missing(df, x, y): 列 x の欠損値が列 y に与える影響を様々な方法でプロットする。

1. データセットの欠損値

Python
#@title データセットの欠損値サマリ
plot_missing(df)

2. 指定したカラムの欠損値が他のカラムに与える影響

Python
#@title データカラムを確認しましょう
df.info()
Python
#@title 欠損値影響を確認したいカラム番号を指定してください(カラム番号は 0~です){ run: "auto" }
Missing_column_Number = 5 #@param{type:"number"}

print('** ↓指定カラムは以下です↓ **')
df.columns[Missing_column_Number]
Python
#@title 欠損値影響の可視化
#plot_missing(df, "x") ← x を指定
plot_missing(df, df.columns[Missing_column_Number])

相関関係の確認

plot_correlation()関数は、様々な方法で、複数の相関メトリックを使用して、列間の相関を調べます。
与えられたデータフレーム df に対する plot_correlation() の機能は以下の通りです。

  • plot_correlation(df): 相関行列をプロットする(列のすべてのペアの間の相関)。
  • plot_correlation(df, x): 列xに対して最も相関のある列をプロットする。
  • plot_correlation(df, x, y): 列 x と列 y の結合分布をプロットし、回帰直線を計算する。

1. データセットの相関関係

Python
#@title データセットの相関関係
plot_correlation(df)

2. 指定したカラムと他のカラムとの相関

Python
#@title データカラムを確認しましょう
df.info()

Python
#@title 相関を確認したいカラム番号を指定してください(カラム番号は 0~です){ run: "auto" }
Corr_column_Number = 5 #@param{type:"number"}

print('↓指定カラム↓')
df.columns[Corr_column_Number]
Python
#@title 指定したカラムと他のカラムの相関関係
#plot_correlation(df, "x") ← x を指定
plot_correlation(df, df.columns[Corr_column_Number])

詳しく見たいカラムの分析

plot()関数は、データセットの分布と統計量を調査します。以下は、与えられたデータフレームdfに対するplot()の機能を説明するものです。

  • plot(df): 各カラムの分布をプロットし,データセットの統計量を計算する
  • plot(df, x): 列xの分布を様々な方法でプロットし、列の統計量を計算する
  • plot(df, x, y): 列 x と y の間の関係を表すプロットを生成する

※以下3つの枠を設けていますので、3つのカラムまでは同時表示できます。
「Column_Number1:」,「Column_Number2:」,「Column_Number3:」にてカラム番号を指定してください。

1. 指定カラム1のプロット&統計量

Python
#@title データカラムを確認しましょう
df.info()
Python
#@title 分析したいカラム番号を指定してください(カラム番号は 0~です)  { run: "auto" }
Column_Number1 = 5 #@param{type:"number"}

print('↓指定カラム↓')
df.columns[Column_Number1]
Python
#@title 指定カラムのプロット&統計量
#plot(df, "x") ← x を指定
plot(df, df.columns[Column_Number1])

2. 指定カラム2のプロット&統計量

Python
#@title 分析したいカラム番号を指定してください(カラム番号は 0~です)  { run: "auto" }
Column_Number2 = 4 #@param{type:"number"}

print('↓指定カラム↓')
df.columns[Column_Number2]
Python
#@title 指定カラムのプロット&統計量
#plot(df, "x") ← x を指定
plot(df, df.columns[Column_Number2])

3. 指定カラム3のプロット&統計量

Python
#@title 分析したいカラム番号を指定してください(カラム番号は 0~です)  { run: "auto" }
Column_Number3 = 10 #@param{type:"number"}

print('↓指定カラム↓')
df.columns[Column_Number3]
Python
#@title 指定カラムのプロット&統計量
#plot(df, "x") ← x を指定
plot(df, df.columns[Column_Number3])

Python
#@title データカラムを確認しましょう
df.info()
Python
#@title ヒストグラムを描きたいカラム番号を指定してください(カラム番号は 0~です)  { run: "auto" }
Hist_column_Number = 5 #@param{type:"number"}

print('↓指定カラム↓')
df.columns[Hist_column_Number]
Python
#@title ヒストグラム表示
plot(df,df.columns[Hist_column_Number], display = ["Histogram"])

Python
#@title ヒストグラム表示(カスタマイズ) { run: "auto" }
plot(df, df.columns[Hist_column_Number], display = ["Histogram"], config = {"hist.bins": 1000, "height":500})

変数間の関係確認

1. カラムA1とB1の関係

Python
#@title データカラムを確認しましょう
df.info()
Python
#@title 比較したいカラム番号を指定してください(カラム番号は 0~です)
Column_Number_A1 =  5#@param{type:"number"}
Column_Number_B1 =  9#@param{type:"number"}

print('↓指定カラム A, B↓')
df.columns[Column_Number_A1],df.columns[Column_Number_B1]
Python
#@title カラム同士の関係
#plot(df, "x", "y") ← x, y を指定

plot(df, df.columns[Column_Number_A1], df.columns[Column_Number_B1])

2. カラムA2とB2の関係

Python
#@title 比較したいカラム番号を指定してください(カラム番号は 0~です)
Column_Number_A2 =  5#@param{type:"number"}
Column_Number_B2 =  4#@param{type:"number"}
#plot(df, "x", "y") ← x, y を指定

print('↓指定カラム A2, B2↓')
df.columns[Column_Number_A2],df.columns[Column_Number_B2]
Python
#@title カラム同士の関係
#plot(df, "x", "y") ← x, y を指定

plot(df, df.columns[Column_Number_A2], df.columns[Column_Number_B2])

3. カラムA3とB3の関係

Python
#@title 比較したいカラム番号を指定してください(カラム番号は 0~です)
Column_Number_A3 =  4#@param{type:"number"}
Column_Number_B3 =  1#@param{type:"number"}
#plot(df, "x", "y") ← x, y を指定

print('↓指定カラム A3, B3↓')
df.columns[Column_Number_A3],df.columns[Column_Number_B3]
Python
#@title カラム同士の関係
#plot(df, "x", "y") ← x, y を指定

plot(df, df.columns[Column_Number_A3], df.columns[Column_Number_B3])

0/1の目的変数を0と1で区分し、説明変数毎で比較

plot_diff()関数は、0/1の目的変数を0と1で区分し、説明変数毎で比較するような場合に、データフレームを目的変数 0と1のデータに分割し、説明変数毎の分布や統計量の違いを調べることができます。複数のデータセットにまたがる場合も同様です。

Python
#@title データカラムを確認しましょう
df.info()
Python
#@title 0/1でデータ区分したい目的変数カラムを指定してください(カラム番号は 0~です)  { run: "auto" }
Diff_column_Number = 1 #@param{type:"number"}

print('↓指定カラム↓')
df.columns[Diff_column_Number]
Python
#@title 0/1区分 可視化
df1 = df[df[df.columns[Diff_column_Number]] == 0]
df2 = df[df[df.columns[Diff_column_Number]] == 1]
plot_diff([df1, df2])

【参考】地理的データ分析

Python
country = load_dataset("countries")
plot(country, "Country")

最後に

とにかく速い。
まったくストレスを感じないし、インタラクティブでとてもいい。
私は、これまで試した Auto-EDAのなかで DataPrep が一番のお気に入り。、

 

関連記事

参考サイト