全力で怠けたい

怠けるために全力を尽くしたいブログ。

パーセンタイル値を計算する percentile コマンドを作りました。

What is percentile コマンド?

データ分析において、パーセンタイル値はしばしば重要な指標となります。

percentile コマンドは、ファイルや標準入力から数値を読み込み、パーセンタイル値を表示する CLI プログラムです。

github.com

percentile コマンドの特長

percentile コマンドには、次のような特徴があります。

  1. ファイルおよび標準入力から数値を読み込み、読み込んだ数値のパーセンタイル値を表示する
  2. 読み込んだ数値はデフォルトでソートされるため、事前にソートする必要がない
  3. 表示するパーセンタイル値は、デフォルトでは p25, p50, p75, p90, p95, p99 だが、オプションで指定することができる
  4. パーセンタイル値はデフォルトでは切り捨てられるが、切り捨てないようにオプションで指定できる

使い方の実行例

percentile コマンドを実行する例を示します。

ファイルから数値を読み込む

percentile <ファイル> と実行すると、ファイルから読み込んだ数値のパーセンタイルを表示します。

$ percentile <(seq 1 100)
p25: 25
p50: 50
p75: 75
p90: 90
p95: 95
p99: 99

標準入力から数値を読み込む

<他のコマンド> | percentile - と実行すると、標準入力から読み込んだ数値のパーセンタイルを表示します。

$ seq 1 100 | percentile -
p25: 25
p50: 50
p75: 75
p90: 90
p95: 95
p99: 99

表示するパーセンタイル値を指定する

表示するパーセンタイル値は、デフォルトでは p25, p50, p75, p90, p95, p99 ですが、-p オプションで表示するパーセンタイル値を指定できます。 表示するパーセンタイル値が複数ある場合は、-p 25,50 のようにカンマで区切ります。

$ seq 1 100 | percentile -p 25,50 -
p25: 25
p50: 50

パーセンタイル値を切り捨てない

表示するパーセンタイル値は、デフォルトでは切り捨てられて整数になりますが、-r オプションを指定すると小数点第1位までが表示されます。

$ seq 1 100 | percentile -r -
p25: 25.5
p50: 50.5
p75: 75.5
p90: 90.5
p95: 95.5
p99: 99.5

インストール方法

percentile をインストールするには、以下の方法があります。

開発者向け

Go 言語の開発環境が整っている場合は、次のコマンドを実行することにより、percentile コマンドをインストールできます。

$ go install github.com/ebc-2in2crc/percentile/cmd/percentile@latest

手動でのインストール

https://github.com/ebc-2in2crc/percentile/releases にアクセスし、お使いの OS 向けの実行ファイルをダウンロードできます。

Homebrew

Homebrew を使う場合は、次のコマンドを実行することにより、percentile コマンドをインストールできます。

$ brew install ebc-2in2crc/tap/percentile

動機

最近、ちょっとしたデータ分析をする際に、パーセンタイル値を求めることが何回かありました。

CLI でパーセンタイル値を求められるコマンドを探したところ、そういったツールはいくつかあったのですが、次のようなところが自分の使い方にはマッチしませんでした。

  • 数値の読み込み元として、ファイルと標準入力の両方をサポートしていない
  • 表示するパーセンタイル値が固定されてしまっている

そこで、パーセンタイル値を計算 & 表示するコマンドをサッと実装してしまいました *1

まとめ

percentile の開発やバグレポート、質問などがあったら、GitHubリポジトリに issue や PR を作ったり、Twitter でお気軽にお声がけいただけたら嬉しいです。

github.com

ということで、 percentile コマンドの紹介でした。

*1:また、再発明をしてしまいました