Google Cloud Summit Seoul ’19에서 만나요!

 

 

구글의 최신 클라우드 업데이트 공개행사인 구글 클라우드 서밋(Google Cloud Summit)이 11월 6일 서울 코엑스에서 개최됩니다.  SPH는 작년에 이어 올해도 Velocity 레벨 파트너로서 참석합니다.

전 세계 주요 도시에서 구글 클라우드 최신 업데이트를 개발자 및 사용자에게 공유하는 구글 클라우드 서밋 서울 행사에서는 약 2,500명의 국내 클라우드 업계 관계자들이 참가할 예정입니다.

이번 서밋은 ‘인프라 현대화’, ‘ 스마트 애널리틱스와 AI’, ‘앱 개발과 데이터 매니지먼트’, ‘생산성과 협업’의 네가지 주제로 진행됩니다.

 

SPH는 부스와 미니 세션을 진행합니다. 저희 부스는 1층 등록데스크 바로 옆에 위치하여 어렵지 않게 찾으실 수 있는데요, Google Maps Platform에 관심있는 분들은 저희 부스를 찾아주세요!

오전 10시 키노트 시작 전, 9시 15분부터 30분까지 1층 중앙의 미니 스테이지에서 미니 세션도 진행될 예정입니다.

 

이번 클라우드 서밋은 여러분의 비즈니스에 실질적인 도움을 드릴 수 있도록, 다양한 주제와 수준의 기술 세션들이 준비되어 있습니다. 또한 개발자들을 위한 DevZone, Hands-on Labs도 준비되어 있어, 각자의 기술 수준에 맞는 실용적인 스킬을 배우실 수 있습니다. 최신 클라우드 기술 트렌드 습득은 물론 클라우드를 사용 중이거나 도입을 고려 중인 기업내 의사 결정권자, 개발자, 엔지니어들과 만나 생각을 나눌 수 있는 이번 기회를 놓치지 마세요!

 

SPH는 CARTO, Google Maps, SuperMap 등 다양한 케이스에 적용될 수 있는 다채로운 제품군을 보유하고 있으며 고객의 사례에 꼭 맞는 무료 세미나 및 개별 컨설팅을 제공하고 있습니다. 각 케이스에 맞춰 더욱 자세한 이야기를 나누고 싶으시다면 여기에서 문의 주시길 바라며, SPH에서 발행하는 GIS/로케이션 인텔리전스 관련 최신 소식을 받아보고 싶으신 분들은 페이스북 페이지 또는 뉴스레터를 구독해 주시길 바랍니다. 감사합니다.

이제 Google Maps에서도 시크릿 모드 (Incognito mode)를 만나보세요

구글이 올해 초 개인정보 보호를 위해 신규 기능을 출시한데 이어, 사용자들이 이 기능들을 좀 더 쉽게 사용할 수 있도록 업데이트 한 내용을 10월 2일 블로그에 발표하였습니다.

이 중 Google Maps에 추가된 Incognito mode 기능에 대해 알아보겠습니다.

일명 ‘시크릿 모드’로 익숙한 이 기능은 구글이 2008년 크롬에 출시한 이후로 가장 인기 있는 개인정보보호 관련 기능입니다.  구글은 올해 초에 이 기능을 YouTube에 적용한데 이어, 이번에 Google Maps에도 이 기능을 탑재했습니다.

사용자가 구글맵 앱에서 Incognito mode를 켜면, 검색한 장소와 같은 맵 내에서의 활동 내역은 구글 계정에 저장되지 않고 사용자의 경험을 맞춤화 시키는 데에도 사용되지 않습니다. 사용자는 우측 상단의 프로필 사진을 클릭하면 나타나는 메뉴에서 Incognito mode를 선택함으로써 쉽게 이 기능을 켤 수 있고, 식당 추천, 통근과 관련한 정보, 그리고 사용자에게 맞춤화된 다른 기능들을 사용하고 싶다면 언제든지 끌 수 있습니다.

Incognito mode는 10월에 안드로이드에 출시될 예정이며, iOS에서도 곧 만나볼 수도 있다고 합니다.

 

원문 : Keeping privacy and security simple, for you

 

SPH는 CARTO, Google Maps, SuperMap 등 다양한 케이스에 적용될 수 있는 다채로운 제품군을 보유하고 있으며 고객의 사례에 꼭 맞는 무료 세미나 및 개별 컨설팅을 제공하고 있습니다. 각 케이스에 맞춰 더욱 자세한 이야기를 나누고 싶으시다면 여기에서 문의 주시길 바라며, SPH에서 발행하는 GIS/로케이션 인텔리전스 관련 최신 소식을 받아보고 싶으신 분들은 페이스북 페이지 또는 뉴스레터를 구독해 주시길 바랍니다. 감사합니다.

