最新

val it : α → α = fun

<<  2007/06  >>

2007/06/11 コマンド履歴分布

Zipfの法則というのを知っているだろうか。何らかのランキングを取ったときに、その順位とスコアを両対数でプロットすると直線的に減少するという性質のことだ。

もともとは言語学の話で、ある一定の長さの文章から単語をカウントしていって、多い順に並べる。その順位と、出現回数をプロットするところから発見された概念。ただしほかにもいろんなところで出てくることが知られていて、まあ実例は↑でリンクしたウィキペディアの記事を見るなりなんなりしてちょーだい。ちなみにわたしも前に日本語でZipfの法則が成り立つかどうかということを書いたことがある。

で、掲題の話。

ふと、「コマンドの履歴ってどういう分布になっているのかな」ということが疑問になったわけだ。というか、疑問というよりもそれが Zipf 分布に従っていたりしないものかな、とまあそういう感じで。

というわけで、手元にある10万行を越える .zsh_history からコマンド名のところを抽出して、頻度を計算して両対数プロットしてみました、ってのが↓コレ。

command ranking

というように、 zipf の法則に従っているわけではないということがわかった。ランキングの低い方はわりと綺麗に分布しているんだけど、高いところで鈍っちゃうらしい。うーむ。↑の「日本語でも……」のもやっぱりランキングの高いところで訛っているんだが、ここまでではないし。

まあ、そういうことでした。「だからなに」っていわれると返す言葉もないですが、なかなか面白いよね。

ちなみにわたしの履歴から、よく使うコマンドトップ20。

  1. ls
  2. less
  3. cd
  4. sudo
  5. make
  6. rm
  7. runghc
  8. grep
  9. pd (popd のエイリアス)
  10. man
  11. darcs
  12. kz (kazehakase のエイリアス)
  13. exit
  14. ./a.out
  15. vi
  16. fg
  17. su
  18. xinit
  19. ghci
  20. emacs

だいぶ前から取っているので、今はぜんぜん使ってないもの(xinitとか)もけっこう出てくるなあ、という感じですね。 runghc がやたらあるのは、 Haskell のモジュールを何度もインストールしたりテストしてみたりする上に、1回のインストールで最低でも「configure」「build」「install」と3回が必要だから、かな。 Cabal によるインストール以外では runghc は使ったことないはずなので。

ちなみに emacs より vi の方が上なのは、 emacs はログインすると自動的に起動するようになっているため、端末を叩いて起動させることが滅多にないから。そのわりに上位にあって驚いた。