1. 수집할 데이터
공공 데이터포털 (data.go.kr) 소개
공공데이터포털은 공공기관이 생성 또는 취득하여 관리하고 있는 공공데이터를 한 곳에서 제공하는 통합 창구입니다. 포털에서는 국민이 쉽고편리하게 공공데이터를 이용할 수 있도록 파일데이터, 오픈API, 시각화 등 다양한 방식으로 제공하고 있으며, 누구라도 쉽고 편리한 검색을통해 원하는 공공데이터를 빠르고 정확하게 찾을 수 있습니다.
아파트매매 실거래 상세 자료
- 주소 : https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15058017
- 설명 : 부동산 거래신고에 관한 법률에 따라 신고된 주택의 실거래 자료를 제공
- 방법 : 지역코드와 기간을 이용하여 해당기간, 해당지역의 아파트 전월세 신고자료를 제공하는 아파트 전월세 신고 정보 조회
위 주소에 들어가서 로그인 후 아파트 실거래 상세자료 활용신청을 진행한다.
약 10분 후 부터 api 호출할 수 있다.
- 요청변수(Request Parameter)
항목명(국문) | 항목명(영문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
---|---|---|---|---|---|
서비스키 | ServiceKey | 20 | 필수 | - | 공공데이터포털에서 받은 인증키 |
지역코드 | LAWD_CD | 5 | 필수 | 11110 | 지역코드 |
계약월 | DEAL_YMD | 6 | 필수 | 201512 | 계약월 |
- 출력결과(Response Element)
2. 데이터 수집
요청 방법 : Rest API
매매 내역을 API 방식으로 제공하고 있다. google 홈페이지에 접속하고 싶을 때 브라우저에 https://google.com
를 치면 브라우저에 화면이 떠지는 것처럼 받고싶은 데이터를 지정된 양식에 맞춰서 요청하면 데이터가 받아지는 방식이다.
http://openapi.molit.go.kr/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTradeDev?serviceKey={개인서비스키}&LAWD_CD={지역코드}&DEAL_YMD={년월}&pageNo=1&numOfRows=1000
위 URL에서 3가지 조건을 바꿔가며 검색할 수 있다.
- {개인서비스키} : 공공데이터포털에 활용신청하면 받을 수 있음.
- {지역코드} :
https://www.code.go.kr/stdcode/regCodeL.do
에서 확인할 수 있다. 시코드 2자리와 구코드 3자리를 합쳐서 5자리 코드로 입력하면 된다.- 서울특별시 종로구 청운동 : 1111010100
- 서울특별시 : 11
- 종로구 : 110
- 청운동 : 10100
- {년월} : 매매 월 - 201111 (YYYYMM)
이렇게 완성된 url을 브라우저 url 입력하는 곳에 넣어서 확인해볼 수 있다.
python으로 10, 11월만 빠르게 수집
1
2
3
4
5
6
import time
import requests
import xml.etree.ElementTree as ET
import pandas as pd
from tqdm import tqdm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def get_items(get):
root = ET.fromstring(get.content)
item_list = []
for child in root.find('body').find('items'):
elements = child.findall('*')
data = {}
for element in elements:
tag = element.tag.strip()
text = element.text.strip()
data[tag] = text
item_list.append(data)
return item_list
serviceKey = "################################공유하면안됨#################################"
url = "http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptRent?serviceKey={}&LAWD_CD={}&DEAL_YMD={}"
locCode = ["11110", "11140", "11170", "11200", "11215", "11230", "11260", "11290", "11305", "11320", "11350", "11380", "11410", "11440", "11470", "11500", "11530", "11545", "11560", "11590", "11620", "11650", "11680", "11710", "11740"]
locCode_nm = ["종로구", "중구", "용산구", "성동구", "광진구", "동대문구", "중랑구", "성북구", "강북구", "도봉구", "노원구", "은평구", "서대문구", "마포구", "양천구", "강서구", "구로구", "금천구", "영등포구", "동작구", "관악구", "서초구", "강남구", "송파구", "강동구"]
yyyymm = ['202101', '202102', '202103', '202104', '202105', '202106', '202107', '202108', '202109', '202110', '202111', '202112']
for ym in tqdm(yyyymm):
DataFrame = pd.DataFrame([])
for code, name in zip(locCode, locCode_nm):
time.sleep(0.5)
req = url.format(serviceKey, code, ym)
get = requests.get(req)
items_list = get_items(get)
items = pd.DataFrame(items_list)
items["지역구"] = name
DataFrame = pd.concat([DataFrame, items])
DataFrame.to_csv("../data/seoul_apt_rent_{}_raw.csv".format(ym), index=None)
DataFrame["보증금"] = DataFrame["보증금액"].apply(lambda x: int(x.replace(",", "")))
DataFrame["월세금"] = DataFrame["월세금액"].apply(lambda x: int(x.replace(",", "")))
DataFrame["법정동주소"] = DataFrame[["지역구", "법정동", "지번"]].apply(lambda x: "{} {} {}".format(x[0], x[1], x[2]), 1)
tiny = DataFrame[['법정동주소', '아파트', '전용면적', '층', '보증금', '보증금', '월세금', '년', '월', '일']]
tiny.to_csv("../data/seoul_apt_rent_{}.csv".format(ym), index=None)