최근에 기상청 데이터를 이용했는데 앞으로 많이 사용할 것 같아 코드를 저장해두려고 합니다.
이 코드는 매년 모든 지역(기상자료개방포털 관측지점정보에서 선택해서 다운로드 한 모든 지역)에 대한 매일의 일자별 ASOS 데이터를 수집하는 코드입니다.
# 1. 사용 패키지 가져오기
import pandas as pd
from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import requests
import json
# 2. 기상자료개방포털 > 데이터 > 메타데이터 > 지점정보 > 관측지점정보에서 다운로드 한 지점 데이터 불러오기
asos_meta = pd.read_csv('ASOS_META_관측지점정보.csv', encoding='utf8')
asos_meta = asos_meta['지점'].tolist()
# 3. 데이터 수집 함수 작성
## ids는 수집할 지역, year은 수집할 연도를 나타내는 변수임
def download_ASOS(ids, year):
url = 'http://apis.data.go.kr/1360000/VilageFcstInfoService/getUltraSrtNcst'
key = "사용자 API Key"
params = '?' + urlencode({ quote_plus("ServiceKey"): key,
quote_plus("pageNo"): 1,
quote_plus("numOfRows"): 366,
quote_plus("dataType"): "JSON",
quote_plus("dataCd"): "ASOS",
quote_plus("dateCd"): "DAY",
quote_plus("startDt") : str(year) + "0101",
quote_plus("endDt"): str(year) + "1231",
quote_plus("stnIds"): ids})
req = requests.get(url + unquote(params))
result_data = req.json()
items = result_data['response']['body']['items']['item']
return pd.DataFrame.from_dict(data=items, orient='columns')
# 4. 데이터를 불러올 DataFrame 생성
## 함수를 한 차례 실행시키고 수집된 데이터의 컬럼들을 데이터프레임의 컬럼으로 넣음
ASOS = pd.DataFrame(columns=download_weather(108, 2010).columns.tolist())
# 5. 2중 for 문으로 연도별 지역별 ASOS 데이터 수집
## 필요에 따라 첫번째 for문과 두번째 for문의 순서를 변경하여 정렬 순서를 바꿀 수 있음
for year in range(2010, 2021):
for no in asos_meta:
try:
ASOS = ASOS.append(download_weather(no, year))
except:
continue
ASOS.to_csv('ASOS.csv', header=True, index=False, encoding='utf8')
'공부공부공부를 합시다 > 분석을 공부해 봅시다' 카테고리의 다른 글
Transformer 모델로 오피스 챗봇 만들기 (에어 프로젝트 따라하기) (0) | 2022.04.27 |
---|---|
[AutoML] H2O.ai 자동 머신 러닝 사용법 (0) | 2022.04.12 |
댓글