[R] NetCDF 형식인 NPP/CERES SSF 기상위성 자료를 이용하여 아스키 (ASCII) 형식으로 처리

 정보

  • 업무명     : NetCDF 형식인 NPP/CERES SSF 기상위성 자료를 이용하여 아스키 (ASCII) 형식으로 처리

  • 작성자     : 이상호

  • 작성일     : 2019-12-27

  • 설   명      :

  • 수정이력 :

 

 내용

[특징]

  • NetCDF 형태인 기상위성 자료를 가시화하기 위해서 ASC 형태로 변환이 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

 

[기능]

  • NPP/CERES SSF 기상위성 자료를 이용하여 ASC 형태로 처리

 

[활용 자료]

  • 위성명 : NPP 기상위성

  • 센서명 : CERES

  • 자료 레벨 : SSF

  • 자료 종류 : 날짜, 시간, 위도, 경도, 태양 천정각, 대기 상단에서의 상향단파복사, 대기 상단에서의 하향단파복사, 지표면 특성, 운량

  • 영역 : 전지구

  • 해상도 : 20 km

  • 확장자 : NetCDF

  • 기간 : 2012년 03월 15일 0000-2300 UTC

 

[자료 처리 방안 및 활용 분석 기법]

  • 없음

 

[사용법]

  • 입력 자료를 동일 디렉터리 위치

  • 소스 코드를 실행 (Rscript Processing_Using_NetCDF_Format_of_NPP_CERES_SSF_Data.R)

  • ASC 형태인 결과를 확인

 

[사용 OS]

  • Windows10

 

[사용 언어]

  • R v3.6.2

  • R Studio v1.2.5033

 

 소스 코드

[명세]

  • 메모리 해제

# Set Option
memory.limit(size = 9999999999999)

 

  • 라이브러리 읽기

# Library Load
library(RNetCDF)
library(tidyverse)
library(lubridate)

 

  • 파일 읽기

# File Read
sInputFileDirName = "INPUT_SSF15/*.nc"
sFileDirName = Sys.glob(sInputFileDirName)

length(sFileDirName)
sFileDirName

 

 

  • NetCDF 파일 읽기

# NetCDF File Open
ncFile = open.nc(sFileDirName[iCount])

 

  • 출력을 위한 파일명 초기화

# Set Output File Name
sFileDirNameSplit = unlist(str_split(string = sFileDirName[iCount], pattern = "_|/|\\."))
   
sOutputFileDirName = paste0('OUTPUT/', sFileDirNameSplit[5], "_", sFileDirNameSplit[8], ".OUT")

 

 

  • NetCDF 파일 읽기

# NetCDF File Read
ncData = read.nc(ncFile)

 

  • NetCDF 파일 갯수 및 Time 단위 가져오기

# Get Time Unit
nFileNumber = dim.inq.nc(ncFile, "time")$length
sTimeUnit = att.get.nc(ncFile, "time", "units")

 

 

  • NetCDF 변수 가져오기

# Get Variable
nDateTime = utcal.nc(sTimeUnit, ncData$time)
nLon  = ncData[["lon"]]
nLat  = ncData[["lat"]]
nSza  = ncData[["CERES_solar_zenith_at_surface"]]
nRsr  = ncData[["CERES_SW_TOA_flux___upwards"]]
nInsw = ncData[["TOA_Incoming_Solar_Radiation"]]
nDsr  = ncData[["CERES_downward_SW_surface_flux___Model_B"]]
nSurfaceType = ncData[["Surface_type_index"]][1, ]
nClearFraction = ncData[["Clear_layer_overlap_percent_coverages"]][1, ]

 

  • NetCDF 변수들을 Data Frame 형태로 초기화

# Set Data Frame
dfData = data.frame(nDateTime, nLat, nLon, nSza, nRsr, nInsw, nDsr, nSurfaceType, nClearFraction)

 # Print Data Frame
dplyr::tbl_df(dfData)

 

 

  • Data Frame를 통해 L1 전처리

    • 각 변수에 따라 최소값/최대값 설정

# L1 Processing Using Data Frame
dfDataL1 = dfData %>%
   dplyr::filter(
      between(nLat, -90.0, 90.0)
      , between(nLon, -180.0, 180.0)
      , between(nSza, 0.0, 180.0)
      , between(nRsr, 0.0, 1400.0)
      , between(nInsw, 0.0, 1400.0)
      , between(nDsr, 0.0, 1400.0)
      , between(nSurfaceType, 1, 120)
      , between(nClearFraction, 0, 100)
   )
   
# Print Data Frame
dplyr::tbl_df(dfDataL1)

 

 

  • L1 자료를 이용해서 L2 전처리

    • NA 제거

# Delete NA Using L1 Data Frame
dfDataL2 = na.omit(dfDataL1)
   
# Print Data Frame
dplyr::tbl_df(dfDataL2)

 

 

  • L2 자료를 출력

    • 옵션 설명

      • sep : 구분자

      • file : 출력 파일명

      • append : 이어쓰기 여부

      • row.names : 행 이름 포함 여부 

      • col.names : 열 이름 포함 여부

 # Write Using L2 Data Frame
write.table(
   dfDataL2
   , sep = " "
   , file = sOutputFileDirName
   , append = FALSE
   , row.names = FALSE
   , col.names = FALSE
)

 

 

 

[전체]

 

 

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

[기상학/프로그래밍 언어]

  • sangho.lee.1990@gmail.com

[해양학/천문학/빅데이터]

  • saimang0804@gmail.com