僕の使っているコマンドラインツールの #ひかえめなアドベントカレンダー2023 12月13日分はawkです。Rubyで書くほど複雑ではないけれど各行処理では済まないデータの集約に便利です。
ここでは https://gist.github.com/zunda/f566e2bb85ca0616d351139363274ec5 で取得したActivityPubサーバの情報を集計してみます。先週取得した情報がタブ区切りで20231205.tsv
に保存されています。
まず、#で始まるコメント行をから各カラムの番号と内容を確認します。-F\\tで入力をタブ区切りにします。
$ awk -F\\t '/^#/{for(i=1;i<=NF;i++){print i,$i}}' 20231205.tsv
1 #domain
2 software
3 version
4 users_total
5 users_active_month
6 local_posts
7 peers
8 checked_at
9 error
10 nodeinfo_versions
mastodoサーバの月あたりアクティブユーザ数の平均と標準偏差を求めてみます。標準偏差は、各データの自乗の平均から平均の自乗を引いた結果の平方根として求められます。データが得られなかった場合には * が記録されていますので除外します。
$ awk -F\\t '{if($2=="mastodon"&&$5!="*"){s+=$5;s2+=$5*$5;n++}}END{avg=s/n;stddev=sqrt(s2/n-av*av);print(avg,stddev)}' 20231205.tsv
137.306 5164.52
標準偏差が平均よりずいぶん大きいです。正規分布から離れていて、平均や標準偏差にはあまり意味がなさそうですね。
ざっくり大きさ分布を求めてみます。ユーザ数の桁数で分けます。
$ awk -F\\t '{if($2=="mastodon"&&$5!="*"){print int(log($5)/log(10))}}' 20231205.tsv | sort | uniq -c
8512 0
1312 1
483 2
109 3
14 4
2 5
1080 -inf
アクティブユーザ数が1桁のサーバがほとんどのようです。