아파트 시계열 분석 5 - 건축인허가정보 서비스
포스트
취소

아파트 시계열 분석 5 - 건축인허가정보 서비스

1. 수집할 데이터

공공 데이터포털 (data.go.kr) 소개

공공데이터포털은 공공기관이 생성 또는 취득하여 관리하고 있는 공공데이터를 한 곳에서 제공하는 통합 창구입니다. 포털에서는 국민이 쉽고편리하게 공공데이터를 이용할 수 있도록 파일데이터, 오픈API, 시각화 등 다양한 방식으로 제공하고 있으며, 누구라도 쉽고 편리한 검색을통해 원하는 공공데이터를 빠르고 정확하게 찾을 수 있습니다.

건축인허가정보 서비스

image

  • 주소 : https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15044678
  • 설명 : 건축인허가 정보에서 동별개요, 층별개요, 호별개요, 대수선, 공작물관리대장, 철거멸실관리대장, 가설건축물, 오수정화시설, 주차장, 부설주차장, 전유공용면적, 호별전유공용면적, 지역지구구역, 도로명대장, 대지위치, 주택유형 등 속성정보(대용량 원시DB)
  • 방법 : 전국 자치단체의 건축행정시스템(세움터)를 통해 생성된 건축행정정보 중 건축인허가와 관련된 대지면적, 건축면적, 건폐율, 연면적, 용적율, 건축물 수 등의 기본정보를 제공한다.

위 주소에 들어가서 로그인 후 아파트 실거래 상세자료 활용신청을 진행한다.
약 10분 후 부터 api 호출할 수 있다.

  • 요청변수(Request Parameter)
항목명(국문)항목명(영문)항목크기항목구분샘플데이터항목설명
시군구코드sigunguCdVARCHAR2(5)11680행정표준코드
법정동코드bjdongCdVARCHAR2(5)10300행정표준코드
대지구분코드platGbCdCHAR(1)00:대지 1:산 2:블록
bunVARCHAR2(4)0012
jiVARCHAR2(4)0004
검색시작일startDateVARCHAR2(8) YYYYMMDD
검색종료일endDateVARCHAR2(8) YYYYMMDD
리스트수numOfRowsVARCHAR2(3)10페이지당 목록 수
페이지번호pageNoVARCHAR2(3)1페이지번호
  • 출력결과(Response Element)
항목명(국문)항목명(영문)항목크기항목구분샘플데이터항목설명
구역코드명guyukCdNmVARCHAR2(100)지구단위계획구역구역코드명
지목코드jimokCdVARCHAR2(2)08지목코드
지역코드jiyukCdVARCHAR2(6)UQA123지역코드
지구코드jiguCdVARCHAR2(6) 지구코드
구역코드guyukCdVARCHAR2(6)UQQ300구역코드
건축구분코드archGbCdNmVARCHAR2(4)0700건축구분코드
건축구분코드명archGbCdVARCHAR2(100)용도변경건축구분코드명
대지면적(㎡)platAreaNUMBER(19,9)2272대지면적(㎡)
건축면적(㎡)archAreaNUMBER(19,9)1152.45건축면적(㎡)
건폐율(%)bcRatNUMBER(19,9)50.72건폐율(%)
연면적(㎡)totAreaNUMBER(19,9)16074.93연면적(㎡)
용적률산정연면적(㎡)vlRatEstmTotAreaNUMBER(19,9)9074.07용적률산정연면적(㎡)
용적률(%)vlRatNUMBER(19,9)399.38용적률(%)
주건축물수mainBldCntNUMBER(5)1주건축물수
부속건축물동수atchBldDongCntNUMBER(5)0부속건축물동수
주용도코드mainPurpsCdVARCHAR2(5)04000주용도코드
주용도코드명mainPurpsCdNmVARCHAR2(100)제2종근린생활시설주용도코드명
세대수(세대)hhldCntNUMBER(5)96세대수(세대)
호수(호)hoCntNUMBER(5)0호수(호)
가구수(가구)fmlyCntNUMBER(5)0가구수(가구)
총주차수totPkngCntNUMBER(7)0총주차수
착공예정일stcnsSchedDayVARCHAR2(8) 착공예정일
착공연기일stcnsDelayDayVARCHAR2(8) 착공연기일
실제착공일realStcnsDayVARCHAR2(8) 실제착공일
건축허가일archPmsDayVARCHAR2(8)20110117건축허가일
사용승인일useAprDayVARCHAR2(8)20110214사용승인일
생성일자crtnDayVARCHAR2(8)20110215생성일자
nullItemsnull null
순번rnumNUMBER(8)1순번
대지위치platPlcVARCHAR2(200)서울특별시 강남구 개포동 12-4번지대지위치
시군구코드sigunguCdVARCHAR2(5)11680행정표준코드
법정동코드bjdongCdVARCHAR2(5)10300행정표준코드
대지구분코드platGbCdCHAR(1)00:대지 1:산 2:블록
bunVARCHAR2(4)0012
jiVARCHAR2(4)0004
관리허가대장PKmgmPmsrgstPkVARCHAR2(33)11680-10003070401관리허가대장PK
건물명bldNmVARCHAR2(100)석탑프라자건물명
특수지명splotNmVARCHAR2(200) 특수지명
블록blockVARCHAR2(20) 블록
로트lotVARCHAR2(20) 로트
지목코드명jimokCdNmVARCHAR2(100)지목코드명
지역코드명jiyukCdNmVARCHAR2(100)제3종일반주거지역지역코드명
지구코드명jiguCdNmVARCHAR2(100) 지구코드명

