Korea area code
한국행정구역 - 행정동과 법정동¶
행정동과 법정동 코드 파일 사용 방법
한국의 행정구역은 행정동과 법정동이 있다. 부동산 정보등에는 법정동 코드가 사용된다. 이 코드를 얻는 방법과 파이썬에서 불러오는 방법을 알아본다.
2017 FinanceData http://fb.com/financedata¶
행정동과 법정동¶
행정동
- 행정 편의를 위해 언제든지 통폐합이 가능
- 지역 여건 변화(도시 확장, 인구 이동 등)를 반영
법정동(法定洞)
- 전통적인 지역구분, 거의 바뀌지 않는다
- 재산권, 권리 행사, 호적, 주소 등 법률 행위 때 이용
행정동 코드 엑셀 파일¶
https://kssc.kostat.go.kr 통계청, 통계분류포털
"한국행정구역분류_2017.7.1.기준.xls" (18M)
이 파일을 다운로드하여 pandas로 읽을 수 있다.
import pandas as pd
fname = '한국행정구역분류_2017.7.1.기준.xls'
df = pd.read_excel(fname, skiprows=2, dtype={'대분류':str, '중분류':str, '소분류':str})
df.drop('Unnamed: 0', axis=1, inplace=True)
df.head()
df.tail()
행정동 엑셀 파일 바로 요청하여 읽기¶
통계청의 통계지리정보시스템은 '행정구역 코드 검색 API'를 제공하고 있다
http://sgis.kostat.go.kr/OpenAPI2/subpage/openAPI2_10.jsp
행정구역 코드 검색을 위해 행정구역 코드를 엑셀 파일로 제공하며, 그 URL은 다음과 같다.
http://sgis.kostat.go.kr/OpenAPI2/upload/unitarea_code.xls
위 URL을 바로 읽어 사용할 수 도 있다
import pandas as pd
url = "http://sgis.kostat.go.kr/OpenAPI2/upload/unitarea_code.xls"
df = pd.read_excel(url, skiprows=1)
df.head()
df.tail()
법정동 코드를 다운로드 할 수 있다.
"법정동코드 전체자료.zip" 라는 이름으로 다운로드 할 수 있으며, .txt 파일을 포함하고 있다.
이 .txt 파일을 다음 URL에 공유하였다.
df_areacode = pd.read_csv('https://goo.gl/tM6r3v', sep='\t', dtype={'법정동코드':str})
df_areacode.head()
len(df_areacode)
현재 사용하고 있지 않은 법정동코드는 삭제 한다. (폐지여부가 '존재'인 행만 남긴다)
df_areacode = df_areacode[df_areacode['폐지여부'] == '존재']
df_areacode.head()
len(df_areacode)
'법정동코드' 컬럼이 숫자로만 되어있어 기본적으로 정수(int) 타입으로 읽힌다. 코드로 사용하기 위해 문자열(str)로 타입을 지정하였다.
df_areacode.tail()
단위는 "시/도", "시/군/구", "읍/면/동", "리" 각 2자리로 구성되어 있다. (총 8자리)
시/도만 추출하기¶
지역 구분이 총 4개 레벨("시/도", "시/군/구", "읍/면/동", "리")
이중에서 '시/도' 추출하고자 한다면, 총 8자리 숫자중 뒤쪽 6자리가 모두 '0'인 행(row)를 추출하는 방법을 사용할 수 있다.
# '\d{2}0{8}' : 임의정수 2개, 숫자 0이 8개
# 3611000000 : 세종특별자치시
df_province = df_areacode[ df_areacode['법정동코드'].str.contains('\d{2}0{8}|36110{6}')]
df_province
우리나라 시/도는 모두 17개 이다.
len(df_province)
함수로 정리¶
import pandas as pd
def get_areacode():
df_areacode = pd.read_csv('https://goo.gl/tM6r3v', sep='\t', dtype={'법정동코드':str, '법정동명':str})
df_areacode = df_areacode[df_areacode['폐지여부'] == '존재']
df_areacode = df_areacode[['법정동코드', '법정동명']]
return df_areacode
def get_province():
df_areacode = get_areacode()
df_province = df_areacode[ df_areacode['법정동코드'].str.contains('\d{2}0{8}|36110{6}')]
return df_province
get_areacode().head()
get_province()
코드 조회¶
특정 "시/도"의 코드는 다음과 같이 얻을 수 있다
p = '제주특별자치도'
df_province = get_province()
df_province.loc[df_province['법정동명'] == p, '법정동코드'].values[0]
댓글
Comments powered by Disqus