시작하면서

IBM Cloud 는 전문가가 아니더라도 쉽게 데이터를 수집/가공/분석할 수 있는 환경을 제공합니다. 이 글에서는 앞으로 여러 회에 걸쳐 IBM cloud 에서 제공하는 Cloud Object Storage, SQL Query, Watson Studio 등의 서비스를 이용하여 서울시 아파트 매매 가격을 분석하는 내용을 게재할 예정입니다.

먼저 분석에 사용할 IBM Cloud 서비스에 대해 간략히 알아봅니다.
첫째, IBM Object Storage 는 대용량의 데이터를 손쉽고 저렴하게 저장할 수 있는 클라우드 서비스입니다. 이 글에서는 csv 형태의 분석 데이터를 저장하는 용도로 사용합니다.

둘째, IBM Cloud SQL Query 는 IBM Object Storage 에 저장된 CSV, JSON, ORC, Parquet 등의 파일 데이터를 쉽고 빠르게 분석할 수 있는 클라우드 서비스입니다. 별다른 가공 과정 없이 ANSI SQL 을 사용하여 데이터를 분석할 수 있습니다. 또한 REST API 를 제공하여 어플리케이션에서 SQL Query 를 호출할 수 있습니다.

셋째, IBM Watson Studio 는 데이터를 중심으로 조직 내 전문가가 서로 협업하여 비즈니스 문제를 해결하는데 필요한 환경과 도구를 제공합니다. Watson Studio 를 이용하여 데이터를 정제하고 원하는 형태로 가공한 뒤, 분석하고 시각화 할 수 있습니다. 또한 머신러닝 모델을 생성하고 데이터를 학습한 뒤 적절한 형태로 배포할 수 있습니다. Watson Studio 는 데이터 사이언스, 데이터 엔지니어, 어플리케이션 개발자, 비즈니스 업무 전문가 등이 협업할 수 있는 플랫폼입니다.

이 글을 통해 독자분들이 클라우드 환경에서 데이터를 분석하는 일련의 과정을 이해할 수 있기를 기대합니다.

사전 준비 사항

이 글에서 언급하는 내용을 실습하려면 IBM Cloud 계정이 필요합니다. 계정 및 서비스를 생성하는 등의 기본적인 내용은 별도로 언급하지 않습니다. 실습을 위한 데이터와 소스코드는 모두 제공할 예정입니다. 아무쪼록 IBM Cloud 의 다양한 기능을 체험해 볼 수 있는 기회가 되기를 바랍니다.

데이터 준비

일반적으로 데이터 분석은 수집, 정제 및 변환, 분석 모델 수립 및 시각화 등의 과정을 포함합니다. 실제 분석 관련 프로젝트를 수행해 보면 데이터 수집, 정제 및 변환에 많은 시간이 소요되는 것을 알 수 있습니다. 최근에는 기업 내 여기저기 흩어져있는 데이터를 전사적으로 관리하기 위한 데이터 레이크에 대한 관심이 높습니다.

이 글에서는 정부에서 제공하는 공공데이터를 분석에 이용합니다. 국토부에서 제공하는 아파트 실거래가 정보는 open API 로 제공되며 이용 허락 범위에 제한이 없는 데이터입니다. 아파트 매매가 데이터는 REST API 로 서비스합니다.

데이터 분석을 위해 REST API 를 호출하여 받아온 정보에 법정동 코드를 추가하여 CSV 파일로 저장하는 별도의 프로그램을 작성하였습니다. CSV 파일에는 2018년 전국 아파트 매매가 정보가 기록되어 있습니다. 이 파일은 여기에서 얻을 수 있습니다. SQL Query 를 이용하려면 CSV 파일 첫번째 행이 컬럼 명으로 되어 있어야 한다는 점에 주의하세요. 파일에서 사용하는 컬럼 정보는 다음과 같습니다.

    • buildyear : 건축년도
    • dealyear : 거래년도
    • dealmonth : 거래월
    • dealday : 거래일
    • dealprice : 거래금액
    • sido : 시도명
    • sigungu : 시군구명
    • dong : 법정동
    • jibun : 지번
    • areacd : 법정동코드
    • aptnm : 아파트명
    • aptarea : 전용명적
    • floor : 층
  • 데이터 분석을 위해 다운로드 받은 파일을 IBM Object Storage 에 업로드 합니다. IBM Object Storage 서비스를 생성하는 과정은 IBM Cloud 공식 문서를 참고하세요. 먼저 apt-price 이름의 버킷을 생성합니다. 버킷은 데이터를 담는 공간으로 생각하면 됩니다.

    버킷을 생성할 때는 지역 및 클래스 등을 설정합니다.  클래스는 데이터 성격에 따라 지정합니다. 각 클래스 별 세부 내용은 이곳을 참고하세요. Resiliency 와 로케이션은 데이터가 어느곳에 어떻게 저장되는지를 설정하는 항목입니다. Resiliency 의 경우 데이터의 중요도 및 법령등을 고려하여 Cross Region/Regional/Single Data Center 중에 선택합니다. 자세한 내용은 이곳을 참고하세요. 버킷 이름은 REST API 를 사용할 때 및 SQL Query 에서 데이터를 쿼리할 때 사용합니다. 업로드한 파일의 세부사항에서 다음과 같이 SQL Query 에서 호출할 수 있는 SQL URL 을 확인합니다.

    그림 1 : SQL URL 확인

    SQL Query 로 데이터 분석하기

    IBM Cloud SQL Query 를 이용하면 Object Storage 에 저장된 CSV, json, Parquet 파일 데이터를 기반으로 SQL 을 사용할 수 있습니다. 데이터만 준비되면 Cloud 에 업로드 한 뒤 바로 기본적인 분석이 가능합니다. SQL Query 는 ANSI SQL 을 지원합니다. 먼저 IBM Cloud 에서 ‘SQL Query’ 를 검색한 후 서비스를 추가합니다.

    SQL 결과는 sql-query-result 버킷에 저장하겠습니다. SQL 에 INTO 를 지정하지 않으면 임의의 버킷을 생성합니다. 쿼리 결과는 csv 파일로 저장하겠습니다.

    먼저 다음과 같은 쿼리를 수행하여 2018년 서울시 아파트 월별 매매건수 및 평균 매매 가격을 조회합니다. Object storage 에 파일이 여러개일 경우 다음 쿼리와 같이 * 를 사용합니다. 2018 년도 파일만 조회하려면 FROM 절에 ‘cos://<location>/apt-price/apt_price_2018.csv’ 를 입력합니다. 앞서 언급한 것 처럼 csv 파일 첫번째 행은 컬럼 명으로 구성되어 있습니다.

    Run 버튼을 클릭하거나 Shift+Enter 키를 입력하여 쿼리를 실행합니다. 결과를 확인해 보면 2018년 1월과 8월의 전체 거래 건수와 평균 매매 금액이 모두 높습니다. 10월 이후 거래 건수가 뚝 떨어진걸 보면 2018년 9.13 부동산 대책이 거래에 영향을 준 것으로 추정할 수 있습니다.

    SELECT dealmonth,
    	FORMAT_NUMBER(COUNT(1),0) AS deal_cnt,
    	FORMAT_NUMBER(ROUND(AVG(dealprice)),0) AS deal_price
    FROM cos://us-south/apt-price/*.csv STORED AS CSV apt_price
    WHERE sido = "서울특별시"
    	AND dealyear = "2018" 
    GROUP BY dealmonth
    ORDER BY dealmonth
    INTO cos://us-south/sql-query-result/ STORED AS CSV
    
    

    그림 2 : 월별 거래건수/평균금액 쿼리

     

    그림 3 : 월별 거래건수/평균금액 쿼리 실행 결과

     

    쿼리 결과는 Jobs 탭에서 확인합니다. Query details 탭에서는 쿼리 결과 파일의 URL 및 수행한 쿼리문을 제공합니다. Object storage 의 sql-query-result 로 이동한 뒤 jobid 로 검색합니다. 검색 결과는 다음 그림과 같습니다. CSV 파일을 다운로드 한 뒤 내용을 확인하면, 쿼리 결과에서 보여준 내용과 동일한 것을 알 수 있습니다.

    그림 4 : 쿼리 결과 파일

     

    2018년도 서울시에서 가장 비싸게 팔린 아파트는 어디일까요? 아래 쿼리를 실행해서 결과를 확인해 보세요. 이미 언론에 나온 것 처럼 2018년 최고 매매가는 80억원이 넘는 어마어마한 금액이군요. 이처럼 SQL Query 는 Analytic function 등 ANSI SQL을 제공하여 효과적으로 데이터를 분석하도록 도와줍니다.

    SELECT *
    FROM (
      SELECT ROW_NUMBER() OVER(ORDER BY dealprice DESC) AS apt_rank, 
    		buildyear, dealyear, dealmonth, 
    		dealprice, sido, sigungu, dong, 
    		aptnm, aptarea, floor
      FROM cos://us-south/apt-price/apt_price_2018.csv STORED AS CSV apt_price
    ) WHERE rownum <= 20
    INTO cos://us-south/sql-query-result/ STORED AS CSV
    

    그림 5 : 매매가 상위 20건 검색 쿼리

     

    이번 글을 마무리하며

    지금까지 IBM Cloud SQL Query 를 간략하게 살펴보았습니다. SQL Query 을 이용하면 파일을 클라우드에 업로드한 뒤 많은 사람들에게 익숙한 SQL 을 사용하여 쉽게 데이터 분석이 가능합니다.
    다음 시간부터는 SQL Query 와 Watson Studio 를 같이 활용하여 분석하는 방법에 대해 알아보겠습니다.