목차

자동기상관측 데이터

1. 관측장비소개

강릉asos.jpg

1.1. 정의

자동기상관측장비는 사용목적에 따라 종관기상관측장비(ASOS)과 방재기상관측장비(AWS)로 구분합니다. 종관기상관측장비(ASOS)는 관측관서에서 목측요소를 제외한 기상요소에 대한 관측업무를 자동화한 것이며, 방재기상관측장비(AWS)는 기상관측 사각지역에 관측 공백 해소 및 국지적인 위험기상을 연속자동 관측하여 방재기상업무를 지원하는 자동기상관측장비를 말합니다. 또한 농업기상관측장비(AAOS)를 종관기상관측장비(ASOS) 또는 방재기상관측장비(AWS)에 통합하여 운영함(2017. 8. 3.)에 따라 자동기상관측장비의 기준을 적용합니다.

1.2. 구성

자동기상관측장비는 센서부, 자료처리부, 부대장비 및 부대설비로 구성되어 있습니다.

1.2.1. 센서부 (Sensor)

기온, 지면온도, 초상온도, 지중온도, 풍향, 풍속, 기압, 습도, 강수량(0.1mm, 0.5 mm), 강수유무, 시정·현천, 일사, 일조센서 등으로 구성하며, 농업기상관측 지점에서는 토양수분을 추가 구성합니다. 관측목적(농업, 기후 등)에 따라 관측요소 일부를 관측할 수 있습니다.

1.2.2. 자료처리부

센서로부터 수신한 아날로그 신호를 디지털 신호로 변환하고, 정해진 처리방법에 따라 수집한 다음 자동기상관측장비 표준규격에 따른 자료구조로 편집한 후 기상실황판으로 전송하고, 또한 매 1분 간격으로 국지수집장치를 통하여 종합기상정보시스템으로 전송합니다. 또한 매 1분 자료는 일정기간 자체 저장장치에 보관합니다.

1.2.3. 부대장비 및 부대설비

(1) 전원공급장치 입력전압은 AC Free Volt이며, 출력전압은 DC 12 V 입니다. 전원의 안정된공급과 장비를 72시간 이상 가동할 수 있는 충전기 및 배터리를 설치해야 합니다.

(2) 기상실황판 관측지점의 기상실황을 실시간 감시를 목적으로 설치되며, 액정표시장치(liquid crystal display)와 셋톱박스(set top box) 또는 표출제어장치(display control unit) 등으로 구성됩니다. 주로 표출되는 관측요소는 풍향, 풍속, 기온, 습도, 현지기압, 강수유무, 오늘 강수량, 어제 강수량 등 입니다.

(3) 국지수집장치 국지수집장치는 연결된 자동기상관측장비의 자료를 매분마다 수집하여 종합기상정보시스템으로 전송하는 역할을 합니다. 또한 기상청 표준시각시스템(Network Time Protocol)으로부터 표준시각을 받아 해당 자동기상관측장비의 시각을 동기화하고, 원격지 자동기상관측장비의 전압 및 센서 상태 감시, 자료수집상태, 원격제어 등을 수행합니다.

(4) 모뎀 자동기상관측장비와 국지수집장치 간의 자료를 교환할 수 있도록 연결하는 기능을 합니다. 자동기상관측장비에 장착되어 있는 모뎀은 전용회선 4선식 전이중방식의 모뎀으로 ITU-T V.29 및 정보통신부 모뎀 표준규격서에 의해 설계된 국제규격의 모뎀입니다.

2. 관측환경

2.1. 관측 장소의 요건

기상요소는 관측소 부근의 일반적인 기상상태를 대표할 수 있어야 하므로 관측소 위치는 관측에 영향을 줄 수 있는 높은 건물 등이 많은 곳이나 산악, 산림, 호수, 기타 장애물의 영향을 받는 곳은 피해야 하며, 평탄하고 바람의 유통이 잘되고 시야가 넓은 곳에 위치해야 합니다. 또한 관측소는 업무의 수행상 교통과 통신 등 최적의 관측환경 요건을 구비해야 합니다.

2.2. 관측소의 위치

2.3. 관측소의 주변환경

3. 관측센서

기상측기별 설치기준 제3조제2항

3.1. 온도계(지면‧초상‧지중온도계 포함)

기온 관측방식은 유리제 온도계, 백금저항 온도계, 서미스터 온도계 등이 있으나, 열전도가 높고 부식이 잘 안되는 백금선을 활용한 백금저항온도계를 주로 사용합니다.

온도센서의 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서형식 내용
온도 센서 금속형 ◦ 측정범위: -40 ℃ ~ +60 ℃ (초상, 지면, 지중온도 : -40 ℃ ~ +100 ℃)
◦ 정확도: ±0.3 ℃ 이내 \\◦ 운용환경: -40 ℃~ +60 ℃
◦ 분해능: 0.1 ℃
◦ 기타: 100 Ω 의 백금 4선식
박막형 ◦ 측정범위: -40 ℃ ~ +60 ℃
◦ 정확도: ±0.3 ℃ 이내
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 분해능: 0.1 ℃
◦ 기타: 100 Ω 의 백금(유리코팅 또는 보호통)
백금저항 온도센서(좌) 및 지중온도계(우)

3.2. 풍향‧풍속계

바람(풍향‧풍속) 관측을 위한 장비에는 풍차형, 3배형 풍속계, 초음파 풍속계, 방향타형 풍향계, 로빈손 풍속계, 에어로벤 등이 있으며, 주로 풍배형풍속계를 사용합니다.

세계기상기구(WMO, World Meteorological Organization) 권고에 따라 풍향은 진북을 기준으로 360°의 10°간격(01~36 부호)으로 10분간의 평균풍향을 사용합니다. 풍속 또한 10분간의 평균풍속을 사용합니다. 바람의 관측은 지상의 장애물 높이의 10배 이상 떨어진 평탄한 곳에서 지상 10 m 높이의 풍향, 풍속을 관측하는 것을 표준으로 합니다.

풍향센서의 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측센서형식내용
풍향센서그레이 코드식◦ 측정범위: 0° ~ 360°
◦ 정 확 도: 5° 이내
◦ 기동풍속: 0.5 m/s 이하
◦ 운용환경: -40 ℃ ~ +60 ℃, 순간풍속 75 m/s 이내
◦ 분 해 능: 3°
전위 차계식 ◦ 측정범위: 0° ~ 360°
◦ 정 확 도: 5° 이내
◦ 기동풍속: 1.1 m/s 이하
◦ 운용환경: -50 ℃ ~ +50 ℃ 순간풍속 75 m/s 이내
◦ 분 해 능: 1°
초음파식◦ 측정범위: 0° ~ 360°
◦ 정 확 도: 2° 이내
◦ 운용환경: -40 ℃ ~ +60 ℃, 순간풍속 75 m/s 이내
◦ 분 해 능: 1°

