Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 구현
- 누적합
- 우선순위큐
- 건축물대장정보
- NLP
- dp
- Geocoding
- 전처리
- 지진대피소
- 그리디
- 분할정복
- 수학
- 자연어처리
- 유사도
- TF-IDF
- 너비우선탐색
- 백준
- 재귀
- pandas
- xmltodict
- GroupBy
- 그래프이론
- cosine
- 그래프탐색
- 코사인유사도
- 공공데이터
- 유클리드
- 깊이우선탐색
- geopy
- 비트마스킹
Archives
- Today
- Total
정리용
[openAPI] 공공데이터 - 건축물대장정보 (xmltodict) 본문
0. 준비물
(1) 시군구 / 법정동 코드 정보
https://www.code.go.kr/index.do
행정표준코드 관리시스템
www.code.go.kr
(2) 공공데이터 인증키
- 방법 생략 -
(3) 라이브러리 설치
!pip install xmltodict
1. 데이터 파악
해당 페이지에서 Request시에 필수적으로 요청해야하는 항목을 파악한다
항목구분을 보면 시군구 코드(sigunguCd)와 법정동 코드(bjdongCd)가 필수임을 알 수있다.
추가적으로 모든 자료를 요청하기 위해 리스트수(numOfRows)도 같이 요청한다.
또한 해당 자료는 Json 이 제공되지 않고 xml 형태로만 제공되므로 xmltodict을 이용한다.
미리보기 디폴트로 제공되는 강남구 개포동을 불러온다.
import requests
import xmltodict
import json
from pandas import json_normalize
params ={'serviceKey' : 인증키,
'sigunguCd' : '11680',
'bjdongCd' : '10300',
'numOfRows' : '10'}
response = requests.get(url, params=params)
contents = json.loads(json.dumps(xmltodict.parse(response.text), indent=3, ensure_ascii=False))
# body > items > item
df = json_normalize(contents["response"]["body"]["items"]["item"])
df

2. 법정동 데이터 추출
(1) 시군구 / 법정동 코드 텍스트파일 불러오기
import pandas as pd
sdf = pd.read_csv('/content/drive/MyDrive/csv/법정동코드 전체자료.txt', sep = "\t", engine='python', encoding = "cp949")
(2) 현재 존재하고 원하는 지역(서대문구)에 속한 데이터 필터링
sdf = sdf[sdf['폐지여부'] == '존재']
sdf_sdm = sdf[sdf['법정동명'].str.contains("서대문구")].reset_index(drop=True)
sdf_sdm
(3) 법정동코드 컬럼을 시군구, 법정동 컬럼으로 분리
sdf_sdm['법정동코드'] = sdf_sdm['법정동코드'].astype(str)
sdf_sdm['시군구'] = sdf_sdm['법정동코드'].apply(lambda x : x[:5])
sdf_sdm['법정동'] = sdf_sdm['법정동코드'].apply(lambda x : x[5:])
sdf_sdm

(4) 법정동 컬럼을 list 로 변환
lst_sdm = sdf_sdm['법정동'].tolist()
['00000', '10100', '10200', '10300', '10400', '10500', '10600', '10700', '10800', '10900', '11000', '11100', '11200', '11300', '11400', '11500', '11600', '11700', '11800', '11900', '12000']
3. openAPI 활용
import pandas as pd
import requests
import xmltodict
import json
from pandas import json_normalize
df_base= pd.DataFrame(columns=df.columns) # 여기서 df는 1번의 미리보기 df
# 앞서 추출한 법정동리스트(lst_sdm)을 이용한 반복문
for k in range (1,len(lst_sdm)) :
print()
params ={'serviceKey' : 인증키,
'sigunguCd' : '11410',
'bjdongCd' : lst_sdm[k],
'numOfRows' : '10000'}
response = requests.get(url, params=params)
contents = json.loads(json.dumps(xmltodict.parse(response.text), indent=3, ensure_ascii=False))
# body > items > item
df = json_normalize(contents["response"]["body"]["items"]["item"])
df_base = pd.concat([df_base,df], ignore_index=True)
print(df_base.shape, lst_sdm[k])
df_base
df_base.to_csv('건축물대장정보.csv',encoding='utf-8-sig',index=False)
'프로젝트' 카테고리의 다른 글
dd (0) | 2022.02.22 |
---|---|
[geocoding] 네이버 API를 이용한 주소 위경도로 변환 (0) | 2022.02.14 |
[geocoding] 파이썬 geopy를 이용한 주소 위경도로 변환 (0) | 2022.02.11 |
[geocoding] 구글드라이브를 이용한 주소 위경도로 변환 (0) | 2021.12.14 |
Comments