본문 바로가기
관련 소프트웨어 사용하기/GIS

QGIS 시군구 코드 차이 - shp 파일과 데이터 조인 시 NULL 값 오류 해결 방법 (shp 파일 다운로드 O)

by 썬이해 2024. 1. 20.
반응형

이전 포스팅에서 QGIS에 csv 파일을 불러오고 shp 파일과 조인하는 방법을 알아보았는데요.
 

QGIS 조인 - 속성 파일(.csv) 추가하고 벡터 파일과 조인(join)하는 방법

QGIS에서 공간분석 수행을 위한 과정 중 파일을 불러오고 분석하기 위해 활용 가능한 파일을 준비하는 것은 중요합니다. 이에 엑셀 파일을 csv 파일로 변환하여, QGIS에 csv 파일을 추가하고 shp 파일

from-sunnyday.tistory.com

 
종종 조인할 때에 코드가 맞지 않아서 오류(NULL 값)이 뜨는 경우가 있습니다. 오늘은 왜 시군구 코드로 조인 시에 오류가 발생하는지 알아보고, 해결할 수 있는 방법을 설명해드리려고 합니다.
 

NULL 값이 뜨는 경우(조인 에러)

조인(join)을 하고 결측치가 뜨는 경우를 확인해 보았습니다. 조인을 하고 나서 꼭 해당 레이어 위에 커서를 가져다 놓고 오른쪽 마우스 > 속성 테이블 열기를 하셔서 조인이 제대로 되는 지 확인을 해야 합니다. 확인을 하지 않고 다음 분석을 진행하다가 나중에 알아차리면 귀찮기도 하고 시간이 아깝게 느껴지니까요.
 

 
그렇게 확인한 결과 위 그림과 같이 NULL 값이 떠서 제대로 조인이 되지 않은 경우를 확인할 수 있습니다. 왜 이렇게 조인이 제대로 이루어지지 않은 것일까요?
 

시군구 코드 차이

그 이유는 시군구 코드의 차이 때문입니다. 활용하고자 하는 통계자료와 공간정보인 shp 파일의 시군구 코드가 일치하지 않았기 때문에 조인이 제대로 이루어지지 않은 것입니다.

 
대부분 통계청에서 제공하는 파일은 시군구에서 구가 하나의 시로 통합된 형태로 통계자료를 제공합니다. 종종 분리하여 제공되는 경우도 있지만, 이러한 점도 통계자료마다 차이가 있기 때문에 활용할 때마다 확인을 해주어야 합니다.
반면, 제가 활용하고자 하는 shp 파일에는 시군구에서 하나의 ‘시’ 안에 구별로 나누어져 있는 것을 알 수 있습니다. 이런 차이는 시군구 코드의 차이를 발생하게 하여 조인 시에 코드가 일치하지 않게 됩니다. 이것이 조인 시에 NULL 값이 나타나는 이유입니다.
 


 

시군구 코드 차이가 발생하는 지역

시군구 코드의 차이가 발생하는 지역은 몇 곳이 되지 않습니다. 우리나라에는 총 229개의 시군구 지역이 있는데, shp 파일에서는 250개의 객체로 나타납니다. 대표적으로 경기도 수원시의 코드를 보면 다음과 같이 차이가 발생합니다.

  • (통계자료) 경기도 수원시: 41110
  • (shp 파일) 경기도 수원시 장안구: 41111 | 수원시 권선구: 41113 | 수원시 팔달구: 41115 | 수원시 영통구: 41117

일치하는 코드가 없기 때문에 조인이 제대로 이루어지지 않은 것입니다.
경기도 수원시 외에도 다른 지역을 알아볼까요?

  • 경기도 수원시(41110) – 장안구, 권선구, 팔달구, 영통구
  • 경기도 성남시(41130) – 수정구(41131), 중원구(41133), 분당구(41135)
  • 경기도 안양시(41170) – 만안구(41171), 동안구(41173)
  • 경기도 안산시(41270) – 상록구(41271), 단원구(41273)
  • 경기도 고양시(41280) – 덕양구(41281), 일산동구(41285), 일산서구(41287)
  • 경기도 용인시(41460) – 처인구(41461), 기흥구(41463), 수지구(41465)
  • 충청북도 청주시(43110) – 상당구(43111), 서원구(43112), 흥덕구(43113), 청원구(43114)
  • 충청남도 천안시(44130) – 동남구(44131), 서북구(44133)
  • 전라북도 전주시(45110) – 완산구(45111), 덕진구(45113)
  • 경상북도 포항시(47110) – 남구(47111), 북구(47113)
  • 경상남도 창원시(48120) – 의창구(48121), 성산구(48123), 마산합포구(48125), 마산회원구(48127), 진해구(48129)

11개의 시 지역이 이러한 경우에 해당하는 것을 알 수 있습니다. 이렇게 차이가 발생하는 코드 문제를 어떻게 해결할 수 있을까요?
 


 

조인 시 NULL 값 해결 방법

가장 쉬운 방법은 구가 분리되지 않은 shp 파일을 찾아서 사용하는 것입니다. 또는 가지고 있는 shp 파일에서 구의 객체를 병합하는 방법이 있습니다. 또 다른 방법으로는 통계자료(csv 파일)에 행을 추가하여 구로 구분해주고, 동일한 값을 넣어서 조인 시에 다 일치하게 하는 방법이 있을 수 있습니다. 다양한 방법을 고민해볼 수 있는데요. 오늘은 제가 제작한 파일을 공유해드리도록 하고, 구의 객체를 병합하는 방법은 다음 편에 이어서 설명드리도록 하겠습니다.

 

시군구 코드가 일치하는 shp 파일 제공

우리나라의 시군구 shp 파일은 GIS DEVELOPER 홈페이지(아래 링크)에서 다운받아 사용하였습니다.

대한민국 최신 행정구역(SHP) 다운로드 – GIS Developer

www.gisdeveloper.co.kr

 
다운받은 shp 파일을 활용하여 시군구 코드가 일치하지 않는 지역을 QGIS 내의 객체 병합 기능을 활용하여 통계자료와 일치하는 파일을 제작하였습니다. 실수가 있을 수 있으나 최대한 제대로 행정구역을 반영할 수 있도록 편집하였으니 참고하여 주시길 바랍니다.

구_통합_시군구파일_썬이해.Zip
15.00MB

압축파일을 다운받고 압축을 푼 후에 shp 파일을 사용하시면 됩니다.
 

시군구 코드 일치 확인

먼저 제공한 파일은 핑크색 라인으로 진하게 표시한 시군구 경계이며, 하늘색 배경의 얇은 검정 라인은 원래 shp 파일 원본입니다. 시에 해당하는 구의 벡터를 병합하여 새롭게 제작하였습니다. 또한 통계자료와 일치하도록 코드와 시군구명도 적절하게 변경하였습니다. 만약 직접하고 계시다면 수정 방법은 다음 포스팅에서 확인해주세요!
 

 

그럼 조인이 문제없이 잘 되는지 확인해볼까요?

 

 
문제가 발생했던 수원시, 성남시 등에서 NULL 값이 나타나지 않고 이번에는 제대로 조인된 것을 확인할 수 있습니다.
 

결론

QGIS 작업 시에 조인 오류가 발생했을 경우에, 시군구 코드에 차이가 있는지 확인해보세요. 조인할 통계자료와 시군구 파일이 동일한 코드를 공유하고 있는지 확인하는 것이 필수입니다. 저같은 경우는 엑셀 데이터의 데이터 수와 시군구 shp 파일의 데이터 수의 차이로 코드에 오류가 있다는 것을 발견했습니다. 이런 경우가 아닌 다른 오류가 발생한다면 언제든 댓글로 문의해주세요. 함께 논의하면서 조인 오류를 해결해봅시다.
다음은 shp 파일에서 벡터를 병합하는 방법에 대해 포스팅을 해보도록 하겠습니다.

반응형