풍속센서의 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서형식내용
풍속 센서 광초퍼식 ◦ 측정범위: 0 ~ 75 m/s
◦ 정 확 도: 0.5 m/s 이내(10 m/s 미만), 5 % 이내(10 m/s 이상)
◦ 기동풍속: 0.5 m/s 이하
◦ 운용환경: -40 ℃ ~ +60 ℃, 순간풍속 75 m/s 이내
◦ 분 해 능: 0.1 m/s
자기 유도식 ◦ 측정범위: 0 ~ 75 m/s
◦ 정 확 도: 0.5 m/s 이내(10 m/s 미만), 5 % 이내(10 m/s 이상)
◦ 기동풍속: 1.1 m/s 이하
◦ 운용환경: -50 ℃ ~ +50 ℃, 순간풍속 75 m/s 이내
◦ 분 해 능: 0.1 m/s
초음파식 ◦ 측정범위: 0 ~ 70 m/s
◦ 정 확 도: 0.5 m/s 이내(10 m/s 미만), 5 % 이내(10 m/s 이상)
◦ 운용환경: -40 ℃ ~ +60 ℃, 순간풍속 75 m/s 이내
◦ 분 해 능: 0.1 m/s
◦ 히터내장(히터작동 범위는 강수량 온도조절용 히터에 준함)
풍배형풍속계(좌) 및 풍차형(에어로벤)풍향풍속계(우)

3.3. 기압계

기압센서는 광범위한 기압과 기온범위에서 사용가능한 디지털 기압계로 자체 기차보정, 온도보정이 된 값이 출력됩니다.

기압계는 연결부위에 물이 닿으면 기압측정에 오차가 발생할수 있으므로 주변 환경으로부터 보호받을 수 있도록 자료처리기(Data Logger)함 내부에 설치하거나 보호구 속에 설치하되, 밀폐되지 않도록 운영하고 있습니다

기압센서 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측센서형식내용
기압센서정전 용량식 ◦ 측정범위: 500 hPa ~ 1080 hPa
◦ 정 확 도: ±0.5 hPa(750 hPa ~ 1080 hPa)
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 분 해 능: 0.1 hPa
◦ 반응시간 : 1초 이내
기압계(좌) 및 자료처리기(우)

3.4. 습도계

습도계는 노점계, 정전용량 습도계, 자외선 습도계 등이 있으며, 정전용량형 고분자막 습도계를 주로 사용합니다.

정전용량형 고분자막 습도계는 고분자 물질의 전기적 특성이 물 분자의 흡ㆍ탈착에 의해서 변하도록 제작된 감지기로 고분자막을 유전체로 하는 일종의 콘덴서로, 정전용량을 전기신호로 끌어냄으로써 상대습도가 측정됩니다. 통풍이 원활하게 이루어지는 차광통 내부 중앙에 위치합니다.

습도센서의 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서 형식내용
습도 센서정전 용량식◦ 측정범위: 0 % R.H ~ 100 % R.H
◦ 정 확 도: ±3 % R.H 이내(0 % R.H ~ 90 % R.H)
±5 % R.H 이내(91 % R.H ~ 100 % R.H)
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 방진필터 부착
습도센서(좌) 및 차광통(우)

3.5. 강수량계

강수량계는 무게식강수량계, 전도형강수량계 등이 있으며, 주로 무게식강수량계를 사용합니다.

무게식강수량계는 비, 눈 등 액상과 고체상의 강수를 관측하는 센서이며, 무게식강수량계 본체에는 저수통이 있어 비, 눈 등을 저수통에 모아 무게를 측정하는 원리를 사용하여 강수량을 산출합니다.

강수량 센서의 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서 형식내용
강수량 센서 무게식◦ 측정범위: 1000 mm 이상
◦ 정 확 도: ±0.1 mm(10 mm 미만), ±1 %(10 mm 이상)
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 분 해 능: 0.1 mm
◦ 바람막이 부착, 수수구부 히팅 기능
전도형◦ 수 수 구: 지름 200 mm
◦ 측정범위: 1전도(Bucket)당 0.5 mm(또는 1.0 mm)
◦ 정 확 도: 3 % 이내(20~50 mm/h 강우강도)
◦ 재 질: 스테인리스
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 히 터: 강설 녹임을 위한 서모스탯(Thermostat) 부착(4 ℃ ± 2 ℃ 이내에서 ON, 15 ℃ ± 2 ℃ 이내에서 OFF)
◦ 수수구 그물망: 봉 또는 수평형태의 그물망
◦ 분 해 능: 0.5 mm 또는 1.0 mm
◦ 바람막이 부착
무게식강수량계(좌) 및 전도식강수량계(우)

3.6. 강수유무계

강수유무계에는 임피던스 검출형, 정전용량 검출형 등이 있습니다. 비, 눈 등 강수현상이 강수유무계 감지면에 낙하하여 감지되면 강수유무를 전기적 신호로 출력합니다.

강수유무 센서의 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서 형식내용
강수 유무 센서 임피던스 검출형,
정전용량 검출형
◦ 측정범위: 비, 눈 등 강수현상
◦ 반응시간: 1분 이내
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 감지면 규격: 5 mm 간격 이내 금박격자, 15° ~ 30° 경사지게 설치
◦ 감지면 항온유지
- 서리 및 이슬현상으로 인한 오류 방지
- 강우 및 강설현상 종료 시 반응시간 2 분 이내에 감지면의 물기 제거
임피던스 검출형 강수유무계

3.7. 시정·현천계

시정계는 일반적으로 산란식 시정센서를 사용합니다. 시정ㆍ현천계는 송신부와 수신부에서 레이저 빔을 발사, 수신하여 공기 중에 있는 입자에 의해 빛이 산란, 흡수되는 빛의 산란 강도를 통해 시정값을 산출합니다. 시정 자료를 생산하기 위하여 1분 동안 10∼15초 간격으로 시정자료를 수집하여 매분자료를 생산하며, 10분 이동평균 한 시정자료를 현재 시정값으로 사용합니다.

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서 형식내용
시정 센서산란식◦ 측정범위: 10 m ~ 25000 m 이상
◦ 정 확 도: ±10 % 이내(10 m ~ 10000 m 미만),±20 % 이내(10000 m 이상)
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 샘 플 링: 매 10~15초
◦ 분 해 능: 10 m
시정현천계

3.8. 일사계

일사계는 직달일사계와 은반일사계 및 전기 보상식 직달일사계 등이 있으며, 주로 전천일사계를 사용합니다. 수평면일사로도 불리는 전천 일사는 수평하게 놓인 수광면이 받는 직달일사와 대기 중의 산란일사를 측정하며, 측정한 값을 전기적 신호로 출력합니다.

일사센서의 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서 형식내용
일사 센서열전대식 ◦ 민 감 도(Sensitivity): 7 ~ 17 ㎶/(W/㎡)
◦ 온도특성: ±2 % / -20 ℃ ~ +50 ℃
◦ 비선형성(Non-linearity): ±0.5 %
◦ 안 정 도: ±0.8 %/년
◦ 정 확 도: 2 %(일 변화), 3 %(시 변화)
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 시 야 각: 0° ~ 360°
◦ 측정범위: 0 ~ 1500 W/㎡
◦ 분 해 능: 1 W/㎡
전천 일사계

3.9. 일조계

일조계는 캄벨․스토크스 일조계, 조르단 일조계, 태양전지식 일조계, 기타 일조계가 있으며, 주로 회전식 일조계를 사용합니다. 회전식 일조계는 일정한 속도로 회전하는 회전반사경에 의해 직달일사량이 120 W·m-2 이상의 에너지를 초과하게 될 경우, 일조가 있는 것으로 처리하며 누적값으로 일조값을 계산합니다.

일조센서의 표준규격

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서 형식내용
일조 센서 회전 거울식,
광다이오드식
◦ 측정범위: 0 ~ 24시
◦ 입사각 특성: ±5 %
◦ 시 초 값: 120 W/m2
◦ 정 확 도: ±5 %(120 W/㎡), 10 분(일) 이내
◦ 운용환경: -40 ℃ ~ +45 ℃
◦ 분 해 능: 0.1시
회전 거울식 일조계

