データのお砂場(156) R言語、白地図に色づけ、midwest、{ggplot2}

Joseph Halfmoon

前回ggplot2パッケージをそれ、mapsパッケージを使い米国の白地図に色をつける方法を練習。今回は ggplot2 パッケージの midwest サンプルデータセットへ戻ります。とはいえ羊頭狗肉?回。データセットはggplot2のものだけれども、プロットにはggplot2使っていません。前回同様 mapとな。

※「データのお砂場」投稿順Indexはこちら

※使用させていただいている Rのversionは 4.3.1。RStudioは 2024.04.2+764 “Chocolate Cosmos” です。

Midwest demographics再び

前回、ロードはしたものの、プロットするに至らなかったサンプルデータセットが以下です。

Midwest demographics

米国中西部の5州、イリノイ、インディアナ、ミシガン、オハイオ、ウィスコンシンの各州内の全カウンティ(郡)について、人口などの変数を集計したデータです。2000年の国勢調査にもとづくデータなようです。Rのサンプルデータセットにしたら「新しい」し、最近のデータじゃん、などと年寄は思ってしまうのですが、よく考えたら4分の1世紀も前のデータです。

変数は28もあります。各変数についてつべこべいうことはいたしません。ただ、全体としては「人種」別の人口とか学歴、年齢層などについて集計したデータで「なんか選挙戦向け」なテイストを感じるデータです。知らんけど。

対象範囲のカウンティのプロット

前回、既に生データのロードはしていますが、前回と同じところまで再度処理を行っておきます。まずはライブラリのロードから。サンプルデータセットが収まっている ggplot2パッケージ、および米国の地図データのプロット用に mapsパッケージをロードしておきます。

library(ggplot2)
library(maps)

データセットは以下の2つ。

data("midwest")
data(countyMapEnv)

さてこれで必要なデータセットがメモリ上に載ったので、以下のコードを走らせてターゲットの全カウンティのマップを作製してみます。こんな感じ。

stateNam <- c('Illinois', 'Indiana', 'Michigan', 'Ohio', 'Wisconsin')
map('county', stateNam, fill = TRUE, col = palette())

プロットが以下に。5大湖の南西側の一帯があらわれております。

midwestCountys南東側の方のカウンティの方が、小さめで結構デコボコがある感じがするのですが、北や西になるほど、面積が広く、区割りも縦横そろっている感じがいたします。米国にヨーロッパ人が「入植してきた」当初、緯度経度で区画を決めて割り当てていた?とも聞くので、その影響?素人老人には分からんなあ。

都市エリアのプロット

データベースの変数の中に inmetroというものがあり、これに1が立っていると「大都市圏」ということになるみたいです。ここでいう大都市圏がどの程度のものかは不明ですが、プロットしてみると5州の「ダイタイ」が分かるかもしれませぬ。

colMetro <- rep('white', length(midwest$inmetro))
metro <- midwest[midwest$inmetro == 1, ]
cnum <- match(metro$county, midwest$county)
colMetro[cnum] <- 'green'

map('county', stateNam, fill = TRUE, col = colMetro)

points(-87.623177, 41.881832, col="black",pch=15)
text(-87.623177, 41.881832+0.3, "Chicago",col="black")
points(-83.04750, 42.3316000, col="black",pch=15)
text(-83.04750, 42.3316000+0.3, "Detroit", col="black")
points(-86.148003, 39.791000, col="black",pch=15)
text(-86.148003, 39.791000+0.3, "Indianapolis", col="black")
points(-89.401230, 43.073051, col="black",pch=15)
text(-89.401230, 43.073051+0.3, "Madison", col="black")
points(-81.681290, 41.505493, col="black",pch=15)
text(-81.681290, 41.505493+0.3, "Cleveland", col="black")

上の4行が、前回の白地図色付けで学んだ方法そのままです。条件にあうカウンティのお名前を引きずり出して、条件の部分に色を指定するためのベクトルcolMetroを生成してます。ここでは都市部に緑色をつけるっと。

そしてプロットは map()関数を使い1撃。

そのあとダラダラとつづく10行は、プロット領域内で大都市じゃないかと思われる都市名とその場所(よくわからんけど、市庁舎の場所?なんなんだ)に印をつけるためのものです。 結果が以下に。midwestMETRO

Chicagoとか、Clevelandとかはいかにもだけれども、Indianapolisとか田舎じゃん?すみません。

白人人口が90%を切っている群

この2000年のデータでは、白人人口が90%を超えているカウンティが大多数に見えるのですが、一部の郡では白人人口が90%を切るところがあるので、これをプロットしてみることにしました。

colPercWhite <- rep('white', length(midwest$percwhite))
percWhiteLess90 <- midwest[midwest$percwhite < 90, ]
cnum <- match(percWhiteLess90$county, midwest$county)
colPercWhite[cnum] <- 'orange'
map('county', stateNam, fill = TRUE, col = colPercWhite)

プロット結果(都市名表示含む)が以下に。midwestWLT90

非白人が多いのは都市部という思い込みがあったのです。確かにそんな感じがしないでもないです。でも「そうでもないところ」にもあり。

ネイティブ・アメリカンの皆さま

このデータセットが「古いな~」と実感されるのは、ネイティブ・アメリカンの皆さまのカテゴリが「アメリカ・インディアン」という呼称になっておることです。まずいぜ。変数名はそのままですが、処理しちまいます。大体どのカウンティもネイティブ・アメリカンの割合はせいぜい0.1%といった数字で非常に低いのですが、一部数%から10%を超えるようなカウンティもあります。これは「リザベーション」という領域があるためかね。だいたい「農業に向かない不便な場所」に押し込められた経緯があるらしいです。以下同文のやりかたでネイティブ・アメリカン比率が1%を超える地域をプロットしてみました。

colPercNA <- rep('white', length(midwest$percamerindan))
percPercNA <- midwest[midwest$percamerindan > 1, ]
cnum <- match(percPercNA$county, midwest$county)
colPercNA[cnum] <- 'red'
map('county', stateNam, fill = TRUE, col = colPercNA)

こんな感じ。midwestNAMT1

カナダ国境に近い北の端に多いみたい。冬は寒そうだな。

データのお砂場(155) R言語、米国の白地図に色づけする、小ネタ、{maps} へ進む

データのお砂場(157) R言語、米国の自動車の燃費データ再び、{ggplot2} へ進む