아파트 시계열 분석 3 - 공동주택 기본/상세 정보제공 서비스
포스트
취소

아파트 시계열 분석 3 - 공동주택 기본/상세 정보제공 서비스

1. 수집할 데이터

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

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

공동주택 기본 정보제공 서비스

image

  • 주소 : https://www.data.go.kr/data/15058453/openapi.do
  • 설명 : (공동주택 기본정보)공동주택관리정보시스템에 가입한 단지의 기본정보 및 상세정보 제공
  • 방법 : 단지코드를 이용해 단지명, 법정동주소, 분양형태, 난방방식, 건축물대장상 연면적, 동수, 세대수, 시공사, 시행사, 관리사무소연락처, 관리사무소팩스, 홈페이지주소, 단지분류, 도로명주소, 호수, 관리방식, 복도유형, 사용승인일, 관리비부과면적, 전용면적별 세대현황, 단지 전용면적합, 법정동코드를 조회할 수 있는 공동주택 기본 정보제공 서비스

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

  • 요청변수(Request Parameter)
항목명(국문)항목명(영문)항목크기항목구분샘플데이터항목설명
서비스키serviceKey100인증키(URL Encode)공공데이터포털에서 발급받은 인증키
단지코드kaptCode9A10027875단지코드
  • 출력결과(Response Element)
항목명(국문)항목명(영문)항목크기항목구분샘플데이터항목설명
결과코드resultCode20000:성공
결과메시지resultMsg20NORMAL SERVICE결과메시지
단지코드kaptCode9A10027875단지코드
단지명kaptName50괴정 경성스마트W아파트단지명
법정동주소kaptAddr200부산광역시 사하구 괴정동 258 괴정 경성스마트W아파트법정동주소
분양형태codeSaleNm50분양분양형태
난방방식codeHeatNm50지역난방난방방식
건축물대장상 연면적kaptTarea2219324.6751건축물대장상 연면적(㎡)
동수kaptDongCnt1003동수
세대수kaptdaCnt22182세대수
시공사kaptBcompany100(주)경성리츠시공사
시행사kaptAcompany100(주)경성리츠시행사
관리사무소연락처kaptTel20051-294-9363관리사무소연락처
관리사무소팩스kaptFax20051-294-9364관리사무소팩스
홈페이지주소kaptUrl100 홈페이지주소
단지분류codeAptNm50아파트단지분류
도로명주소doroJuso365 도로명주소
호수hoCnt5182호수
관리방식codeMgrNm50위탁관리관리방식
복도유형codeHallNm50혼합식복도유형
사용승인일kaptUsedate820150806사용승인일
관리비부과면적kaptMarea2215040.1634관리비부과면적(㎡)
전용면적별 세대현황kaptMparea_602218260㎡ 이하
전용면적별 세대현황kaptMparea_8522060㎡ ~ 85㎡ 이하
전용면적별 세대현황kaptMparea_13522085㎡ ~ 135㎡ 이하
전용면적별 세대현황kaptMparea_136220135㎡ 초과
대장 전용면적합계privArea229014.0338단지 전용면적합(㎡)
법정동코드bjdCode102638010100법정동코드

공동주택 상세 정보제공 서비스

image

  • 주소 : https://www.data.go.kr/data/15058453/openapi.do
  • 설명 : (공동주택 기본정보)공동주택관리정보시스템에 가입한 단지의 기본정보 및 상세정보 제공
  • 방법 : 단지코드를 이용해 단지코드, 단지명, 일반관리방식, 일반관리인원, 일반관리 계약업체, 경비관리방식, 경비관리인원, 경비관리 계약업체, 청소관리방식, 청소관리인원, 음식물처리방법, 소독관리방식, 소독관리 연간소독횟수, 소독방법, 건물구조, 수전용량, 세대전기계약방식, 전기안전관리자법정선임여부, 화재수신반방식, 급수방식, 승강기관리형태, 승강기대수, 주차대수(지상), 주차대수(지하), 주차관제.홈네트워크, CCTV대수, 부대.복리시설, 버스정류장 거리, 지하철호선, 지하철역명, 지하철역 거리, 편의시설, 교육시설을 조회할 수 있는 공동주택 상세 정보제공 서비스

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

  • 요청변수(Request Parameter)
항목명(국문)항목명(영문)항목크기항목구분샘플데이터항목설명
서비스키ServiceKey100인증키(URL Encode)공공데이터포털에서 받은 인증키
단지코드kaptCode9A15876402단지코드
  • 출력결과(Response Element)
