Wolfram|Alpha 中的数据格式
除了表示图形结果外,Wolfram|Alpha 也提供另一种包含额外的信息或适于某种任务的表示方式. 这些可替代的表示方式被统称为数据格式. 不是所有的结果都具有这些格式;确实,很难设想一个简单的结果可以具有所有这些表示方式. 因此,存在交互式和编程式机制来决定和索取各种格式.
有一数据格式的分组被称为“公开的数据格式(exposed data formats)”. 其目的是使人们可以从 Wolfram|Alpha 中提取有用的数据. 比如,可能返回绘图所需的数据点,允许用户自创可视化. 删除某些或所有格式、注释和其它外部细节以便专注于数据. 下表列出了当前公开的数据格式的名称,以及对所提取元素的描述. 这些名称与出现在互动菜单中的名称相同.
格式名称 | 描述 |
可计算数据(Computable data) | |
格式化的数据(Formatted data) | 由结果表示的数据,包括数字、文本和数学元素. 它尝试着尽可能保留结果的外观,包括特殊头 WolframAlphaDate. |
公式化的数据(Formula data) | 结果中的数学和 Wolfram 语言表达式列表,是未计算形式 |
数值数据(Number data) | 结果为单个数值列表和单个量列表的数值部分 |
量数据(Quantity data) | 结果为单个量列表(具有单位的数值) |
声音数据(Sound data) | 结果为声音对象列表 |
时间序列数据(Time series data) | 结果为时间序列列表 |
Wolfram|Alpha 查询
基本工作流程
这是产生的三个结果. 每个具有圆形灰色边界的白色区域被称为一个 pod. 点击每个 pod 的右上角的加号,将会有一个下拉菜单,可以要求 pod 以各种形式显示. 比如 "Definite integral" pod 有以下下拉菜单:
前两项,格式化的pod 和 子pod的内容 总是存在. 第一条分隔线后的项表示该 pod 包含 纯文本、输入、和 输出. 最后,在第二条分隔线后,列出可用的公开数据格式,该例为 可计算数据、格式化的数据 和 公式化的数据.
如果您从下拉菜单中选择 输入,将会在 Wolfram|Alpha 查询结果下面产生一个单元,就像下面的单元,它会自动被计算. 该单元计算到 Pod 中方程左边的积分,也就是这个 Pod 所执行的计算:
该 pod 的 Wolfram 语言输入是一个生成图形的普通的 Plot 表达式. 允许 Plot 表达式计算后,图形没有被填充. 一般来说,Wolfram 语言输入格式相对于 Wolfram|Alpha 返回的结果而言被简化了,因此您可以应用您自己的样式:
公开的数据不必类似于图形的结果
第二个参变量的结构
值得注意的是,单元中 WolframAlpha 函数的第二个参变量的结构,它可以通过点击上下文下拉菜单得到. 在任何情况下,该结构是 {{"podid",subpodid},"property"}. "podid" 是由 Wolfram|Alpha 产生的字符串,用来识别 pod, "property" 是要提取的属性名称. subpodid 是一个整数,表明 pod 中特殊结果的位置. 所有上面的例子在 pod 中只有一个子 pod,因此索引总是1. 以下是一个在每个 pod 中产生多个子 pod 的查询例子.
在两个图间的和 pod 一样长的细灰线是多个子 pod 的分界线( tell-tale sign). 在这种情况下,从"Plots" pod 下拉菜单中选择 输入 将产生两次调用 WolframAlpha,每个子 pod 调用一次.
自由格式输入
首先要注意的是,直接在自由格式表达式下方生成的 Integrate 表达式,与第一个例子中所看到的 Wolfram 语言输入表达式无任何不同. 这恰恰是自由格式输入机制的工作原理:它从 Wolfram|Alpha 的结果中搜索 Wolfram 语言输入和输出表达式,并在本地运算这些表达式.
单击自由格式表达式右边的加号,将显示所有的结果. 对于每个结果,Wolfram 语言输入表达式如果存在的话,将直接显示在结果上方的灰框中. 之所以能这样做,正是因为 Wolfram 语言的输入格式在自由形式输入机制中所起的关键作用.
作为子 pod 属性的数据格式
正如前面的例子所示,数据格式是与特别子 pod 相关联的属性. 因此它们可以利用 WolframAlpha 函数的标准语法{"podid","property"} 和 {{"podid",subpodid},"property"} 来请求. 各种格式的编程属性名称是利用驼峰式命名法,将各自菜单名称的字符串组合而成. 这样,Computable data 是 "ComputableData",Time series data 是 "TimeSeriesData",Input 是 "Input",等等.
决定可用的格式
作为 WolframAlpha 函数的一个标准,如果选择单个子 pod 的单个属性,则只返回值.
直接请求数据
注意如果您只给出没有子 pod 的 pod ID,您有一个隐式的 All 索取所有子 pod:
如果您对公开数据感兴趣,WolframAlpha 的 "DataRules" 参数将以普通的 {{"podid",subpodid},"property"}->data 格式返回所有可能的公开数据. 使用 "DataRules" 以确保如果添加了新的公开数据,它们也会被列出.
WolframAlpha 的 "PodPlaintext" 和 "WolframForms" 参数可以很容易使用 WolframAlpha 的 {{"podid",subpodid},"property"} 语法复制.
"WolframForms" 给出由 {All,{"Input","Output"}} 返回的规则的右边部分. 然而,结果可能会有不同的顺序,因为前者根据 Pod 对结果进行分组,而后者根据属性对结果进行分组:
一般事项
不是所有的 Wolfram|Alpha 结果都有数据格式表示,更不用说公开的数据,虽然 Wolfram|Alpha 结果在任何时候均被改良以提供数据格式. 此外,当有多个公开数据格式时,会有两个甚至三个格式是一致的. 这个均取决于单个 pod 的内容. 一般来说,可计算数据和格式化的数据是最常用的;如果有任何公开数据,它们一般也会出现,可能包含不同种类的数据. 其它格式追寻更深层的和提供数据的具体类型,因此更具有预测性. 下面的例子是根据它们所包含数据类型编组的.
量与数
与 Wolfram 语言的 Quantity 对象相似,Wolfram|Alpha 中的量由带单位的数值组成. 可以直接访问整个量或只是使用公开的数据的数字部分. 第一个 Pod 来自前面的金融例子,为如何处理提供了一个很好的例证.
格式化数据几乎与输出看上去一样. 日期注释被去掉了,网格分割线也没有了,而字体对于 Mathematica 而言也是本地的,但是其它差别则很小. 正如在简介中所说的,格式和外部细节的去除是经过仔细考虑的:
相比之下,可计算数据显然更简单. 它返回一个纯矩阵,而不是 Grid:
量数据仅以 Mathematica Quantity 对象的形式返回量:
时间序列
WolframAlphaDate 是一个轻量级的封装,仿照 Wolfram|Alpha 样式的日期. InputForm 表明 WolframAlphaDate 的内容是一个普通的 DateList:
对于时间序列,可计算数据返回标准 Wolfram 语言格式的时间序列:对列表中第一个元素是 DateList,第二个元素是可计算的值:
公式
在 "交互式探索数据格式" 中的简介例子,显示了公式化的数据是如何返回一个方程. 它也可以返回多个方程,以下查询的 "Equation" pod 就是这样一个例子.
该例子中的格式化数据很类似于由 Wolfram|Alpha 返回的结果. 然而,多个公式被识别且被 Hold 封装:
声音
声音数据产生一个普通的 Sound 对象: