부동산 데이터를 수집해서 의사결정을 빠르게 내리고 싶을 때가 있어서
아파트 매매 실거래가를 API로 조회하는 방법을 Python으로 해보았습니다.
1. 공공데이터 포털 가입 후 활용 신청하기
1) 공공데이터 포털에 접속하고 가입
공공데이터 포털에 들어가서 가입합니다.
네이버나 카카오 연동 가입도 가능합니다.
2) 아파트 매매 실거래가 자료 검색
공공데이터포털에 들어가서 실거래 상세 자료를 입력합니다.
상세가 아닌 일반 API도 존재하는데 컬럼 갯수가 더 단순한 편입니다.
3) 활용 신청 후 API 키 확인
해당 페이지로 들어가보면 우측 상단에 활용신청 버튼이 있습니다.
활용목적과 활용내용을 작성하라고 되어있는데
저의 경우, 웹 사이트 개발과 부동산 가격 이해로 작성하여 승인이 되었습니다.
승인된 후의 API 키는 일반 인증키로 표시됩니다.
4) 해당 API를 어떻게 활용할 수 있을까요?
(1) 넣어 줘야하는 값
(2) 가지고 올 수 있는 값
5) 미리보기를 클릭하여 API 결과가 어떻게 나오는지 볼 수 있습니다.
위의 테이블에 나온 컬럼들이 실제 API를 호출하면 어떤 형태로 나타나는지는
아래 미리보기를 사용해서 간단히 볼 수 있습니다.
2. 파이썬으로 API 호출하기
1) API 간단 호출
# 1) 본인의 인증키(Decoding 버전)
serviceKey = 'API KEY 입력'
# 2) 서비스 URL
url ="http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev?"
# 3) API 요청변수(Request Parameter)
pageNo = '1'
numOfRows = '5'
DEAL_YMD = "202001" # 필요한 데이터의 연도 + 월
LAWD_CD = '11110' # 법정동 코드 앞자리 5글자 = 법정 구코드 (서울특별시 종로구)
payload = "serviceKey=" + serviceKey + "&" + \
"pageNo=" + pageNo + "&" + \
"numOfRows=" + numOfRows + "&" \
"LAWD_CD=" + LAWD_CD + "&" + \
"DEAL_YMD=" + DEAL_YMD + "&"
# 4) 호출
res = requests.get(url + payload)
data = json.loads(json.dumps(xmltodict.parse(res.text)))
print(data)
2) 호출 함수화하기
def getRTMSDataSvcAptTradeDev(pageNo,numOfRows,LAWD_CD,DEAL_YMD,serviceKey):
url="http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev?"
payload = "serviceKey=" + serviceKey + "&" + \
"pageNo=" + pageNo + "&" + \
"numOfRows=" + numOfRows + "&" \
"LAWD_CD=" + LAWD_CD + "&" + \
"DEAL_YMD=" + DEAL_YMD + "&"
xml = req.urlopen(url+payload)
result = xml.read()
soup = BeautifulSoup(result, 'lxml-xml')
items = soup.findAll("item")
aptTrade = pd.DataFrame()
for item in items:
try:
년 = item.find("년").text
월 = item.find("월").text
일 = item.find("일").text
도로명 = item.find("도로명").text
법정동 = item.find("법정동").text
아파트 = item.find("아파트").text
건축년도 = item.find("건축년도").text
층 = item.find("층").text
거래금액 = item.find("거래금액").text
도로명건물본번호코드 = item.find("도로명건물본번호코드").text
도로명건물부번호코드 = item.find("도로명건물부번호코드").text
도로명시군구코드 = item.find("도로명시군구코드").text
도로명일련번호코드 = item.find("도로명일련번호코드").text
도로명지상지하코드 = item.find("도로명지상지하코드").text
도로명코드 = item.find("도로명코드").text
법정동본번코드 = item.find("법정동본번코드").text
법정동부번코드 = item.find("법정동부번코드").text
법정동시군구코드 = item.find("법정동시군구코드").text
법정동읍면동코드 = item.find("법정동읍면동코드").text
법정동지번코드 = item.find("법정동지번코드").text
일련번호 = item.find("일련번호").text
전용면적 = item.find("전용면적").text
지번 = item.find("지번").text
지역코드 = item.find("지역코드").text
except:
items_data = None
temp.append(items_data)
temp = pd.DataFrame(([[년,월,일,도로명,법정동,아파트,건축년도,층,거래금액,도로명건물본번호코드,도로명건물부번호코드,도로명시군구코드,도로명일련번호코드,도로명지상지하코드,도로명코드
,법정동본번코드,법정동부번코드,법정동시군구코드,법정동읍면동코드,법정동지번코드,일련번호,전용면적,지번,지역코드]])
,columns=["년","월","일","도로명","법정동","아파트","건축년도","층","거래금액","도로명건물본번호코드","도로명건물부번호코드","도로명시군구코드","도로명일련번호코드","도로명지상지하코드","도로명코드"
,"법정동본번코드","법정동부번코드","법정동시군구코드","법정동읍면동코드","법정동지번코드","일련번호","전용면적","지번","지역코드"])
aptTrade = pd.concat([aptTrade,temp])
aptTrade = aptTrade.reset_index(drop=True)
return aptTrade
serviceKey = "API KEY 입력"
pageNo = '1'
numOfRows = '5'
DEAL_YMD = "202001" # 필요한 데이터의 연도 + 월
LAWD_CD = '11470' # 법정동 코드의 앞자리 5글자 = 법정 구코드 (서울특별시 양천구)
aptTrade = getRTMSDataSvcAptTradeDev(pageNo,numOfRows,LAWD_CD,'202311',serviceKey)
3. 실거래가 데이터 활용하기
제 경우에는 기간 별로 조회하는 함수도 작성하여
필요한 지역인 서울 양천구 지역에 대해서 원하는 기간인 23.10 ~ 23.12월 동안의 아파트 실거래가를 가지고 왔습니다.
목동 신시가지 단지로 임장을 다녀오면서 실거래가를 한번 살펴보았습니다.
1) 서울특별시 양천구 실거래가 데이터 조회하기
2) 목동 신시가지 단지 아파트의 평당 실거래가 금액 구하기
# 거래금액 컬럼 type 변경
asset.dtypes
asset['거래금액'] = asset['거래금액'].str.replace(",", "")
asset = asset.astype({'거래금액':int})
asset = asset.astype({'전용면적':float})
# 전용면적 평으로 변경
asset['전용면적_평'] = asset['전용면적']/3.3
# 평당 거래금액 min, mean, max
asset_max = asset[['법정동','거래금액']].groupby('법정동').max()
asset_min = asset[['법정동','거래금액']].groupby('법정동').min()
asset_avg = asset[['법정동','거래금액','아파트','전용면적','전용면적_평']].groupby(['법정동','아파트','전용면적','전용면적_평']).mean()
asset_avg_r = asset_avg.reset_index()
asset_avg_r['평당_실거래가'] = asset_avg_r['거래금액']/asset_avg_r['전용면적_평']
전용면적(m)을 평으로 바꾸어 실거래가에 대해 통계량을 구했습니다.
keyword = '신시가지'
asset_avg_r_key = asset_avg_r[asset_avg_r.아파트.str.contains(keyword)]
asset_avg_r_key.sort_values(by=['평당_실거래가'], axis=0, ascending=False)
양천구의 모든 아파트가 나오는데 이중 목동 신시가지 아파트로 한정하였습니다.
평균거래금액과 평균 평당 실거래가를 볼 수 있었습니다.
'Applied Data' 카테고리의 다른 글
[부동산 데이터 수집] 국가통계포털 지역별 전월세전환율(파이썬 API) 금리와의 관계 (0) | 2024.01.20 |
---|---|
[부동산 데이터 수집] 국가통계포털/부동산원 아파트 전세가율 상하락요인 확인(파이썬) (0) | 2024.01.16 |
[부동산 데이터 수집] KOSIS 시군구별 주택 건설 착공 실적(파이썬) (1) | 2024.01.15 |
[부동산 데이터 수집] KOSIS 시군구별 미분양 현황 및 준공후 미분양 데이터 조회(파이썬) (1) | 2024.01.13 |