分析基盤グループの沖田です。
データや分析結果をわかりやすく共有するというのは、分析することと同等かそれ以上に悩ましいことです。
今回は分析者、伝える相手、双方にメリットのあるデータの可視化についての方法とその具体的な使用例について記します。
目次
Shinyの使い方
Shinyとは
ShinyとはR言語でwebアプリケーションを簡単に作るためのライブラリです。
また、shinyを使えば、R言語のみで、データを可変的にWebで示すことができます。
データを共有するためのWebアプリとして作成したり、分析者自信がデータを読み解くためのツールとして使えます。
Shinyの導入
今回の流れは、R Studioを使った使用例になります。
導入方法は公式のチュートリアルや、他のサイトでも紹介されていますが、簡単に説明します。
まずは、「Shiny」をインストールします。
1 |
install.packages('Shiny') |
インストール後、R studioの左上のスクリプトの作成ボタンを押すと、「Shiny Web App…」というボタンが追加されています。
「Shiny Web App…」をクリックします。
するとこちらの画面が表示されます。
この画面では、名前、タイプ、ディレクトリを指定します。
・名前:プロジェクトの名前になります。
・タイプ:「Single File」と「Multiple File(デフォルト)」の2種類があります。
このあとにデフォルトで2つのファイルが作成され、その中にスクリプトを記述しますが、1つにまとめておきたい場合は上を、特にこだわりがなければ下(デフォルト)を選べば問題ないです。今回は下を選んでおきます。
・ディレクトリ:このディレクトリの配下にプロジェクトが作成されます。
そしてcreateボタンを押下すると、実際にデフォルトのサンプルスクリプトが記述された状態でファイルが生成されます。
「ui.R」というスクリプトと、「server.R」というスクリプトが自動で生成されました。
先ほど「2つに分割」を選択しているので、タブが2つに分かれ、ファイルが作成されています。
スクリプトの中身
①「server.R」
下の方の行に下記のようにあります。
1 |
hist(x, breaks = bins, col = 'darkgray', border = 'white') |
デフォルトは、hist()でヒストグラムを描画します。
②「ui.R」
1 2 3 4 5 |
sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30) |
binsというserver.Rで定義しているものをスライドバーに表示しながら、ヒストグラムをUIに反映します。
Shinyの実行
実際にアプリを動かしたいときは、「▶︎Run App」ボタンを押すことで実行可能です。
上のスクリプトのまま、実行すると以下のようなヒストグラムが出てきます。
これはアメリカの間欠泉のオールド・フェイスフル・ガイザーの噴火の時間と、次の噴火までの時間のデータのようです。
スライドバーを動かすことでヒストグラムの形が変わり、データが見やすいようにWebに表示されました。
今回のデフォルトはヒストグラムとなっていますが、スクリプトを変更することで棒グラフや散布図など様々なグラフを描画して、データを共有することができます。
実際の分析例
上記は、データの共有に関してですが、実際にデータを共有する際の可視化についての重要性について考えてみます。
分析事例
例えば、下の図を見てください。
これは、あるゲームタイトルの、1カ月間のARPPU(1人あたりの課金額)とそのユーザー数です。
(※データは実際のデータではなく、テスト用に作成したデータです)
今回のヒストグラムでは、横軸がARPPU、縦軸がユーザーの数になります。
上の図を見ると、
1円〜4,000円 | 16人 |
4,001円〜8,000円 | 16人 |
8,001円〜12,000円 | 16人 |
ARPPUを3つの層に分けると、それぞれの層で16人ずついることがわかりました。
どの層にも満遍なくユーザーがいることになり、このゲームタイトルには問題がないのでしょうか?
では、ここで上記のARPPUを4層に分けてみたいと思います。
shinyでは、左上のスライドバーを1段階右にずらすだけですね。
新たにSQLを発行して集計しなおしたり、ピポットをしたりする必要がありません。
区分を4にスライドすると、以下のような図になりました。
上の図から、
1円〜3,000円 | 14人 |
3,001円〜6,000円 | 14人 |
6,001円〜9,000円 | 5人 |
9,001円〜12,000円 | 15人 |
6,000円の層に全然人がいない!!
多くのユーザーは6,000円台で課金してくれていないことがわかります。
例えば3,000円がガチャの10連1回相当だった場合は、10連3回目のガチャをやるモチベーションがないという理由が考えられます。
10連3回目のガチャのステップで大きな恩恵を受けられるような施策を考える必要があるかもしれないことがわかりました。
このデータは実際、1,000円刻みだと以下のようにしております。
3つの層分けだと異常値は見えないが、4つの層分けだと異常値が見えるような形としました。
1円〜1,000円 | 5人 |
1,001円〜2,000円 | 5人 |
2,001円〜3,000円 | 4人 |
3,001円〜4,000円 | 2人 |
4,001円〜5,000円 | 6人 |
5,001円〜6,000円 | 6人 |
6,001円〜7,000円 | 2人 |
7,001円〜8,000円 | 2人 |
8,001円〜9,000円 | 1人 |
9,001円〜10,000円 | 5人 |
10,001円〜11,000円 | 5人 |
11,001円〜12,000円 | 5人 |
重要性
このように、層分けというのは非常に重要な役割を持っており、数値を変えてその層分けに問題がないかを確認する必要があります。
ヒストグラムではデータの散らばりを見るのに適しているため、このような異常値を発見することができました。
1度作成してしまったグラフを変更するのは大変ですが、shinyを使うと今回の例だとスライドバーをスライドするだけで済むので簡単に可変的な可視化もできて、わかりやすく確認できます。
また自分では理解していても、データを共有する相手がわかりにくいケースもあるので、そういったときに有用なツールとして使えそうです。
まとめ
今回はR言語でwebアプリケーションを簡単に作るためのライブラリを紹介しました。
Rを使っている分析者で、分析結果をそのまま共有したい方や、R自体を分析ツールとしてデータの共有相手に使ってほしい方には非常に便利なライブラリだと思います。
また、実際にデータを動かしながら、確認すること自体が重要な意味を持つので、分析者自身にとっても大切なことだと思います。
今回はデフォルトのヒストグラムのみの紹介としましたが、様々なグラフを可変的に表示することが可能なライブラリとなっているので、うまく使っていきたいです。