内閣府 南海トラフの巨大地震モデル検討会 データ処理

内閣府 南海トラフの巨大地震モデル検討会において、使用されていた震度分布・浸水域等に係るデータが公開されています。高潮推算や津波推算にも活用できるデータがあり、今回はそのデータのダウンロード方法や使い方について説明します。

1.データのダウンロード

データのダウンロードサイトは「https://www.geospatial.jp/ckan/organization/naikakufu-01」となります。提供されているデータは地形データや粗度データ、堤防データなどがありますが、ここでは地形データを例とします。

データは平面直角座標系別で提供されています。各座標系のデータ範囲は「計算範囲設定」というエクセルに記載されています。各シートに各メッシュサイズのデータ範囲を示していますが、J列にはデータの列数(Y)、K列は行数(X)となっています。
ここでは7系(石川県・富山県・岐阜県・愛知県)を例として説明します。

2.データの処理・変換

データ形式が?行×10列の形式となっているため、マトリックス形式に行列変換が必要です。

前記の「計算範囲設定_第07系.xls」より行列数を確認でき、黄色ハッチングの部分は10-01領域のXY方向のメッシュ数を示されています。

Pythonを使って行列変換します。使用するコードは下記となります。大量処理できるようにしていますが、pathのところで調整することで単独処理でもできます。

import numpy as np
import glob
import os

# データ格納のフォルダpathを修正することで一括処理。
path = r"D:\地形データ_第07系\depth_0010-01*"
flist = glob.glob(path)

for fname in flist:
    dir_name = os.path.dirname(fname)
    # ファイル名+拡張子の分割機能
    base_name, ext = os.path.splitext(os.path.basename(fname))

    print(f"現在処理中のデータは:{base_name}")
    array = np.genfromtxt(fname, delimiter=[8]*10, names=None)
    
    cols = int(input("変換後の列数【X方向(個)】: "))
    array_reshaped = array.reshape((-1, cols))
    
    new_fname = os.path.join(dir_name, f"_reshaped_{base_name}{ext}")   
    # fmtの所で出力形式を設定する。
    np.savetxt(new_fname, array_reshaped, delimiter="", fmt="%8.2f")     
    print(f"{base_name}の個別変換終了しました。")

print("【全て】変換終了でした")

input形式で変換後の列数を入力すると変換が終了となります。変換前後の比較は下記の図のようです。
変換成功しましたね。

3.変換後のデータのコンター図作成

変換後のファイルを用いてコンター図を描くプログラムも共有します。
名古屋港の形は何となく分かります。

import matplotlib.pyplot as plt
%matplotlib inline

rows, cols = array_reshaped.shape
x = np.arange(0, cols)
y = np.arange(0, rows)

X, Y = np.meshgrid(x, y)
Y_flipped = np.flipud(Y)

plt.contourf(X, Y_flipped, array_reshaped, levels=20, cmap='viridis') 
plt.gca().set_aspect('equal', adjustable='box')
plt.show()

以上。

コメント