こんにちは! この記事では、データフレームの各列の集計値をテーブル・ビューでまとめてみる方法を解説します。
「データフレームの各列の集計値をテーブル・ビューでまとめてみる方法」これだけ聞くと何を言っているかの分かりづらいですよね。。 ここでやりたいことは何かと言うと…
サマリ・ビューで確認できる以下のような情報(各列ごとにある中央値やら平均値やら)を
こんな感じでテーブル・ビューで一覧化することです。
この記事で解説する方法を使うと、サマリ情報をノートに表示することができます。また、サマリ情報をカスタマイズしたいケース(例えばサマリ・ビューでは表示されない情報を表示したい場合)にも使えたりします。
Exploratory ではいくつかのステップを作成すれば同じようなことが簡単にできてしまいますが、今回はそのようなステップを作成することなく、一気にまとめてできちゃう方法をお伝えします!
以下のようにRのカスタムスクリプトを作って実際にデータフレームのデータに対して使っていきます。
各型によって表示したい集計値は異なります。Exploratory のサマリ・ビュー においても列の型によって表示される項目が異なることが分かると思います。今回は、数値型の列に絞って、各列の集計値をテーブルで表示します。
スクリプトの「+」マークをクリックし、「スクリプト」をクリックします。
適切なスクリプト名(今回のケースでは、column_summaryという名前にします)を入力し、「作成」を押します。
ここからカスタムの関数を記述します。今回作成する関数は「引数に渡した列名の集計値をテーブルとして返す」ものとします。
column_summary(COLUMN1, COLUMN2, COLUMN3)
関数内では以下のような処理を行います。
では、実際に関数を作成していきます。まずは関数の骨格を作成します。引数の一番初めにある data
は Exploratory で作成したデータフレームが自動的に入ってくるイメージで大丈夫です。この関数を使用するときには、データフレームを指定する必要性はありません。 また、...
には、列名のリストが入ります。今回のケースでは、幾つでも列を指定してもいい、という関数の仕様にしているため、このような形式にしています。
column_summary <- function(data, ...){
data
}
次に列のフィルタリングですが、select を使います。
column_summary <- function(data, ...){
data %>% select(...)
}
一旦ここまでで、関数を作成して実行してみます。
「新規ステップを追加」をクリックし、
「カスタムRコマンド」をクリックします。
先ほど、作成した column_summary
関数を使用します。 ここではAIR_TIME
, AIR_DELAY
という数値型の列を指定します。
実行すると、以下のように二つの列に絞られていることがわかります。
テーブル・ビュー でも同様です。
各列の集計値を計算するために、列の値を行に変換します。 言葉だけではイメージしづらいと思うので以下の表をみてください。Wide型からLong型に変換後の表は、一つの行に列名とその値が入るように変換されます。
COL1 | COL2 |
---|---|
10 | Banana |
30 | Orange |
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 |
ここまでの関数を先ほどと同様に保存して、実行すると以下のような表をテーブル・ビュー で確認することができます。
ここまでくれば、あとは簡単です。先ほど指定した 列
でグループ化します。
column_summary <- function(data, ...){
data %>% select(...) %>%
gather(列, 値) %>%
group_by(`列`)
}
最後に、グループ化したものに対して集計処理を施します。
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
)
}
これで関数の完成です。以下のように関数を登録します。
カスタム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)
2 でカスタムRコマンドを実行すると以下のような表をテーブル・ビュー で確認することができます。
このようにサマリ・ビュー で確認できた一つ一つの列の集計値が一覧で確認できます。 これをノートに挿入してみます。 ノートに挿入するために、まずはチャート・ビューでテーブルを作成します。
タイプで「テーブル」を選択し、
列の「選択」をクリックし、
全ての列を選択して、「OK」をクリックすると
チャート・ビューで先ほどのテーブルを表示できます。
これをノートに挿入するためには、ノートを開いて、「Chart」をクリックし、
先ほど作成したテーブルを選択して、「OK」を押します。
すると、ノートで各列の集計値を表示することができます。
データフレームの各列のサマリ情報を計算してテーブル(表)として表示したい場合、以下のRのコマンドを使ったRのカスタムスクリプトを作り、それをカスタムコマンドとして呼び出すことで行なうことができました。
今回のカスタム・スクリプトを作るにあたってのポイントは、”gather”というコマンドを使っていくつかの列を行にする、つまり「Wide型からLong型に変換」するということです。