次元の海で溺れる

Rとデータ解析と統計手法たちとわたし

どうしてもggplot2を使ってコロプレス図を描いてみたい。練習編

平日なので、というか仕事の日なので終始ねむい。
ねむいの。むかしよりもずっと。

最近、
日本の市町村のシェープファイルを取ってきてー
地図を描いてー
他のデータとマージさせてー
うまいこと色分けしたいー

みたいなことを考えて思うようにやったら失敗したので。笑

ちゃんと基礎から練習します。

シェープファイルから地図を描くことは出来たんだけどなあ)

私が思い描いているものは、
どうやらコロプレス図というらしい、、、

参考文献

Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集

Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集

友人に貸していたのが最近戻ってきた!
「やりたいこと」があった時に、辞書的に使ってます。

今回はこれの地図の章の例題をいじりながら使っていこうかなと。

#---まず地図を描いてみる----------------------

install.packages("mapproj")
library(maps)#地図データ読み込み
library(ggplot2)

#アメリカの地図データを取得
states_map=map_data("state")

#地図の描画(白く塗りつぶしたパターン)
ggplot(data=states_map,aes(x=long,y=lat,group=group))+
  geom_polygon(fill="white",colour="black")

##long=経度、lat=緯度。

f:id:WAFkw:20150519224923p:plain

まあまあまあ。
こないだ日本データでうまくいかなかったのでアメリカ地図なことは受け入れる、、、

#---いよいよ本番-------------------------------

#USArrestsデータセットの取得

#アメリカの犯罪発生件数というか、そんな感じのデータセットっぽいですね

crimes=data.frame(state=tolower(rownames(USArrests)),USArrests)

> crimes
                        state Murder Assault UrbanPop Rape
Alabama               alabama   13.2     236       58 21.2
Alaska                 alaska   10.0     263       48 44.5
Arizona               arizona    8.1     294       80 31.0
Arkansas             arkansas    8.8     190       50 19.5
California         california    9.0     276       91 40.6
Colorado             colorado    7.9     204       78 38.7
Connecticut       connecticut    3.3     110       77 11.1
Delaware             delaware    5.9     238       72 15.8
Florida               florida   15.4     335       80 31.9
Georgia               georgia   17.4     211       60 25.8
Hawaii                 hawaii    5.3      46       83 20.2
Idaho                   idaho    2.6     120       54 14.2
Illinois             illinois   10.4     249       83 24.0
Indiana               indiana    7.2     113       65 21.0
Iowa                     iowa    2.2      56       57 11.3
Kansas                 kansas    6.0     115       66 18.0
Kentucky             kentucky    9.7     109       52 16.3
Louisiana           louisiana   15.4     249       66 22.2
Maine                   maine    2.1      83       51  7.8
Maryland             maryland   11.3     300       67 27.8
Massachusetts   massachusetts    4.4     149       85 16.3
Michigan             michigan   12.1     255       74 35.1
Minnesota           minnesota    2.7      72       66 14.9
Mississippi       mississippi   16.1     259       44 17.1
Missouri             missouri    9.0     178       70 28.2
Montana               montana    6.0     109       53 16.4
Nebraska             nebraska    4.3     102       62 16.5
Nevada                 nevada   12.2     252       81 46.0
New Hampshire   new hampshire    2.1      57       56  9.5
New Jersey         new jersey    7.4     159       89 18.8
New Mexico         new mexico   11.4     285       70 32.1
New York             new york   11.1     254       86 26.1
North Carolina north carolina   13.0     337       45 16.1
North Dakota     north dakota    0.8      45       44  7.3
Ohio                     ohio    7.3     120       75 21.4
Oklahoma             oklahoma    6.6     151       68 20.0
Oregon                 oregon    4.9     159       67 29.3
Pennsylvania     pennsylvania    6.3     106       72 14.9
Rhode Island     rhode island    3.4     174       87  8.3
South Carolina south carolina   14.4     279       48 22.5
South Dakota     south dakota    3.8      86       45 12.8
Tennessee           tennessee   13.2     188       59 26.9
Texas                   texas   12.7     201       80 25.5
Utah                     utah    3.2     120       80 22.9
Vermont               vermont    2.2      48       32 11.2
Virginia             virginia    8.5     156       63 20.7
Washington         washington    4.0     145       73 26.2
West Virginia   west virginia    5.7      81       39  9.3
Wisconsin           wisconsin    2.6      53       66 10.8
Wyoming               wyoming    6.8     161       60 15.6

#データセットの統合
#地図の州とデータセットの州をうまいこと紐付ます

crime_map=merge(states_map,crimes,by.x="region",by.y="state")


#マージすると順番が入れ替わっちゃうみたいなので傍観

> head(crime_map)
   region      long      lat group order subregion Murder Assault UrbanPop Rape
1 alabama -87.46201 30.38968     1     1      <NA>   13.2     236       58 21.2
2 alabama -87.48493 30.37249     1     2      <NA>   13.2     236       58 21.2
3 alabama -87.95475 30.24644     1    13      <NA>   13.2     236       58 21.2
4 alabama -88.00632 30.24071     1    14      <NA>   13.2     236       58 21.2
5 alabama -88.01778 30.25217     1    15      <NA>   13.2     236       58 21.2
6 alabama -87.52503 30.37249     1     3      <NA>   13.2     236       58 21.2

#確かにregion(地域)順になってるっぽいことを確認。
#ここでのsubregionはregion以下の島のグループとかの細かい単位という認識です

#arrange関数でソートする
library(plyr)

#group,とorderで順にソート
crime_map=arrange(crime_map,order)

> #もっかい見てみる(orderのところが整った!)

> head(crime_map)
   region      long      lat group order subregion Murder Assault UrbanPop Rape
1 alabama -87.46201 30.38968     1     1      <NA>   13.2     236       58 21.2
2 alabama -87.48493 30.37249     1     2      <NA>   13.2     236       58 21.2
3 alabama -87.52503 30.37249     1     3      <NA>   13.2     236       58 21.2
4 alabama -87.53076 30.33239     1     4      <NA>   13.2     236       58 21.2
5 alabama -87.57087 30.32665     1     5      <NA>   13.2     236       58 21.2
6 alabama -87.58806 30.32665     1     6      <NA>   13.2     236       58 21.2


#変数の1つであるAssault(強盗事件)をfillにマッピング

ggplot(crime_map,aes(x=long,y=lat,group=group,fill=Assault))+
  geom_polygon()+
  coord_map("polyconic")

f:id:WAFkw:20150519225755p:plain

できたーーー
こないだはやっぱりデータのマージ部分orソートが良くなかったんだろうか・・・

別な変数も使って見てみます

#変数の1つであるAssault(強盗事件)をfillにマッピング
ggplot(crime_map,aes(x=long,y=lat,group=group,fill=Assault))+
  geom_polygon()+
  coord_map("polyconic")

f:id:WAFkw:20150519230045p:plain

おおお。

デフォルトの色を変えていないので
犯罪度数の多い方が「色が薄い」みたくなっていて
その点ちょっと直感的にはわかりにくくなってしまっておりますが。

どちらも南東側に州が犯罪度数高めって感じですかね、、

これをベースに色んなデータをマージさせて表示してみることからまず始めてみようかと。
アメリカ州別データならいろいろありそう~


今日は平日だということを言い訳にここまで。
ねむたい。