Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

2019年のアクセス集計、分析 アクセス集計から、クラスタ分析によりブログの特徴を探る

2019年も終わりに近づき、空いている時間でブログの年間アクセス集計をしてみようか、という気分になった。Google Analyticsを日々参照し、大体の傾向は掴んでいるのだが、複数の観点から参照することで思いがけない特徴を示すのではないか、同時に昨年から学び始めた統計を用いて、興味深い分類、傾向を見出せないか、と考えたからだ。

アクセス集計でよくあるのは、今年最も参照された記事、のような事柄だろう。「最も参照された」と言えば、おそらくアクセス数(Pageview)を真っ先に思い浮かべるのではないだろうか。とはいえ同一人物が繰り返し参照している可能性もあれば、アクセス数は多いものの、実際のところ短時間で離脱されている可能性もある。加えて次の事柄も集計すべきだろう。

User ユーザー数
New User 新規ユーザー数
Bounce rate 繰り返し参照された数
Avg. Time on Page 参照時間

同時に、これらのデータを元に同じタイプの投稿を分類し、傾向を分析してみることにした。

どういう結果が出るだろうか。

準備

Google Analyticsにて、分析用にレポートを作成する。今回の分析では、このような具合だ。
f:id:espio999:20191229232123p:plain
このレポートを表示し、参照期間を今年1月1日から、に設定する。出力されたレポートをExcelファイルとしてExportすれば、分析用のデータを入手できる。Avg. Time on Pageの時分秒が、出力ファイルでは秒換算してくれているのがありがたい。
f:id:espio999:20191229232142p:plain
出力したファイルをExcelで開き、集計不要な行を削除する。例えばブログ管理に関わるページで、一般読者と名無関係のページであったり、投稿タイトルが空白や「(Not Set)」のような集計不要なデータだ。

各項目に関する集計はGoogle Analyticsでも、Excelでもソートすれば簡単にできるのだが、クラスタ分析にはRStudioを用いる。RStudioについて、ならびにコードを含めたクラスタ分析などの詳細については、末尾に記載のリンク先を参照してほしい。

Pageview

いわゆる、今年最も参照された投稿だ。1位の投稿はWindows Update配信直後にアップしたこともあり、このブログにしては爆発的なアクセスを記録した。企業IT部門で業務上の必要に迫られ、多く参照されたのだろう。
2位の投稿は、一般ユーザーの参照も多い投稿だ。昨年5月の投稿依頼、安定的に高頻度で参照されている。Chromeの同期というのは、余り安定していないことの証左でもある。
3位以降VSCodeXperia Tabletに関する投稿がアクセスを集めている。「Ruby終わった」と言われる割には、まだまだ必要とされている場面が多いのではないだろうか。
Xperia Tabletの話題は2015年に投稿したものだ。おそらく需要は一巡したと思うのだが、まだまだ根強く参照されている。Androidタブレットが事実上のオワコン化し、現在でも実用になる機種として入手したユーザーが、OS更新のために参照しているのだろう。

1 Intel RST導入済みPCへのWindows 10 May 2019 Update (Windows 10 1903)更新がブロックされるーその強硬的解決
2 Chrome、同期できない場合の一解決
3 VSCodeで最低限のRuby環境構築 - 設定編
4 VSCodeで.NET Frameworkを利用する。-.NET Framework利用のための手続き
5 Xperia Tablet Z (SGP312)のroot化 - PCを使わずにAndroid端末をroot化する。
6 VSCodeで最低限のRuby環境構築 - 検証編
7 Xperia Tablet Z (SGP312) WiFiモデルにLollipopを適用する、あるいは文鎮状態からの復旧 - Lollipop適用編(2018年版)
8 Xperia Tablet Z (SGP312)にLineageOSを導入する道案内 インストール準備1、必要なファイルのダウンロード
9 WSL環境を作って壊す、覚書-lxrunは使わない。
10 BOOTMGR is missing - スタートアップ修復オプション

User

割愛する。Pageviewとの相関が高すぎ、順位にほとんど変化がないのだ。相関の高さについては「RStudioでの集計」で触れる。
WSL、牛すじ肉、BOOTMGRに関する投稿がランクインしているのだが、これは次に触れるNew User獲得の影響でもある。

New User

今年一年で最も新規ユーザーを獲得した投稿だ。このブログの読者には、いわゆるサラリーマンが多く、業務時間中に参照されている。おそらく問題に遭遇した際に、その解決法を求めて参照しているのだろう。
新規ユーザーが多いということは、採り上げられている話題が長くの間、継続的に誰かが遭遇している問題であることを示している。実際7~9位の投稿は、2005~2008年に投稿したものだ。
先の集計と若干異なる趣を与えているのが、「牛すじ肉」の投稿だ。2007年の投稿なのだが、Pageviewでは11位、Userでは8位、未だに多くの人に参照され続けているのだが、同時に新しいユーザーも集めてくれている。
順位に入れ替わりはあるものの、1~5位までは先の集計結果と変わらなかった。6位以下を示す。

