Python으로 미분양주택현황 데이터 조회하기

Python 라이브러리 PublicDataReader를 이용하면 최신 지역별 주민등록인구 데이터를 쉽게 가져올 수 있다. 해당 데이터는 국가통계포털(KOSIS) 웹 사이트에 접속해 직접 조회할 수도 있지만, KOSIS 공유서비스 Open API를 이용해서도 조회할 수 있다. PublicDataReader는 KOSIS 공유서비스 Open API의 데이터 조회 기능을 포함하고 있어, 이를 활용하면 원하는 데이터를 쉽게 찾고 조회할 수 있다. KOSIS 공유서비스 Open API 신청 방법과 PublicDataReader에서 제공하는 KOSIS 공유서비스 Open API의 모든 기능을 살펴보려면 Python으로 KOSIS 데이터 조회하기를 참고하면 된다. 여기서는 ‘미분양주택현황(시도/시/군/구)’ 데이터를 조회하는 방법을 다루기로 한다.


라이브러리 임포트하기

위에서 설치한 PublicDataReader를 임포트한 후 발급받은 KOSIS 공유서비스 Open API 사용자 인증키를 apiKey의 값으로 할당한다.

import PublicDataReader as pdr
print(pdr.__version__)

# KOSIS 공유서비스 Open API 사용자 인증키
apiKey = "사용자 인증키"
1.0.2


조회할 데이터 찾기

Kosis를 이용해 KOSIS 통합검색 기능을 사용할 수 있는 인스턴스인 kosis_search를 만든다. searchNm에는 조회할 데이터를 찾기 위한 키워드를 입력한다. get_data에 의해 반환된 데이터프레임에서 조회할 데이터를 찾아 기관코드ORG_ID통계표IDTBL_ID 값을 확인한다. ‘미분양주택현황(시도/시/군/구)’ 데이터의 기관코드101이고, 통계표IDDT_1YL202001E 이므로 이 값들을 데이터 조회 시 사용하기 위해 복사해둔다.

# KOSIS 공유서비스 Open API 인스턴스 생성
serviceName = "KOSIS통합검색"
kosis_search = pdr.Kosis(apiKey, serviceName)

# 파라미터
searchNm = "시군구 미분양"

# 데이터 조회
df = kosis_search.get_data(searchNm=searchNm)
df.head()
ORG_ID ORG_NM TBL_ID TBL_NM STAT_ID STAT_NM VW_CD MT_ATITLE FULL_PATH_ID CONTENTS STRT_PRD_DE END_PRD_DE ITEM03 REC_TBL_SE TBL_VIEW_URL LINK_URL STAT_DB_CNT QUERY
0 116 국토교통부 DT_MLTM_2082 시 군 구별 미분양현황 1998033 미분양주택현황보고 MT_ZTITLE 주거 > 미분양주택현황보고 I1 > I1_2 구분 시군구 총계 전국 서울 부산 대구 인천 광주 대전 울산 경기 강원 충북 충남 ... 2000 2022 자료 : 국토교통부 주택토지실 주택정책관 주택정책과 N https://kosis.kr/statisticsList/statisticsList... http://kosis.kr/statHtml/statHtml.do?orgId=116... 244 시군구 미분양
1 116 국토교통부 DT_MLTM_5328 공사완료후 미분양현황 1998033 미분양주택현황보고 MT_ZTITLE 주거 > 미분양주택현황보고 I1 > I1_2 구분 시군구 부문 규모 전국 서울 부산 대구 인천 광주 대전 울산 경기 세종 강원 ... 2007 2022 자료 : 국토교통부 주택토지실 주택정책관 주택정책과 N https://kosis.kr/statisticsList/statisticsList... http://kosis.kr/statHtml/statHtml.do?orgId=116... 244 시군구 미분양
2 101 국토교통부 DT_1YL202001E 미분양주택현황(시도/시/군/구) 1998033 미분양주택현황보고 MT_GTITLE01 주제별 > 주거와 교통 107 구분 시군구 총계 전국 서울 부산 대구 인천 광주 대전 울산 경기 강원 충북 충남 ... 2000 2022 ■ 자료제공처: 통계청 통계정책과 ■자료원출처: 국토교통부(미분양주택현황보고) ■자... N https://kosis.kr/statisticsList/statisticsList... http://kosis.kr/statHtml/statHtml.do?orgId=101... 244 시군구 미분양
3 408 한국부동산원 DT_408_2006_S0039 주택거래현황_년도별 세부항목 2007409 부동산거래현황 MT_ZTITLE 국토이용 > 부동산거래현황 > 주택거래현황 I2 > I2_2 > 408_31503_005 ... 합천군 (구)제주 (구)제주시 (구)서귀포시 (구)북제주군 (구)남제주군 제... 2006 2021 동호수 : 당월 거래량은 일반건축물과 집합건축물이 함께 거래된 수치이며, 일반건축물... N https://kosis.kr/statisticsList/statisticsList... http://kosis.kr/statHtml/statHtml.do?orgId=408... 244 시군구 미분양
4 408 한국부동산원 DT_408_2006_S0069 토지매매거래현황_년도별 세부항목 2007409 부동산거래현황 MT_ZTITLE 국토이용 > 부동산거래현황 > 토지매매거래현황 I2 > I2_2 > 315_31503_90 ... 녹지지역 개발제한구역 용도미지정 관리지역 농림지역 자연환경보전지역 지목 전 ... 2019 2021 N https://kosis.kr/statisticsList/statisticsList... http://kosis.kr/statHtml/statHtml.do?orgId=408... 244 시군구 미분양


데이터 수록 주기와 시점 확인

Kosis를 이용해 통계표 설명 기능을 사용할 수 있는 인스턴스인 kosis_desc를 만든다. 상세기능 detailServiceName의 값으로 ‘자료갱신일’을 입력하고, 위에서 복사해둔 기관코드 orgId와 통계표ID tblId의 값들을 get_data의 인자로 입력하여 데이터 수록 주기와 시점을 확인한다. 수록주기(PRD_SE) 별 최근 수록시점(PRD_DE) 값을 조회하면 수록주기는 월 기준이며, 2000년 12월 ~ 2022년 8월 데이터가 수록되어 있는 것을 알 수 있다.

# KOSIS OPEN API 인스턴스 생성
serviceName = "통계표설명"
kosis_desc = pdr.Kosis(apiKey, serviceName)

# 파라미터
detailServiceName = "자료갱신일"
orgId = "101"
tblId = "DT_1YL202001E"

# 데이터 조회
df = kosis_desc.get_data(orgId=orgId, tblId=tblId, detailServiceName=detailServiceName)
df.groupby(by=['PRD_SE']).agg({"PRD_DE": ["min", "max"]})
PRD_DE
min max
PRD_SE
200012 202208


데이터 항목 및 분류 확인하기

Kosis를 이용해 통계표 설명 기능을 사용할 수 있는 인스턴스인 kosis_desc를 만든다. 상세기능 detailServiceName의 값으로 ‘분류항목’을 입력하고, 이번에도 기관코드와 통계표ID를 get_data의 인자로 입력해 결과를 확인한다. OBJ_ID 는 분류ID로 이 값이 ‘ITEM’ 이면 항목을 뜻하고, ITM_ID 값을 통계자료 조회 시 itmId 값으로 입력한다. OBJ_ID 값이 ITEM 이 아니고, OBJ_ID_SN 값에 숫자가 입력되어 있는 경우 이는 분류를 뜻하고, OBJ_ID_SN 의 숫자 값이 분류 수준을 뜻한다. 예를 들어, OBJ_ID 값이 A이고, OBJ_ID_SN 값이 1이라면, ITM_ID 값을 통계자료 조회 시 objL1의 값으로 입력한다.

# 파라미터
detailServiceName = "분류항목"
orgId = "101"
tblId = "DT_1YL202001E"

# 데이터 조회
item = kosis_desc.get_data(orgId=orgId, tblId=tblId, detailServiceName=detailServiceName)

다음은 항목 리스트이다. ‘미분양현황’ 하나만 선택 가능하다. ITM_ID 값인 13103871087T1를 복사해둔다.

item.loc[item["OBJ_ID_SN"].isna()]
ITM_NM TBL_ID ITM_NM_ENG ITM_ID OBJ_NM OBJ_NM_ENG ORG_ID OBJ_ID OBJ_ID_SN
0 미분양현황 DT_1YL202001E Unsold Housing 13103871087T1 항목 Item code list 101 ITEM NaN

다음은 분류1 리스트이다. 분류1은 구분을 뜻하며 전국, 서울, 부산, 대구 등 여러 시도 단위 지역 기준들이 존재한다. 전체 선택할 것이므로 별도로 ITM_ID를 복사하지 않아도 된다.

item.loc[item["OBJ_ID_SN"]=="1"]
ITM_NM TBL_ID ITM_NM_ENG ITM_ID OBJ_NM OBJ_NM_ENG ORG_ID OBJ_ID OBJ_ID_SN
1 총계 DT_1YL202001E Total 13102871087A.0001 구분 SiGunGu 101 13101871087A 1
2 전국 DT_1YL202001E Whole Country 13102871087A.0002 구분 SiGunGu 101 13101871087A 1
3 서울 DT_1YL202001E Seoul 13102871087A.0003 구분 SiGunGu 101 13101871087A 1
4 부산 DT_1YL202001E Busan 13102871087A.0004 구분 SiGunGu 101 13101871087A 1
5 대구 DT_1YL202001E Daegu 13102871087A.0005 구분 SiGunGu 101 13101871087A 1
6 인천 DT_1YL202001E Incheon 13102871087A.0006 구분 SiGunGu 101 13101871087A 1
7 광주 DT_1YL202001E Gwangju 13102871087A.0007 구분 SiGunGu 101 13101871087A 1
8 대전 DT_1YL202001E Daejeon 13102871087A.0008 구분 SiGunGu 101 13101871087A 1
9 울산 DT_1YL202001E Ulsan 13102871087A.0009 구분 SiGunGu 101 13101871087A 1
10 세종 DT_1YL202001E Sejong 13102871087A.0019 구분 SiGunGu 101 13101871087A 1
11 경기 DT_1YL202001E Gyeonggi 13102871087A.0010 구분 SiGunGu 101 13101871087A 1
12 강원 DT_1YL202001E Gangwon-do 13102871087A.0011 구분 SiGunGu 101 13101871087A 1
13 충북 DT_1YL202001E Chungcheongbuk-do 13102871087A.0012 구분 SiGunGu 101 13101871087A 1
14 충남 DT_1YL202001E Chungcheongnam-do 13102871087A.0013 구분 SiGunGu 101 13101871087A 1
15 전북 DT_1YL202001E Jeollabuk-do 13102871087A.0014 구분 SiGunGu 101 13101871087A 1
16 전남 DT_1YL202001E Jeollanam-do 13102871087A.0015 구분 SiGunGu 101 13101871087A 1
17 경북 DT_1YL202001E Gyeongsangbuk-do 13102871087A.0016 구분 SiGunGu 101 13101871087A 1
18 경남 DT_1YL202001E Gyeongsangnam-do 13102871087A.0017 구분 SiGunGu 101 13101871087A 1
19 제주 DT_1YL202001E Jeju 13102871087A.0018 구분 SiGunGu 101 13101871087A 1

