μ‹œμž‘ν•˜λ©΄μ„œ

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 λ₯Ό 같이 ν™œμš©ν•˜μ—¬ λΆ„μ„ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.