【비망록】 CSV 파일의 위도·경도를 바탕으로 대상 범위의 데이터 추출 및 메쉬 코드를 추가하는 스크립트를 작성했습니다.

목적



CSV 파일의 위도와 경도를 바탕으로 대상 범위의 데이터 추출 및 메쉬 코드를 추가하는 스크립트를 작성했습니다.

전제 조건


  • Windows10
  • Python3이 설치되어 있어야 합니다.
  • pandas, jismesh 등의 각종 라이브러리가 인스톨 완료되어 있는 것.
  • jismesh는 위도 경도에서 메쉬 코드를 찾을 수 있는 파이썬 라이브러리입니다.
  • 입력하는 csv 파일은 아래의 기사에서 출력한 고해상도 나우캐스트 데이터(csv 파일)를 사용하고 있습니다.

  • [비망록] grib2 형식 데이터를 csv 파일로 변환하는 스크립트를 만들었습니다.
  • 입력할 CSV 파일
  • 5, 6열이 경도, 위도, 7열이 강수량의 수치가 됩니다.


  • 실행


  • 입력 폴더(csv 파일이 복수 존재한다고 가정) 및 출력 CSV 파일을 지정해 주세요.
  • 데이터를 추출할 대상 범위를 위도, 경도로 지정합니다(y1, y2, x1, x2).
  • 이 기사에서는, 관동권을 대상 범위로 하고 있습니다.
  • Python 스크립트를 실행합니다.

  • highres_nowcast_add_meshcode.py
    # -*- coding: utf-8 -*-
    import os
    import glob
    import csv
    import pandas as pd
    import pprint
    import calendar
    import jismesh.utils as ju
    
    # 出力ファイルの指定
    output_csvfile = "./out/highres_nowcast_anl_kanto.csv"
    
    # 対象範囲の設定
    y1 = 37.29166666666667
    y2 = 34.04166666666667
    x1 = 140.9375
    x2 = 137.0625
    
    #出力ファイルオープン
    with open(output_csvfile, 'a', encoding='utf-8', newline="") as f:
    
        # フォルダ内の全csvファイルのパスを取得
        All_Files = glob.glob('./data/*.csv')
        pprint.pprint (All_Files)
    
        # csvファイル数分ループ処理
        for file in All_Files:
            # データをリストに格納
            df = pd.read_csv(file, header=None, encoding='utf-8')
            print(u'データフレームに格納処理終了')
    
            #カラム名を付ける
            df.columns = ["time_s_utc","time_f_utc","sign","surface","lon","lat","rain"]
    
            print("---データ抽出前---")
    
            # 最初の5個の値を表示する
            print(df.head(5))
    
            # 各列のdtypeを見る
            print(df.dtypes)
    
            # 行と列の個数をとる
            print(df.shape)
    
            # 対象範囲のデータを抽出
            df_kt = df[(df["lon"]>x2) & (df["lon"]<x1) & (df["lat"]>y2) & (df["lat"]<y1)]
    
            # 5次メッシュコード追加
            df_kt['meshcode'] = ju.to_meshcode(df_kt.lat, df_kt.lon, 5)
    
            print("---データ抽出後---")
    
            # 最初の5個の値を表示する
            print(df_kt.head(5))
    
            # 各列のdtypeを見る
            print(df_kt.dtypes)
    
            # 行と列の個数をとる
            print(df_kt.shape)
    
            # 出力CSVファイルに書き込む
            df_kt.to_csv(f, index=False)
    
        print(u'処理終了')
    

    출력 결과 다이어그램



    출력한 csv 파일(5차 메쉬당 5분간 강수량)과 5차 메쉬 모양 파일 을 바탕으로 QGIS 으로 도화합니다.

    좋은 웹페이지 즐겨찾기