본문 바로가기

Function

시각화 : 서울, 26년간 공시지가의 변화







들어가며



서울 모든 필지의 26년간 공시지가의 변동을 보여주는 위의 패널은 2016년 베니스 비엔날레 한국관 전시를 위해 작업한 것이다. 색상 선정과 패널 레이아웃 작업은 스튜디오 텍스트(http://www.texttexttext.com/)에서 진행하였다. 


짧은 글을 통해 공시지가 시각화 작업 과정을 소개해보려 한다.








데이터의 수집과 기본 처리




서울의 공시지가는 공공데이터 포털(www.data.go.kr)에서 다운받을 수 있다. 1990년 데이터부터 공개가 되어 있다. 


매 해의 공시지가들 각각이 제법 큰 용량의 엑셀 파일로 이루어져 있고, 파일을 열어보면 평균적으로 90만개~100만개의 행으로 이루어진 데이터 셋이 나온다. 데이터의 항목들은 여러가지가 있는데, 지번주소, 제곱미터당 지가, 공시연도의 세 가지 정보가 담겨져 있다. 주소가 여러개의 항목으로 나뉘어져 있는 셈이다. (필지의 면적까지 나와 있으면 조금 더 완벽한 데이터 셋이 될 수 있었을 것이다.)





가로축을 시간(공시 연도), 세로축을 지가로 설정하여 모든 필지의 변동을 한번에 그려보면 어떤 그림이 나올까 궁금했다. 몇 만개의 필지에 불과했다면 엑셀에서 바로 그려볼 수 있었겠지만, 문제는 필지의 수가 100만개 이상이라는 점이었다. 몇 가지 기술적인 문제들이 발생했다.


일단 사라진 필지, 새로 생성된 필지들을 종합하여 25년간 존재했던 모든 지번의 목록을 만드는 작업이 필요했다. 필지의 수가 적을 경우에는 25개의 엑셀 파일을 하나하나 열어 필지들을 하나의 엑셀파일에 복사+붙여넣기 한 후 '중복된 항목 제거' 명령을 통해 겹치지 않는 지번의 목록을 구할 수 있다. 그런 후에 vlookup 함수를 이용하여 각 연도의 지가를 모으면 된다. 그러나 엑셀에서 자료를 입력할 수 있는 최대 행 수는 약 100만 행이기 때문에(이 곳 참고) 두 해의 필지들을 모으는 것조차 불가능했다. 결국 그저 간단한 그림을 확인해 보고 싶었던 작업의 시작부터 Java로 코드를 작성하여 데이터를 읽어들여야 했다.






일반적으로 Java에서 .xlsx 파일을 읽을 때는 XSSFWorkbook 클래스를 사용한다. 그런데 파일의 크기가 커지면 메모리 문제가 생기고, 단순히 heap memory의 할당을 조절하는 것으로 해결되지 않는다. 공시지가 파일 역시 하나조차 제대로 읽어들이지 못했으며, 한참을 찾아본 끝에 매우 고마운 글(이 곳 참고)을 발견했다. Liqun Chen이라는 사람이 만들어 공유한 XExcelFileReader 클래스를 이용하여 엑셀 파일을 읽어들일 수 있었으며, 간단한 코드 작성을 통해 25년간의 공시지가를 지번에 따라 한 데 모을 수 있었다.(10,000행 단위로 끊어 읽는 stream 방식을 이용했다)











개략적으로 살펴보기



데이터를 한 데 모았지만, 여전히 전체 그림은 머릿속에 그려지지 않았다. 전체 그림을 한번에 그리는 것은 기술적인 문제가 있었기 때문에, 여러가지 우회적인 방법으로 2차원 그래프에 그려질 전체 그림을 추측해야만 했다.




엑셀의 꺾은선 그래프는 255개의 필지만 넣을 수 있지만, 일단 그렇게라도 하여 그래프를 그려보았다. 전반적으로 상승하는 가운데 부분적인 급락과 급증이 섞여있고, 필지에 따라 어느 정도 독특한 성격이 보였기 때문에, 전체 필지의 그래프를 그려보면 뻔하지만은 않은 그림이 그려질 것이라 생각했다.



25년간 사라지거나 새로 등록된 지번은 약 126만개이며, 지가는 제곱미터당 80,700,000원이 최대값이다. 1990년과 2015년 두 해의 값들만 추출하여 엑셀에서 히스토그램을 그려보았다.



위의 것이 1990년, 아래 것이 2015년 모든 필지 개별 공시지가의 히스토그램이다. 전반적으로 중심점이 오른쪽으로 이동(지가가 상승)했음을 알 수 있고, 가격이 일부 구간에 집중되어 있던 것이 조금 더 고르게 분화되었음을 확인할 수 있었다. 또한, 상업지역 필지는 지가가 높은 반면 그 수는 적고, 주거지역은 상대적으로 지가가 낮지만 1,2,3종 주거지역을 모두 합치면 서울 필지 수의 약 50%정도가 된다. 따라서 최종 그래프의 선들은 아래쪽에 집중될 것이라 생각했다.


그 밖에 몇몇 방법으로 좀 더 데이터의 특성을 파악한 후 본격적인 그래프 그리기 작업에 들어갔다.







한번 그려보기



처음에는 Javascript의 D3.js 라이브러리를 통한 인터랙티브 그래프를 만들어보려 했으나, 금새 그만두었다. 여전히 데이터의 양이 문제였다. 웹브라우저가 감당할 수 있는 수준이 아니었다. Java의 2D Graphic 기능을 이용하는 JChartFree 라이브러리를 사용했는데, 여전히 한번에 그릴 수는 없었다. 기술적, 하드웨어적으로 감당할 수 있는 수준에서 더 나은 도구를 찾기 힘들었기 때문에 JChartFree를 사용하기로 결정하고 일단 5만개 필지의 그래프를 그려보았다.





그래프를 그려보니 이런 모양이었다. 대부분의 지가가 아래쪽에 집중되었기 때문에 윗부분은 상대적으로 허전해보이고, 아래부분은 마치 y축 방향으로 눌려서 압축된 것처럼 변동의 정도가 잘 드러나지 않았다.





1천만원 이하의 부분만 끊어서 그려보니 변동이 조금 더 잘 드러나는 듯 했다.









해결해야 할 문제의 파악


이렇게 시행착오를 거치는 동안 몇 가지 문제점이 파악되었고, 그래프의 완성을 위해서 해결해야 할 문제들을 정리해 보았다.


1. 지가가 아래쪽에 집중된다.

2. 데이터가 x축으로 26개(26년)뿐이라 꺾은선 그래프를 통한 지가의 변동이 부자연스럽게 보인다.

3. 공시지가가 1만원, 혹은 1천원 단위로 끊기기 때문에 여러 기울기를 가진 곡선들이 특정 지점들에 집중되어 통과하는데, 결과물을 보면 마치 인쇄가 잘못 된 것처럼 보인다.

4. 필지가 가진 특성 중 필지가 속한 용도지역정보를 추가할 수는 없을까.

5. 벡터와 래스터, 혹은 어떤 파일 형식으로 분할 생성된 그래프를 합칠 것인가.







어색한 직선 표현



우선 직선이 어색하게 보이는 문제를 해결하고 싶었다.



'정직하게' 그래프를 그리면 위와 같다. 공시지가는 1년에 딱 한번씩 발표되기 때문에 꺾은선으로 표현될 수 밖에 없다. 그렇지만 마치 병풍 접듯이 여러개의 그래프를 어색하게 합성한 것처럼 보인다.


이 지점에서 '정확한 사실'을 한 발 양보하고 '흐름을 잘 보여주는 시각화'에 무게를 두기로 결정했다. 곡선 그래프를 그리는 방식으로 변경하여 흐름이 자연스럽게 보이도록 했다.



곡선이 조금 더 자연스러워 보인다. 그렇지만 왜곡된 부분은 분명히 존재한다.






용도 지역 정보의 추가


그 다음 용도지역 정보를 추가하기 위해 연속지적도와 용도지역분포도의 shp파일을 구했다. 모두 공개된 데이터다. GIS 프로그램의 겹침 연산을 통해 용도지역 정보를 필지에 새로운 field로 추가했고, 간단한 코드를 작성하여 기존의 자료와 합쳤다.



용도지역이 '없음'으로 나타나는 필지들은 2015년 현재 존재하지 않는 필지들이다. 

용도지역에 따라 색상을 다르게 할당하는 코드를 추가했다. 색상은 일단 적당히 지정하여 구분만 되도록 했다.








지가 분포의 편중과 표현의 조정



그렇게 하여 5만개 필지의 그래프를 그려보았다.(y축은 1/4만 표현) 직선에는 투명도를 주어 지가 분포가 집중된 곳과 그렇지 않은 곳이 구분되도록 했다.





아래부터 보자면, 파란색 계열이 녹지, 역시 가장 낮은 지가 분포를 보인다. 그 위의 검은색은 지목이 '대' 로 되어 있지만 실질적으로 도로로 쓰이는 필지들이다. 지가가 낮게 책정되어 있다. 여기까지가 개발이 실질적으로 불가능한 토지이기 때문에 위의 녹색 계열(주거지역)과는 약간의 간극을 두고 있다. 주황색이 준주거, 준공업지역, 빨간색은 상업지역이지만 투명도로 인하여 둘은 잘 구분이 되지 않는다.




지가가 아래쪽에 집중되는 문제는, y축 눈금의 증가 정도를 재조정함으로써 해결하였다. 그래프의 아래쪽은 확대된 것처럼 보이고 그래프의 위쪽은 압축된 것처럼 보인다. 물론 일정한 수식에 의해 줄어들도록 했다.



최종적으로 패널에 인쇄될 비율을 고려하여 가로세로 비율을 결정하였고, 0원~8천만원의 모든 분포가 적절한 공간안에 시각화 될 수 있도록 하였다. 이제 지가 분포가 집중된 아래쪽은 좀 더 자세한 변동이 보이고, 상대적으로 허전하게 보였던 위쪽 부분도 압축되어 적절한 밀도로 표현되었다.






색상의 조정








이제 최종 색상을 결정할 단계다. 패널을 포함한 전체 전시 공간 디스플레이를 red, black, white 세 가지 톤으로 하기로 결정하였으므로 패널에 들어갈 이 그래프 역시 바탕색 흰색을 제외하면 검정과 빨강 투 톤으로 표현해야만 했다. 여러차례의 시행착오 끝에 주거지역만 빨강으로 하고 나머지 필지는 검정으로 지정하였다. 

색상의 수를 줄이면 그래프에서 표현되는 정보 또한 많이 줄어들기 때문에 처음에는 내심 탐탁치 않았으나, 시간이 지나고 보니 전체 전시장의 조화와 전시를 관람하는 한정된 시간을 고려했을 때 합리적인 결정이었다는 생각이 든다.




특정 지점의 선 집중과 표현의 문제


아직 해결해야 할 문제가 남았다. 


공시지가가 대부분 10,000원, 간혹 1,000원 단위로 정해지기 때문에 y축 상의 특정 단위 지점에 집중되었다. 선들의 수가 많다보니 통과되는 지점과 아닌 부분이 확실하게 구분이 되었고, 전체 그래프를 보면 매우 부자연스럽게, 인쇄가 잘못된 것처럼, 혹은 종이가 뜯겨진 것처럼 보였다. 







이 부분 역시 '정확한 정보'를 한 발 양보하고 시각화에 무게를 두어, 그래프 생성 방식을 약간 조정하는 방법으로 해결하였다. y값에 랜덤하게 약간의 증감을 발생시켜 실제 공시지가에 더하였고, 그로써 부자연스러운 문제는 어느 정도 해결되었다.

동시에 이 방법을 사용함으로써 다른 문제도 해결되었는데, 동일 값과 변동을 보여주는 여러개의 필지가 있을 경우라도 그래프에서 하나의 선으로 표현되는 문제였다. 기존에는 투명도를 주어 선들이 겹칠 경우 진하게, 단선일 경우 연하게 표현하는 방법만을 사용하였지만, 25개 이상 겹칠 경우 모두 같은 진하기로 보이는 한계가 있었다. 위의 방법(증감 발생)을 사용함으로써 여러 값이 겹친 선들은 굵게 보이도록 조정되어, 같은 값을 가지는 필지들이 좀 더 효과적으로 드러나게 되었다.






그래프의 합성과 레벨 조정


3만개 필지로 분할된 그래프를 기술적으로 합치는 문제는 많은 시행착오 끝에 결정되었다.


자바 라이브러리인 JChartFree가 PNG, JPG, PDF 등의 export를 지원해주었는데, JPG의 경우 압축되는 과정에서 이미지가 약간씩 깨지는 현상을 확인하여 선택하지 않았다. PDF 출력 후 이미지로 다시 내보내기 하는 방식의 경우 개별 이미지들은 좀 더 선명하게 식별되었으나 그래프를 모두 합성할 경우 진하기 분포가 고르지 않아 선택하지 않았다.


시행착오 끝에 PNG가 정보 손실이 가장 적다고 판단되어 3만개 필지로 분할된 45여개의 PNG 파일을 합성하는 방식으로 진행하였다. 개별 필지의 선은 투명도 0.04로 설정하였다. (0은 완전 투명, 1은 불투명)



최종 합성에 이용된 3만개 필지 이미지 한장은 위와 같다. 아주아주 연하다. 사실 상업지역에도 선이 존재하지만 그냥 보면 잘 식별되지 않는다.


이 이미지 45여장을 포토샵에서 합성하여 아래와 같은 이미지를 얻었다.




상업지역 필지는 너무 연하고, 주거지역 필지는 너무 진하게 나타나 전체 레벨 편차를 줄이기 위해 이미지를 수직으로 4등분하여 선택한 후 각각 다른 정도의 레벨 조정을 거쳤다. 그리하여 드디어! 최종 시각화 결과물을 얻을 수 있었다.





전체 그래프를 세로 방향으로 보자면, 필지에 따른 지가의 분화가 보인다. 가로 방향으로 보자면 시간에 따른 흐름이 보이는데, 90년대 초의 지가 급등,  98년 IMF 구제금융 시기에 지가가 다소 감소했던 것, 2000년대 지가의 엄청난 상승 등이 관찰되며, 그 사이사이에 각자의 사연을 가진 듯한 지가의 흐름들도 보인다.






필지의 샘플링


앞서 설명했지만, 처음에는 개별필지 하나하나를 마우스로 선택했을 때 필지의 위치가 표시되는 인터랙티브 그래프를 만들려고 했다. 현존하는 기술적인 한계로 그 방식은 구현할 수 없었지만, 대신 몇 개의 전형적인 필지들을 샘플링하여 그래프 옆에 나열하기로 했다. 이것은 단순히 그림에 불과한 것이 아니라, 서울에 존재하는 개별적인 필지들의 집합이라는 점을 강조하고 싶었다.



서울에서 가장 비싼 땅.

왼쪽 그래프의 단위는 US달러다.(1000원 1USD로 단순 변환)





강남역 사거리의, 지가가 급증하는 땅





포시즌 호텔처럼, 노후된 건물이 있었던 작은 필지로 도심에 존재했으나 재개발되면서 지가가 급등한 곳.





대규모 재개발 예정부지로 지가가 급등했으나, 취소(혹은 연기)되어 지가가 내려간 곳.

 용산역 근처



재개발되면서 지가는 급등하고, 어느 순간 합필되면서 사라진 지번.

도심 곳곳에 존재하는 유형



연남동처럼 최근에 주목받으면서 지가가 상승한 곳




지목이 '대' 이지만 실질적으로 도로로 사용되는 불가용 토지



녹지 지역의 토지







완성


마지막으로 1990년과 2015년의 지가 히스토그램을 양 옆에 붙여 전체 그래프를 완성하였다. 

그래픽팀의 손을 거쳐 최종 패널 한장이 완성되었다.








'빅데이터' 시대에 주목해야 할 점은 '개별성의 표현'이다.


개별적으로 조사된 데이터를 모두 합쳐 평균이나 대략적인 분포를 보여주는 것은 과거의 방식이었다. 평균은 큰 흐름을 보여주는데는 강하지만 필연적인 왜곡도 뒤따른다. 그 안에 숨어 있는 개별성을 생략하지 않고 그대로 보여주는 작업을 개인 PC에서 할 수 있다는 점은 '어떻게 보여줄 것인지'를 기획할 때 한번 쯤 고려되어야 할 부분이 아닐까 한다.