상세 컨텐츠

본문 제목

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(7-Pandas로 법정동코드 조회 기능 만들기)

코딩공부/국토교통부 오픈 API 활용 개발

by 취미부자 직장인 고라니 2021. 6. 18. 18:02

본문

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기는 완성할 때까지 연재됩니다.

 

(지난 이야기)

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(1-기본세팅)

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(2-샘플코드 파이썬3로 변환하기)

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(3-API 호출 성공)

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(4-API호출을 함수로 선언하고 서버에서 실행해보기)

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(5-프런트앤드와 백앤드 통신 시도 준비)

 

국토교통부 전월세 실거래가 공공 API 호출해서 웹페이지에 띄워보기(6-프런트앤드 화면 만들고 콘솔에 결과 띄우기 시도)

 

 

지난 포스팅에서 법정동코드와 거래연월을 입력해서

프런트앤드로 값을 불러오는 것까지 해봤습니다

 

이번에는 법정동코드를 직접 입력하는 것이 아닌

지역이름을 검색했을 때 해당 법정동코드가 나오는 기능을 만들어 볼게요

 

사실 법정동코드를 조회하는 API는

공공데이터포털에서 행정안전부가 제공하는 것이 있습니다

 

하지만 제가 직접 사용해 본 결과 해당 API는 호출을 했을 때

HTTP에러가 발생하는 일이 빈번해서

차라리 법정동코드는 네이티브(?)로 작업하는 것이 더 적합하다고 판단해서

법정동코드 자료를 https://www.code.go.kr/index.do 에서 내려받겠습니다

 

행정표준코드 관리시스템

 

www.code.go.kr

 

행정표준코드관리시스템에 접속하시면 검색창 오른쪽에

자주 이용하는 코드가 있는데요

그 중에 두번째가 법정동 코드입니다

 

법정동 코드 조회화면 우측 하단의 '법정동 코드 전체자료'를 다운받아 주세요

 

 

압축을 풀면 '법정동 코드 전체자료.txt' 파일이 만들어지는데

이 파일을 우리 프로젝트의 'api/' 폴더로 복사해주겠습니다

 

이 파일을 불러오기 용이하도록 파일명을 영어(dongCode.txt)로 바꿔준 뒤

dongCode.txt를 열어보면 인코딩 에러가 발생하는데

이 문제는 Pandas로 자료를 불러올 때 해결해보도록 하겠습니다

 

미리보기로 자료를 보면 Tab으로 자료들이 구분되어 있고

Column은 '법정동코드', '법정동명', '폐지여부'로 되어 있는 것을 확인할 수 있습니다

 

자료를 살펴보면 '폐지여부' 열은 '존재'나 '폐지'라고 표시되어 있네요

 

 

자 준비는 마쳤으니 Pandas를 설치해보겠습니다

 

 

이번에도 test.py에서 먼저 작업을 해보고 별도의 파일에 함수로 만든 뒤

app.py에서 불러와볼게요

 

아래코드는 pandas를 불러오고

raw라는 변수에 dongCode.txt를 담아

상위 5개의 데이터만 출력해보는 코드입니다

 

pandas.read_csv('파일위치', sep='\t', encoding='cp949')

위 코드를 보면 pandas 라이브러리에 csv 형식의 파일을 불러오는 read_csv라는 함수가 있고

그 함수는 1) 파일위치, 2) 데이터가 무엇으로 구분되어 있는지(Tab의 경우 '\t'),

3) 인코딩 형식(한글을 불러올 때 'cp949'로 해야 깨지지 않습니다)은 무엇인지

이렇게 3가지 입력값을 갖습니다

 

그래서 raw라는 변수에 이 데이터를 담고 상위 5개의 값을 가져오는 것은 

raw.head(5)

이 코드를 써줍니다

 

그럼 결과값은

 

잘 불러와지는 것을 볼 수 있습니다

 

여기서 우리는 현존하는 법정동의 코드 중 앞 5자리만을 가져와야하니

이 데이터셋을 다시 가공해야하는데요

 

아래 코드를 보겠습니다

 

한 줄 한 줄 살펴보겠습니다

 

먼저 폐지여부 열이 '존재'인 데이터만 남겨야겠죠?

그것이 바로 아래 코드 입니다

realdata = raw[raw['폐지여부'] == '존재']

 

 

다음으로 법정동코드의 앞자리 5개만 남기는 것

strcode = realdata['법정동코드'].astype(str).apply(lambda x: x[:5])

이 코드는 .astype(str)을 통해 먼저 realdata['법정동코드']를 str 유형으로 바꿔준 뒤

.apply(lambda x: x[:5])첫글자부터 5번째 자리까지를 선택하는 내용입니다

 

lawd_cd = strcode[realdata['법정동명'] == '부산광역시 연제구'].values[0]

마지막으로 realdata의 '법정동명'이 '부산광역시 연제구'에 일치하는 것을 strcode로 받아 그 값을 받으면

리스트 형태로 반환하는데 리스트의 [0]번 째 값을 가져오면 우리가 얻으려는

5자리의 법정동코드가 되는 것입니다

 

실행해보면 아래와 같이 결과 값이 잘 나오는 것을 확인할 수 있습니다

 

이제 이것을 함수로 만들어서 새로운 파일로 만들겠습니다

함수로 받을 값은 '부산광역시 연제구' 부분이겠네요

변수명은 'locate_nm'으로 짓겠습니다

 

자칫 복잡할 뻔 했던 코드가 Pandas를 사용하니 단 4줄로 완성됐습니다

import pandas

def searchLawdCd(locate_nm):
    raw = pandas.read_csv('api/dongCode.txt', sep="\t", encoding="CP949")
    realdata = raw[raw['폐지여부'] == '존재']
    strcode = realdata['법정동코드'].astype(str).apply(lambda x: x[:5])
    lawd_cd = strcode[realdata['법정동명'] == locate_nm].values[0]

    return lawd_cd

 

 

자 이제 법정동을 입력하면 그 코드를 반환하는 기능을 구현했고

 

다음 포스팅에서는 브라우저 화면을 다시 꾸며보도록 하겠습니다

 

 

관련글 더보기

댓글 영역