Category Archives: Hydrology

水文解析の基本_3 [Chapter 4]

Pythonで水文水理解析をやってみる。[Chapter 4]

水文解析の基本_2 [Chapter 3] に引き続き、raifall(降水量)について学んでいきます。

このTutorialは、Python in Hydrologyを使って、Pythonの基本的な勉強とPythonで水文水理解析の勉強していきます。

水文解析の基本

本章の中の問題は、chowによって「応用水文学」というタイトルの本からのものです。また、それらの詳細な記述については、「応用水文学」の本を参照してください。このtutorialは、水文学の中で一般的な方程式を含んでいます。
水文学の基本として、まずは、以下の7項目について、Pythonを使って学んでいきます。

  1. Water Vapor(水蒸気)
  2. Precipitation(降雨)
  3. Rainfall(降水量) →今回はここ
  4. Evaporation(蒸発散)
  5. Infiltration(浸透)
  6. Surface water(表面流)
  7. River Routing–Muskingum method(マスキンガム法による河道流)

Rainfall(降水量)

Rainfall(降水量)時系列を使って、pythonでplotを行ってみます。

降水量時系列データのplot

まずは、降水量時系列データを作成します。
時間とそのときの降水量を定義します。降水量はrandam関数を使って計算してみます。
PyScripterを起動して、インタープリタ画面で以下のcodeを入力します。

[python]
import numpy as np
time = np.linspace(0,100,21) # create time variable
time
rainfall = np.random.rand(21) # generate rainfall
rainfall
[/python]

timeとrainfallが
blog.godo-tys.jp_wp-content_gallery_python_hydrology_04_image01.jpg
のようにデータが作成されます。
これをbar plotしてみましょう。
上記のcodeに続けて以下のcodeを入力します。

[python]
import matplotlib.pyplot as plt
plt.bar(time,rainfall)
plt.xlabel(‘Time’)
plt.ylabel(‘Incremental rainfall’)
plt.savefig(‘F:¥¥python_in_hydrology¥¥png¥¥rain.png’)
[/python]

注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。

上記codeを入力すると
f:¥python_hydrology¥png¥にrain.pngが

のように出力されます。
Windows上に出力させるには、以下のcodeを追加します。

[python]
plt.show()
[/python]

すると、
blog.godo-tys.jp_wp-content_gallery_python_hydrology_04_image03.jpg
のようにWindows上にplot図が作成されます。

累積降水量データのplot

次に、累積(cumulative sum)降水量をplotしてみましょう。
累積値の計算は、以下のcodeになります。

[python]
cum_rainfall = np.cumsum(rainfall)
[/python]

続けてインタープリタ画面で以下のcodeを入力します。

[python]
plt.clf() #current figure clear
plt.plot(time,cum_rainfall) #xy plot
plt.xlabel(‘Time’)
plt.ylabel(‘Cummulative rainfall’)
plt.savefig(‘F:¥¥python_in_hydrology¥¥png¥¥cum_rain.png’)
[/python]

注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。

上記codeを入力すると
f:¥python_hydrology¥png¥にcum_rain.pngが

のように出力されます。
Windows上に出力させるには、plt.show()を追加します。

地点ごとの降水量データのcontour図

降水量は、地点ごとに変わるため、内挿して観測点のない降水量を求めることも必要になってきます。
また、降水量のcountourを作成することで空間的な情報を得ることができます。
まずは、xy地点を作成してplotしてみます。
以下のcodeをインタープリタ画面に入力します。

[python]
# import required modules
import numpy as np
import matplotlib.pyplot as plt
#genrate locations and rainfall
x = np.random.rand(10)
y = np.random.rand(10)
rain = 10*np.random.rand(10)

#plot the locations
plt.scatter(x,y)
plt.xlabel(‘X’)
plt.ylabel(‘Y’)
plt.savefig’F:¥¥python_in_hydrology¥¥png¥¥loc.png’)
[/python]

注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。

上記codeを入力すると
f:¥python_hydrology¥png¥にloc.pngが

のように出力されます。
Windows上に出力させるには、plt.show()を追加します。

次に降水量データをxyのgridデータに内挿します。

[python]
from scipy.interpolate import griddata
#generate the desired grid, where rainfall is to be interpolated
X,Y = np.meshgrid(np.linspace(0,1,1000), np.linspace(0,1,1000))

#perform the gridding
grid_rain = griddata((x,y), rain, (X, Y))
[/python]

内挿後、

[python]
plt.clf()
plt.contourf(X,Y,grid_rain) #countour
plt.colorbar() #color legend
plt.xlabel(‘X’)
plt.ylabel(‘Y’)
plt.scatter(x, y, s=30, c=’r')
plt.xlim((0,1))
plt.ylim((0,1))
plt.savefig(‘F:¥¥python_in_hydrology¥¥png¥¥grid_rain.png’)
[/python]

注意)上記codeで¥は全角ですので、半角にするかもしくは、バックスラッシュに置き換えてください。

上記codeを入力すると
f:¥python_hydrology¥png¥にgrid_rain.pngが

のようにcontourが出力されます。
Windows上に出力させるには、plt.show()を追加します。

今回作成したcontour作成flowは、
blog.godo-tys.jp_wp-content_gallery_python_hydrology_04_image04.jpg
のようになります。

contourfのhelpについては、

[python]
import matplotlib.pyplot
help(matplotlib.pyplot.contourf)
[/python]

で使用方法を確認することができます。

contour図の作成はよく使うので、覚えておくとよいですね。

今回のまとめ

水文解析の基本_3 [Chapter 4]のrainfall(降水量)のデータを使ったplotについて勉強しました。
次回は、Evaporation(蒸発散)について勉強していきます。
Python GeoSpatial TutorialではGISについてblogを書いていますので、GISに興味のある方はのぞいてみてください。

また、本Tutorialは、Python Scriptの基本的なことはある程度理解している前提で今後も話を進めていきます。また、誤字、脱字、spell間違いや翻訳の勘違いも多々出てくると考えられます。
特に英語から日本語への専門用語の翻訳については、プロではないので、「それは違うじゃん!!」とかいろんな意見をいただければと思います。

Pythonで水文水理解析の目次に戻る。

1 / 41234

Social Widgets powered by AB-WebLog.com.