본문으로 바로가기

 

1. 공공데이터포털 접속 후 회원가입
2. "국토교통부_아파트매매 실거래 상세 자료" 활용신청
3. 개발을 위한 Open API 활용가이드 읽기
4. 지역코드 파라미터 받기
5. 구현하기
6. 응용하기 
7. 엑셀파일로 저장하기

 


 

 

1. 공공데이터포털 접속 후 회원가입

 

https://www.data.go.kr/index.do

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

회원가입 (인증키가 발송되므로 수신가능한 이메일을 적어야 한다)

 

 

 

2. "국토교통부_아파트매매 실거래 상세 자료" 활용신청

 

https://www.data.go.kr/data/15057511/openapi.do

 

국토교통부_아파트매매 실거래 상세 자료

부동산 거래신고에 관한 법률에 따라 신고된 주택의 실거래 자료를 제공

www.data.go.kr

2-1. 활용신청

 

2-2. 활용목적 신청

 

2-3. 신청 후 즉시승인됨. 해당 붉은색 상자 클릭

 

2-4. 부여받은 인증키 확인

 

 

 

3. 개발을 위한 Open API 활용가이드 읽기

 

아파트 매매 상세자료 조회 기술문서.hwp
0.06MB

 

 

 

4. 지역코드 파라미터 받기

 

https://www.code.go.kr/index.do

 

행정표준코드 관리시스템

 

www.code.go.kr

한글이 깨지는 걸 방지하기 위해, 메모장으로 파일을 열고 "UTF-8" 인코딩으로 변경하여 다른이름으로 저장합니다.
법정동코드 전체자료.txt
2.63MB

 

 

 

5. 구현하기

 

5-1. xml 데이터를 가져오는 코드 

import webbrowser

def getRTMSDataSvcAptTrade(gu_code, yyyymm, serviceKey): 
    url = "http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev" 
    url = url + "?&LAWD_CD=" + gu_code
    url = url + "&DEAL_YMD=" + yyyymm
    url = url + "&serviceKey=" + serviceKey
    webbrowser.open(url)
    return
    
getRTMSDataSvcAptTrade('41117','202201','본인의 일반인증키(Encoding)를 입력하세요')

 

5-2. 데이터 프레임 만들기

from bs4 import BeautifulSoup
import pandas as pd
import urllib.request as req

def getRTMSDataSvcAptTrade(gu_code, yyyymm, serviceKey): 
    url = "http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev" 
    url = url + "?&LAWD_CD=" + gu_code
    url = url + "&DEAL_YMD=" + yyyymm
    url = url + "&serviceKey=" + serviceKey
    
    xml = req.urlopen(url)
    result = xml.read()
    soup = BeautifulSoup(result, 'lxml-xml')    
    
    items = soup.findAll("item")
    aptTrade = pd.DataFrame()
    
    for item in items:
        거래일자            = int(item.find("년").text) * 10000 + int(item.find('월').text) * 100 + int(item.find('일').text)
        법정동              = item.find("법정동").text        
        전용면적            = float(item.find("전용면적").text)
        아파트              = item.find("아파트").text
        층                  = int(item.find("층").text)
        거래금액            = int(item.find("거래금액").text.replace(',',''))
        
        도로명               = item.find("도로명").text
        도로명건물본번호코드 = int(item.find('도로명건물본번호코드').text)
        도로명건물부번호코드 = int(item.find("도로명건물부번호코드").text)
        도로명시군구코드     = int(item.find("도로명시군구코드").text)
        도로명일련번호코드   = int(item.find("도로명일련번호코드").text)
        도로명코드           = int(item.find("도로명코드").text)
        
        법정동부번코드       = int(item.find("법정동부번코드").text)
        법정동시군구코드     = int(item.find("법정동시군구코드").text)
        법정동읍면동코드     = int(item.find("법정동읍면동코드").text)
        법정동지번코드       = int(item.find("법정동지번코드").text)
        
        지번               = item.find("지번").text
        지역코드           = int(item.find("지역코드").text)
        건축년도           = int(item.find("건축년도").text)
        
        temp = pd.DataFrame(([[거래일자, 법정동, 전용면적, 아파트, 층, 거래금액, 
                               도로명, 도로명건물본번호코드, 도로명건물부번호코드, 도로명시군구코드, 도로명일련번호코드, 도로명코드,
                               법정동부번코드, 법정동시군구코드, 법정동읍면동코드, 법정동지번코드,
                               지번, 지역코드, 건축년도]]), 
                            columns=["거래일자", "법정동", "전용면적", "아파트", "층", "거래금액", 
                                     "도로명",  "도로명건물본번호코드", "도로명건물부번호코드", "도로명시군구코드", "도로명일련번호코드",  "도로명코드",
                                    "법정동부번코드", "법정동시군구코드", "법정동읍면동코드", "법정동지번코드",
                                    "지번", "지역코드", "건축년도"]) 
        aptTrade = pd.concat([aptTrade,temp])
    
    aptTrade = aptTrade.reset_index(drop=True)
    return aptTrade

getRTMSDataSvcAptTrade('41117','202202','본인의 일반인증키(Encoding)를 입력하세요')

 

 

 

6. 응용하기 

다섯 자리 'gu_code'를 매번 메모장에서 확인하는 것은 번거로울 수 있습니다.
'6. 응용하기'에서는 '구(區) 이름'만 알면 자동으로 'gu_code'를 불러오는 코드를 만들 것입니다.
그리고 시계열데이터 생성을 위한 특정년도월('yyyymm')을 포함한 기간데이터(yyyymm~yyyymm)를 만들 것입니다.

 

6-1. 법정동시군구코드 추출하기 

 

법정동코드 메모장파일 불러오기

file = "법정동코드 전체자료.txt"
code = pd.read_csv(file, sep='\t')
code

 

법정동코드 중 '존재'하는 것만 사용하기

code = code[code['폐지여부'] == '존재']
code

 

법정동코드 데이터타입 변경 (integer → string)

print(type(code['법정동코드'][0]))
code['법정동코드'] = code['법정동코드'].apply(str)
print(type(code['법정동코드'][0]))

 

'구 이름'을 입력하면 '법정동코드'를 찾는 코드 만들기

gu = '영통구'  # 구 이름 입력
gu_code = code[code['법정동명'].str.contains(gu)]  # '법정동명'에 '영통구'가 포함된 데이터 찾기
gu_code = gu_code['법정동코드'].reset_index(drop=True)[0]  # '법정동코드' index를 reset후 첫번째 index선택
gu_code = gu_code[0:5]  # '법정동코드' 10자리 중 앞 5자리만 사용
gu_code

 

6-2. 시계열데이터 만들기 (yyyymm ~ yyyymm) 

반복문과 포맷스트링을 사용해서 시계열데이터 기간을 만듭니다.

year = [str("%04d" %(y)) for y in range(2011, 2023)]
month = [str("%02d" %(m)) for m in range(1, 13)]
yyyymm_list = ["%s%s" %(y, m) for y in year for m in month ]
yyyymm_list

 

List comprehension 문법

 

HackerRank Python Solution / List Comprehensions

List Comprehension if __name__ == '__main__': x = int(input()) y = int(input()) z = int(input()) n = int(input()) code = [[i, j, k] for i in range(x+1) for j in range(y+1) for k in range(z+1) if i..

bohemihan.tistory.com

포맷스트링 

 

[python] 출력형식 %d %01d %02d %s %f

1. 파이썬 출력형식 2. 사용방법 1. 파이썬 출력형식 "출력형식"%(데이터) 위 방식은 파이썬3(python3) 이전에 사용하던 방식입니다. 시계열데이터 작성에 있어 아직도 유용하게 사용됩니다. 다만, 데

bohemihan.tistory.com

 

6-3. 완성

gu = '영통구'  # 구 이름 입력
gu_code = code[code['법정동명'].str.contains(gu)]  # '법정동명'에 '영통구'가 포함된 데이터 찾기
gu_code = gu_code['법정동코드'].reset_index(drop=True)[0]  # '법정동코드' index를 reset후 첫번째 index선택
gu_code = gu_code[0:5]  # '법정동코드' 10자리 중 앞 5자리만 사용

year = [str("%04d" %(y)) for y in range(2011, 2023)]
month = [str("%02d" %(m)) for m in range(1, 13)]
yyyymm_list = ["%s%s" %(y, m) for y in year for m in month ]

Your_Key = '본인의 일반인증키(Encoding)를 입력하세요'

aptTrade2 = pd.DataFrame()
for yyyymm in yyyymm_list:
    temp2 = getRTMSDataSvcAptTrade(gu_code, yyyymm, Your_Key)
    aptTrade2 = pd.concat([aptTrade2, temp2]).reset_index(drop=True)
 
aptTrade2

 

 

 

7. 엑셀파일로 저장하기

aptTrade2.to_excel('C:/to_excel/aptTrade.xlsx', sheet_name='41117', index=False)

 

향후 아파트 매매가격 시각화, 머신러닝을 활용하여 아파트 가격예측을 다룰 예정입니다.