다음은 분류2 리스트이다. 분류2는 시군구를 뜻하며 종로구, 강남구 등 여러 시군구 단위 지역 기준들이 존재한다. 분류1에서와 마찬가지로 전체 선택하기로 한다. ITM_ID를 따로 복사하지 않아도 된다.

item.loc[item["OBJ_ID_SN"]=="2"]
ITM_NM TBL_ID ITM_NM_ENG ITM_ID OBJ_NM OBJ_NM_ENG ORG_ID OBJ_ID OBJ_ID_SN
20 총계 DT_1YL202001E NaN 13102871087B.0001 시군구 SiGunGu 101 13101871087B 2
21 DT_1YL202001E NaN 13102871087B.0002 시군구 SiGunGu 101 13101871087B 2
22 소계 DT_1YL202001E Sub Total 13102871087B.0003 시군구 SiGunGu 101 13101871087B 2
23 종로구 DT_1YL202001E Jongno-gu 13102871087B.0004 시군구 SiGunGu 101 13101871087B 2
24 강남구 DT_1YL202001E NaN 13102871087B.0005 시군구 SiGunGu 101 13101871087B 2
25 중구 DT_1YL202001E NaN 13102871087B.0006 시군구 SiGunGu 101 13101871087B 2
26 강동구 DT_1YL202001E NaN 13102871087B.0007 시군구 SiGunGu 101 13101871087B 2
27 용산구 DT_1YL202001E NaN 13102871087B.0008 시군구 SiGunGu 101 13101871087B 2
28 강북구 DT_1YL202001E Gangbuk-gu 13102871087B.0009 시군구 SiGunGu 101 13101871087B 2
29 성동구 DT_1YL202001E Seongdong-gu 13102871087B.0010 시군구 SiGunGu 101 13101871087B 2
30 강서구 DT_1YL202001E NaN 13102871087B.0011 시군구 SiGunGu 101 13101871087B 2
31 광진구 DT_1YL202001E NaN 13102871087B.0012 시군구 SiGunGu 101 13101871087B 2
32 동대문구 DT_1YL202001E Dongdaemun-gu 13102871087B.0013 시군구 SiGunGu 101 13101871087B 2
33 관악구 DT_1YL202001E Gwanak-gu 13102871087B.0014 시군구 SiGunGu 101 13101871087B 2
34 중랑구 DT_1YL202001E Jungnang-gu 13102871087B.0015 시군구 SiGunGu 101 13101871087B 2
35 성북구 DT_1YL202001E Seongbuk-gu 13102871087B.0016 시군구 SiGunGu 101 13101871087B 2
36 구로구 DT_1YL202001E Guro-gu 13102871087B.0017 시군구 SiGunGu 101 13101871087B 2
37 금천구 DT_1YL202001E Geumcheon-gu 13102871087B.0018 시군구 SiGunGu 101 13101871087B 2
38 노원구 DT_1YL202001E Nowon-gu 13102871087B.0019 시군구 SiGunGu 101 13101871087B 2
39 도봉구 DT_1YL202001E Dobong-gu 13102871087B.0020 시군구 SiGunGu 101 13101871087B 2
40 은평구 DT_1YL202001E Eunpyeong-gu 13102871087B.0021 시군구 SiGunGu 101 13101871087B 2
41 서대문구 DT_1YL202001E Seodaemun-gu 13102871087B.0022 시군구 SiGunGu 101 13101871087B 2
42 동작구 DT_1YL202001E Dongjak-gu 13102871087B.0023 시군구 SiGunGu 101 13101871087B 2
43 마포구 DT_1YL202001E Mapo-gu 13102871087B.0024 시군구 SiGunGu 101 13101871087B 2
44 양천구 DT_1YL202001E Yangcheon-gu 13102871087B.0025 시군구 SiGunGu 101 13101871087B 2
45 서초구 DT_1YL202001E Seocho-gu 13102871087B.0026 시군구 SiGunGu 101 13101871087B 2
46 영등포구 DT_1YL202001E Yeongdeungpo-gu 13102871087B.0027 시군구 SiGunGu 101 13101871087B 2
47 송파구 DT_1YL202001E Songpa-gu 13102871087B.0028 시군구 SiGunGu 101 13101871087B 2
48 서구 DT_1YL202001E Seo-gu 13102871087B.0029 시군구 SiGunGu 101 13101871087B 2
49 동구 DT_1YL202001E NaN 13102871087B.0030 시군구 SiGunGu 101 13101871087B 2
50 금정구 DT_1YL202001E NaN 13102871087B.0031 시군구 SiGunGu 101 13101871087B 2
51 영도구 DT_1YL202001E NaN 13102871087B.0032 시군구 SiGunGu 101 13101871087B 2
52 기장군 DT_1YL202001E NaN 13102871087B.0033 시군구 SiGunGu 101 13101871087B 2
53 남구 DT_1YL202001E Nam-gu 13102871087B.0034 시군구 SiGunGu 101 13101871087B 2
54 부산진구 DT_1YL202001E Busanjin-gu 13102871087B.0035 시군구 SiGunGu 101 13101871087B 2
55 동래구 DT_1YL202001E Dongnae-gu 13102871087B.0036 시군구 SiGunGu 101 13101871087B 2
56 북구 DT_1YL202001E Buk-gu 13102871087B.0037 시군구 SiGunGu 101 13101871087B 2
57 해운대구 DT_1YL202001E Haeundae-gu 13102871087B.0038 시군구 SiGunGu 101 13101871087B 2
58 사상구 DT_1YL202001E NaN 13102871087B.0039 시군구 SiGunGu 101 13101871087B 2
59 사하구 DT_1YL202001E NaN 13102871087B.0040 시군구 SiGunGu 101 13101871087B 2
60 연제구 DT_1YL202001E Yeonje-gu 13102871087B.0041 시군구 SiGunGu 101 13101871087B 2
61 수영구 DT_1YL202001E Suyeong-gu 13102871087B.0042 시군구 SiGunGu 101 13101871087B 2
62 수성구 DT_1YL202001E Suseong-gu 13102871087B.0043 시군구 SiGunGu 101 13101871087B 2
63 달서구 DT_1YL202001E Dalseo-gu 13102871087B.0044 시군구 SiGunGu 101 13101871087B 2
64 달성군 DT_1YL202001E Dalseong-gun 13102871087B.0045 시군구 SiGunGu 101 13101871087B 2
65 남동구 DT_1YL202001E Namdong-gu 13102871087B.0046 시군구 SiGunGu 101 13101871087B 2
66 연수구 DT_1YL202001E Yeonsu-gu 13102871087B.0047 시군구 SiGunGu 101 13101871087B 2
67 미추홀구 DT_1YL202001E Michuhol-gu 13102871087B.0048 시군구 SiGunGu 101 13101871087B 2
68 부평구 DT_1YL202001E Bupyeong-gu 13102871087B.0049 시군구 SiGunGu 101 13101871087B 2
69 계양구 DT_1YL202001E Gyeyang-gu 13102871087B.0050 시군구 SiGunGu 101 13101871087B 2
70 강화군 DT_1YL202001E Ganghwa-gun 13102871087B.0051 시군구 SiGunGu 101 13101871087B 2
71 옹진군 DT_1YL202001E Ongjin-gun 13102871087B.0052 시군구 SiGunGu 101 13101871087B 2
72 광산구 DT_1YL202001E Gwangsan-gu 13102871087B.0053 시군구 SiGunGu 101 13101871087B 2
73 유성구 DT_1YL202001E Yuseong-gu 13102871087B.0054 시군구 SiGunGu 101 13101871087B 2
74 대덕구 DT_1YL202001E Daedeok-gu 13102871087B.0055 시군구 SiGunGu 101 13101871087B 2
75 울주군 DT_1YL202001E Ulju-gun 13102871087B.0056 시군구 SiGunGu 101 13101871087B 2
76 수원시 DT_1YL202001E Suwon-si 13102871087B.0057 시군구 SiGunGu 101 13101871087B 2
77 세종시 DT_1YL202001E NaN 13102871087B.0058 시군구 SiGunGu 101 13101871087B 2
78 가평군 DT_1YL202001E Gapyeong-gun 13102871087B.0059 시군구 SiGunGu 101 13101871087B 2
79 성남시 DT_1YL202001E NaN 13102871087B.0060 시군구 SiGunGu 101 13101871087B 2
80 고양시 DT_1YL202001E NaN 13102871087B.0061 시군구 SiGunGu 101 13101871087B 2
81 의정부시 DT_1YL202001E NaN 13102871087B.0062 시군구 SiGunGu 101 13101871087B 2
82 과천시 DT_1YL202001E NaN 13102871087B.0063 시군구 SiGunGu 101 13101871087B 2
83 안양시 DT_1YL202001E NaN 13102871087B.0064 시군구 SiGunGu 101 13101871087B 2
84 광명시 DT_1YL202001E Gwangmyeong-si 13102871087B.0065 시군구 SiGunGu 101 13101871087B 2
85 부천시 DT_1YL202001E NaN 13102871087B.0066 시군구 SiGunGu 101 13101871087B 2
86 광주시 DT_1YL202001E NaN 13102871087B.0067 시군구 SiGunGu 101 13101871087B 2
87 구리시 DT_1YL202001E Guri-si 13102871087B.0068 시군구 SiGunGu 101 13101871087B 2
88 평택시 DT_1YL202001E NaN 13102871087B.0069 시군구 SiGunGu 101 13101871087B 2
89 동두천시 DT_1YL202001E NaN 13102871087B.0070 시군구 SiGunGu 101 13101871087B 2
90 군포시 DT_1YL202001E NaN 13102871087B.0071 시군구 SiGunGu 101 13101871087B 2
91 김포시 DT_1YL202001E NaN 13102871087B.0072 시군구 SiGunGu 101 13101871087B 2
92 안산시 DT_1YL202001E NaN 13102871087B.0073 시군구 SiGunGu 101 13101871087B 2
93 남양주시 DT_1YL202001E NaN 13102871087B.0074 시군구 SiGunGu 101 13101871087B 2
94 시흥시 DT_1YL202001E NaN 13102871087B.0075 시군구 SiGunGu 101 13101871087B 2
95 오산시 DT_1YL202001E NaN 13102871087B.0076 시군구 SiGunGu 101 13101871087B 2
96 안성시 DT_1YL202001E NaN 13102871087B.0077 시군구 SiGunGu 101 13101871087B 2
97 의왕시 DT_1YL202001E NaN 13102871087B.0078 시군구 SiGunGu 101 13101871087B 2
98 하남시 DT_1YL202001E NaN 13102871087B.0079 시군구 SiGunGu 101 13101871087B 2
99 양주시 DT_1YL202001E NaN 13102871087B.0080 시군구 SiGunGu 101 13101871087B 2
100 양평군 DT_1YL202001E NaN 13102871087B.0081 시군구 SiGunGu 101 13101871087B 2
101 용인시 DT_1YL202001E NaN 13102871087B.0082 시군구 SiGunGu 101 13101871087B 2
102 여주군 DT_1YL202001E Yeoju-gun 13102871087B.0083 시군구 SiGunGu 101 13101871087B 2
103 파주시 DT_1YL202001E NaN 13102871087B.0084 시군구 SiGunGu 101 13101871087B 2
104 이천시 DT_1YL202001E NaN 13102871087B.0085 시군구 SiGunGu 101 13101871087B 2
105 연천군 DT_1YL202001E NaN 13102871087B.0086 시군구 SiGunGu 101 13101871087B 2
106 여주시 DT_1YL202001E NaN 13102871087B.0087 시군구 SiGunGu 101 13101871087B 2
107 화성시 DT_1YL202001E NaN 13102871087B.0088 시군구 SiGunGu 101 13101871087B 2
108 포천시 DT_1YL202001E NaN 13102871087B.0089 시군구 SiGunGu 101 13101871087B 2
109 춘천시 DT_1YL202001E NaN 13102871087B.0090 시군구 SiGunGu 101 13101871087B 2
110 원주시 DT_1YL202001E NaN 13102871087B.0091 시군구 SiGunGu 101 13101871087B 2
111 강릉시 DT_1YL202001E NaN 13102871087B.0092 시군구 SiGunGu 101 13101871087B 2
112 동해시 DT_1YL202001E NaN 13102871087B.0093 시군구 SiGunGu 101 13101871087B 2
113 태백시 DT_1YL202001E NaN 13102871087B.0094 시군구 SiGunGu 101 13101871087B 2
114 속초시 DT_1YL202001E NaN 13102871087B.0095 시군구 SiGunGu 101 13101871087B 2
115 삼척시 DT_1YL202001E NaN 13102871087B.0096 시군구 SiGunGu 101 13101871087B 2
116 홍천군 DT_1YL202001E NaN 13102871087B.0097 시군구 SiGunGu 101 13101871087B 2
117 횡성군 DT_1YL202001E NaN 13102871087B.0098 시군구 SiGunGu 101 13101871087B 2
118 영월군 DT_1YL202001E NaN 13102871087B.0099 시군구 SiGunGu 101 13101871087B 2
119 평창군 DT_1YL202001E NaN 13102871087B.0100 시군구 SiGunGu 101 13101871087B 2
120 정선군 DT_1YL202001E NaN 13102871087B.0101 시군구 SiGunGu 101 13101871087B 2
121 철원군 DT_1YL202001E NaN 13102871087B.0102 시군구 SiGunGu 101 13101871087B 2
122 화천군 DT_1YL202001E NaN 13102871087B.0103 시군구 SiGunGu 101 13101871087B 2
123 양구군 DT_1YL202001E NaN 13102871087B.0104 시군구 SiGunGu 101 13101871087B 2
124 인제군 DT_1YL202001E NaN 13102871087B.0105 시군구 SiGunGu 101 13101871087B 2
125 고성군 DT_1YL202001E NaN 13102871087B.0106 시군구 SiGunGu 101 13101871087B 2
126 양양군 DT_1YL202001E NaN 13102871087B.0107 시군구 SiGunGu 101 13101871087B 2
127 청주시 DT_1YL202001E NaN 13102871087B.0108 시군구 SiGunGu 101 13101871087B 2
128 괴산군 DT_1YL202001E NaN 13102871087B.0109 시군구 SiGunGu 101 13101871087B 2
129 충주시 DT_1YL202001E NaN 13102871087B.0110 시군구 SiGunGu 101 13101871087B 2
130 단양군 DT_1YL202001E Danyang-gun 13102871087B.0111 시군구 SiGunGu 101 13101871087B 2
131 제천시 DT_1YL202001E NaN 13102871087B.0112 시군구 SiGunGu 101 13101871087B 2
132 보은군 DT_1YL202001E NaN 13102871087B.0113 시군구 SiGunGu 101 13101871087B 2
133 청원군 DT_1YL202001E NaN 13102871087B.0114 시군구 SiGunGu 101 13101871087B 2
134 옥천군 DT_1YL202001E NaN 13102871087B.0115 시군구 SiGunGu 101 13101871087B 2
135 영동군 DT_1YL202001E NaN 13102871087B.0116 시군구 SiGunGu 101 13101871087B 2
136 증평군 DT_1YL202001E NaN 13102871087B.0117 시군구 SiGunGu 101 13101871087B 2
137 음성군 DT_1YL202001E NaN 13102871087B.0118 시군구 SiGunGu 101 13101871087B 2
138 진천군 DT_1YL202001E NaN 13102871087B.0119 시군구 SiGunGu 101 13101871087B 2
139 천안시 DT_1YL202001E NaN 13102871087B.0120 시군구 SiGunGu 101 13101871087B 2
140 공주시 DT_1YL202001E NaN 13102871087B.0121 시군구 SiGunGu 101 13101871087B 2
141 보령시 DT_1YL202001E NaN 13102871087B.0122 시군구 SiGunGu 101 13101871087B 2
142 계룡시 DT_1YL202001E NaN 13102871087B.0123 시군구 SiGunGu 101 13101871087B 2
143 아산시 DT_1YL202001E NaN 13102871087B.0124 시군구 SiGunGu 101 13101871087B 2
144 금산군 DT_1YL202001E NaN 13102871087B.0125 시군구 SiGunGu 101 13101871087B 2
145 서산시 DT_1YL202001E NaN 13102871087B.0126 시군구 SiGunGu 101 13101871087B 2
146 논산시 DT_1YL202001E NaN 13102871087B.0127 시군구 SiGunGu 101 13101871087B 2
147 당진시 DT_1YL202001E NaN 13102871087B.0128 시군구 SiGunGu 101 13101871087B 2
148 부여군 DT_1YL202001E NaN 13102871087B.0129 시군구 SiGunGu 101 13101871087B 2
149 연기군 DT_1YL202001E NaN 13102871087B.0130 시군구 SiGunGu 101 13101871087B 2
150 서천군 DT_1YL202001E NaN 13102871087B.0131 시군구 SiGunGu 101 13101871087B 2
151 청양군 DT_1YL202001E NaN 13102871087B.0132 시군구 SiGunGu 101 13101871087B 2
152 홍성군 DT_1YL202001E NaN 13102871087B.0133 시군구 SiGunGu 101 13101871087B 2
153 예산군 DT_1YL202001E NaN 13102871087B.0134 시군구 SiGunGu 101 13101871087B 2
154 태안군 DT_1YL202001E NaN 13102871087B.0135 시군구 SiGunGu 101 13101871087B 2
155 당진군 DT_1YL202001E NaN 13102871087B.0136 시군구 SiGunGu 101 13101871087B 2
156 전주시 DT_1YL202001E Jeonju-si 13102871087B.0137 시군구 SiGunGu 101 13101871087B 2
157 조치원읍 DT_1YL202001E Jochiwon-eup 13102871087B.0138 시군구 SiGunGu 101 13101871087B 2
158 군산시 DT_1YL202001E Gunsan-si 13102871087B.0139 시군구 SiGunGu 101 13101871087B 2
159 익산시 DT_1YL202001E Iksan-si 13102871087B.0140 시군구 SiGunGu 101 13101871087B 2
160 정읍시 DT_1YL202001E Jeongeup-si 13102871087B.0141 시군구 SiGunGu 101 13101871087B 2
161 남원시 DT_1YL202001E Namwon-si 13102871087B.0142 시군구 SiGunGu 101 13101871087B 2
162 김제시 DT_1YL202001E Gimje-si 13102871087B.0143 시군구 SiGunGu 101 13101871087B 2
163 완주군 DT_1YL202001E Wanju-gun 13102871087B.0144 시군구 SiGunGu 101 13101871087B 2
164 진안군 DT_1YL202001E Jinan-gun 13102871087B.0145 시군구 SiGunGu 101 13101871087B 2
165 무주군 DT_1YL202001E Muju-gun 13102871087B.0146 시군구 SiGunGu 101 13101871087B 2
166 장수군 DT_1YL202001E Jangsu-gun 13102871087B.0147 시군구 SiGunGu 101 13101871087B 2
167 임실군 DT_1YL202001E Imsil-gun 13102871087B.0148 시군구 SiGunGu 101 13101871087B 2
168 순창군 DT_1YL202001E Sunchang-gun 13102871087B.0149 시군구 SiGunGu 101 13101871087B 2
169 고창군 DT_1YL202001E Gochang-gun 13102871087B.0150 시군구 SiGunGu 101 13101871087B 2
170 부안군 DT_1YL202001E Buan-gun 13102871087B.0151 시군구 SiGunGu 101 13101871087B 2
171 목포시 DT_1YL202001E Mokpo-si 13102871087B.0152 시군구 SiGunGu 101 13101871087B 2
172 여수시 DT_1YL202001E Yeosu-si 13102871087B.0153 시군구 SiGunGu 101 13101871087B 2
173 순천시 DT_1YL202001E Suncheon-si 13102871087B.0154 시군구 SiGunGu 101 13101871087B 2
174 나주시 DT_1YL202001E Naju-si 13102871087B.0155 시군구 SiGunGu 101 13101871087B 2
175 광양시 DT_1YL202001E Gwangyang-si 13102871087B.0156 시군구 SiGunGu 101 13101871087B 2
176 담양군 DT_1YL202001E Damyang-gun 13102871087B.0157 시군구 SiGunGu 101 13101871087B 2
177 곡성군 DT_1YL202001E Gokseong-gun 13102871087B.0158 시군구 SiGunGu 101 13101871087B 2
178 구례군 DT_1YL202001E Gurye-gun 13102871087B.0159 시군구 SiGunGu 101 13101871087B 2
179 고흥군 DT_1YL202001E Goheung-gun 13102871087B.0160 시군구 SiGunGu 101 13101871087B 2
180 보성군 DT_1YL202001E Boseong-gun 13102871087B.0161 시군구 SiGunGu 101 13101871087B 2
181 화순군 DT_1YL202001E Hwasun-gun 13102871087B.0162 시군구 SiGunGu 101 13101871087B 2
182 장흥군 DT_1YL202001E Jangheung-gun 13102871087B.0163 시군구 SiGunGu 101 13101871087B 2
183 강진군 DT_1YL202001E Gangjin-gun 13102871087B.0164 시군구 SiGunGu 101 13101871087B 2
184 해남군 DT_1YL202001E Haenam-gun 13102871087B.0165 시군구 SiGunGu 101 13101871087B 2
185 영암군 DT_1YL202001E Yeongam-gun 13102871087B.0166 시군구 SiGunGu 101 13101871087B 2
186 무안군 DT_1YL202001E Muan-gun 13102871087B.0167 시군구 SiGunGu 101 13101871087B 2
187 함평군 DT_1YL202001E Hampyeong-gun 13102871087B.0168 시군구 SiGunGu 101 13101871087B 2
188 영광군 DT_1YL202001E Yeonggwang-gun 13102871087B.0169 시군구 SiGunGu 101 13101871087B 2
189 장성군 DT_1YL202001E Jangseong-gun 13102871087B.0170 시군구 SiGunGu 101 13101871087B 2
190 완도군 DT_1YL202001E Wando-gun 13102871087B.0171 시군구 SiGunGu 101 13101871087B 2
191 진도군 DT_1YL202001E Jindo-gun 13102871087B.0172 시군구 SiGunGu 101 13101871087B 2
192 신안군 DT_1YL202001E Sinan-gun 13102871087B.0173 시군구 SiGunGu 101 13101871087B 2
193 포항시 DT_1YL202001E Pohang-si 13102871087B.0174 시군구 SiGunGu 101 13101871087B 2
194 경주시 DT_1YL202001E Gyeongju-si 13102871087B.0175 시군구 SiGunGu 101 13101871087B 2
195 김천시 DT_1YL202001E Gimcheon-si 13102871087B.0176 시군구 SiGunGu 101 13101871087B 2
196 안동시 DT_1YL202001E Andong-si 13102871087B.0177 시군구 SiGunGu 101 13101871087B 2
197 구미시 DT_1YL202001E Gumi-si 13102871087B.0178 시군구 SiGunGu 101 13101871087B 2
198 영주시 DT_1YL202001E Yeongju-si 13102871087B.0179 시군구 SiGunGu 101 13101871087B 2
199 영천시 DT_1YL202001E Yeongcheon-si 13102871087B.0180 시군구 SiGunGu 101 13101871087B 2
200 상주시 DT_1YL202001E Sangju-si 13102871087B.0181 시군구 SiGunGu 101 13101871087B 2
201 문경시 DT_1YL202001E Mungyeong-si 13102871087B.0182 시군구 SiGunGu 101 13101871087B 2
202 경산시 DT_1YL202001E Gyeongsan-si 13102871087B.0183 시군구 SiGunGu 101 13101871087B 2
203 군위군 DT_1YL202001E Gunwi-gun 13102871087B.0184 시군구 SiGunGu 101 13101871087B 2
204 의성군 DT_1YL202001E Uiseong-gun 13102871087B.0185 시군구 SiGunGu 101 13101871087B 2
205 청송군 DT_1YL202001E Cheongsong-gun 13102871087B.0186 시군구 SiGunGu 101 13101871087B 2
206 영양군 DT_1YL202001E Yeongyang-gun 13102871087B.0187 시군구 SiGunGu 101 13101871087B 2
207 영덕군 DT_1YL202001E Yeongdeok-gun 13102871087B.0188 시군구 SiGunGu 101 13101871087B 2
208 청도군 DT_1YL202001E Cheongdo-gun 13102871087B.0189 시군구 SiGunGu 101 13101871087B 2
209 고령군 DT_1YL202001E Goryeong-gun 13102871087B.0190 시군구 SiGunGu 101 13101871087B 2
210 성주군 DT_1YL202001E Seongju-gun 13102871087B.0191 시군구 SiGunGu 101 13101871087B 2
211 칠곡군 DT_1YL202001E Chilgok-gun 13102871087B.0192 시군구 SiGunGu 101 13101871087B 2
212 예천군 DT_1YL202001E Yecheon-gun 13102871087B.0193 시군구 SiGunGu 101 13101871087B 2
213 봉화군 DT_1YL202001E Bonghwa-gun 13102871087B.0194 시군구 SiGunGu 101 13101871087B 2
214 울진군 DT_1YL202001E Uljin-gun 13102871087B.0195 시군구 SiGunGu 101 13101871087B 2
215 울릉군 DT_1YL202001E Ulleung-gun 13102871087B.0196 시군구 SiGunGu 101 13101871087B 2
216 창원시 DT_1YL202001E Changwon-si 13102871087B.0197 시군구 SiGunGu 101 13101871087B 2
217 진주시 DT_1YL202001E Jinju-si 13102871087B.0198 시군구 SiGunGu 101 13101871087B 2
218 마산시 DT_1YL202001E Masan-si 13102871087B.0199 시군구 SiGunGu 101 13101871087B 2
219 통영시 DT_1YL202001E Tongyeong-si 13102871087B.0200 시군구 SiGunGu 101 13101871087B 2
220 사천시 DT_1YL202001E Sacheon-si 13102871087B.0201 시군구 SiGunGu 101 13101871087B 2
221 진해시 DT_1YL202001E Jinhae-si 13102871087B.0202 시군구 SiGunGu 101 13101871087B 2
222 김해시 DT_1YL202001E Gimhae-si 13102871087B.0203 시군구 SiGunGu 101 13101871087B 2
223 밀양시 DT_1YL202001E Miryang-si 13102871087B.0204 시군구 SiGunGu 101 13101871087B 2
224 거제시 DT_1YL202001E Geoje-si 13102871087B.0205 시군구 SiGunGu 101 13101871087B 2
225 양산시 DT_1YL202001E Yangsan-si 13102871087B.0206 시군구 SiGunGu 101 13101871087B 2
226 의령군 DT_1YL202001E Uiryeong-gun 13102871087B.0207 시군구 SiGunGu 101 13101871087B 2
227 함안군 DT_1YL202001E Haman-gun 13102871087B.0208 시군구 SiGunGu 101 13101871087B 2
228 창녕군 DT_1YL202001E Changnyeong-gun 13102871087B.0209 시군구 SiGunGu 101 13101871087B 2
229 남해군 DT_1YL202001E Namhae-gun 13102871087B.0210 시군구 SiGunGu 101 13101871087B 2
230 하동군 DT_1YL202001E Hadong-gun 13102871087B.0211 시군구 SiGunGu 101 13101871087B 2
231 산청군 DT_1YL202001E Sancheong-gun 13102871087B.0212 시군구 SiGunGu 101 13101871087B 2
232 함양군 DT_1YL202001E Hamyang-gun 13102871087B.0213 시군구 SiGunGu 101 13101871087B 2
233 거창군 DT_1YL202001E Geochang-gun 13102871087B.0214 시군구 SiGunGu 101 13101871087B 2
234 합천군 DT_1YL202001E Hapcheon-gun 13102871087B.0215 시군구 SiGunGu 101 13101871087B 2
235 제주시 DT_1YL202001E Jeju-si 13102871087B.0216 시군구 SiGunGu 101 13101871087B 2
236 서귀포시 DT_1YL202001E Seogwipo-si 13102871087B.0217 시군구 SiGunGu 101 13101871087B 2


