정보
-
업무명 : 고층/상층 기상 자료 (라디오존데)를 이용한 전처리 및 단열선도 (Skew T Log P) 가시화
-
작성자 : 이상호
-
작성일 : 2019-12-31
-
설 명 :
-
수정이력 :
내용
[특징]
-
고층/상층 기상 자료 (라디오존데)를 이해하기 위해서 가시화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어
[기능]
-
고층/상층 기상 자료를 이용한 전처리
-
단열선도 (Skew T log p) 가시화
[활용 자료]
-
자료명 : 라디오존데
-
자료 종류 : 관측소 번호, 날짜, 시간, 압력, 고도, 온도, 습도, 풍향, 풍속
-
영역 : 한반도
-
확장자 : csv
-
기간 : 2000년 06월 01일 - 2016년 12월 31일
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
입력 자료를 동일 디렉터리 위치
-
소스 코드를 실행 (Rscript Visualization_and_Preprocessing_Using_Upper_Weather_Data.R)
-
가시화 결과를 확인
[사용 OS]
-
Windows10
[사용 언어]
-
R v3.6.2
-
R Studio v1.2.5033
소스 코드
[명세]
-
전역 설정
-
최대 10 자리 설정
-
폰트 설정
-
# Set Option
options(digits = 10)
font = "Palatino Linotype"
-
라이브러리 읽기
# Library Load
library(data.table)
library(tidyverse)
library(lubridate)
library(RadioSonde)
-
파일 읽기
# File Read
dfData = fread("total.dat")
colnames(dfData) = c("st", "year", "month", "day", "hour", "minute", "press", "geo", "temp", "dewpt", "dir", "wspd", NA, NA, NA)
dplyr::glimpse(dfData)
-
Data Frame를 통해 L1 전처리
-
결측값 (-999.0)을 NA로 변경
-
연/월/일 숫자를 날짜 형식으로 변경
-
풍속/풍향을 U/V 벡터로 변환
-
# Set Data Frame
dfDataL1 = dfData %>%
replace(., . == -999.0, NA) %>% # Convert -999.0 to NA
dplyr::mutate(
dtDate = lubridate::make_date(year, month, day)
, nYear = lubridate::year(dtDate)
, nMonth = lubridate::month(dtDate)
, xranYm = nYear + ((nMonth - 1) / 12.0)
, uwind = wspd * sin(-dir * pi / 180.0)
, vwind = wspd * cos(-dir * pi / 180.0)
)
dplyr::tbl_df(dfDataL1)
dplyr::glimpse(dfDataL1)
-
L1 자료를 통해 L2 전처리
-
기준 기압 (nRefPre)으로 필터
-
관측소 번호/년/월/기압에 따라 평균, NA 개수, Not NA 개수, 정상화율 계산
-
# L2 Processing Using L1 Data Frame
nRefPre = c(925, 850, 700, 500, 400, 300, 250, 200, 150, 100, 70, 50, 30, 20, 10, 7, 5, 3, 2, 1.5, 1)
dfDataL2 = dfDataL1 %>%
dplyr::filter(press %in% nRefPre) %>%
group_by(st, nYear, nMonth, press) %>%
summarise(
nMeanTemp = mean(temp, na.rm = TRUE)
, nMeanDewpt = mean(dewpt, na.rm = TRUE)
, nMeanUwind = mean(uwind, na.rm = TRUE)
, nMeanVwind = mean(vwind, na.rm = TRUE)
, nMeanWspd = mean(wspd, na.rm = TRUE)
, nMeanDir = mean(dir, na.rm = TRUE)
, iNumber = n()
# NA Numer
, iNumberTempNa = sum(is.na(temp))
, iNumberDewptNa = sum(is.na(dewpt))
, iNumberUwindNa = sum(is.na(uwind))
, iNumberVwindNa = sum(is.na(vwind))
, iNumberWspdNa = sum(is.na(wspd))
, iNumberDirNa = sum(is.na(dir))
# Not Na Number
, iNumberTemp = sum(! is.na(temp))
, iNumberDewpt = sum(! is.na(dewpt))
, iNumberUwind = sum(! is.na(uwind))
, iNumberVwind = sum(! is.na(vwind))
, iNumberWspd = sum(! is.na(wspd))
, iNumberDir = sum(! is.na(dir))
# (N-NA)/N * 100 %
, iPerExistTemp = (iNumberTemp/ iNumber) * 100.0
, iPerExistDewpt = (iNumberDewpt / iNumber) * 100.0
, iPerExistUwind = (iNumberUwind / iNumber) * 100.0
, iPerExistVwind = (iNumberVwind / iNumber) * 100.0
, iPerExistWspd = (iNumberWspd / iNumber) * 100.0
, iPerExistDir = (iNumberDir / iNumber) * 100.0
)
dplyr::glimpse(dfDataL2)
-
L2 자료를 통해 출력
# Write Using L3 Data Frame
data.table::fwrite(
dfDataL2
, sep = ","
, file = "OUTPUT/dfDataL2.csv"
, append = FALSE
, row.names = FALSE
, col.names = TRUE
, dateTimeAs = "write.csv"
, na = NA
)
-
L2 자료를 통해 L3 전처리
-
온도, 이슬점온도, U/V 벡터, 풍향, 풍속에서 정상화율 90 % 이상 필터
-
# L3 Processing Using L2 Data Frame
dfDataL3 = dfDataL2 %>%
dplyr::filter(
iPerExistTemp >= 90.0
, iPerExistDewpt >= 90.0
, iPerExistUwind >= 90.0
, iPerExistVwind >= 90.0
, iPerExistWspd >= 90.0
, iPerExistDir >= 90.0
)
dplyr::glimpse(dfDataL3)
-
L3 자료를 출력
# Write Using L3 Data Frame
data.table::fwrite(
dfDataL3
, sep = ","
, file = "OUTPUT/dfDataL3.csv"
, append = FALSE
, row.names = FALSE
, col.names = TRUE
, dateTimeAs = "write.csv"
, na = NA
)
-
L3 자료를 통해 L4 전처리
-
관측소 번호, 년, 월을 각각 186, 2016, 12에 대해 필터
-
이름 변경 (예시. nMeanTemp → Temp)
-
# L4 Processing Using L3 Data Frame
dfDataL4 = dfDataL3 %>%
dplyr::filter(
st == 186
, nYear == 2016
, nMonth == 12
) %>%
dplyr::rename(
temp = nMeanTemp
, dewpt = nMeanDewpt
, uwind = nMeanUwind
, vwind = nMeanVwind
, wspd = nMeanWspd
, dir = nMeanDir
)
dplyr::glimpse(dfDataL4)
-
plotsonde 라이브러리를 통해 가시화
# Visualization Using plotsonde
png("Fig/SkewT_LogP.png", width = 1000, height = 1200, res = 140)
RadioSonde::plotsonde(dfDataL4, winds = FALSE, col = c(2, 4), lw = 2)
dev.off()
[전체]
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
'프로그래밍 언어 > R' 카테고리의 다른 글
[R] 직달 일사량 자료를 이용한 일조량 산출 및 비교 분석 (0) | 2020.01.06 |
---|---|
[R] KLAPS 수치예측 모델 자료를 이용하여 내삽 방법 (Inverse Distance Weighting, Linear Interpolation)에 따른 전처리 및 가시화 (0) | 2020.01.03 |
[R] 새해 경자년에 해돋이/일출/해 뜨는 시간 가시화 (0) | 2019.12.31 |
[R] NetCDF 형식인 NPP/CERES SSF 1deg 기상위성 자료를 이용한 가시화 (0) | 2019.12.30 |
[R] NetCDF 형식인 NPP/CERES SSF 기상위성 자료를 이용하여 아스키 (ASCII) 형식으로 처리 (0) | 2019.12.28 |
최근댓글