Query
詳細とオプション
- Queryは,任意の矩形データあるいは階層データの,複雑なフィルタリング,再構成,集約を行い,通常は,さらに矩形化あるいは階層化されたデータを返すことができる.
- Queryは,Datasetオブジェクトあるいはリストと連想からなる任意のネストした式に使うことができる.
- Queryは,式あるいはデータ集合の横断的なプロセスでの計算を許容するPartの一般化と見ることができる.
- operatoriは次の任意の形でよい.
-
All,i,i;;j,"key",Key[…] 部分演算子 Select[…],MaximalBy[…],… フィルタリング演算子 Counts,Total,Mean,Max,… 集約演算子 Query[…],{op1,op2,…},… サブクエリ演算子 Function[…],f 任意の関数 - Query[operator1,…][expr]では,operatoriは expr の連続的に深いレベルに適用されるが,任意の1つが expr の中を「下降中」あるいはそこから「上昇中」に適用されることがある.一般に,部分指定演算子およびフィルタリング演算子は「下降」演算子である.集約演算子,サブクエリ演算子,任意の関数は「上昇」演算子である.Query[][expr]は expr を返す.
- 「下降」演算子は,続く演算子がより深いレベルに適用される前に,もとのデータ集合の対応する部分に適用される.下降演算子は,あるレベルに適用された場合に,データのより深いレベルの構造は変えないという特徴を持つ.このため,続く演算子はもとのデータ集合の対応するレベルにあるのと同一の構造を持つ部分式に遭遇することになる.最も単純な下降演算子はAllである.この演算子は指定されたレベルのすべての部分を選択し,その部分のデータ構造はそのままに残す.
- 「上昇」演算子は,より深いレベルに続く演算子がすべて適用された後で適用される.下降演算子がもとのデータのレベルに対応するのに対し, 上昇演算子は結果のレベルに対応する.下降演算子とは異なり,上昇演算子はそれが適用されるデータの構造を必ずしも保存しない.演算子は,特に下降演算子として認識されている場合を除いて,上昇演算子であるとみなされる.
- 「下降」部分演算子は,続く演算子をより深いレベルに適用する前に,あるレベルでどの要素を取るかを指定する.
-
All 続く演算子をリストあるいは連想の各部分に適用する i;;j 部分 i から部分 j までを取り,次の演算子を各部分に適用する i 部分 i だけを取り,次の演算子をそれに適用する "key",Key[key] 連想中の key の値を取り,次の演算子をそれに適用する Keys 連想のキーを取り,続く演算子を各キーに適用する Values 連想の値を取り,続く演算子を各値に適用する {part1,part2,…} 指定された部分を取り,次の演算子を各部分に適用する - 「下降」フィルタリング演算子は,より深いレベルで続く演算子を適用する前に,あるレベルで要素をどのように並べ直すか,あるいは要素にどのようにフィルタをかけるかを指定する.
-
Select[test] test を満足するリストあるいは連想の部分だけを取る SelectFirst[test] test を満足する最初の部分を取る KeySelect[test] キーが test を満足する連想の部分を取る MaximalBy[crit],MinimalBy[crit] 基準 crit が最小あるいは最大の部分を取る SortBy[crit] crit の順で部分を並び替える KeySortBy[crit] 連想の各部分をそのキーに基づいて crit の順にソートする DeleteDuplicatesBy[crit] crit による,他と区別できる部分を取る DeleteMissing 頭部Missingを持つ要素を除去する - 「上昇」集約演算子は,続く演算子をより深いレベルに適用した結果を,組み合せたり要約したりする.
-
Total 結果のすべての数量を合計する Min,Max 結果の最大量と最小量を与える Mean,Median,Quantile,… 結果の統計的要約を与える Histogram,ListPlot,… 結果の可視化を計算する Merge[f] 関数 f を使って,結果の連想中で共通キーを1つにする Catenate リストの要素あるいは連想をまとめる Counts 結果中の値の出現を数える連想を与える CountsBy[crit] 値の出現を crit に従って数える連想を与える CountDistinct 結果中の他とは異なる値の数を与える CountDistinctBy[crit] 結果中の他とは異なる値の数を,crit に従って与える - 「上昇」サブクエリ演算子は,より深いレベルに続く演算子を適用した後で,サブクエリを行う.
-
Query[…] 結果にサブクエリを実行する {op1,op2,…} 複数の演算子を結果に一度に適用し,リストを返す op1/* op2/* … op1を適用し,次に op2を同じレベルに適用する等 <|key1op1,key2op2,…|> 複数の演算子を結果に一度に適用し,指定されたキーを持つ連想を返す {key1op1,key2op2,…} 結果の特定の部分に異なる演算子を適用する - 1つあるいは複数の下降演算子が1つあるいは複数の上昇演算子と組み合せられると(例:desc/*asc),最初に下降部分が適用され,次に続く演算子がより深いレベルに適用され,最後に上昇演算子が結果に適用される.
- 特殊下降演算子GroupBy[spec]は,それが現れたレベルに新たな連想を導入し,他の演算子の動作に影響することなく,既存のクエリに挿入されることも既存のクエリから削除されることもできる.
- 構文GroupBy["string"]はGroupBy[Key["string"]]の同義語として使うことができる.SortBy,CountsBy,MaximalBy,MinimalBy,DeleteDuplicatesByにも同じ構文を使うことができる.
- 使用可能なオプション
-
FailureAction "Abort" 失敗した演算子をどのように扱うか MissingBehavior Automatic Missingを含む演算をどのように扱うか PartBehavior Automatic 欠落部分をどのように取り出すか - FailureActionの可能な値
-
None すべてのメッセージと失敗を無視する "Abort" メッセージに遭遇した段階で,クエリ全体を放棄する(デフォルト) "Drop" メッセージを出した操作の結果を削除する "Encapsulate" Failureオブジェクトでメッセージを発する操作を囲む "Replace" メッセージを発した操作の結果をMissing["Failed"]で置換する - オプションMissingBehaviorは,数値その他の関数がMissingの頭部を持つ式をどうのよに扱うかについて説明する.以下は可能な値である.
-
None Missingの通常の動作を使う Automatic Mean,Total等に対して特殊規則を呼び出す - オプションPartBehaviorは,存在しない部分を参照している演算子がどのように評価されるかについて説明している.次は可能な値である.
-
None Partの通常の動作を使う Automatic 無効な i;;j,欠落した i 等に対して特殊規則を呼び出す
例題
すべて開く すべて閉じる例 (1)
data = {
<|"a" -> 1, "b" -> "x", "c" -> {1}|>,
<|"a" -> 2, "b" -> "y", "c" -> {2, 3}|>,
<|"a" -> 3, "b" -> "z", "c" -> {3}|>,
<|"a" -> 4, "b" -> "x", "c" -> {4, 5}|>};Query[2] @ dataQuery[Total, "a"] @ dataQuery[Select[#a < 5&], "b"] @ dataスコープ (1)
data = {
<|"a" -> 1, "b" -> "x", "c" -> {1}|>,
<|"a" -> 2, "b" -> "y", "c" -> {2, 3}|>,
<|"a" -> 3, "b" -> "z", "c" -> {3}|>,
<|"a" -> 4, "b" -> "x", "c" -> {4, 5}|>,
<|"a" -> 5, "b" -> "y", "c" -> {5, 6, 7}|>,
<|"a" -> 6, "b" -> "z", "c" -> {}|>};Query[1 ;; 3] @ dataQuery[2] @ dataQuery[3, "a"] @ dataQuery[4, "b"] @ dataQuery[5, "c"] @ dataQuery[All, "a"] @ dataQuery[All, "b"] @ dataQuery[All, "c"] @ dataQuery[All, "c", 1] @ dataQuery[1 ;; 4, {"a", "b"}] @ dataQuery[Total, "a"] @ dataQuery[StringJoin, "b"] @ dataQuery[Catenate, "c"] @ data列に基づいてデータを分割し,クエリの残りの部分を各グループに適用する:
Query[GroupBy["b"], Catenate, "c"] @ dataQuery[All, Reverse] @ dataQuery[Reverse, Reverse] @ dataQuery[All, All, f] @ dataQuery[All, {"a" -> f, "b" -> g, "c" -> h}] @ dataQuery[All, "c" /* <|"ctotal" -> Total, "clength" -> Length|>] @ dataQuery[All, <|"A" -> "a", "B" -> "b", "C" -> "c"|>] @ dataQuery[Select[#a < 5&]] @ dataQuery[Select[#a < 5&], "b"] @ dataQuery[Select[#a < 5&], {"b", "c"}] @ dataQuery[SelectFirst[#a > 5&], "b"] @ dataQuery[SortBy[Length[#c]&]] @ dataQuery[MaximalBy[Length[#c]&]] @ dataQuery[DeleteDuplicatesBy["b"]] @ data行をフィルタリングした後で列の値を集約するために,昇順演算子と降順演算子を組み合せる:
Query[Select[#b == "z"&] /* Total, "a"] @ data(Query[Select[#b == "z"&], "a"] /* Total) @ dataオプション (4)
FailureAction (2)
list = Range[-2, 2]FailureActionNoneの設定では,結果に対して特別なアクションは取られない:
Query[All, 1 / #&, FailureAction -> None][list]FailureAction->"Encapsulate"と設定すると,失敗した結果がFailure オブジェクトに入れられる:
Query[All, 1 / #&, FailureAction -> "Encapsulate"][list]FailureAction->"Replace"と設定すると,失敗した結果がプレースホルダで置換される.関数Queryについては,このプレースホルダはMissingオブジェクトである:
Query[All, 1 / #&, FailureAction -> "Replace"][list]FailureAction->"Drop"と設定すると,失敗した結果が最終的な式から削除される:
Query[All, 1 / #&, FailureAction -> "Drop"][list]FailureAction->"Abort"と設定すると,計算が中止されてFailureオブジェクトが返される:
Query[All, 1 / #&, FailureAction -> "Abort"][list]FailureAction->{"Drop",f}の設定を使って,失敗した結果を削除する前にアクションを取ることができる:
list = Range[-2, 2]Query[All, 1 / #&, FailureAction -> {"Drop", Print}][list]FailureAction->{"Replace",f}と設定すると,失敗した関数を置換するものが指定できる:
Query[All, 1 / #&, FailureAction -> {"Replace", #["StyledMessage"]&}][list]MissingBehavior (1)
デフォルトのオプション値のMissingBehavior->Automaticは,Missingに遭遇した演算子に特殊規則を適用する:
Query[Total] @ {1, 2, 3, Missing[]}MissingBehavior->Noneを使って,すべての演算子にMissingをの通常動作を指定することができる:
Query[Total, MissingBehavior -> None] @ {1, 2, 3, Missing[]}PartBehavior (1)
デフォルトのオプション値PartBehavior->Automaticは,そうしなければ失敗するであろう演算子の特別な動作を引き起こす:
Query[1 ;; 5] @ {1, 2, 3}PartBehavior->Noneを使うとPartの通常動作を使うように指定される:
Query[1 ;; 5, PartBehavior -> None] @ {1, 2, 3}特性と関係 (2)
Query[…]は,任意数の演算子が適用できる:
data = RandomInteger[10, {3, 3}]Query[All, Select[EvenQ]][data]適用された演算子がない場合,Query[][data]は dataを返す:
Query[][data]Queryは,Datasetがサポートするクエリ言語の演算子形である:
Query["b", Total] @ <|"a" -> {1, 2}, "b" -> {3, 4}|>Dataset[<|"a" -> {1, 2}, "b" -> {3, 4}|>]["b", Total]適用される前に,Query式は通常のWolfram言語関数の通常の構成とその演算子形に「コンパイルされる」.Queryのコンパイルされた形が見たければ,Normalを使うとよい:
Query[All, f]//NormalQuery[f, g]//NormalQuery[GroupBy["a"], Total]//Normal関連するガイド
関連するワークフロー
- 計算可能なデータ集合を分析する ▪
- データ集合から要素を選ぶ ▪
- データ集合から列を抽出する
テキスト
Wolfram Research (2014), Query, Wolfram言語関数, https://reference.wolfram.com/language/ref/Query.html.
CMS
Wolfram Language. 2014. "Query." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/Query.html.
APA
Wolfram Language. (2014). Query. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Query.html
BibTeX
@misc{reference.wolfram_2026_query, author="Wolfram Research", title="{Query}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/Query.html}", note=[Accessed: 31-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_query, organization={Wolfram Research}, title={Query}, year={2014}, url={https://reference.wolfram.com/language/ref/Query.html}, note=[Accessed: 31-October-2026]}