통계표 조회하기

Kosis를 이용해 통계자료 기능을 사용할 수 있는 인스턴스인 kosis_data를 만든다. 미분양현황_종합 통계표를 조회를 위해 위에서 복사해둔 값들을 순서대로 get_data의 인자로 입력해준다. itmId의 값으로 선택 항목을 직접 나열해도 되지만 전체 선택 시 ‘ALL’이라는 값을 입력하면 된다.

# KOSIS OPEN API 인스턴스 생성
serviceName = "통계자료"
kosis_data = pdr.Kosis(apiKey, serviceName)

# 파라미터
orgId = "101"              # 기관코드
tblId = "DT_1YL202001E"    # 통계표ID
objL1 = "ALL"              # 분류1 - 전체 선택
objL2 = "ALL"              # 분류2 - 전체 선택
itmId = "ALL"              # 항목 - 전체 선택
prdSe = "M"                # 수록주기 - `1개월 주기` 선택
startPrdDe = "202201"      # 시작수록시점 (YYYYMM)
endPrdDe = "202208"        # 종료수록시점 (YYYYMM)

# 데이터 조회
df = kosis_data.get_data(orgId=orgId, tblId=tblId, objL1=objL1, objL2=objL2, itmId=itmId, prdSe=prdSe, startPrdDe=startPrdDe, endPrdDe=endPrdDe)
df.head()
TBL_NM PRD_DE TBL_ID ITM_NM ITM_NM_ENG ITM_ID UNIT_NM ORG_ID UNIT_NM_ENG C1_OBJ_NM C1_OBJ_NM_ENG C2_OBJ_NM C2_OBJ_NM_ENG DT PRD_SE C2 C1 C1_NM C2_NM C1_NM_ENG C2_NM_ENG
0 미분양주택현황(시도/시/군/구) 202201 DT_1YL202001E 미분양현황 Unsold Housing 13103871087T1 101 House 구분 SiGunGu 시군구 SiGunGu 47 M 13102871087B.0002 13102871087A.0003 서울 Seoul NaN
1 미분양주택현황(시도/시/군/구) 202202 DT_1YL202001E 미분양현황 Unsold Housing 13103871087T1 101 House 구분 SiGunGu 시군구 SiGunGu 47 M 13102871087B.0002 13102871087A.0003 서울 Seoul NaN
2 미분양주택현황(시도/시/군/구) 202203 DT_1YL202001E 미분양현황 Unsold Housing 13103871087T1 101 House 구분 SiGunGu 시군구 SiGunGu 180 M 13102871087B.0002 13102871087A.0003 서울 Seoul NaN
3 미분양주택현황(시도/시/군/구) 202204 DT_1YL202001E 미분양현황 Unsold Housing 13103871087T1 101 House 구분 SiGunGu 시군구 SiGunGu 360 M 13102871087B.0002 13102871087A.0003 서울 Seoul NaN
4 미분양주택현황(시도/시/군/구) 202205 DT_1YL202001E 미분양현황 Unsold Housing 13103871087T1 101 House 구분 SiGunGu 시군구 SiGunGu 688 M 13102871087B.0002 13102871087A.0003 서울 Seoul NaN


피벗 테이블 만들기

통계표 조회 결과를 아래와 같이 원하는 형태로 재구조화하여 분석 목적에 맞게 사용하면 된다.

target = df.loc[df['C2_NM']=='계']
target['PRD_DE'] = pd.to_datetime(target['PRD_DE'], format="%Y%m")
target['DT'] = pd.to_numeric(target['DT'])
pv = target.pivot(index=["PRD_DE"], columns=["C1_NM","C2_NM"], values="DT")
newCols = list(map(lambda x: x[0]+"_"+x[1], pv.columns))
pv.columns = newCols
pv = pv.reset_index()
pv['PRD_DE'] = pd.to_datetime(pv['PRD_DE'], format="%Y%m")
for col in pv.columns[1:]:
    pv[col] = pd.to_numeric(pv[col])
pv = pv.set_index("PRD_DE")
pv
C:\Users\wooil\AppData\Local\Temp\ipykernel_3856\2902302586.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  target['PRD_DE'] = pd.to_datetime(target['PRD_DE'], format="%Y%m")
C:\Users\wooil\AppData\Local\Temp\ipykernel_3856\2902302586.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  target['DT'] = pd.to_numeric(target['DT'])
서울_계 부산_계 대구_계 인천_계 광주_계 대전_계 울산_계 경기_계 강원_계 충북_계 충남_계 전북_계 전남_계 경북_계 경남_계 제주_계 세종_계
PRD_DE
2022-01-01 47 921 3678 423 6 423 395 855 1566 292 1383 178 2219 5227 3124 969 21
2022-02-01 47 1028 4561 409 5 477 395 1862 1498 879 1587 131 2250 6552 2661 897 15
2022-03-01 180 1013 6572 532 2 469 395 2209 1363 1056 1532 116 2410 6519 2702 891 13
2022-04-01 360 1003 6827 464 2 463 361 2146 1308 1057 1502 117 2371 5938 2286 962 13
2022-05-01 688 1220 6816 426 46 460 641 2449 1242 1088 1386 107 2327 5369 1979 1119 12
2022-06-01 719 1267 6718 418 198 523 627 3319 1303 862 1326 103 2585 4823 2044 1063 12
2022-07-01 592 1503 7523 544 198 509 788 3393 1239 885 1406 178 2534 6517 2238 1227 10
2022-08-01 610 1799 8301 1222 198 668 775 3180 1348 619 1386 157 2503 6693 2042 1213 8


시각화

import plotly.express as px

fig = px.line(target, 
              x="PRD_DE", 
              y="DT", 
              color='C1_NM_ENG')
fig


참고

댓글남기기