Python에 CARTOframes를 더해, 분석의 시너지 효과를 경험해보세요!

이 포스팅은 CARTOframes을 사용하여 공간 분석을 구현하는 방법을 안내합니다. 

 

CARTOframes에서는 분석을 수행하고 결과를 pandas 데이터 프레임으로 리턴하기위한 CartoContext.query 메소드와 분석을 맵 계층으로 시각화하기위한 QueryLayer 클래스를 제공합니다. 두 방법 모두 PostGIS를 사용하여 PostgreSQL 데이터베이스에 대해 쿼리를 실행합니다.

또한, 좀 더 다양한 시각효과를 낼 수 있는 cartoframes.viz package 또한 제공하므로 분석결과를  더욱 효과적으로 전달할 수 있습니다.

 

이 포스팅에서는 CARTO의 공간 분석 기능과 시각화 기능을 사용하여 서울에서 1인가구가 살기 좋은 동네의 위치를 분석해보겠습니다.

 

분석 방향 , 방법 

먼저, 1인 가구의 삶의 질에 영향을 줄 수 있는 8가지  요소(편의 시설 등)들을 선정하였습니다.

서울시를 300m의 그리드(Grid)로 나눈 뒤, 해당 요소가 그리드 내에 존재하면 1 그렇지 않으면 0으로 표시하여 합산 후,  그리드내에 1인가구 삶의 질에 영향을 주는 요소가 가장 많은 그리드를 가장 살기 좋은 동네로 선정하였습니다. 그렇다면 총점은 8점이 되겠죠?

 

준비물 

– 서울시 Grid 데이터

– 서울시 대형마켓, 무인택배함 , 우체국과 주민센터, 패스트푸드점과 카페, 도서관, 지하철역, 공원 위치 데이터 

( 패스트푸드점과 카페를 제외한 항목은 상대적으로 데이터 수가 적기 때문에  500m 버퍼 데이터를 사용할 예정입니다.)

– ( 위의 데이터를 미리 카토 계정에 업로드 해 주세요 ! ) 

 

시작하기

계정생성

분석에 앞서, 만든 데이터나 map을 불러들이고 내보낼 계정을 설정하기위해 CartoContext를 생성해주세요.

데이터 불러오기

계정을 연결했다면, 계정에 존재하는 데이터를 불러와야할 차례네요.

카토 계정에 미리 업로드 해놓은 서울 그리드 데이터를 CartoContext의 read 함수로 불러 올 수 있습니다.

SQL문 시행시키기

그리드에 요소 데이터의 위치가 포함되는지 확인 해보도록 하죠.

CARTOContext.query 메소드를 사용하여 CARTO 계정의 데이터에 대한 SQL 쿼리를 실행하고, 

 PostGIS의 공간 분석 기능 중 하나인 ST_Intersects 활용해 봅시다.

ST_Intersects는 두 공간 데이터가 겹치는 부분이 있으면 1을 반환하는 함수입니다.

따라서, 결과 데이터는 위와 같이 해당 그리드의 공간정보와 우체국이나 주민센터(ins)를 포함하고 있는지를 나타내게 됩니다.

 

위와 동일한 방식으로 무인택배함 데이터와 그리드 데이터를 병합한 데이터를 만들어 줍니다!

 

가중치부여

카페와 패스트푸드점과 같이 그리드 안에 갯수가 많을 가능성이 있는 항목의 경우, 가중치를 줄 수도 있겠죠?

그럴 경우, 존재 여부 대신 해당 그리드에 존재하는 갯수를 구하는 SQL문을 한번 더 작성해주시면 아래와 같은 결과를 얻게됩니다.

이 컬럼을 한 그리드 당 존재하는 가장 많은 카페수로 나눠주면,  가장 많은 카페수를 가지고 있는 그리드는 1점을 가지게 되겠죠?

이 count 컬럼을 아래에서 설명하는 과정에 따라 병합해주시면 됩니다.

확인해보니, 한 그리드안에 존재하는 가장 많은 카페 수는 7개네요.

앞서 설명드린 방식으로 사용자 여러분께서 원하는 요소의 가중치를 직접 줘보시면 어떨까요?

( 본 포스팅에서는 존재 여부를 기준으로 점수를 계산하였습니다 )

 

 

Pandas를 이용한 데이터 병합

위의 두 데이터는 같은 그리드에 관한 정보이지만 현재는 따로 존재하죠. 이 두 데이터를 

양쪽에 모두 존재하는 그리드 공간정보(the_geom)를 기준으로  하나로 병합해 봅시다.

Python pandas 라이브러리의 merge 함수를 이용한다면 SQL의 조인문을 사용하듯 두 데이터를 합칠 수 있습니다.

아래와 같이 두 데이터가 병합되었네요.

모든 요소에 대해 위 과정을 반복한 결과 아래와 같은 데이터를 얻을 수 있었습니다.

( 정제과정에서 불필요한 컬럼들은 테이블에서 제외하였습니다.)

아래의 절차대로 모든 요소의 점수를 더한 Sum 컬럼을 추가해주세요.

( pandas Series와 관련된 부분은 python의 관련 문서를 참조해주세요 ! )

잠깐 확인해 보니 가장 높은 점수가 6점 이네요.

SQL문을 지도에 매핑시키기

이제 각 요소의 위치 데이터와, 위에서 완성한 요소 포함 여부를 담고있는 그리드 데이터를 지도에 올려보도록 합시다.

 

요소 위치 데이터의 시각화

저희는  기존의 cartoframes에서 제공하는 기본 Map과 Layer 대신, 

좀 더 다양한 시각 효과를 사용하기 위해 cartoframes의 viz 패키지를 활용할 것이므로 이를 import 해주세요 ! 

먼저, Layer를 생성해야 해야하는데요  카토 계정에 존재하는 무인택배함 데이터의 위치를 yellow 색으로 나타내며, 마우스를 올렸을 때 (hover) 이름 (name컬럼)이 표시되도록 설정해주었습니다.

Map에 위의 Layer를 표시하도록 설정하시면

위와 같이 Map위에 Layer가 잘 올라간 것을 확인할수 있네요.

다른 요소 데이터도 마찬가지로 설정을 달리하여 Layer를 생성 후  Map에 올려주시면 되겠죠?

 

정제된 그리드 데이터의 시각화

위에서 완성한 데이터 프레임을 CartoContext.write 함수를 이용하여 계정에 업로드 해주세요.

성공적으로 완료되면, ‘able successfully written to CARTO: (계정주소)/(데이터명)’ 이라는 메시지를 확인하실수 있습니다!

 

이제, 생성된 데이터 프레임을 이용해서 SUM이 높은 그리드 일수록 색상이 진하게 표시되도록 시각화 해보도록 하죠.

Color 옵션에서 사용된 ramp는 어떤 데이터(어떤 범위로 나누어) 를, 어떤 색상등으로 매핑할 것인지를 지정해줍니다.

예를 들어, 

‘color: ramp(buckets($sum, [1,2]),[ yellow, green] )’

이는 sum 컬럼을 값 1,2인 범위로 나눠 각각을 yellow, green으로 매핑시키겠다는 뜻입니다.

( viz.Layer의 옵션 및 객체는 링크를 이용해서 더 자세히 확인하실수 있습니다! )

 

이를 활용해, 원하는 대로 옵션을 커스터마이징 해주세요.

 

위에서 생성한 Layer를 Map에 올려주면 아래와 같은 결과를 얻을 수 있네요.

 

이제 위의 Grid 레이어와 앞서 생성한 요소 레이어들을 하나의 맵에 올려주면 모든 시각화 과정이 끝나게 됩니다.

 

결론

결과 해석 

( 위 지도는 현재 cartoframes에서 publish 기능이 지원 예정 중이기에, 위의 분석 결과 지도를 토대로 위젯 기능 등을 추가하여 좀 더 편리하게 만든 것 임을 알려드립니다.)  

 

위의  데이터 정제 과정에서 데이터프레임에서 가장 높은 점수인 6점인 것을 확인했었습니다.

분석 지도를 데이터에 올린 결과, 6점에 해당하는 그리드들은 동작구, 송파구, 성북구, 광진구, 강서구에 존재했습니다. 

( 위치가 궁금하다면, 위 지도의 위젯 기능을 이용해서 해당 지역을 확인하실 수 있습니다 ! ) 

 

위의 맵을 통해 내가 살고있는 동네는 몇 점인지 알아보고, 

오늘 분석한 내용처럼 원하는 조건을 선정하여 나만의 맵을 만들어 보는 것은 어떨까요?

 

 

데이터 분석가를 위한 손쉬운 지도 기능 활용: Python 패키지 CARTOframes

현대는 누구든 손쉽게 여러 정보를 얻을 수 있는 시대입니다.  위치 정보도 마찬가지입니다. 하지만 정보를 얻는다고 해도 그 정보를 원하는 대로 가공, 사용하지 못하면 무용지물입니다.

보통 데이터를 분석에는 Python을 많이 사용합니다. 하지만 위치정보를 사용할 경우 Python에서는 내가 원하는 지도를 만드는데 한계가 있습니다. 그렇다고 지도 출력만을 위해서 지금 사용하고 있는 Python 을 버릴 수는 없습니다. 그럴 때 사용하면 좋은 것이 바로 CARTOframes(카토프레임)입니다.

 

CARTOframes란?

CARTOframes란 지리정보를 분석하고 시각화하기 위한 Python 패키지입니다. 쿼리를 사용해서 데이터를 가공해 새로운 데이터를 만들 수도 있고, 지도를 내 마음대로  만들 수도 있습니다.

CARTOframes는 Python을 사용하는 어느 곳에서든 패키지 설치를 통해 간단하게 사용할 수 있지만 이 글에서는 Cartoframes를 Jupyter Notebook에서 사용해보겠습니다.Jupyter Notebook은 Cell 단위로 코드를 작성하고 Cell 단위로 실행 가능해서 바로 바로 실행 결과를 볼 수 있는 툴입니다.

 

Cell이란 Jupyter Notebook에서 저 칸 하나를 의미합니다. 실행은 Celll 단위로 순서 상관 없이 할 수 있습니다. 코드 작성 후 Ctrl+Enter 키를 누르거나 위 메뉴 중 Run메뉴를 클릭하면 하나의 cell이 실행됩니다.

데이터 분석을 할 때 분석 결과를 바로 보고 싶을 때 딱 적합한 입니다.

Jupyter Notebook을 설치해서 사용하는 방법에는 여러가지가 있습니다.  이 글에서는 따로 python을 설치하지 않아도 CARTOframes를 바로 사용할 수 있는 Anaconda의 Jupyter Notebook을 사용해보겠습니다. Anaconda란 데이터 분석을 위해 필요한 기본 오픈 소스들을 따로 찾을 필요 없이 한 곳에 모아놓은 개발 플랫폼입니다.

우선, Anaconda는 Anaconda 다운로드 사이트에 들어가서 손 쉽게 다운로드 받으 실 수 있습니다. Anaconda를 설치하신 후 윈도우 메뉴에서 Jupyter Notebook를 검색해서 Jupyter Notebook을 실행 할 수 있습니다. CARTOframes는 크롬에서 실행해야 지도가 제대로 출력되므로 미리 .html의 기본 실행 프로그램을 크롬으로 변경해줍니다.

 

Jupyter Notebook 홈 경로 설정하기

처음 Anaconda를 깔아서 Jupyter Notebook을 실행시키면 홈 경로가 ‘C:/Users/username’으로 설정되어 있습니다. 이 경로 내에서만 폴더 생성, 작업 공간 이동을 할 수 있습니다. 자신이 원하는 폴더를 홈경로로 설정하기 위해서는 사전 작업이 필요합니다.

 

윈도우 메뉴에서 Jupyter Notebook을 검색 한 후 해당 프로그램의 속성으로 들어갑니다.

 

속성 창에서 대상의 맨 끝에 적혀 있는 “%USERPROFILE%/” 부분을 깔끔하게 지워주고 적용 시켜줍니다.

그 후 윈도우 메뉴에서 Anaconda Prompt를 검색해서 실행시켜줍니다.

 

jupyter notebook –generate-config

 

위 명령어를 입력해 주피터 노트북 설정 파일을 만들어줍니다. 설정파일은 ‘C:/Users/username/.jupyter’에 만들어집니다. 해당 위치로 가서 코드 수정을 위해서 파일을 메모장이나 Visual Studio Code등으로 실행시킵니다.

 

해당 파일을 열어서 ‘c.NotebookApp.notebook_dir = ‘ 부분을 주석을 풀어 준 후 원하는 홈 경로를 입력한 후 저장합니다.

다시 주피터 노트북을 실행하면 설정한 홈 경로에서 실행됩니다.

 

Cartoframes 설치

다시 Anaconda Prompt를 실행시킵니다.

 

pip install cartoframes==0.10.0

 

위 명령어를 치고 실행시키면 CARTOframes가 설치됩니다. ‘0.10.0’자리에 원하는 CARTOframes 버전을 넣으면 원하시는 버전을 설치할 수 있습니다.

혹시 설치 중에 오류가 생기면 Anaconda에 shapely 설치가 제대로 안 된 것일 수도 있으니

 

