Posted at

[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