3.10. 운고‧운량계

운고‧운량계는 일반적으로 레이저식 운고센서를 사용합니다. 운고·운량계는 연직으로 레이저 빔을 쏘아 3개 층의 운고와 운량을 관측하는 센서로 송신부에서 30초 간격으로 레이저 빔을 발사하며, 구름하부에 도달한 레이저 빔이 수신기로 돌아오는 데 걸리는 시간을 측정해 3개 층의 운고와 운량을 측정합니다.

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서 형식내용
운고센서레이저식◦ 측정범위: 10 m ~ 7500 m 이상
◦ 정 확 도: ±10 m(1000 m 미만), ±30 m(1000 m 이상)
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 샘 플 링: 매 15~60초
◦ 분 해 능: 10 m
레이저식 운고운량계

3.11. 적설계

적설계는 영상식적설계, 초음파식적설계, 레이저식적설계 등이 있으며, 주로 레이저식 적설계를 사용합니다. 레이저식 적설계는 내부의 레이저 거리측정기가 일정한 각도를 두고 회전하여 지면 또는 눈 표면에 원형 궤적을 그리면서 궤적상의 지점들을 측정합니다. 각 측정 지점에서 반사되어 레이저 거리 측정 모듈까지의 귀환 시간으로 거리를 계산합니다. 이렇게 측정된 각 지점의 거리 자료로 각 지점에 대한 지면으로부터의 높이를 계산하고, 각 지점의 적설 값을 평균하여 측정면의 대표값을 계산합니다.

자동기상관측장비의 표준규격 (기상청 고시, ‘19. 6. 3.)
관측 센서 형식내용
적설 센서레이저식◦ 측정범위: 0 ~ 300 ㎝
◦ 측정방식: 3지점 이상의 관측 포인트 산술평균
◦ 정 확 도: ±0.5 cm
◦ 운용환경: -40 ℃ ~ +50 ℃
◦ 샘 플 링: 매 15~60초
◦ 분 해 능: 0.1㎝
레이저식 적설계

4. 관측지점

2023.9.1기준
구분수도권청부산청광주청대전청강원청대구청제주청전주지청청주지청
종관기상관측장비
(ASOS 98개소)
9171481416410698
방재기상관측장비
(AWS 539개소)
1016687427864393527539
11083101509280434533637

지점번호지점명(한글)지점명(영문)경도(degree)위도(degree)관측장비 해발고도(m)기압계 해발고도(m)온도계 높이(m)풍향/풍속계 높이(m)강수량계 높이(m)예보구역코드 법정동코드
90 속초 Sokcho 128.56473 38.25085 17.53 18.73 1.7 10 1.4 11D20401 5182033035
93 북춘천 Bukchuncheon 127.75443 37.94738 95.78 96.78 1.5 10 1.4 11D10301 5111025024
95 철원 Cheorwon 127.3042 38.14787 155.48 156.98 1.8 13 1.5 11D10101 5178025624
98 동두천 Dongducheon 127.0607 37.90188 115.62 116.74 1.7 10 1 11B20401 4125010300
99 파주 Paju 126.76648 37.88589 30.59 31.99 1.7 10 1 11B20305 4148025025
100 대관령 Daegwallyeong 128.71834 37.67713 772.43 773.43 1.7 10 1.4 11D20201 5176038024
101 춘천 Chuncheon 127.7357 37.90262 75.82 77.05 1.5 10 1.4 11D10301 5111011800
102 백령도 Baengnyeongdo 124.71237 37.97396 36 37.2 1.8 9 1.2 11A00101 2872033021
104 북강릉 Bukgangneung 128.85535 37.80456 75.24 76.67 1.7 10 1.4 11D20501 5115036027
105 강릉 Gangneung 128.89099 37.75147 27.12 28.22 1.7 10 0.5 11D20501 5115010700
106 동해 Donghae 129.12433 37.50709 40.46 41.66 1.7 10 1.4 11D20601 5117010400
108 서울 Seoul 126.9658 37.57142 85.67 86.67 1.5 10 0.5 11B10101 1111017800
112 인천 Incheon 126.6249 37.47772 68.99 70.19 1.6 10 1.2 11B20201 2811013700
114 원주 Wonju 127.94659 37.33749 150.11 151.11 1.7 14 1.4 11D10401 5113010600
115 울릉도 Ulleungdo 130.89863 37.48129 221.14 223.7 1.6 10 1.3 11E00101 4794025024
119 수원 Suwon 126.983 37.25746 39.81 40.81 1.6 18.7 1.1 11B20601 4111312800
121 영월 Yeongwol 128.45743 37.18126 240.54 242.05 1.7 10 1.4 11D10501 5175025022
127 충주 Chungju 127.9525 36.97045 114.85 116.25 1.65 10 1 11C10101 4313012200
129서산Seosan126.493936.7765825.2526.551.620.21.111C201014421010600
130울진Uljin129.4127836.9917648.9850.181.75101.311H101014793025023
131청주Cheongju127.4406636.6392458.760.11.7100.811C103014311311400
133대전Daejeon127.372136.3719967.7968.491.423.7111C204013020012400
135추풍령Chupungnyeong127.9945836.22025244.98246.181.6101.111C104014374033521
136안동Andong128.7073336.57293141.26142.761.8101.311H105014717012900
137상주Sangju128.1574136.4083796.5897.981.8101.411H103024725011000
138포항Pohang129.3800236.032013.944.921.6101.211H102014711110400
140군산Gunsan126.7613536.005327.8524.61.710121F105014513010300
143대구Daegu128.6529635.8779754.2755.521.8100.611H107012714010300
146전주Jeonju127.1171835.8409260.4462.91.6101.411F102014511310600
152울산Ulsan129.3346935.5823781.1483.21.8101.311H201013111011400
155창원Changwon128.5728235.1701934.9739.11.7101.311H203014812510100
156광주Gwangju126.8915635.1729470.2873.91.717.50.811F205012917010900
159부산Busan129.0320335.1046869.5670.91.5181.311H202012611011600
162통영Tongyeong128.4356134.8454131.2433.21.5181.311H204014822010900
165목포Mokpo126.3815134.8173244.739.21.514.5121F208014611010300
168여수Yeosu127.7406334.7392965.9366.11.5130.611F204014613010700
169흑산도Heuksando125.4510534.6871975.12781.515.50.611F207014691036022
170완도Wando126.7018234.395935.3736.71.5100.811F203014689031022
172고창Gochang126.59935.3482452.4253.51.8101.721F106014579038025
174순천Suncheon127.369435.0204165166.51.5100.811F206004615025025
177홍성Hongseong126.6877236.6575927.7428.71.5101.511C201044480025625
181서청주Seocheongju127.3846636.6400232321.5100.511C103014311331035
184제주Jeju126.5296933.5141120.7921.991.7151.511G002015011010700
185고산Gosan126.1628333.2938271.3972.491.7101.511G005015011031023
188성산Seongsan126.880233.3867720.3421.741.7101.511G001015013025927
189서귀포Seogwipo126.565333.2461651.8653.161.7101.511G004015013010100
192진주Jinju128.0400435.1637829.3531.61.8101.311H207014817012600
201강화Ganghwa126.4463437.7073947.8449.241.6100.611B201012871032027
202양평Yangpyeong127.4944637.4886347.2648.761.9100.611B205034183025021
203이천Icheon127.4842137.2639980.0981.591.8100.611B207014150025328
211인제Inje128.1671438.05986201.78202.781.5100.511D102015181025022
212홍천Hongcheon127.8804337.6836140.2141.21.6130.511D103025172025029
216태백Taebaek128.9892937.17038714.45715.251.6160.611D203015119010100
217정선군Jeongseongun128.6734837.377323123121.5100.511D105025177025024
221제천Jecheon128.1943337.15928264.62265.391.5100.511C102014315011200
226보은Boeun127.7341536.48761171.31172.711.5100.511C103024372025030
232천안Cheonan127.2928236.7621784.78831.8101.211C203014413136022
235보령Boryeong126.5574436.327249.98171.6101.111C202014418010900
236부여Buyeo126.9207936.2724213.4214.881.7100.511C205014476025033
238금산Geumsan127.4817536.10563172.69173.991.5100.511C206014471025025
239세종sejong127.2443836.4852289.5951.610111C204043611010800
243부안Buan126.7165735.7296112.213.51.8100.621F106024580033021
244임실Imsil127.2855635.61203247.04248.441.8100.611F104024575025022
245정읍Jeongeup126.8390435.5633768.770.971.910111F102034518010800
247남원Namwon127.3965235.4213133.4991.81.7100.711F104014519011600
248장수Jangsu127.5203135.65696406.874081.6100.511F103014574025023
251고창군Gochanggun126.69735.4266158.8455.51.7100.621F106014579025030
252영광군Yeonggwanggun126.4778435.2836637.238.71.5130.621F201024687034030
253김해시Gimhaesi128.8907535.2298154.5954.61.7100.511H203044825010300
254순창군Sunchanggun127.128635.37131129.38128.41.6100.611F104034577025026
255북창원Bukchangwon128.672635.2265550.9550.31.8100.711H203014812311100
257양산시Yangsansi129.0200935.307376.2916.11.8100.611H201024833031027
258보성군Boseonggun127.2122634.763351.414.31.5100.611F204044678038023
259강진군Gangjingun126.7840834.6445716201.5100.611F203034681025027
260장흥Jangheung126.9195134.6888643.9946.31.5100.811F203044680025043
261해남Haenam126.5690734.5537516.3617.911.5100.811F203024682025034
262고흥Goheung127.2757234.6182651.9153.311.5100.811F204034677025029
263의령군Uiryeonggun128.2881235.3225814.114.92100.611H203024872025024
264함양군Hamyanggun127.7453835.51138152.07152.51.8100.611H205024887025022
266광양시Gwangyangsi127.691434.943488.2187.91.7100.611F204024623010600
268진도군Jindogun126.2584634.472969.826.91.7100.621F202014690025025
271봉화Bonghwa128.9144936.94361324.67326.221.9100.611H104024792034021
272영주Yeongju128.5168736.87183211.32212.781.91100.5811H104014721025021
273문경Mungyeong128.1487936.62727173.01174.511.8100.611H103014728010800
276청송군Cheongsonggun129.0400536.4351208.65210.21.75100.511H105034775025000
277영덕Yeongdeok129.4092636.5333740.7142.011.7100.611H101024777036030
278의성Uiseong128.6886436.356181.4482.941.7100.611H105024773025031
279구미Gumi128.3205536.1305549.1750.671.7101.411H106024719010800
281영천Yeongcheon128.951435.9774296.1297.621.7100.511H107024723010200
283경주시Gyeongjusi129.200935.817440.1341.631.67100.5911H102024713011300
284거창Geochang127.909935.66739228.45227.31.5101.311H205024888025028
285합천Hapcheon128.1699435.5650526.7233.21.5100.511H205034889025021
288밀양Miryang128.7441235.491478.3112.52101.311H206014827010200
289산청Sancheong127.879135.413138.22138.81.6100.611H207034886025023
294거제Geoje128.6045934.8881844.8346.71.7100.611H204034831010800
295남해Namhae127.9264134.8166245.7147.011.8100.811H204054884031021
296북부산Bukbusan128.9602435.2177834.51.5100.711H202012644010100

