1. 수집할 데이터
공공 데이터포털 (data.go.kr) 소개
공공데이터포털은 공공기관이 생성 또는 취득하여 관리하고 있는 공공데이터를 한 곳에서 제공하는 통합 창구입니다. 포털에서는 국민이 쉽고편리하게 공공데이터를 이용할 수 있도록 파일데이터, 오픈API, 시각화 등 다양한 방식으로 제공하고 있으며, 누구라도 쉽고 편리한 검색을통해 원하는 공공데이터를 빠르고 정확하게 찾을 수 있습니다.
건축인허가정보 서비스
- 주소 : https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15044678
- 설명 : 건축인허가 정보에서 동별개요, 층별개요, 호별개요, 대수선, 공작물관리대장, 철거멸실관리대장, 가설건축물, 오수정화시설, 주차장, 부설주차장, 전유공용면적, 호별전유공용면적, 지역지구구역, 도로명대장, 대지위치, 주택유형 등 속성정보(대용량 원시DB)
- 방법 : 전국 자치단체의 건축행정시스템(세움터)를 통해 생성된 건축행정정보 중 건축인허가와 관련된 대지면적, 건축면적, 건폐율, 연면적, 용적율, 건축물 수 등의 기본정보를 제공한다.
위 주소에 들어가서 로그인 후 아파트 실거래 상세자료 활용신청을 진행한다.
약 10분 후 부터 api 호출할 수 있다.
- 요청변수(Request Parameter)
항목명(국문) | 항목명(영문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
---|---|---|---|---|---|
시군구코드 | sigunguCd | VARCHAR2(5) | 필 | 11680 | 행정표준코드 |
법정동코드 | bjdongCd | VARCHAR2(5) | 필 | 10300 | 행정표준코드 |
대지구분코드 | platGbCd | CHAR(1) | 옵 | 0 | 0:대지 1:산 2:블록 |
번 | bun | VARCHAR2(4) | 옵 | 0012 | 번 |
지 | ji | VARCHAR2(4) | 옵 | 0004 | 지 |
검색시작일 | startDate | VARCHAR2(8) | 옵 | YYYYMMDD | |
검색종료일 | endDate | VARCHAR2(8) | 옵 | YYYYMMDD | |
리스트수 | numOfRows | VARCHAR2(3) | 옵 | 10 | 페이지당 목록 수 |
페이지번호 | pageNo | VARCHAR2(3) | 옵 | 1 | 페이지번호 |
- 출력결과(Response Element)
항목명(국문) | 항목명(영문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
---|---|---|---|---|---|
구역코드명 | guyukCdNm | VARCHAR2(100) | 옵 | 지구단위계획구역 | 구역코드명 |
지목코드 | jimokCd | VARCHAR2(2) | 옵 | 08 | 지목코드 |
지역코드 | jiyukCd | VARCHAR2(6) | 옵 | UQA123 | 지역코드 |
지구코드 | jiguCd | VARCHAR2(6) | 옵 | 지구코드 | |
구역코드 | guyukCd | VARCHAR2(6) | 옵 | UQQ300 | 구역코드 |
건축구분코드 | archGbCdNm | VARCHAR2(4) | 옵 | 0700 | 건축구분코드 |
건축구분코드명 | archGbCd | VARCHAR2(100) | 옵 | 용도변경 | 건축구분코드명 |
대지면적(㎡) | platArea | NUMBER(19,9) | 옵 | 2272 | 대지면적(㎡) |
건축면적(㎡) | archArea | NUMBER(19,9) | 옵 | 1152.45 | 건축면적(㎡) |
건폐율(%) | bcRat | NUMBER(19,9) | 옵 | 50.72 | 건폐율(%) |
연면적(㎡) | totArea | NUMBER(19,9) | 옵 | 16074.93 | 연면적(㎡) |
용적률산정연면적(㎡) | vlRatEstmTotArea | NUMBER(19,9) | 옵 | 9074.07 | 용적률산정연면적(㎡) |
용적률(%) | vlRat | NUMBER(19,9) | 옵 | 399.38 | 용적률(%) |
주건축물수 | mainBldCnt | NUMBER(5) | 옵 | 1 | 주건축물수 |
부속건축물동수 | atchBldDongCnt | NUMBER(5) | 옵 | 0 | 부속건축물동수 |
주용도코드 | mainPurpsCd | VARCHAR2(5) | 옵 | 04000 | 주용도코드 |
주용도코드명 | mainPurpsCdNm | VARCHAR2(100) | 옵 | 제2종근린생활시설 | 주용도코드명 |
세대수(세대) | hhldCnt | NUMBER(5) | 옵 | 96 | 세대수(세대) |
호수(호) | hoCnt | NUMBER(5) | 옵 | 0 | 호수(호) |
가구수(가구) | fmlyCnt | NUMBER(5) | 옵 | 0 | 가구수(가구) |
총주차수 | totPkngCnt | NUMBER(7) | 옵 | 0 | 총주차수 |
착공예정일 | stcnsSchedDay | VARCHAR2(8) | 옵 | 착공예정일 | |
착공연기일 | stcnsDelayDay | VARCHAR2(8) | 옵 | 착공연기일 | |
실제착공일 | realStcnsDay | VARCHAR2(8) | 옵 | 실제착공일 | |
건축허가일 | archPmsDay | VARCHAR2(8) | 옵 | 20110117 | 건축허가일 |
사용승인일 | useAprDay | VARCHAR2(8) | 옵 | 20110214 | 사용승인일 |
생성일자 | crtnDay | VARCHAR2(8) | 필 | 20110215 | 생성일자 |
null | Items | null | 필 | null | |
순번 | rnum | NUMBER(8) | 옵 | 1 | 순번 |
대지위치 | platPlc | VARCHAR2(200) | 필 | 서울특별시 강남구 개포동 12-4번지 | 대지위치 |
시군구코드 | sigunguCd | VARCHAR2(5) | 필 | 11680 | 행정표준코드 |
법정동코드 | bjdongCd | VARCHAR2(5) | 필 | 10300 | 행정표준코드 |
대지구분코드 | platGbCd | CHAR(1) | 옵 | 0 | 0:대지 1:산 2:블록 |
번 | bun | VARCHAR2(4) | 옵 | 0012 | 번 |
지 | ji | VARCHAR2(4) | 옵 | 0004 | 지 |
관리허가대장PK | mgmPmsrgstPk | VARCHAR2(33) | 필 | 11680-10003070401 | 관리허가대장PK |
건물명 | bldNm | VARCHAR2(100) | 옵 | 석탑프라자 | 건물명 |
특수지명 | splotNm | VARCHAR2(200) | 옵 | 특수지명 | |
블록 | block | VARCHAR2(20) | 옵 | 블록 | |
로트 | lot | VARCHAR2(20) | 옵 | 로트 | |
지목코드명 | jimokCdNm | VARCHAR2(100) | 옵 | 대 | 지목코드명 |
지역코드명 | jiyukCdNm | VARCHAR2(100) | 옵 | 제3종일반주거지역 | 지역코드명 |
지구코드명 | jiguCdNm | VARCHAR2(100) | 옵 | 지구코드명 |
2. 데이터 수집
요청 방법 : Rest API
매매 내역을 API 방식으로 제공하고 있다. google 홈페이지에 접속하고 싶을 때 브라우저에 https://google.com
를 치면 브라우저에 화면이 떠지는 것처럼 받고싶은 데이터를 지정된 양식에 맞춰서 요청하면 데이터가 받아지는 방식이다.
http://apis.data.go.kr/1613000/BldRgstService_v2/getBrTitleInfo?serviceKey={개인서비스키}&sigunguCd={시군구코드}&bjdongCd={법정동코드}&bun={번}&ji={지}&numOfRows=1000&pageNo=1
- {개인서비스키} : 공공데이터포털에 활용신청하면 받을 수 있음.
- {시군구코드} : 5자리 시군구 코드
- {법정동코드} : 5자리 법정동 코드
- {번} : 4자리 본번
- {지} : 4자리 부번
내 집 마련 프로젝트 3 - 공동주택 기본/상세 정보제공 서비스 에서 해당 내용을 가져올 수 있다.
from
- 주소 : 서울특별시 종로구 사직동 9 광화문풍림스페이스본 아파트
- 코드 : 1111011500
to
- {시군구코드} : 11110
- {법정동코드} : 11500
- {번} : 0009
- {지} : 0000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import time
import requests
import xml.etree.ElementTree as ET
import numpy as np
import pandas as pd
from tqdm import tqdm
kaptCode = pd.read_csv("../data/공동주택 기본/상세 정보제공 서비스.csv", dtype="str")
BldRgst = kaptCode[['법정동코드', '법정동주소']]
BldRgst["sigunguCd"] = BldRgst.법정동코드.apply(lambda x: x[:5])
BldRgst["bjdongCd"] = BldRgst.법정동코드.apply(lambda x: x[5:])
BldRgst["bunji"] = BldRgst.법정동주소.apply(lambda x: x.split(" ")[3])
BldRgst["bun"] = BldRgst.bunji.apply(lambda x: x.zfill(4) if len(x.split("-")) == 1 else x.split("-")[0].zfill(4))
BldRgst["ji"] = BldRgst.bunji.apply(lambda x: '0000' if len(x.split("-")) == 1 else x.split("-")[1].zfill(4))
BldRgst.head()
법정동코드 | 법정동주소 | sigunguCd | bjdongCd | bunji | bun | ji |
---|---|---|---|---|---|---|
1111011500 | 서울특별시 종로구 사직동 9 광화문풍림스페이스본 아파트 | 11110 | 11500 | 9 | 0009 | 0000 |
1111011800 | 서울특별시 종로구 내수동 72 경희궁의아침3단지 | 11110 | 11800 | 72 | 0072 | 0000 |
1111011800 | 서울특별시 종로구 내수동 71 경희궁의아침2단지 | 11110 | 11800 | 71 | 0071 | 0000 |
1111012400 | 서울특별시 종로구 수송동 85 로얄팰리스스위트 | 11110 | 12400 | 85 | 0085 | 0000 |
1111013300 | 서울특별시 종로구 익선동 55 현대뜨레비앙 | 11110 | 13300 | 55 | 0055 | 0000 |
1
2
3
4
5
6
7
8
9
10
11
12
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
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
serviceKey = "################################공유하면안됨#################################"
url = "http://apis.data.go.kr/1613000/BldRgstService_v2/getBrTitleInfo?serviceKey={}&sigunguCd={}&bjdongCd={}&bun={}&ji={}&numOfRows=1000&pageNo=1"
colrename = {
'rnum': '순번',
'platPlc': '대지위치',
'sigunguCd': '시군구코드',
'bjdongCd': '법정동코드',
'platGbCd': '대지구분코드',
'bun': '번',
'ji': '지',
'mgmBldrgstPk': '관리건축물대장PK',
'regstrGbCd': '대장구분코드',
'regstrGbCdNm': '대장구분코드명',
'regstrKindCd': '대장종류코드',
'regstrKindCdNm': '대장종류코드명',
'newPlatPlc': '도로명대지위치',
'bldNm': '건물명',
'splotNm': '특수지명',
'block': '블록',
'lot': '로트',
'bylotCnt': '외필지수',
'naRoadCd': '새주소도로코드',
'naBjdongCd': '새주소법정동코드',
'naUgrndCd': '새주소지상지하코드',
'naMainBun': '새주소본번',
'naSubBun': '새주소부번',
'dongNm': '동명칭',
'mainAtchGbCd': '주부속구분코드',
'mainAtchGbCdNm': '주부속구분코드명',
'platArea': '대지면적_㎡',
'archArea': '건축면적_㎡',
'bcRat': '건폐율_%',
'totArea': '연면적_㎡',
'vlRatEstmTotArea': '용적률산정연면적_㎡',
'vlRat': '용적률_%',
'strctCd': '구조코드',
'strctCdNm': '구조코드명',
'etcStrct': '기타구조',
'mainPurpsCd': '주용도코드',
'mainPurpsCdNm': '주용도코드명',
'etcPurps': '기타용도',
'roofCd': '지붕코드',
'roofCdNm': '지붕코드명',
'etcRoof': '기타지붕',
'hhldCnt': '세대수_세대',
'fmlyCnt': '가구수_가구',
'heit': '높이_m',
'grndFlrCnt': '지상층수',
'ugrndFlrCnt': '지하층수',
'rideUseElvtCnt': '승용승강기수',
'emgenUseElvtCnt': '비상용승강기수',
'atchBldCnt': '부속건축물수',
'atchBldArea': '부속건축물면적_㎡',
'totDongTotArea': '총동연면적_㎡',
'indrMechUtcnt': '옥내기계식대수_대',
'indrMechArea': '옥내기계식면적_㎡',
'oudrMechUtcnt': '옥외기계식대수_대',
'oudrMechArea': '옥외기계식면적_㎡',
'indrAutoUtcnt': '옥내자주식대수_대',
'indrAutoArea': '옥내자주식면적_㎡',
'oudrAutoUtcnt': '옥외자주식대수_대',
'oudrAutoArea': '옥외자주식면적_㎡',
'pmsDay': '허가일',
'stcnsDay': '착공일',
'useAprDay': '사용승인일',
'pmsnoYear': '허가번호년',
'pmsnoKikCd': '허가번호기관코드',
'pmsnoKikCdNm': '허가번호기관코드명',
'pmsnoGbCd': '허가번호구분코드',
'pmsnoGbCdNm': '허가번호구분코드명',
'hoCnt': '호수_호',
'engrGrade': '에너지효율등급',
'engrRat': '에너지절감율',
'engrEpi': 'EPI점수',
'gnBldGrade': '친환경건축물등급',
'gnBldCert': '친환경건축물인증점수',
'itgBldGrade': '지능형건축물등급',
'itgBldCert': '지능형건축물인증점수',
'crtnDay': '생성일자',
'rserthqkDsgnApplyYn': '내진 설계 적용 여부',
'rserthqkAblty': '내진 능력'
}
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
fail = []
DataFrame = pd.DataFrame([])
for idx, row in tqdm(BldRgst.iterrows()):
sigunguCd = row["sigunguCd"]
bjdongCd = row["bjdongCd"]
bun = row["bun"]
ji = row["ji"]
try:
time.sleep(0.1)
items = {}
req = url.format(serviceKey, sigunguCd, bjdongCd, bun, ji)
get = requests.get(req)
items = get_items(get)
for item in items:
for i in en_col:
if i in item:
item[i] = str(item[i])
else:
item[i] = "nan"
item = pd.DataFrame([item])
DataFrame = pd.concat([DataFrame, item])
except:
print(req)
fail.append([sigunguCd, bjdongCd, bun, ji])
DataFrame = DataFrame.rename(columns=colrename)
DataFrame.to_csv("../data/seoul_apt_building_register_raw.csv", index=None)
1
2
3
4
5
6
7
8
9
tiny = DataFrame[[
'관리건축물대장PK', '순번', '시군구코드', '법정동코드',
'번', '지', '건물명', '동명칭', '세대수_세대', '주용도코드명',
'지상층수', '지하층수',
'대지면적_㎡', '건축면적_㎡', '건폐율_%', '용적률_%', '용적률산정연면적_㎡', '연면적_㎡',
]]
tiny.to_csv("../data/seoul_apt_building_register.csv", index=None)
tiny.head(10)
관리건축물대장PK | 순번 | 시군구코드 | 법정동코드 | 번 | 지 | 건물명 | 동명칭 | 세대수_세대 | 주용도코드명 | 지상층수 | 지하층수 | 대지면적_㎡ | 건축면적_㎡ | 건폐율_% | 용적률_% | 용적률산정연면적_㎡ | 연면적_㎡ |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
11110-100180264 | 1 | 11110 | 11500 | 0009 | 0000 | 광화문 풍림스페이스본 | 202동 | 140 | 업무시설 | 12 | 0 | 0 | 1356.3 | 0 | 0 | 7768.39 | 7768.39 |
11110-100181154 | 2 | 11110 | 11500 | 0009 | 0000 | 광화문 풍림스페이스본 | 201동 | 161 | 업무시설 | 12 | 0 | 0 | 1356.3 | 0 | 0 | 8779.47 | 8779.47 |
11110-100189357 | 3 | 11110 | 11500 | 0009 | 0000 | 광화문 풍림스페이스본 | 301동 | 53 | 공동주택 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 65842.1 |
11110-100180945 | 4 | 11110 | 11500 | 0009 | 0000 | 광화문 풍림스페이스본 | 103동 | 102 | 공동주택 | 14 | 0 | 0 | 14255.4 | 0 | 0 | 18084.8 | 18084.8 |
11110-100181501 | 5 | 11110 | 11500 | 0009 | 0000 | 광화문 풍림스페이스본 | 105동 | 154 | 공동주택 | 14 | 0 | 0 | 1726.09 | 0 | 0 | 23823.2 | 23823.2 |
11110-100180682 | 6 | 11110 | 11500 | 0009 | 0000 | 광화문 풍림스페이스본 | 101동 | 156 | 공동주택 | 14 | 0 | 0 | 1471.59 | 0 | 0 | 19008.1 | 19008.1 |
11110-100180525 | 7 | 11110 | 11500 | 0009 | 0000 | 광화문 풍림스페이스본 | 102동 | 133 | 공동주택 | 14 | 0 | 0 | 1471.59 | 0 | 0 | 16221.2 | 16221.2 |
11110-100180151 | 8 | 11110 | 11500 | 0009 | 0000 | 광화문 풍림스페이스본 | 104동 | 112 | 공동주택 | 14 | 0 | 0 | 1425.36 | 0 | 0 | 19569.8 | 19569.8 |
11110-14616 | 1 | 11110 | 11800 | 0072 | 0000 | 경희궁의 아침 3단지 | 767 | 업무시설 | 16 | 5 | 9311.7 | 4379.75 | 47.09 | 590.55 | 54920.7 | 84502.2 | |
11110-26914 | 1 | 11110 | 11800 | 0071 | 0000 | 경희궁의 아침 2단지 | 462 | 업무시설 | 16 | 5 | 4712.1 | 2499.85 | 53.0517 | 658.216 | 31015.8 | 47470.6 |
용적률 가져오기
1
2
3
4
5
6
7
groupby = tiny.groupby(["시군구코드", "법정동코드", "번", "지", "건물명"]).agg({"건폐율_%" : "max", "용적률_%" : "max"}).reset_index()
groupby['건폐율_%'] = groupby['건폐율_%'].astype(float)
groupby['용적률_%'] = groupby['용적률_%'].astype(float)
groupby = groupby.sort_values("용적률_%", ascending=False).reset_index(drop=True)
시군구코드 | 법정동코드 | 번 | 지 | 건물명 | 건폐율_% | 용적률_% |
---|---|---|---|---|---|---|
11260 | 10600 | 0397 | 0000 | 동성아파트 | 17.08 | 218118 |
11470 | 10200 | 0926 | 0008 | 목동성원아파트상가 | 2.192 | 6321 |
11170 | 10700 | 0045 | 0000 | 센트레빌아스테리움서울 | 18.58 | 4143.32 |
11140 | 13200 | 0120 | 0003 | 128.62 | 1472 | |
11500 | 10400 | 1474 | 0000 | 445.74 | 1289.02 | |
11590 | 10900 | 0395 | 0066 | 보라매삼성쉐르빌 | 59.62 | 1249.69 |
11650 | 10800 | 1542 | 0006 | 현대이에스에이2아파트 | 58.14 | 1106.91 |
11680 | 10400 | 0005 | 0025 | 청담 휴먼스타빌 | 59.16 | 1102.14 |
11680 | 10600 | 0891 | 0006 | 테헤란로 대우 아이빌 | 49.21 | 1096.6 |
11590 | 10900 | 0395 | 0069 | 보라매아카데미타워 | 62.82 | 1094.26 |
11560 | 11000 | 0055 | 0001 | 대우트럼프월드 | 59.71 | 1084.25 |
11440 | 10300 | 0167 | 0000 | 메트로디오빌 | 55.41 | 1082.93 |
11470 | 10200 | 0905 | 0022 | 목동트윈빌 | 61.3 | 1053.24 |
11680 | 10100 | 0706 | 0020 | 한화 진넥스빌 | 57.18 | 1045.76 |
11560 | 11000 | 0048 | 0000 | 대우트럼프월드2 | 48.56 | 1039.66 |
11650 | 10800 | 1330 | 0000 | 서초동삼성쉐르빌2 | 59.92 | 1008.22 |
11170 | 12500 | 0422 | 0000 | 래미안 용산 더 센트럴 | 49.99 | 991.98 |
11680 | 11800 | 0467 | 0019 | 현대비젼21 | 59.64 | 990.22 |
11140 | 13200 | 0306 | 0000 | 남산센트럴 자이 | 52.48 | 987.99 |
11470 | 10200 | 0907 | 0005 | 목동가든스위트 | 59.7 | 985.41 |
재건축 용적률 300% 요건 만족하는 아파트
1
2
# 30년 존버
groupby[groupby['용적률_%'] < 300].head(20)
시군구코드 | 법정동코드 | 번 | 지 | 건물명 | 건폐율_% | 용적률_% |
---|---|---|---|---|---|---|
11530 | 11200 | 0000 | 0000 | 가온주차타워 | 75.35 | 299.99 |
11560 | 11200 | 0164 | 0000 | 현대아파트 | 22.08 | 299.97 |
11650 | 10700 | 0054 | 0005 | 반포두산힐스빌 | 36.05 | 299.95 |
11200 | 11400 | 0033 | 0002 | 성수현대그린아파트 | 21.57 | 299.94 |
11260 | 10100 | 1523 | 0000 | 솔루테아파트 | 27.99 | 299.83 |
11380 | 11000 | 0250 | 0000 | DMC 월드아파트 | 20.95 | 299.31 |
11530 | 10200 | 0642 | 0039 | 한국현대아파트 | 23.83 | 299.3 |
11560 | 12800 | 0012 | 0000 | 성원아파트 | 19.59 | 299.19 |
11650 | 10800 | 1494 | 0004 | 더 미켈란 | 31.69 | 299.16 |
11620 | 10200 | 1718 | 0000 | 보라매갑을아파트 | 20.7 | 298.8 |
11650 | 10600 | 0042 | 0013 | 잠원동 대우 아이빌 | 48.57 | 298.73 |
11740 | 10200 | 0486 | 0000 | 아남아파트 | 26.41 | 298.7 |
11560 | 12700 | 0106 | 0000 | 양평역 미소지움 | 26.88 | 298.66 |
11470 | 10100 | 1279 | 0001 | 목동현대아파트공공임대B단지 | 22.12 | 298.58 |
11470 | 10200 | 0931 | 0000 | 신목종합사회복지관 | 22.12 | 298.58 |
11470 | 10200 | 0931 | 0000 | 목동현대아파트 | 22.12 | 298.58 |
11530 | 10200 | 1262 | 0000 | 월드아파트 | 26.64 | 296.97 |
11680 | 10600 | 1007 | 0001 | 대치동3차 풍림 아이원 아파트 | 24.09 | 296.58 |
11410 | 11800 | 0454 | 0000 | 극동아파트 | 26.42 | 296.54 |
11470 | 10200 | 0724 | 0002 | 동구햇살아파트 | 30.67 | 296.4 |