데이터 정제 기술을 마스터했으니, 이제 많은 블로거가 탐내는 고단가 카워드이자 덩치가 큰 '국토교통부 아파트매매 실거래자료 API' 수집에 도전해 보겠습니다. 부동산 데이터는 구글 애드센스 광고 단가(CPC)가 높은 대표적인 금융/자산 니치(Niche) 영역입니다. 게다가 공공데이터포털에서 제공하는 부동산 실거래가 API는 전국 단위의 데이터 양이 매우 방대하여, 단순 수집을 넘어 나만의 통계 데이터를 가공하는 '고급 기술'을 연습하기에 완벽한 재료입니다.
다만, 이 API는 기존에 다루었던 날씨나 버스 데이터와 달리 행정구역을 다루는 방식과 날짜를 지정하는 규칙이 독특합니다. 처음 연동할 때 뼈대를 잘 잡지 않으면 아무리 호출해도 0건의 데이터만 돌아오는 빈 화면을 마주하게 됩니다. 오늘 아파트 실거래가 데이터를 정확하게 긁어와 지역별 평균 가격을 계산하는 실전 알고리즘을 제 노하우와 함께 풀어보겠습니다.
부동산 API 연동 시 통곡의 벽이 되는 2가지 파라미터 규칙
부동산 실거래가 API를 성공적으로 호출하려면 가이드 문서에 숨겨진 두 가지 파라미터 요구사항을 철저히 지켜야 합니다.
첫 번째는 '법정동코드 5자리(LAWD_CD)'입니다. API는 우리가 흔히 쓰는 "서울시 강남구" 또는 "부산시 해운대구" 같은 한글 지명을 인식하지 못합니다. 대한민국 모든 행정구역에 부여된 10자리의 고유 번호 중 앞 5자리(시군구 코드)를 찾아서 넣어주어야 합니다. 예를 들어 서울 강남구의 코드는 11680이고, 경기도 수원시 영통구는 41117입니다. 이 코드 역시 공공데이터포털에서 제공하는 행정표준코드 관리시스템이나 안내 문서 내 첨부파일을 통해 미리 조회해 두어야 합니다.
두 번째는 '계약월 6자리(DEAL_YMD)'입니다. 날씨 API는 하루 단위(YYYYMMDD)로 조회가 가능했지만, 부동산 실거래가 API는 연월 단위(YYYYMM)로만 조회가 가능합니다. 만약 2026년 7월의 실거래가를 보고 싶다면 202607을 입력해야 합니다. 일 단위 조회가 불가능하기 때문에, 특정 달의 전체 데이터를 한 번에 가져와 파이썬 내부에서 날짜별로 다시 쪼개는 필터링 작업이 수반되어야 합니다.
아파트 실거래가 수집 및 지역별 평균가 계산 실전 코드
아래 코드는 특정 지역과 특정 월을 기준으로 아파트 실거래가 데이터를 수집한 뒤, 문자로 되어 있는 거래 금액을 숫자로 변환하여 판다스로 지역별/금액별 평균 가격을 계산하는 고급 정제 코드가 포함된 전체 스크립트입니다.
import requests
import pandas as pd
# 1. 국토교통부 아파트매매 실거래 상세 자료 API 주소 및 디코딩 인증키
url = "http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade"
decoding_key = "여러분의_디코딩_인증키_입력"
# 2. 요청 파라미터 설정 (예시: 서울 강남구 2026년 5월 계약 데이터)
params = {
'serviceKey': decoding_key,
'LAWD_CD': '11680', # 강남구 법정동코드 앞 5자리
'DEAL_YMD': '202605' # 계약연월 (YYYYMM)
}
try:
# API 호출 (부동산 API는 응답 형식이 주로 XML이 기본값인 경우가 많습니다)
response = requests.get(url, params=params, timeout=15)
response.raise_for_status()
# 데이터 응답 확인 및 BeautifulSoup을 이용한 XML 파싱
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'xml')
# 정상 응답 여부 체크
result_code = soup.find('resultCode').text if soup.find('resultCode') else "99"
if result_code != '00':
print(f"[서버 오류] 메시지: {soup.find('resultMsg').text}")
else:
items = soup.find_all('item')
if not items:
print("해당 조건의 거래 데이터가 존재하지 않습니다.")
else:
apt_trades = []
for item in items:
# 데이터 추출 및 공백 제거
apt_name = item.find('아파트').text.strip()
dong_name = item.find('법정동').text.strip()
floor = item.find('층').text.strip() if item.find('층') else "0"
area = item.find('전용면적').text.strip()
# 금액 데이터 파싱의 핵심: 쉼표(,) 제거 후 숫자로 변환
# 예: " 155,000 " -> 155000
deal_amount_str = item.find('거래금액').text.strip().replace(',', '')
deal_amount_int = int(deal_amount_str)
apt_trades.append({
'법정동': dong_name,
'아파트명': apt_name,
'전용면적(㎡)': float(area),
'층': int(floor),
'거래금액(만원)': deal_amount_int
})
# 3. 판다스 데이터프레임 전환
df = pd.DataFrame(apt_trades)
print("=== 수집된 강남구 실거래가 원본 (상위 5건) ===")
print(df.head())
# 4. [고급 분석] 각 동(Neighborhood)별 아파트 평균 거래 금액 계산
# groupby 연산을 사용하여 법정동별 평균가를 도출합니다.
print("\n=== 법정동별 아파트 평균 거래 금액 (단위: 만원) ===")
mean_by_dong = df.groupby('법정동')['거래금액(만원)'].mean().round(1).reset_index()
# 평균 금액이 높은 순서대로 정렬
mean_by_dong = mean_by_dong.sort_values(by='거래금액(만원)', ascending=False)
print(mean_by_dong.to_string(index=False))
# 5. 통계 결과 엑셀 파일로 저장
mean_by_dong.to_excel("gangnam_apt_average_price.xlsx", index=False)
print("\n[성공] 'gangnam_apt_average_price.xlsx' 파일로 통계 데이터가 저장되었습니다.")
except Exception as e:
print(f"부동산 데이터 수집 중 오류가 발생했습니다: {e}")
초보자가 가장 많이 막히는 '데이터 타입 변환'과 단위 가공 노하우
부동산 API 데이터 가공을 시도할 때 백 퍼센트 에러를 마주하는 지점이 있습니다. 바로 '거래금액' 숫자를 다룰 때입니다.
오픈 API가 돌려주는 아파트 거래금액은 눈으로 보기에는 숫자 같지만, 텍스트 안에 쉼표가 섞여 있고 양옆에 공백이 들어간 '문자열(String)' 상태입니다(예: " 125,500 "). 이 상태에서 판다스로 평균값(.mean())을 구하라고 지시하면 파이썬은 문자를 어떻게 더하고 나누냐며 붉은색 TypeError를 발생시킵니다.
따라서 데이터 연산을 하기 전에 반드시 replace(',', '') 함수로 쉼표를 제거하고, strip()으로 양옆 공백을 날려버린 후 int() 명령어를 통해 순수한 정수형 숫자로 형변환을 해주는 단계를 거쳐야 합니다. 또한, 공공데이터의 부동산 금액 단위는 '만원' 기준이므로 이를 억 단위로 가동하고 싶다면 금액을 다시 10,000으로 나누어 "12억 5,500만원" 형태로 가공해 주는 텍스트 치환 로직을 덧붙여야 정보 수용자(독자)가 읽기 편한 고품질 콘텐츠로 승화될 수 있습니다.
핵심 요약
국토교통부 부동산 실거래가 API는 법정동코드 앞 5자리와 계약연월(6자리)을 정확히 연계하여 파라미터로 넘겨주어야 데이터가 수집됩니다.
API 응답 내 거래금액은 문장 중간에 쉼표가 들어간 문자열 형태이므로, 쉼표 제거 후 정수형(
int)으로 형변환을 마쳐야 통계 연산이 가능합니다.판다스의
groupby()기능을 활용하면 복잡하게 나열된 로우 데이터를 동별, 평형별 평균 가격으로 순식간에 요약하여 고부가가치 정보로 가공할 수 있습니다.
0 댓글