5. 생산

5.1. 관측센서의 표준규격

관측센서의 표준규격

5.2. 자료처리기의 표준규격

자료처리기의 표준규격

구분내용
기능◦ 신호의 변환(아날로그에서 디지털)ㆍ처리
- 기상요소별 관측센서로부터 측정된 신호를 기상학적 물리량으로 변환하여 수치화한다.
◦ 관측센서의 추가 또는 변경 시 하드웨어의 변경 없이 소프트웨어로 제어(센서 추가ㆍ변경, 센서별 보정값 수정)가 가능하도록 설계되어야 한다.
◦ 시각동기화, 자료의 저장, 자료의 송ㆍ수신이 가능해야 한다.
조건◦ 일체형이고 범용성과 안정성이 있어야 한다.
◦ 하드웨어, 소프트웨어 및 펌웨어의 확장성이 있어야 한다.
◦ 전원중단, 통신장애 대비, 관측자료 산출 적합성 확인을 위해 충분한 자료 저장성이 있어야 한다.
규격◦ 프로세서: 마이크로프로세서
◦ 저장용량: 1분 자료와 관측요소별 샘플링 주기 자료 30일 이상 저장
※ 단, 샘플링 주기자료는 [별표 4]에 명시된 관측요소에 한함(시정, 운고, 적설 제외)
◦ 통신인터페이스: LAN(TCP/IP), RS232, RS422, RS485 등 가능
◦ 키패드장치: 디스플레이가 부착된 키패드 또는 작동상태를 확인할 수 있는 출력장치 포함
◦ 운용환경: -40 ℃ ~ +60 ℃
◦ 채널(기상관측목적, 관측센서 종류 및 수량 등에 따라 선택 가능)
- 아날로그 채널: Single 15개 이상, Differential 7개 이상
- 디지털 채널: 8개 이상(SDI-12, RS232, RS422, RS485 등)
- 주파수 채널: 2개 이상
- 여기 채널: 2개 이상
◦ A/D 비트(bit): 15 비트(bit) 이상
◦ 입력전원: 안정된 전원으로 동작하여야 한다.
◦ 외 장 품: 자료처리기함
- 내구성이 보장되어야 하며, 함체 재질에 의한 직접적인 내부온도 상승이 없도록 제작된 것으로 잠금장치와 환기구(이물질 방지망 설치)가 설치되어야 한다.
◦ 자료처리기의 내부보드는 접지가 되어야 한다.

5.3. 신호 및 자료처리의 표준규격

신호 및 자료처리의 표준규격

