趣味で計算流砂水理

趣味で計算流砂水理 Computational Sediment Hydraulics for Fun Learning

数値計算とか河川工学とかプログラミングのことを書いています

MENU

備忘録:Ctrl2cap:Caps LockをCtrlに変える

HHKBに慣れてしまうとノートPCを使ったときにCaps Lockを間違えてしまうので。

  • 公式

Ctrl2cap | Microsoft Docs

  • 参考サイト

5分でcapslockキーをctrlキーに変更する(windows10) | ジョイタスネット

アップデートされてないしレジストリいじるから危ないけど。

pythonによる可視化はHoloviews一択


なぜHoloviews

 - 過去記事よりサンプル

はてブロにインタラクティブなグラフを埋め込む:外部htmlのとりこみ CDNとかiframeとか - 趣味で計算流砂水理 Computational Sediment Hydraulics for Fun Learning

ミャンマー某河川の河口部:ETOPO1 + geoviews - 趣味で計算流砂水理 Computational Sediment Hydraulics for Fun Learning

  • pythonといえばmatplotlibですが、紙ベースの静的なグラフのためwebベースを有効活用できない。情報量が少ない。
  • 紙ベースやめましょう。プリントアウトとかヤバすぎます。

コーディング:matplotlibとの比較

単純な折れ線グラフをHoloviewsで書いてみます。比較のため、matplotlib版も書いておきます。 コードはjupyter上で書いています。なお、グラフはGitHubからGitHub Pagesを表示してiframeで取り込んでいます。

Holoviews

import holoviews as hv

hv.extension('bokeh')
g = hv.Curve([1,2,4],label='line1').options(width=400,height=300) *  hv.Curve([1,4,8],label='line2')
g

matplotlib

%matplotlib inline
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(4.0, 3.0))
ax.plot([1,2,4],label='line1')
ax.plot([1,4,8],label='line2')
ax.legend()
  • コード量はほとんど同じくらいですね。個人的にはHoloviewsのほうが慣れているから見やすいです。
  • Holoviewsでは、*はOverlay:重ね合わせ、+はLayout:並べる、です。

どうしても静的なグラフを書きたい場合

個人的には静的なグラフなんていらないと思いますが、 いざ論文とかにまとめようと思うと静的なベクターのグラフを必要だったりします。(近い将来には変わると思いますが)

前述のとおり、Holoviewsはmatplotlibのラッパーでもあるのでバックエンドを切り替えるだけで簡単に静的なベクターのグラフを作ることができます。

import holoviews as hv
hv.extension('matplotlib')

g = hv.Curve([1,2,4],label='line1').options(aspect=1.333, fig_size=150) *  hv.Curve([1,4,8],label='line2')
hv.save(g,'holoviews.svg')
g

縦横比の設定方法が、bokehとmatplotlibで異なるのでちょっと面倒ですが、if文とか書いておけば良いと思います。

まとめ

  • Holoviewsは、matplotlibとほぼ同じコード量で動的なグラフが作成できる。
  • Holoviewsが本領を発揮するのは大容量、多次元の図化。興味がある方は過去記事を。
  • pythonによる可視化はHoloviews一択
  • jupyterはこちら Jupyter Notebook Viewer

参考図書

衛星画像planetで遊んでみる:河道内植生の変化とか

河道内に繁茂する木とか草についての話題です。河道内植生とか呼ばれており、河川分野では一つの研究テーマだったりします。

まず、大きな出水のあった2019年の荒川の熊谷周辺の経年変化をplanetでレンダリングしてみます。

画像を右クリックで再生を選択

大きいものはこちら

解説

  • 4月、6月、9月を比較すると砂州上に草本類が繁茂していく様子がよくわかります。繁茂するしないの差は(小規模な)出水で冠水するかどうかなので、植生の繁茂状況から出水時の流路が推定できます。

  • 次に洪水後(11月)と比較すると、出水規模が大きすぎるため流路変動が生じていますが、大部分で植生が流出していることがわかります。季節変化もあるので画像のみで流出箇所を判断できませんが、水理解析を行えばわかるはずです。

f:id:SedimentHydraulics:20200520091552p:plain

f:id:SedimentHydraulics:20200520091609p:plain

f:id:SedimentHydraulics:20200520091624p:plain

