桐間紗路研究所日報

技術以外の話→ https://kirimasyaro.hateblo.jp

台風19号と川の水位ー速報

 台風19号で被災された全ての都県の皆様にお見舞い申し上げます

今回の水害で思ったこと

 台風の接近前に、今回の台風はレベル6だとかいろいろ言われていましたが(たぶんそれはデマだと思います)、まず私は降雨量予測をみて驚きました。強風域に入る前から関東は大雨の予測が出ていて、それが10時間以上は続くということで、風よりも雨を心配しました。そしてその心配は的中してしまいました。

 しかし、具体的にどこで雨に気をつければ良いのかわからず、江戸川区が水没だとか、実際に江戸川区ダンケルクの撤退作戦に匹敵する(?)大規模な避難勧告が出たり、情報がよくわからなかったような印象を受けました。また、東京湾での高潮災害が心配されましたが結果、江戸川や荒川はそこまで潮位の上昇はなかったようです。(※ただし静岡県と神奈川県小田原では観測史上最大の潮位になっています。)

 一方、「狩野川台風と同等」という事前の発表はかなり的を射ていた印象です。狩野川では氾濫こそなかったものの急激な水位の上昇があり、放水路は荒れ狂う水の流れが起きていました。また、狩野川台風で洪水を起こした鶴見川でも、早くから水位の上昇が認められ、一時危険な状況になりました。こちらでもおそらく災害の教訓により設けられた水防設備により、破滅的な状況は避けられたようです。

 この類似状況を引き起こした理由は、台風の進路にあると考えられます。 f:id:copuy:20191017073908p:plain

 wikipediaより引用 狩野川台風の進路はこのようになっていました。関東に直撃するルートです。台風は上陸すると勢力が弱まる傾向にあり、上陸せずに関東に接近するということは関東が危ないということです。では、台風19号ではどうだったでしょうか。

f:id:copuy:20191017124930p:plain typhoon19root · GitHub

 台風19号は結局このような進路を取りました。非常に似ていますね。したがって同じような場所が被害を被ることになったと思われます。

 そして、箱根や荒川、千曲川といった被害の多かった場所についてですが、これは、台風が反時計回りの風を生起させ、その風が関東平野西縁の山地にぶつかることで大量の降雨をもたらすものと思われます。これは阿武隈川で被害が多かった理由の説明にもなります。太平洋側からの風が阿武隈山地に衝突し降雨をもたらすわけです。

台風の通過と川の水位の関係(速報版)

 pythonのmatplotlibと、MatthewDaws氏TileMapBaseというモジュールを用い、地図にプロットしてみました。とりあえず関東でデータの取れた観測地点のみを用います。今回は関東のみですが、同じ手法で全国に拡大することもできるので今度阿武隈川千曲川広瀬川などでやってみたいです。

github.com

f:id:copuy:20191017125840p:plain

 まず、台風上陸日の04:00の図です。青は台風の進路で、○が観測点、左上が時刻、右下がアメダスの1時間観測雨量と、一番下が台風19号の位置です。観測点の色は、11日19時の水位を0、計画高水位(堤防が溢水を防げるぎりぎりの高さ、という理解で良いと思います?)を100とした数値で塗っています。

 台風は強風域にもかかっていないような段階ですが、箱根では18mmの降雨があります。土砂降りレベルです。これで台風通過18時間前ですから驚きです。そして、相模川下流(一番左下の地点)で水位が黄色になっているのがわかります。

20ミリの雨、50ミリの雨、100ミリの雨…それってどんな雨? - ウェザーニュース

f:id:copuy:20191017134212p:plain

 13時。八王子の浅川や鶴見川で水位の上昇が目立ちます。箱根では78mmの降雨があり、これは土砂災害が発生していてもおかしくないレベルです。また、埼玉県のときがわ町周辺の荒川水系での水位の上昇が目立ってきています。おそらくこの上流での降雨が多いのでしょう。後々できたら詳しく調べたいです。左下に薄くかかっている青い線と黄色の範囲が強風域です。(見づらくてすみません)

f:id:copuy:20191017134832p:plain

 19時。赤い色、つまり溢水する可能性のある100に到達いしている地点が目立ちます。降雨は世田谷、松本で10mm程度ですが、本降りの雨が15時間は続いていると考えると、小さい川の水位が気になります。埼玉県あたりに薄く線がありますがそれより左下が暴風域です。

 これを見ると、多摩川の武蔵小杉付近の水位の上昇は、大河川にしては大きく、上流の降雨の多さや、河川の幅の狭さ、鶴見川のような遊水地が存在しない、などの要因で溢水しやすくなっているのかもしれないと思います。

 また、江戸川の中・下流あたりで60%くらいまで水位が上昇しています。

