11.16.2013

Python: Visualizing Histogram in Terminal

Python: ターミナル上でヒストグラムを可視化する

何本目の車輪か知らないが、ターミナル上でヒストグラムを可視化するスクリプトを再発明。

標準入力に対して、1行ずつ数字(整数or小数)を放り込むと 10個に分けた区間ごとの発生頻度を
「*」の数で可視化する。

1個または複数のファイルを指定して読み取ることも可能。(複数ファイルの場合は合算)

アクセスログや各種ログに含まれる数値の分布を即座に判断しなければならない場合などに使用している。
継続的に見るデータであれば、GrowthForecast などのツールを使った方がいいと思う。

コード

実行例

$ (for i in {1..10}; do echo $RANDOM; done) | ./print_histo.py
[  458.000,  3654.300): ************************                              1
[ 3654.300,  6850.600): ************************************************      2
[ 6850.600, 10046.900):                                                       0
[10046.900, 13243.200): ************************************************      2
[13243.200, 16439.500): ************************                              1
[16439.500, 19635.800):                                                       0
[19635.800, 22832.100): ************************                              1
[22832.100, 26028.400):                                                       0
[26028.400, 29224.700): ************************************************      2
[29224.700, 32421.000]: ************************                              1
$ (for i in {1..10000}; do echo $RANDOM; done) | ./print_histo.py
[    1.000,  3277.600): ********************************************        975
[ 3277.600,  6554.200): *********************************************      1002
[ 6554.200,  9830.800): *******************************************         949
[ 9830.800, 13107.400): ************************************************   1058
[13107.400, 16384.000): *********************************************      1011
[16384.000, 19660.600): **********************************************     1022
[19660.600, 22937.200): ********************************************        988
[22937.200, 26213.800): **********************************************     1016
[26213.800, 29490.400): **********************************************     1016
[29490.400, 32767.000]: *******************************************         963
$

11.08.2013

HBase: How to Change Count Printing Interval

HBase: hbase shell でのカウント間隔を変える

 

hbase shell で count コマンドを実行し行数をカウントする際、10,000件ごとに表示が出るのが煩わしければ

count '<テーブル名>', INTERVAL => 100000

のようにオプションを指定して表示間隔を変えることが可能。

HBase: How to Get the Size of a Table

HBase: テーブルのディスク使用量を調べる方法

 

hbase/テーブル名  ディレクトリの総容量を測ればよい。

OS のファイルシステムなら
  du -sh パス/hbase/テーブル名
など。

HDFS なら
  hadoop hdfs -du -s /hbase/テーブル名
でよい。

10.27.2013

Emacs: How to Insert Same String at the Beginning of Each Line

Emacs: 複数の行頭に文字を挿入する方法

  • まずリージョンを選択

    C-SPACE -> カーソル移動
    (文書全体を選択する場合は C-x h)
     
  • 各行の先頭にスペースを挿入する場合は

    C-x C-i
     
  • 各行の先頭に特定の文字列を挿入する場合は

    C-x r t

How to Install GNU Octave

GNU Octave のインストール方法

 

Machine Learning | Coursera の Week 2 の課題のため、Octave をインストールする。

Octave とは、フリーの数値解析ソフトウェア(プログラミング言語)。
行列の計算やグラフ描画(gnuplotと連携して可視化)が簡単にできることが特徴。

 

Windows

こちらからインストーラをダウンロードして実行。
Octave Forge - Browse /Octave Windows binaries at SourceForge.net 

Coursera の手順に書かれていたのは Octave-3.2.4_i686-pc-mingw32_gcc-4.4.0_setup.exe だった。

インストーラの Choose Components の画面で、"image" パッケージを追加するとよい。

 

Mac

こちらから Mac 用のディスクイメージをダウンロードしてマウント。
Octave Forge - Browse /Octave MacOSX Binary at SourceForge.net

最初、最新版(3.7.7)を入れたらグラフ表示でプログラムが落ちてしまう状態になったので
古いバージョン(3.4.0)をインストール。 

  • 事前に X.11 (XQuartz) をインストール
  • 例によって Octave.app を Applications フォルダにコピー。
  • 次に Gnuplot をインストールするのだが、ここに書いてあるとおり、MacOS Lion 以降だと実行時にエラーとなってしまう。
    Octave Forge - Browse /Octave MacOSX Binary/2011-04-21 binary of Octave 3.4.0 at SourceForge.net
  • Extras 配下の Gnuplot のディスクイメージもマウントし、Gnuplot.app を Applications フォルダにコピー。
  • シェルスクリプト /Applications/Gnuplot.app/Contents/Resources/bin/gnuplot をエディタで開き、
    「DYLD_LIBRARY_PATH」を「DYLD_FALLBACK_LIBRARY_PATH」に全て置換。
    (全部で4ヶ所。「=」の前後双方を置換する必要があるので注意。) 
  • .zshrc (.bashrc) にエイリアスを設定すると便利。
    alias octave="/Applications/Octave.app/Contents/Resources/bin/octave --persist --eval \"PS1('>> ')\""

 

実行例
octave-3.4.0:1> x=-5:5
x =

  -5  -4  -3  -2  -1   0   1   2   3   4   5

octave-3.4.0:2> y=2*x
y =

  -10   -8   -6   -4   -2    0    2    4    6    8   10

octave-3.4.0:3> plot(x,y)

Figure 1 

とりあえずグラフが描画できた。

10.15.2013

Algorithm: Bipartite Graph Matching

二部グラフの最大マッチング

 

output
[(0, 1), (1, 0)]
[(0, 1), (1, 0), (2, 2)]
[(1, 0)]
[(0, 1), (1, 0), (2, 2), (3, 4), (4, 3)]

10.14.2013

FizzBuzz Short Coding in Scala

Scala で FizzBuzz ショートコーディング

 

@lyrical_logical さんの素晴らしい資料からほぼ丸パクリ。

FizzBuzz golf in Scala - Google ドライブ

 

max を使う事で 1文字短縮でき、66 Bytes で書けた。