Wolfram|Alphaにおけるデータ形式

はじめに
Wolfram|Alphaは結果をグラフィカルに出力するだけでなく,追加情報を含んだり特定のタスクに適したりする別の表現も提供することができる.これらの表現は集合的にデータ形式と呼ばれる.すべての結果にすべてのデータ形式があるわけではない.実はこれらすべての表現を持つ結果を考える方が難しい.したがって,さまざまな形式を判別しリクエストするためのインタラクティブなメカニズムとプログラム的なメカニズムが存在する.
データ形式の一グループに「公開データ形式」というものがある.これはWolfram|Alphaから便利なデータを抽出することを可能にするためのものである.例えば,プロットに使われたデータ点が返され,カスタムの可視化作成が可能になる.書式,コメント,その他の詳細の一部あるいはすべてが省略され,データのみに焦点が当てられる.インタラクティブメニューに現れる現行の公開データ形式の名称と,抽出される要素の説明を表にまとめる.
メニュー名
説明
計算可能なデータ
数値要素,テキスト要素,数式要素を含む結果によって表されるデータ.この形式では,結果を機械処理可能にするためにできるだけ余計な書式が取り除かれる.つまり,GridColumn等は除かれ,日付はDateListの形式で返される.
整形されたデータ
数値要素,テキスト要素,数式要素を含む結果によって表されるデータ.この形式では,特別な頭部WolframAlphaDateの使用を含め,なるべく結果の外観が損なわれないようにされる.
式データ
ホールドされた形式での結果の数式およびWolfram言語式のリスト.
数データ
結果の中のシングルトン,およびシングルトン数量の数の部分のリスト.
数値データ
結果の中のシングルトンの数量(単位付きの数値)のリスト.
音データ
結果に現れるサウンドオブジェクトのリスト.
時系列データ
結果に現れる時系列リスト.
公開データ形式
他のデータ形式はより特化されている.2つの形式がメニューの中で入力出力として現れている.これらはWolfram言語に入力と,グラフィカルな結果に対応する出力を提供する,また,これらは自由形式入力のメカニズム(行頭に=)で使われる.最後の形式は,結果のグラフィカルでない要素のテキスト表現を提供する.
メニュー名
説明
入力
その結果を導き出した計算を実行するためのWolfram言語式
出力
結果を表す通常のWolfram言語式
テキスト
結果のテキスト表現
その他のデータ形式
データ形式をインタラクティブに調べる
Wolfram|Alphaクエリと自由形式入力はどちらも,可能な場合さまざまなデータ形式をリクエストするメカニズムを提供する.Wolfram|Alphaクエリはデフォルトですべての結果を表示するため,これらの形式にアクセスするのに便利である.

Wolfram|Alphaクエリ

基本的なワークフロー

Wolfram|Alphaクエリを考える.
sinxの積分,0から2pi
上のような結果が生成される.四隅が丸く灰色の枠で囲まれた白い背景色の部分はポッドと呼ばれる,ポッドの右上にあるプラス記号をクリックすると,そのポッドをさまざまな形式で見るためのコンテキストメニューが表示される.「定積分」のポッドには,次のようなコンテキストメニューが含まれる.

2.gif

最初の2つの項目整形されたポッドサブポッドの内容は常に利用できる.最初のデリミタの下の項目は,ポッドにテキスト入力出力が含まれていることを示している.2つ目のデリミタの下には,利用できる公開データ形式の種類がリストされる.ここでは計算可能なデータ整形されたデータ式データが利用できる.
コンテキストメニューから入力を選ぶと,下の例のようにWolfram|Alphaクエリの結果の真下にセルが生成され,自動的に評価される.このセルは評価されると,ポッドの中の方程式の左辺の積分となる.これこそがポッドで実行される計算なのである:
出力に対する処理を繰り返すと,方程式の右辺,つまり計算のWolfram言語出力が生成される:
式データは標準的なWolfram言語シンタックスの完全な方程式である式を生成する:
「積分の視覚的表現」ポッドのプラス記号をクリックするとずっと短いメニューが表示される.このポッドには利用できる公開データ形式が2つしかなく,他のデータ形式の入力しか利用できないからである.

3.gif