관측요소내용
온도
습도
기압
◦ 자료 단위: 0.1 ℃(기온, 초상, 지면, 지중온도), 0.1 %(습도), 0.1 hPa(기압)
◦ 샘플링 시간: 10초
◦ 자료처리 시간간격: 1분
- 10초마다 전기적 신호를 수신하여 디지털 값으로 변환한다.
- 10초 간격의 6개 자료를 평균하여 1분 자료를 산출
풍향풍속◦ 자료 단위: 0.1°(풍향), 0.1 m/s(풍속)
◦ 샘플링 시간: 0.25초
◦ 자료처리 시간간격: 1분
◦ 풍향․풍속센서로부터 0.25초마다 전기적 신호를 수신하여 디지털 값으로 변환 후 벡터 환산한다.
◦ 순간풍향ㆍ풍속(gust)
- 매 0.25초 간격으로 3초 동안 12개의 샘플링 된 자료를 평균하고 0.25초 간격으로 이동 평균하여 순간풍향․풍속을 산출한다.
- 1분 동안 이동평균하여 산출된 지난 240개의 자료 중 최댓값을 1분 최대순간풍향․풍속으로 산출한다.
- 매 1분마다 지난 10개의 1분값 중에서 최댓값을 10분 최대순간풍향․풍속으로 산출한다.
- 하루 동안 수집된 1분 최대순간풍향․풍속 1440개 중에서 최댓값을 일 최대순간풍향․풍속으로 산출한다.
◦ 1분 평균 풍향․풍속
- 0.25초 간격의 바람벡터 자료를 10초 동안 평균을 구한 후 1분 동안 6개의 자료를다시 평균하여 매분자료를 산출한다.
강수량전도형◦ 자료 단위: 0.5 ㎜ 또는 1.0 ㎜
◦ 1분 강수량: 센서에서 1초마다 보내온 펄스 신호의 횟수를 1분 동안 누적하여 산출한다
무게식◦ 자료 단위: 0.1 ㎜
◦ 1분 강수량 : 센서에서 보내온 1분 값 또는 각 센서의 자체 알고리즘에 따른다
강수유무◦ 자료 단위: ON 신호 시 10, OFF 신호 시 00
◦ 샘플링 시간: 1분
◦ 강수현상이 있을 때 10, 없을 때 00
시정◦ 자료 단위 : 10 m
◦ 1분 시정 : 센서에서 보내온 1분 자료 또는 각 센서의 자체 알고리즘에 따른다.
운고◦ 자료 단위 : 10 m
◦ 1분 운고 : 센서에서 보내온 1분 자료 또는 각 센서의 자체 알고리즘에 따른다.
일사◦ 자료 단위 : 0.01 MJ/m2
◦ 샘플링 시간 : 1초
◦ 자료처리 시간간격 : 1분
- 1초 간격의 60개 자료를 누적하여 1분 자료를 산출한다.
적설◦ 자료 단위 : 0.1 cm
◦ 1분 적설 : 센서에서 보내온 1분 자료 또는 각 센서의 자체 알고리즘에 따른다.

5.4. 자료구조의 표준규격

자료구조의 표준규격

5.5. 부대장비의 표준규격

부대장비의 표준규격

5.6. 부대설비의 설치위치 및 표준규격

부대설비의 설치위치 및 표준규격

6. 수집

6.1. 자동기상관측장비 관측자료 수집체계

센서로부터 수신한 아날로그 신호를 디지털 신호로 변환하고 정해진 처리방법에 따라 샘플링한 다음 자동기상관측장비 표준규격에 따른 자료구조로 편집한 후 기상실황판으로 전송하고, 매 1분 간격으로 국지수집장치를 통하여 종합기상정보시스템(기상청 내부 시스템)으로 전송합니다.

7. 데이터 구조

7.1. 변수명 (기상자료개방포털)

시간자료
변수명
일시
기온 (°C)
기온 QC플래그
강수량 (mm)
강수량 QC플래그
풍속 (m/s)
풍속 QC플래그
풍향 (16방위)
풍향 QC플래그
습도 (%)
습도 QC플래그
증기압 (hPa)
이슬점온도 (°C)
현지기압 (hPa)
현지기압 QC플래그
해면기압 (hPa)
해면기압 QC플래그
일조 (hr)
일조 QC플래그
일사 (MJ/m2)
일사 QC플래그
적설 (cm)
3시간신적설 (cm)
전운량 (10분위)
중하층운량 (10분위)
운형 (운형약어)
최저운고 (100m)
시정 (10m)
지면상태 (지면상태코드)
현상번호 (국내식)
지면온도 (°C)
지면온도 QC플래그
5cm 지중온도 (°C)
10cm 지중온도 (°C)
20cm 지중온도 (°C)
30cm 지중온도 (°C)
일 자료
변수명
일시
평균기온(°C)
최저기온(°C)
최저기온 시각(hhmi)
최고기온(°C)
최고기온 시각(hhmi)
강수 계속시간(hr)
10분 최다 강수량(mm)
10분 최다강수량 시각(hhmi)
1시간 최다강수량(mm)
1시간 최다 강수량 시각(hhmi)
일강수량(mm)
최대 순간 풍속(m/s)
최대 순간 풍속 풍향(16방위)
최대 순간풍속 시각(hhmi)
최대 풍속(m/s)
최대 풍속 풍향(16방위)
최대 풍속 시각(hhmi)
평균 풍속(m/s)
풍정합(100m)
최다풍향(16방위)
평균 이슬점온도(°C)
최소 상대습도(%)
최소 상대습도 시각(hhmi)
평균 상대습도(%)
평균 증기압(hPa)
평균 현지기압(hPa)
최고 해면기압(hPa)
최고 해면기압 시각(hhmi)
최저 해면기압(hPa)
최저 해면기압 시각(hhmi)
평균 해면기압(hPa)
가조시간(hr)
합계 일조시간(hr)
1시간 최다일사량(MJ/m²)
합계 일사량(MJ/m²)
일 최심신적설(cm)
일 최심신적설 시각(hhmi)
일 최심적설(cm)
일 최심적설 시각(hhmi)
합계 3시간 신적설(cm)
평균 전운량(1/10)
평균 중하층운량(1/10)
평균 지면온도(°C)
최저 초상온도(°C)
평균 5cm 지중온도(°C)
평균 10cm 지중온도(°C)
평균 20cm 지중온도(°C)
평균 30cm 지중온도(°C)
0.5m 지중온도(°C)
1.0m 지중온도(°C)
1.5m 지중온도(°C)
3.0m 지중온도(°C)
5.0m 지중온도(°C)
합계 대형증발량(mm)
합계 소형증발량(mm)
9-9강수(mm)
기사
안개 계속시간(hr)

1.7.2. 변수명(기상청 api허브 )

