프로그래밍 언어/Python

법정동 데이터 수집하기

· 코딩마이데이

datakart 패키지의 Datagokr 클래스를 사용하여 법정동 데이터를 수집하는 함수를 만들어 봅시다. 이 함수는 법정동 데이터를 수집한 후 리스트 형식으로 반환합니다. 리스트에는 주소 코드가 음, 면, 동, 리 단위까지 포함되어 있으므로, 데이터를 정제해서 시, 군, 구 단위만 남기겠습니다.

법정동 데이터 리스트를 데이터프레임으로 반환한 다음 읍, 면, 동, 리 단위 주소가 행을 추출하고, 시도, 시군구, 지역 주소명 열로 정리해 보겠습니다. 이렇게 정제한 데이터프레임은 CSV 파일로 저장할 것입니다.

 

비주얼 스튜디오 코드에서 새 파일을 생성하고, 파일명은 'step_2_1.py'로 저장합니다. 그리고 나서 다음 코드를 입력한 후, 대화형 창에서 실행하면 'output' 폴더에 서울특별시 지역에 속한 법정동 데이터가 포함된 'step_2_1.csv' 파일이 생성됩니다.

 

ch_11/step_2_1.py

from pathlib import Path
import pandas as pd
from datakart import Datagokr
from step_1_1 import OUT_DIR  # 이전에 작성한 모듈을 불러옵니다.

OUT_2_1 = OUT_DIR / f"{Path(__file__).stem}.csv"

def sido_sgg_to_csv(region: str | None = None): # 08
    DATAGO_KEY = "공공데이터포털 API 키"  # 공공데이터포털 API 키 입력
    datago = Datagokr(DATAGO_KEY)  # Datagokr 객체 생성
    resp = datago.lawd_code(region)  # 법정동 데이터 수집
    df_raw = pd.DataFrame(resp)  # 데이터프레임 생성
    df_raw["sido_sgg"] = df_raw["sido_cd"] + df_raw["sgg_cd"]  # '시도_시군구' 열 생성 # 13

    f_no_sgg = df_raw["sgg_cd"] == "000"  # 시군구 코드값이 '000'인 경우 # 15
    f_no_umd = df_raw["umd_cd"] == "000"  # 읍면동 코드값이 '000'인 경우 
    f_no_ri = df_raw["ri_cd"] == "00"  # 리 코드값이 '00'인 경우
    f_only_sgg = (~f_no_sgg) & (f_no_umd) & (f_no_ri)  # 시군구 코드값만 있는 경우
    df_sliced = df_raw.loc[f_only_sgg]  # 데이터프레임에서 시군구 코드값 추출 # 19

    df_filter = df_sliced.filter(["sido_sgg", "locatadd_nm"])  # 사용할 열 필터링 # 21
    df_sort = df_filter.sort_values("locatadd_nm")  # 지역주소명으로 오름차순 정렬 # 22
    df_result = df_sort.reset_index(drop=True)  # 데이터프레임 인덱스 재생성 # 23
    df_result.to_csv(OUT_2_1, index=False)  # CSV로 저장

if __name__ == "__main__":
    region = "서울특별시"
    sido_sgg_to_csv(region)  # '시도_시군구' 단위 지역주소명을 CSV로 저장

 

실행결과

sido_sgg, locatadd_snum

11680, 서울특별시, 강남구

11740, 서울특별시 강동구

11305, 서울특별시 강북구

... 생략 ...

 

08 매개변수에 저장된 지역의 '시도_시군구' 단위 지역주소명을 CSV로 저장하는 함수 sido_sgg_to_csv()를 정의합니다.

 

13 sido_cd 열과 sgg_cd 열을 결합하여 sudo_sgg 열로 만듭니다.

 

15~19 시군구 단위 데이터만 남기고, 읍면동 및 리 단위 데이터는 삭제합니다.

 

21 함수 filter()를 사용하여 sido_sgg와 locatadd_nm 열을 추출합니다.

 

22 함수 sort_values()를 사용하여 지역 주소명을 기준으로 오름차순 정렬합니다.

 

23 함수 reset_index()을 사용하여 데이터프레임의 인덱스를 0부터 다시 생성합니다.