はじめに
今回から「データ発見隊」と題して,さまざまなデータやアルゴリズムの活用に関する話題を連載させていただきます。今回は,ファイルやWebページのアクセスパターンの活用について考えたいと思います。
ファイルの属性
ファイルシステム上にはさまざまな種類のファイルが混在しているため管理が難しいものです。たとえばRuby on Railsでサイトを構築する場合,HTMLファイル,プログラムファイル,ライブラリ,各種設定ファイル,データベース,ログファイルなど,さまざまなファイルが使われます。また,Ruby on Railsが自動的に生成するソースファイルもあれば,ユーザが自力で作成するソースファイルもあります。これらごちゃまぜなファイルを適切にバージョン管理やバックアップすることは簡単ではありません。
しかもUNIXやWindowsのファイルシステムは,ファイルの大きさ,作成時刻,最終アクセス時刻のような限られた情報しか保存していませんから,これら以外の属性を簡単に調べたり利用したりすることができません。
作成時刻やパーミッションのような一般的なファイル属性以外に,次のような属性でファイルを区別できると便利なことがあるでしょう。
- 利用する頻度
- たくさん使うのか/少しだけ使うのか
- 重要度
- 貴重なのか/どこにでもあるのか
- 利用のパターン
- 一時的に使うのか/長年にわたって使うのか
- 作成パターン
- 編集を行うのか/参照のみ行うのか
- 来歴
- ダウンロードしたのか/自分で作成したのか
ファイルの使われ方や重要度などが簡単にわからないことは,考えてみると不思議です。どこにでもあるサンプルプログラムなのか苦労して作った大事なプログラムなのか区別がつかないのは悲しいですし,長年にわたり編集されてきた文書と拙速に作られた文書では重みが違ってほしいものです。
さまざまなファイルの属性をうまく活用すると,重要なファイルを優先的にバックアップしたり,自分が撮った写真だけを抽出したり,出先で必要になりそうなファイルをまとめておいたりすることが簡単にできるようになるでしょう。
アクセスパターンを調べてみる
UNIXやWindowsのファイルシステムでは,ファイルが誰にどのようにアクセスされたかという履歴情報は記録されません。そのような情報を利用したい場合は特別な方法で管理する必要があります。
筆者はメモや予定表のような個人的な情報をすべてWikiで管理しており,編集を行うたびに別ファイルとしてセーブするようにしているので,セーブされているファイルをリストすることによって編集履歴を知ることができます。図1は,筆者のWikiページのタイトルと更新履歴を視覚化したものです。バーコードのようなグラフの横軸は時刻を示しており,黒くなっているところでファイルが更新されたことを示しています。グラフの左側ほど新しいアクセスを示しており,8ヵ月ぶんのアクセスパターンが表示されています。
図1のアクセスパターンを見ると,
- 「Git」のページを一月前に集中的に編集したこと
- URL記録システムについて最近考えていること
- 「TODO」ページが頻繁に更新されていること
などが一目瞭然です。「Clip2Net」などの単純なブックマーク的なページは編集が少ないので白いままになっています。
このように少なくとも自分のメモなどに関しては,正確な作成時刻/最新更新時刻よりも,いつごろどのようにアクセスしているかという情報のほうが重要だと言えそうです。
ファイルに対してもこのような属性を手軽に利用できれば,昔よく使ったファイルを検索したり,人からもらったファイルと自分で作った入魂のファイルを区別したりすることが簡単にできるようになるでしょう。
アクセスパターンの解析
世の中の複雑な事象の多くは「冪乗則(べきじょうそく)」に従うことが知られています(参考文献1)。冪乗則とは関係をf(x)=axkという式で表現できるもので,「文章中でk番目に多く出現する単語の出現頻度は1/kに比例する」という「Zipfの法則」や,富豪の収入分布,書籍の売上分布など,さまざまな統計データが冪乗則に従う冪分布(べきぶんぷ)になっていることが知られています。
冪乗則に従うデータを両対数グラフ上にプロットすると直線になります。また,両対数グラフ上で直線になる関係は冪乗則に従うと言えます。前述のWikiページへのアクセス回数やアクセス時間の間隔などを両対数グラフ上にプロットすると図2~3のように直線になり,分布が冪乗則に従っていることがわかります。
一方,個別ページへのアクセス間隔は冪分布にはなっておらず,ページの特徴に応じてパターンが異なるようです(図4~5)。
アクセスパターンの解析を行うことにより,周期的にアクセスするページ/突発的にアクセスするページなどを自動的に区別できるでしょう。

