국토교통부 토지임야정보 데이터 조회하기
파이썬 PublicDataReader 라이브러리를 이용하면 공공데이터포털에서 제공하는 국토교통부 토지임야정보 데이터를 쉽게 조회할 수 있습니다.
PublicDataReader
PublicDataReader는 공공 데이터를 자동으로 조회할 수 있는 파이썬 라이브러리입니다. 이 라이브러리는 공공데이터포털과 국가통계포털(KOSIS)과 같이 Open API 서비스로 제공하는 공공 데이터를 쉽게 조회할 수 있도록 도와줍니다. 인증키가 필요한 공공 데이터는 인증키를 사용하여 조회할 수 있고, 인증키가 필요하지 않은 데이터는 별도의 인증 절차 없이 조회할 수 있습니다. PublicDataReader를 이용하면 일반적인 공공 데이터 조회 과정에서 필요한 API 명세 찾기, 요청 작성, 반환된 데이터 정리 과정을 자동으로 처리해줍니다. 또한, 웹에 공개된 데이터를 조회할 때도 데이터 수집과 가공 과정을 자동화해줍니다. 이를 통해 코드 작성이 간결해지고 공공 데이터 조회 작업이 편리해집니다.
국토교통부 토지임야정보 서비스
PublicDataReader를 통해 공공데이터포털에서 제공하는 Open API 서비스를 정상적으로 이용하려면 아래 서비스 신청 페이지 링크에 접속 후 서비스 이용 신청을 해야 합니다. 서비스 신청을 완료하면 Open API를 사용할 수 있는 서비스 키가 발급됩니다. 서비스 제공 기관에 따라 서비스 키 발급 후 약 1~2일이 지난 후 접근 권한이 부여될 수 있습니다. 충분한 시간이 지난 후에도 접근 권한이 부여되지 않는다면 서비스 제공처에 문의하는 것을 권장합니다.
PublicDataReader 설치하기
- 운영체제(OS)에 따라 아래 중 하나를 선택합니다.
- Windows: CMD(명령 프롬프트) 실행
- Mac: Terminal(터미널) 실행
- 아래 Shell 명령어를 입력 후 실행합니다.
pip install PublicDataReader --upgrade
오픈 API 서비스 키 입력하기
공공데이터포털에서 발급받은 서비스 키를 복사하여 다음과 같이 service_key
변수에 할당합니다. 오픈 API 서비스 키 발급 방법에 대해 궁금하신 분들은 구글에 ‘공공데이터포털 오픈 API 사용법‘을 검색하시면 여러 문서들을 참조할 수 있습니다.
service_key = "공공데이터포털에서 발급받은 서비스 키"
국토교통부 토지임야정보 조회 API 인스턴스 정의하기
PublicDataReader 라이브러리에서 LandForestLedger
라는 클래스를 가져와 api
라는 토지임야정보 조회 API 인스턴스를 생성합니다. 이 때, service_key
값을 인자로 입력합니다.
from PublicDataReader import LandForestLedger
api = LandForestLedger(service_key)
시군구코드와 법정동코드 조회하기
토지임야정보를 조회하려면 조회할 토지나 임야 필지가 속해 있는 시군구와 법정동 정보를 알아야 합니다. 예를 들어, 경기도 성남시 분당구 백현동에 있는 필지의 대장 정보를 조회한다고 가정하면, 분당구 백현동에 해당하는 시군구코드와 법정동코드 정보를 알아야 합니다. 아래 코드는 PublicDataReader 라이브러리를 사용하여 분당구 백현동과 일치하는 행을 찾는 작업을 수행합니다.
- 먼저 PublicDataReader 라이브러리를 가져와 pdr라는 별칭으로 사용 할 수 있도록 합니다.
- ‘sigungu_name = “분당구” bdong_name = “백현동” 이 부분에서 검색할 시군구와 읍면동을 변수에 저장합니다.
- code = pdr.code_bdong() code라는 변수에 pdr의 code_bdong() 함수를 실행하여 그 결과값을 저장합니다. 이 함수는 시군구와 읍면동에 해당하는 코드를 포함하는 데이터프레임을 반환합니다.
- code.loc[(code[‘시군구명’].str.contains(sigungu_name, na=False)) & (code[‘읍면동명’]==bdong_name)] 이 부분에서는 시군구명열에서 ‘분당구’를 포함하는 행과 읍면동명열에서 ‘백현동’인 행을 검색하는 검색식을 작성합니다.
조회 결과를 살펴보면 분당구에 해당하는 시군구코드는 41135이고, 백현동에 해당하는 법정동코드는 4113511000인 것을 알 수 있습니다. 법정동코드 10자리 중 처음 5자리는 시군구코드와 같고, 이후 5자리는 읍면동코드를 의미합니다. 주택인허가 조회 시 시군구코드와 법정동코드를 사용하는데, 이때 사용되는 법정동코드는 5자리 읍면동코드입니다. 즉, 주택인허가 조회 시 사용할 시군구코드는 41135이고, 법정동코드는 11000이 됩니다.
import PublicDataReader as pdr
sigungu_name = "분당구"
bdong_name = "백현동"
code = pdr.code_bdong()
code.loc[(code['시군구명'].str.contains(sigungu_name, na=False)) &
(code['읍면동명']==bdong_name)]
시도코드 | 시도명 | 시군구코드 | 시군구명 | 법정동코드 | 읍면동명 | 동리명 | 생성일자 | 말소일자 | |
---|---|---|---|---|---|---|---|---|---|
5162 | 41 | 경기도 | 41135 | 성남시 분당구 | 4113511000 | 백현동 | NaN | 19930115 | NaN |
토지임야목록 조회 서비스
입력 명세
항목명 | 설명 | 데이터 타입 | 샘플 데이터 | 항목구분 |
---|---|---|---|---|
pnu_code | PNU코드: 각 필지를 서로 구별하기 위하여 필지마다 붙이는 고유한 번호 | String | 540 | 선택 |
translate | 컬럼명 한글 표시 여부 (한글 표시: True, 영문 표시: False) ※ 기본값: True |
Boolean | True | 선택 |
verbose | 데이터 조회 진행 상황 메시지 출력 여부 (출력: True, 미출력: False) ※ 기본값: False |
Boolean | False | 선택 |
wait_time | API 추가 요청 시 대기 시간(초) (30초: 30) ※ 기본값: 30 |
Integer | 30 | 선택 |
출력 명세
항목명(국문) | 항목명(영문) | 항목설명 | 샘플데이터 |
---|---|---|---|
고유번호 | pnu | 각 필지를 서로 구별하기 위하여 필지마다 붙이는 고유한 번호 | 1.11101E+18 |
법정동명 | ldCodeNm | 토지가 소재한 소재지의 행정구역코드(법정동코드) 10자리 | 서울특별시 종로구 청운동 |
법정동코드 | ldCode | 토지가 소재한 소재지의 행정구역 명칭(법정동명) | 1111010100 |
지번 | mnnmSlno | 필지에 부여하여 지적공부에 등록한 번호 | 126-25 |
대장구분코드 | regstrSeCode | 토지가 위치한 토지의 대장 구분 (토지(임야)대장구분)코드 | 1 |
대장구분명 | regstrSeCodeNm | 코드 정보 | 토지대장 |
지목코드 | lndcgrCode | 토지의 주된 용도에 따라 토지의 종류를 구분한 지목코드 | 8 |
지목명 | lndcgrCodeNm | 코드 정보 | 대 |
면적(㎡) | lndpclAr | 지적공부에 등록한 필지의 수평면상 넓이(㎡) | 376.9 |
소유구분코드 | posesnSeCode | 국토를 토지 소유권 취득 주체에 따라 구분한 코드 | 6 |
소유구분명 | posesnSeCodeNm | 코드 정보 | 법인 |
소유(공유)인수(명) | cnrsPsnCo | 토지를 공동 소유하고있는 사람수(명) | 2 |
축척구분코드 | ladFrtlSc | 토지(임야)대장에 등록된 지적도(임야도)의 축척구분 코드 | 6 |
축척구분명 | ladFrtlScNm | 코드 정보 | 0.458333333 |
데이터기준일자 | lastUpdtDt | 데이터 작성 기준일자 | 2015-11-12 |
from PublicDataReader import LandForestLedger
service_key = "공공 데이터 포털에서 발급받은 서비스 키"
api = LandForestLedger(service_key)
df = api.get_data(
pnu_code="4113511000105420000",
)
df.head()
고유번호 | 법정동명 | 법정동코드 | 지번 | 대장구분코드 | 대장구분명 | 지목코드 | 지목명 | 면적(㎡) | 소유구분코드 | 소유구분명 | 소유(공유)인수(명) | 축척구분코드 | 축척구분명 | 데이터기준일자 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 4113511000105420000 | 경기도 성남시 분당구 백현동 | 4113511000 | 542-0 | 1 | 토지대장 | 08 | 대 | 65893.5 | 01 | 개인 | 0 | 00 | 수치 | 2022-06-07 |
(참고) 건축물대장에서 PNU코드 목록 조회
- 법정동코드 목록 확인
import PublicDataReader as pdr
code_bdong = pdr.code_bdong()
code_bdong.loc[
(code_bdong['시도명']=='서울특별시') &
(code_bdong['말소일자'].isna()) &
(code_bdong['시군구명']=='서초구')
]
시도코드 | 시도명 | 시군구코드 | 시군구명 | 법정동코드 | 읍면동명 | 동리명 | 생성일자 | 말소일자 | |
---|---|---|---|---|---|---|---|---|---|
975 | 11 | 서울특별시 | 11650 | 서초구 | 1165000000 | NaN | NaN | 19880423 | NaN |
977 | 11 | 서울특별시 | 11650 | 서초구 | 1165010100 | 방배동 | NaN | 19890427 | NaN |
978 | 11 | 서울특별시 | 11650 | 서초구 | 1165010200 | 양재동 | NaN | 19920701 | NaN |
979 | 11 | 서울특별시 | 11650 | 서초구 | 1165010300 | 우면동 | NaN | 19920701 | NaN |
980 | 11 | 서울특별시 | 11650 | 서초구 | 1165010400 | 원지동 | NaN | 19920701 | NaN |
982 | 11 | 서울특별시 | 11650 | 서초구 | 1165010600 | 잠원동 | NaN | 19880423 | NaN |
983 | 11 | 서울특별시 | 11650 | 서초구 | 1165010700 | 반포동 | NaN | 19880423 | NaN |
984 | 11 | 서울특별시 | 11650 | 서초구 | 1165010800 | 서초동 | NaN | 19880423 | NaN |
985 | 11 | 서울특별시 | 11650 | 서초구 | 1165010900 | 내곡동 | NaN | 19880423 | NaN |
986 | 11 | 서울특별시 | 11650 | 서초구 | 1165011000 | 염곡동 | NaN | 19880423 | NaN |
987 | 11 | 서울특별시 | 11650 | 서초구 | 1165011100 | 신원동 | NaN | 19880423 | NaN |
- 건축물대장 조회 후 PNU코드 생성
from PublicDataReader import BuildingLedger
bl = BuildingLedger(service_key)
buildings = bl.get_data("총괄표제부", sigungu_code="11650", bdong_code="10300")
transform_dict = {
"0": "1",
"1": "2",
"2": "3",
}
buildings['필지구분코드'] = buildings['대지구분코드'].replace(transform_dict)
buildings['PNU'] = buildings['시군구코드'] + buildings['법정동코드'] + buildings['필지구분코드'] + buildings['번'].str.zfill(4) + buildings['지'].str.zfill(4)
buildings['필지구분코드'].value_counts()
1 27
2 1
Name: 필지구분코드, dtype: int64
- 필지구분코드로 PNU코드 list_iterator 객체 생성
it = iter(list(buildings.loc[buildings['필지구분코드']=='2']['PNU']))
- 토지임야정보 조회
pnu_code = next(it)
print(pnu_code)
api.get_data(pnu_code=pnu_code)
1165010300200360000
고유번호 | 법정동명 | 법정동코드 | 지번 | 대장구분코드 | 대장구분명 | 지목코드 | 지목명 | 면적(㎡) | 소유구분코드 | 소유구분명 | 소유(공유)인수(명) | 축척구분코드 | 축척구분명 | 데이터기준일자 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1165010300200360000 | 서울특별시 서초구 우면동 | 1165010300 | 36-0 | 2 | 임야대장 | 05 | 임야 | 14777 | 02 | 국유지 | 0 | 30 | 1:3000 | 2022-06-07 |
댓글남기기