정보

    • 업무명     : "rsoi" 패키지를 통해 남방 진동 지수 (Southern Oscillation Index) 자료 다운로드 및 가시화

    • 작성자     : 이상호

    • 작성일     : 2020-03-08

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

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

    • 남방 진동 지수 (SOI)를 기압의 표준화 차이로 정의된다. 이러한 SOI는 엘니뇨 (El Nino)와 라니냐 (La Nina) 동안 서부와 동부 열대 태평양 (즉 남방 진동 상태) 사이에서 발생하는 기압의 대규모 변동의 한 척도입니다.

    • 일반적으로 SOI의 평활화된 시계열은 동부 열대 태평양의 해양 온도 변화와 매우 잘 일치합니다.

    • SOI의 음의 위상은 타히티 (Tahiti)에서 정상 기압 미만이고 다윈 (Darwin)에서 정상 기압 초과를 나타냅니다. 음수 (양수) SOI 값의 연장된 기간은 엘니뇨 (La Nina)의 전형적인 열대 태평양 동부에서 비정상적으로 따뜻한 (차가운) 바닷물과 일치합니다.

    • Sam Albers (2020)는 다양한 북반구와 남반구 기후 지표에 접근할 수있는 rsoi 패키지를 개발했습니다.

      • 이 지수 중 일부는 다음과 같습니다.

      • 남방 진동 지수 (Southern Oscillation Index)

      • 해양 니노 지수 (Oceanic Nino Index)

      • 북태평양 기이 진동 (North Pacific Gyre Oscillation)

      • 북대서양 진동 (North Atlantic Oscillation)

      • 북극 진동 (Arctic Oscillation)

      • 남극 진동 (Antarctic Oscillation)

      • 다변량 ENSO 지수 버전 2 (Multivariate ENSO Index Version 2)

    • 따라서 이 포스팅에서는 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 : SOI 데이터에 쉽게 접근하고 다운로드하는 패키지로서 Sam Albers (2020)에 출시

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

     

    • 자료 다운로드

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

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

    dfSoi = rsoi::download_soi()
    
    dplyr::tbl_df(dfSoi)

     

     

    • 데이터 프레임 (Data Frame) 설정

      • dplyr::mutate를 통해 SOI가 각각 양수 및 음수일 경우 "Positive" "Negative"로 설정

    # Set Data Frame
    dfData = dfSoi %>% 
       dplyr::mutate(
          sPhase = if_else(SOI >= 0, "Positive", "Negative")
       )
    
    dplyr::tbl_df(dfData)

     

     

    • 가시화

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

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

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

     

    • 가시화를 위한 초기 설정

    • ggplot2를 이용한 가시화

    # Visualization Using ggplot2
    sMinDate = "1950-01-01"
    sMaxDate = "2020-02-01"
    
    ggplot(data = dfData, aes(x = Date, y = SOI, fill = sPhase)) +
       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(-3, 3, 1.5), limits = c(-3, 3)) +
       labs(
          x = "Date [Year]"
          , y = "SOI Index"
          , fill = "Phase"
          , title = "Southern Oscillation Index"
          , subtitle = "Period : February 01, 1951 - February 01, 2020"
          , 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_SOI.png"), width = 12, height = 8, dpi = 600)

     

     

    [전체]

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

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