6 WSL環境を作って壊す、覚書-lxrunは使わない。
7 牛すじ肉の下ごしらえ
8 BOOTMGR is missing - スタートアップ修復オプション
9 VBScriptでフォルダの参照権限を参照する。Vol.1
10 FSMT - Microsoftファイルサーバー移行ツールキット

Bounce rate

100%の投稿が52も見つかった。とにかく話題の幅が広い。その中からPageviewの高い順にTop 10を並べると次の結果を得た。先程までと趣が明らかに大きく異なっている。
これらの投稿は、同一のユーザーが繰り返し訪れていることを意味している。個人的にホッとしているのが、これらがPage View、Userでの集計と重複がないことだ。つまり先の集計で参照された投稿は、おそらくユーザーの問題を解決するに十分な情報を提供したということで、こちらの投稿は問題解決とは異なる目的で、繰り返し訪れたくなる何かを含んでいる、ということだ。

1 Rの初歩 - 環境設定
2 BLAME!and so on―弐瓶勉画集
3 Rの初歩 - t検定
4 神は日本を憎んでる - God hates Japan
5 2017年劇場版以前の『BLAME!』
6 Phase C: Applications Architecture - 前編
7 2046、花様年華
8 GVLMAの紹介-残差を用いた線形モデルの包括的検査
9 ポーク・チョップ
10 保護されたPDFを印刷する - brava! reader

Avg. Time on Page

先程までと趣が大きく異なるのが、この集計情報だ。いくらアクセス数、ユーザー数が多くとも、文章一通りに目を通されているとは限らない。ある投稿ページにて、ユーザーがどれ程の時間とどまっていたのか、その平均時間を知ることができる。想像を少し広げれば、投稿が平均してどれ程の時間参照されていたのか、が分かる。この集計はTop10なので、その中でも特に真剣に読まれただろうことが想像できる投稿だ。

1 残差を用いた線形モデルの包括的検査 GVLMAの紹介
2 アメリカ国防総省直伝 プロジェクト・マネジメント実戦教練ブック
3 Internet Explorerのコンテキスト・メニューに項目を追加する
4 皇室御用達 前原光榮 商店の傘
5 42 SILICON VALLEY Piscine 2017 Day02を考える 私なりのアプローチ。
6 健康という幻想
7 WMIによるサーバー監視メモ
8 42 SILICON VALLEY Piscine 2017資料を読み解く 印象、考察、そして余談。
9 RegExLib.com - Regular Expression Library メールアドレスにマッチする正規表現
10 VSCodeで最低限のRuby環境構築 - 設定編

RStudioでの集計

まずデータのサマリーを取る。個人的に最も印象的なのがAvg. Time on Pageの最大値、973.67秒(16分)だ。本当に真剣に読んでくれたのだと思う。
f:id:espio999:20191229235201p:plain
各データの相関を確認してみる。Pageview、User、New Userの相関が非常に強く、その他のデータとの相関は弱いことが分かる。多重共線性回避のため、データからUser、New Userを除外する。
f:id:espio999:20191229233442p:plain

これらのデータを何らかの形で分類するとして、何グループに分けるのが都合が良いのだろうか?NbClustでは2~4グループへの分割が妥当だと言っている。
f:id:espio999:20191229233841p:plain

クラスタ分析を比較した結果、3グループへの分割が誤りも少なく良好な結果を得た。グラフとプロット上のグループと色が一致していないことに注意。
f:id:espio999:20191229234113p:plain
f:id:espio999:20191229234125p:plain

小数グループの1~3とは、次の投稿を指している。これらの投稿はPageviewが極端に多いのだが、Bounce rageはそれほど高くない。とはいえ、それでも82~91%なのだが。

1 Intel RST導入済みPCへのWindows 10 May 2019 Update (Windows 10 1903)更新がブロックされるーその強硬的解決
2 Chrome、同期できない場合の一解決
3 VSCodeで最低限のRuby環境構築 - 設定編

プロット上でグリーンのグループは、Avg. Time on Pageが高い投稿のグループだ。これは次の主成分分析の結果から明らかだ。
f:id:espio999:20191229233919p:plain

先のプロットとDim1の左右が逆転していることに注意してほしい。Dim1が表しているのは、ほぼAvg. Time on Pageだ。矢印の反対方向に向かうほど、その値は大きくなる。
小数グループの1~3は、Pageviewの矢印の延長上にあり、他の記事との極端な違いが結果に反映されている。
ちょうどBounce Rateの矢印と逆方向へ延長するようにデータが広がっているのが分かる。この延長上に沿うように並ぶのが、グリーンのグループというわけだ。

このブログの全体の傾向、特徴として、次のことを見出すことができる。このブログは次のように構成されているというわけだ。

  • ごく僅かの人気投稿
  • 常連を抱えた投稿の小グループ
  • PageviewもBounce rateも少ないとはいえ、多数派の投稿の文章にも目を通されている。

多くの人を集め、参照される3つの投稿に、限られた数の投稿を目当てに、繰り返し訪問してくれる熱心な少数のユーザーを抱えているのが、このブログの際立った特徴だ。