brunch

You can make anything
by writing

C.S.Lewis

by 손주식 Jul 14. 2019

Uber의 데이터 시각화 도구 Kepler.gl

Tech Review of Uber #5

Uber에서는 복잡한 지역 정보와 교통 정보를 어떻게 시각화하고 있을까요? '데이터 시각화'는 데이터를 다루는 여러 가지 기술 영역들이 중에서 가장 어렵고 중요한 분야 중 하나입니다. 특히 Uber와 같이 지역 정보를 다뤄야 하는 곳에서는 시각화해보기 전까지는 알기 힘든 지식들이 많기 때문에 그 중요성이 더 높습니다. 그래서 Uber에서는 최근 몇 년간 데이터 시각화 기술을 많이 연구하고 개발하여 Kepler.gl라는 오픈소스 프로젝트를 만들어냈습니다. 이 글은 Kepler.gl을 소개하고 간단한 활용 사례를 보여주는 아래 기술 블로그 포스트를 우리말로 간단히 의역 및 번역한 것입니다. 

https://eng.uber.com/kepler-data-visualization-traffic-safety/





도시에 사는 사람들과 운전자들이 모두들 잘 알다시피, 도시의 교통은 종종 위험한 상황을 초래한다. 만약 도시에서 가장 위험한 골목길이 어디인지 알 수 있다면, 속도 제한이나 교통 경로 변경과 같은 방법으로 도시를 조금 더 안전한 장소로 만들 수 있을 것이다.


데이터 시각화는 다른 다양한 용도로도 사용되지만, 특히 도시를 설계하고 계획하는 사람들이 도시의 교통을 더 잘 관리할 수 있도록 인사이트를 제공하는 역할을 한다.


이러한 데이터 시각화의 힘을 보여주기 위해, 맨해튼에서 가장 위험한 교통 지점들을 시각화한 사례를 소개한다. 이 시각화를 위해 우리는 대용량의 지역 데이터와 교통 정보를 처리할 수 있는 웹 기반 오픈소스 애플리케이션인 Kepler.gl을 활용하였다. 


이 데이터셋은 공공과 민간 데이터를 합쳐서 만들어졌고, 이를 통해 교통안전을 위한 다양한 데이터 기반 정보를 제공한다. 데이터 시각화에서 유용한 인사이트를 얻는 능력은 같은 주제에 대한 다양한 종류의 데이터들을 모아서 합치는 능력으로부터 만들어지기도 한다. 이번에 소개할 사례에서는 Kepler.gl을 활용하면 다양한 데이터셋으로부터 얼마나 쉽고 편리하게 시각화를 만들어낼 수 있는지 보여줄 것이다.


Kepler.gl을 사용하여 어떻게 단 몇 분 만에 데이터를 시각화하는지 step-by-step으로 알아보자.


뉴욕 교통 분석 예제


이 예제에서 사용하기 위해 우리는 속도 데이터, 차량 도로 사고 데이터,  치명적인 사고 데이터 등 세 종류의 데이터 파일을 수집하였다. 속도 데이터는 Uber Movement 프로그램으로부터 가져왔다. 이 프로그램은 Uber의 수많은 운전자 파트너들로부터 교통 움직임에 대한 정보를 수집하여, 지방 정부에 제공함으로써 더 나은 교통 계획을 세울 수 있도록 도와준다. 이 데이터는 도시의 각 지역에서의 시간에 따른 속도 변화를 알려주는데, 외부에 공개되지는 않는다.


차량 도로 사고 데이터치명적인 사고 데이터는 각각 NHTSA(Highway Traffic Safety Administration)와 NYPD(New York City Police Department)에서 공공 목적으로 외부에 공개한 데이터이다. 


이 예제는 맨해튼의 가장 위험한 도로와 교차로가 어디인지 알려주고, 특히 Transportation Alternatives 그룹 사람들에게 '맨해튼 죽음의 가로수길'이라 불리는 도로를 자세히 분석해볼 것이다.


Kepler.gl


우리의 첫걸음은 맨해튼의 가장 위험한 교통 지점을 시각화하는 것이다. 먼저 브라우저에서 https://kepler.gl/에 접속하였다. GitHub에서 소스코드를 다운로드하여서 직접 설치할 수도 있지만, 데이터 시각화가 얼마나 쉽고 간단한지 보여주기 위하여 온라인 버전을 사용하였다. 


그림 1: 오픈소스 시각화 도구인 Kepler.gl은 설치도 가능하고 웹 기반으로 온라인에서도 사용하다.


속도 데이터 읽기


Uber Movement에서 가져온 속도 데이터는 속도와 수집된 시간, 그리고 도로 정보가 기록된 GeoJSON 객체들을 가지고 있다. 각 도로의 안전성을 보여주는 지표로서, 95th percentile 속도와 85th percentile 속도(95, 85%의 시간 동안에는 이 값과 같거나 더 느린 속도라는 의미)가 사용된다. 속도차(speed difference)가 10 mph 이하인 도로가 안전한 것으로 고려될 수 있다.


데이터는 CSV(comma separated value) 형태의 파일로 저장되고, 형식은 아래와 같다.



이 데이터는 익명으로 수집되기 때문에, 개별 운전자를 추적할 수는 없다.


아래 그림 2와 같이 Kepler.gl의 첫 페이지에서 'Get Started' 버튼을 누르면 대화창이 하나 열리는데, 여기서 drag-and-drop 또는 browse your files 링크를 통해 데이터 파일을 첨부할 수 있다. 


그림 2: Kepler.gl에서는 파일 또는 URL을 통해 데이터셋을 읽는다. 처음 사용하는 유저들을 위한 샘플 데이터셋도 제공한다.


Uber Movement에서 가져온 속도 데이터 파일을 성공적으로 읽어 들였으면 이제 화면 설정을 시작한다.


그림 3: 데이터셋을 읽고 나면 맨해튼 지도를 볼 수 있다. 그러나 아직 우리가 시각화하고 싶은 정보와 인사이트는 표현되지 않은 상태이다.


화면 설정하기


Kepler.gl에서는 처음 데이터를 읽으면 각 도로 영역들을 똑같이 취급하기 때문에 위 그림 3에서 처럼 하나의 색깔로 모든 것을 표현한다. 하지만 우리 데이터에는 '속도차' 값이 포함되어 있기 때문에 이 값을 기반을 각 도로 조각들을 다르게 색칠할 수 있다.


Kepler.gl 인터페이스에서

layer setting을 열고 

color setting을 열어서

'Color Based On'에서 speed_difference를 선택하였다.


Kepler.gl은 기본 color palette를 제공하고 있지만, 더 나은 시인성을 위해 직접 customize도 할 수 있다.

그림 4: '속도차' 값에 색깔을 적용함으로써, 운전자들이 맨해튼의 어디에서 더 빠르게 달리는 경향이 있는지 확인할 수 있다.


'속도차'값을 지정함으로써 맨해튼 지도에 이 데이터를 보여주게 만들었고, 교통안전 데이터를 시각화하는 첫 단추는 채워진 셈이다.


이 데이터에는 타임스탬프 또한 포함되고 있어서, 하루 중 언제인지에 따라 '속도차'를 다시 계산할 수 있다. 이 타임스탬프 덕분에 우리는 '재생 기능'을 추가할 수 있었고, 즉, 시간에 따른 값의 변화를 애니메이션으로 볼 수 있게 되었다. 애니메이션을 보기 위하여, 다음 순서에 따라 필터를 추가하였다.


Filter 아이콘을 클릭하고

Add Filter 버튼을 눌러

field로 hour를 선택하였다. 


아래 그림 5에서 보이는 것과 같이 '재생 컨트롤'이 화면에 추가되었다.


그림 5: Kepler.gl에서 filter와 hour field를 선택하자, 인터페이스에 '재생 컨트롤'이 추가되었다.


이제 Uber Movement의 속도 데이터에 대한 설정은 완료되었다.


사고 데이터 읽기


다음으로, NHTSA와 NYPD가 공개한 데이터셋들을 읽어볼 차례다. NHTSA에서 공개한 데이터셋은 사고의 심각도 기록을 포함하고 있고, NYPD에서 공개한 데이터셋은 차량 사고 기록을 가지고 있다.


Layers 메뉴의 Add Data 버튼을 눌러 데이터셋을 추가하고, 속도 데이터 때와 같은 순서로 화면 설정을 진행하였다. 두 데이터셋은 별도의 Layer로 추가되었다. 아래 그림에서 빨간색 점으로 표시된 Layer는 심각한 사고가 일어난 곳을 표시하고 있고, 파란 점으로 표시된 다른 레이어는 차량 사고를 표시한 것이다.


그림 6: Kepler.gl에서 세 가지 데이터셋을 표현하여, 서로 다른 곳에서 수집된 데이터를 한눈에 볼 수 있게 하였다.


분석하기


모든 데이터가 모였기 때문에, 이제 그림 6에서와 같이 가장 사고가 집중되는 곳을 쉽게 찾을 수 있다. 