f:id:copuy:20191017135931p:plain

 東京最接近時。多摩川の水位観測所が欠測しています。相模川での水位の上昇が激しくなっていますが、降雨が止んでいるのでぎりぎり持ったということになると思います。この時点で江戸川区河口域の水位の上昇がピークとなっていますので、高潮の影響ということかもしれません。

f:id:copuy:20191017140428p:plain

 翌3時。石巻に台風があるにもかかわらず、右上に強風域がまだ見えます。多摩川水系での水位が下降しました。降雨が完全に止んでいるにもかかわらず、利根川、荒川の水位が上昇しています。相模川下流の水位は変化していません。緊急放流の影響、河川長が長い影響などもありそうです。

f:id:copuy:20191017141019p:plain

 翌18時。利根川中流での水位が低下し、利根川下流が上昇し始めました。利根川では水の流れ下りが遅いのでしょうか。東京・神奈川では水位がかなり低下しています。しかし荒川ではそうでもありません。

 全時刻のまとめ動画です。利根川で水位がなかなか下がらないことが目立っています。

 あまり良い考察でもないし、肝心なデータが色々無いんですが、実は他にも取ることのできるデータはたくさんあって、多すぎるくらいなので、他にもこれからやれたら色々やっていこうと思います。

公示地価データの分析(ゆるふわバージョン)

 公示地価データというのがあって、地価に関してこのくらいの値段が適正だよというのが国や自治体から発表されています。

f:id:copuy:20191009165621p:plain

 新橋駅からの距離と公示地価の関係。商業地限定だったか住宅地限定だったかは忘れてしまいました。このデータはそこまで重要じゃないので許して。風呂の底に入浴剤沈めたときみたいな感じになってますね。le7というのはたしか107とかだったとおもいます。単位はyen/m2です。

f:id:copuy:20191010211137p:plain

 一部だけを拡大するとこんな感じ。

 で、こういうときは指数関数のグラフで近似するといい感じになるみたいです。しかし、地価は上限値だけを見るとものすごく高い、いわゆる外れ値ばかりになってしまうので、下限値にいい感じに近似曲線を書きます。それが以下

f:id:copuy:20191010210903p:plain

 この散布図は、銀座の地価最高地点から1kmごとに区切ってその区間で最小の公示地価地点を描画したものです。近似曲線はカンでひきました。exp(-1 * x / 8000) * 600000 + 10000 という曲線です。この曲線を基準に、この線から大幅に価格が離れている地点は値段が地理的位置の割には高騰しているのではないかという仮定を経ててみました。そしてその差額の分布図が以下。

f:id:copuy:20191010215912j:plain

 市区町村の公示地価と想定モデルとの差の平均がどのくらいあるかということを示した図です。江東区だけ青くて目立っていますが、差が平均7000円しか無いということはそれだけ予測がうまくいっているということになるのかもしれません。一方で武蔵野市は市を平均してもすごく差があるということになります。武蔵野市は吉祥寺ブランドも影響しますが、ほかにも市の全域が交通の便が良いなどの事情もあるのでしょう。

WSL(windows subsystem for Linux)で、windowsのssh-agentを使う

 しょうもないことではまったのでメモ

qiita.com

 だいたいこの記事のとおりです。スタートメニューでサービスと打ってサービスを出して、OpenSSH Authentication Agentを自動→開始。

github.com

 ここから.7zファイルをダウンロード。マイドキュメントでも、c:\Users\hoge\appみたいなフォルダにでも展開する(中身ばらさないでフォルダとして)。

 WSLでは、僕の環境では予め/mnt/c/にcドライブがマウントされている。そこからさっき展開したフォルダにアクセスする。そして、

eval `ssh-agent`

と同じような感じで、

eval $(/path/to/ssh-agent-wsl/ssh-agent-wsl -r)

と書けば、windowsssh-agentをWSLから利用することができる。

 ssh-agentなのにbashを立ち上げる毎にパスフレーズを打つんじゃなくて良いのかって感じだけどまあwindowsの認証情報管理でやってくれるならまあ大丈夫なんじゃないですかね(適当)

 で、みんな~/.bashrcに書けっていうんだけど、ぼくは~/.bash_profileに書くほうがすき。というかなぜかそのほうがうまくいく。そのへんは好みで。というわけで、

vim ~/.bash_profile

eval $(/mnt/c/Users/hoge/app/ssh-agent-wsl/ssh-agent-wsl -r)

で動く。その時に、eval ssh-agentの記述がある場合は消す。そうしないとそっち(WSLのssh-agent)が先に起動してしまう。当たり前だけどなんかあたまわるいので気づかなかった。

 あとは ssh-add ~/.ssh/id_rsaとかいつもどおりやるだけ。ただし、windows側の秘密鍵chmod 0600ができないので使えない。

 まだ試していないが、これで再起動してもずっとパスフレーズ入力が省略できるらしい。本当か?

