본문 바로가기

Content

나는 네가 지난 여름에 간 곳을 알고 있다

글 : 김승범



글의 제목을 보고 공포 영화를 연상했다면 당신은 20세기에서 온 아재다. 혹은 빅브라더를 연상했다면 안심해도 된다. 우리 부라더는 사실 정말 당신이 어디 갔는지는 잘 모르기 때문이다. 다만, 예를 들어 당신이 서울 강서구에 산다면, 강서구에 함께 사는 60만명이 2018년 9월 3일 13시에 어디에 있었는지는 알고 있다. 





그림을 봤다면 이제 좀 더 안심해도 된다. 60만개의 점 중에 당신이 누군지는 알 수 없다. 그리고 사실 점들은 특정 행정동 경계 안에 무작위로 발생시켜 찍은 것이고, 원천데이터 역시 절반 이상은 추정치로 만들어졌다고 하니까.






서울시 생활인구 중 관내이동 데이터



서울시에서는 지난 봄부터 KT 시그널 데이터를 바탕으로 추정한 '생활인구'를 만들어 공개하고 있다.






그리고 지난 11월부터 새로운 유형이 추가 개방되었다. '관내이동' 혹은 '서울에서 생활한 서울 내 지역 인구'다. 데이터를 살펴보면 아래와 같다.









위의 그림으로 첫 줄을 설명하자면, 2018년 9월 2일 23시에 강동구 길동(11740685)에는 영등포구(11560)에 거주하는 사람이 21.385명 있었다는 내용이다. 참고로 홈페이지 설명에 따르면, 거주지는 '전 달 기준 00시~06시 사이에 4시간 연속 체류하는 날 수가 14일 이상인 행정동을 거주지로 정의'한다고 되어 있다.


이 데이터에서 특정 시각에 있었던 인구는 행정동 단위로 정리되어 있으며, 거주지는 시군구 단위로 정리되어 있다. 하나 더 위의그림에 보면 '서울에서 생활한 서울 외 지역 인구'라는 데이터도 있는데, 서울 외 지역의 경우에는 인천경기 거주자는 시군구 단위, 그 밖의 지역은 시도단위로 정리되어 있다. 그래서 서울 내외 데이터를 합치면 데이터가 한 세트가 완성되는 셈이다.



그래서 이 데이터는 쉽게 두 가지 관점에서 정리해 볼 수 있다. 거주지를 중심으로 정리하자면 "OO구에 사는 사람들은 특정일 특정시에 서울 내부의 OO동에 있었는가?"이며, 역으로 "특정일 특정시에 서울의 OO동에 있던 사람들의 거주지는 전국 어디인가?"로도 정리할 수 있다. 처음에 등장했던 노란 색의 그림이 전자라면, 다음 그림은 후자를 보여준다.





9월 1일에서 9월 2일로 넘어가는 자정, 즉 토요일밤의 홍대 인근에 있던 사람들의 거주지를 확인할 수 있다. 서울의 동쪽보다는 서쪽에서 많이 갔고, 그림을 크게 보면 부천,인천,일산 거주자들도 많이 보인다.






별 하나 나 하나


이처럼 출발지와 목적지가 있는 데이터를 OD 데이터(origin-destination)혹은 플로우(flow)데이터라고 부른다. 한 지점에서 표현되는 데이터에 비해 표현하기도 복잡하지만 많은 내용을 담고 있는 형식이다. 게다가 이 데이터는 월별 합계가 아니라 특정시각에 기록된 것이므로 OD에 한 차원이 덧붙여진다.  따라서 그림 한 장에 모든 내용을 표현하기는 어렵고, 설령 표현한다고 하더라도 내용을 알아보기는 매우 어려울 것 같다.


그래서 실시간 조작을 통해 반응형으로 데이터를 파악할 수 있도록 만들어봤다.


9월 2일과 3일, 일요일과 월요일 이틀치 데이터를 재처리했다.


관내이동과 관외이동 두 파일을 합쳐서 하나의 세트로 만들었으며, 9월 2일에는 24시간 누적하여 87,191,167명이 있고, 9월 3일에는 104,613,467명이 있다. 24로 나누어 매 시각을 생각해보면 서울 인구인 약 1000만명에서 너무 한참 못미치는데, 이유는 잘 모르겠다.


용량을 계산해보니 사람 한 명당 점 하나씩 나누어줄 수 있을 만큼이 되어, 반짝이는 점 하나에 사람 하나를 표현해보기로 했다.


일단, 각 행정구역 경계 안에 인구 수 만큼 랜덤하게 위치를 발생시켜 2차 데이터 파일을 만들었다. 예를 들어 9월 2일 15시에 종로구 청운효자동에는 종로구 거주자 2288.92명이 있었다. 따라서 목적지 중심의 시각화에서 청운효자동을 선택하면 종로구 경계 안에 무작위의 2289개 점이 찍히도록 했다. 아래 그림에서 분홍색 경계가 청운효자동, 점들의 밀도가 대략 고르게 짙은 부분이 종로구다.


