読書メモ Applied Geospatial Data Science with Python: Leverage geospatial data analysis and modeling to find unique solutions to environmental problems
概要
地理空間情報のデータ分析に関する広範なトピックを扱った本。ひとつひとつのトピックはかなり浅い扱いだが、知らないことが多く、へーとなる瞬間が多かった。
さまざまなライブラリを紹介しているのが特徴的。GeoPandasってこんなことできたのかー、とかこんなライブラリあるんだーといった学びがあった。
一方で電子書籍版は数式がちゃんと表示されなかった点はちょっと残念。
もうちょっとソースコードを減らして、理論面を増やしてくれた方が好みだけど、初学者がここからたどるにはよさそう。こんな感じの本がもうちょっと増えてほしい。
読書メモ
Introducing Geographic Information Systems and Geospatial Data Science
What Is Geospatial Data and Where Can I Find It?
Shapefileの解説がある。知らなかったから助かる。色々なファイルフォーマットの説明がある。
GIS対応データベースの軽い紹介もある。ArcGISはちょっと使ってみたい。
色々なデータソースの話があるけど、主に海外なんだよな。
用語:Coordinate reference system (CRS)
Working with Geographic and Projected Coordinate Systems
座標参照系まわりの話。主に平面投影の仕方について論じた章。おもしろいが実用上は、いつものやつでよい。
CRSを切り替える方法も紹介されている。
Exploring Geospatial Data Science Packages
GeoPand基本的にas(各行が特別なgeometry列をもつDataFrameが作れるという理解)の基本的な使い方がある。面積とか囲む矩形とかとれるの知らなかった。重心とかもとれる。一回GeoPandasのドキュメント読んでもいいかもなぁ。.geometryでgeometryとれる。plotで基本的なplotができる。joinとかできる。
Shapelyはたまにポリゴン操作で出てくる。
Rasterioはラスターデータの読み込みで使うらしい。ラスターデータと出会ったらチェックしたい。
PySALは空間データ分析用のライブラリ。後ろのほうで結構使われてる。一回これもドキュメント読んでもいいかも。
(ただちょっと調べたところ、研究者が適当に生やしているモジュールもあるっぽい。segregationとかmomepyとかは研究グループが最近足したものか?)
Modelのaccessは各demandがsupplyからどれぐらいの距離があるかとか計測できそう。(こういうのEVの充電スポット計画とかに使えそう)
可視化はLeafletとかFoliumとか色々紹介されているが、いまいち使い分けのポイントがつかめなかった。foliumとか今のplotlyの表現力に困ったら使ってもいいかも?(heatmap系はplotlyよりgeoplot(次章)の方がよさそう)
Exploratory Data Visualization
標準偏差をこえたoutlierを表示から外す、みたいなテクニックを紹介している。(自分はlogプロットする派だがこれでもいいかもしれない)
heatmapにgeoplot便利そう。
Hypothesis Testing and Spatial Randomness
この本はこのあたりから面白くなってくる。
何らかの観測値が位置による影響を受けるかを試験するにはどうするか、という話。実務上は、影響を受けるに決まっているので仮説検定としては魅力がないが、影響の強さを観測する方法がのっている。
基本的に、各点と周囲(近傍)の点の観測値の間に相関があれば、位置による影響を受けているとみなす枠組み。
まずは、近傍を定義するspatial weightsの概念を説明している。ある点の近傍を定義するのにrook continuity matrix, queen contiguity matrix, KNN matrixを紹介している。・・・が本の紹介だとよくわからない。たぶん、ポリゴンが辺を共有すればrook, 頂点を共有すればqueenだと思う。
spatial lagとは、各点の周囲の点における観測値の平均をあらわす。必須概念。レストランの売り上げが話題なら周辺のレストランの売り上げ。
コードではspatial weightsの算出方法がある。Morans'Iと呼ばれる統計量を算出して、有意かどうかみている。観測値とspatial lagの相関をプロットするのはよさそう。Geary's C統計量も紹介されているが利点が不明瞭。こういうところがこの本は微妙。
Local Spatial Autocorrelationという全体で出す統計量じゃなくてローカルで出す統計量も紹介されている。
次に、点がランダムに分布しているかをテストするRipley's alphabet functionなるものが紹介されている。(使わなさそうで流し読み)
Spatial Feature Engineering
回帰とかに使う特徴量で空間情報の折り込み方。summary spatial featuresとproximity spatial featuresがある。
summary spatial featuresは近傍やら所属するメッシュの統計値を用いるもの。あるいは周辺からの補完情報。
proximity spatial featuresは、他の観測値からの距離の測度。例えば、Airnbであればもっとも近い宿までの距離だったり駅までの距離だったり。(なんかこの定義は怪しい気がする。近傍の観測値情報で統計値ではなくダイレクトに用いるものだったりしない?)
コードでは周辺の店舗数とか出していた気がする。あまり興味深い例ではない。proximity spatial featuresとして一定距離以内の施設数を出している気がするがこれはsummaryっぽくない???
Spatial Clustering and Regionalization
空間上のクラスタリング。ここのサンプルコードはrobust_scaleとか知らない関数が出てたのが地味に参考になった。correlation heatmapとかもさぼってること多いのでぱっと出せるようにしておきたい。
まず、K-meansで空間情報無視してクラスタリングして、Radial Plotで値の傾向を出している。(Radial Plotあんまり使ったことなかったけどよさそう)
次に、Spatially constrained agglomerative hierarchical geodemographic clusteringなる手法で空間情報を考慮してクラスタリングしている。これは階層的クラスタリングにおいて、個別のクラスタをマージしていく過程で近傍のものしかマージできない制約を課すもの。このようなクラスタリングはregionalizationと呼ばれるらしい。spatial weights matrixで近傍定義を渡す。
最後に、clusteringの評価指標の話をしている。
Spatially constrainedなclusteringは参考になったが、提示された例がいい結果ではないので本当に実用性ある?という気分にはなる。
Developing Spatial Regression Models
回帰への空間情報の取り込み方を論じた章。
まず、地域ごとに残差をviolin plotしてるのがよかった。
また、spatial lagを残差に関してとることで、lag残差と残差の散布図を見せて相関を示しているのもよい。
まずは空間的な特徴量を導入して空間情報を取り込んでいた(スコア0.54)。
次に空間的な固定効果を考慮したモデル構築を行っている。これは、全空間で同じ係数を共有する回帰モデルを作るのだが、地域ごとにオフセットを持たせて補正しているっぽい。spregのOLS_Regimesという関数を用いている。ここでの地域は近傍の有名施設ごとに作成しているようだ。地域ごとに別々のモデルを構築する、というのも考え方としてあるが、あくまでオフセット補正。(スコア0.56)
次にGeographically Weighted Regression (GWR) を導入する。これは、カーネル回帰の考え方を空間情報に適用したもの。各観測点から予測点までの距離をもとに、影響を減衰させる(スコアは0.586)。カーネルの中心を固定するか(一定間隔で置くか?)、データから変動させるかでバリエーションがある。実際に使うときはもうちょっと調べる必要性を感じる(mgwrというパッケージを利用)。以下のページが参考になる。
https://www.gisci.ics.saitama-u.ac.jp/share/202104GISA_GWreview_postprint.pdf
最後にMultiscale GWRを導入している。これはGWRにおいて、カーネル幅を各特徴量ごとに決めるもの。特徴量ごとに空間的な近似性が違うので確かに妥当なアプローチに思える。ただ、めっちゃ重いらしい。(例だとスコアはめっちゃ悪い)
Developing Solutions for Spatial Optimization Problems
色々な最適化問題を扱った章。数式が乱れて読みづらい。斜め読みなので、実用するにはちゃんと調べる必要がある。
Location Set Covering Problem (LSCP) は、supplyは一定距離以内のdemandに供給できるという仮定で、supplyの数を最小化する問題っぽい。spoptパッケージを用いて解いている。
この章はサンプルコードが参考になる。spagetthiというモジュールで空間上でのネットワーク構造を扱っている。spagetthiとGeoDataFrameとの連携方法や、Open Street Mapからのネットワーク構造の取得が行われている。また、道路ネットワーク上にランダムに点を打つ方法も知らなかった(後処理でsnappingをしている)。
次は巡回セールスマン問題とVehicle Routing Problem。まあ、やりたいときに調べればいいか、という感じ。
Advanced Topics in Spatial Data Science
いくつかの雑多なトピックを扱った章。
R-tree indexを使って、空間にindexをはり、検索やfilteringを高速化する。GeoPandasでできるのは知らなかった。テクニックとしてfilteringの際に、小さいポリゴンに分割して問い合わせることで高速化していた。(これは矩形がもとのままだと雑だからか?)
H3による空間分割も述べられていた。H3がfilteringに使えるのかどうかはちょっと気になる。ダイレクトなAPIはなさそう。
空間での補完についても述べられていた。IDWではカーネル法っぽい補完をしてくる。IDWでは既存の値の範囲を超えられないので、Kriging-based interpolationはいい感じにそれを克服してるっぽい。
総評
ちょっと中身が薄い気がするが色々と勉強になった。日本語ならチームの人に勧めたい本。
この記事が気に入ったらサポートをしてみませんか?