๐ผ : ๊ธฐ์์ฒญ_๋จ๊ธฐ์๋ณด((๊ตฌ)_๋๋ค์๋ณด) Open API ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, Open API๋ฅผ ํ์ฉํ๋ฉด ๊ตณ์ด ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ง ์์๋ ๊ณต์ง๋ก ์ ๊ณต๋๋ ๋ฐ์ดํฐ๊ฐ ์์ด์ ์ด๋ฅผ ํ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.
STEP1. ๋ฐ์ดํฐ ํ์ฉ ์ ์ฒญํ๊ธฐ
์ฐ์ , ์๋ ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ์์ ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ ์งํํด์ผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค. (ํ์๊ฐ์ ~ ๋ก๊ทธ์ธ๊น์ง ์งํ Go!)
๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ
๊ตญ๊ฐ์์ ๋ณด์ ํ๊ณ ์๋ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผใ๊ณต๊ณต๋ฐ์ดํฐ์ ์ ๊ณต ๋ฐ ์ด์ฉ ํ์ฑํ์ ๊ดํ ๋ฒ๋ฅ (์ 11956ํธ)ใ์ ๋ฐ๋ผ ๊ฐ๋ฐฉํ์ฌ ๊ตญ๋ฏผ๋ค์ด ๋ณด๋ค ์ฝ๊ณ ์ฉ์ดํ๊ฒ ๊ณต์ •ํ์ฉํ ์ ์๋๋ก ๊ณต๊ณต๋ฐ์ดํฐ(Datase
www.data.go.kr
๊ฒ์์ '๊ธฐ์์ฒญ'์ ๊ฒ์ํ๋ฉด ์๋ ์ ๋ชฉ๊ณผ ๊ฐ์ด ์ด๋ฒ ํฌ์คํ ์์ ํ์ฉํ๋ ค๋ ์คํ API๊ฐ ์๋ค.
์ฌ๊ธฐ์ ์ฐ์ธก ํ๋จ 'ํ์ฉ์ ์ฒญ'์ ํด๋ฆญํด์~
์ ์ฒญ ์๋ฃ ํ '๋ง์ดํ์ด์ง > ๋ฐ์ดํฐํ์ฉ > Open API > ํ์ฉ์ ์ฒญ ํํฉ' ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ฉด ์๋ [์น์ธ] ๋ ๊ฑด์ ํด๋ฆญํด์ฃผ์ธ์.
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ๊ฐ๋ฐ๊ณ์ ์์ธ๋ณด๊ธฐ๊ฐ ๋จ๋๋ฐ ์ฌ๊ธฐ์ ๊ธฐ๋ณธ์ ๋ณด ์นธ์ '์์ธ์ค๋ช '์ ํด๋ฆญํ์ฌ Request Parameter์ Response Parameter ํ์ธํ๊ธฐ!
STEP2. API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
- ๊ฐ๋ฐํ๊ฒฝ : Jupyter Notebook / Python3.10.4 / VSCode
# 1. ํ์ํ module๋ถํฐ importํ๊ธฐ
import requests
# 2. url ์
๋ ฅ
url = '${Endpoint}?serviceKey=${์๋น์คํค}&pageNo=1&numOfRows=1000&dataType=JSON&base_date=20240316&base_time=0630&nx=55&ny=127'
# 3. url ๋ถ๋ฌ์ค๊ธฐ
response = requests.get(url)
# 4. response ๊ฐ์ฒด์์ JSON ๋ฐ์ดํฐ๋ฅผ ํ์ฑ
data = response.json()
# 5. json ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ ๊ฒ์ ์ถ๋ ฅํด๋ณด๊ธฐ!
# ์ถ๋ ฅํ๋ฉด ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด ๋ฐ์ดํฐ๊ฐ ๋ณด์ด๋ ๊ฒ์ ํ์ธํ ์ ์์!
print(data)
์์ ์ถ๋ ฅ๋ฌผ์ ๋ดค์ ๋ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ์..์ฐ์ ๋ฐ์ดํฐ๋ ๋ฐ์์จ ๊ฑด ์๊ฒ ๋๋ฐ JSON ํํ์ธ์ง ๋์ผ๋ก ๊ตฌ๋ถ๋์ง ์์ ์๋ ์ฝ๋ ์ถ๊ฐํ์ฌ ์ถ๋ ฅ!
# ํ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ณํ
# ๋จ, ์๋ ์ฝ๋๋ฅผ ์
๋ ฅํ ๋ json Moduel์ import ํด์ฃผ์ด์ผ ํจ!
json_api = json.dumps(data, indent=4)
# ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅํด๋ณด๊ธฐ
print(json_api)
indent๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์์ฃผ ๋ณธ json ํํ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์!
์, ์ฌ๊ธฐ๊น์ง ์์ผ๋ฉด ๋ฐ์ดํฐ๋ ์ ๊ฐ์ง๊ณ ์จ ์ํฉ์ด๋, ์ด์ DataFrame์ ์ ํ์ฃผ์!
# ํ๋ค์ค๋ก ๋ฐ์ดํฐ ๊ฐ์ธ์ฃผ๊ธฐ
fcstInfo_df = pd.DataFrame(data['response']['body']['items']['item'])
# ๋ฐ์ดํฐ๊ฐ ํ๋ค์ค๋ก ์ ์ถ๋ ฅ๋๋์ง ํ์ธํ๊ธฐ
print(fcstInfo_df)
์ด๋ ๊ฒ Open API๋ฅผ python ์ฝ๋๋ก ๊ฐ๋จํ ํ์ฉํ์ฌ ์ถ๋ ฅํด๋ณด์๋ค. ๊ณต๊ณต๋ฐ์ดํฐ ํํ์ด์ง์๋ ํ ๋ง๋ณ, ๊ตญ๊ฐ์ค์ ๋ฐ์ดํฐ ๋ฑ ๋ค์ํ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ๋ฐ์ดํฐ๊ฐ ์์ผ๋ ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ ๋ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ๋กญ๊ฒ ํ์ฉํด๋ณด์!
dataType์ด XML์ธ ๊ฒฝ์ฐ๋ ๋ค์ํธ์ ์์ฑ ์์ ์ด๋ค.
ํ Header๊ฐ ์ข ๋ ์๋ณด์ด๋๋ก ์๋ ์ถ๊ฐ ์ฝ๋๋ฅผ ์ฒจ๋ถํด๋จ๋ค!
Add Python Code
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ import
import requests
# import json
import pandas as pd
# url ์
๋ ฅ
url = '${Endpoint}?serviceKey=${์๋น์คํค}&pageNo=1&numOfRows=1000&dataType=JSON&base_date=20240316&base_time=0630&nx=55&ny=127'
# url ๋ถ๋ฌ์ค๊ธฐ
response = requests.get(url)
# response ๊ฐ์ฒด์์ JSON ๋ฐ์ดํฐ๋ฅผ ํ์ฑ
data = response.json()
# data ๋ณ์๊ฐ json ํํ๋ก ์ ์ถ๋ ฅ๋๋์ง ํ์ธ
# print(data)
# data ๊ฒฐ๊ณผ๊ฐ
# {'response': {'header': {'resultCode': '00', 'resultMsg': 'NORMAL_SERVICE'}
# , 'body': {'dataType': 'JSON', 'items': {'item': [{'baseDate': '20240316',
# 'baseTime': '0630', 'category': 'LGT', 'fcstDate': '20240316', 'fcstTime': '0700', 'fcstValue': '0',
# 'nx': 55, 'ny': 127}, {'baseDate': '20240316', 'baseTime': '0630', 'category': 'LGT', 'fcstDate': '20240316',
# ....
# 2์ฐจ์ ํํ๋ก ๋ฐ์ดํฐํ๋ ์์ ๋ง๋ค์ด๋ณด์!
# ์ฐ์ ๊ฐ Key๋ณ๋ก ๋น ๋ฆฌ์คํธ๋ถํฐ ๋ง๋ค์ด์ฃผ์
baseDate_list = []
baseTime_list = []
category_list = []
fcstDate_list = []
fcstTime_list = []
fcstValue_list = []
nx_list = []
ny_list = []
for temps in data['response']['body']['items']['item']:
baseDate_list.append(temps['baseDate'])
baseTime_list.append(temps['baseTime'])
category_list.append(temps['category'])
fcstDate_list.append(temps['fcstDate'])
fcstTime_list.append(temps['fcstTime'])
fcstValue_list.append(temps['fcstValue'])
nx_list.append(temps['nx'])
ny_list.append(temps['ny'])
# list๊ฐ ์ ๋ง๋ค์ด์ก๋์ง ํ์ธ
# print(baseDate_list)
# print(category_list)
# print(fcstTime_list)
# print(nx_list)
# list์ ์ ๋ค์ด๊ฐ๋ฉด ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ง๋ค์ด์ฃผ๊ธฐ!
Fcast_df = pd.DataFrame({
'baseDate' : baseDate_list,
'baseTime' : baseTime_list,
'category' : category_list,
'fcstDate' : fcstDate_list,
'fcstTime' : fcstTime_list,
'fcstValue' : fcstValue_list,
'nx' : nx_list,
'ny' : ny_list
})
# ํ์ธ!
display(Fcast_df)
์ถ๋ ฅ๊ฐ

'SkillSet > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python3] ๋ฌธ์์ด ์กฐ์์ ํ์ํ split ํจ์ (0) | 2023.06.07 |
---|---|
๋ฐฑ์ค 10813๋ฒ : ๊ณต ๋ฐ๊พธ๊ธฐ (Python3) (0) | 2023.05.24 |
๋ฐฑ์ค 10818๋ฒ : ์ต์, ์ต๋ (Python3) (0) | 2023.05.24 |
๋ฐฑ์ค 25304๋ฒ : ์์์ฆ (Python3) (0) | 2023.05.11 |
๋ฐฑ์ค 18108๋ฒ : 1998๋ ์์ธ ๋ด๊ฐ ํ๊ตญ์์๋ 2541๋ ?! (Python3) (0) | 2023.05.10 |