diff --git a/03-attribute-operations-ja.Rmd b/03-attribute-operations-ja.Rmd index eaca688..6c47ed7 100644 --- a/03-attribute-operations-ja.Rmd +++ b/03-attribute-operations-ja.Rmd @@ -29,7 +29,7 @@ library(spData) # Chapter 2 で紹介した空間データパッケージ \index{ぞくせい@属性} 属性データとは、地理 (ジオメトリ) データに関連する空間以外の情報である。 バス停を例にとると、その位置は通常、名称に加えて緯度・経度の座標 (ジオメトリデータ) で表現される。 -例えば、ロンドンの [Elephant & Castle / New Kent Road](https://www.openstreetmap.org/relation/6610626) の停留所の座標は、経度 -0.098 度、緯度 51.495 度で、Chapter \@ref(spatial-class) で説明した `sfc` の表現では `POINT (-0.098 51.495)` と表すことができる。 +例えば、London の [Elephant & Castle / New Kent Road](https://www.openstreetmap.org/relation/6610626) の停留所の座標は、経度 $-0.098$ 度、緯度 51.495 度で、Chapter \@ref(spatial-class) で説明した `sfc` の表現では `POINT (-0.098 51.495)` と表すことができる。 この章のトピックは、POINT フィーチャの属性\index{ぞくせい@属性}のうち、*name* のような名称の属性 (シンプルフィーチャの用語を使用する) である。 ```{r, eval=FALSE, echo=FALSE} @@ -71,8 +71,7 @@ Chapter \@ref(spatial-operations) は、ここで紹介した方法を空間的 ## ベクタ属性操作 {#vector-attribute-manipulation} \index{ぞくせい@属性} -`sf` クラスは、R の基本クラスの `data.frame` を拡張したものである。 -R はこれを利用して地理ベクタデータセットをサポートしている。 +地理ベクタデータセットは、R の基本クラスの `data.frame` を拡張した `sf` クラスにより対応されている。 `sf` オブジェクトはデータフレームのように、属性変数 ('name'など) ごとに 1 列、観察または フィーチャ (たとえば、バス停ごと) ごとに 1 行を持つ。 `sf` オブジェクトは基本的なデータフレームとは異なり、`sfc` クラス の `geometry` 列を持ち、1 行にさまざまな地理的実体 (「複合でない」および「複合」点、線、ポリゴン) を含むことができる。 Chapter \@ref(spatial-class) では、`plot()` や `summary()` などのジェネリック関数が `sf` オブジェクトでどのように動作するかを示した。 @@ -95,7 +94,7 @@ attributes(methods(class = "sf"))$info |> ``` これらの多く (`aggregate()`、`cbind()`、`merge()`、`rbind()`、`[`) は、データフレームを操作するためのものである。 -例えば、`rbind()` は、2つのデータフレームの行を「上下に」結合する。 +例えば、`rbind()` は、2 つのデータフレームの行を「上下に」結合する。 `$<-` は、新しい列を作成する。 `sf` オブジェクトの大きな特徴は、空間データと非空間データを同じように、`data.frame` の列として格納することである。 @@ -144,7 +143,7 @@ R の基本的な部分集合 (subset) の作成方法には、演算子 `[` と **dplyr** の関数では、行の部分集合作成には `filter()` と `slice()` があり、列の部分集合作成には `select()` がある。 どちらのアプローチも `sf` オブジェクトの属性データの空間成分を保持する。一方、演算子 `$` や **dplyr** 関数 `pull()` を使って単一の属性列をベクトルとして返すと、これから説明するようにジオメトリデータが失われる。 \index{ぞくせい@属性!ぶぶんしゅうごう@部分集合} -このセクションでは、`sf` データフレームの部分集合作成に焦点を当てている。ベクトルや非地理データフレームの部分集合に関する詳細については、An Introduction to R [@rcoreteam_introduction_2021] の Chapter [2.7](https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Index-vectors) と Advanced R Programming [@wickham_advanced_2019] の Chapter [4](https://adv-r.hadley.nz/subsetting.html) を勧める。 +このセクションでは、`sf` データフレームの部分集合作成に焦点を当てている。ベクトルや非地理データフレームの部分集合に関する詳細については、*An Introduction to R* [@rcoreteam_introduction_2021] の Section [2.7](https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Index-vectors) と *Advanced R Programming* [@wickham_advanced_2019] の Chapter [4](https://adv-r.hadley.nz/subsetting.html) を勧める。 \index{ぞくせい@属性!ぶぶんしゅうごう@部分集合} `[` 演算子は、行と列の両方から部分集合を作成 (抽出) することができる。 @@ -198,7 +197,7 @@ Base R 関数は成熟し安定しており、また広く使用されている データフレームの部分集合化する主要な関数 (`sf` データフレームを含む) を **dplyr** 関数で以下に示す。 ```{r, echo=FALSE, eval=FALSE} -# Aim: benchmark base vs dplyr subsetting +# Aim: benchmark base vs. dplyr subsetting # Could move elsewhere? i = sample(nrow(world), size = 10) benchmark_subset = bench::mark( @@ -308,9 +307,8 @@ operators_exp = c("等号", "不等号", "より大きい・小さい", "以上・以下", "論理学のかつ、または、ではない") knitr::kable(tibble(Symbol = operators, Name = operators_exp), - caption = paste("論理値 (TRUE/FALSE)", - "を返す比較演算。"), - caption.short = "Comparison operators that return Booleans.", + caption = "論理値 (true/false) を返す比較演算。", + caption.short = "Comparison operators.", booktabs = TRUE) ``` @@ -382,7 +380,8 @@ nrow(world_agg2) 結果として `world_agg2` オブジェクトは、世界の大陸 (および外洋) を表す 8 つのフィーチャを含む空間オブジェクトとなる。 \index{ぞくせい@属性!しゅうけい@集計} -`group_by() |> summarize()` は `aggregate()` の **dplyr** 版で、 `group_by()` 関数で指定した変数名でグループ化変数を指定し、 `summarize()` 関数に要約する内容の情報を渡す。コード例は以下の通り。 +`group_by() |> summarize()` は `aggregate()` の **dplyr** 版である。 +グループ化する変数は `group_by()` 関数で指定し、集約式は `summarize()` 関数に渡す。コード例は以下の通り。 ```{r 03-attribute-operations-28} world_agg3 = world |> @@ -406,13 +405,13 @@ world_agg4 = world |> \index{ぞくせい@属性!ぶぶんしゅうごう@部分集合} \index{ぞくせい@属性!しゅうけい@集計} これまで学んだ **dplyr** 関数を組み合わせて、複数のコマンドを連結し、世界の国々の属性データを大陸別にまとめてみよう。 -次のコマンドは、人口密度を計算し (`mutate()`)、大陸を含む国の数で並べ (`arrange()`)、最も人口の多い3大陸だけを残し (`slice_max()`)、その結果を Table \@ref(tab:continents) に表示する。 +次のコマンドは、人口密度を計算し (`mutate()`)、大陸を含む国の数で並べ (`arrange()`)、最も人口の多い 3 大陸だけを残し (`slice_max()`)、その結果を Table \@ref(tab:continents) に表示する。 ```{r 03-attribute-operations-30} world_agg5 = world |> st_drop_geometry() |> # 速くするためジオメトリを削除 select(pop, continent, area_km2) |> # 関心ある列のみの部分集合 - group_by(continent) |> # 大陸でグループ化し要約 + group_by(Continent = continent) |> # 大陸でグループ化し要約 summarize(Pop = sum(pop, na.rm = TRUE), Area = sum(area_km2), N = n()) |> mutate(Density = round(Pop / Area)) |> # 人口密度を計算 slice_max(Pop, n = 3) |> # 上位3件のみ @@ -424,7 +423,7 @@ options(scipen = 999) knitr::kable( world_agg5, caption = "人口の多い 3 大陸を国数で並べ替えて表示。", - caption.short = "Top 3 most populous continents.", + caption.short = "Top three most populous continents.", booktabs = TRUE ) ``` @@ -641,7 +640,7 @@ class(world_data) ## ラスタオブジェクトを操作 {#manipulating-raster-objects} シンプルフィーチャであるベクタデータ (点、線、ポリゴンを空間上の離散的な実体として表現する) とは対照的に、ラスタデータは連続的な面を表現する。 -このセクションでは、ラスタオブジェクトの動作を、Section \@ref(an-introduction-to-terra) を基にゼロから作成することによって説明する。 +このセクションでは、ラスタオブジェクトの動作を、Section \@ref(introduction-to-terra) を基にゼロから作成することによって説明する。 ラスタデータセットはユニークな構造のため、Section \@ref(raster-subsetting) で示すように、部分集合の作成やその他の操作は異なる。 \index{らすた@ラスタ!そうさ@操作}