国名から地域名や国コードを生成する方法

# 国名から地域名や国コードを生成する方法

国名から地域名や国コードを生成したい場合は`countrycode`という関数が使えます。

# countrycode関数の基本

初めに、countrycodeの関数について紹介します。

countrycodeには3つの引数があります。

```r
countrycode(列名, origin="変換前の値", destination="変換後の値")
```

1つ目の引数は変換したい列です。

2つ目の引数(origin)は元の列の値がどういうタイプになっているかを指定します。例えば、「United States」のように国の名前が値になっている場合は“country.name”を指定します。

3つ目の引数(destination)は変換したい値のタイプを指定します。例えば、地域名に変換したい場合であれば、"continent"を選んだり、ISOコードにしたい場合であれば、"iso2c"を選んだりすることができます。

countrycodeの基本を押さえたところで、実際に国名から地域名や国コードを新しい列として生成していきましょう。

# 国名から地域名を生成する

例えば、バーチャートを使って国ごとに家畜の総生産量の合計を見ているとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/9edcb640-2054-fa0d-21b6-93b29d33789d.png)


このチャートでは、国ごとの生産量を比べることができますが、ここでそれぞれの国を地域によって色分けしたいとします。

その場合、まずcountrycodeを使って国名から地域名を生成します。

国名のある列ヘッダメニューから「データを置換/変換/埋める」を選び、「国名/コードの変換」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/68bfb59e-728b-7fb5-9660-70f8047671bf.png)


すると、計算を作成のダイアログが開きます。

既に、countrycodeの関数と列名が入っています。そして、"origin"と"destination"がドロップダウンで表示されているので、先に"origin"をクリックして値のタイプを指定していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/3f0fba4b-f284-2515-5855-84f37ebda464.png)


"origin"をクリックすると次は値のタイプを選択できるので、今回は国名を使用していることから"country.name"を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/e7c7e3e1-be26-4511-fcc7-0f19d0edc7d4.png)



次に、"destination"を指定していきます。

区切り文字のカンマ(,)を打つとドロップダウンが表示されるので、"destination"をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/f807fe17-535f-7006-b7fc-3904f9e73ce8.png)


値のタイプを選択できるので、今回は地域名を生成したいため"continent"を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/fcca905b-6444-c0f2-6234-9d72abec202d.png)


完成したコードは下記のようになります。この状態になっていたら、実行ボタンを押してください。

```r
countrycode(Area, origin="country.name", destination="continent")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/3d4656e3-3cbd-368b-c0b7-40449d3e30a7.png)



テーブルビューを見ると、新しい列が追加され、国名に合わせて地域名の情報が生成されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/2e88e861-41c1-519b-6ffe-aabfd10cb4b8.png)


これにより、先ほどのバーチャートの「色(グループ化)」に地域名を選択することで、それぞれの国が地域によって色分けされました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/6d4a2e79-5abb-e081-a309-77f76a00bdcd.png)


このチャートを見ると、家畜の総生産量が多い国はアジア/Asia (緑)や南北アメリカ/Americas (オレンジ)といった地域に多いことがわかります。逆に、ヨーロッパ/Europe (赤)の国でトップ20に入ってくる国はロシア/Russiaのみで意外な結果となりました。


# 国名から国コード(ISOコード)を生成する

次に、国名から国コード(ISOコード)を生成する方法について紹介します。

これは、他のデータと結合(Join)する時に便利です。というのも、データによって国名が多少違っていたりするので、(例：United States, United States of America, USA、など)いったん国コードに統一させておくことで、結合しやすくなります。

まずはじめに、ISOとは、International Organization for Standardization（国際標準化機構）のことを指します。

そして、ISOによって定められている国名のコードがあり、USやCNなどのように2文字で表されているもの([ISO2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2))と、USAやCHNのように3文字で表されている([ISO3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3))などいくつかの種類があります。

今回は、"iso2c"というタイプを指定して、国名から国のISO２の文字コードを生成してみます。

国名のある列ヘッダメニューから「データを置換/変換/埋める」を選び、「国名/コードの変換」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/23e503e4-2a16-64ee-1688-09faec8cbf9c.png)


計算を作成のダイアログが開くので先ほどと同様に`origin=country.name`を指定してください。

そして'destination'はISO２の文字コードを生成したいため"iso2c"を指定します。

完成したコードは下記のようになります。この状態になっていたら、実行ボタンを押してください。

```r
countrycode(Area, origin="country.name", destination="iso2c")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/70b555dc-1789-9a3b-e936-ea619f52601c.png)


