The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

$0

 概要: 
  tsv 形式のデータを読み取り、あらゆる列のペアで出現した値のペアの頻度に
  基づいた統計表を2個出力する。

 出力
  
    1番目の表 : 異なる値のペアがいくつあったか。

      正方行列のi行j列目の要素は、入力行のi列目とj列目を比較したときに、
      i <= j の場合(右上) : 入力の第i列目と第j列目の異なる組合せがいくつあったか。
      i > j  の場合(左下) : ひとつずつの列で考えた場合に実現可能な範囲(最小0%,最大100%)のどこにあるか。
         (ここで最小とはi列またはj列の異なる値の数の少ない方、最大とはそれら異なる数2個の積と入力件数の少ない方。)

      右上については、全行数に等しいか(:)、あらゆる組合せが発生したか(*)、
      組合せの数がそれぞれの列の値の異なる数から考えて最小であったか(-)、
      により、それぞれ括弧内の記号をつけて、色を付けた。
      対角線については、明るい緑色をつけた。

    2番目の表 : 出現したペアの値の頻度についての最小値と最大値

      右上については、i列とj列の値のペアで頻度表を作り、その頻度の最小と中間値と最大をハイフンで結ぶ。
      ここで中間値とは、-qの指定が無い場合は中央値。-q 0.9のような指定で90%値となる。
      左下については、j列とi列の値のペアで、丁度中間値の回数だけ出現した組合せを|で挟んで出力。

    -N 
    -T 

 オプション:

  -= ; 先頭行を列の並びと見なし、利用する。データは2行目からと考える。
  -q num ; 2番目の表で中央値の代わりに 「範囲の分位点」(0 <= num <= 1で位置参照)を与える。0.5なら中央値 ; 0.99999で2番目の値を取り出せるようにした
  -N ; ある列Aから別の列Bについて、Aの値からBの値が一意に定まらないようなAの異なる値の個数を表示する。(Non-deternability 非決定度 )
  -T ; 2個の列A,Bの、値のペアから、どの列Cの値が決定できるかを、行列状に表示する。右下の青い文字は、決定ができない値のペアが1個だけのものになる列Cを表す。
  -2 0 ; 入力行数と算出時間の情報を標準エラー出力に出さない。
  -v 0 ; 具体的な値についての情報を出さない。
  -m N ; 2番目の出力表で具体的な値を何個表示するか。未指定なら3。
  
  開発上のメモ :
     * 他のコマンド similarcols と統合したい。
     * 計算速度の考慮、メモリをどれだけ必要とするかについてのヘルプをここに書いた方が良さそう。
     * -i 区切り文字 を実装したい。