정보

    • 업무명     : "rsoi" 패키지를 통해 엘니뇨-남방진동 (El Nino-Southern Oscillation) 자료 다운로드 및 가시화

    • 작성자     : 이상호

    • 작성일     : 2020-03-08

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • 안녕하세요? 기상 연구 및 웹 개발을 담당하고 있는 해솔입니다.

    • El Nino-Southern Oscillation (ENSO)은 지구 대기 순환을 변화시키는 능력으로 인해 지구상에서 가장 중요한 기후 현상 중 하나이며 이는 전 세계 온도와 강수량에 영향을 끼칩니다.

    • 이러한 ENSO는 중부 및 동부 열대 태평양의 수온 변화와 관련된 반복되는 기후 패턴입니다. 약 3 년에서 7 년 사이의 기간 동안 해수면 온도는 일반 태평양에 비해 1-3 °C까지 따뜻하거나 차가워집니다.

    • 이는 ENSO 진동으로서 온난화 또는 냉각화는 열대 지방의 강우 분포에 직접적인 영향뿐만 아니라 미국 및 기타 지역의 날씨에도 큰 영향을 줄 수 있습니다. 엘니뇨 (El Nino) 와 라니냐 (La Nina)는 ENSO 진동의 극단적인 단계입니다. 이 두 단계 사이에는 ENSO 중립이라는 세 번째 단계도 있습니다.

      • 엘니뇨 (El Nino)

        • 중부 및 동부 열대 태평양에서 해수면 또는 평균 해수면 온도 (SST)의 온난화의 경우 인도네시아에서는 강우량이 감소하는 반면 중부 및 동부 열대 태평양에서는 강우량이 증가합니다.

        • 일반적으로 적도를 따라 동쪽에서 서쪽으로 불어오는 지표면 바람 (동풍)은 약화되거나 다른 방향 (서쪽에서 동쪽 또는 서풍)으로 불기 시작합니다. 일반적으로 해수면 온도가 평상시보다 따뜻할수록 El Nino가 강해집니다 (그 반대도 마찬가지).

      • 라니냐 (La Nina)

        • 중부 및 동부 열대 태평양에서 해수면 또는 평균 해수면 온도 (SST)의 냉각화의 경우 인도네시아에서는 강우량이 증가하는 반면 중부 및 동부 열대 태평양에서는 강우량이 감소합니다.

        • 적도를 따라 흐르는 동쪽의 바람은 더욱 강해집니다. 일반적으로 해수면 온도가 평상시보다 낮을수록 La Nina가 강해집니다 (그 반대도 마찬가지).

      • 중립

        • El Nino 또는 La Nina로서 열대 태평양에서 평균 해수면 온도 (SST)는 일반적으로 평균에 가깝습니다.

        • 그러나 바다가 El Nino 또는 La Nina 상태 인 것처럼 보일 수 있으나 대기가 따라 가지 않는 (또는 그 반대) 경우가 있습니다.

    • 따라서 이 포스팅에서는 rsol 패키지를 통해 쉽게 엘니뇨-남방진동 자료 다운로드 및 가시화를 소개해 드리고자 합니다.

     

    [특징]

    • 엘니뇨-남방진동 분석하기 위해서 다운로드 및 가시화 기술이 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

     

    [기능]

    • 자료 다운로드 

    • 가시화

     

    [활용 자료]

    • 없음

     

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

    • 없음

     

    [사용법]

    • 소스 코드 참조

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • R v3.6.3

    • R Studio v1.2.5033

     

     소스 코드

    [명세]

    • 전역 설정

      • 최대 10 자리 설정

      • 메모리 해제

      • 영어 인코딩 설정

      • 폰트 설정

    # Set Option
    memory.limit(size = 9999999999999)
    options(digits = 10)
    Sys.setlocale("LC_TIME", "english")
    font = "Palatino Linotype"

     

    • 라이브러리 읽기

      • rsoi : ENSO 데이터에 쉽게 접근하고 다운로드하는 패키지로서 Sam Albers (2020)에 출시

    # Library Load
    library(extrafont)
    library(tidyverse)
    library(rsoi)
    library(plotly)

     

    • 자료 다운로드

      • rsoi::download_enso를 통해 데이터 프레임 (Data Frame) 형식으로 데이터 다운로드

      • 그 결과 dplyr::glimpse 또는 dplyr::tbl_df를 통해 데이터의 내부 구조를 확인 가능

    dfEnso = rsoi::download_enso()
    
    dplyr::tbl_df(dfEnso)

     

     

    • 가시화

      • 데이터 세트에서 정보는 여전히 숨겨져 있기 때문에 가시화 필요

      • 가시화는 일반적인 정적 탐색 데이터 분석에서 웹 브라우저의 동적 대화식 데이터 시각화에 이르기까지 다양함

      • 특히 R의 기본 plot으로 여러 미학적 측면을 제어 할 수 있으나 Hadley Wickham (2016)이 개발한 ggplot2는 새로운 방법으로 시각화하기 때문에 이를 사용 

     

    • 가시화를 위한 초기 설정

    • ggplot2를 이용한 가시화

    # Visualization Using ggplot2
    sMinDate = "1950-01-01"
    sMaxDate = "2020-01-01"
    
    ggplot(data = dfEnso, aes(x = Date, y = ONI, fill = phase)) +
       theme_bw() +
       geom_col() +
       scale_x_date(expand = c(0, 0), date_breaks = "10 years", date_labels = "%Y", limits = as.Date(c(sMinDate, sMaxDate))) +
       scale_y_continuous(expand = c(0, 0), breaks = seq(-2, 2, 1), limits = c(-2, 2)) +
       labs(
          x = "Date [Year]"
          , y = "ENSO Index"
          , fill = "Phase"
          , title = "El Nino-Southern Oscillation"
          , subtitle = "Period : February 01, 1951 - July 01, 2019"
          , caption = "Source : rsoi"
          ) +
       theme(
          plot.title = element_text(face = "bold", size = 18, color = "black")
          , axis.title.x = element_text(face = "bold", size = 18, colour = "black")
          , axis.title.y = element_text(face = "bold", size =18, colour = "black", angle=90)
          , axis.text.x  = element_text(face = "bold", size = 18, colour = "black")
          , axis.text.y  = element_text(face = "bold", size = 18, colour = "black")
          , legend.title = element_text(face = "bold", size = 14, colour = "black")
          , legend.position = "bottom"
          , legend.justification = c(0, 0.96)
          , legend.key = element_blank()
          , legend.text = element_text(size = 14, colour = "black")
          , legend.background = element_blank()
          , text = element_text(family = font)
          , plot.margin = unit(c(0, 8, 0, 0), "mm")
          ) + 
       ggsave(filename = paste0("FIG2/ggplot2_ENSO_Index.png"), width = 12, height = 8, dpi = 600)

     

     

    [전체]

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

    • saimang0804@gmail.com
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기