시간자료
변수명 의미(단위) 변수명 의미(단위)
TM 관측시각 (KST) STN 국내 지점번호
WD 풍향 (16방위) WS 풍속 (m/s)
GST_WD 돌풍향 (16방위) GST_WS 돌풍속 (m/s)
GST_TM 돌풍속이 관측된 시각 (시분) PA 현지기압 (hPa)
PS 해면기압 (hPa) PT 기압변화경향 (Code 0200)
PR 기압변화량 (hPa) TA 기온 (C)
TD 이슬점온도 (C) HM 상대습도 (%)
PV 수증기압 (hPa) RN 강수량 (mm)
RN_DAY 위 관측시간까지의 일강수량 (mm) RN_INT 강수강도 (mm/h)
SD_HR3 3시간 신적설 (cm) SD_DAY 일 신적설 (cm)
SD_TOT 적설 (cm) WC GTS 현재일기 (Code 4677)
WP GTS 과거일기 (Code 4561) WW 국내식 일기코드 (문자열 22개)
CA_TOT 전운량 (1/10) CA_MID 중하층운량 (1/10)
CH_MIN 최저운고 (100m) CT 운형 (문자열 8개)
CT_TOP GTS 상층운형 (Code 0509) CT_MID GTS 중층운형 (Code 0515)
CT_LOW GTS 하층운형 (Code 0513) VS 시정 (10m)
SS 일조 (hr) SI 일사 (MJ/m2)
ST_GD 지면상태 코드 (코드는 기상자원과 문의) TS 지면온도 (C)
TE_005 5cm 지중온도 (C) TE_01 10cm 지중온도 (C)
TE_02 20cm 지중온도 (C) TE_03 30cm 지중온도 (C)
ST_SEA 해면상태 코드 (코드는 기상자원과 문의) WH 파고 (m)
BF Beaufart 최대풍력(GTS코드) IR 강수자료
IX 유인관측/무인관측 RN_JUN 일강수량(mm)
일 자료
변수명 의미(단위) 변수명 의미(단위)
TM 관측시각 (KST) STN 국내 지점번호
RN_DAY 위 관측시간까지의 일강수량 (mm) CA_TOT 전운량 (1/10)
WS_AVG 일 평균 풍속 (m/s) WR_DAY 일 풍정 (m)
WD_MAX 최대풍향 WS_MAX 최대풍속 (m/s)
WS_MAX_TM 최대풍속 시각 (시분) WD_INS 최대순간풍향
WS_INS 최대순간풍속 (m/s) WS_INS_TM 최대순간풍속 시각 (시분)
TA_AVG 일 평균기온 (C) TA_MAX 최고기온 (C)
TA_MAX_TM 최고기온 시각 (시분) TA_MIN 최저기온 (C)
TA_MIN_TM 최저기온 시각 (시분) TD_AVG 일 평균 이슬점온도 (C)
TS_AVG 일 평균 지면온도 (C) TG_MIN 일 최저 초상온도 (C)
HM_AVG 일 평균 상대습도 (%) HM_MIN 최저습도 (%)
HM_MIN_TM 최저습도 시각 (시분) PV_AVG 일 평균 수증기압 (hPa)
EV_S 소형 증발량 (mm) EV_L 대형 증발량 (mm)
FG_DUR 안개계속시간 (hr) PA_AVG 일 평균 현지기압 (hPa)
PS_AVG 일 평균 해면기압 (hPa) PS_MAX 최고 해면기압 (hPa)
PS_MAX_TM 최고 해면기압 시각 (시분) PS_MIN 최저 해면기압 (hPa)
PS_MIN_TM 최저 해면기압 시각 (시분) SS_DAY 일조합 (hr)
SS_DUR 가조시간 (hr) SS_CMB 캄벨 일조 (hr)
SI_DAY 일사합 (MJ/m2) RN_D99 9-9 강수량 (mm)
RN_DUR 강수계속시간 (hr) SD_NEW 최심 신적설 (cm)
SD_NEW_TM 최심 신적설 시각 (시분) SD_MAX 최심 적설 (cm)
SD_MAX_TM 최심 적설 시각 (시분) TE_05 0.5m 지중온도 (C)
TE_10 1.0m 지중온도 (C) TE_15 1.5m 지중온도 (C)
TE_30 3.0m 지중온도 (C) TE_50 5.0m 지중온도 (C)
SI_60M_MAX 최대 1시간일사 (MJ/m2) SI_60M_MAX_TM 최대 1시간일사 시각
RN_60M_MAX 1시간 최다강수량 (mm) RN_60M_MAX_TM 1시간 최다강수량 시각
RN_10M_MAX 10분간 최다강수량 (mm) RN_10M_MAX_TM 10분간 최다강수량 시각 (시분)
RN_POW_MAX 최대 강우강도 (mm/h) RN_POW_MAX_TM 최대 강우강도 시각 (시분)

8. 검색 및 획득

8.1. 검색·획득 – 기상자료개방포털​

8.1.1. 자료 접근

8.1.2. 자료 검색

8.2. 검색·획득 - 기상청 API허브​

8.2.1. 자료 접근

8.2.2. 자료 획득

9. 활용방안

소스코드: aws_notebook.ipynb

9.1. 라이브러리 설치

# API 요청을 위한 requests 라이브러리와 
# 그래프를 그리기 위한 seaborn 라이브러리,
# 지도를 표출하기 위한 folium 라이브러리를 설치합니다.
%pip install requests seaborn folium

9.2. AWS 지점 목록 다운로드

기상청 API허브에 회원가입 후 자신의 인증키를 사용하여 API 요청을 할 수 있습니다.

API 인증키를 코드상에 직접 남겨 사용하는 방식은 다른 사람에게 코드를 공유할때 인증키가 노출되는 문제가 생길 수 있습니다.

따라서 인증키를 환경변수로 등록하여 코드상에 노출되지 않도록 사용하는 것이 바람직합니다.

import os # 환경변수를 불러오는 표준 라이브러리

# 바람직하지 않은 방법
# my_api_key = 'MY_PRIVATE_API_AUTHENTICATE_KEY'

# 인증키를 'myapikey'라는 이름의 환경변수로 미리 등록해놓은 뒤 이를 불러와서 사용합니다.
my_api_key = os.environ['myapikey']

먼저 AWS의 지점 정보를 조회해 파일로 다운로드합니다.

import requests # API 요청을 보내고 받는 라이브러리
import json     # API 응답을 json형태로 가공하기 위한 라이브러리

# 지상관측 지점정보 API url
api_url = 'https://apihub.kma.go.kr/api/typ01/url/stn_inf.php'

# 요청인자로 지점종류, 해당 시점, 지점번호, 도움말추가 여부 등이 있습니다.

# 1. 지점종류를 입력합니다.
# SFC(지상), AWS(AWS), NKO(북한), UV(자외선)를 입력할 수 있습니다.
stn_type = 'AWS'

# 2. 해당 시점 및 특정 지점번호를 입력합니다.
# 여기선 현재 시각에 존재하는 모든 지점번호를 조회하기 위해 값을 입력하지 않습니다.

# 3. 도움말추가 여부를 입력합니다.
# 파일 내에 각 필드에 대한 도움말을 확인할 수 있습니다.
help = 1

# API 요청인자들을 묶어 dictionary로 정의합니다.
api_parameters = {
    'inf': stn_type,
    'help': help,
    'authKey': my_api_key
}

# API 응답을 저장할 파일 형식은 txt 파일로 저장합니다.
file_name = f'{stn_type.lower()}_stn_inf.txt'

# 저장된 파일이 없는 경우에만 API를 요청해 파일을 다운로드합니다.
if not os.path.exists(file_name):
    # API 요청인자와 함께 API 요청
    response = requests.get(api_url, params=api_parameters)

    # 잘못된 응답을 받을 경우 에러 메세지 출력
    if response.status_code != 200:
        raise requests.RequestException(
            json.loads(response.content)['result']['message']
        )
    else:
        # 그외의 올바른 응답에 대해서만 UTF-8 txt 파일 형태로 저장합니다.
        with open(file_name, 'wb') as f:
            f.write(response.content.decode('euc-kr').encode('utf-8'))
        print(f'{file_name} 파일 다운로드 완료')
aws_stn_inf.csv 파일 다운로드 완료

다운로드 받은 파일을 열면 AWS 각 지점 번호와 이름, 지점 정보를 확인할 수 있습니다.

AWS 각 지점들의 위치를 지도로 표출합니다.

import pandas as pd     # dataframe을 다루는 패키지

# 다운로드 받은 txt파일을 dataframe으로 변환합니다.
# 도움말을 비롯한 파일의 첫 20줄과 마지막 1줄을 제외하여 변환합니다.
# 각 필드를 구분하도록 너비를 정의하고
# 지점번호(STN), 경도(LON), 위도(LAT), 노장 해발고도(HT), 한글 지점명(STN_KO)만을 사용합니다.
stn_info = pd.read_fwf(
    file_name,
    skiprows=20,
    skipfooter=1,
    names=['STN_ID', 'LON', 'LAT', 'STN_SP', 'HT', 'HT_WD', 'LAU_ID', 'STN_AD', 'STN_KO', 'STN_EN', 'FCT_ID', 'LAW_ID', 'BASIN'],
    usecols=['STN_ID', 'LON', 'LAT', 'HT', 'STN_KO'],
    index_col=['STN_ID'],
    widths=(5, 14, 14, 9, 10, 10, 5, 4, 10),
)

