[Python] 파이썬 라디오 미터 및 라디오 존데 관측 자료를 이용한 고도별 온/습도 등고선 가시화

 정보

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

  • 작성자    : 박진만

  • 작성일    : 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