코딩 연습/코딩배우기

파이썬으로 아파트 관련 기본 정보 추출해보기(공공데이터포털 API 사용법)

good4me 2022. 1. 24. 14:28

아파트 관련 정보가 필요하여 공공데이터 포털(data.go.kr)에서 국토교통부 공동주택 기본 정보제공 서비스에 대한 오픈 API 활용신청 후 파이썬으로 코딩 후 데이터를 추출해보았다. 

 

 

공공데이터 포털 API 사용해 아파트 정보 추출

공공데이터 포털에서 추출한 공동주택 관련 기본 정보제공 서비스에는 2가지 서비스가 있는데,

 

1) 공동주택 기본 정보조회

단지 코드를 이용해 단지명, 법정동 주소, 분양 형태, 난방방식, 건축물대장상 연면적, 동수, 세대수, 시공사, 시행사, 관리사무소 연락처, 관리사무소 팩스, 홈페이지 주소, 단지 분류, 도로명주소, 호수, 관리방식, 복도 유형, 사용승인일, 관리비 부과면적, 전용면적별 세대 현황, 단지 전용면적합, 법정동 코드를 조회할 수 있는 공동주택 기본 정보제공 서비스

 

2) 공동주택 상세 정보조회

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

 

이 두가지 서비스 중 내가 찾는 정보들은 기본 정보조회만 가져와도 충분했다.

 

API 호출 시 파라미터로 넣은 것이 서비스 키와 아파트 단지 코드가 필요했는데, 단지 코드는 추출을 완료했기 때문에 코딩만 해서 추출하면 되었다. 

 

API 활용 소스 코드

import requests
import xmltodict
import json
import pandas as pd


def apt_basicinfo():

    dangiCode = [ 'A10027999', 'A79082901', 'A79083201', 'A79072403', 'A79072402', 'A79033003', 'A10027015', 'A79033002' ]
    
    apt_basic = []
    for code in dangiCode:
        url = 'http://apis.data.go.kr/1613000/AptBasisInfoService1/getAphusBassInfo'
        params ={'serviceKey' : 본인의 서비스키, 'kaptCode' : code}

        response = requests.get(url, params=params)
        # print(response.content)  # ascii

        xml_data = response.content.decode('utf-8')
        # print(xml_data)

        parse_data = xmltodict.parse(xml_data)
        print(parse_data)  # OrderedDict([('

        ## 값이 없는 경우 또는 KeyError 발생 예외 처리
        try:
            if parse_data['response']['body'] == None:
                continue
        except Exception as e:
            print(f'Error: {e}\n')

        ord_data = parse_data['response']['body']['item']
        print(ord_data)

        ## json() 활용하여 데이터 변환 
        jData = json.loads(json.dumps(ord_data))
        print(jData)
        apt_basic.append(jData)

        break
    df = pd.DataFrame(apt_basic)
    print(df.head())

    df.to_excel('apt_std_sample.xlsx', encoding='utf-8-sig')


apt_basicinfo()

출력값

 

- xml 파싱 후 출력(예시) : print(parse_data)

OrderedDict([('response', OrderedDict([('header', OrderedDict([('resultCode', '00'), ('resultMsg', 
'NORMAL SERVICE.')])), ('body', OrderedDict([('item', OrderedDict([('bjdCode', '4711110100'), ('codeAptNm', '아파트'), ('codeHallNm', '계단식'), ('codeHeatNm', '개별난방'), ('codeMgrNm', '위탁관리'), ('codeSaleNm', '분양'), ('doroJuso', '경상북도 포항시 남구 상도남로 25'), ('hoCnt', '448'), ('kaptAcompany', '(주)한국토지신탁'), ('kaptAddr', '경상북도 포항남구 상도동 466-4 상도코아루센트럴하임'), ('kaptBcompany', '우진건설(주)'), ('kaptCode', 'A10027999'), ('kaptDongCnt', '5'), ('kaptFax', '0542729398'), ('kaptMarea', '47170.75'), ('kaptMparea_135', '0'), ('kaptMparea_136', '0'), ('kaptMparea_60', '44'), ('kaptMparea_85', '404'), ('kaptName', '상도코아루센트럴하임'), ('kaptTarea', '62294.0106'), ('kaptTel', '0542729399'), ('kaptUrl', None), ('kaptUsedate', '20150527'), ('kaptdaCnt', '448'), ('privArea', '35510.0136')]))]))]))])

