オルタナティブ・ブログ > 発想七日! >

日々の「ハッ、そうなのか!」を書き留める職遊渾然blog

ログファイルの一部を切り取って頻出語を頻出順に30個表示する

»

現場百遍。サイトであれ経営であれ、生データを眺めることも現場仕事のうちである。
先日は、某企業のWebサイトで直帰率が高い状態を改善しようということになり、メンバーの方とログを眺めた。

人がどんな思いを言葉に載せて検索をし、サイトに来てくださっているか。これを目の当たりにすると、奮い立つ。よい結果が得られずサイトを離れていった方に、申し訳ないような気持ちになる。

問題はログの分析だ。Excelでかなり賄えるが、データ量が大きくなると難しい。定型的な分析ツールでは、カジュアルにあれこれ試せない。テキストファイルの扱いは、ときとして生産性や創造性を大きく左右(上下?)するなあと、ハッとした次第。

テキストファイルの扱いは、その出自からしてPerlが最も充実している(らしい)のだが、残念ながらPerlを学んでいない。

先日もそんなことがあった。*ListFreakで「先週検索されたタグを、多い順に30個並べ」て表示させようとしてみた。例えば、
-----
フレームワーク aaa
経営 bbb
フレームワーク ccc
目標 ddd
目標 eee
フレームワーク fff
-----

というログファイルから、下記のリストを得るということだ。

-----
フレームワーク
目標
経営
-----

まったくもって趣味の世界ではあるが、こういうスキルは経営分析にだって活かし得る。だから真面目に考えた。13,4年前に習い覚えたUNIXコマンドで30分くらい頑張って(もっと掛かったかも)、下記のようにした。

sort -k 1,1 <logfile> | uniq -c | sort -k 1,1 -r | head -n 30 | awk '{print $2}'
第一フィールドで並べ替え、
同じ語句の数をカウントした上で重複行を削除し、
そのカウント(出現頻度)の大きい順に並べ替え、
先頭の30行を取り出し、
カウントを除いて語句だけを表示。

僕が現在唯一まともに使える言語であるPHPで同じ事をするよりは、はるかにシンプルにできた(はず)。しかし、もっとエレガントなやり方があるんだろうな。

Comment(2)