Korea area code

한국행정구역 - 행정동과 법정동

행정동과 법정동 코드 파일 사용 방법

한국의 행정구역은 행정동과 법정동이 있다. 부동산 정보등에는 법정동 코드가 사용된다. 이 코드를 얻는 방법과 파이썬에서 불러오는 방법을 알아본다.

2017 FinanceData http://fb.com/financedata

행정동과 법정동

행정동

  • 행정 편의를 위해 언제든지 통폐합이 가능
  • 지역 여건 변화(도시 확장, 인구 이동 등)를 반영

법정동(法定洞)

  • 전통적인 지역구분, 거의 바뀌지 않는다
  • 재산권, 권리 행사, 호적, 주소 등 법률 행위 때 이용

행정동 코드 엑셀 파일

https://kssc.kostat.go.kr 통계청, 통계분류포털

"한국행정구역분류_2017.7.1.기준.xls" (18M)

이 파일을 다운로드하여 pandas로 읽을 수 있다.

In [1]:
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()
Out[1]:
대분류 시도 중분류 시군구 소분류 읍면동 영문 표기 한자 표기
0 11 서울특별시 nan NaN nan NaN Seoul 서울特別市
1 11 서울특별시 11010 종로구 nan NaN Jongno-gu 鍾路區
2 11 서울특별시 11010 종로구 1101053 사직동 Sajik-dong 社稷洞
3 11 서울특별시 11010 종로구 1101054 삼청동 Samcheong-dong 三淸洞
4 11 서울특별시 11010 종로구 1101055 부암동 Buam-dong 付岩洞
In [2]:
df.tail()
Out[2]:
대분류 시도 중분류 시군구 소분류 읍면동 영문 표기 한자 표기
3787 39 제주특별자치도 39020 서귀포시 3902058 서홍동 Seohong-dong 西烘洞
3788 39 제주특별자치도 39020 서귀포시 3902059 대륜동 Daeryun-dong 大倫洞
3789 39 제주특별자치도 39020 서귀포시 3902060 대천동 Daecheon-dong 大川洞
3790 39 제주특별자치도 39020 서귀포시 3902061 중문동 Jungmun-dong 中文洞
3791 39 제주특별자치도 39020 서귀포시 3902062 예래동 Yerae-dong 猊來洞

행정동 엑셀 파일 바로 요청하여 읽기

통계청의 통계지리정보시스템은 '행정구역 코드 검색 API'를 제공하고 있다

http://sgis.kostat.go.kr/OpenAPI2/subpage/openAPI2_10.jsp

행정구역 코드 검색을 위해 행정구역 코드를 엑셀 파일로 제공하며, 그 URL은 다음과 같다.

http://sgis.kostat.go.kr/OpenAPI2/upload/unitarea_code.xls

위 URL을 바로 읽어 사용할 수 도 있다

In [3]:
import pandas as pd

url = "http://sgis.kostat.go.kr/OpenAPI2/upload/unitarea_code.xls"
df = pd.read_excel(url, skiprows=1)
df.head()
Out[3]:
시도코드 시도명칭 시군구코드 시군구명칭 읍면동코드 읍면동명칭
0 11 서울특별시 11010 종로구 1101053 사직동
1 11 서울특별시 11010 종로구 1101054 삼청동
2 11 서울특별시 11010 종로구 1101055 부암동
3 11 서울특별시 11010 종로구 1101056 평창동
4 11 서울특별시 11010 종로구 1101057 무악동
In [4]:
df.tail()
Out[4]:
시도코드 시도명칭 시군구코드 시군구명칭 읍면동코드 읍면동명칭
3477 39 제주특별자치도 39020 서귀포시 3902058 서홍동
3478 39 제주특별자치도 39020 서귀포시 3902059 대륜동
3479 39 제주특별자치도 39020 서귀포시 3902060 대천동
3480 39 제주특별자치도 39020 서귀포시 3902061 중문동
3481 39 제주특별자치도 39020 서귀포시 3902062 예래동

법정동 코드

https://www.code.go.kr/ 행정표준코드 관리시스템

상단의 코드검색을 선택하고, 분류별 탭에서 공통>법정동을 선택

법정동 코드를 다운로드 할 수 있다.

"법정동코드 전체자료.zip" 라는 이름으로 다운로드 할 수 있으며, .txt 파일을 포함하고 있다.

이 .txt 파일을 다음 URL에 공유하였다.

https://goo.gl/tM6r3v