good4me.co.kr

 

- json.loads 데이터 출력(예시) : print(jData)

{'bjdCode': '4711110100', 'codeAptNm': '아파트', 'codeHallNm': '계단식', 'codeHeatNm': '개별난방', 
'codeMgrNm': '위탁관리', 'codeSaleNm': '분양', 'doroJuso': '경상북도 포항시 남구 상도남로 25', 'hoCnt': '448', 'kaptAcompany': '(주)한국토지신탁', 'kaptAddr': '경상북도 포항남구 상도동 466-4 상도코 
아루센트럴하임', 'kaptBcompany': '우진건설(주)', 'kaptCode': 'A10027999', 'kaptDongCnt': '5', 'kaptFax': '0542729398', 'kaptMarea': '47170.75', 'kaptMparea_135': '0', 'kaptMparea_136': '0', 'kaptMparea_60': '44', 'kaptMparea_85': '404', 'kaptName': '상도코아루센트럴하임', 'kaptTarea': '62294.0106', 'kaptTel': '0542729399', 'kaptUrl': None, 'kaptUsedate': '20150527', 'kaptdaCnt': '448', 'privArea': '35510.0136'}

 

- 판단스 DataFrame 출력 : print(df.head())

      bjdCode codeAptNm codeHallNm  ... kaptUsedate kaptdaCnt    privArea
0  4711110100       아파트        계단식  ...    20150527       448  35510.0136
1  4711110400       아파트        계단식  ...    20061227       465  50757.5311
2  4711111200       아파트        혼합식  ...    19881031       275    20352.32
3  4711111200       아파트        혼합식  ...    19920630       297    10657.23
4  4711111200       아파트        혼합식  ...    19950530       367    25450.74

 

- 데이터의 column(필드 값) 예시

bjdCode 2638010100  ## 법정동 코드
codeAptNm 아파트  ## 단지 분류
codeHallNm 혼합식  ## 복도 유형
codeHeatNm 개별난방  ## 난방 방식
codeMgrNm 자치관리  ## 관리 방식
codeSaleNm 분양  ## 분양 형태
doroJuso 부산광역시 사하구 낙동대로 180  ## 도로명 주소
hoCnt 182  ## 호수
kaptAcompany (주)경성리츠  ## 시행사
kaptAddr 부산광역시 사하구 괴정동 258 괴정 경성스마트W아파트  ## 법정동주소
kaptBcompany (주)경성리츠  ## 시공사
kaptCode A10027875  ## 단지 코드
kaptDongCnt 3  ## 동수
kaptFax 0512949364  ## 관리사무소 팩스
kaptMarea 15040.1634  ## 관리비 부과면적(㎡)
kaptMparea_135 0  ## 전용면적별 세대현황(85㎡ ~ 135㎡ 이하)
kaptMparea_136 0  ## 전용면적별 세대현황(135㎡ 초과)
kaptMparea_60 182  ## 전용면적별 세대현황(60㎡ 이하)
kaptMparea_85 0  ## 전용면적별 세대현황(60㎡ ~ 85㎡ 이하)
kaptName 괴정 경성스마트W아파트  ## 단지명
kaptTarea 15040.1634  ## 건축물대장상 연면적(㎡)
kaptTel 0512949363  ## 관리사무소 연락처
kaptUrl None  ## 홈페이지 주소
kaptUsedate 20150806  # 사용 승인일
kaptdaCnt 182  # 세대수
privArea 9014.0338  ## 단지 전용면적합(㎡)