ポッドのWolfram言語入力はグラフを生成するための通常のPlot式である.Plot式を評価すると,充填が行われていないことが分かる.Wolfram言語入力形式はWolfram|Alphaにより返される結果に比べると簡素化されているため,自分のスタイルを適用することができる:

公開データはグラフィカルな結果と同じ必要はない

上の例では公開データは基本的に結果と同じに見えるが,常にそうだとは限らない.次のクエリを見てみる.
msft close Jan 1, 2011 to Jan 21 2011
「History」ポッドのプラス記号をクリックして整形されたデータを選ぶと,プロットの代りにプロットを作成するために使われた実際のデータ点がリストされる.もとになっているデータが公開されているのである.
上の出力のInputFormには特殊なフォーマットラッパーであるWolframAlphaDateが含まれている.この頭部と公開データ形式から予想される出力の種類については,「公開データの例」で詳しく説明する.

第2引数の構造

コンテキストメニューをクリックすることで生成されるセルのWolframAlpha関数の第2引数の構造を説明しておこう.これは常に{{"podid",subpodid},"property"}である."podid"はポッドを見付けるためにWolfram|Alphaが作成した文字列,"property"は抽出する特性の名前である.subpodid はポッド内の特定の結果の位置を示す整数である.上の例題ではすべてのポッドのサブポッドが1つであるため,指標はすべて1であった.次は1つのポッドにつき複数のサブポッドが生成されるクエリの例である.
sinxのプロット
2つのプロットの間に水平に引かれている薄い灰色の線は,サブポッドが複数個あることを示している.この場合「プロット」ポッドのコンテキストメニューから入力を選ぶと,1つのサブポッドに対して1つの合計2回のWolframAlphaへの呼出しが実行される.
このシンタックスは,「プログラムでデータ形式を得る」で説明するように,複数のポッドからの複数の形式を抽出するために拡張することができる.

自由形式入力

前のセクションで示した自由形式入力を使った積分の例を考えてみる.
まず気がつくことは,自由形式の式のすぐ下に生成されるIntegrateの式は,最初の例で見たWolfram言語の入力式に他ならない.自由形式入力はまさにこのような仕組みなのである.自由形式入力は,Wolfram|Alphaからの結果の中にWolfram言語の入力式と出力式を探し,これらの式をローカルで評価するのである.
ポッドの隣にはWolfram言語の入力式しか表示されていなくても,他の形式はすべてコンテキストメニューから利用できる.例えば積分の計算可能データにアクセスするためには,それを右クリックし形式を選択してコピー 計算可能データを選ぶ.

6.gif

これで好きなところにデータをペーストすることができる.下のセルにペーストしてみる.
入力のペースト 計算可能データを選ぶと,Wolfram|Alphaのクエリに対するコンテキストメニューの動作と類似した入力セルを作成することができる.

7.gif

これで結果の下に次のセルが生成される.しかし,Wolfram|Alphaのクエリの場合とは異なり,このセルは自動的には評価されない.
プログラムでデータ形式を得る

サブポッドの特性としてのデータ形式

上の例で示したように,データ形式は特定のサブポッドに関連付けられた特性である.したがって,データ形式には,WolframAlpha関数の標準的シンタックスである{"podid","property"}および{{"podid",subpodid},"property"}を使うことが要求される.さまざまな形式に対するプログラム特性の名前は,それぞれのメニュー名の単語をキャメルケースで組み合せることで得られる文字列である.つまり,計算可能なデータ(Computable data)は"ComputableData"に,時系列データ(Time series data)は"TimeSeriesData"に,入力(Input)は"Input"に,という風になる.

利用可能な形式を判別する

特定のサブポッドで利用できるデータ形式は,それぞれのサブポッドの"DataFormats"特性に含まれている.この特性は,他のサブポッドの特性と同じ方法で計算することができる.
それぞれのサブポッドに対して1つのデータ形式しかない.一つは「Input」ポッドに対するテキスト形式であり,もう一つは2つの「Plot」サブポッドに対するWolfram言語入力である:
このクエリのそれぞれのポッドでは利用できるデータ形式が複数個ある.2つ目と3つ目のポッドでは複数の公開データ形式が利用できる:
"DataFormats"特性で返される形式のリストは,文字列"DataFormats"の代りに実際のデータをリクエストするために使うことができる.
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"}シンタックスを使って簡単に再生できる.
"PodPlaintext"{All, "PodPlaintext"}により返される規則の右辺である:
"WolframForms"{All,{"Input","Output"}}によって返される規則の右辺を与える.しかし,前者は結果をポッドでグループ化するのに対して,後者は結果をプロパティでグループ化するという風に,結果の並び方が異なる:
公開データの例

