BigQuery Geo Viz를 이용한 글로벌 COVID-19 데이터 시각화
by Yurim Koo
Google Cloud Platform에서 제공하는 서버리스 데이터 웨어하우스인 ‘빅 쿼리(Big Query)’의
지리공간 데이터 시각화를 제공하는 웹 툴인 BigQuery Geo Viz에 대해 소개하고,
전세계의 코로나19(COVID-19) 현황을 시각화 해보도록 하겠습니다.
BigQuery GIS
- BigQuery는 GIS 기능이 내장된 유일한 클라우드 데이터 웨어하우스
- WKT(Well-Known-Text), WKB(Well-Known Binary), GeoJSON 형식의 임의의 점, 선, 다각형, 다중 다각형을 지원
위와 같은 특징 때문에 BigQuery를 이용한 GIS 데이터를 다루는게 용이합니다.
(참고) WKT, WKB, GeoJSON?
- WKT: 점, 선, 다각형이나 점, 선, 다각형 컬렉션을 사용하여 개별 도형 모양을 기술하는 텍스트 형식
ex)POINT(-121 41)
- WKB: WKT 형식의 바이너리 버전
- GeoJSON: WKT 보다 복잡한 JSON 기반 형식으로 도형과 공간 지형지물을 나타냄
ex){ "type": "Point", "coordinates": [-121,41] }
BigQuery GIS 데이터 시각화
빅쿼리 GIS 데이터를 시각화 할 수 있는 툴의 종류는 아래와 같습니다.
- BigQuery Geo Viz
- Google Earth Engine
- Jupyter 메모장(GeoJSON 확장 프로그램을 통해)
이 중, BigQuery Geo Viz에 대해 자세히 알아보겠습니다.
BigQuery Geo Viz
- Google Maps API를 사용하여 BigQuery의 지리 공간 데이터를 시각화하는 웹 도구
- 화면 구성
- (좌) GIS 데이터 조작
- Query
- BigQuery에 저장된 데이터에 대해 바로 SQL을 실행할 수 있습니다.
- SQL에 대한 결과가 시각화되어 간편하게 사용할 수 있습니다.
- Data
- 시각화 대상의 데이터가 표시됩니다.
- Style
- 시각화에 대한 스타일을 지정할 수 있습니다.
- Query
- (우) 지도 뷰
- 시각화 결과가 표시되는 유동적인 지도가 존재합니다.
- 확대/축소 기능, 위성 사진으로 변경, 거리뷰, 캡쳐 등의 기능이 지원됩니다.
- (좌) GIS 데이터 조작
COVID-19 데이터로 시각화를 해보자
Google BigQuery Public Data를 이용하기
BigQuery Public Data에 올라와 있는 수많은 데이터를 가지고 실습을 해볼 수 있습니다.
그 중, Johns Hopkins University Center for Systems Science and Engineering (JHU CSSE)에서 제공하는
COVID-19(covid19_jhu_csse) 데이터 셋을 활용해보겠습니다.
코로나19(COVID-19) 데이터 개요
covid10_jhu_csse 데이터 셋은 COVID-19의 영향을 받은 모든 국가의 확진, 사망 및 회복 데이터가 담겨 있습니다.
이 데이터는 해당 국가 또는 주에서 집계되어 구성되어 있고, 매일 업데이트 됩니다.
데이터 셋에는 총 4개의 테이블이 존재합니다.
- confirmed_cases: 확진자 케이스
- deaths: 사망 케이스
- recovered_cases: 회복 케이스
- summary: 요약
이 중, summary
테이블을 사용하도록 하겠습니다.
국가, 주 정보와 위경도, 요약 집계 날짜, 확진자, 회복자, 사망자 수가 요약되어 있습니다.
데이터 전처리
summary
테이블의 데이터는
- 업데이트 될 때마다 요약 집계 행이 추가됨
- 국가별 위경도가 단일인 경우와 아닌 경우가 혼재되어 있음
그렇기 때문에
- 가장 최신 날짜의 요약 집계만 사용
- 각 국가별 최대 확진 수를 보유하고 있는 위경도만 사용
- 국가별 위경도를 보정하는 방법은 다양한데, 이 포스트에서는 간단한 방법을 사용합니다. 추가적인 보정 방법은 추후 포스팅하도록 하겠습니다!
- 다른 방법으로 보정하고 싶을 때 보면 좋을 참고 함수: ST_CENTROID_AGG
쿼리에 3가지의 전처리를 하도록 하겠습니다.
- 가장 최신 날짜의 요약 집계만 사용 →
WHERE
절로 날짜 필터링 - 각 국가별 최대 확진 수만 사용 →
ROW_NUMBERS()
함수 이용ROW_NUMBERS() OVER ()
- 행 번호를 매겨줌
- OVER() 절에 ORDER BY를 사용하지 않으면 순서가 보장되지 않음
최종 사용할 쿼리
WITH s1 AS (
SELECT
ROW_NUMBER() OVER (ORDER BY country_region, confirmed) id, *
FROM `bigquery-public-data.covid19_jhu_csse.summary`
WHERE date = '2020-03-28'
)
SELECT s1.country_region, s1.location_geom, confirmed
FROM s1
INNER JOIN (
SELECT country_region, MAX(id) id
FROM s1
GROUP BY country_region
) s2
ON s1.id = s2.id
BigQuery Geo Viz로 시각화
1. Query
위에서 만든 쿼리를 BigQuery Geo Viz의 Query 란에 넣고 RUN을 합니다.
각 국가별 작은 점으로 표현되는 것을 확인할 수 있습니다.
2. Data
Show Result 버튼을 누르면 쿼리의 결과를 보여줍니다.
3. Style
Add Style 버튼을 누르면 시각화 옵션을 변경할 수 있습니다.
fillColor
: 다각형 또는 점의 채우기 색상fillOpacity
: 다각형 또는 점의 채우기 불투명도. 값은 0(투명)에서 1(불투명) 사이의 범위여야 함strokeColor
: 다각형 또는 선의 획이나 윤곽선 색상strokeOpacity
: 다각형 또는 선의 획이나 윤곽선 불투명도. 값은 0(투명)에서 1(불투명) 사이의 범위여야 함strokeWeight
: 다각형 또는 선의 획 또는 윤곽선 너비(픽셀 단위)circleRadius
: 점을 나타내는 원의 반지름(픽셀 단위)
각 스타일마다 모든 결과에 적용되는 ‘글로벌(Global) 값’ 또는 각 결과 행의 데이터에 따라 상대적으로 적용되는 ‘데이터 기반(Data Driven) 값’이 지정됩니다.
데이터 기반(Data Driven) 값의 경우 결과를 결정하는 데 다음이 사용됩니다.
function
: 필드 값에서 스타일 값을 계산하는 데 사용되는 함수identity
: 각 필드의 데이터 값이 스타일 값으로 사용categorical
: 도메인에 나열된 각 필드의 데이터 값이 범위 내의 해당 스타일과 일대일로 매핑interval
: 각 필드의 데이터 값이 도메인에서 가장 가까운 값으로 내림된 후 범위 내의 스타일로 스타일링linear
: 각 필드의 데이터 값이 도메인의 여러 값에 대하여 선형으로 보간된 후 범위 내의 해당 스타일의 혼합으로 스타일이 지정
field
: 데이터에서 지정된 필드가 스타일 지정 함수의 입력으로 사용domain
: 필드의 샘플 입력 값의 순서가 지정된 목록입니다. 샘플 입력(도메인)은 지정한 함수에 따라 샘플 출력(범위)과 페어링되고 모든 입력의 스타일 값을 유추하는 데 사용됩니다(도메인에 나열되지 않은 값까지 포함). 도메인의 값은 시각화할 필드의 값과 유형(텍스트, 숫자 등)이 동일해야 합니다.range
: 스타일 규칙의 샘플 출력 값의 목록입니다. 범위의 값은 제어할 스타일 속성과 유형(색상 또는 숫자)이 동일해야 합니다. 예를 들어 fillColor 속성 범위에는 색상만 포함해야 합니다.
시각화 결과
fillOpacity
0.5로 설정 (global)circleRadius
- Funtion:
linear
- Field:
confirmed
(확진자 수) - Domain: 1000 ~ 121478(max)
- Range: 50000 ~ 2000000 (세계 지도로 봤을 때 점의 크기가 명확하게 보이게 하기 위하여)
- Funtion:
미국과 유럽이 발생지인 중국을 넘어섰네요.
빨리 코로나가 끝났으면 좋겠습니다. ㅠ_ㅠ (이제 곧 벚꽃 시즌…🌸)
BigQuery Geo Viz 툴을 이용하여 간단하게 데이터 시각화를 해보았습니다.
아주 다양한 기능은 제공하고 있진 않아서
EDA 등 간단하게 데이터 분포를 확인할 때 이용하면 좋을 것 같습니다.
참고 자료
Subscribe via RSS