1. 수집할 데이터
공공 데이터포털 (data.go.kr) 소개
공공데이터포털은 공공기관이 생성 또는 취득하여 관리하고 있는 공공데이터를 한 곳에서 제공하는 통합 창구입니다. 포털에서는 국민이 쉽고편리하게 공공데이터를 이용할 수 있도록 파일데이터, 오픈API, 시각화 등 다양한 방식으로 제공하고 있으며, 누구라도 쉽고 편리한 검색을통해 원하는 공공데이터를 빠르고 정확하게 찾을 수 있습니다.
공동주택 단지 목록제공 서비스
![image]()
위 주소에 들어가서 로그인 후 아파트 실거래 상세자료 활용신청을 진행한다.
약 10분 후 부터 api 호출할 수 있다.
항목명(국문) | 항목명(영문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
---|
서비스키 | serviceKey | 100 | 필 | 인증키(URL Encode) | 공공데이터포털에서 받은 인증키 |
시도코드 | sidoCode | 2 | 필 | 27 | 시도코드 |
페이지번호 | pageNo | 100 | 옵 | 1 | 페이지번호 |
목록 건수 | numOfRows | 100 | 옵 | 10 | 목록 건수 |
항목명(국문) | 항목명(영문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
---|
결과코드 | resultCode | 2 | 필 | 00 | 00:성공 |
결과메시지 | resultMsg | 20 | 필 | NORMAL SERVICE | 결과메시지 |
단지코드 | kaptCode | 9 | 필 | A10027868 | 단지코드 |
단지명 | kaptName | 50 | 필 | 대구테크노폴리스 남해오네뜨1차 아파트 | 단지명 |
시도 | as1 | 10 | 필 | 대구광역시 | 단지가 속한 시도 |
시군구 | as2 | 10 | 필 | 달성군 | 단지가 속한 시군구 |
읍면동 | as3 | 10 | 필 | 현풍읍 | 단지가 속한 읍면동 |
리 | as4 | 10 | 옵 | 중리 | 단지가 속한 리, 시도/시군구에 따라 존재하지 않을 수 있음 |
법정동코드 | bjdCode | 10 | 필 | 2771026522 | 법정동코드 10자리 |
열 갯수 | numOfRows | 3 | 필 | 10 | 열 갯수 |
페이지 수 | pageNo | 3 | 필 | 1 | 현재 페이지 |
전체 조회건수 | totalCount | 10 | 옵 | 929 | 전체 조회건수 |
공동주택 이란 ?
「주택법」 제2조 [시행 2021. 10. 21.] [법률 제18317호, 2021. 7. 20., 일부개정]
- “주택”이란 세대(世帶)의 구성원이 장기간 독립된 주거생활을 할 수 있는 구조로 된 건축물의 전부 또는 일부 및 그 부속토지를 말하며, 단독주택과 공동주택으로 구분한다.
- “단독주택”이란 1세대가 하나의 건축물 안에서 독립된 주거생활을 할 수 있는 구조로 된 주택을 말하며, 그 종류와 범위는 대통령령으로 정한다.
- “공동주택”이란 건축물의 벽ㆍ복도ㆍ계단이나 그 밖의 설비 등의 전부 또는 일부를 공동으로 사용하는 각 세대가 하나의 건축물 안에서 각각 독립된 주거생활을 할 수 있는 구조로 된 주택을 말하며, 그 종류와 범위는 대통령령으로 정한다.
공동주택의 종류 ?
공동주택관리정보시스템 : http://www.k-apt.go.kr/
![image]()
토지이용규제정보서비스 : 공동주택 용어사전
- 아파트: 주택으로 쓰이는 층수가 5개 층 이상인 주택
- 층수를 산정할 때 1층 전부를 필로티 구조로 하여 주차장으로 사용하는 경우에는 필로티 부분을 층수에서 제외하고, 지하층을 주택의 층수에서 제외한다.
- 연립 주택: 주택으로 쓰이는 1개 동의 연면적(지하 주차장 면적 제외)이 660m2를 초과하고, 층수가 4개 층 이하인 주택
- 층수를 산정할 때 1층 전부를 필로티 구조로 하여 주차장으로 사용하는 경우에는 필로티 부분을 층수에서 제외하고, 지하층을 주택의 층수에서 제외한다.
- 다세대 주택: 주택으로 쓰이는 1개 동의 연면적(지하 주차장 면적 제외)이 660m2 이하인 4개 층 이하인 주택
- 층수를 산정할 때 1층의 전부 또는 일부를 필로티 구조로 하여 주차장으로 사용하고 나머지 부분을 주택 외의 용도로 쓰는 경우에는 해당 층을 주택의 층수에서 제외하며, 지하층을 주택의 층수에서 제외한다.
- 기숙사: 학교 또는 공장 등의 학생 또는 종업원 등을 위해 사용되는 것으로서 공동 취사 등을 할 수 있는 구조이되, 독립된 주거 형태를 갖추지 않은 것이다.
- 층수를 산정할 때 지하층은 주택의 층수에서 제외한다.
의무관리대상 아파트 ?
「공동주택관리법」 제2조 제1항 제2호 [시행 2021. 8. 10.] [법률 제18385호, 2021. 8. 10., 일부개정]
- 가. 300세대 이상의 공동주택
- 나. 150세대 이상으로서 승강기가 설치된 공동주택
- 다. 150세대 이상으로서 중앙집중식 난방방식(지역난방방식을 포함한다)의 공동주택
- 라. 「건축법」 제11조에 따른 건축허가를 받아 주택 외의 시설과 주택을 동일 건축물로 건축한 건축물로서 주택이 150세대 이상인 건축물
- 마. 가목부터 라목까지에 해당하지 아니하는 공동주택 중 입주자등이 대통령령으로 정하는 기준에 따라 동의하여 정하는 공동주택
2. 데이터 수집
API 제공 내역
항목 | 예시 |
---|
as1 | 서울특별시 |
as2 | 강동구 |
as3 | 명일동 |
bjdCode | 1174010100 |
kaptCode | A13407204 |
kaptName | 명일신동아 |
AptListService2
주소가 아니라 AptListService1
인경우 (만약 오래전에 이미 활용신청을 한 경우) 공공데이터포털에서 재 검색 후 다시 활용신청을 하면 된다.
요청 방법 : Rest API
매매 내역을 API 방식으로 제공하고 있다. google 홈페이지에 접속하고 싶을 때 브라우저에 https://google.com
를 치면 브라우저에 화면이 떠지는 것처럼 받고싶은 데이터를 지정된 양식에 맞춰서 요청하면 데이터가 받아지는 방식이다.
http://apis.data.go.kr/1613000/AptListService2/getSigunguAptList?ServiceKey={개인서비스키}&sigunguCode={시군구코드}&pageNo=1&numOfRows=1000
위 URL에서 3가지 조건을 바꿔가며 검색할 수 있다.
- {개인서비스키} : 공공데이터포털에 활용신청하면 받을 수 있음.
- {시군구코드} :
https://www.code.go.kr/stdcode/regCodeL.do
에서 확인할 수 있다. 시코드 2자리와 구코드 3자리를 합쳐서 5자리 코드로 입력하면 된다.- 서울특별시 종로구 청운동 : 1111010100
- 서울특별시 : 11
- 종로구 : 110
- 청운동 : 10100
이렇게 완성된 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
| serviceKey = "################################공유하면안됨#################################"
url = "http://apis.data.go.kr/1613000/AptListService2/getSigunguAptList?ServiceKey={}&sigunguCode={}&pageNo=1&numOfRows=1000"
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"]
|
1
2
3
4
5
6
| req = url.format(serviceKey, '11110')
get = requests.get(req)
items_list = get_items(get)
items = pd.DataFrame(items_list)
items = items.rename(columns = rename_columns)
items.head()
|
시도 | 시군구 | 읍면동 | 법정동코드 | 단지코드 | 단지명 |
---|
서울특별시 | 종로구 | 사직동 | 1111011500 | A11005401 | 광화문풍림스페이스본 아파트 |
서울특별시 | 종로구 | 내수동 | 1111011800 | A11007001 | 경희궁의아침3단지 |
서울특별시 | 종로구 | 내수동 | 1111011800 | A11087101 | 경희궁의아침2단지 |
서울특별시 | 종로구 | 수송동 | 1111012400 | A11014001 | 로얄팰리스스위트 |
서울특별시 | 종로구 | 익선동 | 1111013300 | A11034001 | 현대뜨레비앙 |
25개 지역구 한번에 수집
1
2
3
4
5
6
7
8
9
10
11
| DataFrame = pd.DataFrame([])
for code in locCode:
time.sleep(0.1)
req = url.format(serviceKey, code)
get = requests.get(req)
items_list = get_items(get)
items = pd.DataFrame(items_list)
items = items.rename(columns = rename_columns)
DataFrame = pd.concat([DataFrame, items])
|
살고(사고) 싶은 지역을 검색
1
2
3
| DataFrame.loc[(
(DataFrame.읍면동 == "상도동")
)]
|
시도 | 시군구 | 읍면동 | 법정동코드 | 단지코드 | 단지명 |
---|
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603401 | 상도경향렉스빌 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603002 | 브라운스톤상도 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603008 | 힐스테이트상도프레스티지 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603003 | 상도건영제2 관리사무소 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15683601 | 상도1동대림 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603004 | 상도sh-ville |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603206 | 상도더샵 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603502 | 래미안상도2차 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603006 | 래미안상도3차 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15671801 | 상도두산위브 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15683901 | 상도쌍용 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15678101 | 상도현대 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15683402 | 상도동중앙하이츠빌아파트 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603204 | 상도래미안1차 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15678103 | 힐스테이트상도센트럴파크 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603001 | 상도동원베네스트 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603203 | 아이파크상도동 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603009 | 상도더샵2차 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15603007 | 상도래미안1차제2 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A15678102 | 상도삼호 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A10027472 | 상도효성해링턴플레이스 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A10027633 | 상도2차 두산위브트레지움 아파트 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A10027614 | 상도 휴엔하임 도시형생횔주택 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A10025768 | 이편한세상 상도 노빌리티 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A10027424 | 상도파크자이 아파트 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A10024777 | 상도동 롯데캐슬 비엔 |
서울특별시 | 동작구 | 상도동 | 1159010200 | A10024365 | 상도역롯데캐슬파크엘 |
지역구별 아파트 개수
1
| DataFrame.groupby(["시도", "시군구"]).단지명.count().reset_index().sort_values("단지명", ascending = False)
|
시도 | 시군구 | 단지명 |
---|
서울특별시 | 노원구 | 212 |
서울특별시 | 강남구 | 200 |
서울특별시 | 강서구 | 181 |
서울특별시 | 서초구 | 168 |
서울특별시 | 영등포구 | 163 |
서울특별시 | 송파구 | 147 |
서울특별시 | 구로구 | 146 |
서울특별시 | 양천구 | 129 |
서울특별시 | 성북구 | 129 |
서울특별시 | 은평구 | 126 |
서울특별시 | 마포구 | 125 |
서울특별시 | 동작구 | 117 |
서울특별시 | 강동구 | 115 |
서울특별시 | 성동구 | 112 |
서울특별시 | 도봉구 | 108 |
서울특별시 | 중랑구 | 102 |
서울특별시 | 동대문구 | 100 |
서울특별시 | 서대문구 | 81 |
서울특별시 | 광진구 | 76 |
서울특별시 | 관악구 | 74 |
서울특별시 | 용산구 | 73 |
서울특별시 | 금천구 | 46 |
서울특별시 | 강북구 | 43 |
서울특별시 | 중구 | 40 |
서울특별시 | 종로구 | 29 |
끝.