跳到內容

資料群組化

群組離散值。

group(iterable, ...keys)

範例 · 原始碼 · 將指定的 iterable 值群組到從 key 到值陣列的 InternMap。例如,依據 species 欄位群組 penguins 範例資料集

js
const species = d3.group(penguins, (d) => d.species);

取得 species 欄位為 Adelie 的元素

js
species.get("Adelie") // Array(152)

如果指定多個 key,則會傳回巢狀 InternMap。例如

js
const speciesSex = d3.group(penguins, (d) => d.species, (d) => d.sex)

取得 speciesAdeliesexFEMALE 的企鵝

js
speciesSex.get("Adelie").get("FEMALE") // Array(73)

元素會依據每個 key 的第一個實例順序傳回。

groups(iterable, ...keys)

js
const species = d3.groups(penguins, (d) => d.species); // [["Adelie", Array(152)], …]

等同於 group,但會傳回 [key, value] 項目陣列,而非地圖。如果指定多個 key,每個 value 都會是 [key, value] 項目的巢狀陣列。元素會依據每個 key 的第一個實例順序傳回。

rollup(iterable, reduce, ...keys)

範例 · 原始碼 · 將指定的 iterable 值群組並簡化到從 key 到簡化值的 InternMap。例如,依據 species 欄位群組並計算 penguins 範例資料集 的數量

js
const speciesCount = d3.rollup(penguins, (D) => D.length, (d) => d.species);

取得物種為阿德利企鵝的企鵝數量

js
speciesCount.get("Adelie") // 152

如果指定多個 key,則會傳回巢狀 InternMap。例如

js
const speciesSexCount = d3.rollup(penguins, (D) => D.length, (d) => d.species, (d) => d.sex);

取得物種為阿德利企鵝且性別為雌性的企鵝數量

js
speciesSexCount.get("Adelie").get("FEMALE") // 73

元素會依據每個 key 的第一個實例順序傳回。

rollups(iterable, reduce, ...keys)

js
const speciesCounts = d3.rollups(penguins, (D) => D.length, (d) => d.species); // [["Adelie", 152], …]

等同於 rollup,但傳回 [key, value] 項目陣列,而非地圖。如果指定多個 key,每個 value 都會是 [key, value] 項目的巢狀陣列。元素會依照每個 key 的第一個實例順序傳回。

index(iterable, ...keys)

使用 rollup,並搭配一個從每個群組中萃取第一個元素的簡化器,如果群組有多個元素,則會擲回錯誤。例如,要根據日期索引 aapl 相同的資料集

js
const aaplDate = d3.index(aapl, (d) => d.Date);

然後,你可以快速根據日期擷取值

js
aaplDate.get(new Date("2013-12-31")).Close // 80.145714

元素會依照輸入順序傳回。

indexes(iterable, ...keys)

類似於 index,但傳回 [key, value] 項目陣列,而非地圖。這可能對任何事情都沒有幫助,但為了與 groupsrollups 對稱,所以包含在內。

flatGroup(iterable, ...keys)

範例 · 原始碼 · 等同於 group,但傳回 [key0, key1, …, values] 的平面陣列,而非巢狀地圖;這對於反覆運算所有群組很有用。

flatRollup(iterable, reduce, ...keys)

範例 · 原始碼 · 等同於 rollup,但傳回 [key0, key1, …, value] 的平面陣列,而非巢狀地圖;這對於反覆運算所有群組很有用。

groupSort(iterable, comparator, key)

範例 · 原始碼 · 將指定的元素iterable根據指定的key函數分組,根據指定的comparator對群組進行排序,然後傳回已排序的鍵陣列。例如,要根據中位數體重遞增順序排列企鵝範例資料集的物種

js
d3.groupSort(penguins, (D) => d3.median(D, (d) => d.body_mass_g), (d) => d.species) // ["Adelie", "Chinstrap", "Gentoo"]

要以遞減順序排列,請將群組值取反

js
d3.groupSort(penguins, (D) => -d3.median(D, (d) => d.body_mass_g), (d) => d.species) // ["Gentoo", "Adelie", "Chinstrap"]

如果傳遞comparator而不是accessor,如果第二個參數是需要兩個參數的函數),則會要求它比較兩個群組ab,如果a應該在b之前,則傳回負值,如果a應該在b之後,則傳回正值,如果為部分排序,則傳回零。