洪水後

f:id:SedimentHydraulics:20200520093038p:plain

偶然見つけた

ほんとに偶然ですが、砂州上の細い水路は工事用の仮設水路ですね。護岸等の工事でよくやります。洪水後(11月)の写真をみると完全に水路が消えているのが面白いです。

f:id:SedimentHydraulics:20200520160511p:plain

ちょっとマニアックな話を

  • 河道内植生の問題は、出水によって流出しない草本類が木本類に変化して定常的にその場に存在してしまうことにより、川が川らしさを失うことです。
  • 日本の多くの大河川で植生繁茂が問題になっていますが、これは出水規模の縮小、つまりダムによるコントロールが問題です。
  • 川は適度な出水がないと川として存在することができないのですが、人間がなかなかそれを許容できない。今後の河道設計の課題ですね。

これまでのplanetの関連記事です。

computational-sediment-hyd.hatenablog.jp

computational-sediment-hyd.hatenablog.jp

computational-sediment-hyd.hatenablog.jp

computational-sediment-hyd.hatenablog.jp

趣味で調布市の水防計画を立案する:被災履歴のレンダリング

ようやく新たなプロジェクトが始動しました。 テーマは「趣味で調布市の水防計画を立案する」です。 要はコンサルがやるようなことを趣味でやってみようということです。 なぜ調布市かは深い理由はないです。ちょっと思い入れがあるだけです。

まずは水害履歴マップを作ってみました。

f:id:SedimentHydraulics:20200519195309g:plain

f:id:SedimentHydraulics:20200519092432p:plain

webアプリはこちら(フリーのサーバのため少し起動に時間がかかります。chrome, firefoxが推奨です。)

webアプリの詳細は別記事に書きます。

はじめに

水防計画は現状分析→課題抽出→対策検討のように進めます。まずは現状分析ですがその手法はいろいろあります。その一つとして水害履歴の分析を行います。

参照データ

分析

イベントごとの浸水家屋数をみると、1976/9/9:64軒,2005/9/4:141軒,2019/10/12:152軒が上位3イベントとなっている。1976年は少し古いので、2005年、2019年の出水についてもう少し詳しく分析してみましょう。

f:id:SedimentHydraulics:20200519112845p:plain

2005年のイベントは東京都西部で局所的な豪雨により浸水被害が発生しました。

f:id:SedimentHydraulics:20200519112900p:plain

一方、2019年は台風による多摩川上流部の大雨により多摩川の増水により浸水被害が発生しました。

f:id:SedimentHydraulics:20200519112916p:plain

両者を比較すると浸水家屋数は同程度にも関わらず、浸水箇所が大きく異なることがわかります。 前者は都市河川等小規模支川の川沿いで被害が発生しています。一方,後者は多摩川沿いのみで被害が発生しています。 多分この2つが浸水形態として想定されるのかなと思います。

ということで、次回はこの2つのイベントの物理現象をもう少し詳しく分析していきましょう。


衛星画像planetで遊んでみる:砂河川の多列砂州

過去記事1(衛生画像planetで複列砂州の変化をレンダリングしてみた - 趣味で計算流砂水理 )、過去記事2(衛星画像planetで遊んでみる:天竜川河口付近 - 趣味で計算流砂水理) と同じ複列、多列砂州河道ですが、過去記事は河床材料が礫で今回のものは砂です。 ちょっと見にくいですが、随分雰囲気が違うと思います。

画像を右クリックで再生を選択

大きいものはこちら

これは斐伊川ですね。砂河川の多列砂州河道は我が国にはほとんどないのでレアです。実際にみると本当に美しいです(ググるといろんな写真が見れます)。 ストリートビューはこんな感じです。

過去に流れだけのテスト計算をやっていました。(オープンデータによる河川流解析:平面二次元流解析 - 趣味で計算流砂水理) 河床変動計算もやってみようかな。


ちょっとマニアックな話を

これまでに例を示した砂州ですが、川幅スケールの地形変化ということで中規模河床形態と呼ばれます。 これは、土木学会水理委員会移動床流れの抵抗と河床形状研究小委員会:移動床流れにおける河床形態と粗度(土木学会論文報告集210(1973)65–91) で定義されて以来、国内では標準になっています。海外では普通にSand barと呼ばれることが多い気がします。

