MATHEMATICA 教程

Wolfram|Alpha 中的数据格式

简介

除了表示图形结果外,Wolfram|Alpha 也提供另一种包含额外的信息或适于某种任务的表示方式. 这些可替代的表示方式被统称为数据格式. 不是所有的结果都具有这些格式;确实,很难设想一个简单的结果可以具有所有这些表示方式. 因此,存在交互式和编程式机制来决定和索取各种格式.

有一数据格式的分组被称为"公开的数据格式(exposed data formats)". 其目的是使人们可以从 Wolfram|Alpha 中提取有用的数据. 比如,可能返回绘图所需的数据点,允许用户自创可视化. 删除某些或所有格式、注释和其它外部细节以便专注于数据. 下表列出了当前公开的数据格式的名称,以及对所提取元素的描述. 这些名称与出现在互动菜单中的名称相同.

格式名称
描述
可计算数据(Computable data)由结果表示的数据,包括数字、文本和数学元素. 该格式尝试去掉尽可能多的格式,使得结果可被机器处理. 这意味着 GridColumn 等被去除;单位也从量中去除,只剩下数字部分;日期以 DateList 格式返回.
格式化的数据(Formatted data)由结果表示的数据,包括数字、文本和数学元素. 它尝试着尽可能保留结果的外观,包括特殊头 .
公式化的数据(Formula data)结果中的数学和 Mathematica 表达式列表,是未计算形式
数值数据(Number data)结果为单个数值列表和单个量列表的数值部分
量数据(Quantity data)结果为单个量列表(具有单位的数值)
声音数据(Sound data)结果为声音对象列表
时间序列数据(Time series data)结果为时间序列列表

公开的数据格式.

附加的数据格式更特殊化. 两个是 Mathematica 格式,事实上被自由格式输入机制所使用. 最后一个为结果中的非图形元素提供纯文本表示.

格式名称
描述
输入(Input)Mathematica 表达式执行产生结果的计算
输出(Output)普通的 Mathematica 表达式表示结果
纯文本(Plaintext)结果以纯文本表示

附加的数据格式.

交互式探索数据格式

Wolfram|Alpha 查询和自由格式输入方法使您可以得到各种可用的数据格式. 由于 Wolfram|Alpha 查询在默认情况下显示所有结果,所以它是访问这些格式的一个很方便的方法.

Wolfram|Alpha 查询

基本工作流程

考虑以下 Wolfram|Alpha 查询.

integrate sinx from 0 to 2pi

这是产生的三个结果. 每个具有圆形灰色边界的白色区域被称为一个 pod. 点击每个 pod 的右上角的加号,将会有一个下拉菜单,可以要求 pod 以各种形式显示. 比如 "Definite integral" pod 有以下下拉菜单:

3.gif

前两项,格式化的pod子pod的内容 总是存在. 第一条分隔线后的项表示该 pod 包含 纯文本输入、和 输出. 最后,在第二条分隔线后,列出可用的公开数据格式,该例为 可计算数据格式化的数据公式化的数据.

如果您从下拉菜单中选择 输入,将会在 Wolfram|Alpha 查询结果下面产生一个单元,就像下面的单元,它会自动被计算. 该单元计算到 Pod 中方程左边的积分,也就是这个 Pod 所执行的计算.
In[12]:=
Click for copyable input
Out[12]=
重复 输出 的过程将产生方程的右边或来自计算的 Mathematica 输出.
In[13]:=
Click for copyable input
Out[13]=
最后 格式化的数据 产生一个公式,标准 Mathematica 语法的完整公式.
In[14]:=
Click for copyable input
Out[14]=

点击 "Visual representation of the integral" pod 中的加号产生一个更短的菜单. 该 pod 没有可用的公开的数据格式,只有附加数据格式中的 输入:

4.gif

该 pod 的 Mathematica 输入是一个生成图形的普通的 Plot 表达式. 允许 Plot 表达式计算后,图形没有被填充. 一般来说,Mathematica 输入格式相对于 Wolfram|Alpha 返回的结果而言被简化了,因此您可以应用您自己的样式.
In[33]:=
Click for copyable input
Out[33]=
Out[34]=

公开的数据不必类似于图形的结果

在以上的例子中,公开的数据本质上与结果一致. 但并不总是这样,看一下以下查询.

msft close Jan 1, 2011 to Jan 21 2011

点击 "History" pod 的加号,选择 格式化的数据 产生如下. 产生一个用于创建图的实际数据点列表,而不是一个图;它公开了基本数据.

In[16]:=
Click for copyable input
Out[16]=

前面输出的 InputForm 包含特殊格式封装 . 这个头,以及公开数据格式所期望的输出类型,在 公开的数据例子 一节有进一步讨论.

In[17]:=
Click for copyable input
Out[17]//InputForm=

第二个参变量的结构