대표이미지대표이미지



점들의 위치는 건물이 있는 곳과 산지를 구분하지 않고 발생시켰다. 실제로는 위의 그림처럼 고르게 분포하지 않고, 산지를 제외한 건물이 있는 곳 주변에 집중되어 있을 것이다. 


이렇게 만든 데이터에는 사람 한 명 마다 32Byte의 정보가 있다. 

[연월일시, 현재위치코드, 거주지코드, 같은 행정동의 전체 인구수, 현재위치xy좌표, 거주지xy좌표]가 그 내용이다. 데이터 크기를 4Byte 씩 할당하지 않고 좀 더 압축시킬 수도 있지만, 일단 이틀치 데이터를 돌리는데 필요한 ram이 확보되어 있었고 디스플레이 속도가 만족스럽게 나왔기 때문에 그대로 사용하였다.


그래서 이틀 치 데이터 양은 (8천7백만 + 1억 4백만) x 32Byte = 5.71GB 가 되며, 한번 랜덤 발생 후 바이너리 파일로 만들어서 그대로 cpp 구조체에 옮기면 그 다음 실행부터는 5초 안에 로딩이 가능하다. OpenGL을 이용해서 시각화했는데, 전체 데이터를 그대로 VRAM으로 복사한 후 Shader에서 조작 반응에 따라 매번 실시간으로 전체의 절반 정도 용량인 일별 데이터를 훑으면서 디스플레이 여부를 판단하여 색상을 부여하는 방식이다.


점 하나는 가스에 둘러싸인 별처럼, 중심 부분을 또렷한 원으로, 그리고 그 주변에 약간의 글로우를 발생시켰고, 여러개가 겹쳤을 때 점점 밝아지도록 했다.





종로에서 일하는 사람들은 어디에 사는가?


이 데이터를 이용해서 해 볼 수 있는것은 정말 많은데, 여기서는 그냥 간단한 것들 몇가지만 보자. 


일단 서울의 사업체 근로자 수를 100x100m 격자에 담아보면 아래와 같다. 2015년 데이터이며 사업체 총조사 데이터를 활용했다.




위의 그림을 보면 몇 군데 집중 지역이 눈에 띄는데, 그 중에 강남 일대, 종로, 여의도, 가산디지털단지 총 다섯 곳을 한번 보자.  강남은 강남역과 삼성역 부근 두 곳이다.





시각은 9월 3일 월요일 오후 1시로 했다.



종로 인근





여의도 전체





가산디지털단지 일부





강남역 부근





삼성역 부근




딱 두 시간만 글을 쓰기로 했는데, 앞 부분에 시간을 많이 쓰다보니 이제 얼마 남지 않았다. 그림 안에 재미있는 정보들이 많으니 대부분은 이 글과 그림을 보는 분들의 관찰에 맡긴다.

만약 휴대폰에서 이 글을 보고 있다면 아마 작은 점들은 잘 보이지 않을 것이다. 각 그림은 가로 기준 3840픽셀이므로 큰 모니터에서 본다면 좀 더 잘 보인다.


지하철 노선을 겹쳐보았더니 좀 더 설명이 잘 되는 것 같아 추가하였다. 


*. 일산 거주자들은 종로와 여의도까지는 많이 출근한다. 


*. 분당판교 거주자들은 강남역으로는 많이 출근하는데 삼성역은 상대적으로 적게 간다. GTX-A 노선이 뚫리면 약간 달라질 수 있을 것 같다는 생각도 든다.



지하철과 인구이동 얘기가 나왔으니 관련된 몇 장을 좀 더 보자. 이번에는 거주지 중심으로 봤다.






서울 서남쪽에 사는 사람들은 월요일 점심에 서울 어디에 있는가














지역은 그림 안에 있다. 여기서는 거주지 중심으로 본 것이므로 목적지인 당시 시각에 있던 장소는 서울 내부만 있으며 424개 행정동 기준으로 점을 찍었다.


*. 부천시 거주자들의 활동 반경이 넓은 것은 7호선 덕택인 듯 하다.


*. 시흥시 거주자는 가산 디지털 단지로 많이 출근하는 것 같은데 한 번에 가는 지하철 노선은 없다. 



하는 김에 서울 주변만 한 바퀴 둘러 봤다.






서울 주변 시군구에 사는 사람들



설명은 미처 못 달았다.

그림에 있는 지하철과, 그림에는 없는 광역버스 등을 염두에 두고 보면 약간 더 설명이 잘 된다.

남양주는 워낙 인구가 많아서 전체적으로 밝게 빛난다.


그러고 보니 9월 2일은 거의 없다. 다음에 기회가 되면 올려보겠다. 

끝.