# dataframe의 첫 5개의 데이터를 표출합니다.
stn_info.head(5)

STN_ID LON LAT HT STN_KO
90 128.56473 38.25085 17.53 속초
92 128.66298 38.05903 75.40 양양(공)
93 127.75443 37.94738 95.78 북춘천
95 127.30420 38.14787 155.48 철원
96 131.86983 37.23952 99.08 독도

import folium   # 지도로 표출하기 위한 라이브러리

# 너비, 높이 크기가 800인 지도 생성
fig = folium.Figure(width=800, height=800)

# 지도의 위·경도 중심과 범위를 정해 맵을 생성합니다.
map = folium.Map(
    location=[37.5, 127],
    zoom_start=12,
    min_zoom=6,
    min_lat=30,
    max_lat=44,
    min_lon=123,
    max_lon=132,
    max_bounds=True,
).add_to(fig)

# dataframe의 데이터를 읽어 지도위에 마커를 추가합니다.
# marker를 클릭하면 팝업으로 지점명, 위경도와 해발고도를 표출하도록 html을 추가합니다.
for idx, row in stn_info.iterrows():
    html=f"""
    <h3>{row['STN_KO']}({idx})</h3>
    <p>위도: {row['LAT']}</p>
    <p>경도: {row['LON']}</p>
    <p>해발고도: {row['HT']}m</p>
    """
    iframe = folium.IFrame(html=html, width=170, height=170)
    popup = folium.Popup(iframe, max_width=1000)
    folium.Marker(
        location=row[['LAT', 'LON']].tolist(),
        popup=popup,
    ).add_to(map)

# 지도를 표출합니다.
fig

AWS 지점들 중 하나를 골라 시계열 그래프를 그려봅니다.

9.3. 시계열 그래프 표출

시계열 그래프를 표출하기 전, 그래프에 한글을 표출하려면 한글 폰트의 설정이 필요합니다.

만약, 한글 표출을 하지 않는다면 이 부분을 실행하지 않아도 좋습니다.

# Linux Ubuntu에서의 나눔폰트 설치와 캐시를 제거합니다.
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm -rf ~/.cache/matplotlib

import seaborn as sns           # 그래프를 그리는 라이브러리
import matplotlib.pyplot as plt # 그래프를 그리는 라이브러리

# 한글을 출력하기 위해 사용하는 기본 폰트를 나눔고딕으로 설정합니다.
plt.rc("font", family = "NanumGothic")
sns.set_theme(font="NanumGothic", rc={"axes.unicode_minus": False}, style='darkgrid')

AWS자료는 크게 AWS2 포맷의 매 분자료 조회와 AWS 일 통계 자료 조회 2가지가 존재합니다.

먼저, AWS2 포맷의 매 분자료 시계열 그래프를 그립니다.

import requests # API 요청을 보내고 받는 라이브러리
import json     # API 응답을 json형태로 가공하기 위한 라이브러리

# AWS2 매분자료 조회 API url
api_url = 'https://apihub.kma.go.kr/api/typ01/cgi-bin/url/nph-aws2_min'

# 요청인자로 시작시간, 종료시간, 지점번호, 표출형태, 도움말추가 여부가 있습니다.

# 1. 한 지점에 대해 최대 12시간을 조회할 수 있습니다.
# 시작시간과 종료시간을 년월일시분 형태로 입력합니다.
start_time = '202403011200'
end_time = '202403020000'

# 2. 앞에서 확인한 지점번호를 입력합니다.
stn_id = 108

# 3. 표출형태로 포트란과 엑셀에 적합한 형태를 입력할 수 있습니다.
# 여기선 변수별로 일정한 길이를 유지하는 기본값을 사용합니다. 

# 4. 도움말추가 여부를 입력합니다.
# 파일 내에 각 필드에 대한 도움말을 확인할 수 있습니다.
help = 1

# API 요청인자들을 묶어 dictionary로 정의합니다.
api_parameters = {
    'tm1': start_time,
    'tm2': end_time,
    'stn': stn_id,
    'help': help,
    'authKey': my_api_key
}

# API 응답을 저장할 파일 형식은 txt 파일로 저장합니다.
file_name = f"aws_min_data_{stn_id}_{start_time}_{end_time}.txt"

# 저장된 파일이 없는 경우에만 API를 요청해 파일을 다운로드합니다.
if not os.path.exists(file_name):
    # API 요청인자와 함께 API 요청
    response = requests.get(api_url, params=api_parameters)

    # 잘못된 응답을 받을 경우 에러 메세지 출력
    if response.status_code != 200:
        raise requests.RequestException(
            json.loads(response.content)['result']['message']
        )
    # 짧은 에러메세지를 응답으로 받은 경우 에러 메세지 출력
    elif len(response.content) < 100:
        raise ValueError(response.content.decode('euc-kr').split('#')[2])
    else:
        # 그외의 올바른 응답에 대해서만 UTF-8 txt 파일 형태로 저장합니다.
        with open(file_name, 'wb') as f:
            f.write(response.content.decode('euc-kr').encode('utf-8'))
        print(f"{file_name} 파일 다운로드 완료")
aws_min_data_108_202403011200_202403020000.txt 파일 다운로드 완료

다운로드 받은 AWS 매 분자료 파일을 열어 자료를 확인할 수 있습니다.

자료를 읽어 시계열 그래프를 그립니다.

import pandas as pd     # dataframe을 다루는 패키지
import numpy as np      # 배열을 다루는 패키지

# 다운로드 받은 txt파일을 dataframe으로 변환합니다.
# 도움말을 비롯한 파일의 첫 22줄과 마지막 1줄을 제외하여 변환합니다.
# 각 필드는 공백으로 구분되어있으며 존재하는 모든 필드를 사용합니다.
aws_min_data = pd.read_csv(
    file_name,
    skiprows=22,
    skipfooter=1,
    sep=r'\s+',
    names=['TIME', 'STN_ID', 'WD1', 'WS1', 'WDS', 'WSS', 'WD10', 'WS10', 'TA',
           'RE', 'RN-15m', 'RN-60m', 'RN-12H', 'RN-DAY', 'HM', 'PA', 'PS', 'TD'],
    parse_dates=['TIME'],
    index_col=['TIME', 'STN_ID'],
    engine='python'
)

# 도움말에 따르면 값이 -50 이하라면 관측이 없거나, 에러처리된 것을 표시합니다.
# 따라서 그 값을 NaN으로 변환합니다.
aws_min_data[aws_min_data <= -50] = np.nan

# dataframe의 첫 5개의 데이터를 표출합니다.
aws_min_data.head(5)

TIME STN_ID WD1 WS1 WDS WSS WD10 WS10 TA RE RN-15m RN-60m RN-12H RN-DAY HM PA PS TD
2024-03-01 12:00:00108292.23.4297.49.0293.74.6-3.00.00.00.00.00.033.31013.61024.6-16.9
2024-03-01 12:01:00108274.87.0286.69.6290.94.7-3.00.00.00.00.00.031.21013.61024.6-17.7
2024-03-01 12:02:00108278.15.3292.67.3288.94.5-2.80.00.00.00.00.032.81013.61024.6-16.9
2024-03-01 12:03:00108277.54.3278.05.9289.94.5-2.90.00.00.00.00.032.41013.61024.6-17.2
2024-03-01 12:04:00108274.16.6275.411.0287.64.6-3.10.00.00.00.00.030.91013.51024.5-17.9