值得注意的是,单元中 WolframAlpha 函数的第二个参变量的结构,它可以通过点击上下文下拉菜单得到. 在任何情况下,该结构是 . 是由 Wolfram|Alpha 产生的字符串,用来识别 pod, 是要提取的属性名称. subpodid 是一个整数,表明 pod 中特殊结果的位置. 所有上面的例子在 pod 中只有一个子 pod,因此索引总是1. 以下是一个在每个 pod 中产生多个子 pod 的查询例子.

plot sinx

在两个图间的和 pod 一样长的细灰线是多个子 pod 的分界线( tell-tale sign). 在这种情况下,从"Plots" pod 下拉菜单中选择 输入 将产生两次调用 WolframAlpha,每个子 pod 调用一次.

In[19]:=
Click for copyable input
Out[19]=

该语法可延伸为从多个 pod 中提取多个格式,在 "编程式获取数据格式" 中将有更详细的解释.

自由格式输入

考虑上面使用自由格式输入的积分例子.

WolframAlphaQueryParseResults
Out[20]=

首先要注意的是,直接在自由格式表达式下方生成的 Integrate 表达式,与第一个例子中所看到的 Mathematica 输入表达式无任何不同. 这恰恰是自由格式输入机制的工作原理:它从 Wolfram|Alpha 的结果中搜索 Mathematica 输入和输出表达式,并在本地运算这些表达式.

单击自由格式表达式右边的加号,将显示所有的结果. 对于每个结果,Mathematica 输入表达式如果存在的话,将直接显示在结果上方的灰框中. 之所以能这样做,正是因为 Mathematica 的输入格式在自由形式输入机制中所起的关键作用.

WolframAlphaQueryResults

尽管只有 Mathematica 输入表达式显示在 Pod 一侧,所有其他格式也可在上下文菜单中选用. 例如,要访问积分的可计算数据,右击并选择 复制为 ► 可计算数据.

11.gif

现在您可以把数据粘贴到任何地方,例如在下面的单元中.

Click for copyable input

您也可以选择 粘贴输入 ► 可计算数据 产生一个类似 Wolfram|Alpha 查询的输入单元.

12.gif

这将在结果下面直接产生以下单元. 然而,不向 Wolfram|Alpha 查询,该单元不会自动被计算.

In[42]:=
Click for copyable input
Out[42]=

编程式获取数据格式

作为子 pod 属性的数据格式

正如前面的例子所示,数据格式是与特别子 pod 相关联的属性. 因此它们可以利用 WolframAlpha 函数的标准语法 来请求. 各种格式的编程属性名称是利用驼峰式命名法,将各自菜单名称的字符串组合而成. 这样,Computable dataTime series dataInput,等等.

决定可用的格式

一个特定子 pod 可用的数据格式包含在每个子 pod 的 属性中. 此属性可以像计算任何其他子 Pod 属性一样进行计算.

这里的每个子 pod 只有一个数据格式:输入("Input") pod 是纯文本,两个绘图("Plot")子 pod 是 Mathematica 输入.
In[21]:=
Click for copyable input
Out[21]=
该查询的每个 pod 有多个可用的数据格式,在第二个和第三个 pod 中包括多个公开的数据格式.
In[22]:=
Click for copyable input
Out[22]=

属性返回的格式列表可用于取代字符串 来索取实际的数据.

In[23]:=
Click for copyable input
Out[23]=

作为 WolframAlpha 函数的一个标准,如果选择单个子 pod 的单个属性,则只返回值.

In[24]:=
Click for copyable input
Out[24]=

直接请求数据

不是首先决定哪种格式可用,然后才请求,您也可以直接请求数据格式. 这一般可以用 WolframAlpha 函数中的 语法来完成.

如果您查询所有 pod 中的某种属性,只有实际上包含那些格式的 pod 才会显示.
In[25]:=
Click for copyable input
Out[25]=
In[26]:=
Click for copyable input
Out[26]=
您也可以请求某个 pod 的所有属性,然后选择想要的特定结果. 再次,只有实际上可用的属性才会显示.
In[27]:=
Click for copyable input
Out[27]=
最后,您可以从某个特殊的子 pod 中索取特定的格式. 这种情况下(在规范中没有 All 时),如果没有某种特定的格式,您将仍然获得右边为 Missing["NotAvailable"] 的规则.
In[28]:=
Click for copyable input
Out[28]=
注意如果您只给出没有子 pod 的 pod ID,您有一个隐式的 All 索取所有子 pod.
In[29]:=
Click for copyable input
Out[29]=

如果您对公开数据感兴趣,WolframAlpha 参数将以普通的 格式返回所有可能的公开数据. 使用 以确保如果添加了新的公开数据,它们也会被列出.

In[30]:=
Click for copyable input
Out[30]=

WolframAlpha 参数可以很容易使用 WolframAlpha 语法复制.

是由 {All, "PodPlaintext"} 返回的规则的右边部分.
In[31]:=
Click for copyable input
Out[31]=
In[32]:=
Click for copyable input
Out[32]=
给出由 {All, {"Input", "Output"}} 返回的规则的右边部分. 然而,结果可能会有不同的顺序,因为前者根据 Pod 对结果进行分组,而后者根据属性对结果进行分组.
In[14]:=
Click for copyable input
Out[14]=
In[15]:=
Click for copyable input
Out[15]=
In[16]:=
Click for copyable input
Out[16]=

