GIS/gis로 시각화 자료 만들기

Qgis 지도 데이터와 엑셀 데이터 편하게 결합하는 방법(행정구역코드표 첨부, join 기능)

조달송 2021. 2. 5. 18:45
728x90

위와 같이 전국 시군구별 인구현황에 대한 시각화 자료를 만든다고 생각해보자. 필자가 캡쳐한 것과 같이 통계지리정보서비스(sgis.kostat.go.kr/)를 활용할 수도 있겠지만, 여기서 제공되지 않는 데이터를 활용해야하는 경우에는 그럴 수가 없다. 그러니 통계지리정보서비스가 없다고 치고 이런 자료를 만드려면 어떤 과정을 거쳐야 할까?  먼저 지도 데이터를 다운 받고, 인구현황 데이터를 다운 받을 것이다.  지도 데이터는 shp파일 형태로 qgis에서 불러올 수 있지만, 인구현황 데이터는 엑셀 데이터로 제공 받아 qgis에서 바로 띄울 수가 없다. 따라서 이번에는 shp파일과 엑셀파일의 결합 과정에 대하여 설명하도록 하겠다. 

1. 적절한 지도 데이터 다운받기

시각화 하기 위해서는 지도 데이터와 엑셀데이터가 1:1로 대응해야한다. 이게 뭔소리인가 싶겠지만, 시군구 단위의 데이터를 시각화하기 위해서는 시군구 단위의 지도와 시군구 단위의 엑셀파일이 필요한 것이다. 이것은 동 단위의 분석을 할 때 더 중요한 포인트이다. 동은 행정동과 법정동이 따로 있는데, 지도 데이터는 법정동 데이터로 다운받고 엑셀 데이터(인구 수와 같은)는 행정동 데이터로 받으면 1:1로 대응이 되지 않기 때문에 정확한 시각화를 할 수 없게 된다. 그러니, 지도에서 나누어진 행정구역의 수와 엑셀 데이터 상의 행정구역 수가 맞는지 꼭 한번 확인하자. 아! 세종시와 같이 행정구역이 변경된 경우도 있으니 때에 맞는 행정구역 경계를 다운 받는 것도 중요하다. 그리고 통계청(kosis.kr)에서 엑셀 데이터를 다운받을때 코드포함을 체크해주면 행정기관코드가 포함된 엑셀데이터가 나오니 참고하자. 

 

2. 코드가 일치하는지 확인하기 

행정구역과 인구데이터를 1:1로 결합하기 위해서는 기준이 필요하다. 그때 가장 좋은 기준은 행정구역 코드이다. 만약 시군구 명을 기준으로 삼게되면 서울시 중구와 대구시 중구가 똑같이 '중구'로 잡혀 데이터의 누락이 생길 수 있다. 그래서 행정구역 코드를 기준으로 데이터를 결합하는게 좋으나, 데이터마다 같은 행정구역임에도 다른 코드를 쓰는 경우가 있다. 이런 문제는 행정구역코드와 행정기관코드가 다르기 때문에 생기는 것으로, 서울시 종로구를 기준으로 말하자면 이런 것이다. 서울시 종로구는 행정구역코드로는 11010이지만, 행정기관코드로는 11110이다. 이런식으로 다르기 때문에 하나로 통일해서 결합해주어야 한다. 만약 데이터가 몇개안된다면, 그냥 하나하나 확인해서 직접 입력해주면 되지만, 전국의 250개의 시군구를 하나하나 쳐줄 자신이 없다면 다음과 같은 방법을 거치자. 먼저 행정구역 코드표를 다운받아야 한다. 아래의 링크에 최신 행정구역 코드표가 업로드 되니 여기서 다운받으면 된다. 

kssc.kostat.go.kr:8443/ksscNew_web/kssc/common/CommonBoardList.do?gubun=1&strCategoryNameCode=019&strBbsId=kascrr&categoryMenu=014

 

3. 변환할 코드 정제하기

필자의 경우 지도 데이터는 행정구역코드를 기반으로 시군구 코드가 쓰여져 있고, 인구수 데이터는 행정기관코드를 기반으로 시군구 코드가 써져 있었다. 필자와 같이 지도데이터에서 쓰는 행정구역 코드와 엑셀 데이터에서 쓰는 행정구역 코드가 다를 경우에는 코드표 중 '법정동코드 연계 자료분석용' 시트를 보면 된다. 여기에 행정구역코드와 행정기관코드가 나와있으니 이를 기반으로 변환해주면 된다. 이 자료를 보면 행정기관코드가 총 10자리 수로 나와있다. 하지만 내게 필요한 것은 5자리로 left함수를 써 5자리 수만 추출해주자. 이 시트를 복사해서 활용하고자 하는 엑셀 데이터의 새 시트에 붙여 넣은 후, 행정기관코드 옆에 새로운 열을 추가하여 5자리만 추출하면 된다. =left(행정기관코드,5) 이런식으로! 귀찮은 분들을 위해 최신 자료는 아래에 첨부하였으니 참고하시되, 과거 데이터를 이용하시는 분들은 코드가 다를 수 있으니 이 방법을 참고해서 변환해주시면 된다. 

