Exploratoryでユーザー毎の傾向を探索してみる

前回の記事でGoogle Analyticsのデータから指標の相関と目標を立てたりした。
今回はユーザー単位での分析をしてみる。 前回の記事

ユーザーの分類

今回の目的はユーザーの利用期間の違いによってどのような属性の違いがあるかを探索することとする。
そこで、以下の種類で分類して各指標を見ていく。

  • Beginners(初心者)
  • Majority(大衆)
  • Eariy Adopters(早期採用者)
Loading…

下処理

今回の分析で使用するかは不明だが、せっかくipというデータも含まれているので、国名の列を追加しておく。
ベースラインに日本とアメリカを設定しておくことで、後々可視化した時に便利なので、この設定も追加しておく。

mutate(ip_country = ip_to_country(ip), ip_country = fct_lump(ip_country, n = 5), ip_country = fct_relevel(ip_country, "Japan", "United States"))

利用期間を特定する

まずは、16万行あるアクセスデータからかくユーザーの終了日(最終日)- 開始日で利用期間の列を追加する。

useridでグループ化する

ユーザー毎に集計するためにuseridでグループ化を行う。 見た目に違いは無いように見えるが、これでユーザー単位の様々な計算ができるようになる。

group_by(userid)

集計する

min(),max()関数を使うことで、グループ(userid)毎の最大、最小の数値を取得することができる。この場合だと日付型のデータなので、最小=最初の日、最大=最後の日を取得できる。
あと一緒にユーザーの国名も追加しておく。

summarize(start_date = min(timestamp, na.rm = TRUE), end_date = max(timestamp, na.rm = TRUE), ip_country = first(ip_country))

上記の関数を実行することで、各ユーザーを行とした以下のデータを作ることができた。

  • ユーザーID
  • 最初の日
  • 最後の日
  • 国名

行数=ユーザー数=2880人が存在することがわかった。

利用期間を計算する

ここで、かくユーザーの最初と最後のアクセス日時が判明したので、最後の日-最初の日を計算して利用期間を特定する。

mutate(
    lifetime = end_date - start_date, 
    lifetime = round(as.numeric(lifetime, units = "days")), 
    lifetime_pct_total = (lifetime / max(lifetime)) * 100, 
    lifetime_pct_total_category = cut(lifetime_pct_total, breaks = c(-Inf, 16,84, Inf), include.lowest = TRUE, dig.lab = 10), 
    lifetime_pct_total_category = recode(lifetime_pct_total_category, `[-Inf,16]` = "Beginners", `(16,84]` = "Majority", `(84, Inf]` = "Eariy Adopters")
    )

わかりやすいように改行を入れた。 それぞれの処理を説明していく。

利用期間の列を追加

以下の処理で利用期間の列を追加している。

lifetime = end_date - start_date

データ型を変換

日付で計算すると、difftimeというデータ型になる。
なので、以下の処理で日付型のデータに変換している。

lifetime = round(as.numeric(lifetime, units = "days"))

分割しやすいようにする

イノベーター理論から、閾値を設定する。

  • Beginners(下位16%)
  • Majority(中間68%)
  • Eariy Adopters(上位16%)

上記の処理を行うために、数値を%に変換した列を追加している。
この時に注意したいのが母数は全体の合計ではなく、列の最大値をとっていること。
こうすることでユーザーの順位として計算することができる。

lifetime_pct_total = (lifetime / max(lifetime)) * 100

カテゴリ分けをする

上記の理論から16%以下、それ以上、84%の3つにデータをカテゴリ分けする。

lifetime_pct_total_category = cut(lifetime_pct_total, breaks = c(-Inf, 16,84, Inf), include.lowest = TRUE, dig.lab = 10)

そうすると、以下のような分布ができた。

Loading…

カテゴリ名を編集する

このままの名前だと、わかりにくいので置換する。

lifetime_pct_total_category = recode(lifetime_pct_total_category, `[-Inf,16]` = "Beginners", `(16,84]` = "Majority", `(84, Inf]` = "Eariy Adopters")

ここまできてようやく分析できるフォーマットが整った。

可視化する

分析する準備が整ったので、早速いろいろ可視化をしてみる。

ライフタイム毎の分布

ヒストグラムで見てみる。
このグラフはX軸が利用期間、Yが頻度(人数)、色が分類だ。
そして以下のことが読み取れる。

  • 数日間しか利用していない人が最も多い。
  • 大半のMajority層が2ヶ月前後利用している。
    Loading…

累計を折れ線グラフで表すと以下のようになる。

Loading…

国毎のユーザー

国毎に棒グラフで見てみると以下のようになる。
アメリカだとBeginnersとEariy Adoptersが同じくらいなのに対して、日本はEariy Adoptersのほうが多いということがわかる。

Loading…

ヒストグラムで見てみると、、ちょっと見づらくなったかな。

Loading…

箱ひげ図で見てみると、国毎、ユーザー層毎の分布の違いが比べやすくなった。

Loading…