昨年発売のコチラの書籍を読んでいたところ実装して試したくなったので、echelon-pyという汎用パッケージを作って公開しました。
栗原考次・石岡文生 (2021) 『エシェロン解析―階層化して視る時空間データ―』 共立出版
パッケージに実装されている全機能をカバーするように、論文等で扱われている例を実装したノートブックも作成・同時に公開しています。データセットのダウンロードもノートブック内で行なっているので、他の実装をちょっと試すのにも地味に便利。
https://takeshi-teshima.github.io/echelon-py-examples/
使用例:東京23区の肺炎データ
上述の書籍でも使われているデータです。
入力②:GeoPandasで読み込んだ東京都のShapefile(.shp
)
この2つの入力からEchelonを作成して、Dendrogramで図示(このときAdjacencyの情報をShapefileから抽出している):
from echelon.contrib.geo import GISEchelonAnalysis
api = GISEchelonAnalysis()
result = api(table43, Tokyo_gdf, 'ID', 'Name', 'SMR')
print(api.dendrogram(result))
同じデータと、作成済みのEchelon集合から、ホットスポット候補の列挙
hotspots = api.hotspots(result, (table43, 'ID', 'n', 'o'), score='binomial')
hotspots
列挙したホットスポット候補のトップ1を地図にプロット
%matplotlib inline
import matplotlib.pyplot as plt
api.plot_hotspot(hotspots)
plt.show()
こちらの例は以下のノートブックで確認できます:
未実装の機能
モンテカルロ検定と時系列ホットスポット表示以外は概ね実装しました。
Matplotlibでデンドログラムを楽していい感じに描く方法がなさそうだったので、デンドログラムは図ではなく文字列で出ます。本当は図で出力する機能を付けたいところ。
デンドログラムをいい感じに描けるよという方がいたらぜひIssueでお知らせください。
参考
- R実装(本家)
https://cran.r-project.org/web/packages/echelon/echelon.pdf - JS実装 https://zenn.dev/yonda/articles/4493fc696b2180
- 栗原考次・石岡文生 (2021) 『エシェロン解析―階層化して視る時空間データ―』 共立出版
書籍に書かれているアルゴリズムはそのままだと動かなかった(ちょっとしたバグとかではなく)ので、R実装を参考にしつつ、多分こうだろうというアルゴリズムを実装しています。