こんにちは! この記事では、データフレームの各列の集計値をテーブル・ビューでまとめてみる方法を解説します。

「データフレームの各列の集計値をテーブル・ビューでまとめてみる方法」これだけ聞くと何を言っているかの分かりづらいですよね。。 ここでやりたいことは何かと言うと…

サマリ・ビューで確認できる以下のような情報(各列ごとにある中央値やら平均値やら)を

こんな感じでテーブル・ビューで一覧化することです。

何が嬉しいか

この記事で解説する方法を使うと、サマリ情報をノートに表示することができます。また、サマリ情報をカスタマイズしたいケース(例えばサマリ・ビューでは表示されない情報を表示したい場合)にも使えたりします。

Exploratory ではいくつかのステップを作成すれば同じようなことが簡単にできてしまいますが、今回はそのようなステップを作成することなく、一気にまとめてできちゃう方法をお伝えします!

各列の集計値をテーブルで表示する方法

以下のようにRのカスタムスクリプトを作って実際にデータフレームのデータに対して使っていきます。

  1. 各列の型ごとに集計値等を集計するための関数の作成
  2. 1で作成した関数を呼び出す。
  3. テーブル・ビュー で確認する
Note

各型によって表示したい集計値は異なります。Exploratory のサマリ・ビュー においても列の型によって表示される項目が異なることが分かると思います。今回は、数値型の列に絞って、各列の集計値をテーブルで表示します。

Exploratory の サマリ・ビュー で表示される項目一覧

1. 各列の集計値を計算するための関数の作成

スクリプトの「+」マークをクリックし、「スクリプト」をクリックします。

適切なスクリプト名(今回のケースでは、column_summaryという名前にします)を入力し、「作成」を押します。

ここからカスタムの関数を記述します。今回作成する関数は「引数に渡した列名の集計値をテーブルとして返す」ものとします。

関数の使用イメージ
column_summary(COLUMN1, COLUMN2, COLUMN3)

関数内では以下のような処理を行います。

  1. 列のフィルタリング
  2. Wide型からLong型に変換(gather)
  3. グループ化
  4. 集計演算
1. 列のフィルタリング

では、実際に関数を作成していきます。まずは関数の骨格を作成します。引数の一番初めにある dataは Exploratory で作成したデータフレームが自動的に入ってくるイメージで大丈夫です。この関数を使用するときには、データフレームを指定する必要性はありません。 また、... には、列名のリストが入ります。今回のケースでは、幾つでも列を指定してもいい、という関数の仕様にしているため、このような形式にしています。

column_summary <- function(data, ...){
   data
}

次に列のフィルタリングですが、select を使います。

column_summary <- function(data, ...){
   data %>% select(...)
}

一旦ここまでで、関数を作成して実行してみます。

「新規ステップを追加」をクリックし、

「カスタムRコマンド」をクリックします。

先ほど、作成した column_summary 関数を使用します。 ここではAIR_TIME, AIR_DELAY という数値型の列を指定します。

実行すると、以下のように二つの列に絞られていることがわかります。

テーブル・ビュー でも同様です。

2. Wide型からLong型に変換

各列の集計値を計算するために、列の値を行に変換します。 言葉だけではイメージしづらいと思うので以下の表をみてください。Wide型からLong型に変換後の表は、一つの行に列名とその値が入るように変換されます。

普通の表
COL1 COL2
10 Banana
30 Orange
Wide型からLong型に変換後の表
COL_NAME VALUE
COL1 10
COL1 30
COL2 Banana
COL2 Orange

さて、このようなWide型からLong型に変換を実現するための関数は gatherです。先ほどの関数は以下のようになります。

column_summary <- function(data, ...){
    data %>% select(...) %>%
             gather(列, 値)
}

gather の後に指定するものは、Wide型からLong型に変換後の表の列名です。gather("列", "値") のように指定すると以下のような表が返されるとイメージしてください。

COL_NAME COL_VALUE

ここまでの関数を先ほどと同様に保存して、実行すると以下のような表をテーブル・ビュー で確認することができます。

3. グループ化

ここまでくれば、あとは簡単です。先ほど指定した でグループ化します。

column_summary <- function(data, ...){
    data %>% select(...) %>%
             gather(列, 値) %>%
                         group_by(`列`)
}
4. 集計演算

最後に、グループ化したものに対して集計処理を施します。

column_summary <- function(data, ...){
    data %>% select(...) %>%
             gather(列, 値) %>%
             group_by(列) %>%
             # meanの前にある~(チルダ)は関数オブジェクト以外を渡す場合に必要
             summarize_all(
                 list(NA割合=~mean(is.na(.), na.rm=F),
                      最大値=max,
                      最小値=min,
                      中央値=median,
                      平均値=mean,
                      標準偏差=sd),
                 na.rm=T
             )
}

これで関数の完成です。以下のように関数を登録します。

2. 1で作成した関数を呼び出す。

カスタムRコマンドで以下のように作成した関数を呼び出します。 今回は、数値型の列として、DAY OF MONTH,MON TH, AIR_TIME, ARR_DELAY,DEP_DELAY を選択しています。

column_summary(`DAY OF MONTH`,`MON TH`,AIR_TIME,ARR_DELAY,DEP_DELAY)

3. テーブル・ビュー で確認する

2 でカスタムRコマンドを実行すると以下のような表をテーブル・ビュー で確認することができます。

このようにサマリ・ビュー で確認できた一つ一つの列の集計値が一覧で確認できます。 これをノートに挿入してみます。 ノートに挿入するために、まずはチャート・ビューでテーブルを作成します。

タイプで「テーブル」を選択し、

列の「選択」をクリックし、

全ての列を選択して、「OK」をクリックすると

チャート・ビューで先ほどのテーブルを表示できます。

これをノートに挿入するためには、ノートを開いて、「Chart」をクリックし、

先ほど作成したテーブルを選択して、「OK」を押します。

すると、ノートで各列の集計値を表示することができます。

まとめ

データフレームの各列のサマリ情報を計算してテーブル(表)として表示したい場合、以下のRのコマンドを使ったRのカスタムスクリプトを作り、それをカスタムコマンドとして呼び出すことで行なうことができました。

  • select
  • gather
  • group_by
  • summarize

今回のカスタム・スクリプトを作るにあたってのポイントは、”gather”というコマンドを使っていくつかの列を行にする、つまり「Wide型からLong型に変換」するということです。