# 필드 중 기온(TA), 이슬점온도(TD)를 표출합니다.
vars = ['TA', 'TD']

# 그래프를 그릴 크기를 지정합니다.
fig, ax = plt.subplots(1, 1, figsize=(10, 5))

# 그래프의 제목을 지정합니다.
# 제목에 한글 지점명이 사용됩니다.
ax.set_title(
    f"{stn_info[stn_info.index == stn_id]['STN_KO'].iloc[0]}({stn_id}) "
    f"{aws_min_data.index.get_level_values('TIME')[0]} - {aws_min_data.index.get_level_values('TIME')[-1]}")

# 각 요소별로 시계열 그래프를 그립니다.
for var in vars:
    sns.lineplot(aws_min_data, x=aws_min_data.index.get_level_values('TIME'), y=var, label=var, ax=ax)

# 그래프를 표출합니다.
plt.show()

# 필드 중 현지기압(PA), 해면기압(PS)을 표출합니다.
vars = ['PA', 'PS']

# 그래프를 그릴 크기를 지정합니다.
fig, ax = plt.subplots(1, 1, figsize=(10, 5))

# 그래프의 제목을 지정합니다.
# 제목에 한글 지점명이 사용됩니다.
ax.set_title(
    f"{stn_info[stn_info.index == stn_id]['STN_KO'].iloc[0]}({stn_id}) "
    f"{aws_min_data.index.get_level_values('TIME')[0]} - {aws_min_data.index.get_level_values('TIME')[-1]}")

# 각 요소별로 시계열 그래프를 그립니다.
for var in vars:
    sns.lineplot(aws_min_data, x=aws_min_data.index.get_level_values('TIME'), y=var, label=var, ax=ax)

# 그래프를 표출합니다.
plt.show()

# 필드 중 1분 평균 풍속(WS1)를 표출합니다.

# 그래프를 그릴 크기를 지정합니다.
fig, ax = plt.subplots(1, 1, figsize=(10, 5))

# 그래프의 제목을 지정합니다.
# 제목에 한글 지점명이 사용됩니다.
ax.set_title(
    f"{stn_info[stn_info.index == stn_id]['STN_KO'].iloc[0]}({stn_id}) "
    f"{aws_min_data.index.get_level_values('TIME')[0]} - {aws_min_data.index.get_level_values('TIME')[-1]}")

# 풍속 시계열 그래프를 그립니다.
sns.lineplot(aws_min_data, x=aws_min_data.index.get_level_values('TIME'), y='WS1', label='WS1', ax=ax)

# 그래프를 표출합니다.
plt.show()

AWS 일 통계 자료를 조회하여 시계열 그래프로 표출합니다.

import requests # API 요청을 보내고 받는 라이브러리
import json     # API 응답을 json형태로 가공하기 위한 라이브러리

# AWS 일 통계 자료 조회 API url
api_url = 'https://apihub.kma.go.kr/api/typ01/url/sfc_aws_day.php'

# 요청인자로 시작시간, 종료시간, 기상요소, 지점번호, 도움말추가 여부가 있습니다.

# 1. 시작시간과 종료시간을 년월일 형태로 입력합니다.
start_time = '20220201'
end_time = '20240301'

# 2. 기상요소를 입력합니다.
# rn_day(일강수량), ta_max(일 최고기온), ta_max_dif(최고기온차(오늘-어제)), ta_max_min(일교차),
# ta_min(일 최저기온), ta_min_dif(최저기온차(오늘-어제)), ws_max(일 최대풍속), ws_ins_max(일 최대 순간풍속),
# sd_tot_max(최심적설), sd_day_max(최심 신적설)를 입력할 수 있습니다.
obs = 'ta_min'

# 3. 앞에서 확인한 지점번호를 입력합니다.
stn_id = 108

# 4. 도움말추가 여부를 입력합니다.
# 파일 내에 각 필드에 대한 도움말을 확인할 수 있습니다.
help = 1

# API 요청인자들을 묶어 dictionary로 정의합니다.
api_parameters = {
    'tm1': start_time,
    'tm2': end_time,
    'obs': obs,
    'stn': stn_id,
    'help': help,
    'authKey': my_api_key
}

# API 응답을 저장할 파일 형식은 txt 파일로 저장합니다.
file_name = f"aws_day_data_{obs}_{stn_id}_{start_time}_{end_time}.txt"

# 저장된 파일이 없는 경우에만 API를 요청해 파일을 다운로드합니다.
if not os.path.exists(file_name):
    # API 요청인자와 함께 API 요청
    response = requests.get(api_url, params=api_parameters)

    # 잘못된 응답을 받을 경우 에러 메세지 출력
    if response.status_code != 200:
        raise requests.RequestException(
            json.loads(response.content)['result']['message']
        )
    # 짧은 에러메세지를 응답으로 받은 경우 에러 메세지 출력
    elif len(response.content) < 100:
        raise ValueError(response.content.decode('euc-kr').split('#')[2])
    else:
        # 그외의 올바른 응답에 대해서만 UTF-8 txt 파일 형태로 저장합니다.
        with open(file_name, 'wb') as f:
            f.write(response.content.decode('euc-kr').encode('utf-8'))
        print(f"{file_name} 파일 다운로드 완료")
aws_day_data_ta_min_108_20220201_20240301.txt 파일 다운로드 완료

다운로드 받은 AWS 일 통계 파일을 열어 자료를 확인할 수 있습니다.

자료를 읽어 시계열 그래프를 그립니다.

import pandas as pd     # dataframe을 다루는 패키지

# 다운로드 받은 txt파일을 dataframe으로 변환합니다.
# 도움말을 비롯한 파일의 첫 13줄과 마지막 1줄을 제외하여 변환합니다.
# 모든 필드를 사용하지 않고 시간, 값 필드만 사용합니다.
aws_day_data = pd.read_csv(
    file_name,
    skiprows=13,
    skipfooter=1,
    names=['TIME', 'STN_ID', 'LON', 'LAT', 'HT', 'VAL', 'STN_KO'],
    usecols=['TIME', 'VAL'],
    parse_dates=['TIME'],
    index_col=['TIME'],
    engine='python'
)

# dataframe의 첫 5개의 데이터를 표출합니다.
aws_day_data.head(5)

TIME VAL
2022-02-01 -2.7
2022-02-02 -6.0
2022-02-03 -6.9
2022-02-04 -8.2
2022-02-05 -9.7

# AWS 일 통계 자료 시계열 그래프를 표출합니다.

# 그래프를 그릴 크기를 지정합니다.
fig, ax = plt.subplots(1, 1, figsize=(10, 5))

# 그래프의 제목을 지정합니다.
# 제목에 한글 지점명이 사용됩니다.
ax.set_title(
    f"{stn_info[stn_info.index == stn_id]['STN_KO'].iloc[0]}({stn_id}) {obs} "
    f"{aws_day_data.index[0]} - {aws_day_data.index[-1]}")

# 일 통계 자료 시계열 그래프를 그립니다.
sns.lineplot(aws_day_data)

# 그래프를 표출합니다.
plt.show()