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

# 結論

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

# 各国毎の結果

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

割合は全てベーシスポイント([万分率](https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%BC%E3%82%B7%E3%82%B9%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88))です。

## 日本(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](https://github.com/Chris00/ocaml-csv/blob/master/examples/csvtool.ml) コマンドを利用しています。
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
```