항목명(국문)항목명(영문)항목크기항목구분샘플데이터항목설명
결과코드resultCode20000:성공
결과메시지resultMsg20NORMAL SERVICE결과메시지
단지코드kaptCode9A15876402단지코드
단지명kaptName50신정삼성SH임대단지명
일반관리방식codeMgr12위탁관리일반관리방식
일반관리인원kaptMgrCnt103.5일반관리인원
일반관리 계약업체kaptCcompany30(주)아주관리일반관리 계약업체(자치관리일 경우 없을 수 있음)
경비관리방식codeSec12위탁관리경비관리방식
경비관리인원kaptdScnt104경비관리인원
경비관리 계약업체kaptdSecCom30(주)삼우안전관리경비관리 계약업체(자치관리일 경우 없을 수 있음)
청소관리방식codeClean12위탁관리청소관리방식
청소관리인원kaptdClcnt102청소관리인원
음식물처리방법codeGarbage15음식물쓰레기종량제음식물처리방법
소독관리방식codeDisinf15위탁관리소독관리방식
소독관리 연간 소독횟수kaptdDcnt104소독관리 연간 소독횟수
소독방법disposalType30도포식,분무식소독방법
건물구조codeStr15철근콘크리트구조건물구조
수전용량kaptdEcapa30800수전용량
세대전기계약방식codeEcon10단일계약세대전기계약방식
전기안전관리자 법정선임여부codeEmgr10위탁선임전기안전관리자 법정선임여부
화재수신반방식codeFalarm10P형화재수신반방식
급수방식codeWsupply10부스타방식급수방식
승강기관리형태codeElev12위탁관리승강기관리형태
승강기대수kaptdEcnt106승강기대수(승객용+화물용+승객/화물+장애우+비상용+기타)
주차대수(지상)kaptdPcnt1035주차대수(지상)
주차대수(지하)kaptdPcntu10142주차대수(지하)
주차관제.홈네트워크codeNet5주차관제.홈네트워크
CCTV대수kaptdCccnt1043CCTV 카메라 수
부대.복리시설welfareFacility200관리사무소, 노인정, 어린이놀이터, 휴게시설, 커뮤니티공간, 자전거보관소부대시설 및 복리시설
버스정류장 거리kaptdWtimebus105~10분이내버스정류장 거리
지하철호선subwayLine502호선, 5호선지하철호선
지하철역명subwayStation50오목교역지하철역명
지하철역 거리kaptdWtimesub1015~20분이내지하철역 거리
편의시설convenientFacility500관공서(양천세무서) 병원(다민한의원, 신천호한의원) 백화점(목동현대백화점) 공원(양천공원) 기타(안양천)편의시설(관공서, 병원, 백화점, 대형상가, 공원, 기타)
교육시설educationFacility500초등학교(신목) 중학교(목동) 고등학교(신목)교육시설(초등학교, 중학교, 고등학교, 대학교)

2. 데이터 수집

요청 방법 : Rest API

매매 내역을 API 방식으로 제공하고 있다. google 홈페이지에 접속하고 싶을 때 브라우저에 https://google.com 를 치면 브라우저에 화면이 떠지는 것처럼 받고싶은 데이터를 지정된 양식에 맞춰서 요청하면 데이터가 받아지는 방식이다.

  • 공동주택 기본 정보제공 서비스

    http://apis.data.go.kr/1613000/AptBasisInfoService1/getAphusBassInfo?ServiceKey={개인서비스키}&kaptCode={단지코드}

  • 공동주택 상세 정보제공 서비스

    http://apis.data.go.kr/1613000/AptBasisInfoService1/getAphusDtlInfo?ServiceKey={개인서비스키}&kaptCode={단지코드}

위 URL에서 3가지 조건을 바꿔가며 검색할 수 있다.

이렇게 완성된 url을 브라우저 url 입력하는 곳에 넣어서 확인해볼 수 있다.

image

python으로 빠르게 수집

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
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
serviceKey = "################################공유하면안됨#################################"

BassInfo_url = "http://apis.data.go.kr/1613000/AptBasisInfoService1/getAphusBassInfo?ServiceKey={}&kaptCode={}"

BassInfo_parameters = ['bjdCode', 'codeAptNm', 'codeHallNm', 'codeHeatNm', 'codeMgrNm', 'codeSaleNm', 'doroJuso', 'hoCnt', 'kaptAcompany', 'kaptAddr', 'kaptBcompany', 'kaptCode', 'kaptDongCnt', 'kaptFax', 'kaptMarea', 'kaptMparea_135', 'kaptMparea_136', 'kaptMparea_60', 'kaptMparea_85', 'kaptName', 'kaptTarea', 'kaptTel', 'kaptUrl', 'kaptUsedate', 'kaptdaCnt', 'privArea']

BassInfo_columns = ["법정동코드", "단지분류", "복도유형", "난방방식", "관리방식", "분양형태", "도로명주소", "호수", "시행사", "법정동주소", "시공사", "단지코드", "동수", "관리사무소팩스", "관리비부과면적", "세대현황_85_135", "세대현황_135", "세대현황_60", "세대현황_60_85", "단지명", "건축물대장상연면적", "관리사무소연락처", "홈페이지주소", "사용승인일", "세대수", "단지전용면적합"]


