R로 펜 드로잉 지도 그리기
1. INTRO 올해 9월 17일부터 20일까지 posit conf(2023)이 개최됐다. 해마다 posit(구 R studio)에서 진행하는 컨퍼런스인데 행사에 직접 참여하진 못하더라도 깃헙에 공개된 자료를 보는 맛이 있다. 올해도 공개된 워크샵 자료를 보다가 <Creative Coding in R>에 눈길이 갔다. Creative Coding이라니...? 살펴보니 이 워크샵에선 데이터 시각화를 넘어서 자신만의 예술적 스타일을 만들어가는 데이터 아티스트의 사례와 작업물을 확인할 수 있었다. 그중에서도 Pierre Casadebaig의 작업물이 눈길이 갔다. Pierre Casadebaig는 crop ecology 분야의 과학자이면서, DEM 데이터를 활용한 작품을 만드는 데이터 아티스트다. DEM이 뭔고하니, DEM(Digital Elevation Model)은 GIS 영역에서 등장하는 수치표고모형이다. 지표면의 높이를 일정한 간격에 따라 측정해 만든 모형인건데, 간단히 정리하면 그리드(XY)에 고도 데이터(Z)가 들어있는 형태의 데이터 셋이다. 일종의 3차원 점 데이터라고 할 수 있을 것 같다. Casadebaig는 이 3차원 점 형태의 데이터를 2차원의 선으로 변환해서 아트를 만들고 있다. 아래 이미지는 그의 블로그에서 올라와 있는 ridge_04_heric.png라는 작품이다. 파일 명에서 유추해 보건데 프랑스 heric 지방의 산등성이를 나타낸 그림으로 보인다. 2. CP 1919 요 양반은 천문학의 무언가 아름다운 시각화 자료를 보고 영감을 받아 작품 활동을 하기 시작했다고 한다. 그가 영감을 받은 천문학의 아름다운 시각화는 바로 CP 1919. 이름은 낯설 수 있지만 아마 그림은 많이 보았을 거다. 바로 이 시각화다. 요 녀석은 인류 최초로 발견된 펄사(Pulsar) CP 1919의 스펙트럼을 시각화한 그래프다. 펄사는 전자기파를 뿜으며 자전하는 중성자별인데, 만약 이 전자기파가 지구를 향해 방출된다면 주기적으로 맥박이 뛰는 것 마냥 여러 파장이 주기적으로 관측된다. 처음 이 현상을 발견한 과학자들은 너무나도 부자연스럽고, 말 그대로 자연에서 발견되기 어려울 정도로 정확한 간격으로 파장이 방출되는 탓에 외계인이 보내는 메시지라고 생각했다. 파장의 이름을 외계인을 뜻하는 Little Green Man를 따 LGM-1라고 붙일 정도였으니. 물론 시간이 지나 이 파장이 중성자별의 주기적 활동이라는 걸 알게 되었지만. 천문학적으로는 참으로 역사적이고 의미 있는 시각화이긴 하지만 그렇다고 많은 사람들이 알아줄리는 만무할 터. 이 그래프가 대중적으로 알려지게 된 건 JOY DIVISION의 영향이 컸다. JOY DIVISION은 1970-80년대 활동한 포스트 펑크 밴드다. 신스 팝 레전드 밴드 New Order의 전신이기도 하다. 여튼 JOY DIVISION은 CP 1919의 스펙트럼 이미지를 1979년 발매한 정규 앨범 <Unknown Pleasures>의 커버로 사용했고, 이게 그 당시 힙스터들에게 엄청나게 유행하면서 대중적으로 유명해지게 된 것이다. 그 영향을 받아 요런 형태의 Ridge Plot을 일컫는 다른 별칭이 바로, JOY DIVISION의 이름을 딴 Joy Plot이다. 3. VIZ CP1919를 보고 영감을 받은 Pierre Casadebaig은 프랑스 지역의 산을 대상으로 작품활동을 이어오고 있다. 아주 감사하게도 그는 자신의 블로그에 R로 어떻게 작업을 하고 있는지 개괄적으로 설명해두고 있다. 그 블로그 글을 참고 삼아 한 번 우리나라 지도, 내가 사는 동네에도 적용해 보았다. 우리나라 DEM 데이터는 국가공간정보포털에서 받을 수 있다. 국가공간정보포털에서는 도 단위로 DEM 데이터를 제공해주고 있는데, 조금 더 자세한 정보는 국토지리정보원의 국토정보맵을 통해 받을 수 있다. 내가 사는 동네의 모습을 보기 위해 국토정보맵에서 자료를 다운받았다. 이번 시각화에서 활용할 패키지들이다. tidyverse는 데이터 전처리, 시각화 등 전천후로 활용할 패키지 셋이고, terra와 raster는 r에서 공간정보를 분석할 때 활용할 수 있는 rspatial 패밀리에 있는 녀석들이다. 그 외에도 stars와 고도 데이터 분석을 위해 elevatr 패키지를 활용했다. 국토정보맵에서 받은 파일은 2022 성동 37705 DEM 파일을 읽어온 뒤 그 중에서 고도 데이터를 추출했다. 추출한 데이터는 x, y, z 좌표로 표현할 수 있다. 앞서 이야기한 것 처럼 DEM은 그리드(XY)에 고도 데이터(Z)가 들어있는 형태의 데이터 셋이니까. scatterplot3D 패키지를 이용해 간단히 시각화 하면 이렇게 표현할 수 있다. 71만 2,152개의 데이터를 다 그리기엔 뭐하니까 일부만 뽑아서 그려본다. 작은 점(pch(plot symbol character)=20)으로 3D 그래프를 그리면 이렇게 그릴 수 있다.