정보

    • 업무명     : 아스키 (ASCII) 형식인 히마와리 8호 (Himawari-8/AHI) 및 Aqua/CERES 기상 위성 자료를 이용한 가시화

    • 작성자     : 이상호

    • 작성일     : 2019-09-03

    • 설   명      :

    • 수정이력 :

      • 2020-02-08 : 소스 코드 명세 추가

     

     내용

    [개요]

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

    • 대기과학에서 제공되는 자료 형식은 "CSV, ASCII, 바이너리 이진 자료 (Binary), NetCDF, HDF4, HDF5, Grib, Grb2, Bufr" 등이 있습니다.

    • 대부분 용도에 맞게 사용하기 때문에 각각 모든 형식에 맞게 자료 전처리 및 가시화는 필연입니다.

    • 예를 들면 기상청의 경우 지상 관측 자료와 기상 위성 자료 및 수치예보 그리고 기타의 경우 각각 "CSV 및 ASCII 형식"와 "NetCDF, HDF4, HDF5" 및 "Grib, Gr2, Bufr" 그리고 "바이너지 이진 자료 (Binary)"로 배포합니다.

    • 오늘은 대기과학에서 사용되는 아스키 (ASCII) 설명뿐만 아니라 Python을 이용하여 자료 전처리 및 가시화를 소개해 드리고자 합니다. 

     

    [특징]

    • 아스키 형태인 기상위성 자료를 이해하기 위해 가시화 도구가 필요하며 이 프로그램은 이러한 목적을 달성하기 위해 고안된 소프트웨어

     

    [기능]

    • 히마와리 8호 (Himawari-8/AHI) 및 Aqua/CERES 자료를 산포도

    • 히마와리 8호 (Himawari-8/AHI) 및 Aqua/CERES 자료를 매핑

     

    [활용 자료]

    • 위성명 : 히마와리 8호 (Himawari-8) 및 Aqua 위성

    • 센서명 : AHI 기상영상기 및 CERES

    • 자료 종류 : 두 위성에 대한 시/공간 일치

    • 영역 : 전구

    • 해상도 : 20 km

    • 도법 : GEOS

    • 기간 : 2016년 10월 01일 - 2016년 10월 01일

     

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

    • 없음

     

    [사용법]

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

    • 소스 코드를 실행 (Jupyter notebook 실행)

    • 가시화 결과를 확인

     

    [사용 OS]

    • Window 10

     

    [사용 언어]

    • Python v2.7

     

     소스 코드

    [명세]

    • 라이브러리 읽기

    # Library
    import pandas as pd
    import numpy as np
    import sys 
    import os
    import matplotlib.pyplot as plt
    from dplython import *
    from scipy.stats import linregress
    from matplotlib import pyplot as plt
    from IPython.display import Image
    from mpl_toolkits.basemap import Basemap
    from matplotlib.colors import Normalize
    import matplotlib
    import matplotlib.cm as cm
    import seaborn as sns
    from scipy.stats import linregress
    from matplotlib import rcParams

     

    • 아스키 자료 읽기

      • 헤더 정보 없음 (None) 및 탭 ("\s+")으로 구성된 형식

      • 1차원 변수 설명

        • 위도 : lon

        • 경도 : lat

        • 태양 천정각 : sza

        • 위성 천정각 : vza

        • 태양 반짝임 : ga

        • CERES의 알베도 : ceres_albedo

        • CERES의 상향단파복사 : ceres_rsr

        • CERES의 투과율 : ceres_trans

        • CERES의 하향단파복사 : ceres_dsr

        • AHI의 알베도 : albedo

        • AHI의 상향단파복사 : rsr

        • AHI의 투과율 : trans

        • AHI의 하향단파복사 : dsr

        • CERES의 지표면 특성 : ceres_landcover

        • CERES의 청천 비율 : ceres_clear_fraction

    col_name = ["lon", "lat", "sza", "vza", "ga", "ceres_albedo", "ceres_rsr", "ceres_trans", "ceres_dsr",
                                   "albedo", "rsr", "trans", "dsr", "ceres_landcover", "ceres_clear_fraction"]
    data = pd.read_csv('scatterplot/Aqua_20161001.OUT', sep='\s+', header=None, names=col_name)
    
    ## longitude, Latitude, Solar zenith angle, Viewing zenith angle, Glint angle, 
    ## CERES TOA albedo, CERES rsr,CERES transmittance, CERES DSR
    ## AHI TOA albedo, AHI rsr,AHI transmittance, AHI DSR
    ## Landcover, Clear fraction
    
    data.head()

     

    lon	lat	sza	vza	ga	ceres_albedo	ceres_rsr	ceres_trans	ceres_dsr	albedo	rsr	trans	dsr	ceres_landcover	ceres_clear_fraction
    0	164.29890	69.59365	73.14393	79.92245	137.22418	0.28245	111.20666	0.69537	273.78278	0.39584	157.02599	0.41791	165.77931	7.0	80.23878
    1	163.81802	69.47059	73.05199	79.73526	137.08733	0.38666	153.04204	0.69396	274.67282	0.43674	173.78233	0.40816	162.38155	7.0	68.69571
    2	163.32581	69.34170	72.95692	79.54124	136.96333	0.42737	170.07726	0.69494	276.56042	0.44227	176.42746	0.39861	158.92216	7.0	57.82848
    3	162.82117	69.20642	72.85841	79.33984	136.76216	0.50349	201.49466	0.59468	237.98872	0.39389	157.97217	0.47839	191.81958	7.0	74.33212
    4	162.30070	69.06348	72.75568	79.12937	136.54288	0.48961	197.07927	0.62871	253.06601	0.39312	158.61792	0.47926	193.38367	7.0	91.84496

     

    • Data Frame를 통해 L1 전처리

      • 최근 데이터 분석에서 사용되는 R의 "dplyr" 라이브러리와 유사한 "dplython"를 사용

      • 각 변수에 대한 최대값 및 최소값 설정

    data_L1 = ( DplyFrame(data) >> 
               sift( (0 <= X.ceres_rsr) & (X.ceres_rsr <= 1400) ) >> 
               sift( (0 <= X.ceres_albedo) & (X.ceres_albedo <= 1) ) >>
               sift( (0 <= X.ceres_dsr) & (X.ceres_dsr <= 1400) ) >>
               sift( (0 <= X.ceres_trans) & (X.ceres_trans <= 1) ) >>
               sift( (0 <= X.rsr) & (X.rsr <= 1400) ) >>
               sift( (0 <= X.albedo) & (X.albedo <= 1) ) >>
               sift( (0 <= X.dsr) & (X.dsr <= 1400) ) >>
               sift( (0 <= X.trans) & (X.trans <= 1) ) >>
               sift( (0 <= X.sza) & (X.sza <= 80) ) >>
               sift( (0 <= X.vza) & (X.vza <= 80) ) 
              )
              
    data_L1.tail()
    # data_L1.shape()

     

    lon	lat	sza	vza	ga	ceres_albedo	ceres_rsr	ceres_trans	ceres_dsr	albedo	rsr	trans	dsr	ceres_landcover	ceres_clear_fraction
    217287	107.81293	66.05418	73.27773	78.59733	105.48730	0.37303	145.75923	0.56433	220.50696	0.28871	112.97610	0.56964	222.91913	19.0	20.41717
    217288	106.92405	66.16212	73.16970	78.90445	105.58343	0.37566	147.70876	0.57739	227.02570	0.27828	109.64127	0.58441	230.25354	19.0	15.90215
    217289	105.58231	66.17186	72.88669	79.24766	105.65680	0.39721	158.72963	0.56058	224.01158	0.31622	126.37793	0.53067	212.12491	19.0	22.54172
    217290	104.35141	66.17069	72.62823	79.56327	105.68446	0.41643	168.84651	0.71449	289.69919	0.30908	125.40505	0.54079	219.42899	19.0	25.50954
    217291	103.22907	66.16121	72.39342	79.85181	105.72047	0.47973	197.05968	0.56496	232.06946	0.33789	138.89148	0.49999	205.62512	19.0	18.92421

     

    • 가시화를 위한 설정
    • 초기 설정
      • 크기 : figure
      • 스타일 : style
      • 폰트 : rc, rcParams
      • 지도 해상도 : Basemap

         

    • 변수 설정
      • 위도 (lon), 경도 (lat), 대기상단에서의 상향단파복사 (rsr)

     

    • 산포도 설정
      • 2D 히스토그램 : histogram2d
      • 통계량 : 편이 (Bias), 상대적인 편이 (rBias), 평균제곱근오차 (RMSE), 상대적인 평균제곱근오차 (rRMSE), 기울기 (slope), 절편 (intercept), 상관계수 (R), 유의수준 (Pvalue), 자료 개수 (N)
      • 그림 위치에 따른 텍스트 삽입 : annotate

     

    • 히마와리 8호 (Himawari-8/AHI)와 Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 산포도

    %matplotlib inline
    
    # define plot size in inches (width, height) & resolution(DPI)
    # plt.figure(figsize=(12.5, 10), dpi=600)
    plt.figure(figsize=(12.5, 10))
    
    # style
    plt.style.use('seaborn-darkgrid')
    # plt.style.use('seaborn-whitegrid')
    
    # define font size
    plt.rc("font", size=22)
    plt.rcParams['font.family'] = 'New Century Schoolbook'
    # plt.rcParams["font.family"] = "Century Schoolbook"
    # rcParams['font.family'] = 'sans-serif'
    plt.rcParams["font.weight"] = "bold"
    plt.rcParams['axes.labelsize'] = 26
    plt.rcParams['xtick.labelsize'] = 26
    plt.rcParams['ytick.labelsize'] = 26
    plt.rcParams["axes.labelweight"] = "bold"
    plt.rcParams["axes.titleweight"] = "bold"
    
    
    # x, y setting
    X = data_L1.rsr
    Y = data_L1.ceres_rsr
    
    # Estimate the 2D histogram
    nbins = 250
    H, xedges, yedges = np.histogram2d(X, Y, bins=nbins)
     
    # H needs to be rotated and flipped
    H = np.rot90(H)
    H = np.flipud(H)
    # Mask zeros
    Hmasked = np.ma.masked_where(H==0,H) # Mask pixels with a value of zero
    
    plt.pcolormesh(xedges, yedges, Hmasked, cmap=cm.get_cmap('rainbow'), vmin=0, vmax=100)
    plt.title("Retrieval of Reflected Shortwave Radiation (RSR) \n at the Top of the Atmosphere using Himawari-8 / AHI data\n")
    plt.xlabel('Himawari-8 / AHI  RSR  $\mathregular{[Wm^{-2}]}$')
    plt.ylabel('Aqua / CERES  RSR  $\mathregular{[Wm^{-2}]}$')
    # plt.ylabel('Wind Speed (ms$\mathregular{^{-1} }$)')
    plt.xlim(0, 1400)
    plt.ylim(0, 1400)
    plt.grid()
    cbar = plt.colorbar()
    cbar.ax.set_ylabel('Frequency')
    
    ## Bias (relative Bias), RMSE (relative RMSE), R, slope, intercept, pvalue
    Bias = np.mean(X-Y)
    rBias = (Bias/np.mean(Y))*100.0
    RMSE = np.sqrt( np.mean((X-Y)**2) )
    rRMSE = (RMSE/np.mean(Y))*100.0
    slope = linregress(X, Y)[0]
    intercept = linregress(X, Y)[1]
    R = linregress(X, Y)[2]
    Pvalue = linregress(X, Y)[3]
    N = len(X)
    
    lmfit = (slope*X)+intercept
    plt.plot(X, lmfit, color='red', linewidth=2)
    plt.plot([0, 1400], [0, 1400], color='black')
    
    print(Bias, rBias, RMSE, rRMSE)
    print(slope, intercept, R, Pvalue, N)
    
    plt.annotate('CERES = %.2f x (AHI) + %.2f' %(slope, intercept), xy=(20, 1350), color='red', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    plt.annotate('R = %.2f  (p-value < %.2f)'   %(R, Pvalue), xy=(20, 1250), color='red', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    plt.annotate('Bias = %.2f  (%%Bias = %.2f %%)' %(Bias, rBias), xy=(20, 1150), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    plt.annotate('RMSE = %.2f  (%%RMSE = %.2f %%)' %(RMSE, rRMSE), xy=(20, 1050), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    plt.annotate('N = %d' %N, xy=(20, 950), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    # plt.savefig("FIG/Scatterplot_Himawari-8_AHI_DSR.png")
    plt.show()

     

    그림. 히마와리 8호 (Himawari-8/AHI)와 Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 산포도.

     

    • 히마와리 8호 (Himawari-8/AHI)와 Aqua/CERES 자료를 이용한 지표면에서의 하향단파복사 산포도

    %matplotlib inline
    
    # define plot size in inches (width, height) & resolution(DPI)
    # plt.figure(figsize=(12.5, 10), dpi=600)
    plt.figure(figsize=(12.5, 10))
    
    # style
    plt.style.use('seaborn-darkgrid')
    # plt.style.use('seaborn-whitegrid')
    # plt.style.use('seaborn-pastel')
    
    # define font size
    plt.rc("font", size=22)
    plt.rcParams['font.family'] = 'New Century Schoolbook'
    # plt.rcParams["font.family"] = "Century Schoolbook"
    # rcParams['font.family'] = 'sans-serif'
    plt.rcParams["font.weight"] = "bold"
    plt.rcParams['axes.labelsize'] = 26
    plt.rcParams['xtick.labelsize'] = 26
    plt.rcParams['ytick.labelsize'] = 26
    plt.rcParams["axes.labelweight"] = "bold"
    plt.rcParams["axes.titleweight"] = "bold"
    
    
    # x, y setting
    X = data_L1.dsr
    Y = data_L1.ceres_dsr
    
    # Estimate the 2D histogram
    nbins = 250
    H, xedges, yedges = np.histogram2d(X, Y, bins=nbins)
     
    # H needs to be rotated and flipped
    H = np.rot90(H)
    H = np.flipud(H)
    # Mask zeros
    Hmasked = np.ma.masked_where(H==0,H) # Mask pixels with a value of zero
    
    plt.pcolormesh(xedges, yedges, Hmasked, cmap=cm.get_cmap('jet'), vmin=0, vmax=100)
    plt.title("Retrieval of Downward Shortwave Radiation (DSR) \n at the Surface using Himawari-8 / AHI data\n")
    plt.xlabel('Himawari-8 / AHI  DSR  $\mathregular{[Wm^{-2}]}$')
    plt.ylabel('Aqua / CERES  DSR  $\mathregular{[Wm^{-2}]}$')
    # plt.ylabel('Wind Speed (ms$\mathregular{^{-1} }$)')
    plt.xlim(0, 1400)
    plt.ylim(0, 1400)
    plt.grid()
    cbar = plt.colorbar()
    cbar.ax.set_ylabel('Frequency')
    
    ## Bias (relative Bias), RMSE (relative RMSE), R, slope, intercept, pvalue
    Bias = np.mean(X-Y)
    rBias = (Bias/np.mean(Y))*100.0
    RMSE = np.sqrt( np.mean((X-Y)**2) )
    rRMSE = (RMSE/np.mean(Y))*100.0
    slope = linregress(X, Y)[0]
    intercept = linregress(X, Y)[1]
    R = linregress(X, Y)[2]
    Pvalue = linregress(X, Y)[3]
    N = len(X)
    
    lmfit = (slope*X)+intercept
    plt.plot(X, lmfit, color='red', linewidth=2)
    plt.plot([0, 1400], [0, 1400], color='black')
    
    print(Bias, rBias, RMSE, rRMSE)
    print(slope, intercept, R, Pvalue, N)
    
    plt.annotate('CERES = %.2f x (AHI) + %.2f' %(slope, intercept), xy=(20, 1350), color='red', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    plt.annotate('R = %.2f  (p-value < %.2f)'   %(R, Pvalue), xy=(20, 1250), color='red', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    plt.annotate('Bias = %.2f  (%%Bias = %.2f %%)' %(Bias, rBias), xy=(20, 1150), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    plt.annotate('RMSE = %.2f  (%%RMSE = %.2f %%)' %(RMSE, rRMSE), xy=(20, 1050), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    plt.annotate('N = %d' %N, xy=(20, 950), color='black', fontweight='bold', xycoords='data', horizontalalignment='left', verticalalignment='center')
    # plt.savefig("FIG/Scatterplot_Himawari-8_AHI_DSR.png")
    plt.show()

     

    그림. 히마와리 8호 (Himawari-8/AHI)와 Aqua/CERES 자료를 이용한 지표면에서의 하향단파복사 산포도.

     

    • 매핑 설정
      • 산점도 : scatter
      • 컬러바 : colorbar
      • 해안선 : drawcostlines, drawcountries, drawmapboundary
      • 수평/수직 그리드 : drawparallels, drawmeridians
      • 그림 제목 : title
      • 그림 위치에 따른 텍스트 삽입 : annotate

     

    • Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 매핑

    %matplotlib inline
    # define plot size in inches (width, height) & resolution(DPI)
    plt.figure(figsize=(12, 10))
    
    # style
    plt.style.use('seaborn-darkgrid')
    
    # define font size
    plt.rc("font", size=22)
    plt.rcParams['font.family'] = 'New Century Schoolbook'
    # plt.rcParams["font.family"] = "Century Schoolbook"
    # rcParams['font.family'] = 'sans-serif'
    plt.rcParams["font.weight"] = "bold"
    plt.rcParams['axes.labelsize'] = 22
    plt.rcParams['xtick.labelsize'] = 22
    plt.rcParams['ytick.labelsize'] = 22
    plt.rcParams["axes.labelweight"] = "bold"
    plt.rcParams["axes.titleweight"] = "bold"
    
    m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
    # c (crude) < l (low) < i (intermediate) < h (high) < f (full)
    # Source: http://seesaawiki.jp/met-python/d/Basemap
    
    x,y = m(data.lon.values, data.lat.values)
    val = data.ceres_rsr.values
    
    m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=0, vmax=1200, cmap=plt.cm.get_cmap('jet'), alpha=1.0) 
    m.colorbar(location='right', label='Reflected  Shortwave  Radiation  (RSR)  $\mathregular{[Wm^{-2}]}$')
    
    m.drawcoastlines()
    m.drawcountries()
    m.drawmapboundary(fill_color='white')
    m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
    m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
    plt.title('RSR using Aqua/CERES on the 1 October, 2016  \n')
    
    plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5))  , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    # plt.savefig("FIG/Scane_analysis_Aqua_CERES_RSR.png")
    plt.show()

     

    Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 매핑.

     

    • 히마와리 8호 (Himawari-8/AHI) 자료를 이용한 대기 상단에서의 상향단파복사 매핑

    
    %matplotlib inline
    # define plot size in inches (width, height) & resolution(DPI)
    plt.figure(figsize=(12, 10))
    
    # style
    plt.style.use('seaborn-darkgrid')
    
    # define font size
    plt.rc("font", size=22)
    plt.rcParams['font.family'] = 'New Century Schoolbook'
    # plt.rcParams["font.family"] = "Century Schoolbook"
    # rcParams['font.family'] = 'sans-serif'
    plt.rcParams["font.weight"] = "bold"
    plt.rcParams['axes.labelsize'] = 26
    plt.rcParams['xtick.labelsize'] = 26
    plt.rcParams['ytick.labelsize'] = 26
    plt.rcParams["axes.labelweight"] = "bold"
    plt.rcParams["axes.titleweight"] = "bold"
    
    m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
    # c (crude) < l (low) < i (intermediate) < h (high) < f (full)
    # Source: http://seesaawiki.jp/met-python/d/Basemap
    
    x,y=m(data.lon.values, data.lat.values)
    val = data.rsr.values
    
    m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=0, vmax=1200, cmap=plt.cm.get_cmap('jet'), alpha=1.0) 
    plt.colorbar(label='Reflected  Shortwave  Radiation  (RSR)  $\mathregular{[Wm^{-2}]}$')
    
    m.drawcoastlines()
    m.drawcountries()
    m.drawmapboundary(fill_color='white')
    m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
    m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
    plt.title('RSR using Himawari-8/AHI on the 1 October, 2016  \n')
    
    plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5))  , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    # plt.savefig("FIG/Scane_analysis_Himawari-8_AHI_RSR.png")
    plt.show()

     

    그림. 히마와리 8호 (Himawari-8/AHI) 자료를 이용한 대기 상단에서의 상향단파복사 매핑.

     

    • 히마와리 8호 (Himawari-8) 및 Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 백분율 오차 매핑

    %matplotlib inline
    # define plot size in inches (width, height) & resolution(DPI)
    plt.figure(figsize=(12, 10))
    
    # style
    plt.style.use('seaborn-darkgrid')
    
    # define font size
    plt.rc("font", size=22)
    plt.rcParams['font.family'] = 'New Century Schoolbook'
    # plt.rcParams["font.family"] = "Century Schoolbook"
    # rcParams['font.family'] = 'sans-serif'
    plt.rcParams["font.weight"] = "bold"
    plt.rcParams['axes.labelsize'] = 22
    plt.rcParams['xtick.labelsize'] = 22
    plt.rcParams['ytick.labelsize'] = 22
    plt.rcParams["axes.labelweight"] = "bold"
    plt.rcParams["axes.titleweight"] = "bold"
    
    m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
    # c (crude) < l (low) < i (intermediate) < h (high) < f (full)
    # Source: http://seesaawiki.jp/met-python/d/Basemap
    
    x,y=m(data.lon.values, data.lat.values)
    val = ((data.rsr.values - data.ceres_rsr.values)/data.ceres_rsr.values)*100.0
    
    m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=-100, vmax=100, cmap=plt.cm.get_cmap('RdBu'), alpha=1.0) 
    plt.colorbar(label='Percent  Error  [%]')
    
    m.drawcoastlines()
    m.drawcountries()
    m.drawmapboundary(fill_color='white')
    m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
    m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
    plt.title('Percent error between Himwari-8/AHI \n and Aqua/CERES data sets on the 1 October, 2016  \n')
    
    plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5))  , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    # plt.savefig("FIG/Scane_analysis RSR_Percent error_between_AHI and CERES.png")
    plt.show()

     

    그림. 히마와리 8호 (Himawari-8/AHI) 및 Aqua/CERES 자료를 이용한 대기 상단에서의 상향단파복사 백분율 오차.

     

    • Aqua/CERES 자료를 이용한 지표면에서의 하향단파복사 매핑

    %matplotlib inline
    
    # define plot size in inches (width, height) & resolution(DPI)
    plt.figure(figsize=(12, 10))
    
    # style
    plt.style.use('seaborn-darkgrid')
    
    # define font size
    plt.rc("font", size=22)
    plt.rcParams['font.family'] = 'New Century Schoolbook'
    # plt.rcParams["font.family"] = "Century Schoolbook"
    # rcParams['font.family'] = 'sans-serif'
    plt.rcParams["font.weight"] = "bold"
    plt.rcParams['axes.labelsize'] = 22
    plt.rcParams['xtick.labelsize'] = 22
    plt.rcParams['ytick.labelsize'] = 22
    plt.rcParams["axes.labelweight"] = "bold"
    plt.rcParams["axes.titleweight"] = "bold"
    
    m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
    # c (crude) < l (low) < i (intermediate) < h (high) < f (full)
    # Source: http://seesaawiki.jp/met-python/d/Basemap
    
    x,y=m(data.lon.values, data.lat.values)
    val = data.ceres_dsr.values
    
    m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=0, vmax=1200, cmap=plt.cm.get_cmap('rainbow'), alpha=1.0) 
    # plt.colorbar(label='Downward  Shortwave  Radiation  (DSR)  $\mathregular{[Wm^{-2}]}$')
    plt.colorbar(label='Downward  Shortwave  Radiation  (DSR)  $\mathregular{[Wm^{-2}]}$')
    
    m.drawcoastlines()
    m.drawcountries()
    m.drawmapboundary(fill_color='white')
    m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
    m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
    plt.title('DSR using Aqua/CERES on the 1 October, 2016  \n')
    
    plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5))  , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    # plt.savefig("FIG/Scane_analysis_Aqua_CERES_DSR.png")
    plt.show()

     

     

    • 히마와리 8호 (Himawari-8/AHI) 자료를 이용한 지표면에서의 하향단파복사 매핑

    %matplotlib inline
    
    # define plot size in inches (width, height) & resolution(DPI)
    plt.figure(figsize=(12, 10))
    
    # style
    plt.style.use('seaborn-darkgrid')
    
    # define font size
    plt.rc("font", size=22)
    plt.rcParams['font.family'] = 'New Century Schoolbook'
    # plt.rcParams["font.family"] = "Century Schoolbook"
    # rcParams['font.family'] = 'sans-serif'
    plt.rcParams["font.weight"] = "bold"
    plt.rcParams['axes.labelsize'] = 22
    plt.rcParams['xtick.labelsize'] = 22
    plt.rcParams['ytick.labelsize'] = 22
    plt.rcParams["axes.labelweight"] = "bold"
    plt.rcParams["axes.titleweight"] = "bold"
    
    m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
    # c (crude) < l (low) < i (intermediate) < h (high) < f (full)
    # Source: http://seesaawiki.jp/met-python/d/Basemap
    
    x,y=m(data.lon.values, data.lat.values)
    val = data.dsr.values
    
    m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=0, vmax=1200, cmap=plt.cm.get_cmap('rainbow'), alpha=1.0) 
    plt.colorbar(label='Downward  Shortwave  Radiation  (DSR)  $\mathregular{[Wm^{-2}]}$')
    
    m.drawcoastlines()
    m.drawcountries()
    m.drawmapboundary(fill_color='white')
    m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
    m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
    plt.title('DSR using Himawari-8/AHI on the 1 October, 2016  \n')
    
    plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5))  , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    # plt.savefig("FIG/Scane_analysis_Himawari-8_AHI_DSR.png")
    plt.show()

     

     

    • 히마와리 8호 (Himawari-8) 및 Aqua/CERES 자료를 이용한 지표면에서의 하향단파복사 백분율 오차 매핑

    %matplotlib inline
    # define plot size in inches (width, height) & resolution(DPI)
    plt.figure(figsize=(12, 10))
    
    # style
    plt.style.use('seaborn-darkgrid')
    
    # define font size
    plt.rc("font", size=22)
    plt.rcParams['font.family'] = 'New Century Schoolbook'
    # plt.rcParams["font.family"] = "Century Schoolbook"
    # rcParams['font.family'] = 'sans-serif'
    plt.rcParams["font.weight"] = "bold"
    plt.rcParams['axes.labelsize'] = 22
    plt.rcParams['xtick.labelsize'] = 22
    plt.rcParams['ytick.labelsize'] = 22
    plt.rcParams["axes.labelweight"] = "bold"
    plt.rcParams["axes.titleweight"] = "bold"
    
    m = Basemap(projection='ortho', lon_0=140.714793, lat_0=-0.007606, resolution='c')
    # c (crude) < l (low) < i (intermediate) < h (high) < f (full)
    # Source: http://seesaawiki.jp/met-python/d/Basemap
    
    x,y=m(data.lon.values, data.lat.values)
    val = ((data.dsr.values - data.ceres_dsr.values)/data.ceres_dsr.values)*100.0
    
    m.scatter(x, y, c=val, s=1.0, marker="s", zorder=1, vmin=-100, vmax=100, cmap=plt.cm.get_cmap('PiYG'), alpha=1.0) 
    plt.colorbar(label='Percentage  Error  [%]')
    
    m.drawcoastlines()
    m.drawcountries()
    m.drawmapboundary(fill_color='white')
    m.drawparallels(np.arange(-60.,61.,30.),labels=[1,0,0,0],dashes=[2,2])
    m.drawmeridians(np.arange(-160.,200.,30.),labels=[0,0,0,1],dashes=[2,2])
    plt.title('Percent error between Himwari-8/AHI \n and Aqua/CERES data sets on the 1 October, 2016  \n')
    
    plt.annotate(u'60\N{DEGREE SIGN}S', xy=(m(170, -62.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}S', xy=(m(170, -32.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'30\N{DEGREE SIGN}N', xy=(m(170, +27.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'60\N{DEGREE SIGN}N', xy=(m(170, +57.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'80\N{DEGREE SIGN}E', xy=(m(80, -2.5))  , color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'110\N{DEGREE SIGN}E', xy=(m(110, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'140\N{DEGREE SIGN}E', xy=(m(140, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'170\N{DEGREE SIGN}E', xy=(m(170, -2.5)), color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    plt.annotate(u'160\N{DEGREE SIGN}W', xy=(m(-160, -2.5)),color='black', fontweight='bold', xycoords='data', horizontalalignment='center', verticalalignment='top')
    # plt.savefig("FIG/Scane_analysis DSR_Percent error_between_AHI and CERES.png")
    plt.show()

     

    그림. 히마와리 8호 (Himawari-8) 및 Aqua/CERES 자료를 이용한 지표면에서의 하향단파복사 백분율 오차 매핑.

     

    [전체]

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

    • saimang0804@gmail.com

     

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