공공데이터를 가져올때,
api로 데이터를 가져오는 방법도 있지만,
csv나 json, xml 형태의 파일로 제공되는 방법도 있다.
지난 포스팅에서 공시지가의 경우 csv 형태이어서 다루기가 쉬웠지만,
이번 포스팅에서 건축물대장 총괄표제부의 경우 json 형태이다.
데이터는 세움터의 건축데이터 민간개방시스템에서 자치구 단위로 가져왔다.
라이브러리는 json, pandas, 그리고, json_normalize를 불러왔다.
import json
import pandas as pd
from pandas.io.json import json_normalize
json파일을 불러오는 방법은
with open("/gdrive/My Drive/Colab Notebooks/garo/yu_dj.json", encoding='CP949') as f:
d= json.load(f)
으로 하면 된다.
인코딩에러가 생길 경우, encoding='CP949'를 넣어주어야 한다.
이렇게 파일을 불러오면
{"Description":{"PMSNO_GB_CD_NM":"허가번호_구분_코드_명","HHLD_CNT":"세대_수(세대)","BYLOT_CNT":"외필지_수","OUDR_MECH_AREA":"옥외_기계식_면적(㎡)","STCNS_DAY":"착공_일","INDR_AUTO_UTCNT":"옥내_자주식_대수(대)","BC_RAT":"건폐율(%)","SIGUNGU_CD":"시군구_코드","MAIN_PURPS_CD_NM":"주_용도_코드_명","ENGR_GRADE":"에너지_효율등급","HO_CNT":"호_수(호)","VL_RAT_ESTM_TOTAREA":"용적률_산정_연면적(㎡)","OUDR_AUTO_AREA":"옥외_자주식_면적(㎡)","ENGR_EPI":"EPI_점수","NA_UGRND_CD":"새주소_지상지하_코드","NEW_PLAT_PLC":"도로명_대지_위치","MAIN_PURPS_CD":"주_용도_코드","GN_BLD_GRADE":"친환경_건축물_등급","ENGR_RAT":"에너지_절감율","PLAT_AREA":"대지_면적(㎡)","FMLY_CNT":"가구_수(가구)","REGSTR_GB_CD":"대장_구분_코드","ETC_PURPS":"기타_용도","NA_BJDONG_CD":"새주소_법정동_코드","SPLOT_NM":"특수지_명","NA_SUB_BUN":"새주소_부_번","LOT":"로트","OUDR_MECH_UTCNT":"옥외_기계식_대수(대)","PMS_DAY":"허가_일","BJDONG_CD":"법정동_코드","PLAT_GB_CD":"대지_구분_코드","PLAT_PLC":"대지_위치","NEW_OLD_REGSTR_GB_CD":"신_구_대장_구분_코드","PMSNO_KIK_CD":"허가번호_기관_코드","PMSNO_GB_CD":"허가번호_구분_코드","MAIN_BLD_CNT":"주_건축물_수","JI":"지","PMSNO_KIK_CD_NM":"허가번호_기관_코드_명","INDR_MECH_AREA":"옥내_기계식_면적(㎡)","TOT_PKNG_CNT":"총_주차_수","PMSNO_YEAR":"허가번호_년","TOTAREA":"연면적(㎡)","REGSTR_KIND_CD":"대장_종류_코드","INDR_AUTO_AREA":"옥내_자주식_면적(㎡)","NA_ROAD_CD":"새주소_도로_코드","REGSTR_KIND_CD_NM":"대장_종류_코드_명","INDR_MECH_UTCNT":"옥내_기계식_대수(대)","MGM_BLDRGST_PK":"관리_건축물대장_PK","ARCH_AREA":"건축_면적(㎡)","BUN":"번","REGSTR_GB_CD_NM":"대장_구분_코드_명","ATCH_BLD_CNT":"부속_건축물_수","GN_BLD_CERT":"친환경_건축물_인증점수","NA_MAIN_BUN":"새주소_본_번","BLD_NM":"건물_명","NEW_OLD_REGSTR_GB_CD_NM":"신_구_대장_구분_코드_명","OUDR_AUTO_UTCNT":"옥외_자주식_대수(대)","CRTN_DAY":"생성_일자","ITG_BLD_CERT":"지능형_건축물_인증점수","BLOCK":"블록","ITG_BLD_GRADE":"지능형_건축물_등급","USEAPR_DAY":"사용승인_일","ATCH_BLD_AREA":"부속_건축물_면적(㎡)","VL_RAT":"용적률(%)"},
"Data":[{"HHLD_CNT":0,"BYLOT_CNT":0,"OUDR_MECH_AREA":0,"INDR_AUTO_UTCNT":0,"BC_RAT":0,"SIGUNGU_CD":"30200","MAIN_PURPS_CD_NM":"동.식물관련시설","HO_CNT":0,"VL_RAT_ESTM_TOTAREA":107.58,"OUDR_AUTO_AREA":0,"ENGR_EPI":0,"NA_UGRND_CD":"0","NEW_PLAT_PLC":" ","MAIN_PURPS_CD":"21000","ENGR_RAT":0,"PLAT_AREA":0,"FMLY_CNT":1,"REGSTR_GB_CD":"1","ETC_PURPS":"동.식물관련시설","OUDR_MECH_UTCNT":0,"BJDONG_CD":"10100","PLAT_GB_CD":"0","PLAT_PLC":"대전광역시 유성구 원내동 103-4번지","NEW_OLD_REGSTR_GB_CD":"1","MAIN_BLD_CNT":2,"JI":"0004","INDR_MECH_AREA":0,"TOT_PKNG_CNT":0,"TOTAREA":107.58,"REGSTR_KIND_CD":"1","INDR_AUTO_AREA":0,"REGSTR_KIND_CD_NM":"총괄표제부","INDR_MECH_UTCNT":0,"MGM_BLDRGST_PK":"30200-459","ARCH_AREA":107.58,"BUN":"0103","REGSTR_GB_CD_NM":"일반","ATCH_BLD_CNT":0,"GN_BLD_CERT":0,"NEW_OLD_REGSTR_GB_CD_NM":"신대장","OUDR_AUTO_UTCNT":0,"CRTN_DAY":"20171118","ITG_BLD_CERT":0,"ATCH_BLD_AREA":0,"VL_RAT":0},{"HHLD_CNT":0,"BYLOT_CNT":0,"OUDR_MECH_AREA":0,"INDR_AUTO_UTCNT":0,"BC_RAT":0,"SIGUNGU_CD":"30200","HO_CNT":0,"VL_RAT_ESTM_TOTAREA":0,"OUDR_AUTO_AREA":0,"ENGR_EPI":0,"NA_UGRND_CD":"0","NEW_PLAT_PLC":" ","ENGR_RAT":0,"PLAT_AREA":0,"FMLY_CNT":0,"REGSTR_GB_CD":"1","OUDR_MECH_UTCNT":0,"BJDONG_CD":"10100","PLAT_GB_CD":"0","PLAT_PLC":"대전광역시 유성구 원내동 103번지","NEW_OLD_REGSTR_GB_CD":"1","MAIN_BLD_CNT":0,"JI":"0000","INDR_MECH_AREA":0,"TOT_PKNG_CNT":0,"TOTAREA":0,"REGSTR_KIND_CD":"1","INDR_AUTO_AREA":0,"REGSTR_KIND_CD_NM":"총괄표제부","INDR_MECH_UTCNT":0,"MGM_BLDRGST_PK":"30200-458","ARCH_AREA":0,"BUN":"0103","REGSTR_GB_CD_NM":"일반","ATCH_BLD_CNT":0,"GN_BLD_CERT":0,"NEW_OLD_REGSTR_GB_CD_NM":"신대장","OUDR_AUTO_UTCNT":0,"CRTN_DAY":"20171118","ITG_BLD_CERT":0,"ATCH_BLD_AREA":0,"VL_RAT":0}]}
스크롤의 압박이 있어서 2개의 데이터만 잘랐지만, 아무튼 이런 형식이다.
맨 앞에 Description이 딕셔너리 형태로 영문과 국문 칼럼명이 적혀있다.
그 다음 Data에 해당 데이터가 딕셔너리가 리스트로 묶여 있다.
데이터가 들어있는 부분을 json_normalize로 불러들이면 된다.
df = json_normalize(d,'Data')
처음에는 쓸때없어 보였던 Description부분은
df=df.rename(columns={
})
이 사이에 붙여 넣으면 영문 칼럼명을 국문 칼럼명으로 바꿀수 있다.
read_json이나 웹상에서 찾을수 있는 몇가지 방법을 시도했지만, 나에게 작동하는 코드는 이것이었다.
다른 좋은 방법이 있으면 댓글 부탁드립니다요.
'AI코딩' 카테고리의 다른 글
우리동네 재생정보 사용법 알아보기 #1 (0) | 2020.10.16 |
---|---|
예가 정규분포 그려보기 (0) | 2020.04.05 |
광역단체별 공시지가 파일을 자치구 별로 구분하여 파일 만들기 (1) | 2020.03.06 |
공공데이터포털 출력결과 국문 영문 필드명 교체하기 (0) | 2020.02.29 |
역대 로또 데이터 크롤링 feat. 따라하기 (1) | 2020.02.28 |