How to| 整理从 ZIP 文件导入的数据

Mathematica 不仅可以导入存在您机器里的 ZIP 文件,还可以直接从 URL 导入 ZIP 文件. 在大多时候,处理 ZIP 文件中的数据是相对简单的,但根据数据格式的不同,有时可能需要额外处理,就像这个例子中所示的一样. 除此之外,Mathematica 让您只需几步就能实现数据的导入、处理与绘图.

美国人口普查局维护着有关美国和所有其他国家之间贸易平衡的数据. 您可以从他们的网站上下载包含数据电子表格的一个 ZIP 文件.

您可使用多种方法将该数据从 ZIP 文件放入 Mathematica. 您可以像本笔记本所示一样,从 URL 直接导入该 ZIP 文件,或者先下载并解压缩,然后再从您的本地机器导入电子表格.

在随后的例子中,仅出示了部分数据. 这样做的目的只是为了节省本文档的空间. 然而,当您自己处理其它数据集合时,您将有必要查看更多数据,以便知道在何处集中精力.

首先从网站上导入该 ZIP 文件. 由于该数据集过于庞大,不便在本文档中全部显示,通过分号()抑制了大部分输出:

In[1]:=
Click for copyable input

使用 Length 查看该电子表格文件中含有的工作表数目:

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

第一个工作表包含数据的某些基本描述信息. 使用 Part 的简写形式)与 Span 的简写形式)来查看含有相关信息的部分工作表.

举例来说,Part 指定 将得到第一个工作表中从第 个元素到最后的内容. 观察这些数据,您可以看到月份三字母缩写的前缀 IE 表示导入或导出:

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

现在,得到的是第二个工作表,包含实际的贸易数据. 由于数据量很大,这里用 Short 来显示其中的一部分:

In[13]:=
Click for copyable input
Out[13]//Short=

包含实际贸易数据的各列表的第三个元素是相关国家或组织. 如果要隔离并分析中国的数据,您需要进行一些额外处理. 这里使用 Cases 中的模式匹配提取中国关于进口的数据.

对于该模式,指定一个列表,前两个元素是下划线字符,第三个元素是 . 下划线字符是一个模式对象,可以代表任意 Mathematica 表达式. 对于第四个元素,将两个下划线字符一起使用. 这表示一个可以代表一个或多个 Mathematica 表达式组成的序列:

In[23]:=
Click for copyable input

使用 Short 来只查看部分数据,可以看到中国作为第三个元素的数据以列表形式被提取出来:

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

仅查看1985年的数据. 后面的12个元素对应于各个月份的进口额,而第十三个元素是年进口额的总和(). 后面的12个元素对应于各个月份的出口额,而第十三个元素是年出口额的总和():

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

您可以将这些数据按月出口额与月进口额排列,就像在其网站上仅显示的中国贸易数据一样.

您希望每一行以第一个元素年开始. 进口数据对应于元素4至15,出口数据对应于元素17至28:

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

这里,通过 DateListPlot 使日期格式便于日后使用:

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

到此为止,仅作为范例处理了1985年的数据. 这里定义的函数使您可以处理所有数据:

In[28]:=
Click for copyable input

使用该函数处理所有中国的数据:

In[29]:=
Click for copyable input

从简写数据可以看出,所有的中国数据得以处理:

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

您现在就可以对数据进行绘图了.

定义一些可以用作样式化图形的选项:

In[31]:=
Click for copyable input

为图形定义一个标签:

In[32]:=
Click for copyable input

使用 DateListPlot 创建图形:

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

现在,您了解了定期访问和处理美国贸易数据的一种方法. 出于示例的目的,数据处理被细分为几个步骤. 正常情况下,您可能有必要将这些步骤中的几个合成一个函数.

New to Mathematica? Find your learning path »
Have a question? Ask support »