이 글의 앞부분에서 언급한 것처럼, '맨해튼 죽음의 가로수길'이라 불리는 Canal Street과 Bowery Street의 교차로를 살펴보자. 교차로를 확대하면 이름이 나타난다. 


그림 7: Canal & Bowery Street의 교차로를 확대해서 보면, 우리는 차량의 속도와 심각한 사고 기록 등 많은 경고 표시를 볼 수 있게 된다.


붉은 점은 심각한 사고가 있었던 지점을 나타내는데 정확히 Canal Street와 Bowery Street의 교차로에 표시되어 있다. 앞서 설명했다시피, 도로의 색깔은 속도를 나타낸다.


시간 범위 슬라이더를 사용하여 시간대에 따른 속도 변화를 확인할 수 있고, 이를 통해 언제 이 도로의 교통이 더 위험해지는지를 짐작해볼 수 있다.


직접 실습해보기


위에서 소개한 사례는 오직 정부 기관에만 공개된 Uber Movement 데이터를 사용하고 있다. 만약 간단한 실습을 위해 Kepler.gl을 사용해보고 싶다면, 공개된 데이터만 사용하는 아래의 짧은 가이드를 따라 하면 된다.


San Francisco 시의 나무 위치에서부터 교통 정보에 이르는 온갖 종류의 데이터셋 수 백개가 사용 가능하다. 이 예제에서는 랜드마크 위치가 포함된 데이터셋을 사용해보자.


위 예제에서도 보았지만 Kepler.gl은 설치나 회원가입 없이 브라우저에서 바로 사용이 가능하다. 이는 Kepler.gl 사용을 더 쉽게 하고, 조금 더 지역 정보를 시각화하는 작업에 친숙해지도록 도와준다. 


1. 데이터 확보하기


이 간단한 둘러보기의 목표는 San Francisco의 랜드마크들을 보여주는 것이다. 랜드마크 좌표와 이름이 포함된 데이터셋은 DataSF 웹사이트에서 찾을 수 있고, 이 링크로 다운로드 가능하다.


데이터는 아래와 같이 구성되어있다.



2. 데이터 읽기


위에서 설명한 것과 동일한 방법으로 데이터 파일을 Kepler.gl에 올릴 수 있다. 먼저, 브라우저를 열고 https://kepler.gl로 이동한다. 그리고 Get Started 버튼을 눌러 대화창을 연 뒤, drag-and-drop 또는 파일 시스템을 통해 데이터셋을 읽는다.


데이터가 읽히면, 랜드마크들이 지도에 표시된다.


그림 8: Kepler.gl에서 데이터에 포함된 랜드마크 정보를 San Francisco 지도에 표시하였다.


3. 마음대로 설정해보기


Kepler.gl에서는 기본 색깔로 랜드마크를 그렸지만, 지도를 축소하였을 때 작은 도형들이 잘 보이지 않는 것 같다. 시인성을 높이기 위해서 도형들을 채운 색깔을 오렌지색으로 변경해보자.


아래와 같이 하면 된다.

Landmark_data를 펼친다.

Color에서 default color를 클릭하고, 오렌지색을 선택한다.

Fill을 활성화한다.


그림 9: Kepler.gl에서는 데이터 시각화 작업을 좀 더 이해하기 쉽게 하기 위한 다양한 설정을 제공한다.


그림 9에서 보는 바와 같이 랜드마크를 표현한 도형들이 지도에서 더 잘 보이게 되었다. 


더 자세한 내용은?


Kepler.gl은 대시보드를 만드는 작업을 포함한, 다양한 종류의 시각화 작업을 위해 활용될 수 있다. Kepler.gl 사이트는 심지어 데이터셋이 없는 사람들에게도 Kepler.gl의 풍부한 기능에 대해 더 많이 배우고 친숙해질 수 있도록 도와준다. 데이터 로드 대화창에서 사용 가능한 샘플 데이터들은 여러 기능들을 체험하고 테스트할 때 매우 유용하다.


우리는 위 예제를 위해 Kepler.gl 온라인 버전을 사용하였지만, 당신의 프로젝트에 Kepler.gl을 아예 통합시키는 것도 가능하다. 사용자 가이드문서, 그리고 GitHub 저장소에서 더 많은 정보를 볼 수 있다.




지난 리뷰


https://brunch.co.kr/@andrewhwan/57

https://brunch.co.kr/@sonjoosik/7

https://brunch.co.kr/@andrewhwan/55

https://brunch.co.kr/@sonjoosik/5


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari