1. 공공데이터포털 접속 후 회원가입
2. "국토교통부_아파트매매 실거래 상세 자료" 활용신청
3. 개발을 위한 Open API 활용가이드 읽기
4. 지역코드 파라미터 받기
5. 구현하기
6. 응용하기
7. 엑셀파일로 저장하기
1. 공공데이터포털 접속 후 회원가입
https://www.data.go.kr/index.do
2. "국토교통부_아파트매매 실거래 상세 자료" 활용신청
https://www.data.go.kr/data/15057511/openapi.do
3. 개발을 위한 Open API 활용가이드 읽기
4. 지역코드 파라미터 받기
https://www.code.go.kr/index.do
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 문법
포맷스트링
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)
향후 아파트 매매가격 시각화, 머신러닝을 활용하여 아파트 가격예측을 다룰 예정입니다.
'Develop > the code' 카테고리의 다른 글
한국은행 기준금리, 데이터 분석 및 시각화 작업 (1) | 2022.10.04 |
---|---|
[Open API] 네이버 API를 활용한 지도 만들기 (0) | 2022.02.04 |
[Open API] 네이버 API 쉽게 쓰기 (0) | 2022.02.03 |
[Open API] 국경일 & 공휴일 구하기 (0) | 2021.11.04 |
[OpenAPI] investpy (주식/ETF/지표/환율) (0) | 2021.10.14 |