DtlInfo_url = "http://apis.data.go.kr/1613000/AptBasisInfoService1/getAphusDtlInfo?ServiceKey={}&kaptCode={}"

DtlInfo_parameters = ['kaptCode', 'kaptName', 'codeMgr', 'kaptMgrCnt', 'kaptCcompany', 'codeSec', 'kaptdScnt', 'kaptdSecCom', 'codeClean', 'kaptdClcnt', 'codeGarbage', 'codeDisinf', 'kaptdDcnt', 'disposalType', 'codeStr', 'kaptdEcapa', 'codeEcon', 'codeEmgr', 'codeFalarm', 'codeWsupply', 'codeElev', 'kaptdEcnt', 'kaptdPcnt', 'kaptdPcntu', 'codeNet', 'kaptdCccnt', 'welfareFacility', 'kaptdWtimebus', 'subwayLine', 'subwayStation', 'kaptdWtimesub', 'convenientFacility', 'educationFacility']

DtlInfo_columns = ['단지코드', '단지명', '일반관리방식', '일반관리인원', '일반관리_계약업체', '경비관리방식', '경비관리인원', '경비관리_계약업체', '청소관리방식', '청소관리인원', '음식물처리방법', '소독관리방식', '소독관리_연간_소독횟수', '소독방법', '건물구조', '수전용량', '세대전기계약방식', '전기안전관리자법정선임여부', '화재수신반방식', '급수방식', '승강기관리형태', '승강기대수', '주차대수_지상', '주차대수_지하', '주차관제_홈네트워크', 'CCTV대수', '부대_복리시설', '버스정류장_거리', '지하철호선', '지하철역명', '지하철역_거리', '편의시설', '교육시설']

colrename = {k : v for k, v in zip(BassInfo_parameters + DtlInfo_parameters, BassInfo_columns + DtlInfo_columns)}
1
2
kaptCode = pd.read_csv("../data/공동주택 단지 목록제공 서비스.csv", dtype=str)
kaptCode.head()
시도시군구읍면동법정동코드단지코드단지명
서울특별시종로구사직동1111011500A11005401광화문풍림스페이스본 아파트
서울특별시종로구내수동1111011800A11007001경희궁의아침3단지
서울특별시종로구내수동1111011800A11087101경희궁의아침2단지
서울특별시종로구수송동1111012400A11014001로얄팰리스스위트
서울특별시종로구익선동1111013300A11034001현대뜨레비앙
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
fail = []
DataFrame = pd.DataFrame([])

for code in tqdm(kaptCode.단지코드.unique()):
    
    try:
        time.sleep(0.1)
        
        items = {}
        
        req = BassInfo_url.format(serviceKey, code)
        get = requests.get(req)
        BassInfo_items_list = get_items(get)
        BassInfo_items_list = BassInfo_items_list[0]
        
        for i in BassInfo_parameters:
            if i in BassInfo_items_list:
                items[i] = str(BassInfo_items_list[i])
            else:
                items[i] = "nan"

        req = DtlInfo_url.format(serviceKey, code)
        get = requests.get(req)
        DtlInfo_items_list = get_items(get)
        DtlInfo_items_list = DtlInfo_items_list[0]
        
        for i in DtlInfo_parameters:
            if i in DtlInfo_items_list:
                items[i] = str(DtlInfo_items_list[i])
            else:
                items[i] = "nan"

        items = pd.DataFrame([items]) 
        DataFrame = pd.concat([DataFrame, items])
        
    except:
        print(req)
        fail.append(code)
1
2
DataFrame = DataFrame.rename(columns=colrename)
DataFrame.head(1).T
 0