公开的数据例子

一般事项

不是所有的 Wolfram|Alpha 结果都有数据格式表示,更不用说公开的数据,虽然 Wolfram|Alpha 结果在任何时候均被改良以提供数据格式. 此外,当有多个公开数据格式时,会有两个甚至三个格式是一致的. 这个均取决于单个 pod 的内容. 一般来说,可计算数据和格式化的数据是最常用的;如果有任何公开数据,它们一般也会出现,可能包含不同种类的数据. 其它格式追寻更深层的和提供数据的具体类型,因此更具有预测性. 下面的例子是根据它们所包含数据类型编组的.

量与数

MathematicaQuantity 对象相似,Wolfram|Alpha 中的量由带单位的数值组成. 可以直接访问整个量或只是使用公开的数据的数字部分. 第一个 Pod 来自前面的金融例子,为如何处理提供了一个很好的例证.

In[61]:=
Click for copyable input
Out[61]=

格式化的数据和可计算数据给出不同形式的结果.

格式化数据几乎与输出看上去一样. 日期注释被去掉了,网格分割线也没有了,而字体对于 Mathematica 而言也是本地的,但是其它差别则很小. 正如在简介中所说的,格式和外部细节的去除是经过仔细考虑的.
In[62]:=
Click for copyable input
Out[62]=
相比之下,可计算数据显然更简单. 它返回一个纯矩阵,而不是 Grid.
In[65]:=
Click for copyable input
Out[65]=

另外,量数据和数值数据仅返回结果的数量部分,而忽略文本.

数值数据只返回纯数值和量的数值部分.
In[66]:=
Click for copyable input
Out[66]=
量数据只返回量. 它使用 封装传递额外的信息,例如单位和精度,与格式化数据一样.
量数据仅以 Mathematica Quantity 对象的形式返回量.
In[67]:=
Click for copyable input
Out[67]=

时间序列

历史图是时间序列的典型例子,给出每个日期序列的 值. 以下是前面例子的历史图.

In[31]:=
Click for copyable input
Out[31]=
格式化数据包含值的列表,加上表明 值的单位. 注解,象通常一样被去掉了. 第一列的日期使用 封装.
In[68]:=
Click for copyable input
Out[68]=
是一个轻量级的封装,仿照 Wolfram|Alpha 样式的日期. InputForm 表明 的内容是一个普通的 DateList.
In[69]:=
Click for copyable input
Out[69]//InputForm=
对于时间序列,可计算数据返回标准 Mathematica 格式的时间序列:对列表中第一个元素是 DateList,第二个元素是可计算的值.
In[72]:=
Click for copyable input
Out[72]=
在这个例子中,时间序列数据与可计算数据是一样的,因为整个结果是由图点构成的. 如果结果中有其它元素,时间序列数据可能是一个严格的子集.
In[70]:=
Click for copyable input
Out[70]=
注意在该 pod 中没有数值数据. 虽然数据中有许多数值,但是没有任何数字可以自己表示结果. 这与"量与数"一节中"结果" Pod 中的表格不同,例如在表格中,19.055是百分比形式的波动率.
In[71]:=
Click for copyable input
Out[71]=

公式

"交互式探索数据格式" 中的简介例子,显示了公式化的数据是如何返回一个方程. 它也可以返回多个方程,以下查询的 "Equation" pod 就是这样一个例子.

Newton's second law 5 kg 2 gs
该例子中的格式化数据很类似于由 Wolfram|Alpha 返回的结果. 然而,多个公式被识别且被 Hold 封装.
In[53]:=
Click for copyable input
Out[53]=
公式化的数据只返回公式,以展平的列表形式,忽略文本元素.
In[54]:=
Click for copyable input
Out[54]=

声音

Wolfram|Alpha 知道脉冲星 LGM-1 的许多有趣的属性. 其中之一是其脉冲的声频示意图.

In[55]:=
Click for copyable input
Out[55]=

对于这个特殊的 pod,唯一公开的数据是声音数据; 该格式最有可能出现,而没有相应的格式化的数据或可计算数据.

38.gif

声音数据产生一个普通的 Sound 对象.
In[56]:=
Click for copyable input
Out[56]=
有趣的是该例子返回的声音的 InputForm. 由 Wolfram|Alpha 产生的SampledSoundFunction 无损地传输到 Mathematica.
In[57]:=
Click for copyable input
Out[57]//InputForm=

Wolfram|Alpha 除了采样声音外,还可以生成音乐.

In[58]:=
Click for copyable input
Out[58]=
而且,这种声音可以毫无损失地导入到 Mathematica 中.
In[59]:=
Click for copyable input
Out[59]=
In[60]:=
Click for copyable input
Out[60]//InputForm=
New to Mathematica? Find your learning path »
Have a question? Ask support »