R로 구분 맵(GIS)을 만드는 방법의 비망록(초보자용)

소개



일본지도의 현마다 한 제품의 매출을 시각화하는 것이 필요하게 되어, 응급처치적으로 자신의 데이터로 작성 이하의 기사를 참고로 작성했습니다.
앞으로도 사용할 수 있을까 생각하기 때문에 내 비망록으로 게시합니다.

준비



{choroplethr} 패키지 설치



이번에는 간단한 색으로 구분 된 맵을 작성한 예입니다.

먼저 설치해야 하는 패키지는 choroplethrAdmin1과 choroplethr입니다. 이 두 가지를 설치하고 라이브러리를로드합니다.
install.packages("choroplethrAdmin1")
install.packages("choroplethr")
library("choroplethr")
library("choroplethrAdmin1")

읽어 보면 다음 명령으로 일본지도를 읽을 수 있는지 확인합니다.
admin1_map("japan")

아래와 같은 이미지가 플롯 영역에 표시되면 OK입니다.



데이터 설치



다음 명령을 사용하여 데이터를 설치하여 표시를 확인합니다.
#install the data
data(df_japan_census)
head(df_japan_census)

콘솔에 다음과 같이 표시되면 OK입니다.
> head(df_japan_census)
   region pop_2010 percent_pop_change_2005_2010
23  aichi  7411000                          2.2
5   akita  1086000                         -5.2
2  aomori  1373000                         -4.4
12  chiba  6216000                          2.6
38  ehime  1431000                         -2.5
18  fukui   806000                         -1.9
   pop_density_km2_2010
23               1434.8
5                  93.3
2                 142.4
12               1205.5
38                252.1
18                192.4


데이터를 csv 형식으로 출력



다음 명령으로 csv 형식으로 출력합니다.
덧붙여 쓰는 것을 잊었습니다만, 출력처는 현재의 R의 워킹 디렉토리가 되기 때문에, 이 커멘드를 실시하기 전에, 스크립트를 보존해, 워킹 디렉토리를 현재의 스크립트의 보존처로 하면, 나중의 조작 편해집니다.
또, 파일명은 임의의 것이어도 상관 없습니다만, 나중에 읽어들일 때에 잊지 않도록 해 주세요.
#Export the demo data to the local folder for customize
write.csv(df_japan_census, "Japan_map_data.csv")

CSV 파일 편집 및 저장



작업 디렉토리에 저장된 CSV 파일에는 1열에 현 ID(숫자), 2열에 로마자 현명, 3열, 4열에 인구 등의 정보가 들어 있습니다.
1열째, 2열째는 변경하지 않고, 3열째 이후에 현별로 가시화하고 싶은 데이터(예:현마다의 매출 등)를 넣습니다.

데이터를 넣은 후 파일을 저장합니다.

현별 데이터를 포함한 CSV 파일 불러오기



저장된 CSV 파일을 로드합니다.
읽을 때의 파일명은 위에서 저장한 csv 파일명을 지정해 주십시오.
또, 공란이 있으면 NA의 정보가 들어 버리므로, NA를 0으로 옮겨놓고, data frame 형식으로 합니다.
#After edit the csv, read the csv 
ifname<-"Japan_map_data.csv"
df_japan_census <- read.delim(ifname, row.names=1, header=T,sep=",",as.is=TRUE,strip.white=FALSE)

#replace NA with 0 and format the table with data frame
df_japan_census[is.na(df_japan_census)] <- 0
df_japan_census <- data.frame(df_japan_census)

드디어 그리기!!



우선, 다음의 오브젝트를 작성해, 현명을 region에, 시각화하고 싶은 데이터의 열을 value로 지정합니다.
덧붙여 이 형식에서는 csv를 data frame으로 변환하고 있어, 1열째가 로마자의 현명, 2열째가 csv 파일의 3열째가 됩니다.
(csv 파일의 1열의 현의 ID 번호는 rowname입니다)
# Create the object for admin1_choropleth function. Specify the column for value to be used for coloring by prefecture 

PlotData <- data.frame(region = df_japan_census[, 1], value = df_japan_census[, 2])
PlotData$region <- as.character(PlotData$region)

다음 명령을 실행하면 플롯 영역에 색칠 맵이 표시됩니다.
(아래 그림은 각 현에 적당히 숫자를 넣어 만든 가공의 판매 데이터입니다)

선택적 제목은 제목으로 표시할 문자열을 지정하고 legend는 범례 문자열을 지정하고 num_colors는 색상을 몇 단계로 표시할지 여부를 지정합니다.
#Plot the data. num_colors are the number of color level
admin1_choropleth(country.name = "japan",
                  df           = PlotData,
                  title        = "Annual sales by prefecture",
                  legend       = "Unit",
                  num_colors   = 4)


警告メッセージ: 
Column `region` joining character vector and factor, coercing into character vector 

아마도 시판 소프트웨어 등으로 더욱 깨끗하고 편하게 만들 수 있는 것이 있을지도 모릅니다만, 익숙해 온 R로 자신의 데이터를 사용할 수 있는 기쁨을 느끼고 있습니다.

몇 줄의 명령으로 여기까지 해 주는 R과, 가능하게 한 패키지의 개발자에게 머리가 떠오르는 생각입니다.

좋은 웹페이지 즐겨찾기