砂州の高さは河床材料の粒径によって決定します。そのため、礫河床では砂州高が高く、砂河川では砂州高が低くなります。

砂州の列数は川幅に依存します。そのため、川幅を大きくすればほとんど河川で砂州が形成されます。例外は背水影響を受ける区間です。 日本に多列砂州河川が少ない要因は、人為的に川幅を決めているためです。 つまり、諸外国と比較して相対的に川幅が小さいということです。 私の強い思いでもありますが、今後の川づくりの基本方針として川幅(堤防間)を大きくすること検討すべきです。 これにより治水能力の向上だけでなく、砂州の持つ生物多様性や美しい景観も形成されます。

河道計画に長く携わってきた方は、この方法が唯一のサステイナブルな川づくりであることは理解しているのですが、河川沿いに家屋が密集しているなどの制約により実現できないのが現状です。


これまでのplanetの関連記事です。

computational-sediment-hyd.hatenablog.jp

computational-sediment-hyd.hatenablog.jp

computational-sediment-hyd.hatenablog.jp

Google Colaboratoryは凄いけどやりたいことができなかった(2020-5-7時点)⇒2023-12-30時点ではできそうです

⇒2023-12-30時点ではできそうです。後日記事を書きます。


最近勉強も兼ねてGoogle Colaboratoryを使っていました。結論としては凄いの一言でローカルのjupyterはいらないんじゃないかと思うくらいです。

標準状態で!pip listによりパッケージを確認すると次のとおりで372個のパッケージが入ってます(2020年5月7日時点)。 多分皆様が使うパッケージはほとんど入ってる思います。

