[2018年版]シェル芸で各国のお賃金水準を調査してみた


結論

  1. stack overflow の年収調査の結果をシェル芸で処理して各国の賃金水準を調査した
  2. アメリカが例外的に高い。ただしそれ以外の欧米諸国でも概ね1万ドル日本より高い。中国インドはやはり低い。
  3. サンプル数が少なく、アメリカは極端な値が多い。回答率が国に依ってかなり異なる。結果については参考程度にするのがよさそう。

各国毎の結果

金額は特に断りが無い限りアメリカドル(USD)です。

割合は全てベーシスポイント(万分率)です。

日本(Japan)

  • 総回答数 : 361
  • 給与解答割合 : 4736.84
  • 中央値 : 52000
給与(万USD) 割合(bp)
0 467
1 467
2 818
3 1812
4 1228
5 1520
6 643
7 935
8 526
9 584
10 58
12 233
13 58
15over 643

アメリカ(United States)

  • 総回答数 : 20309
  • 給与解答割合 : 6372.05
  • 中央値 : 100000
給与(万USD) 割合(bp)
0 249
1 112
2 130
3 183
4 289
5 516
6 765
7 918
8 921
9 827
10 901
11 719
12 778
13 549
14 401
15over 1734

カナダ(Canada)

  • 総回答数 : 3393
  • 給与解答割合 : 5844.39
  • 中央値 : 64417
給与(万USD) 割合(bp)
1 161
2 332
3 690
4 1502
5 1301
6 1664
7 1099
8 968
9 474
10 413
11 171
12 211
13 70
14 75
15over 549

英国(United Kingdom)

  • 総回答数 : 6221
  • 給与解答割合 : 6098.7
  • 中央値 : 62507
給与(万USD) 割合(bp)
1 150
2 471
3 1009
4 1341
5 1344
6 1378
7 627
8 516
9 550
10 231
11 268
12 168
13 202
14 42
15over 1431

ドイツ(Germany)

  • 総回答数 : 6459
  • 給与解答割合 : 5205.14
  • 中央値 : 61194
給与(万USD) 割合(bp)
1 832
2 336
3 627
4 996
5 1287
6 1534
7 1421
8 687
9 389
10 178
11 163
12 154
13 71
14 68
15over 636

インド(India)

  • 総回答数 : 13721
  • 給与解答割合 : 2981.56
  • 中央値 : 9396
給与(万USD) 割合(bp)
0 5233
1 2287
2 897
3 471
4 193
5 151
6 83
7 75
8 39
9 61
10 26
11 46
12 46
13 12
14 21
15over 351

中国(China)

  • 総回答数 : 1037
  • 給与解答割合 : 2603.66
  • 中央値 : 26184
給与(万USD) 割合(bp)
0 1259
1 2259
2 2370
3 1555
4 962
5 555
6 333
7 296
8 148
9 37
10 37
11 37
15over 148

コード

csvtool コマンドを利用しています。
Ubuntu なら ``apt csvtool'' でインストールできます。

以下のコードは2018年の結果だけでしか動かして居ません。

"/tmp" 以下に "data", "data2", "hoge" といった一時ファイルを作るので、
気になる人は適当に消しましょう。

データ前処理

指数表記の数値の変換、国名の書き換え、データの正規化などを行っています。

csvtool col 4,55 survey_results_public.csv  |
sed -e '1d' \
    -e 's/e+05/00000/' -e 's/e+06/000000/'      \
    -e 's/"Congo, Republic of the..."/Congo/'   \
    -e 's/Democratic Republic of the Congo/Congo/'  \
    -e 's/"Iran, Islamic Republic of..."/Iran/' \
    -e 's/"Micronesia, Federated States of..."/Micronesia/' \
    -e 's/"Venezuela, Bolivarian Republic of..."/Venezuela/'    \
    -e 's/ /_/g'    \
    -e 's/,/ /' |
sort -k2n       |
tee /tmp/data

国ごとデータ作成

function munging() {
    country=$(echo $1 | sed 's/ /_/g')
    awk -v c="$country" '$1==c&&$2!="NA"{ print $2 }' /tmp/data
}

分布出力

function count() {
    file=$1
    awk '{ print int($1/10000) }' $file |
    uniq -c     |
    awk '{ printf("%5d %5d\n", $2, $1) }'
}

万分率分布出力

function count_bp() {
    file=$1
    nr="$(wc -l $file | cut -d' ' -f1)"
    awk '{ print int($1/10000) }' $file |
    uniq -c     |
    awk '{ printf("%5d %5d\n", $2, ($1 * 10000)/'$nr') }'
}

15万ドル以上まとめ込み万分率分布出力

function count_bp_fold() {
    file=$1
    nr="$(wc -l $file | cut -d' ' -f1)"
    awk '{ print int($1/10000) }' $file |
    awk '$1>=15{ $1="15over" }{ print $1 }' |
    uniq -c         |
    awk '{ printf("%8s %5d\n", $2, ($1 * 10000)/'$nr') }'
}

中央値

function median() {
    file=$1
    nr="$(wc -l $file | cut -d' ' -f1)"
    awk 'NR==int('$nr'/2){ print NR, $0 }' $file
}

各国解答数/割合情報作成

awk '{ print $1, ($2!="NA") }' /tmp/data    |
sort    |
uniq -c |
awk '{ print $2, $3, $1 }'  |
awk -v count=0 -v key="" '
key==$1{$1=" "
    printf("%s", $0);
    next;   }
{   printf("\n");
    printf("%s",$0);
    key=$1  }
END{ printf("\n") }'    |
sed '1d'    |
awk '
$2==0&&$4==1{ print $1, $3, $5; next; }
$2==0&&$4==""{ print $1, $3, 0; next; }
$2==1&&$4==""{ print $1, 0, $3; next; }
{ print("ERROR unreachable"); exit(1); }'   |
awk '{ print $1, $2+$3, ($3*10000)/($2+$3) }'   > /tmp/data2

使用例

munging Japan   > /tmp/hoge
median /tmp/hoge
count_bp_fold /tmp/hoge
grep Japan /tmp/data2