Dataset

Dataset[data]

リストおよび連想の階層に基づく,構造化データ集合を表す.

詳細とオプション

  • Datasetは,データの完全な多次元矩形配列だけでなく,任意の階層構造を持ったデータに対応する任意の木構造も表すことができる.
  • Datasetオブジェクトは,含んでいるデータによって,表としてあるいは要素の格子として表示されることが多い.
  • MapSelect等の関数は,Map[f,dataset]Select[dataset,crit]等を書くことで,Datasetに直接適用することができる.
  • Datasetオブジェクト中のデータの部分集合は,dataset[[parts]]を書くことで得ることができる.
  • Datasetオブジェクトは,dataset[query]を書いて特化したクエリ構文を使うことでクエリすることもできる.
  • データ集合の構造
  • リストおよび連想の任意のネストが可能であるが,もっともよく使われるのは二次元(表)形式である.
  • 次の表は,Datasetのよく使われる表示形式,それが含むWolfram言語の形式,その構造の論理解釈を表で表したものの間の対応関係である.
  • {{,,},
    {,,},
    {,,},
    {,,}}
    リストのリスト
    名前付きの行・列がない表

    {<|"x","y",|>,
    <|"x","y",|>,
    <|"x","y",|> }
    連想のリスト
    名前付きの列がある表
    <|"a"{,,},
    "b"{,,},
    "c"{,,},
    "d"{,,}|>
    リストの連想
    名前付きの行がある表
    <|"a"<|"x","y"|>,
    "b"<|"x","y"|>,
    "c"<|"x","y"|>|>
    連想の連想
    名前付きの行・列がある表
  • Datasetはネストしたリストと連想を,行ごとに解釈する.つまり,データのレベル1(最も外側のレベル)は表の行として,レベル2は列として解釈される.
  • 「名前付き」の行と列は,レベル1とレベル2の連想(キーは名前を含む文字列)にそれぞれ対応する.名前のない行と列はそれぞれのレベルのリストに対応する.
  • データ集合の業および列はTranspose[dataset]を書くことで入れ替えることができる.
  • データ集合のオプション
  • 次は,使用可能なオプションである.
  • Alignment {Left,Baseline}項目の水平および垂直の位置合せ
    Background None項目の背景色
    DatasetTheme Automaticデータ集合の全体的なテーマ
    HeaderAlignment {Left,Baseline}ヘッダの水平および垂直の位置合せ
    HeaderBackground Automaticヘッダの背景色
    HeaderDisplayFunction Automaticヘッダのフォーマットに使用する関数
    HeaderSize Automaticヘッダの高さと幅
    HeaderStyle Noneヘッダのスタイル
    HiddenItems None隠す項目
    ItemDisplayFunction Automatic項目のフォーマットに使用する関数
    ItemSize Automatic項目の高さと幅
    ItemStyle None列と行のスタイル
    MaxItems Automatic表示する項目の最大数
  • HiddenItemsMaxItemsDatasetThemeを除くオプションの設定は,次のように各項目に別々に適用できる.
  • specすべての項目に spec を適用する
    {speck}連続するレベルで speckを適用する
    {spec1,spec2,, specn,rules}特定の部分に明示的な規則が使えるようにする
  • speckは以下の形でよい.
  • {s1,s2,,sn}s1から snまでを使い,次にデフォルトを使う
    {{c}}すべての場合に c を使う
    {{c1,c2}}c1c2を交互に使う
    {{c1,c2,}}すべての ciを循環的に使う
    {s,{c}}s を使い,次に c を繰り返し使う
    {s1,{c},sn}s1を使い,次に c を繰り返し使うが,最後は snを使う
    {s1,s2,,{c1,c2,},sm,,sn}最初の一続きの siを使い,次に ciを循環的に使い,最後に siの最後の一続きを使う
    {s1,s2,,{},sm,,sn}はじめに siの最初の一続きを使い,最後に終りの一続きを使う
  • {s1,s2,,{},sm,,sn}の形の設定のとき,データ集合内の項目数よりも指定されたの siの方が多い場合は,最初の方の項目には最初の siが使われ,最後の方の項目には最後のものが使われる.
  • 規則は ispec の形をしている.iDataset中の位置を指定する.位置はパターンでもよい.
  • 要素の位置は,要素にカーソルを合わせてデータ集合の一番下から読むことができる.
  • MaxItemsの設定は以下のように与えられる.
  • mm 行を指定する
    {m1, m2,,mn}データ集合のレベル imi項目を表示する
  • MaxItemsAutomaticはデフォルト数の項目を表示すべきであることを示す.
  • HiddenItemsの設定は以下のように与えられる.
  • i位置 i の項目を隠す
    {i1,i2,,in}位置 ikの項目を隠す
    {, iFalse,}位置 i の項目を表示する
    {, iTrue,}位置 i の項目を隠す
  • HiddenItemsリスト内の後ろの設定は前の設定を無効にする.
  • ItemDisplayFunctionHeaderDisplayFunctionについての個別の設定は,表示される項目を返す純関数である.関数は,項目の値,項目の位置,項目を含むデータ集合の3つの引数を取る.
  • ItemStyleHeaderStyleの設定の位置の中で,明示的な規則が ispec として解釈されることがある.スタイルオプションのつもりなら規則をDirectiveでラップするとよい.
  • AlignmentHeaderAlignmentItemSizeHeaderSizeのような値のリストの場合があるオプションでは,トップレベルのリストは可能な場合は単一のオプション値として,それ以外の場合は連続するDatasetレベルについての値のリストとして解釈される.
  • 規則の左辺がリストではない場合は,左辺をキーまたは指標として含む任意の位置に設定が適用される.
  • 設定を返す純関数 f を設定の位置に使うことができる.この設定は f[item,position,dataset]で与えられる.
  • Normalを使って任意のDatasetオブジェクトをもとになっているデータ(リストと連想の組合せのことが多い)に変換できる.
  • 部分操作
  • 構文 dataset[[parts]]あるいはPart[dataset,parts]を使ってDatasetの一部を抽出することができる.
  • Datasetから抽出できる部分には,Partの通常の指定が含まれる.
  • Partの通常の動作とは異なり,Datasetに指定された下位区分が存在しない場合は,結果としてその代りにMissing["PartAbsent",]が生成される.
  • 次は,表データ集合から行を抽出するのによく使われる部分操作である.
  • dataset[["name"]]名前付きの行を抽出(該当する場合)
    dataset[[{"name1",}]]名前付きの行の集合を抽出
    dataset[[1]]第1行を抽出
    dataset[[n]]n 列を抽出
    dataset[[-1]]最終行を抽出
    dataset[[m;;n]]m 行から第 n 行までを抽出
    dataset[[{n1,n2,}]]番号付きの行集合を抽出
  • 次は,表データ集合から列を抽出するのによく使われる部分操作である.
  • dataset[[All,"name"]]名前付きの列を抽出(該当する場合)
    dataset[[All,{"name1",}]]名前付きの列の集合を抽出
    dataset[[All,1]]第1列を抽出
    dataset[[All,n]]n 列を抽出
    dataset[[All,-1]]最終列を抽出
    dataset[[All,m;;n]]m 列から第 n 列までを抽出
    dataset[[All,{n1,n2,}]]列の部分集合を抽出
  • Partと同じように,行と列の操作は組み合せることができる.次はその例である.
  • dataset[[n,m]]n 行の第 m 列のセルを取り出す
    dataset[[n,"colname"]]n 行の名前付きの列の値を抽出
    dataset[["rowname","colname"]]名前付きの行の名前付きの列のセルを取り出す
  • 次の操作で,事実上連想をリストにすることで,行および列のラベルを取り除くことができる.
  • dataset[[Values]]行からラベルを取り除く
    dataset[[All,Values]]列からラベルを取り除く
    dataset[[Values,Values]]行と列からラベルを取り除く
  • データ集合のクエリ
  • クエリ構文 dataset[op1,op2,]は,集約と変換の適用を許可してデータの部分集合を取る,Part構文の拡張と考えることができる.
  • 次は,よく使われるクエリ形式のリストである.
  • dataset[f]f を表全体に適用
    dataset[All,f]f を表内のすべての行に適用
    dataset[All,All,f]f を表内のすべてのセルに適用
    dataset[f,n]n 列を抽出し,これに f を適用
    dataset[f,"name"]名前付きの列を抽出し,これに f を適用
    dataset[n,f]n 行を抽出し,これに f を適用
    dataset["name",f]名前付きの行を抽出し,これに f を適用
    dataset[{nf}]n 行に選択的に f をマップ
    dataset[All,{nf}]n 列に選択的に f をマップ
  • 特殊な形のクエリ
  • dataset[Counts,"name"]の名前付きの列中の,異なる値の数を与える
    dataset[Count[value],"name"]名前付きの列の中での,value の出現回数を与える
    dataset[CountDistinct,"name"]名前付きの列の中で,他とは異なる値の数を数える
    dataset[MinMax,"name"]名前付きの列の中の最大値と最小値を与える
    dataset[Mean,"name"]名前付きの列の中の平均値を与える
    dataset[Total,"name"]名前付きの列の値の合計を与える
    dataset[Select[h]]条件 h を満足する行を取り出す
    dataset[Select[h]/*Length]条件 h を満足する行数を数える
    dataset[Select[h],"name"]行を選択し,結果から名前付きの列を抽出する
    dataset[Select[h]/*f,"name"]行を選択し,名前付きの列を抽出し,次にこれに f を適用する
    dataset[TakeLargestBy["name",n]]名前付きの列が最大である n 行を与える
    dataset[TakeLargest[n],"name"]名前付きの列の中の最大な n 個の値を与える
  • 下降演算子と上昇演算子
  • dataset[op1,op2,]では,クエリ演算子 opiは,事実上,データの連続的に深いレベルに適用される.しかし,データを「下降中」あるいは「上昇中」に任意の1つが適用されることがある.
  • Datasetクエリを構成する演算子は,明確な上昇あるいは下降動作のある,次の大きいカテゴリの1つに入る.
  • All,i,i;;j,"key",下降部分演算子
    Select[f],SortBy[f],下降フィルタリング演算子
    Counts,Total,Mean,上昇集約演算子
    Query[],上昇サブクエリ演算子
    Function[],f上昇任意の関数
  • 「下降」演算子は,続く演算子がより深いレベルに適用される前に,もとのデータ集合の対応する部分に適用される.
  • 下降演算子は,あるレベルに適用された場合に,データのより深いレベルの構造は変えないという特徴を持つ.このため,続く演算子はもとのデータ集合の対応するレベルにあるのと同一の構造を持つ部分式に遭遇することになる.
  • 最も単純な下降演算子はAllである.この演算子は指定されたレベルのすべての部分を選択し,そのレベルのデータ構造はそのままに残す.Allは,他の有効なクエリを行うために,他の下降演算子と問題なく置換することができる.
  • 「上昇」演算子は,より深いレベルに続く上昇・下降演算子がすべて適用された後で適用される.下降演算子がもとのデータのレベルに対応するのに対し,上昇演算子は結果のレベルに対応する.
  • 下降演算子とは異なり,上昇演算子はそれが適用されるデータの構造を必ずしも保存しない.演算子は,特に下降演算子として認識されている場合を除いて,上昇演算子であるとみなされる.
  • 部分操作
  • 「下降」部分演算子は,続く演算子をより深いレベルに適用する前に,あるレベルでどの要素を取るかを指定する.
  • All続く演算子をリストあるいは連想の各部分に適用する
    i;;ji から j までの部分を取り,続く演算子を各部分に適用する
    ii の部分だけを取り,続く演算子をそれに適用する
    "key",Key[key]連想中の key の値を取り,続く演算子をそれに適用する
    Values連想の値を取り,続く演算子を各値に適用する
    {part1,part2,}指定された部分を取り,続く演算子を各部分に適用する
  • フィルタリング演算子
  • 「下降」フィルタリング演算子は,より深いレベルに続く演算子を適用する前に,あるレベルで要素をどのように並べ直すか,あるいは要素にどのようにフィルタをかけるかを指定する.
  • Select[test]test を満足するリストあるいは連想の部分だけを取る
    SelectFirst[test]test を満足する最初の部分を取る
    KeySelect[test]キーが test を満足する連想の部分を取る
    TakeLargestBy[f,n],TakeSmallestBy[f,n]f[elem]が最大または最小になる n 個の要素を順に取る
    MaximalBy[crit],MinimalBy[crit]基準 crit が他のすべての要素よりも小さいあるいは大きい部分を順に取る
    SortBy[crit]crit の順で部分を並び替える
    KeySortBy[crit]連想の各部分をそのキーに基づいて crit の順にソートする
    DeleteDuplicatesBy[crit]crit によって一意的である部分を取る
    DeleteMissing頭部Missingを持つ要素を除去する
  • 構文 op1/*op2を使って2つあるいはそれ以上のフィルタリング演算子を組み合せて,1つのレベルで動作する1つの演算子にすることができる.
  • 集約演算子
  • 「上昇」集合演算子は,続く演算子をより深いレベルに適用した結果を,組み合せたり要約したりする.
  • Total結果のすべての数量を合計する
    Min,Max結果の最大量と最小量を与える
    Mean,Median,Quantile,結果の統計的要約を与える
    Histogram,ListPlot,結果の可視化を計算する
    Merge[f]関数 f を使って,結果の連想の共通キーを1つにする
    Catenateリストあるいは連想の要素を連結させる
    Counts結果中の値の出現を数える連想を与える
    CountsBy[crit]値の出現を crit に従って数える連想を与える
    CountDistinct結果中の他とは異なる値の数を与える
    CountDistinctBy[crit]結果中の他とは異なる値の数を,crit に従って与える
    TakeLargest[n],TakeSmallest[n]最大または最小のt n 個の要素を取る
  • 構文 op1/*op2を使って2つあるいはそれ以上の集約演算子を組み合せて,1つのレベルで動作する1つの演算子にすることができる.
  • サブクエリ演算子
  • 「上昇」サブクエリ演算子は,より深いレベルに連続する演算子を適用した後で,サブクエリを行う.
  • Query[]結果にサブクエリを実行する
    {op1,op2,}複数の演算子を結果に同時に適用し,リストを返す
    <|key1op1,key2op2,|>複数の演算子を結果に同時に適用し,指定されたキーを持つ連想を返す
    {key1op1,key2op2,}結果の特定の部分に異なる演算子を適用する
  • 1つあるいは複数の下降演算子が1つあるいは複数の上昇演算子と組み合せられると(例:desc/*asc),最初に下降部分が適用され,続く演算子がより深いレベルに適用され,最後に上昇部分がそのレベルの結果に適用される.
  • 特殊演算子
  • 特殊「下降」演算子GroupBy[spec]は,それが現れたレベルに新たな連想を導入し,他の演算子の動作に影響することなく,既存のクエリに挿入されることも既存のクエリから削除されることもできる.
  • 構文のショートカット
  • CountsByGroupByTakeLargestBy等の関数は,通常は他の関数を引数の1つとして取る.Dataset中の連想と使う場合は,この引数関数を使って表の列の値を見ることがよくある.
  • これを簡単にするために,Datasetクエリでは,そのようなコンテキストの場合に構文"string"Key["string"]を表すことができる.例えば,クエリ演算子GroupBy["string"]は,実行前に自動的にGroupBy[Key["string"]]に書き換えられる.
  • 同様に,式GroupBy[dataset,"string"]GroupBy[dataset,Key["string"]]に書き換えられる.
  • クエリ動作
  • 可能な場合は,クエリが成功するかどうかを決定するためにタイプインターフェースが使われる.失敗すると推測される操作については,クエリは実行されず,Failureオブジェクトが返される.
  • デフォルトで,クエリの最中にメッセージが生成されると,クエリは放棄され,メッセージを含むFailureオブジェクトが返される.
  • クエリが構造化データ(例:連想のリスト,あるいはそのネストした組合せ)を返すと,結果は別のDatasetオブジェクトの形式で返される.その他の場合は,結果は通常のWolfram言語式で返される.
  • Datasetクエリの特別の動作についてのその他の情報は,Queryの関数ページを参照されたい.
  • インポートとエキスポート
  • Datasetオブジェクトは,ImportSemanticImportを使って"CSV""XLSX"等の形式からインポートできる.
  • Datasetオブジェクトは,Exportを使って"CSV""XLSX""JSON"等の形式にエキスポートできる.

例題

すべて開くすべて閉じる

  (1)

連想のリストからなる簡単なDatasetを作成する:

第2行を取得する:

第2列を取得する:

各列のTotalを計算する:

スコープ  (1)

表データからDatasetオブジェクトを作る:

数行取り出す:

特定の行を取り出す:

行は単なる連想に過ぎない:

特定の行から特定の要素を取り出す:

特定の列のコンテンツを取り出す:

列の中の特定の部分を取り出す:

行と列の部分集合を取り出す:

特定の列のコンテンツに関数を適用する:

列に基づいてデータ集合を分割し,各グループについてさらに演算子を適用する:

各行に関数を適用する:

各行と結果全体の両方に関数を適用する:

関数fを各行の各要素に適用する:

関数を各列に別々に適用する:

各列を計算する演算子を指定して,新たな表を作る:

同じテクニックを使って列の名前を付け直す:

基準に従って特定の行を選ぶ:

行を選択した後で,列のコンテンツを取り出す:

行を選択した後で使用可能な列の部分集合を取り出す:

基準を満たす最初の行を取り出す:

この行から値を取り出す:

基準に従って行をソートする:

スコアリング関数の最大値を与える行を取り出す:

スコアリング関数に従って,トップ3行を与える:

基準を複製する行を削除する:

行にフィルタをかけた後で列の値を集計する,上昇演算子および下降演算子を構成する:

クエリの後でTotalを適用することで,同じことを行う:

オプション  (42)

Alignment  (2)

全項目を右揃えにする:

「age」の列を右揃えにする:

Background  (10)

すべてのデータ集合項目の背景をピンクにする:

最初の行をピンクにする:

最初の列をピンクにする:

1項目をピンクにする:

最初の2行の背景をピンクと灰色にする:

同様のシンタックス:

ピンクと灰色の行を交互にする:

ピンクと灰色の列を交互にし,最初と最後の列を黄色にする:

ピンクと灰色の列を交互にし,3番目の列を黄色にする:

色を混ぜる:

背景色を値で設定する:

背景色を位置で設定する:

位置にパターンを使う:

DatasetTheme  (4)

行の背景を交互にするテーマを使う:

カスタムのプレゼンテーション用にテーマを組み合せる:

テーマを使って低レベルのグループ化を強調する:

テーマを使って長い行と列が見やすくなるような縞模様にする:

HeaderAlignment  (2)

行のヘッダを右揃えにする:

列のヘッダを中央揃えにする:

HeaderBackground  (2)

ヘッダをピンクにする:

行のヘッダをピンクにし,列のヘッダをシアンにする:

HeaderDisplayFunction  (1)

小文字のヘッダ:

HeaderSize  (1)

ヘッダを固定文字数の高さにする:

行のヘッダを固定文字数の幅にする:

HeaderStyle  (4)

ヘッダに全体的な1つのスタイルを設定する:

Directiveを使って複数のスタイル指示子をラップする:

現行スタイルシートのスタイルを使う:

特定のヘッダにスタイルを付ける:

HiddenItems  (4)

行を隠す:

列を隠す:

1項目を除いて行を隠す:

指定の値の項目を隠す:

ItemDisplayFunction  (1)

各項目に枠を付ける:

文字列を記号で置換する:

ItemSize  (3)

各項目の幅を固定文字数にする:

1行だけ高くする:

1列だけ狭くする:

ItemStyle  (6)

データ集合の項目に全体的な1つのスタイルを設定する:

Directiveを使って複数のスタイル指示子をラップする:

現行スタイルシートのスタイルを使う:

特定の要素にスタイルを付ける:

項目に値でスタイルを付ける:

項目に位置でスタイルを付ける:

MaxItems  (2)

指定数の行まで表示する:

指定数の行と列まで表示する:

アプリケーション  (3)

表(連想のリスト)  (1)

「タイタニック号」の乗客に関するデータ集合をロードする:

行の数を得る:

乗客のランダムなサンプルを得る:

もとのデータは連想のリストである:

年齢不詳の乗客数を数える:

1等,2等,3等の乗客数を数える:

乗客の年齢のヒストグラムを得る:

乗船等級でグループ分けされた,乗客の年齢のヒストグラムを得る:

最年長の乗客の年齢を求める:

全体の生存率を計算する:

性別および乗船等級についての生存率を示す:

生存率を年齢の関数として示す:

指標付きの表(連想の連想)  (1)

惑星とその特性のデータ集合をロードする:

地球の質量を調べる:

特定の惑星の付きに対応する部分表を得る:

惑星の半径のデータ集合を作成する:

惑星の半径を可視化する:

各惑星の月の数のデータ集合を作成する:

量の昇順でソートした,惑星とその質量のリストを得る:

各惑星の月の総質量を求める:

地球の月の質量の半分よりも大きい質量を持つ月のみのリストを得る:

各惑星の月の中で最も重いものを求める:

惑星の月すべてのリストを得る:

半径に対する質量の散布図を作成する:

密度を計算し,ヒストグラムにする:

各惑星の月の平均密度を計算する:

各惑星の密度とその月の平均密度を比較する表を作る:

階層的データ(他のデータの連想の連想)  (1)

各国の行政地区とその人口に関連するデータ集合をロードする:

もとのデータは,キーが国で,値が行政地区とその人口の間のさらなる連想である連想である:

特定の国の人口を調べる:

総人口を与える(データ集合に世界中のすべての国が含まれているわけではない):

各国内の地区数を数える:

地区数の総数:

地区数のヒストグラムを作る:

各地区の人口を総合することで,各国の総人口を計算する:

人口が最も多い5ヶ国を求める:

各国で最も人口が多い地区を求める:

各国の地区数とその人口を相関させる:

ListLogPlotに渡されたもとのデータは,それぞれの長さが2であるリストの連想である:

特性と関係  (4)

QueryDatasetがサポートするクエリ言語の演算子形である:

EntityValueを使って,Wolfram KnowledgebaseからEntityオブジェクトの特性のDatasetを得る:

沸点と密度を対数プロットでプロットする:

SemanticImportを使い,ファイルをDatasetとしてインポートする:

売り上げの総量を計算する:

「タイタニック号」の乗客のデータ集合の小さいサンプルを得る:

このサンプルを"JSON"形式でエキスポートする:

名前付きの列があるデータは,まず最初に転置をすることでよりコンパクトに表すことができる:

このサンプルを"CSV"としてエキスポートする:

考えられる問題  (3)

一貫した構造がないデータは,一般には,構造化データと同じようにはフォーマットされない:

クエリの部分的な操作が失敗すると推定される場合は,クエリ全体が実行されず,Failureオブジェクトが返される:

デフォルトで,Datasetに対する操作中にメッセージが生成されると,Failureオブジェクトが返される:

異なる動作を指定したければ,FailureAction操作と合わせて明示的なQuery式を使うとよい:

おもしろい例題  (2)

映画「タイタニック」の登場人物であるジャック・ドーソンとローズ・デウィット・ブケイターの生存可能性を,実在の乗客とマッチングすることで計算する:

国が選ばれるとその国の地区ごとのヒートマップを作る,インタラクティブなコントロールを作る:

Wolfram Research (2014), Dataset, Wolfram言語関数, https://reference.wolfram.com/language/ref/Dataset.html (2021年に更新).

テキスト

Wolfram Research (2014), Dataset, Wolfram言語関数, https://reference.wolfram.com/language/ref/Dataset.html (2021年に更新).

CMS

Wolfram Language. 2014. "Dataset." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/Dataset.html.

APA

Wolfram Language. (2014). Dataset. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Dataset.html

BibTeX

@misc{reference.wolfram_2024_dataset, author="Wolfram Research", title="{Dataset}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/Dataset.html}", note=[Accessed: 19-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_dataset, organization={Wolfram Research}, title={Dataset}, year={2021}, url={https://reference.wolfram.com/language/ref/Dataset.html}, note=[Accessed: 19-November-2024 ]}