Package                  Version        
------------------------ ---------------
absl-py                  0.9.0          
alabaster                0.7.12         
albumentations           0.1.12         
altair                   4.1.0          
asgiref                  3.2.7          
astor                    0.8.1          
astropy                  4.0.1.post1    
astunparse               1.6.3          
atari-py                 0.2.6          
atomicwrites             1.4.0          
attrs                    19.3.0         
audioread                2.1.8          
autograd                 1.3            
Babel                    2.8.0          
backcall                 0.1.0          
beautifulsoup4           4.6.3          
bleach                   3.1.5          
blis                     0.4.1          
bokeh                    1.4.0          
boto                     2.49.0         
boto3                    1.13.1         
botocore                 1.16.1         
Bottleneck               1.3.2          
branca                   0.4.0          
bs4                      0.0.1          
CacheControl             0.12.6         
cachetools               3.1.1          
catalogue                1.0.0          
certifi                  2020.4.5.1     
cffi                     1.14.0         
chainer                  6.5.0          
chardet                  3.0.4          
click                    7.1.2          
cloudpickle              1.3.0          
cmake                    3.12.0         
cmdstanpy                0.4.0          
colorlover               0.3.0          
community                1.0.0b1        
contextlib2              0.5.5          
convertdate              2.2.0          
coverage                 3.7.1          
coveralls                0.5            
crcmod                   1.7            
cufflinks                0.17.3         
cvxopt                   1.2.5          
cvxpy                    1.0.31         
cycler                   0.10.0         
cymem                    2.0.3          
Cython                   0.29.17        
daft                     0.0.4          
dask                     2.12.0         
dataclasses              0.7            
datascience              0.10.6         
decorator                4.4.2          
defusedxml               0.6.0          
descartes                1.1.0          
dill                     0.3.1.1        
distributed              1.25.3         
Django                   3.0.5          
dlib                     19.18.0        
docopt                   0.6.2          
docutils                 0.15.2         
dopamine-rl              1.0.5          
earthengine-api          0.1.220        
easydict                 1.9            
ecos                     2.0.7.post1    
editdistance             0.5.3          
en-core-web-sm           2.2.5          
entrypoints              0.3            
ephem                    3.7.7.1        
et-xmlfile               1.0.1          
fa2                      0.3.5          
fancyimpute              0.4.3          
fastai                   1.0.61         
fastdtw                  0.3.4          
fastprogress             0.2.3          
fastrlock                0.4            
fbprophet                0.6            
feather-format           0.4.1          
featuretools             0.4.1          
filelock                 3.0.12         
firebase-admin           4.1.0          
fix-yahoo-finance        0.0.22         
Flask                    1.1.2          
folium                   0.8.3          
fsspec                   0.7.3          
future                   0.16.0         
gast                     0.3.3          
GDAL                     2.2.2          
gdown                    3.6.4          
gensim                   3.6.0          
geographiclib            1.50           
geopy                    1.17.0         
gin-config               0.3.0          
glob2                    0.7            
google                   2.0.3          
google-api-core          1.16.0         
google-api-python-client 1.7.12         
google-auth              1.7.2          
google-auth-httplib2     0.0.3          
google-auth-oauthlib     0.4.1          
google-cloud-bigquery    1.21.0         
google-cloud-core        1.0.3          
google-cloud-datastore   1.8.0          
google-cloud-firestore   1.6.2          
google-cloud-language    1.2.0          
google-cloud-storage     1.18.1         
google-cloud-translate   1.5.0          
google-colab             1.0.0          
google-pasta             0.2.0          
google-resumable-media   0.4.1          
googleapis-common-protos 1.51.0         
googledrivedownloader    0.4            
graphviz                 0.10.1         
grpcio                   1.28.1         
gspread                  3.0.1          
gspread-dataframe        3.0.6          
gym                      0.17.1         
h5py                     2.10.0         
HeapDict                 1.0.1          
holidays                 0.9.12         
html5lib                 1.0.1          
httpimport               0.5.18         
httplib2                 0.17.3         
httplib2shim             0.0.3          
humanize                 0.5.1          
hyperopt                 0.1.2          
ideep4py                 2.0.0.post3    
idna                     2.9            
image                    1.5.31         
imageio                  2.4.1          
imagesize                1.2.0          
imbalanced-learn         0.4.3          
imblearn                 0.0            
imgaug                   0.2.9          
importlib-metadata       1.6.0          
imutils                  0.5.3          
inflect                  2.1.0          
intel-openmp             2020.0.133     
intervaltree             2.1.0          
ipykernel                4.10.1         
ipython                  5.5.0          
ipython-genutils         0.2.0          
ipython-sql              0.3.9          
ipywidgets               7.5.1          
itsdangerous             1.1.0          
jax                      0.1.64         
jaxlib                   0.1.45         
jdcal                    1.4.1          
jedi                     0.17.0         
jieba                    0.42.1         
Jinja2                   2.11.2         
jmespath                 0.9.5          
joblib                   0.14.1         
jpeg4py                  0.1.4          
jsonschema               2.6.0          
jupyter                  1.0.0          
jupyter-client           5.3.4          
jupyter-console          5.2.0          
jupyter-core             4.6.3          
kaggle                   1.5.6          
kapre                    0.1.3.1        
Keras                    2.3.1          
Keras-Applications       1.0.8          
Keras-Preprocessing      1.1.0          
keras-vis                0.4.1          
kiwisolver               1.2.0          
knnimpute                0.1.0          
librosa                  0.6.3          
lightgbm                 2.2.3          
llvmlite                 0.31.0         
lmdb                     0.98           
lucid                    0.3.8          
LunarCalendar            0.0.9          
lxml                     4.2.6          
Markdown                 3.2.1          
MarkupSafe               1.1.1          
matplotlib               3.2.1          
matplotlib-venn          0.11.5         
missingno                0.4.2          
mistune                  0.8.4          
mizani                   0.6.0          
mkl                      2019.0         
mlxtend                  0.14.0         
more-itertools           8.2.0          
moviepy                  0.2.3.5        
mpmath                   1.1.0          
msgpack                  1.0.0          
multiprocess             0.70.9         
multitasking             0.0.9          
murmurhash               1.0.2          
music21                  5.5.0          
natsort                  5.5.0          
nbconvert                5.6.1          
nbformat                 5.0.6          
networkx                 2.4            
nibabel                  3.0.2          
nltk                     3.2.5          
notebook                 5.2.2          
np-utils                 0.5.12.1       
numba                    0.48.0         
numexpr                  2.7.1          
numpy                    1.18.3         
nvidia-ml-py3            7.352.0        
oauth2client             4.1.3          
oauthlib                 3.1.0          
okgrade                  0.4.3          
opencv-contrib-python    4.1.2.30       
opencv-python            4.1.2.30       
openpyxl                 2.5.9          
opt-einsum               3.2.1          
osqp                     0.6.1          
packaging                20.3           
palettable               3.3.0          
pandas                   1.0.3          
pandas-datareader        0.8.1          
pandas-gbq               0.11.0         
pandas-profiling         1.4.1          
pandocfilters            1.4.2          
parso                    0.7.0          
pathlib                  1.0.1          
patsy                    0.5.1          
pexpect                  4.8.0          
pickleshare              0.7.5          
Pillow                   7.0.0          
pip                      19.3.1         
pip-tools                4.5.1          
plac                     1.1.3          
plotly                   4.4.1          
plotnine                 0.6.0          
pluggy                   0.7.1          
portpicker               1.3.1          
prefetch-generator       1.0.1          
preshed                  3.0.2          
prettytable              0.7.2          
progressbar2             3.38.0         
prometheus-client        0.7.1          
promise                  2.3            
prompt-toolkit           1.0.18         
protobuf                 3.10.0         
psutil                   5.4.8          
psycopg2                 2.7.6.1        
ptvsd                    5.0.0a12       
ptyprocess               0.6.0          
py                       1.8.1          
pyarrow                  0.14.1         
pyasn1                   0.4.8          
pyasn1-modules           0.2.8          
pycocotools              2.0.0          
pycparser                2.20           
pydata-google-auth       1.1.0          
pydot                    1.3.0          
pydot-ng                 2.0.0          
pydotplus                2.0.2          
PyDrive                  1.3.1          
pyemd                    0.5.1          
pyglet                   1.5.0          
Pygments                 2.1.3          
pygobject                3.26.1         
pymc3                    3.7            
PyMeeus                  0.3.7          
pymongo                  3.10.1         
pymystem3                0.2.0          
PyOpenGL                 3.1.5          
pyparsing                2.4.7          
pyrsistent               0.16.0         
pysndfile                1.3.8          
PySocks                  1.7.1          
pystan                   2.19.1.1       
pytest                   3.6.4          
python-apt               1.6.5+ubuntu0.2
python-chess             0.23.11        
python-dateutil          2.8.1          
python-louvain           0.14           
python-slugify           4.0.0          
python-utils             2.4.0          
pytz                     2018.9         
PyWavelets               1.1.1          
PyYAML                   3.13           
pyzmq                    19.0.0         
qtconsole                4.7.3          
QtPy                     1.9.0          
regex                    2019.12.20     
requests                 2.23.0         
requests-oauthlib        1.3.0          
resampy                  0.2.2          
retrying                 1.3.3          
rpy2                     3.2.7          
rsa                      4.0            
s3fs                     0.4.2          
s3transfer               0.3.3          
scikit-image             0.16.2         
scikit-learn             0.22.2.post1   
scipy                    1.4.1          
screen-resolution-extra  0.0.0          
scs                      2.1.2          
seaborn                  0.10.1         
Send2Trash               1.5.0          
setuptools               46.1.3         
setuptools-git           1.2            
Shapely                  1.7.0          
simplegeneric            0.8.1          
six                      1.12.0         
sklearn                  0.0            
sklearn-pandas           1.8.0          
smart-open               2.0.0          
snowballstemmer          2.0.0          
sortedcontainers         2.1.0          
spacy                    2.2.4          
Sphinx                   1.8.5          
sphinxcontrib-websupport 1.2.2          
SQLAlchemy               1.3.16         
sqlparse                 0.3.1          
srsly                    1.0.2          
statsmodels              0.10.2         
sympy                    1.1.1          
tables                   3.4.4          
tabulate                 0.8.7          
tbb                      2020.0.133     
tblib                    1.6.0          
tensorboard              2.2.1          
tensorboard-plugin-wit   1.6.0.post3    
tensorboardcolab         0.0.22         
tensorflow               2.2.0rc4       
tensorflow-addons        0.8.3          
tensorflow-datasets      2.1.0          
tensorflow-estimator     2.2.0          
tensorflow-gcs-config    2.1.8          
tensorflow-hub           0.8.0          
tensorflow-metadata      0.21.2         
tensorflow-privacy       0.2.2          
tensorflow-probability   0.10.0rc0      
termcolor                1.1.0          
terminado                0.8.3          
testpath                 0.4.4          
text-unidecode           1.3            
textblob                 0.15.3         
textgenrnn               1.4.1          
Theano                   1.0.4          
thinc                    7.4.0          
toolz                    0.10.0         
torch                    1.5.0+cu101    
torchsummary             1.5.1          
torchtext                0.3.1          
torchvision              0.6.0+cu101    
tornado                  4.5.3          
tqdm                     4.38.0         
traitlets                4.3.3          
tweepy                   3.6.0          
typeguard                2.7.1          
typing                   3.6.6          
typing-extensions        3.6.6          
tzlocal                  1.5.1          
umap-learn               0.4.2          
uritemplate              3.0.1          
urllib3                  1.24.3         
vega-datasets            0.8.0          
wasabi                   0.6.0          
wcwidth                  0.1.9          
webencodings             0.5.1          
Werkzeug                 1.0.1          
wheel                    0.34.2         
widgetsnbextension       3.5.1          
wordcloud                1.5.0          
wrapt                    1.12.1         
xarray                   0.15.1         
xgboost                  0.90           
xkit                     0.0.0          
xlrd                     1.1.0          
xlwt                     1.3.0          
yellowbrick              0.9.1          
zict                     2.0.0          
zipp                     3.1.0