image

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()
법정동코드법정동주소sigunguCdbjdongCdbunjibunji
1111011500서울특별시 종로구 사직동 9 광화문풍림스페이스본 아파트1111011500900090000
1111011800서울특별시 종로구 내수동 72 경희궁의아침3단지11110118007200720000
1111011800서울특별시 종로구 내수동 71 경희궁의아침2단지11110118007100710000
1111012400서울특별시 종로구 수송동 85 로얄팰리스스위트11110124008500850000
1111013300서울특별시 종로구 익선동 55 현대뜨레비앙11110133005500550000
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-1001802641111101150000090000광화문 풍림스페이스본202동140업무시설12001356.3007768.397768.39
11110-1001811542111101150000090000광화문 풍림스페이스본201동161업무시설12001356.3008779.478779.47
11110-1001893573111101150000090000광화문 풍림스페이스본301동53공동주택040000065842.1
11110-1001809454111101150000090000광화문 풍림스페이스본103동102공동주택140014255.40018084.818084.8
11110-1001815015111101150000090000광화문 풍림스페이스본105동154공동주택14001726.090023823.223823.2
11110-1001806826111101150000090000광화문 풍림스페이스본101동156공동주택14001471.590019008.119008.1
11110-1001805257111101150000090000광화문 풍림스페이스본102동133공동주택14001471.590016221.216221.2
11110-1001801518111101150000090000광화문 풍림스페이스본104동112공동주택14001425.360019569.819569.8
11110-146161111101180000720000 경희궁의 아침 3단지767업무시설1659311.74379.7547.09590.5554920.784502.2
11110-269141111101180000710000 경희궁의 아침 2단지462업무시설1654712.12499.8553.0517658.21631015.847470.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)

시군구코드법정동코드건물명건폐율_%용적률_%
112601060003970000동성아파트17.08218118
114701020009260008목동성원아파트상가2.1926321
111701070000450000센트레빌아스테리움서울18.584143.32
111401320001200003 128.621472
115001040014740000 445.741289.02
115901090003950066보라매삼성쉐르빌59.621249.69
116501080015420006현대이에스에이2아파트58.141106.91
116801040000050025청담 휴먼스타빌59.161102.14
116801060008910006테헤란로 대우 아이빌49.211096.6
115901090003950069보라매아카데미타워62.821094.26
115601100000550001대우트럼프월드59.711084.25
114401030001670000메트로디오빌55.411082.93
114701020009050022목동트윈빌61.31053.24
116801010007060020한화 진넥스빌57.181045.76
115601100000480000대우트럼프월드248.561039.66
116501080013300000서초동삼성쉐르빌259.921008.22
111701250004220000래미안 용산 더 센트럴49.99991.98
116801180004670019현대비젼2159.64990.22
111401320003060000남산센트럴 자이52.48987.99
114701020009070005목동가든스위트59.7985.41

재건축 용적률 300% 요건 만족하는 아파트

1
2
# 30년 존버
groupby[groupby['용적률_%'] < 300].head(20)
시군구코드법정동코드건물명건폐율_%용적률_%
115301120000000000가온주차타워75.35299.99
115601120001640000현대아파트22.08299.97
116501070000540005반포두산힐스빌36.05299.95
112001140000330002성수현대그린아파트21.57299.94
112601010015230000솔루테아파트27.99299.83
113801100002500000DMC 월드아파트20.95299.31
115301020006420039한국현대아파트23.83299.3
115601280000120000성원아파트19.59299.19
116501080014940004더 미켈란31.69299.16
116201020017180000보라매갑을아파트20.7298.8
116501060000420013잠원동 대우 아이빌48.57298.73
117401020004860000아남아파트26.41298.7
115601270001060000양평역 미소지움26.88298.66
114701010012790001목동현대아파트공공임대B단지22.12298.58
114701020009310000신목종합사회복지관22.12298.58
114701020009310000목동현대아파트22.12298.58
115301020012620000월드아파트26.64296.97
116801060010070001대치동3차 풍림 아이원 아파트24.09296.58
114101180004540000극동아파트26.42296.54
114701020007240002동구햇살아파트30.67296.4

끝.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

아파트 시계열 분석 4 - 아파트 전월세 자료

아파트 시계열 분석 6 - 시각화