コンテンツにスキップ

データのグループ化

離散値をグループ化する。

group(iterable, ...keys)

· ソース · 指定された値の *iterable* を、*key* から値の配列への InternMap にグループ化します。たとえば、 *ペンギン* サンプルデータセットを *種* フィールドでグループ化するには、次のようにします。

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

*種* フィールドが *アデリー* である要素を取得するには、次のようにします。

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

複数の *key* が指定されている場合、ネストされた InternMap が返されます。例えば

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

種が *アデリー* で性別が *メス* であるペンギンを取得するには、次のようにします。

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 に削減します。たとえば、 *ペンギン* サンプルデータセットを *種* フィールドでグループ化してカウントするには、次のようにします。

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* ] エントリの配列を返します。これはおそらく何の役にも立ちませんが、groups および rollups との対称性のために含まれています。

flatGroup(iterable, ...keys)

· ソース · group と同等ですが、ネストされたマップではなく [ *key0* 、 *key1* 、…、 *values* ] のフラット配列を返します。すべてのグループを反復処理するのに役立ちます。

flatRollup(iterable, reduce, ...keys)

· ソース · rollup と同等ですが、ネストされたマップではなく [ *key0* 、 *key1* 、…、 *value* ] のフラット配列を返します。すべてのグループを反復処理するのに役立ちます。

groupSort(iterable, comparator, key)

· ソース · 指定された *key* 関数に従って指定された *iterable* の要素をグループ化し、指定された *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"]

*accessor* の代わりに *comparator* が渡された場合(つまり、2 番目の引数がちょうど 2 つの引数を取る関数である場合)、2 つのグループ *a* と *b* を比較するように求められ、 *a* が *b* の前にある場合は負の値を、 *a* が *b* の後にある場合は正の値を、部分的な順序付けの場合はゼロを返す必要があります。