ファイル操作は、googleドライブ上で可能であり、画面右端「ファイル」タブを選択し、「ドライブをマウント」をクリックすることでファイル操作が可能となります。

※以前は次のコマンドを打つ必要があったようです。今でもこの方法も使えます。

from google.colab import drive
drive.mount('/content/drive')

やりたいことができなかった

本当に凄いけどやりたいなと思うことができなかったのでまとめておきます。

condaが上手く動かない

google colabではpipでのパッケージ管理を基本としています。でも、condaがないと上手く入らないパッケージも多くあります。 なので、以下の方法でcondaを入れます(minicondaは参考サイトを参照)。

!wget -c https://repo.continuum.io/archive/Anaconda3-5.2.0-Linux-x86_64.sh
!chmod +x Anaconda3-5.2.0-Linux-x86_64.sh
!bash ./Anaconda3-5.2.0-Linux-x86_64.sh -b -f -p /usr/local
import sys
sys.path.append('/usr/local/lib/python3.6/site-packages/')

google colabがpython3.6のため、python3.6で構築された最新(最終)バージョンのAnaconda3-5.2.0、Miniconda3-4.5.4を指定する。

ところが、pipとcondaを併用した管理は非常に厄介です(「pip conda」でググってみて下さい)。 condaの公式にも書いてますがとにかく慎重に管理する必要がありそうです。