conda install -c conda-forge shapely

 

위 명령어를 쳐서 shapely 설치를 한 후에 CARTOframes를 다시 설치하면 됩니다. 정상적으로 설치되었다면 CARTOframes를 사용할 준비 완료!!

 

간단한 맵 출력해보기

CARTOframes를 설치했다면 간단하게 자신이 가지고 있는 정보를 지도를 뿌려보겠습니다.

Jupyter Notebook을 실행시키고 Python3 파일을 하나 만들어줍니다. 

자신의 CARTO 계정에 있는 데이터를 이용하기 위해서는 Jupyter Notebook에서 CARTOframes를 이용해서 CARTO 계정과 연결하는 작업이 필요합니다.

 

from cartoframes import Credentials, CartoContext

 

cc = CartoContext(

base_url=’https://{Your username}.carto.com’,

api_key='{Your API Key}’)

 

위 명령어는 자신의 CARTO계정과 연결하는 작업입니다.

CARTO 계정은 CARTO 사이트에서 무료 계정을 만들 수 있습니다. 무료 계정의 경우는 14일동안 이용 가능합니다.

 

자신의 carto 계정과 연결을 했다면 이제 자신의 carto에 있는 데이터들을 이용할 수 있습니다.

 

from cartoframes import Layer

cc.map(layers=Layer(‘{DataSet name}’))

 

‘DataSet name 자리에 자신이 가지고 있는 데이터셋의 이름을 넣고 실행하면 바로 기본 베이스맵에 데이터가 가시화된 지도가 나옵니다.

 

아래는 서울 도서관 위치 정보를 CARTOframes로 가시화한 결과입니다.

 

쿼리로 지도 분석해서 표현

그냥 지도를 가시화하기만 해서는 CARTOframes가 Python의 기본 지도와 비교했을 때 뭐가 좋은 것인지 느껴지지 않을 것입니다.

 

그래서 이번에는 서울 지하철 역 데이터를 가져와서 반경 100m 버퍼를 만들어 가시화 해보도록 하겠습니다.

서울 지하철 역 데이터의 경우는 딱 지하철 역 중심의 포인트 데이터라서 지하철역이 어디까지 접근가능한지 딱 와닿지 않습니다. 이럴 때 지하철역의 반경 거리를 설정해서 버퍼로 만들 경우 지하철역이 어디까지인지 확 와닿습니다. 버퍼란 해당 위치 정보를 중심으로 설정된 반경 거리로 범위를 그리는 것을 말합니다.

df = cc.query(

”’

SELECT cartodb_id, t_name, line_num, ST_Buffer(the_geom::geography, 500, ‘quad_segs=8′)::geometry as the_geom

FROM seoul_subway_station

WHERE the_geom is not null

”’,

table_name = ‘seoul_subway_100m_test’

)

 

위 코드는 CARTOframes를 이용해서 ST_Buffer를 사용한 쿼리를 날려 새로 ‘seoul_subway_100m_test’ 데이터 셋을 만드는 코드입니다. ST_Buffer란 위치 정보를 넣어서 자신의 원하는 반경까지를 표시하는데 쓰는 함수입니다. CARTOframes에 쿼리 사용시  postgis 함수들을 사용할 수 있습니다.

 

cc.map(layers = [

Layer(‘seoul_subway_station’, color=’red’, size=5),

Layer(‘seoul_subway_100m_test’, color=’#aaa’)

])

 

쿼리를 사용해서 새로 만든 데이터셋을 기존에 있던 서울 지하철 데이터셋과 겹쳐서 출력했습니다.

 

CARTOframes는 이 밖에도 지도 스타일 변경, 쿼리 사용 등 기존 CARTO에서 사용할 수 있는 여러 가지를 제공합니다. 더 자세한 것을 알고 싶으시다면 CARTOframes 가이드 문서를 참고해보세요.

 

 

SPH는 CARTO, Google Maps, SuperMap 등 다양한 케이스에 적용될 수 있는 다채로운 제품군을 보유하고 있으며 고객의 사례에 꼭 맞는 무료 세미나 및 개별 컨설팅을 제공하고 있습니다. 각 케이스에 맞춰 더욱 자세한 이야기를 나누고 싶으시다면 여기에서 문의 주시길 바라며, SPH에서 발행하는 GIS/로케이션 인텔리전스 관련 최신 소식을 받아보고 싶으신 분들은 페이스북 페이지 또는 뉴스레터를 구독해 주시길 바랍니다. 감사합니다.