In [5]:
df_areacode = pd.read_csv('https://goo.gl/tM6r3v', sep='\t', dtype={'법정동코드':str})
df_areacode.head()
Out[5]:
법정동코드 법정동명 폐지여부
0 1100000000 서울특별시 존재
1 1111000000 서울특별시 종로구 존재
2 1111010100 서울특별시 종로구 청운동 존재
3 1111010200 서울특별시 종로구 신교동 존재
4 1111010300 서울특별시 종로구 궁정동 존재
In [6]:
len(df_areacode)
Out[6]:
45957

현재 사용하고 있지 않은 법정동코드는 삭제 한다. (폐지여부가 '존재'인 행만 남긴다)

In [7]:
df_areacode = df_areacode[df_areacode['폐지여부'] == '존재']
df_areacode.head()
Out[7]:
법정동코드 법정동명 폐지여부
0 1100000000 서울특별시 존재
1 1111000000 서울특별시 종로구 존재
2 1111010100 서울특별시 종로구 청운동 존재
3 1111010200 서울특별시 종로구 신교동 존재
4 1111010300 서울특별시 종로구 궁정동 존재
In [8]:
len(df_areacode)
Out[8]:
20544

'법정동코드' 컬럼이 숫자로만 되어있어 기본적으로 정수(int) 타입으로 읽힌다. 코드로 사용하기 위해 문자열(str)로 타입을 지정하였다.

In [9]:
df_areacode.tail()
Out[9]:
법정동코드 법정동명 폐지여부
45952 5013032022 제주특별자치도 서귀포시 표선면 하천리 존재
45953 5013032023 제주특별자치도 서귀포시 표선면 성읍리 존재
45954 5013032024 제주특별자치도 서귀포시 표선면 가시리 존재
45955 5013032025 제주특별자치도 서귀포시 표선면 세화리 존재
45956 5013032026 제주특별자치도 서귀포시 표선면 토산리 존재

단위는 "시/도", "시/군/구", "읍/면/동", "리" 각 2자리로 구성되어 있다. (총 8자리)

시/도만 추출하기

지역 구분이 총 4개 레벨("시/도", "시/군/구", "읍/면/동", "리")

이중에서 '시/도' 추출하고자 한다면, 총 8자리 숫자중 뒤쪽 6자리가 모두 '0'인 행(row)를 추출하는 방법을 사용할 수 있다.

In [10]:
# '\d{2}0{8}' : 임의정수 2개, 숫자 0이 8개
# 3611000000 : 세종특별자치시

df_province = df_areacode[ df_areacode['법정동코드'].str.contains('\d{2}0{8}|36110{6}')]
df_province
Out[10]:
법정동코드 법정동명 폐지여부
0 1100000000 서울특별시 존재
2615 2600000000 부산광역시 존재
2912 2700000000 대구광역시 존재
3244 2800000000 인천광역시 존재
3579 2900000000 광주광역시 존재
3825 3000000000 대전광역시 존재
4009 3100000000 울산광역시 존재
4241 3611000000 세종특별자치시 존재
4391 4100000000 경기도 존재
10867 4200000000 강원도 존재
13666 4300000000 충청북도 존재
16797 4400000000 충청남도 존재
22050 4500000000 전라북도 존재
25397 4600000000 전라남도 존재
30169 4700000000 경상북도 존재
39299 4800000000 경상남도 존재
45741 5000000000 제주특별자치도 존재

우리나라 시/도는 모두 17개 이다.

In [11]:
len(df_province)
Out[11]:
17

함수로 정리

In [12]:
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
In [13]:
get_areacode().head()
Out[13]:
법정동코드 법정동명
0 1100000000 서울특별시
1 1111000000 서울특별시 종로구
2 1111010100 서울특별시 종로구 청운동
3 1111010200 서울특별시 종로구 신교동
4 1111010300 서울특별시 종로구 궁정동
In [14]:
get_province()
Out[14]:
법정동코드 법정동명
0 1100000000 서울특별시
2615 2600000000 부산광역시
2912 2700000000 대구광역시
3244 2800000000 인천광역시
3579 2900000000 광주광역시
3825 3000000000 대전광역시
4009 3100000000 울산광역시
4241 3611000000 세종특별자치시
4391 4100000000 경기도
10867 4200000000 강원도
13666 4300000000 충청북도
16797 4400000000 충청남도
22050 4500000000 전라북도
25397 4600000000 전라남도
30169 4700000000 경상북도
39299 4800000000 경상남도
45741 5000000000 제주특별자치도

코드 조회

특정 "시/도"의 코드는 다음과 같이 얻을 수 있다

In [15]:
p = '제주특별자치도'

df_province = get_province()
df_province.loc[df_province['법정동명'] == p, '법정동코드'].values[0]
Out[15]:
'5000000000'

댓글