goodthings4me.tistory.com
공동주택 단지코드(아파트 코드)가 필요하여 공공데이터 포털(www.data.go.kr)에서 데이터를 추출하는 API 개발 언어 중 편리하다고 할 수 있는 파이썬(Python)을 통해 아파트 단지 목록과 단지 코드(공동주택 단지 코드)를 가져오는 코드를 만들어봤다.
공동주택 단지코드(아파트 코드) 추출
공공데이터포털에서 아파트 단지 정보 API 서비스(공동주택 기본 정보제공 서비스)의 항목들(아파트 단지명, 법정동 코드, 난방 방식, 동수, 아파트 세대수 데이터, 관리사무소 연락처(팩스 포함), 도로명주소, 법정동 주소, 호수, 관리방식, 복도 유형, 사용승인일, 전용면적별 세대 현황 등)을 추출하는 API를 확인해보니 해당 서비스를 조회할 때 기본적으로 입력되어야 하는 되는 것이 '아파트 코드'였고, 해당 API를 확인하니 총 18,900여 개가 있었다.
<numOfRows>10</numOfRows>
<pageNo>1</pageNo>
<totalCount>18900</totalCount>
국토교통부_전체 아파트 목록 샘플데이터에 인증키를 입력하고 미리보기에서 확인을 해보면, 위처럼 나오는데 totalCount 숫자가 18900임.
※ API 요청을 통해 출력되는 결과(Response Element)
항목명(국문) | 항목명(영문) | 항목크기 | 항목구분 | 샘플데이터 | 항목설명 |
---|---|---|---|---|---|
결과코드 | 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 | 전체 조회건수 |
API 추출 소스코드
## 국토교통부_공동주택 단지 목록제공 서비스(공동주택인 아파트 단지코드 목록 조회)
# 전체 데이터 18,900개를 텍스트로 추출하는 코드임
import requests
import xmltodict
from svckey import *
def editError(row, e):
with open('./apidata/Errors.txt', 'a') as f:
f.write(f'Error row #{row} : {e}\n')
def apt_danji_sigungu():
url = 'http://apis.data.go.kr/1613000/AptListService2/getTotalAptList'
params ={'serviceKey' : service_dkey, 'pageNo' : 1, 'numOfRows' : '19000'}
response = requests.get(url, params=params)
# print(response.content) # ascii
xml_data = response.content.decode('utf-8')
# print(xml_data, type(xml_data)) # <class 'str'>
parse_data = xmltodict.parse(xml_data)
# print(parse_data, type(parse_data)) # <class 'dict'>
items_list = parse_data['response']['body']['items']['item'] # dict 내 item key에 있는 값(List)
# print(items_list)
print(f'items_list type: {type(items_list)}\nlen(items_list): {len(items_list)}') # <class 'list'>
row = 1
txt_insert = '' # 추출 데이터 적재하는 변수
for data in items_list:
# print(data)
sido = data['as1']
try:
sigungu = data['as2'] # 세종특별자치시 오류남
except Exception as e:
editError(row, e)
sigungu = ''
dongeupmyun = data['as3']
try:
ri = data['as4'] # '리'가 없는 경우
except Exception as e:
ri = ''
# print(f"{row}\n{data['as1']}\n{data['as2']}\n{data['as3']}\n{ri}\n{data['kaptName']}\n{data['bjdCode']}\n{data['kaptCode']}")
try:
txt_insert += str(row) + '$' + sido + '$' + sigungu + '$' + dongeupmyun + '$' + ri + '$' + data['kaptName'] + '$' + str(data['bjdCode']) + '$' + data['kaptCode'] + '\n'
except Exception as e:
# TypeError: string indices must be integers
editError(row, e)
continue
row += 1
with open('./apidata/공동주택_단지목록_Code.txt', 'a') as f:
f.write(txt_insert)
print(f'# 총 {row - 1}개 저장 완료!!')
apt_danji_sigungu()
- serviceKey : 본인의 공공데이터 포털 API 키를 의미하며, 별도의 .py파일(모듈)로 만들어서 import 시켰음
- params의 pageNo나 numOfRows 값을 변경하여 for문으로 처리도 가능하나 전체 데이터를 한번에 처리될 수 있도록 하였음
- python 샘플 코드에 있는 print(response.content) 결과는 ascii 코드였고, 이를 디코딩(response.content.decode('utf-8'))한 후 다시 xmltodict 외부 라이브러리를 활용하여 dict 타입으로 변경함
- 딕셔너리 결과를 보면, 찾는 값들이 ['response']['body']['items']['item']의 값에 있고,
- 이를 for문을 통해서 하나씩 가져온 후 텍스트로 저장하였음
- 여기서 오류가 2곳에서 발생하는데, 그 하나는 리(as4)의 값이 없는 경우이고, 또 하나는 세종특별자치시가 시도만 있고 시군구가 없기 때문에 에러가 발생하였는 바, 이를 확인하고 조치하기 위해 예외구문을 두었고, 오류 내용을 확인하기 위해서 함수 하나를 만들어서 오류내용을 저장하였음
위 코드를 수행하면, 공동주택_단지목록_Code.txt 파일과 오류로 인해 Errors.txt 파일이 생김
※ 아파트 단지목록 및 단지코드(18,900개) 파일(Excel) 다운로드
블로그 인기글
유튜브 영상 등의 URL 주소를 QR코드로 만들기
네이버 QR코드, makeQR, MUST QRcode, 무료 온라인 QRCode 생성기 등의 웹사이트에서 유튜브 영상 등의 URL을 입력하여 QR코드를 만들 수 있다. QR코드를 생성할 수 있는 사이트와 프로그램 URL 주소를 붙여넣기 한 후 "QR 코드 생성" 버튼을 클릭하면 큐알코드가 이미지로 생성되고, 다운로드도 할 수 있는 사이트 https://truedoum.com/useful/qrcode/ # 유튜브에서 동영상 URL을 복사하는 방법 유튜브에서 QR코드를 만들 동영상을 검색한다. 해당 동영상을 클릭한다. 동영상 위에서 마우스 우클릭 후 나오는 팝업창에서 “동영상 URL 복사”를 클릭하거나 영상 하단의 “공유”를 클릭하여 나온 창에서 URL를 복사한다. 아래의 웹사이트 중 하나를 선택한 후 복사..
goodthings4me.tistory.com
[엑셀] 근무연수 및 근무 개월수 계산하는 함수
직장을 다니다 보면 몇 년 몇 개월 또는 전체 며칠을 다니고 있는지 궁금할 때가 있다. 아니면, 총무나 인사 일을 할 때 직원들의 근속연수 또는 근속개월수 등을 계산하고 싶을 때도 있다. 이런 경우 엑셀 함수를 활용하면 어떨까!! 근무연수 및 근무 개월수 계산 함수 알아보기 엑셀에서 근무연수 또는 근무 개월수 계산하는 것은 datedif() 함수를 사용하면 간단하게 해결할 수 있다. 아래 이미지를 보면서 설명하면, 셀 E1에 기준일자를 입력하고, 근무연수를 구할 때는 =datedif(B3,$E$1,"Y")&"년" 을 입력한다. 근무개월수는 =datedif(B3,$E$1,"M")&"개월" 처럼 입력한다. 일수까지 파악할 때문 별로 없지만, 심심풀이로 구해보고 싶을 때 =datedif(B3,$E$1,"D")..
goodthings4me.tistory.com
Windows 10 탐색기 느려지는 증상과 해결하는 방법
잘 작동하던 Windows 10 탐색기가 갑자기 느려지는 증상이 발생했을 때 어떻게 조치를 하는지 구글에서 찾아보니 많은 해결책들이 있었으나 어떤 것이 정확한 해결책인지는 알 수가 없었다. 그래서 해결방법이라고 제시한 것들을 정리해 보았다. 윈도우 탐색기가 느려지는 증상 해결 방법 어느 순간부터 응용프로그램(VS Code 등)에서 폴더 열기나 파일 불러오기를 했을 때 검색 팝업창이 안 뜨거나 열리는 시간이 엄청 느려지는 증상과, 더불어서 탐색기도 실행이 많이 느려지는 증상이 있었다. 기존에 사용하던 VS Code에 openpyxl 설치 후 실행이 느려지는 증상이 발생하더니 윈도우10 탐색기도 느려져서 사용할 수가 없었다. 노트북에 OS(Windows10)를 설치한지 1년이 다 되어가긴 했지만, 1개월 전..
goodthings4me.tistory.com
'코딩 연습' 카테고리의 다른 글
파이썬 크롬드라이버 자동설치 (chromedriver_autoinstaller) (0) | 2022.12.20 |
---|---|
문자열에 \xa0 있을 경우 제거하는 방법 (0) | 2022.12.02 |
엑셀 암호 해제 방법 - 파이썬으로 엑셀 암호 제거 프로그램 만들기 (0) | 2022.10.13 |
Pandas - 데이터 분석용 파이썬 라이브러리 "판다스" #1 (0) | 2022.10.08 |
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기 (2) | 2022.09.25 |
댓글