実際にgoogle colab上でcondaで作ってみましたが依存パッケージが多いものは上手くいきませんでした。 condaが使えないと使えるパッケージが限られるのでこの辺はマイナスかなと考えます。

参考サイト

PyViz-HoloVizが動かない

PyViz-HoloVizとは、このブログではお馴染みのjupyter上で動くインタラクティブなグラフを作成するためのパッケージ群です。holoviewsgeoviewshvplot...etc

バックエンドはbokehであり、上記の標準パッケージに含まれるため、動くかと思いましたが駄目でした。

開発者も結構頑張っているようですが、githubのissue(Colab rendering requires reloading extension in each cell · Issue #3551 · holoviz/holoviews · GitHub)に書いてあるとおり、APIがipywidgetをサポートしておらず、Colabはクローズドソースなので難しいようです。

python xarray - Install GeoViews on a Google Colaboratory Notebook - Stack Overflowを参考に簡単なプログラムをテストしてみました。

!apt-get install libgeos++ libproj-dev
!pip install panel==0.7.0 geoviews==1.6.6

import geoviews as gv
import geoviews.feature as gf
# gv.extension('bokeh') # NG
gv.extension('matplotlib') # OK
g = gf.ocean
g

インタラクティブなbokehは動きませんが静的なmatplotlibは動きました。

ちなみにbokeh単体は動きました。(参考push_notebook does not work in Google Colaboratory · Issue #9302 · bokeh/bokeh · GitHub)

ローカルのjupyterで作るとこんな感じになります。

やっぱりインタラクティブなグラフがいいですよねということでデメリットの一つと考えます。