법정동코드1111011500
단지분류주상복합
복도유형복도식
난방방식개별난방
관리방식위탁관리
분양형태분양
도로명주소서울특별시 종로구 사직로8길 4
호수744
시행사사직1구역 도심 재개발조합
법정동주소서울특별시 종로구 사직동 9 광화문풍림스페이스본 아파트
시공사풍림산업(주)
단지코드A11005401
동수6
관리사무소팩스027373399
관리비부과면적114349.25
세대현황_85_135335
세대현황_135381
세대현황_600
세대현황_60_8528
단지명광화문풍림스페이스본 아파트
건축물대장상연면적163862.09
관리사무소연락처027373388
홈페이지주소www.spacebon.kr
사용승인일20080711
세대수744
단지전용면적합94981.45
일반관리방식위탁관리
일반관리인원13
일반관리_계약업체(주)타워피엠씨
경비관리방식위탁관리(직영+위탁)
경비관리인원16
경비관리_계약업체nan
청소관리방식위탁관리(직영+위탁)
청소관리인원14
음식물처리방법기타
소독관리방식위탁관리
소독관리_연간_소독횟수4
소독방법도포식,분무식
건물구조철골철근콘크리트구조
수전용량6150
세대전기계약방식종합계약
전기안전관리자법정선임여부상주선임
화재수신반방식R형
급수방식부스타방식
승강기관리형태위탁관리
승강기대수21
주차대수_지상10
주차대수_지하1405
주차관제_홈네트워크
CCTV대수256
부대_복리시설관리사무소, 보육시설, 문고, 주민공동시설, 어린이놀이터, 휴게시설, 커뮤니티공간, 자전거보관소, 기타
버스정류장_거리5분이내
지하철호선3호선
지하철역명경복궁역
지하철역_거리5~10분이내
편의시설관공서(서울특별시청, 종로구청) 병원(서대문구보건소, 강북삼성병원, 적십자병원, 천연보건분소) 백화점(경복궁, 경희궁, 덕수궁) 공원(사직공원) 기타(서울시립어린이도서관)
교육시설초등학교(매동초,대신초) 중학교(배화여자중,청운중) 고등학교(배화여자고,덕성여고) 대학교(배화여자대,경기대, 상명대)

결측치

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
(DataFrame == 'nan').sum()

법정동코드              0
단지분류              84
복도유형              68
난방방식              36
관리방식              68
분양형태              39
도로명주소            144
호수                74
시행사                0
법정동주소              0
시공사                0
단지코드               0
동수                68
관리사무소팩스            0
관리비부과면적            0
세대현황_85_135       11
세대현황_135          11
세대현황_60           11
세대현황_60_85        11
단지명                0
건축물대장상연면적          0
관리사무소연락처           0
홈페이지주소             0
사용승인일             40
세대수               11
단지전용면적합            1
일반관리방식            68
일반관리인원           120
일반관리_계약업체        397
경비관리방식           131
경비관리인원           127
경비관리_계약업체        656
청소관리방식           131
청소관리인원           129
음식물처리방법          203
소독관리방식           148
소독관리_연간_소독횟수     212
소독방법             434
건물구조             146
수전용량             142
세대전기계약방식         145
전기안전관리자법정선임여부    144
화재수신반방식          147
급수방식             147
승강기관리형태          179
승강기대수            160
주차대수_지상          134
주차대수_지하          136
주차관제_홈네트워크       144
CCTV대수           138
부대_복리시설          176
버스정류장_거리          80
지하철호선            178
지하철역명            753
지하철역_거리          193
편의시설             456
교육시설             449
dtype: int64

시공사 정보

데이터가 어쩔 수 없이 퀄리티가 낮은데, 간단하게 (주) 만 제거하고 시공사를 살펴보았다.
시공사 정보가 없는 아파트가 83개 정도 되는데, 네이버 부동산에서 찾아서 수동으로 입력해야 할 듯 하다.

1
DataFrame.시공사.apply(lambda x: x.replace("(주)", "")).value_counts().reset_index().head(10)
index시공사
현대건설164
삼성물산128
현대산업개발105
 83
대우건설77
한신공영74
대림산업69
우성건설65
롯데건설60
두산건설47

대단지 정보

1
2
3
4
5
6
7
DataFrame.세대수 = DataFrame.세대수.replace("nan", "0")
DataFrame.세대수 = DataFrame.세대수.astype(int)
tiny = [
    "단지코드", "단지명", "법정동코드", "단지분류", "분양형태", 
    "호수", "동수", "세대수", "세대현황_60", "세대현황_60_85", "세대현황_85_135", "세대현황_135", 
]
DataFrame[tiny].sort_values("세대수", ascending=False).head(10)
단지코드단지명법정동코드단지분류분양형태호수동수세대수세대현황_60세대현황_60_85세대현황_85_135세대현황_135
A10025850헬리오시티아파트1171010700아파트임대+분양951084951028545132150024
A13824006잠실파크리오1171010200아파트분양686466686413884260642574
A13822004잠실엘스아파트1171010100아파트분양5678725678115040424860
A13822003잠실리센츠1171010100아파트분양5563655563111335908600
A13805002올림픽선수기자촌아파트1171011100아파트분양55401225540020342728778
A10025263고덕 그라시움 아파트1174010200아파트임대+분양4932534932196425983655
A13820201올림픽훼밀리타운1171010800아파트분양4494564494015009002094
A13583507은마1168010600아파트분양44242844240442400
A10027817DMC파크뷰자이아파트1141012000아파트임대+분양430061430012312522423124
A10025010고덕 아르테온 아파트1174010300아파트임대+분양4066414066122026761700

헬리오시티아파트는 정말로 크다.

image

끝.

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

아파트 시계열 분석 2 - 공동주택 단지 목록제공 서비스

Embed iframe in jekyll