小売業の従業者数と売上の関係~東京都を事例として~ その1

 経営学かなって感じのタイトルをつけましたが実は地理の話です

 東京都のホームページに、町丁目(新宿三丁目、のような)の単位で、小売業の従業者数と売上を集計しているファイルを配っているところがあって、それをこの一年間くらい処理して遊んでいるのですが、遊んでいるだけでは非生産的なので、少しでも学術的に分析してみようと思い、今回の企画に至りました。

従業者数と売上の相関

f:id:copuy:20190726042215p:plain
図1

 こちらのグラフをご覧ください、各点が東京都の各町丁目で、横軸が売上、縦軸が従業者数となっています といっても単位はめちゃくちゃです。

 数学的な話をすると、数値を対数関数log10(x)に代入し、そこから偏差値を求めたのがこれですが、偏差値といっても50が平均に対応する一般的なあれではなく、標準偏差です。つまりσの何倍かというのを示しています。

 対数関数に代入した時点でちょっと恣意的に数値を加工してる感が否めないんですが、とりあえず綺麗に正の相関をしているグラフができたのでちょっと満足してます。おともだちのみなさんもきれいな相関だねって褒めてくれました。うれしい。

 きれいに相関するということは、やはり従業者数が多ければそれだけ売上も上がるということなんでしょうか。少ない人数で多く売り上げようなんていう都合のいい話はないんでしょうか。でもそれはこの恣意的加工しまくりのデータではよくわかんないです。じゃあ本当のところどうなのかという話はすぐには結論は出ません。とりあえずこれを放置して分析を続けます。

クラスタリング

 ここで、何を思ったのか、私はこの二次元のデータをクラスタリングしてみようと思いました、クラスタ数は3です。こんなことをしても意味がないと思います。良い子は絶対真似しないで。

 

f:id:copuy:20190726043025p:plain
図2

 クラスタリングしました。K-means法です。K-means法のこと実はよく知りません。重心を取っているんでしたっけ。上・中・下に三分割されてるだけでなんもおもしろくないですね。でも、上中下のうち中の部分がちょっと範囲狭めなのが面白いですね。

地図で可視化

 ここで、種明かしをするが如く、地図を出します。このクラスタリングの色に対応して、東京23区の地図を色分けします。

f:id:copuy:20190726043253p:plain
図3

 黄色、紫、緑、の順に、売上と従業者が多い地域、普通の地域、少ない地域、ということになる、はずです。東京駅や新宿駅の周辺が黄色なのは実感と離れていなくてわかりやすいです。しかし、高島平周辺が東京と同じクラスタなのがよくわからないです。高島平団地には大きなショッピングセンターでもあるのでしょうか。もし無いならこの分析は破綻している可能性があります。

雑なまとめ

 k-means法、matplotlibでの散布図の作成など、やりたいことがやれて、しかもなんかきれいな散布図と相関が作れたので面白かったです。でもこれやっぱり分析の方法間違ってるんじゃないかってなって一からやり直しになったら嫌だなあ。

 次は、町丁目の人口なども含めて多次元でクラスタリングやってみたいです。というかこっちが本命でこれは前座です。気力が続くと良いなあ

つづく

追記:この分析で書いたコード(雑)

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.cm as cm

%matplotlib inline
  
def syaro():
    df = pd.read_csv('../seika/uriage_jyugyosya_2.csv')
    xarray, yarray, codes = [], [], []
    for x, y, code in zip(df['uriage'], df['jyugyosya'], df['KEY_CODE']):
        if 0 not in [x, y]:
            xarray.append(np.log10(x)) 
            yarray.append(np.log10(y))
            codes.append(code)
    stdx, meanx = np.std(xarray), np.mean(xarray)
    stdy, meany = np.std(yarray), np.mean(yarray)
    xarray = [(x - meanx) / stdx for x in xarray]
    yarray = [(y - meany) / stdy for y in yarray]
    print(stdx, meanx, stdy, meany)

    plt.plot(xarray, np.poly1d(np.polyfit(xarray, yarray, 1))(xarray), color='black')
    rize(xarray, yarray, df, codes)
    
def rize(x, y, df, codes):
    from sklearn.cluster import KMeans
    
    features = np.array([[xx, yy] for xx, yy in zip(x, y)])
    kmeans_model = KMeans(n_clusters=3, random_state=10).fit(features)
    labels = kmeans_model.labels_
    plt.scatter(x, y, marker='.', c=labels)
    plt.grid()
    plt.show()
    df2 = pd.DataFrame(labels)
    df2['x'] = x
    df2['y'] = y
    df2['KEY_CODE'] = codes
    df2.to_csv('../downloads/out.csv', index=None)
    
syaro()

参考: https://qiita.com/ynakayama/items/1223b6844a1a044e2e3b