행정구역코드, 행정기관코드 변환표_2021.1.1.기준.xlsx
2.04MB

다음으로는 다운받은 인구데이터의 코드를 정제하는 것이다. 시군구 코드와 이름이 각각의 열에 입력되어 있으면 좋겠지만, 보통 왼쪽과 같이 입력되어 있다. 이럴 때는 먼저, 여백을 삭제해주기 위해서 자치구 코드 앞의 여백을 복사한 뒤, Ctrl+F 바꾸기 기능으로 그 여백을 없애주면 된다. 복사한 여백을 찾을 내용에 붙여주고, 바꿀 내용은 공백으로 둔 후, 모두 바꾸기를 눌러주면 된다. 그런 후 새로운 열을 만들어 앞서 했듯이 left 함수를 써서 앞의 시군구코드 5자리만 추출해주면 된다. 이때 시군구가 아닌 것들은 오른쪽 사진처럼 '전국', '서울' 등의 한글이 포함될 텐데 굳이 신경쓸 필요는 없다. 

 

4. 코드 변환하기

이번에는 vlookup함수를 활용해야 한다. 아까 행정기관코드 5자리를 추출했던 시트에서 가장 왼쪽 열에 엑셀데이터에 포함되어 있는 코드인 행정기관 코드를 두자. 만약 필자의 첨부파일을 참고했다면 시트 중 "시군구변환시"시트를 복사해서 붙여넣으면 된다. 이 시트를 코드변환 시트라고 부르겠다. 그런 다음 다시 원래 시트로 돌아가서 새로운 열을 만든 후 다음과 같은 함수를 입력하자.

 

=vlookup(바로 위의 사진처럼 행정구역코드를 추출했던 값, 코드변환 시트의 전체 선택, 행정구역코드가 포함되어 있는 열의 순서, FALSE)

- 예시) =VLOOKUP(B4,시군구변환시!A:F, 2, FALSE)

- 행정구역코드가 포함되어 있는 열의 순서의 의미는 다음과 같다. 필자의 코드변환 시트의 경우 열이 행정기관코드-행정구역코드-시군구-... 순으로 되어 있어서 필자가 변환해주고 싶은 행정구역 코드는 2번째 열에 있어서 2로 입력하였다.

- False의 의미는 정확하게 일치해야 변환해준다는 것으로 꼭 설정을 해주어야 오류가 나거나 누락되지 않는다.  

 

이렇게 하고 나면 아래와 같이 완성될 것이다. 변환해준 코드의 열이름을 잘 설정해주고, 값들을 선택한 후 복사-붙여넣기 중 값으로 붙여넣기를 선택해서 함수값이 아닌 숫자로 변환해주자. 그런 다음, 이 파일을 qgis에서 불러오기 위해 다른 이름으로 저장하기를 눌러, 파일형식을 csv파일로 설정한 후 저장하자. 

 

5. Qgis에서 지도데이터와 엑셀데이터 파일 불러오기

'레이어-데이터원본관리자'를 열고 '구분자로 분리된 텍스트'를 선택하여 앞서 저장한 csv 파일을 열어주자. 이때, 도형 정의에서 도형없음으로 설정해서 열어주면 된다. 그리고 시군구 지도 데이터도 불러오자. 

 

6. 데이터 결합하기 (JOIN)

'공간처리 - 툴박스'를 누르면 오른쪽 화면에 공간 처리 툴박스가 뜬다. 여기 검색창에 '필드 값으로 속성 조인'을 검색하여 기능을 켜보자. 그러면 아래와 같은 화면이 뜨는데, 입력 레이어에 지도 데이터 레이어를 선택해주고 우리의 경우 시군구 코드를 기준으로 결합시키는 것이기 때문에 테이블 필드 즉, 기준이 되는 필드를 SIGUNGU_CD로 설정해준다. 다음으로 입력 레이어2에는 앞서 만들었던 csv파일 레이어를 선택해주고 여기에도 기준이되는 SGG_CD 필드(앞서 시군구 행정구역 코드 변환했던 열의 이름)으로 설정해준 후 실행을 눌러보자. 

 

7. 데이터 확인하기

앞선 과정을 거치고 나면 '조인된 레이어'가 생성될 것이다. 이거는 임시 파일로 데이터를 확인한 후 제대로 조인이 된 것을 확인했다면 정식 파일로 저장을 해주어야 한다. 조인된 레이어에서 우클릭을 하여 속성값을 확인해보자. 그러면 아래와 같이 지도 데이터와 엑셀 데이터의 값이 행정구역 코드를 기준으로 결합된 것을 확인할 수 있다. 제대로 들어온 것을 확인했으니 다시 우클릭하여 '객체를 다른 이름으로 저장'을 눌러 제대로 저장해주자! 

 

일련의 과정이 다소 복잡했지만, 알아두면 많은 데이터를 결합해야할 때 편리한 것이라 길게 설명을 하였다. 코드가 통일되어 있는 두 파일이라면 금방 하겠지만, 이와 같이 코드가 다른 경우가 종종 있으니 잘 참고하시면 좋겠다. 

반응형