テーブルビューを見ると、新しい列が追加され、国名に合わせて国コードの情報が生成されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/564d34cd-7dcd-cef5-a39e-ebe8d75cd642.png)


# 国コード(ISOコード)から国名を生成する

もし、元のデータがISOコードで、国名に変換したい場合は下記のようにすると解決できます。

ISOコードのある列ヘッダメニューから「データを置換/変換/埋める」を選び、「国名/コードの変換」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/f53fafa1-7753-c29d-2011-eb309c854f50.png)


計算を作成のダイアログが開くのでこれまでと同様に"origin"と"destination"を指定していきます。

しかし、今回は変換元のデータがISO2の文字コードになっているため、"origin"に"iso2c"を指定します。
そして変換後のデータは国名にしたいため、"destination"は"country.name"を指定します。

完成したコードは下記のようになっています。この状態になっていたら、実行ボタンを押してください。

```r
countrycode(Area, origin="iso2c", destination="country.name")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/25e187a6-531d-0cc6-da9a-fdfbc5e67160.png)


テーブルビューを見ると、新しい列が追加され、ISOコードに合わせて国名が生成されていることがわかります。

![](/Users/takato/.exploratory/projects/Exploratory_Blog_for_Data_Wrangling_gCY4bAD0/markdown_output/image-1565167069821.png)

# 国以外のデータを除く

例えば、国の値が入っているはずの列に地域の値が入っている場合がよくあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/b2eb3d72-09c5-d63f-a6ce-c629ee1ab106.png)


国ごとに違いがあるか比べたい時は、地域の情報などが含まれていると厄介です。

フィルタなどを使って、アジア/Asiaやヨーロッパ/Europeを省くといったこともできますが、目視で確認しながらフィルタをかけるのは面倒ですよね。

そのような時に、countrycode関数を使って国名から値を生成することで、同じ列に地域名などのいらない情報があった時に、地域名から変換後の値の生成はうまくいかないため、欠損値となります。

そのあとにフィルタなどを使って欠損値の行を削除することで、国以外の値が入った行を削除することができます。


まず、国名のある列ヘッダメニューから「データを置換/変換/埋める」を選び、「国名/コード」の変換を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/fde91d28-13ca-8975-b9c0-a3d7c43d429f.png)


すると、計算を作成のダイアログが開くので、"origin"と"destination"を指定していきます。

"origin"は列の値のタイプが国名のため"country.name"を指定します。

"destination"は国名のある列から地域などの無駄な情報を省きたいだけなので、"destination"に指定するタイプはなんでもオッケーです。今回は、"country.name"を指定しています。

完成したコードは下記のようになっています。この状態になっていたら、実行ボタンを押してください。

```r
countrycode(Area, origin="country.name", destination="country.name")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/6c3697db-6d41-e799-cda1-60395fa2ad0f.png)


サマリタブに戻り国がある列をみてみると、欠損値があることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/c40db217-4db6-f1e1-86c0-35c6b91b6dff.png)


これは、国じゃないアジア/Asiaなどの値が欠損値になったことを意味します。

もし、この欠損値を除外したいなら、フィルタから「欠損値でない」を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/759db1aa-6b3f-2166-0445-fc21f5a07ddc.png)


これで欠損値の入った行、つまり国以外の値が入った行を削除することができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192148/498eb563-ce7a-b0ba-595a-19672c94bedc.png)