반응형

     정보

    • 업무명     : HDF 형식인 천리안위성 1A호 (COMS/MI) 기상위성 자료를 이용한 가시화

    • 작성자     : 이상호

    • 작성일     : 2019-10-22

    • 설   명      :

    • 수정이력 :

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

     

     내용 

    [개요]

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

    • 일반적으로 기상 자료의 경우 자료값뿐만 아니라 조건으로 기록된 메타 데이터 정보가 있습니다. 이러한 메타 정보는 적절하게 관리하기 위해서 필연입니다. 일반적으로 기상청에서 제공하는 자료는 독자적 또는 범용 바이너리 및 텍스트로 제공하고 있습니다.

    • 텍스트의 경우 매우 간단한 형식이기 때문에 사용 OS에 관계없이 내용을 확인할 수 있는 범용성이 있습니다. 그러나 메타 정보를 쓰기에 편리하나 사용자가 읽기에는 다수의 문자열로 인해 어렵습니다.

    • 범용 바이너리 형식 중에 하나인 HDF는 하나의 파일에 계층 구조를 갖으며 데이터 (문자, 숫자, 행렬, 이미지 등)를 저장할 수 있습니다. 또한 메타 정보에 대해 쓰기 및 읽기의 경우 텍스트 형식에 비해 조작이 간단하며 이해하기 쉽습니다.

    • "The HDF Group"의 공식 사이트에서 소개한 바에 따르면 HDF는 I/O 속도도 빠르고 대용량 데이터도 처리할 수 있는 오픈 소스 포맷일 뿐만 아니라 학술 연구에서 산업까지 폭 넓은 분야에서 사용할 수 있다고 합니다. 또한 최근 4차 산업혁명 (AI) 시대에 사용되는 "keras""chainer" 등의 신경망 라이브러리 학습 결과를 저장하는 방식으로 이용되고 있습니다.

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

     

     

    [특징]

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

     

    [기능]

    • 천리안위성 1A호 (COMS/MI) 기상위성 자료를 이용한 가시화

     

    [활용 자료]

    • 위성명 : 천리안위성 1A호 (COMS)

    • 센서명 : MI 기상영상기

    • 자료종류 : 에어로졸 광학두께

    • 영역 : 북반구

    • 해상도 : 5 km

    • 도법 : GEOS

    • 확장자 : .hdf

    • 기간 : 2014년 02월 01일 0000 UTC (0900 KST)

     

    • 위/경도 자료

    coms_cn_geos_lonlat.zip
    6.53MB
    coms_cn_geos_lonlat.z01
    10.00MB

     

    • 기상위성 자료에 필요한 입력 자료 (위도 및 경도, 복사량 변환 테이블) 소개

     

    [연구개발] 기상위성 자료에 필요한 입력 자료 (위도 및 경도, 복사량 변환 테이블) 소개

     정보 업무명  : 기상위성 자료에 필요한 입력자료 (위도 및 경도, 복사량 변환 테이블) 소개 작성자  : 이상호 작성일  : 2020-01-08 설  명 : 수정이력 :  내용 [개요] 안녕하세요? 기상 연구 및 웹

    shlee1990.tistory.com

     

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

    • 없음

     

    [사용법]

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

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

    • 가시화 결과를 확인

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • Python 2.7

     소스 코드

    [명세]

    • 라이브러리 읽기

      • HDF5 읽기 : h5py

      • 데이터 전처리 : dplython

      • 가시화 : matplot

    # Library
    import pandas as pd
    import numpy as np
    import sys 
    # import iris
    import os
    import matplotlib.pyplot as plt
    from dplython import *
        # (DplyFrame, X, diamonds, select, sift, sample_n,
        #     sample_frac, head, arrange, mutate, group_by, summarize, DelayFunction) 
    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
    from netCDF4 import Dataset
    import struct
    import binascii
    from mpl_toolkits.basemap import addcyclic
    from netCDF4 import num2date, date2num, date2index
    import datetime
    from pyhdf.SD import SD, SDC
    import h5py

     

    • HDF5 위/경도 파일 읽기

    hdffile = 'MI/coms_cn_geos_lonlat.hdf'
    hdffile_sd = SD(hdffile, SDC.READ)
    
    print(hdffile_sd.info())

     

    • HDF5 위/경도 헤더 보기

      • 원도우 (Window)에서 ncdump를 사용할 경우 Anaconda Cloud에서 "conda install -c anaconda hdf5" 설치 필요

      • ncdump 외에 The HDF Group에서 제공하는 "hdfview" 도구가 있으니 참고 바램

     

     

    HDF® View - The HDF Group

    Download the Latest Version Current Release: HDFView 3.1.0 HDFView Software HDFView software consists of the HDFView utility and the Java HDF Object Package. HDFView is a visual tool written in Java for browsing and editing HDF (HDF5 and HDF4) files. Using

    www.hdfgroup.org

     

    !hdp dumpsds -h MI/coms_cn_geos_lonlat.hdf

     

    File name: MI/coms_cn_geos_lonlat.hdf 
    
    Variable Name = Lat
    	 Index = 0
    	 Type= 32-bit floating point
    	 Ref. = 2
    	 Compression method = NONE
    	 Rank = 2
    	 Number of attributes = 0
    	 Dim0: Name=fakeDim0
    		 Size = 1544
    		 Scale Type = number-type not set
    		 Number of attributes = 0
    	 Dim1: Name=fakeDim1
    		 Size = 1934
    		 Scale Type = number-type not set
    		 Number of attributes = 0
    
    Variable Name = Lon
    	 Index = 1
    	 Type= 32-bit floating point
    	 Ref. = 4
    	 Compression method = NONE
    	 Rank = 2
    	 Number of attributes = 0
    	 Dim0: Name=fakeDim2
    		 Size = 1544
    		 Scale Type = number-type not set
    		 Number of attributes = 0
    	 Dim1: Name=fakeDim3
    		 Size = 1934
    		 Scale Type = number-type not set
    		 Number of attributes = 0

     

    • HDF5 위/경도 파일에서 세부 정보 보기

      • 위도, 경도에 대해 2차원 배열을 지님
    # select sds
    lat_sds = hdffile_sd.select('Lat')
    lon_sds = hdffile_sd.select('Lon')
    
    lat2D = lat_sds.get() # get sds data
    lon2D = lon_sds.get()
    
    print(lat2D.shape,lon2D.shape)

     

    ((1544L, 1934L), (1544L, 1934L))

     

    • HDF5 에어로졸 광학두께 읽기

      • 해당 산출물에 대한 값 (values) 및 목록 (items) 확인

    h5file = h5py.File('MI/coms_mi_le2_aod_cn_201402010000.h5', 'r')
    
    # print(list(h5file['Product/'].keys()))
    print(h5file['Product/'].values())
    print(h5file['Product/'].items())

     

    [<HDF5 dataset "Aerosol_Optical_Depth": shape (1544, 1934), type "<i2">, <HDF5 dataset "Aerosol_Optical_Depth_Quality_Flag": shape (1544, 1934), type "|i1">, <HDF5 dataset "Aerosol_Optical_Depth_Visibility": shape (1544, 1934), type "<i2">]
    [(u'Aerosol_Optical_Depth', <HDF5 dataset "Aerosol_Optical_Depth": shape (1544, 1934), type "<i2">), (u'Aerosol_Optical_Depth_Quality_Flag', <HDF5 dataset "Aerosol_Optical_Depth_Quality_Flag": shape (1544, 1934), type "|i1">), (u'Aerosol_Optical_Depth_Visibility', <HDF5 dataset "Aerosol_Optical_Depth_Visibility": shape (1544, 1934), type "<i2">)]

     

    • HDF5 에어로졸 광학두께 헤더 보기

    !h5dump -A MI/coms_mi_le2_aod_cn_201402010000.h5

     

    HDF5 "MI/coms_mi_le2_aod_cn_201402010000.h5" {
    GROUP "/" {
       GROUP "Basic_Information" {
          ATTRIBUTE "CMDPS_Version" {
             DATATYPE  H5T_STRING {
                STRSIZE 10;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SCALAR
             DATA {
             (0): "cmdps_v4.0"
             }
          }
          ATTRIBUTE "Data_Format" {
             DATATYPE  H5T_STRING {
                STRSIZE 4;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SCALAR
             DATA {
             (0): "HDF5"
             }
          }
          ATTRIBUTE "Image_Observation_Area" {
             DATATYPE  H5T_STRING {
                STRSIZE 2;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SCALAR
             DATA {
             (0): "cn"
             }
          }
          ATTRIBUTE "Image_Observation_Time" {
             DATATYPE  H5T_STRING {
                STRSIZE 13;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SCALAR
             DATA {
             (0): "20140201.0000"
             }
          }
          ATTRIBUTE "Product_Name" {
             DATATYPE  H5T_STRING {
                STRSIZE 4;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SCALAR
             DATA {
             (0): "AOD2"
             }
          }
          ATTRIBUTE "Satellite_Name" {
             DATATYPE  H5T_STRING {
                STRSIZE 4;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SCALAR
             DATA {
             (0): "coms"
             }
          }
          ATTRIBUTE "Used_Channels" {
             DATATYPE  H5T_STRING {
                STRSIZE 5;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SCALAR
             DATA {
             (0): "\000\000\000\000\000"
             }
          }
       }
       GROUP "Map_Projection_Information" {
          ATTRIBUTE "Central_Lat" {
             DATATYPE  H5T_IEEE_F32LE
             DATASPACE  SCALAR
             DATA {
             (0): 0
             }
          }
          ATTRIBUTE "Central_Lon" {
             DATATYPE  H5T_IEEE_F32LE
             DATASPACE  SCALAR
             DATA {
             (0): 128.2
             }
          }
          ATTRIBUTE "Column_Offset" {
             DATATYPE  H5T_STD_I32LE
             DATASPACE  SCALAR
             DATA {
             (0): 967
             }
          }
          ATTRIBUTE "Column_Scaling_Factor" {
             DATATYPE  H5T_STD_I32LE
             DATASPACE  SCALAR
             DATA {
             (0): 10212669
             }
          }
          ATTRIBUTE "EW_Resolution" {
             DATATYPE  H5T_IEEE_F32LE
             DATASPACE  SCALAR
             DATA {
             (0): 4
             }
          }
          ATTRIBUTE "Image_Boundary_Position" {
             DATATYPE  H5T_IEEE_F32LE
             DATASPACE  SIMPLE { ( 2, 4 ) / ( 2, 4 ) }
             DATA {
             (0,0): -999, -999, -999, -999,
             (1,0): -999, -999, -999, -999
             }
          }
          ATTRIBUTE "Line_Offset" {
             DATATYPE  H5T_STD_I32LE
             DATASPACE  SCALAR
             DATA {
             (0): 1263
             }
          }
          ATTRIBUTE "Line_Scaling_Factor" {
             DATATYPE  H5T_STD_I32LE
             DATASPACE  SCALAR
             DATA {
             (0): -10212669
             }
          }
          ATTRIBUTE "Map_Projection_Name" {
             DATATYPE  H5T_STRING {
                STRSIZE 4;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SCALAR
             DATA {
             (0): "GEOS"
             }
          }
          ATTRIBUTE "NS_Resolution" {
             DATATYPE  H5T_IEEE_F32LE
             DATASPACE  SCALAR
             DATA {
             (0): 4
             }
          }
          ATTRIBUTE "Radius_of_Earth" {
             DATATYPE  H5T_IEEE_F32LE
             DATASPACE  SCALAR
             DATA {
             (0): 6.37e+006
             }
          }
       }
       GROUP "Product" {
          ATTRIBUTE "Number_of_Parameter" {
             DATATYPE  H5T_STD_I32LE
             DATASPACE  SCALAR
             DATA {
             (0): 7
             }
          }
          ATTRIBUTE "Total_Data_Size" {
             DATATYPE  H5T_STD_I32LE
             DATASPACE  SCALAR
             DATA {
             (0): 119443840
             }
          }
          DATASET "Aerosol_Optical_Depth" {
             DATATYPE  H5T_STD_I16LE
             DATASPACE  SIMPLE { ( 1544, 1934 ) / ( 1544, 1934 ) }
             ATTRIBUTE "Data_Type" {
                DATATYPE  H5T_STRING {
                   STRSIZE 9;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "STD_I16LE"
                }
             }
             ATTRIBUTE "Maximum" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 5
                }
             }
             ATTRIBUTE "Minimum" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 0
                }
             }
             ATTRIBUTE "Number_of_Bits_per_Pixel" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 10
                }
             }
             ATTRIBUTE "Number_of_Columns" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 1934
                }
             }
             ATTRIBUTE "Number_of_Lines" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 1544
                }
             }
             ATTRIBUTE "Offset" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 0
                }
             }
             ATTRIBUTE "Scaling_Factor" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 0.00488759
                }
             }
             ATTRIBUTE "Undef_Code" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 32767
                }
             }
             ATTRIBUTE "Unit" {
                DATATYPE  H5T_STRING {
                   STRSIZE 1;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "."
                }
             }
             ATTRIBUTE "Variable_Long_Name" {
                DATATYPE  H5T_STRING {
                   STRSIZE 21;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "Aerosol_Optical_Depth"
                }
             }
          }
          DATASET "Aerosol_Optical_Depth_Quality_Flag" {
             DATATYPE  H5T_STD_I8LE
             DATASPACE  SIMPLE { ( 1544, 1934 ) / ( 1544, 1934 ) }
             ATTRIBUTE "Data_Type" {
                DATATYPE  H5T_STRING {
                   STRSIZE 8;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "STD_I8LE"
                }
             }
             ATTRIBUTE "Maximum" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 160
                }
             }
             ATTRIBUTE "Minimum" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 64
                }
             }
             ATTRIBUTE "Number_of_Bits_per_Pixel" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 8
                }
             }
             ATTRIBUTE "Number_of_Columns" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 1934
                }
             }
             ATTRIBUTE "Number_of_Lines" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 1544
                }
             }
             ATTRIBUTE "Offset" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 128
                }
             }
             ATTRIBUTE "Scaling_Factor" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 1
                }
             }
             ATTRIBUTE "Undef_Code" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 127
                }
             }
             ATTRIBUTE "Unit" {
                DATATYPE  H5T_STRING {
                   STRSIZE 1;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "."
                }
             }
             ATTRIBUTE "Variable_Long_Name" {
                DATATYPE  H5T_STRING {
                   STRSIZE 34;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "Aerosol_Optical_Depth_Quality_Flag"
                }
             }
          }
          DATASET "Aerosol_Optical_Depth_Visibility" {
             DATATYPE  H5T_STD_I16LE
             DATASPACE  SIMPLE { ( 1544, 1934 ) / ( 1544, 1934 ) }
             ATTRIBUTE "Data_Type" {
                DATATYPE  H5T_STRING {
                   STRSIZE 9;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "STD_I16LE"
                }
             }
             ATTRIBUTE "Maximum" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 29.0737
                }
             }
             ATTRIBUTE "Minimum" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 1.58056
                }
             }
             ATTRIBUTE "Number_of_Bits_per_Pixel" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 10
                }
             }
             ATTRIBUTE "Number_of_Columns" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 1934
                }
             }
             ATTRIBUTE "Number_of_Lines" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 1544
                }
             }
             ATTRIBUTE "Offset" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 0
                }
             }
             ATTRIBUTE "Scaling_Factor" {
                DATATYPE  H5T_IEEE_F32LE
                DATASPACE  SCALAR
                DATA {
                (0): 0.0293255
                }
             }
             ATTRIBUTE "Undef_Code" {
                DATATYPE  H5T_STD_I32LE
                DATASPACE  SCALAR
                DATA {
                (0): 32767
                }
             }
             ATTRIBUTE "Unit" {
                DATATYPE  H5T_STRING {
                   STRSIZE 1;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "."
                }
             }
             ATTRIBUTE "Variable_Long_Name" {
                DATATYPE  H5T_STRING {
                   STRSIZE 32;
                   STRPAD H5T_STR_SPACEPAD;
                   CSET H5T_CSET_ASCII;
                   CTYPE H5T_C_S1;
                }
                DATASPACE  SCALAR
                DATA {
                (0): "Aerosol_Optical_Depth_Visibility"
                }
             }
          }
       }
    }
    }

     

    • HDF5 에어로졸 광학두께에서 세부 정보 보기

      • 키 및 목록 확인

    # print(coms_aod_file)
    
    ls = list(h5file.keys())
    print('list : ',ls)
    h5file_aod = h5file.get(u'Product/Aerosol_Optical_Depth')
    print('data : ',h5file_aod)

     

    ('list : ', [u'Basic_Information', u'Map_Projection_Information', u'Product'])
    ('data : ', <HDF5 dataset "Aerosol_Optical_Depth": shape (1544, 1934), type "<i2">)

     

    • HDF5 에어로졸 광학두께에서 모든 속성 정보 보기

      • 키 및 목록 확인

    attrs_key = list(h5file_aod.attrs.keys())
    attrs_value = list(h5file_aod.attrs.values())
    
    print(attrs_key)
    print(attrs_value)

     

    [u'Number_of_Columns', u'Number_of_Lines', u'Number_of_Bits_per_Pixel', u'Offset', u'Scaling_Factor', u'Unit', u'Maximum', u'Minimum', u'Undef_Code', u'Variable_Long_Name', u'Data_Type']
    [1934, 1544, 10, 0.0, 0.0048875855, '.', 5.0, 0.0, 32767, 'Aerosol_Optical_Depth', 'STD_I16LE']

     

    • HDF5 에어로졸 광학두께에서 디지털 수 (Digital Number) 가져오기

      • 배열 출력

      • 디지털 수 출력

    dn = h5file['Product/Aerosol_Optical_Depth'][:]
    
    print(dn.shape)
    print(dn)

     

    (1544L, 1934L)
    [[32767 32767 32767 ..., 32767 32767 32767]
     [32767 32767 32767 ..., 32767 32767 32767]
     [32767 32767 32767 ..., 32767 32767 32767]
     ..., 
     [32767 32767 32767 ..., 32767 32767 32767]
     [32767 32767 32767 ..., 32767 32767 32767]
     [32767 32767 32767 ..., 32767 32767 32767]]

     

     

    • 각 변수에 대해 전처리

      • dplython를 이용하기 위해서 1차원 필요

      • 2차원 변수 (위도, 경도, 디지털 수)를 1차원으로 변환

    # 2D배열을 1D로 변환
    
    lon1D = np.reshape(lon2D, (1,np.product(lon2D.shape)))[0]
    lat1D = np.reshape(lat2D, (1,np.product(lat2D.shape)))[0]
    
    dn1D  = np.reshape(dn, (1,np.product(dn.shape)))[0]
    
    print(lat1D.shape)
    print(lon1D.shape)
    print(dn1D.shape)

     

    (2986096L,)
    (2986096L,)
    (2986096L,)

     

    • Data Frame 설정

      • 1차원 위도, 경도, 디지털 수

    data =  pd.DataFrame( np.column_stack( [lat1D, lon1D, dn1D] ), columns=['lat', 'lon', 'dn'] )
    data.head()

     

    lat	lon	dn
    0	-999.0	-999.0	32767.0
    1	-999.0	-999.0	32767.0
    2	-999.0	-999.0	32767.0
    3	-999.0	-999.0	32767.0
    4	-999.0	-999.0	32767.0

     

    • Data Frame를 통해 L1 전처리

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

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

    data_L1 = ( DplyFrame(data) >>
               mutate( val = X.dn*0.0048875855 ) >>
               sift( (0 <= X.val)  &  (X.val <= 5) ) >>
               sift( (-90 <= X.lat)  &  (X.lat <= 90) ) >>
               sift( (-180 <= X.lon)  &  (X.lon <= 360) )
              )
    data_L1.head()

     

    lat	lon	dn	val
    223863	52.504745	161.210129	43.0	0.210166
    225794	52.399376	160.873169	37.0	0.180841
    225795	52.406925	160.959259	33.0	0.161290
    225796	52.414509	161.045517	46.0	0.224829
    229641	52.085556	158.963013	50.0	0.244379

     

    • L1를 이용하여 위/경도에 대한 최대값 및 최소값 출력

    print(min(data_L1.lat), max(data_L1.lat))
    print(min(data_L1.lon), max(data_L1.lon))

     

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

         

    • 변수 설정
      • 위도 (lon), 경도 (lat), 에어로졸 광학두께 (val) 

     

    • 그림 설정
      • 산점도 : scatter
      • 컬러바 : colorbar
      • 해안선 : drawcostlines, drawcountries, drawmapboundary
      • 수평/수직 그리드 : drawparallels, drawmeridians
      • 그림 제목 : title
    %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.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='cyl', lon_0=128.2, lat_0=0, 
                llcrnrlon=95, llcrnrlat=-15, 
                urcrnrlon=200, urcrnrlat=60, 
                resolution='c')
    
    X, Y = m(data_L1.lon.values, data_L1.lat.values)
    VAL = data_L1.val.values
    
    m.scatter(X, Y, c=VAL, s=1.0, marker="s", zorder=1, vmin=0, vmax=5, cmap=plt.cm.get_cmap('jet'), alpha=1.0) 
    
    # m.colorbar(location='right', label='Aerosol  Optical  Depth')
    m.colorbar(location='bottom', label='Aerosol  Optical  Depth', pad=0.5)
    
    # Black background
    # m.drawcoastlines(color='yellow')
    # m.drawcountries(color='yellow')
    # m.drawmapboundary(fill_color='black')
    # m.drawparallels(np.arange(-150, 120, 15), labels=[1,0,0,0], dashes=[2,2], color='yellow')
    # m.drawmeridians(np.arange(-180, 180, 20), labels=[0,0,0,1], dashes=[2,2], color='yellow')
    
    # White background
    m.drawcoastlines(color='black')
    m.drawcountries(color='black')
    m.drawmapboundary(fill_color='white')
    m.drawparallels(np.arange(-150, 120, 15), labels=[1,0,0,0], dashes=[2,2], color='black')
    m.drawmeridians(np.arange(-180, 180, 20), labels=[0,0,0,1], dashes=[2,2], color='black')
    
    plt.title('COMS / MI  2014-02-01  0000 UTC \n')
    # plt.title('ECMWF / ERA : %04d-%02d \n' %( data_L1.year[0].astype('int'), data_L1.month[0].astype('int') )  )
    plt.show()

     

    • 천리안위성 1A호 (COMS/MI) 기상위성 자료를 이용한 에어로졸 광학두께

    그림. 천리안위성 1A호 (COMS/MI) 기상위성 자료를 이용한 에어로졸 광학두께 가시화.

      

    [전체]

     

     

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

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