[Python]공공데이터포털 오픈 API사용하여 DataFrame으로 변환(아파트 전월세 자료)

2020. 10. 26. 13:43카테고리 없음

반응형

공공데이터포털에서 사용자키를 얻었으면 파이썬(Python)를 이용하여 데이터를 획득하는 방법을 알아보도록 하겠습니다.

공공데이터포털에서 사용자키 받는 방법 ▶[Python]공공데이터포털 오픈 API사용하기 (아파트 전월세 자료)

 

[Python]공공데이터포털 오픈 API사용하여 DataFrame으로 변환1(아파트 전월세 자료)

안녕하세요. 공공데이터포털은 정부가 보유한 다양한 공공데이터를 개방하여 누구나 쉽게 활용할 수 있는 플랫폼입니다. 공공데이터포털로 바로가기 ▶▶ https://www.data.go.kr/ 공공데이터 포털

shiningyouandme.tistory.com

개발환경은 Jupyter Notebook입니다. 

준비물은 ①요청 URL, ②사용자키 있으면 됩니다.

아래는 최종 코드입니다:) 

from urllib.parse import urlencode, quote_plus
import requests
import pandas as pd
from bs4 import BeautifulSoup
import bs4

url ="http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptRent?"
service_key = "서비스키"


base_date = ["202007","202008","202009"]


for i in range(len(base_date)):

    gu_code = '11545' ##구 단위로 데이터를 확보하는 것. ex)11545 = 금천구
    payload = "serviceKey=" + service_key + "&"+"LAWD_CD=" + gu_code + "&"+"DEAL_YMD=" + base_date[i]+ "&" 

    res = requests.get(url + payload).text
    xmlobj = bs4.BeautifulSoup(res, 'lxml-xml')
    rows = xmlobj.findAll('item')

    rowList = []
    nameList = []
    columnList = []

    rowsLen = len(rows)
    for i in range(0, rowsLen):
        columns = rows[i].find_all()

        columnsLen = len(columns)
        for j in range(0, columnsLen):
            if i == 0:
                nameList.append(columns[j].name)
            eachColumn = columns[j].text
            columnList.append(eachColumn)
        rowList.append(columnList)
        columnList = []    
result = pd.DataFrame(rowList, columns=nameList)

먼저 URL부분에서는 요청URL를 넣으면 되는데요

요청 URL은 공공데이터포털 OPEN API상세 부분에 참고문서 'd)요청/응답 메세지 예제'를 보시면 됩니다.

service_key에는 공공데이터포털에서 활용신청한 본인 key를 ""안에 넣어주세요~

요청 URL과 함께 던져지는 파라미터는 2개가 있었죠~?(참고문서 참고)

LAWD_CD 법정동코드와 DEAL_YWD 년월을 함께 보내야합니다. 

여기서 법정동코드는▶ http://www.code.go.kr/stdcode/regCodeL.do

 

법정동코드목록조회 - 행정표준코드관리시스템

 

www.code.go.kr

이곳에서 본인이 조회하고 싶은 '**구'을 치면 

여기서 법정동코드를 얻을 수 있는데.. 

주의해야할 점은 저도 저 10자리를 다 넣고 요청을 보냈는데.. 안되는거에요...

알고보니.. 참고문서에 10자리 중 앞 5자리를 넣어야 된다고 적혀있더라구요..(난독증 어쩔겨...)

그래서 11545를 코드로 넣으면 됩니다~

 DEAL_YWD는 날짜를 넣는 파라미터인데요~

대부분 데이터를 얻을때, 해당년도의 하나의 달만 얻지 않으니, 저는 리스트로 연속된 달을 넣고 for문을 돌렸어요.

그리고 요청 URL를 보내면 초기 데이터형은 XML입니다.

그래서 XML(데이터 미리보기)에서 <item></item>코드로 쌓여져 있다는 것을 볼 수 있습니다. 

findAll로 데이터를 모두 가져온다음, 리스트에 넣고 DataFrame으로 변환해주면 됩니다.

아래는 결과물 입니다 :)

 

모두 공공데이터 포털을 활용하여 좋은 데이터분석을 해보아요~~ ^^

 

 

 

 

 

 

 

개발 참고사이트: greendreamtrre.tistory.com/268

 

Python (파이썬) 공공데이터 수집 (Open API - XML)

공공데이터포털의 특징은 자료를 활용을 요약하자면 1. 회원 가입 후 '사용자 인증키'를 생성해야한다. 2. 이후 원하는 데이터를 '활용 신청'을 해서 승인이 떨어지고 활용 권한을 획득해야한다

greendreamtrre.tistory.com