6.2 カテゴリ変数の要約

一方でカテゴリ変数は、代表値や分散によって含意を得るのではなく、頻度のカウント(集計)や、クロス集計を用いることが多い。これにより、各カテゴリにどれぐらいの観測数があるのかを確認することが可能になる。カテゴリ変数の内容(出現頻度)の確認には、table() 関数を用いる。また、with()関数を用いて同様の結果を得ることも可能である。ここでは、前節で保存した顧客ベースのidposデータを用いる。

idpos_cust <- readr::read_csv("data/idpos_customer.csv")

table(idpos_cust$gender)
## 
## female   male 
##    985    502
with(idpos_cust, table(gender))
## gender
## female   male 
##    985    502

また、table関数にて2つのカテゴリ変数を指定することで、両変数に対応するカテゴリの出現頻度を返してくれる。このような表のことをクロス集計表とよぶ。例えば、同データにおける各デシルランクと性別の関係は以下のように示される。

with(idpos_cust, table(gender,decile_rank))
##         decile_rank
## gender     1   2   3   4   5   6   7   8   9  10
##   female 102 100  99  94 106 103  97  83  98 103
##   male    47  49  49  55  43  45  53  64  51  46

特定のカテゴリ(例、デシルランク)に着目して、カテゴリ変数(例、性別)についての集計を行うことも可能である。例えば、デシルランク10における男女差のみを調べたいときには、filter() 関数を用いれば良い。

idpos_cust %>% 
  filter(decile_rank == 10) %>% 
  with(table(gender))
## gender
## female   male 
##    103     46

カテゴリ変数と量的変数の関係を調べることも、グループ別に量的変数の要約を行う形で可能である。また、そのための手法はすでに我々は学習済みである。具体的には、前節で利用した group_by() 関数を用いる。例えば、合計支出額と購買頻度の平均と標準偏差を男女ごとに確認することは、以下のような指示で可能になる。なお、tidyverseを起動していない場合には、必要に応じて library(tidyverse) を事前に指示してほしい。

idpos_cust %>% 
  group_by(gender) %>% 
  summarize(mon_m = mean(monetary),
            mon_sd = sd(monetary),
            freq_m = mean(frequency),
            freq_sd = sd(frequency))
## # A tibble: 2 × 5
##   gender  mon_m mon_sd freq_m freq_sd
##   <chr>   <dbl>  <dbl>  <dbl>   <dbl>
## 1 female 17511. 32770.   2.13    3.88
## 2 male   14878. 23222.   1.80    2.77