library(tidyr)
library(ggplot2)
library(sf)
# 下位ディレクトリに置いたシェープファイルを読み込む。
fukuoka_shp <- st_read("/Users/moteki/Library/Mobile Documents/com~apple~CloudDocs/RStudio/maps/N03-190101_40_GML/N03-19_40_190101.shp")
## Reading layer `N03-19_40_190101' from data source
## `/Users/moteki/Library/Mobile Documents/com~apple~CloudDocs/RStudio/maps/N03-190101_40_GML/N03-19_40_190101.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 1997 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 129.9814 ymin: 33.00002 xmax: 131.1906 ymax: 34.25024
## Geodetic CRS: JGD2011
# シェープファイルの構造(structure)と内容の確認
str(fukuoka_shp)
## Classes 'sf' and 'data.frame': 1997 obs. of 6 variables:
## $ N03_001 : chr "福岡県" "福岡県" "福岡県" "福岡県" ...
## $ N03_002 : chr NA NA NA NA ...
## $ N03_003 : chr "北九州市" "北九州市" "北九州市" "北九州市" ...
## $ N03_004 : chr "門司区" "門司区" "門司区" "門司区" ...
## $ N03_007 : chr "40101" "40101" "40101" "40101" ...
## $ geometry:sfc_POLYGON of length 1997; first list element: List of 1
## ..$ : num [1:7, 1:2] 131 131 131 131 131 ...
## ..- attr(*, "class")= chr [1:3] "XY" "POLYGON" "sfg"
## - attr(*, "sf_column")= chr "geometry"
## - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA
## ..- attr(*, "names")= chr [1:5] "N03_001" "N03_002" "N03_003" "N03_004" ...
head(fukuoka_shp)
tail(fukuoka_shp)
# 福岡県の白地図
ggplot(fukuoka_shp)+
geom_sf()
# 作業用シェープファイルの作成(fukuoka_shp_mod)
fukuoka_shp_mod <- fukuoka_shp
データは、基本的に2015年のものを採用している。
市全体のデータは、datにある。それを取り出す。北九州市のデータはdat[dat$X1=="40100"]として取り出す。
後で行併合するために各区のベクトルを作成する。門司区のコードは40101なので、取り出してある北九州市全体のデータ(ベクトル)の地域コードを40101に書き換える。そのベクトルをデータフレームk_ku_allに保存する。同じような処理を両市の各区についておこなう。その結果をdatと併合する。
library(stringr)
# 北九州市
k_data <- dat[dat$X1=="40100",]
k_code <- vector("integer",9)
# vector() functionは任意の長さの空ベクトルを生成
# 空のデータフレームの作成(9行35列)
k <- matrix(numeric(9*35),nrow=9)
k_ku_all <- as.data.frame(k)
colnames(k_ku_all) <- colnames(k_data)
for (i in 1:9) {
k_code[i] <- str_c("4010",i,sep="")
}
for (i in 1:9) {
k_data$X1 <- k_code[i]
k_ku_all[i,]<- k_data
}
dat$X1=="40305"
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
dat$X1[29]
## [1] "40305"
fukuoka_shp_mod[fukuoka_shp_mod$N03_007==40231,]
dat$X1[29] <- "40231"
dat_ku <- rbind(dat,k_ku_all,f_ku_all)
rownames(dat_ku) <- 1:nrow(dat_ku)
head(dat_ku,3)
tail(dat_ku,10)
fukuoka_map <- merge(fukuoka_shp_mod,dat_ku, by.x="N03_007",by.y="X1", all.x=TRUE)
#str(fukuoka_map)
#tail(fukuoka_map)
#fukuoka_map[fukuoka_map$N03_004=="東峰村",]
library(ggplot2)
ggplot(fukuoka_map)+
geom_sf(aes(fill=A6108))+
labs(x="東経",y="北緯",title="昼夜間人口比率",fill="A6108")+
theme_minimal(base_family = "HiraKakuProN-W3")
パーセンタイル表示。
qa <- quantile(dat$A6108,c(0.00,0.25,0.50,0.75,1.00),na.rm = TRUE)
qa
## 0% 25% 50% 75% 100%
## 78.100 84.575 89.700 98.150 131.900
fukuoka_map$A6108_q <- cut(fukuoka_map$A6108,qa,
labels=c("0-25%","25-50%","50-75%","75-100%"), include.lowest = TRUE)
pal <- colorRampPalette(c("#559999","grey80","#BB650B"))(4)
library(ggplot2)
ggplot(fukuoka_map)+
geom_sf(aes(fill=A6108_q))+
scale_fill_manual(values = pal)+
labs(x="東経",y="北緯",title="昼夜間人口比率",fill="A6108\nPercentile")+
theme_minimal(base_family = "HiraKakuProN-W3")
昼夜間人口比率(A6108)について。
# データフレームを昼夜間人口比率の降順で並び替える
# 新しいオブジェクト名: d
d <- arrange(dat,-A6108)
# 上位20を抜き出す
top20 <- d[1:20,]
top20[,c(1,2,28)]
# 昼夜間人口比率(A6108)の高い順に市町村名を並び替えて表示する
# ggplot2で作成
ggplot(top20,aes(x=A6108,y=reorder(X2,A6108)))+
geom_point(size=3,col="seagreen")+
labs(x="昼夜間人口率",y="市町村名",title="昼夜間人口比率の高い市町村",caption = "2015年")+
theme_minimal(base_family="HiraKakuProN-W3")
パーセンタイル表示。
## 0% 25% 50% 75% 100%
## 0.556962 0.973533 1.067217 1.198552 1.636166
転出入人口比率(OutOverIn)について。
# データフレームを転出入人口比率の降順で並び替える
# 新しいオブジェクト名: OutOverIn
d <- arrange(dat,-OutOverIn)
# 上位20を抜き出す
top20 <- d[1:20,]
top20[,c(1,2,28)]
# 転出入人口比率(OutOverIn)の高い順に市町村名を並び替えて表示する
# ggplot2で作成
ggplot(top20,aes(x=OutOverIn,y=reorder(X2,OutOverIn)))+
geom_point(size=3,col="seagreen")+
labs(x="転出入人口率",y="市町村名",title="転出入人口比率の高い市町村",caption = "2015年")+
theme_minimal(base_family="HiraKakuProN-W3")
パーセンタイル表示。
## 0% 25% 50% 75% 100%
## 45.68579 56.10653 60.89911 64.07568 70.92140
核家族世帯率(r_nuclear)について。
# データフレームを核家族世帯率の降順で並び替える
# 新しいオブジェクト名: r_nuclear
d <- arrange(dat,-r_nuclear)
# 上位20を抜き出す
top20 <- d[1:20,]
top20[,c(1,2,28)]
# 核家族世帯率(r_nuclear)の高い順に市町村名を並び替えて表示する
# ggplot2で作成
ggplot(top20,aes(x=r_nuclear,y=reorder(X2,r_nuclear)))+
geom_point(size=3,col="seagreen")+
labs(x="核家族世帯率",y="市町村名",title="核家族世帯率の高い市町村",caption = "2015年")+
theme_minimal(base_family="HiraKakuProN-W3")