注意事項

Wolfram|Alphaの結果は,常にデータ形式を提供するよう調整されているが,すべてにデータ形式表現があるわけではないし,ましてや公開データがあるわけでもない.また,複数の公開データ形式が利用できる場合,そのうちの2つもしくは3つが同じであるということもあり得る.これはすべてそれぞれのポッドの内容による.一般に,計算可能なデータと整形されたデータが最も一般的である.これらは公開データが存在する場合はほとんどの場合存在する.またこれらには多様なデータが含まれることもある.他の形式はデータを掘り下げ,特定のタイプのデータを提供するため,ずっと予想しやすい.以下の例は,含まれるデータの型に従って構成されている.

数値と数

Wolfram|Alphaの数値は,Wolfram言語のQuantityオブジェクトのように,単位付きの数で構成されている.公開データを使うと,数値全体にも数の部分だけにも直接アクセスすることができる.上述の金融の例題の最初のポッドを見ると,これらがどのように扱われるかがよく分かる.
整形されたデータと計算可能なデータでは,結果全体の表現が異なる.
整形されたデータは,ほとんど出力と同じように見える.日付の注釈は削除され,グリッドの分離線もなく,フォントはWolframシステムネイティブのものであるが,これ以外にはそれほど異なる部分はない.「はじめに」で説明したように,書式と余計な詳細は非常に入念に削除してある:
これに対して,計算可能なデータは格段に簡素化されている.Gridの代りに,簡単な行列が返される:
一方,数値データと数データは,テキストを無視して,結果の数量部分だけを返す.
数データは純粋な数の部分と,数値の数の部分だけを返す:
数値データはWolfram言語のQuantityオブジェクトの形式で数値のみを返す:

時系列

履歴プロットは,時系列のプロトタイプ的な例である.これは一連の日付のそれぞれに 値を与える.次は上にある履歴プロットである.
整形されたデータには値の表が含まれており, 値に対する単位を示すヘディングを持つ.通常通り,コメントは削除されている.最初の列の日付はWolframAlphaDateラッパーを使っている.
WolframAlphaDateは,Wolfram|Alphaスタイルの日付を模倣するための軽量ラッパーである.InputFormは,WolframAlphaDateのコンテンツが通常のDateListであるということを示している:
計算可能なデータはWolfram言語の標準的な時系列形式で返される.第1要素がDateListで第2要素が計算可能な値であるペアのリストとして返すのである:
この場合,結果全体がプロットで構成されているため,時系列データは計算可能なデータと同一である.結果に別の要素があるなら,時系列データは厳密な部分集合になる:
このポッドには数データがない.データにたくさんの数が現れていても,結果として独立している数はない.これは,19.055(パーセント)が変動率であった「数値と数」の「Result」ポッドの表とはかなり異なっている:

「データ形式をインタラクティブに調べる」の最初の例題では,式データがどのように1つの方程式を返すのかを説明した.しかし次のクエリの「方程式」ポッドにあるように,複数の方程式を返すこともある.
Newton's second law 5 kg 2 gs
この場合の整形されたデータは,Wolfram|Alphaにより返される結果に非常に似ている.しかしいくつかの式が見付かり,Holdでラップされている:
式データはテキスト要素を無視し,平坦なリストで式のみを返す:

パルサーLGM-1にはWolfram|Alphaにとって既知のおもしろい特性がたくさんある.そのうちの一つがパルスの回路図である.
このポッドでは,唯一の公開データはサウンドデータである.この形式は,対応する整形されたデータや計算可能データがないときに最も出やすいものである.

12.gif

サウンドデータは通常のSoundオブジェクトを生成する:
この場合特におもしろいのは,音のInputFormが戻ったことである.Wolfram|Alphaにより生成されたSampledSoundFunctionは可逆圧縮でWolfram言語に転送される:
Wolfram|Alphaは音のサンプルだけでなく音楽も生成できる.
このような音も劣化なしにWolfram言語にインポートすることができる: