반응형

     정보

    • 업무명    : 파이썬 라디오 미터 및 라디오 존데 관측 자료를 이용한 고도별 온/습도 등고선 가시화

    • 작성자    : 박진만

    • 작성일    : 2019-09-07

    • 설   명    : 

    • 수정이력 :

     

     내용

    [특징]

    • 라디오 미터와 라디오 존데 자료를 이용하여 고도별로 온/습도 프로파일을 만들어 그리는 프로그램

     

    [기능]

    • 고도별 온/습도 프로파일에 대한 등고선 (contour) 시계열

     

    [활용 자료]

    • matplotlib, numpy, pandas 등 각종 라이브러리

     

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

    • 없음

     

    [사용법]

    • 입력자료를 위치에 넣은 후 해당 소스코드 실행

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • Python 3.7

     

     소스 코드

    [코드 블럭]

    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import numpy as np
    import os
    import locale
    # import moment
    from datetime import datetime
    from dfply import *
    from matplotlib.dates import DateFormatter
    import numpy as np
    from scipy.interpolate import griddata
    from pprint import pprint
    import matplotlib.dates as md
    import matplotlib.ticker as tkr
    #import matplotlib.colors as mc
    
    
    os.chdir("D:/ARTS/result/")
    
    list = ["201704","201705","201706","201707","201708","201709","201710","201711","201712","201801",
            "201802","201803","201804","201805","201806","201807","201808"]
    
    #list = ["201704"]
    
    # "","julianday","time","condition","Radiometer_TEMP","Radiometer_ABS_H","Radiometer_RH","sondeJulianday","releaseTime","sondeTemp","sondeRH","TempDiff","RHDiff"
    
    for i in list:
        
        
        data = pd.read_csv(
            "sonde_rediometer_interpolation_"+i+".csv"
            , sep=","
            )
    
    
    
        data["sDateTime"] = pd.to_datetime(data["time"], format='%Y-%m-%d %H:%M:%S')
    
        dataL1 = (
            data >> 
                mutate(
                    year = X.sDateTime.dt.strftime("%Y")
                    , month = X.sDateTime.dt.strftime("%m")
                    , day = X.sDateTime.dt.strftime("%d")
                    , hour = X.sDateTime.dt.strftime("%H")
                    , minute = X.sDateTime.dt.strftime("%M")
                    , second = X.sDateTime.dt.strftime("%S")
                    , date = X.sDateTime.dt.strftime("%Y-%m-%d")
                ) >>
                arrange(X.condition, X.time)
        )
        
        #print(dataL1)
    
    
    
        print(dataL1.describe())
    
        # define plot size in inches (width, height) & resolution(DPI)
        # plt.figure(figsize=(12, 10))
        fig, ax = plt.subplots(figsize=(12, 10))
    
        # style
        plt.style.use('seaborn-darkgrid')
    
        # define font size
        plt.rc("font", size=22)
        plt.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"
    
        x = dataL1.julianday.values
        y = dataL1.condition.values
        z = dataL1.sondeTemp.values
    
        xVal = np.unique(dataL1["julianday"].to_numpy())
        yVal = np.unique(dataL1["condition"].to_numpy())
        zVal = z.reshape(len(yVal), len(xVal))
    
            
        print(xVal.shape)
        print(yVal.shape)
        print(zVal.shape)
        
        tick = np.unique(dataL1["julianday"].to_numpy())
        tick1 = np.int32(tick)
        tick2 = np.unique(tick1)
        
        
        print(tick2)
        
        
        #RH
        #v = np.linspace(-1, 102, 100, endpoint=False)
        #TEMP
        v = np.linspace(-60, 42, 100, endpoint=False)
    
        #DIFF
        #cc = plt.contour(xVal, yVal,zVal,v1, linewidths=1,cmap=plt.cm.get_cmap('coolwarm'))
        #plt.contourf(xVal, yVal, zVal, v, cmap=plt.cm.get_cmap('jet'),fmt = '',vmin = -1, vmax = 102)
        #plt.clabel(cc, inline=True, fontsize=12, fmt ='%2i',  colors='k',inline_spacing=3.0)
        
        #RH 
        #plt.contourf(xVal, yVal, zVal, v, cmap=plt.cm.get_cmap('jet'),fmt = '',vmin = -1, vmax = 102)
        
        #TEMP
        plt.contourf(xVal, yVal, zVal, v, cmap=plt.cm.get_cmap('jet'),fmt = '',vmin = -60, vmax = 42)
    
        if(i == "201801"):
            plt.xticks(np.arange(1, 32,1.0), size = 14, rotation = 90)
            plt.xlim(1,32)
        else:
            plt.xticks(np.arange(min(tick2), max(tick2)+1,1.0), size = 14, rotation = 90)
        
        # RH
        #plt.colorbar(ticks=np.linspace(0,100,11))
        
        # TEMP
        plt.colorbar(ticks=np.linspace(-60,40,11))
    
    
        plt.title("TEMP(RADIOSONDE)")
        plt.xlabel("Julianday(" + i[0:4] + "." + i[4:6] + ")")
        plt.ylabel("Altitude (m)")
    
        plt.savefig("D:/ARTS/result/TEMP_RH/TEMP(RADIOSONDE)_" + i + ".png")
    
        ax.set_label(np.unique(dataL1["date"].to_numpy()))

     

    [Github]

     

     결과

    • 2017년 04월 라디오 존데의 온도 프로파일 자료를 이용한 등고선 시계열

    그림. 2017년 04월 라디오 존데의 온도 프로파일 자료를 이용한 등고선 시계열.

     

    • 2017년 04월 라디오 미터의 온도 프로파일 자료를 이용한 등고선 시계열

    그림. 2017년 04월 라디오 미터의 온도 프로파일 자료를 이용한 등고선 시계열.

     

    • 2017년 04월 라디오 존데의 습도 프로파일 자료를 이용한 등고선 시계열

    그림. 2017년 04월 라디오 존데의 습도 프로파일 자료를 이용한 등고선 시계열.

     

    • 2017년 04월 라디오 미터의 습도 프로파일 자료를 이용한 등고선 시계열

    그림. 2017년 04월 라디오 미터의 습도 프로파일 자료를 이용한 등고선 시계열.

     

     참고문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

    블로그에 대한 궁금하신 점을 문의하시면 자세히 답변드리겠습니다.

    E. ​sangho.lee.1990@gmail.com & ​saimang0804@gmail.com

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