Wolfram|Alphaにおけるデータ形式
Wolfram|Alphaは結果をグラフィカルに出力するだけでなく,追加情報を含んだり特定のタスクに適したりする別の表現も提供することができる.これらの表現は集合的にデータ形式と呼ばれる.すべての結果にすべてのデータ形式があるわけではない.実はこれらすべての表現を持つ結果を考える方が難しい.したがって,さまざまな形式を判別しリクエストするためのインタラクティブなメカニズムとプログラム的なメカニズムが存在する.
データ形式の一グループに「公開データ形式」というものがある.これはWolfram|Alphaから便利なデータを抽出することを可能にするためのものである.例えば,プロットに使われたデータ点が返され,カスタムの可視化作成が可能になる.書式,コメント,その他の詳細の一部あるいはすべてが省略され,データのみに焦点が当てられる.インタラクティブメニューに現れる現行の公開データ形式の名称と,抽出される要素の説明を表にまとめる.
メニュー名
|
説明
|
計算可能なデータ | |
整形されたデータ | 数値要素,テキスト要素,数式要素を含む結果によって表されるデータ.この形式では,特別な頭部WolframAlphaDateの使用を含め,なるべく結果の外観が損なわれないようにされる. |
式データ | ホールドされた形式での結果の数式およびWolfram言語式のリスト. |
数データ | 結果の中のシングルトン,およびシングルトン数量の数の部分のリスト. |
数値データ | 結果の中のシングルトンの数量(単位付きの数値)のリスト. |
音データ | 結果に現れるサウンドオブジェクトのリスト. |
時系列データ | 結果に現れる時系列リスト. |
他のデータ形式はより特化されている.2つの形式がメニューの中で入力と出力として現れている.これらはWolfram言語に入力と,グラフィカルな結果に対応する出力を提供する,また,これらは自由形式入力のメカニズム(行頭に=)で使われる.最後の形式は,結果のグラフィカルでない要素のテキスト表現を提供する.
Wolfram|Alphaクエリと自由形式入力はどちらも,可能な場合さまざまなデータ形式をリクエストするメカニズムを提供する.Wolfram|Alphaクエリはデフォルトですべての結果を表示するため,これらの形式にアクセスするのに便利である.
Wolfram|Alphaクエリ
基本的なワークフロー
上のような結果が生成される.四隅が丸く灰色の枠で囲まれた白い背景色の部分はポッドと呼ばれる,ポッドの右上にあるプラス記号をクリックすると,そのポッドをさまざまな形式で見るためのコンテキストメニューが表示される.「定積分」のポッドには,次のようなコンテキストメニューが含まれる.
最初の2つの項目整形されたポッド,サブポッドの内容は常に利用できる.最初のデリミタの下の項目は,ポッドにテキスト,入力,出力が含まれていることを示している.2つ目のデリミタの下には,利用できる公開データ形式の種類がリストされる.ここでは計算可能なデータ,整形されたデータ,式データが利用できる.
コンテキストメニューから入力を選ぶと,下の例のようにWolfram|Alphaクエリの結果の真下にセルが生成され,自動的に評価される.このセルは評価されると,ポッドの中の方程式の左辺の積分となる.これこそがポッドで実行される計算なのである:
ポッドのWolfram言語入力はグラフを生成するための通常のPlot式である.Plot式を評価すると,充填が行われていないことが分かる.Wolfram言語入力形式はWolfram|Alphaにより返される結果に比べると簡素化されているため,自分のスタイルを適用することができる:
公開データはグラフィカルな結果と同じ必要はない
「History」ポッドのプラス記号をクリックして整形されたデータを選ぶと,プロットの代りにプロットを作成するために使われた実際のデータ点がリストされる.もとになっているデータが公開されているのである.
上の出力のInputFormには特殊なフォーマットラッパーであるWolframAlphaDateが含まれている.この頭部と公開データ形式から予想される出力の種類については,「公開データの例」で詳しく説明する.
第2引数の構造
コンテキストメニューをクリックすることで生成されるセルのWolframAlpha関数の第2引数の構造を説明しておこう.これは常に{{"podid",subpodid},"property"}である."podid"はポッドを見付けるためにWolfram|Alphaが作成した文字列,"property"は抽出する特性の名前である.subpodid はポッド内の特定の結果の位置を示す整数である.上の例題ではすべてのポッドのサブポッドが1つであるため,指標はすべて1であった.次は1つのポッドにつき複数のサブポッドが生成されるクエリの例である.
2つのプロットの間に水平に引かれている薄い灰色の線は,サブポッドが複数個あることを示している.この場合「プロット」ポッドのコンテキストメニューから入力を選ぶと,1つのサブポッドに対して1つの合計2回のWolframAlphaへの呼出しが実行される.
このシンタックスは,「プログラムでデータ形式を得る」で説明するように,複数のポッドからの複数の形式を抽出するために拡張することができる.
自由形式入力
まず気がつくことは,自由形式の式のすぐ下に生成されるIntegrateの式は,最初の例で見たWolfram言語の入力式に他ならない.自由形式入力はまさにこのような仕組みなのである.自由形式入力は,Wolfram|Alphaからの結果の中にWolfram言語の入力式と出力式を探し,これらの式をローカルで評価するのである.
ポッドの隣にはWolfram言語の入力式しか表示されていなくても,他の形式はすべてコンテキストメニューから利用できる.例えば積分の計算可能データにアクセスするためには,それを右クリックし形式を選択してコピー ▶ 計算可能データを選ぶ.
サブポッドの特性としてのデータ形式
上の例で示したように,データ形式は特定のサブポッドに関連付けられた特性である.したがって,データ形式には,WolframAlpha関数の標準的シンタックスである{"podid","property"}および{{"podid",subpodid},"property"}を使うことが要求される.さまざまな形式に対するプログラム特性の名前は,それぞれのメニュー名の単語をキャメルケースで組み合せることで得られる文字列である.つまり,計算可能なデータ(Computable data)は"ComputableData"に,時系列データ(Time series data)は"TimeSeriesData"に,入力(Input)は"Input"に,という風になる.
利用可能な形式を判別する
WolframAlpha関数で標準であるが,1つのサブポッドの1つの特性を選ぶと,その値だけが戻る.
直接データをリクエストする
どの形式が利用できるかを調べてからそれをリクエストする代りに,直接データ形式をリクエストすることもできる.これは,通常WolframAlpha関数の{"podid","property"}シンタックスを使って実行することができる.
特定のサブポッドから特定の形式をリクエストすることができる.この(指定にAllがない)場合,特定の形式が利用できない場合でも規則は与えられるが,その場合は右辺がMissing["NotAvailable"]となる:
サブポッドのないポッドIDだけを与えると,すべてのサブポッドをリクエストする暗示的なAllとなる:
公開データに関心がある場合,WolframAlphaに"DataRules"引数を使うと,利用できる公開データすべてが通常の{{"podid",subpodid},"property"}->dataの形式で返される."DataRules"を使うことで,新しい公開データが加えられてもそれが確実にリストされるようになる.
WolframAlphaの"PodPlaintext"引数と"WolframForms"引数はWolframAlphaの{{"podid",subpodid},"property"}シンタックスを使って簡単に再生できる.
"WolframForms"は{All,{"Input","Output"}}によって返される規則の右辺を与える.しかし,前者は結果をポッドでグループ化するのに対して,後者は結果をプロパティでグループ化するという風に,結果の並び方が異なる:
注意事項
Wolfram|Alphaの結果は,常にデータ形式を提供するよう調整されているが,すべてにデータ形式表現があるわけではないし,ましてや公開データがあるわけでもない.また,複数の公開データ形式が利用できる場合,そのうちの2つもしくは3つが同じであるということもあり得る.これはすべてそれぞれのポッドの内容による.一般に,計算可能なデータと整形されたデータが最も一般的である.これらは公開データが存在する場合はほとんどの場合存在する.またこれらには多様なデータが含まれることもある.他の形式はデータを掘り下げ,特定のタイプのデータを提供するため,ずっと予想しやすい.以下の例は,含まれるデータの型に従って構成されている.
数値と数
Wolfram|Alphaの数値は,Wolfram言語のQuantityオブジェクトのように,単位付きの数で構成されている.公開データを使うと,数値全体にも数の部分だけにも直接アクセスすることができる.上述の金融の例題の最初のポッドを見ると,これらがどのように扱われるかがよく分かる.
整形されたデータは,ほとんど出力と同じように見える.日付の注釈は削除され,グリッドの分離線もなく,フォントはWolframシステムネイティブのものであるが,これ以外にはそれほど異なる部分はない.「はじめに」で説明したように,書式と余計な詳細は非常に入念に削除してある:
これに対して,計算可能なデータは格段に簡素化されている.Gridの代りに,簡単な行列が返される:
数値データはWolfram言語のQuantityオブジェクトの形式で数値のみを返す:
時系列
WolframAlphaDateは,Wolfram|Alphaスタイルの日付を模倣するための軽量ラッパーである.InputFormは,WolframAlphaDateのコンテンツが通常のDateListであるということを示している:
計算可能なデータはWolfram言語の標準的な時系列形式で返される.第1要素がDateListで第2要素が計算可能な値であるペアのリストとして返すのである:
このポッドには数データがない.データにたくさんの数が現れていても,結果として独立している数はない.これは,19.055(パーセント)が変動率であった「数値と数」の「Result」ポッドの表とはかなり異なっている:
式
「データ形式をインタラクティブに調べる」の最初の例題では,式データがどのように1つの方程式を返すのかを説明した.しかし次のクエリの「方程式」ポッドにあるように,複数の方程式を返すこともある.
この場合の整形されたデータは,Wolfram|Alphaにより返される結果に非常に似ている.しかしいくつかの式が見付かり,Holdでラップされている:
音
サウンドデータは通常のSoundオブジェクトを生成する: