From 38cddaade888c34d55b3082463af6a59ff4a9df3 Mon Sep 17 00:00:00 2001 From: babayoshihiko Date: Wed, 12 Jun 2024 11:03:45 +0900 Subject: [PATCH] Ch01 major update --- 01-introduction-ja.Rmd | 185 +++++++++++++++++++++-------------------- 1 file changed, 96 insertions(+), 89 deletions(-) diff --git a/01-introduction-ja.Rmd b/01-introduction-ja.Rmd index db6fe81..96042d9 100644 --- a/01-introduction-ja.Rmd +++ b/01-introduction-ja.Rmd @@ -92,39 +92,57 @@ R とコードエディタのインストール方法は、Chapter \@ref(spatial 本のタイトル案には *Geography with R* と *R for GIS* があったが、これらは古い学問分野とリンクしていることが分かる。 それぞれに利点がある。 前者は、単なる空間データ以上のもので構成されているというメッセージを伝えている。 -必然的に、非空間的な属性データと地理データが織り込まれる。Geography\index{ちりがく@地理学} は、何かが地図上のどこにあるかということだけではない。 後者は、この本が GIS\index{GIS} として R を使い、地理データの空間演算を行うための本であることを伝えている [@bivand_applied_2013]。 しかし、GIS という言葉には、R\index{R} の最大の強みを伝えきれない意味を含んでいる (Table \@ref(tab:gdsl) 参照)。 -強みとはすなわち、地理データ処理、モデリング、可視化タスクをシームレスに切り替えることができるコンソールベースの機能である。 -これに対し、ジオコンピューテーション\index{じおこんぴゅてーしょん@ジオコンピュテーション}という言葉は、再現可能で創造的なプログラミングを意味する。\index{GIS} -もちろん、 (ジオコンピュテーション) アルゴリズム\index{あるごりずむ@アルゴリズム}は、非常に複雑になり得る強力なツールである。 -しかし、すべてのアルゴリズムは、より小さな部分から構成されている。 -その基礎となる構造を学ぶことで、地理データの問題に対する独自の革新的な解決策を生み出す力を身につけることを目的としている。 +すなわち、地理データと地理以外のデータの処理、モデル化、可視化をシームレスに行うことができ、かつ再現性は GIS の能力を超えている。 +ジオコンピュテーション\index{geocomputation}は、再現可能なコード主導の環境で地理データを扱い、結果・方法・ツールをプログラムすることを示している。これが本書の狙いである。\index{GIS!ねらい} ## なぜ R をジオコンピュテーションに使うのか? {#why-use-r-for-geocomputation} 初期の地理学者は、気圧計、コンパス、[六分儀](https://en.wikipedia.org/wiki/Sextant) などのさまざまな道具を使って、世界に関する知識を深めてきた [@wulf_invention_2015]。 海上での経度計算が可能になったのは、1761年に発明された[マリン・クロノメーター](https://en.wikipedia.org/wiki/Marine_chronometer)からで、これにより船はより直進的な航路をとることができるようになった。 +今世紀に入る前、地理分析のためのデータやツールは不十分であった。 -現在では、このような地理的なデータの不足は考えにくい。 -すべてのスマートフォンに全地球測位 (GPS\index{GPS}) 受信機が搭載され、人工衛星や半自動運転車、市民科学者に至るまで、数多くのセンサーが世界のあらゆる場所を絶え間なく測定している。 -データの生成速度が圧倒的に速いのである。 -例えば、自律走行車は 1 日あたりテラバイト級のデータを生成することができる [@theeconomist_autonomous_2016]。 -人工衛星からのリモートセンシング\index{りもーとせんしんぐ@リモートセンシング}データが膨大になり、対応するデータを 1 台のコンピュータで解析することが難しくなったため、 [OpenEO](https://openeo.org/) のような取り組みが行われている。 -この「ジオデータ革命」は、高性能なコンピュータハードウェアと、効率的でスケーラブルなソフトウェアに対する需要を喚起し、ノイズから信号を処理・抽出することで、世界を理解し、おそらく世界を変えることができる。 -空間データベース\index{くうかんでーたべーす@空間データベース}は、膨大な地理データの保存と管理可能な部分集合の生成を可能にし、そこから知識を得るためのインターフェースは、今後の重要なツールになる。 -R はそのようなツールの一つで、高度な分析、モデリング、可視化機能を備えている。 -この文脈では、本書の焦点は言語そのものにあるわけではない [@wickham_advanced_2019 参照]。 -その代わりに、私たちは R を世界を理解するための「商売道具」として使っている。Humboldt\index{von Humboldt} がその複雑さと相互関係のすべてにおいて自然を深く理解するために道具を使ったのと同じようにである [@wulf_invention_2015 参照]。 -プログラミングは還元主義的な活動に見えるが、R を使ったジオコンピュテーション\index{じおこんぴゅてーしょん@ジオコンピュテーション}を楽しむだけでなく、世界を理解するために教えることを目的としている。 + + +現在では、研究や実務に際して、地理データの不足ではなく、逆に多すぎるデータと多すぎるツールに悩まされている。 +ほとんどのスマートフォンに全地球測位 (GPS\index{GPS}) 受信機が搭載されている。 +人工衛星や半自動運転車、市民科学者に至るまで、数多くのセンサーが世界のあらゆる場所を絶え間なく測定している。 +データの生成速度が圧倒的に速く、自律走行車のような新技術は、毎日数百から数千GBのデータを生成する。 +人工衛星からのリモートセンシング\index{りもーとせんしんぐ@リモートセンシング}データが膨大になり、対応するデータを 1 台のコンピュータで解析することが難しくなったため、Chapter \@ref(gis) で扱うように一台のコンピュータでは処理しきれない。 +この「ジオデータ革命」によって、高性能なコンピュータ・ハードウェアと、ノイズから信号を処理・抽出するための効率的でスケーラブルなソフトウェアに対する需要が高まっている。 +オープンソースツールの進化により、膨大な地理データストアから直接または API を利用してを介して地理データをインポートし処理することができる。\index{くうかんでーたべーす@空間データベース} + +急速に変化するハードウェア、ソフトウェア、およびデータ環境では、将来性のあるツールを選択することが重要である。 +オープンソースソフトウェアの大きな利点は、何千人もの潜在的な貢献者がいることによる**開発速度と寿命**である。 +毎日何百人もの人々がオープンソースプロジェクトにバグレポートを提出し、新機能やドキュメントの改善を提案している。 + +このことと関係して、**相互運用性**が利点となる。 +プロプライエタリな製品は、保守が難しいモノリシックな「帝国」になりがちだが (先に述べた利点と関連している)、オープンソース・ソフトウェアは、組み合わせることができるため、モジュール化されたツール「連合」と言えるだろう。 +このため、R のようなオープンソースのデータサイエンス言語は、高性能な可視化ライブラリやファイル形式へのインターフェースといった新しい開発を迅速に取り入れることができる。一方、プロプライエタリなソリューションは遅れを取らないように苦労している。 + +もうひとつの大きな利点は、**再現性**である。 +発見を再現できることは科学研究にとって不可欠であり、オープンソースソフトウェアは、他の人が同じツールを使ってあなたの発見をチェックしたり、新しい文脈であなたの方法を適用したりすることを可能にするため、再現性という重要な障壁がない。 +誰でも無料でアクセスできるツールを使い、コードやデータを共有すると、研究結果を他の人がチェックし、それを基に構築できるようになる。 + +多くの人にとって、再現可能なコードの共有と組み合わされたオープンソースソフトウェアの最大の利点は、**コミュニティ**である。 +プロプライエタリ・ソフトウェアのサポートは非常に使いづらいことが多い。一方、コミュニティでは質の高いサポートをすぐに得ることもある。 +コミュニティはフィードバックやアイデアを提供してくれ、Chapter \@ref(conclusion) でも取り上げるように、独自のツールや手法を開発する手助けをしてくれる。 + +R はオープンソースソフトウェアプロジェクトで、強力な言語であり、統計学者や開発者のコミュニティは常に進化し続けている [@wickham_advanced_2019]。 +R はオープンソースソフトウェアで再現可能なジオコンピュテーショ ンを可能にする唯一の言語ではない。 +R を使う理由の多くは、Python\index{Python} や Julia など、再現可能なデータサイエンスのための他のオープンソース言語にも当てはまる。 +しかし、R 独自の重要な利点がいくつかある。 + +## なぜジオコンピュテーションに R ? {#why-use-r-for-geocomputation} R は、統計計算とグラフィックスのための、マルチプラットフォームなオープンソース言語・環境である ([r-project.org/](https://www.r-project.org/))。 R は、幅広いパッケージによって高度な地理空間統計学 \index{とうけいがく@統計学}、モデリング、可視化もサポートしている。 \index{R!げんご@言語} -RStudio\index{RStudio}のような新しい統合開発環境 (integrated development environment、IDE\index{IDE}) のおかげで、より多くの人が R を使えるようになった。特に、インタラクティブな視覚化専用のパネルがあることで地図の作成が容易になった。 +RStudio\index{RStudio} のような新しい統合開発環境 (integrated development environment、IDE\index{IDE}) のおかげで、より多くの人が R を使えるようになった。特に、インタラクティブな視覚化専用のパネルがあることで地図の作成が容易になった。 -R はの核は、オブジェクト指向の[関数型プログラミング言語](https://adv-r.hadley.nz/fp.html) [@wickham_advanced_2019]である。これに加えて、他のソフトウェアとの対話型インタフェースも設計されている [@chambers_extending_2016]。 +R の核は、オブジェクト指向の[関数型プログラミング言語](https://adv-r.hadley.nz/fp.html) [@wickham_advanced_2019]である。これに加えて、他のソフトウェアとの対話型インタフェースも設計されている [@chambers_extending_2016]。 後者には、GIS\index{GIS} ソフトウェア、「ジオライブラリ」、関数の宝庫への「ブリッジ」も多く含まれている (Chapter \@ref(gis) を参照)。 そのため、C 言語\index{C}、FORTRAN\index{FORTRAN}、Java\index{Java} などの (R と比較して) 低レベルな言語を習得する必要がなく、「ジオツール」を素早く作成するのに理想的である (Section \@ref(software-for-geocomputation) を参照)。 \index{R} @@ -156,7 +174,7 @@ leaflet() |> ```{r interactive, fig.cap="青いマーカーは著者の出身地を示している。ベースマップは、NASAが提供する夜の地球のタイル画像。オンライン版 (geocompr.robinlovelace.net) では、ズームインしたりポップアップをクリックするなどして、インタラクティブに楽しむことができる。", out.width="100%", fig.scap="Where the authors are from.", echo=FALSE} if (knitr::is_latex_output()){ - knitr::include_graphics("figures/interactive.png") + knitr::include_graphics("images/interactive.png") } else if (knitr::is_html_output()){ # library(leaflet) # popup = c("Robin", "Jakub", "Jannes") @@ -174,10 +192,15 @@ if (knitr::is_latex_output()){ \index{map making!interactive} -インタラクティブな地図としてならともかく、数年前に R を使って Figure \@ref(fig:interactive) を作成するのは困難だっただろう。 +インタラクティブな地図としてならともかく、数年前に R (あるいは他のどのプログラミング言語でも) を使って Figure \@ref(fig:interactive) を作成するのは困難だっただろう。 これは R の柔軟性と、**knitr** や **leaflet** などの開発のおかげで、他のソフトウェアへのインターフェースとして使用できることを示すもので、本書を通じて繰り返し出てくるテーマである。 そのため、R コードを使用することで、抽象的な概念だけでなく、現実の現象を表す再現性の高い事例を参考にしながらジオコンピュテーションの教育を行うことができる。 +R-spatial stack はインストールが簡単で、包括的でメンテナンスが行き届き、相互運用性の高いパッケージを備えている。 +R には、基本インストールに含まれる統計関数と、多くの最先端手法を実装した何百ものよくメンテナンスされたパッケージがある。 +R を使えば、驚くほど少ないコード行数で作業を開始することができ、デバッグやパッケージの依存関係の管理よりも、地理メソッドやデータに集中することができる。 +R の特に優れた点は、優れた地図作成パッケージのおかげで、出版物のような品質のインタラクティブマップを簡単に作成できることである。 + ## ジオコンピュテーションのためのソフトウェア {#software-for-geocomputation} R は地理計算のための強力な言語であるが、地理データ解析のための他の多くの選択肢があり、何千もの地理関数\index{かんすう@関数}を提供している。 @@ -196,7 +219,7 @@ C++\index{C++} は、**Rcpp** パッケージによってよりアクセスし しかし、R を使用してジオコンピュテーションを行う際には、必ずしも C++\index{C++} を学ぶ必要はない。 Python\index{Python} は、特に GRASS GIS\index{GRASS GIS}、SAGA\index{SAGA}、QGIS\index{QGIS} などの多くのデスクトップ GIS\index{GIS} が Python API\index{API} を提供しているので、ジオコンピュテーションには重要な言語である (Chapter \@ref(gis) を参照)。 -Python\index{Python} は、R\index{R} と同様、データサイエンスのための[有名な](https://stackoverflow.blog/2017/10/10/impressive-growth-r/)ツールである。 +Python\index{Python} は、R\index{R} と同様、データサイエンスでよく使われているプログラミング言語である。 両言語はオブジェクト指向であり、重複する部分が多いため、R から Python\index{Python} へのアクセスを容易にする **reticulate** パッケージや、オープンソースデータサイエンスエコシステム全体の利益のためにポータブルライブラリをサポートする [Ursa Labs](https://ursalabs.org/) イニシアチブなどの取り組みに繋がっている。 実際には、R と Python のどちらにも強みがあり、どちらを使うかは、ある程度、応用や結果の伝達の領域よりは重要ではない。 @@ -236,7 +259,7 @@ R-spatial\index{R-spatial} の開発時間が急増し、R コンソーシアム 特に、長年にわたって蓄積された R-spatial の知恵を多く含むオープンアクセスのメールリストである [R-sig-Geo Archives](https://stat.ethz.ch/pipermail/r-sig-geo/) がそうである。 ```{r cranlogs, fig.cap="2013年初頭から現在までの、地理データを扱うための R パッケージのダウンロード数。y軸は、よく使われる cloud.r-project.org CRAN ミラーからの日次ダウンロードの平均数を91日間ローリングウィンドウ法で示している (対数スケール)。", echo=FALSE, fig.scap="The popularity of spatial packages in R."} -knitr::include_graphics("figures/01-cranlogs.png") +knitr::include_graphics("images/01-cranlogs.png") ``` データ処理パッケージ **dplyr** ([2014年](https://cran.r-project.org/src/contrib/Archive/dplyr/)にリリース) に代表されるように、より広い R コミュニティのシフトが R の空間エコシステムのシフトに影響を与えたことは注目に値する。 @@ -244,7 +267,8 @@ knitr::include_graphics("figures/01-cranlogs.png") ロング型データと直感的な名前の関数に焦点を当てた **tidyverse**\index{tidyverse (package)} アプローチは、絶大な人気を誇っている。 そのため、「整えられた地理的データ」が求められ、その一部を **sf** が担ってきている。 **tidyverse** の明らかな特徴として、パッケージが調和して動作する傾向がある。 -同等の **geoverse** はないが、 [r-spatial](https://github.com/r-spatial/discuss) 組織でホストされているパッケージ間の調和を図る試みがあり、**sf**\index{sf} を使うパッケージが増えつつある (Table \@ref(tab:revdep))。 +同等の **geoverse** はないが、R-spatial エコシステムは、**sf**\index{sf} と **terra** を中心に集約されており、本書では両者を解説する。**sf** に依存するパッケージ は Table \@ref(tab:revdep) の通りである。 +Chapter \@ref(gis) で解説する通り、パッケージ間でも他の言語との間でも相互運用性が高い。 ```{r revdep, echo=FALSE, message=FALSE} top_dls = readr::read_csv("extdata/top_dls.csv") @@ -260,56 +284,41 @@ knitr::kable(top_dls[1:5, 1:2], digits = 0, # cranlogs::cran_top_downloads(when = "last-month") # most downloaded pkgs ``` -並行して行われる開発群は、 [rspatial](https://github.com/rspatial) パッケージ群に関連するものである。^["r-spatial" は **sf** などのパッケージを含む組織で、"rspatial" は **terra** を担当する組織であるという違いに注意。] -主なメンバーは、空間ラスタを扱う **terra** パッケージである (Section \@ref(an-introduction-to-terra) を参照)。 - ## R-spatial の歴史 {#the-history-of-r-spatial} -最新の空間パッケージである **sf** を使うメリットはたくさんあるが、R の空間機能の歴史を知っておくことも重要である。多くの機能、ユースケース、教材は古いパッケージに含まれている。 -古いものにも、見るところさえ分かれば、今でも十分役に立つ。 -\index{R!history} -\index{R-spatial!history} +最新の空間パッケージである **sf** を使うメリットはたくさんあるが、R の空間機能の歴史を知っておくことも重要である。 +古いパッケージには機能、ユースケース、教材が多いため、今でも十分役に立つ。 +\index{R!れきし@歴史} +\index{R-spatial!れきし@歴史} R の空間機能は、S 言語の初期の空間パッケージが起源である [@bivand_implementing_2000]。 \index{S} 1990年代には、数多くの S スクリプトが開発され、空間統計\index{とうけいがく@統計学}のためのパッケージも数多く開発された。 2000 年までに、「点パターン解析、地球統計学、探索的空間データ解析、空間経済学」という様々な空間手法のための R パッケージが誕生した [@bivand_open_2000]。 これらのうち、特に **spatial**、**sgeostat**、**splancs** は CRAN\index{CRAN} でまだ利用可能である [@rowlingson_splancs_1993; @rowlingson_splancs_2017;@venables_modern_2002; @majure_sgeostat_2016]。 +主要な空間パッケージは @ripley_spatial_2001 で説明されており、空間平滑化と補間のための R パッケージ [@akima_akima_2016; @jr_geor_2016] と点パターン分析 [@rowlingson_splancs_2017; @baddeley_spatial_2015] の概要が述べられている。 +そのうちの一つ(**spatstat**)は、最初のリリースから 20 年以上経った今でも活発にメンテナンスされている。 + +続く解説では、空間統計の将来の展望を概説し [@bivand_more_2001]、人気のある **spdep** パッケージ [@bivand_spdep_2017] の開発の舞台を設定した。 +特筆すべきは、空間インターフェースの標準化、GIS とのデータ交換の効率的なメカニズム、座標参照系 (CRS\index{CRS}) などの空間メタデータの取り扱いの必要性に言及したことであり、これらの目的はほぼ達成されている。 + +**maptools** [@bivand_maptools_2017] もこの時期の重要なパッケージで、 Shapefile\index{Shapefile} を読むための [shapelib](http://shapelib.maptools.org/) ライブラリへのインタフェースを提供し、**sp** に供給していた。 +空間パッケージの拡張レビューでは、基本的な点、線、多角形、ラスタ型と外部ライブラリへのインタフェースを含む「GDALが提供するデータオブジェクト」をサポートするクラスシステムが提案された [@hornik_approaches_2003]。 +これらのアイデアは **rgdal** パッケージと **sp** パッケージで実現され、2008 年に初版が出版された **Applied Spatial Data Analysis with R** (ASDAR) [@bivand_applied_2013] の基礎となった。 +R の空間機能はそれ以来大幅に進化しているが、初期のパイオニアたちのアイデアの上に成り立っている。 +例えば、GDAL\index{GDAL} と PROJ\index{PROJ} へのインターフェースは、R の高性能な地理データ I/O と CRS\index{CRS} の変換機能を可能にしている。それぞれ Chaptger \@ref(reproj-geo-data) と Chapter \@ref(read-write) で解説する。 -その後の R News ([The R Journal](https://journal.r-project.org/) の前身) の記事には、当時の R の空間統計ソフトウェアの概要が掲載されており、その多くは S/S-PLUS\index{S} のために書かれた以前のコードに基づいていた [@ripley_spatial_2001]。 -この概要では、**akima** や **geoR** [@akima_akima_2016; @jr_geor_2016] などの空間平滑化や補間のパッケージ、**splancs** [@rowlingson_splancs_2017] や **spatstat** [@baddeley_spatial_2015] などの点パターン解析のパッケージについて説明した。 - -R News の次の号 (Volume 1/3) では、空間系パッケージに再びスポットライトを当て、**splancs** をより詳しく紹介し、空間統計に関する将来の展望を解説した [@bivand_more_2001]。 -さらに、この問題では空間自己相関を検定するための 2 つのパッケージが紹介され、最終的には **spdep** [@bivand_spdep_2017] の一部となった。 -特に、空間インターフェースの標準化、GIS\index{GIS} とのデータ交換の効率的な仕組み、座標参照系 (coordinate reference systems, CRS\index{CRS}) などの空間メタデータの取り扱いの必要性について言及している。 - -**maptools** (Nicholas Lewin-Koh 作成; @bivand_maptools_2017) もこの時の重要なパッケージである。 -当初 **maptools** は [shapelib](http://shapelib.maptools.org/) のラッパーを含んでいるだけで、ESRI Shapefiles\index{Shapefile} をジオメトリのネストされたリストに読み込むことを許可していた。 -対応する、今では廃止されたS3クラス\index{S3 クラス} の "Map" は、このリストを属性データフレームと一緒に保存していた。 -それにもかかわらず、"Map" クラス表現に関する作業は、CRAN\index{CRAN} で出版される前の **sp** に直接反映されたので重要であった。 - -2003年、Roger Bivand は空間パッケージの拡張レビューを発表した。 -「GDAL\index{GDAL} が提供するデータオブジェクト」をサポートするクラスシステムを提案し、「基本的な」点、線、ポリゴン、ラスタタイプを含む。 -さらに、外部ライブラリへのインタフェースは、モジュール化された R パッケージの基礎となるべきであると提言している [@hornik_approaches_2003]。 -これらのアイデアは、**rgdal** と **sp** というパッケージで、かなりの部分実現されている。 -これらは、2008年に初版が発行された *Applied Spatial Data Analysis with R* (ASDAR) [@bivand_applied_2013] で説明されているように、R による空間データ解析の基礎を提供するものであった。 -10年後、R の空間機能は大幅に進化したが、@hornik_approaches_2003 で示されたアイデアの上に成り立っていることに変わりはない。 -例えば、GDAL\index{GDAL} と PROJ\index{PROJ} のインターフェースは、R の高性能な地理データ入出力と CRS\index{CRS} 変換機能を依然として支えている (それぞれ、Chapter \@ref(reproj-geo-data) および Chapter \@ref(read-write) を参照)。 - -2003 年にリリースされた **rgdal** は、R に GDAL\index{GDAL} バインディングを提供し、これまで利用できなかった地理データ形式からデータをインポートする機能を大幅に向上させることとした。 -初期リリースではラスタドライバのみをサポートしていたが、その後の機能拡張により、座標参照系 (PROJ ライブラリ経由) 、再投影、ベクタファイル形式のインポート (ファイル形式については Chapter \@ref(read-write) を参照) をサポートするようになった。 -これらの追加機能の多くは、Barry Rowlingson によって開発され、2006年に **rgdal** コードベースでリリースされた (コンテキストについては、 @rowlingson_rasp:_2003 と [R-help](https://stat.ethz.ch/pipermail/r-help/2003-January/028413.html) email list を参照)。 - -\index{sp (package)} -2005年にリリースされた **sp** は、R の空間オブジェクトと非空間オブジェクトの区別ができない点を克服した [@pebesma_classes_2005]。 -**sp** は 2003年にウィーンで開かれたワークショップから発展し、当初は SourceForge でホストされていたが、R-Forge、GitHub へと移行した。 -2005年以前は、地理座標は一般的に他の数値と同様に扱われていた。 -点、線、ポリゴン、グリッド、属性データをサポートするクラスと汎用メソッドにより、**sp** はこれを変更した。 - -**sp** は、S4 クラス\index{S4 クラス}システムを使用して、バウンディングボックス\index{ばうんでぃんぐぼっくす@バウンディングボックス}、座標参照系\index{CRS}、属性などの情報を `Spatial` オブジェクトのスロットに格納する。 -データ操作で地理データを扱えるようにする (Section \@ref(why-simple-features) 参照)。 -さらに、**sp** では、地理データのための `summary()` や `plot()` などの汎用的なメソッドが用意されている。 -その後の 10年間で **sp** クラスは R の地理データ用として急速に普及し、これに依存するパッケージの数は2008年の約 20 から 2013 年には 100 以上に増加した [@bivand_applied_2013]。 +2003 年にリリースされた **rgdal** は、R 用の GDAL\index{GDAL} バインディングを提供し、以前は利用できなかった地理データ形式からインポートする機能を大幅に強化した。 +最初のリリースではラスタドライバのみをサポートしたが、その後の機能強化により、座標参照系 (PROJライブラリ経由)、再投影、ベクタのインポートをサポートした。 +これらの追加機能の多くは Barry Rowlingson によって開発され、2006 年に **rgdal** コードベースでリリースされた。 + +2005 年にリリースされた **sp** は、R の空間対応を大きく進展させた。 +**sp** は、クラスとジェネリック関数を採用し、属性データだけでなく地理座標、点、線、ポリゴンやメッシュ (grid) を扱えるようになった。 +**sp** は S4 クラスであり、バウンディングボックス、座標参照系 (CRS) 、属性などの情報を `Spatial` オブジェクトのスロットに格納する。 +これにより、データ操作で地理データを扱えるようになった。 +さらに、**sp** では、地理データのための `summary()` や `plot()` などのジェネリックメソッドが用意されている。 + +その後の 10 年間で **sp** クラスは R の地理データ用として急速に普及し、これに依存するパッケージの数は2008年の約 20 から 2013 年には 100 以上に増加した [@bivand_applied_2013]。 2019年までに **sp** に依存するパッケージは 500 を超えたが、**sf** やその他のパッケージに移行するためその数は減少している。 **sp** を使用する主な R パッケージには、空間・時空間地球統計学\index{くうかん@空間!とうけい@統計}の **gstat** 、球面三角法の **geosphere** などがある [@R-gstat; @calenge_package_2006; @hijmans_geosphere_2016]。 @@ -328,12 +337,12 @@ length(revdep_sf) # 739 # 2023-11-16 **sp** エコシステムの限界は、ラスタデータのサポートが限定的であることであった。 これを克服したのが、2010年に初めてリリースされた **raster**\index{らすた@ラスタ} である [@R-raster]。 Section \@ref(raster-data) にあるように、**raster** クラスシステムと関数によって、さまざまなラスタ操作が可能になり、現在では **terra** パッケージに実装されている。 -**raster** と **terra** の重要な機能は、RAM に収まらないほど大きなデータセットを扱うことができることであり、ディスク外操作もサポートしている。 +**raster** と **terra** の重要な機能は、RAM に収まらないほど大きなデータセットを扱うことができることであり、ディスク外操作でサポートしている。 **raster** および **terra** は、Section \@ref(map-algebra) で説明されているように、マップ代数もサポートしている。 このようなクラスシステムや手法の開発と並行して、専用の GIS ソフトのインターフェースとして R がサポートされるようになった。 **GRASS** [@bivand_using_2000] とそれに続くパッケージ **spgrass6** と **rgrass7** と **rgrass** (それぞれ GRASS\index{GRASS} GIS 6 と 7 と 7 + 8 に対応) は、この方向性の顕著な例であった [@bivand_rgrass7_2016;@bivand_spgrass6_2016;@R-rgrass]。 -R と GIS の橋渡しの例としては、他に **RSAGA** [@R-RSAGA, first published in 2008]\index{RSAGA (package)}、**RPyGeo** [@brenning_arcgis_2012、2008 年に初登場]、**RQGIS** [@muenchow_rqgis:_2017、2016 年に初登場]\index{RQGIS (package)}、**qgisprocess**\index{qgisprocess (package)} がある (Chapter \@ref(gis) 参照)。 +R と GIS の橋渡しの例としては、他に QGIS には **qgisprocess** [@R-qgisprocess]、SAGA には **Rsagacmd** [@R-Rsagacmd] や **RSAGA** [@R-RSAGA]\index{RSAGA (package)}、ArcGIS には **RPyGeo** [@brenning_arcgis_2012, first published in 2008] がある (Chapter \@ref(gis) 参照)。 R-spatial の開発の大部分は解析と地理的な操作に集中しており、当初は可視化には焦点が当てられていなかった。 base と lattice の両方のプロット方式で地図を作る方法を提供していた **sp** であるが、高度な地図作成機能への要望が高まっていた。 @@ -342,38 +351,36 @@ base と lattice の両方のプロット方式で地図を作る方法を提供 その後、**ggplot2** [@kahle_ggmap_2013] に同様の「ベースマップ」タイル機能を追加した **ggmap** パッケージがリリースされた。 **gpmap** は **ggplot2** で地図を作ることを容易にしたが、`fortify` 空間オブジェクトをロング形式のデータフレームに変換する必要があるため、その実用性は限られていた。 これは点に対してはうまくいくが、線やポリゴンに対しては計算効率が悪く、各座標 (頂点) が行に変換されるため、複雑な形状を表現するためには巨大なデータフレームが必要となるのである。 -地理的な可視化はベクタデータを中心に行われる傾向があるが、ラスタの可視化は **raster** でサポートされており、空間と時間のデータの可視化に関する書籍 [@lamigueiro_displaying_2018] で紹介されている **rasterVis** のリリースで盛り上がりを見せた。 -それ以来、R での地図作成は話題となり、Chapter \@ref(adv-map) で強調されているように、**tmap**、**leaflet**、**rayshader**、**mapview**などの専用パッケージが人気を博している。 +地理的な可視化はベクタデータを中心に行われる傾向があるが、ラスタの可視化は **raster** でサポートされ、**rasterVis** のリリースでさらに盛り上がった [@lamigueiro_displaying_2018]。 +それ以来、R での地図作成は話題となり、Chapter \@ref(adv-map) で強調されているように、**tmap**、**leaflet**、**mapview** などの専用パッケージがよく使われている。 -Geocomputation with R 第 1 版が出版された2018年以降、地理系 R パッケージの開発が加速している。 +Geocomputation with R 第 1 版が出版された 2018 年以降、地理系 R パッケージの開発が加速している。 \index{terra (package)}\index{raster (package)} -**raster** パッケージの後継である **terra** は、2020年に初めてリリースされ、ラスタデータセットを扱う R ユーザーにいくつかの利点をもたらしている [@-terra]。Section \@ref(raster-data) で説明されているように、前任者よりも高速でより分かりやすいユーザーインターフェースを持っている。 +**raster** パッケージの後継である **terra** は、2020 年に初めてリリースされ、ラスタデータセットを扱う R ユーザーにいくつかの利点をもたらしている [@-terra]。Section \@ref(raster-data) で説明されているように、前任者よりも高速でより分かりやすいユーザーインターフェースを持っている。 -2021年半ば、**sf** パッケージに球面幾何学計算を取り入れるという大幅な (場合によっては破たんする) 変更が行われた。 -それ以来、地理的 CRS を持つデータに対する多くの空間演算は、Section \@ref(s2) で説明されているように、バックエンドとして S2 球形ジオメトリエンジンを使うのがデフォルトになっている。 +Section \@ref(s2) で説明する通り、**sf** パッケージは、2021 年半ばより非投影データに対しては S2 球面幾何学計算を取り入れた。 また、2018年以降の R で地理データを表現し作業する方法として、**stars** と **lidR** パッケージが追加されている。 -**sf** と密接に統合されている **stars** は、ラスタおよびベクタデータキューブを処理する [@pebesma_stars_2021]。 -空中の LiDAR (Light Detection and Ranging) 点群を **lidR** 処理する [@Roussel2020]。 \index{stars (package)} \index{lidR (package)} -この近代化には、新しい技術や標準の出現、R環境以外での空間ソフトウェア開発による影響など、いくつかの動機があった [@bivand_progress_2021]。 -R 空間パッケージを含むほとんどの空間ソフトウェアに影響を与える最も重要な外部要因は、2018年に始まった PROJ ライブラリ\index{PROJ} の多くの破壊的な変更を含む大規模なアップデートであった。 -最も重要なのは、これらの変更により、座標参照系の「proj-string」表現が、Section \@ref(crs-intro) と Chapter \@ref(reproj-geo-data) で説明されているように、「Well Known Text」に置き換えられなければならなくなったことである。 +この展開は、R 環境外の新技術、新標準、ソフトウェアによるものである [@bivand_progress_2021]。 +2018 年に始まった PROJ ライブラリ\index{PROJ} の変更により、座標参照系の proj-string 表現を、Section \@ref(crs-intro) と Chapter \@ref(reproj-geo-data) で説明するように、Well Known Text に置き換えられなければならなくなった。 \index{rayshader (package)} -2018年以降、R による空間可視化ツールの進展は、いくつかの要因が関係している。 -まず、新しいタイプの空間プロットが開発され、レイトレーシングと複数のヒルシェード手法を組み合わせて 2D および 3D のデータ可視化を行う **rayshader** パッケージが提供された [@morganwall_rayshader_2021]。 +2018 年に Geocomputation with R の第 1 版が出版されて以来、空間データ可視化のためのいくつかのパッケージが開発・改良されてきた。 +例えば、**rayshader** パッケージは、レイトレーシングと複数のヒルシェーディング [@morganwall_rayshader_2021] を介して、印象的でアニメーションしやすい 3D ビジュアライゼーションの開発を可能にする。 \index{ggplot2 (package)} -第二に、**ggplot2** は、スケールバーや北矢印などの空間可視化要素を追加する **ggspatial** パッケージ [@dunnington_ggspatial_2021] と、スムーズでカスタマイズ可能な空間アニメーションを可能にする **gganimate** パッケージ [@pedersen_gganimate_2020] など、新しく空間機能が追加された。 -第三は、大規模な空間データの可視化性能の向上である。 -特に、**tmap** におけるダウンスケールしたラスタの自動プロットや、**mapview** パッケージの高性能インタラクティブレンダリングプラットフォーム (`"leafgl"` や `"mapdeck"` など) の使用可能性に関連している。 -最後に、既存のマッピングツールの中には、依存関係の最小化、ユーザーインターフェースの改善、拡張機能の作成が容易になるように書き直されたものがある。 -これには **mapsf** パッケージ (**cartography** の後継) [@giraud_mapsf_2021] と **tmap** パッケージのバージョン 4 が含まれ、内部コードの大部分が改訂された。 - -2021 年後半、Roger Bivand が [R-sig-Geo mailing list](https://stat.ethz.ch/pipermail/r-sig-geo/2021-September/028760.html) において **rgdal**、**rgeos**、**maptools** を引退させる予定であることが発表された。 -2023 年にこれらのパッケージが引退したことは、パッケージを利用する作業に大きな影響を与えただけでなく、[これらのパケージに依存しているパッケージにも影響を与えた](https://geocompx.org/post/2023/rgdal-retirement/)。 -そこで、Bivand は、本書の次の章で説明するように **sf** や **terra** などより現代的なツールへの移行を提案した。 +非常に人気のある **ggplot2** パッケージは、**ggspatial** パッケージで、スケールバーと北矢印という新しい空間機能を得た [@dunnington_ggspatial_2021]。 +**gganimate** はスムーズでカスタマイズ可能な空間アニメーションを可能にする [@pedersen_gganimate_2020]。 + +既存の可視化パッケージも改良されたり書き直されたりしている。 +大きなラスタオブジェクトは **tmap** で自動的に縮小され、**leafgl** や **mapdeck** を含むパッケージのおかげで、高性能なインタラクティブマップが可能になっている。 +。 +**mapsf** パッケージ (**cartography** の後継) は依存関係を減らし、パフォーマンスを向上させるために書き直された [@giraud_mapsf_2021]。また、**tmap** はバージョン 4 で大きなアップデートが行われ、内部コードのほとんどが改訂された。 + +2021 年後半に、**rgdal**、**rgeos**、**maptools** の引退計画が[発表され](https://stat.ethz.ch/pipermail/r-sig-geo/2021-September/028760.html)、2023 年 10 月に CRAN にアーカイブされた。 +この 2023 年末の引退は、これらのパッケージを適用する既存のワークフローに大きな影響を与えただけでなく、[それらに依存するパッケージにも影響を与えた](https://geocompx.org/post/2023/rgdal-retirement/)。 +Chapter \@ref(spatial-class) で説明する **sf** や **terra** のような最新の R パッケージは、本書で紹介するジオコンピュテーションのための強力で将来性のある基礎である。 ## 演習