공공데이터포털의 특징은 자료를 활용을 요약하자면
1. 회원 가입 후 '사용자 인증키'를 생성해야한다.
2. 이후 원하는 데이터를 '활용 신청'을 해서 승인이 떨어지고 활용 권한을 획득해야한다. (실제 활용 가능 시간까지 약 1일 정도 소요) (파일데이터는 활용 신청 없이 그냥 다운로드 하여 사용 가능)
3. 제공되는 데이터는 파일데이터, JSON, XML 등이 있다.
1. 통계자료 활용 신청 및 URL 생성
2. Pandas로 불러오기
방법 1. pd.json_normalize()
jsonUrl = 'http://kosis.kr/openapi/statisticsData.do?method=getList&apiKey=OGM2N2RlYTNmMjQ2MGY3NWEyYzg5MGU2NmJjYTI4Zjg=&format=json&jsonVD=Y&userStatsId=ox8eb1f9/101/DT_1B040A3/2/1/20200505230018&prdSe=M&newEstPrdCnt=1'
from pandas.io.json import json_normalize
import requests
# 정상 여부 확인
response = requests.get(jsonUrl)
response
# 결과 : <Response [200]>
# JSON 데이터 획득
json = response.json()
json
# 결과 :
[{'TBL_NM': '행정구역(시군구)별 성별 인구수',
# 'PRD_DE': '202004',
# 'TBL_ID': 'DT_1B040A3',
# 'ITM_NM': '총인구수',
# 'ITM_NM_ENG': 'Koreans (Total)',
# 'ITM_ID': 'T20',
# 'UNIT_NM': '명',
# 'ORG_ID': '101',
# 'UNIT_NM_ENG': 'Person',
# 'C1_OBJ_NM': '행정구역(시군구)별',
# 'C1_OBJ_NM_ENG': 'By Administrative District',
# 'DT': '51842524',
# 'PRD_SE': 'M',
# 'C1': '00',
# 'C1_NM': '전국',
# 'C1_NM_ENG': 'Whole country'},
# {'TBL_NM': '행정구역(시군구)별 성별 인구수',
# 'PRD_DE': '202004',
# 'TBL_ID': 'DT_1B040A3',
# 'ITM_NM': '총인구수',
# 'ITM_NM_ENG': 'Koreans (Total)',
# 'ITM_ID': 'T20',
# 'UNIT_NM': '명',
# 'ORG_ID': '101',
# 'UNIT_NM_ENG': 'Person',
# 'C1_OBJ_NM': '행정구역(시군구)별',
# 'C1_OBJ_NM_ENG': 'By Administrative District',
# 'DT': '9726787',
# 'PRD_SE': 'M',
# 'C1': '11',
# 'C1_NM': '서울특별시',
# 'C1_NM_ENG': 'Seoul'},
# ...
# {'TBL_NM': '행정구역(시군구)별 성별 인구수',
# 'PRD_DE': '202004',
# 'TBL_ID': 'DT_1B040A3',
# 'ITM_NM': '총인구수',
# 'ITM_NM_ENG': 'Koreans (Total)',
# 'ITM_ID': 'T20',
# 'UNIT_NM': '명',
# 'ORG_ID': '101',
# 'UNIT_NM_ENG': 'Person',
# 'C1_OBJ_NM': '행정구역(시군구)별',
# 'C1_OBJ_NM_ENG': 'By Administrative District',
# 'DT': '670595',
# 'PRD_SE': 'M',
# 'C1': '50',
# 'C1_NM': '제주특별자치도',
# 'C1_NM_ENG': 'Jeju-do'}]
JSON 데이터를 잘 불러오는 것이 확인되었으니 데이터프레임으로 저장하자.
# 데이터프레임으로 저장
population = pd.json_normalize(json)
population.head()
방법 2. pd.read_json()
jsonUrl = 'http://kosis.kr/openapi/statisticsData.do?method=getList&apiKey=OGM2N2RlYTNmMjQ2MGY3NWEyYzg5MGU2NmJjYTI4Zjg=&format=json&jsonVD=Y&userStatsId=ox8eb1f9/101/DT_1B040A3/2/1/20200505230018&prdSe=M&newEstPrdCnt=1'
import pandas as pd
import requests
try:
response = requests.get(jsonUrl)
if response.status_code == 200:
population = pd.read_json(jsonUrl)
else:
response.close()
except Exception as e:
print(e)
population.head()
완성본
더보기
방법 1. pd.json_normalize()
jsonUrl = 'http://kosis.kr/openapi/statisticsData.do?method=getList&apiKey=OGM2N2RlYTNmMjQ2MGY3NWEyYzg5MGU2NmJjYTI4Zjg=&format=json&jsonVD=Y&userStatsId=ox8eb1f9/101/DT_1B040A3/2/1/20200505230018&prdSe=M&newEstPrdCnt=1'
import pandas as pd
import requests
# 정상 여부 확인
response = requests.get(jsonUrl)
response
# JSON 데이터 획득
json = response.json()
# json
# 데이터프레임으로 저장
population = pd.json_normalize(json)
population.head()
방법 2. pd.read_json()
jsonUrl = 'http://kosis.kr/openapi/statisticsData.do?method=getList&apiKey=OGM2N2RlYTNmMjQ2MGY3NWEyYzg5MGU2NmJjYTI4Zjg=&format=json&jsonVD=Y&userStatsId=ox8eb1f9/101/DT_1B040A3/2/1/20200505230018&prdSe=M&newEstPrdCnt=1'
import pandas as pd
import requests
try:
response = requests.get(jsonUrl)
if response.status_code == 200:
population = pd.read_json(jsonUrl)
else:
response.close()
except Exception as e:
print(e)
population.head()
'개발자 > Python' 카테고리의 다른 글
Python (파이썬) Seaborn DLL 에러 발생시 (0) | 2020.05.06 |
---|---|
Python (파이썬) 공공데이터 수집 (Open API - XML) (6) | 2020.05.06 |
Python (파이썬) 공공데이터 수집 (CSV 파일데이터) (0) | 2020.05.05 |
Python (파이썬) .bat 실행파일 만들기 / Crontab 크론탭 (0) | 2020.05.05 |
Python (파이썬) Formatting (포맷팅) (0) | 2020.05.05 |