0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rでコロプレスマップの作成練習:プロ野球選手を多く輩出しているのはどの県か?

Last updated at Posted at 2024-08-12

今回はデータを地図に可視化する練習です。
こちらのサイトを参考にしながらやっていきます。

NipponMapを活用して都道府県別データを日本地図に可視化していきます。
まずは必要なライブラリを追加。

install.packages("NipponMap")

library(sf)
library(tidyverse)
library(NipponMap)

ダウンロード>R>win-library>Rのバーション)>NipponMap 
にshapesと示されるフォルダがあるので,これをコピーし, 作業ディレクトリにコピーしておきます。
シェイプファイルのデータを読み込み、ggplotで描画。

Nippon_map<-read_sf("shapes/jpn.shp", crs="WGS84")
ggplot()+ 
  geom_sf(data=Nippon_map)

image.png

データの中身をチェック。

> head(Nippon_map)
Simple feature collection with 6 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 139.5506 ymin: 37.7308 xmax: 148.8678 ymax: 45.5331
Geodetic CRS:  WGS 84
# A tibble: 6 × 6
  SP_ID jiscode name     population region                                                                         geometry
  <chr> <chr>   <chr>         <dbl> <chr>                                                                <MULTIPOLYGON [°]>
1 1     01      Hokkaido    5506419 Hokkaido (((139.7707 42.3018, 139.8711 42.6623, 140.1895 42.8243, 140.3062 42.7741, 14…
2 2     02      Aomori      1373339 Tohoku   (((140.8727 40.48187, 140.6595 40.4018, 140.3903 40.4843, 140.0229 40.4172, 1…
3 3     03      Iwate       1330147 Tohoku   (((140.7862 39.85982, 140.8199 39.86421, 140.8813 39.87221, 140.8819 39.87228…
4 4     04      Miyagi      2348165 Tohoku   (((140.2802 38.01415, 140.2802 38.01417, 140.2805 38.02494, 140.2804 38.02509…
5 5     05      Akita       1085997 Tohoku   (((140.7895 39.86026, 140.8253 39.6481, 140.6565 39.3879, 140.8112 39.1752, 1…
6 6     06      Yamagata    1168924 Tohoku   (((140.2802 38.01415, 140.2799 37.97209, 140.2801 37.97209, 140.2795 37.7786,…

ggplotで人口分布の可視化します。

ggplot()+ 
  geom_sf(data=Nippon_map, aes(fill=population))

image.png

カラーパレットを変更し、タイトルやキャプションを追加します。

ggplot()+ 
  geom_sf(data=Nippon_map, aes(fill=population))+
  scale_fill_distiller(palette="YlGnBu", direction=1)+
  labs(fill="人",
       caption="出典:NipponMap")+
  ggtitle("都道府県別人口")+
  theme_bw()

image.png

次に65歳以上高齢者人口割合データを可視化します。データはこちらのリンクからダウンロードします。

データをダウンロードして作業ディレクトリに保存し読み込み。

Elderly_pop<-read.csv("FEI_PREF_240812113558.csv",
                      sep=",", skip=1,
                      header=TRUE,
                      fileEncoding="CP932" ) 

データをチェック。

> Elderly_pop %>% 
+   head()
  調査年.コード   調査年 地域.コード   地域 X.項目 X.A03503_65歳以上人口割合... 注釈
1    2022100000 2022年度        1000 北海道     NA                         32.8   NA
2    2022100000 2022年度        2000 青森県     NA                         34.8   NA
3    2022100000 2022年度        3000 岩手県     NA                         34.6   NA
4    2022100000 2022年度        4000 宮城県     NA                         28.9   NA
5    2022100000 2022年度        5000 秋田県     NA                         38.6   NA
6    2022100000 2022年度        6000 山形県     NA                         34.8   NA

3列目と6列目は使用するので列名を変更します。

Elderly_pop %>% 
  rename(SP_ID=3, 
         Elderly_pop_rate=6) ->
  Elderly_pop

データをNippon_mapと結合するために修正します。
県のIDを1000で割り、文字列型に変更します。

Elderly_pop %>% 
  mutate(SP_ID=SP_ID/1000) %>% 
  mutate(SP_ID=as.character(SP_ID)) -> 
  Elderly_pop

#Nippon_mapと結合
Elderlry_map<-
  left_join(Nippon_map, Elderly_pop, 
            by=c("SP_ID"))

追加データを可視化します。

ggplot()+ 
  geom_sf(data=Elderlry_map, 
          aes(fill=Elderly_pop_rate))+
  scale_fill_viridis_c(option="G", direction=-1)+
  labs(fill="%",  
       caption="NipponMap
       出典:総務省都道府県・市区町村のすがた")+
  ggtitle("65歳以上人口割合(2022年度)")+
  theme_bw()

image.png

さて、使い方がなんとなくわかったので、以前の投稿でも使用したプロ野球のデータの中で出身地のデータを可視化してみます。

まずはデータのダウンロードと読み込みです。

install.packages('openxlsx')
library(openxlsx)

#ピッチャーのデータを読み込み。
datP<-read.xlsx("C:/Users/ユーザー名/Downloads/pitcher_data.xlsx",sheet="Sheet1")
#使用する列をセレクト
datP_出身地<-datP %>% 
  select("選手名","出身地")
  
#バッターのデータを読み込み。
datH<-read.xlsx("C:/Users/ユーザー名/Downloads/hitter_data.xlsx",sheet="Sheet1")
#使用する列をセレクト
datH_出身地<-datH %>% 
  select("選手名","出身地")

#データを結合
dat_出身地<- rbind(datP_出身地,datH_出身地)

選手のかぶりを除き集計します。

dat出身地集計<- dat_出身地%>% 
  distinct(選手名, .keep_all=T) %>% 
  group_by (出身地) %>%
  summarise(人数=n()) %>% 
  data.frame()

データをチェック。

> dat出身地集計
           出身地 人数
1        アメリカ  277
2      アンティル    1
3        イタリア    1
4    インドネシア    1
5        オランダ    2
6  オーストラリア    5
7          カナダ    6
8      キュラソー    1
9        キューバ   36
10     コロンビア    1
11           タイ    1
12 ドミニカ共和国   94
13     ニカラグア    1
14         パナマ    3
15   パナマ共和国    1
16       ブラジル    8
17   プエルトリコ   10
18     ベネズエラ   47
19       メキシコ   11
20           三重   29
21           京都   53
22           佐賀   31
23           兵庫  101
24         北海道   48
25           千葉   84
26           台湾   25
27         和歌山   31
28           埼玉   76
29           大分   29
30           大阪  161
31           奈良   32
32           宮城   27
33           宮崎   22
34           富山   13
35           山口   10
36           山形   13
37           山梨    8
38           岐阜   27
39           岡山   31
40           岩手   15
41           島根    9
42           広島   51
43           徳島   18
44           愛媛   18
45           愛知   68
46           新潟   18
47           東京   92
48           栃木   26
49           沖縄   43
50           滋賀   21
51           熊本   32
52           石川   23
53         神奈川  117
54           福井   20
55           福岡  101
56           福島   15
57           秋田   19
58           群馬   38
59           茨城   42
60           長崎   18
61           長野   10
62           青森    9
63           静岡   41
64           韓国   12
65           香川   17
66           高知   12
67           鳥取    3
68         鹿児島   30

なんとか日本のデータにしぼり、結合できるように修正していきます。

#漢字の行だけに絞ります。
dat_jp<-dat出身地集計[20:68, ]
#韓国と台湾を除きます。
dat_jp<-subset(dat_jp,!出身地=="台湾")
dat_jp<-subset(dat_jp,!出身地=="韓国")

#県が入っていないので文字を足します。
dat_JP<-dat_jp %>% 
  mutate(都道府県=paste0(出身地,"県")) 

#道・都・府を修正します。
dat_JP["都道府県"]<-lapply(dat_JP["都道府県"], gsub, pattern="北海道県", replacement = "北海道")
dat_JP["都道府県"]<-lapply(dat_JP["都道府県"], gsub, pattern="東京県", replacement = "東京都")
dat_JP["都道府県"]<-lapply(dat_JP["都道府県"], gsub, pattern="京都県", replacement = "京都府")
dat_JP["都道府県"]<-lapply(dat_JP["都道府県"], gsub, pattern="大阪県", replacement = "大阪府")

先ほど使用した65歳以上の人口のデータから使用する列だけを抜き出します。

Elderlry_map %>% 
  rename(都道府県=9) %>%    #列名の変更
  select(1,2,3,4,5,6,9)->
  baseball_map
baseball_map

これに出身地のデータを結合します。

baseball_map<-
  left_join(baseball_map,dat_JP, 
            by=c("都道府県"))

データを可視化します。

ggplot()+ 
  geom_sf(data=baseball_map, 
          aes(fill=人数))+
  scale_fill_viridis_c(option="G", direction=-1)+
  labs(fill="人数",  
       caption="NipponMap
       出典:プロ野球データフリーク")+
  ggtitle("出身地別プロ野球選手数(2009-2023年の合計)")+
  theme_bw()

image.png

やはり単純に人口の多いところが多く見えます。
今度は人口あたりでも見てみます。

baseball_map<-baseball_map %>% 
  mutate(人口あたりの選手割合=人数*100/population)

ggplot()+ 
  geom_sf(data=baseball_map, 
          aes(fill=人口あたりの選手割合))+
  scale_fill_viridis_c(option="G", direction=-1)+
  labs(fill="%",  
       caption="NipponMap
       出典:プロ野球データフリーク")+
  ggtitle("人口あたりのプロ野球選手の割合")+
  theme_bw()

image.png

西日本が人口比で多いですね。特に和歌山や佐賀で多いのはちょっと驚きでした。
見てみます。

> dat_和歌山<-subset(dat_出身地,出身地=="和歌山") %>% 
+ distinct(選手名, .keep_all=T)
> dat_和歌山
                           選手名 出身地
1          吉見祐治(よしみゆうじ) 和歌山
2          中川虎大(なかがわこお) 和歌山
3        小林樹斗(こばやしたつと) 和歌山
4      森浦大輔(もりうらだいすけ) 和歌山
5        黒原拓未(くろはらたくみ) 和歌山
6            玉置隆(たまきゆたか) 和歌山
7      岡本洋介(おかもとようすけ) 和歌山
8          岡田俊哉(おかだとしや) 和歌山
9        山本哲哉(やまもとてつや) 和歌山
10           平井諒(ひらいりょう) 和歌山
11   大久保勝信(おおくぼまさのぶ) 和歌山
12     富山凌雅(とみやまりょうが) 和歌山
13       西口文也(にしぐちふみや) 和歌山
14         益田直也(ますだなおや) 和歌山
15           南昌輝(みなみまさき) 和歌山
16       東妻勇輔(あづまゆうすけ) 和歌山
17             八木彬(やぎあきら) 和歌山
18       土屋朋弘(つちやともひろ) 和歌山
19           巽真悟(たつみしんご) 和歌山
20         津森宥紀(つもりゆうき) 和歌山
21     西村天裕(にしむらたかひろ) 和歌山
22     山本芳彦(やまもとよしひこ) 和歌山
23       小久保裕紀(こくぼひろき) 和歌山
24           中谷仁(なかたにじん) 和歌山
25         濱中治(はまなかおさむ) 和歌山
26     筒香嘉智(つつごうよしとも) 和歌山
27       西川遥輝(にしかわはるき) 和歌山
28       坂口真規(さかぐちまさき) 和歌山
29 山崎晃大朗(やまさきこうたろう) 和歌山
30           三家和真(みけかずま) 和歌山
31           林晃汰(はやしこうた) 和歌山

なかなかそうそうたるメンバーですね~。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?