从URL导入数据

15

圣路易斯联邦储备银行在其网页上提供了大量数据,如:

http://research.stlouisfed.org/fred2/series/OILPRICE/downloaddata?cid=32217 http://www.federalreserve.gov/releases/h10/summary/default.htm http://research.stlouisfed.org/fred2/series/DGS20

其中一些数据集会进行更新,有些甚至每天都会更新。我对每日数据感到比较感兴趣(请参见上述URL的设置)。

我想直接将这些价格或利率数据流(以CSV或Excel文件形式在上述URL中可访问)导入到Mathematica中。

我查看了有关Importing[]的文档,但是我发现几乎没有(实际上没有)有关如何处理此类问题的文档。

看起来我需要浏览页面,发送一些数据以选择特定的文件和格式,触发下载,然后从我的计算机访问已下载的数据。如果我能直接从网站访问数据就更好了。

我希望Wolfram Alpha可以使这种事情变得容易,但我没有取得任何成功。

FinancialData[]似乎很自然地适用于这种情况,但我没有看到任何方法可以做到这一点。金融数据具有许多功能,但我没有发现如何获取此类数据。

有没有人对此有经验或者能够指点我方向?


1
对于投票者来说,这是关于Mathematica编程的内容,不属于离题。正是因为这样的投票,才有了一个专门针对Mathematica的网站提案 - Verbeia
4个回答

20

您可以直接从URL导入。Import。例如,可以获取并可视化联邦储备局的数据如下所示。

url = "http://www.federalreserve.gov/datadownload/Output.aspx?";
url = url<>"rel=H10&series=a660e724c705cea4b7bd1d1b85789862&lastObs=&";
url = url<>"from=&to=&filetype=csv&label=include&layout=seriescolumn";
data = Import[url, "CSV"];
DateListPlot[data[[7 ;;]], Joined -> True]

因为它太长,我为了方便而拆分了url。在知道如何绘制它之前,我必须检查data的内容——这通常是必要的步骤。我相信可以以类似的方式获取来自stlouisfed.org的数据,但需要使用带有密钥的API才能访问。


谢谢Mark。诀窍似乎是查看页面的源代码并确定我需要的正确URL。 - Jagra
1
我发现在 DateListPlot 文档 中有一个有用的例子,它实际上使用了自1980年以来的石油消耗信息来解决这个问题。 - canadian_scholar
嗨,马克,回答得很好,很高兴看到你回来了! - Leonid Shifrin
@Leonid - 我不知道我离开了!有时候生活很忙,我不能太多回复,但我经常潜水。我对rcollyer的Area51计划感到兴奋! - Mark McClure
@Mark 在过去几个月中,我有几次发现自己来到了你的个人资料页面,而上面总是显示“最后一次出现于2011年9月4日”,因此我就默认你离开了。我使用的是自动登录,所以我认为每个人都会使用,这显然是一个错误的假设。另外,一个专门的SE Mathematica网站确实会非常不错! - Leonid Shifrin

12
正如Mark所说,您可以直接从URL获取数据。您的油价数据可以从与您以前不同的URL导入: http://research.stlouisfed.org/fred2/data/OILPRICE.txt 通过该URL,您可以执行以下操作:
oil = Import["http://research.stlouisfed.org/fred2/data/OILPRICE.txt",
"Table", "HeaderLines" -> 12, "DateStringFormat" -> {"Year", "Month", "Day"}];
DateListPlot[oil, Joined -> True, PlotRange -> All]
请注意,"HeaderLines"->12 选项会删除前12行的标题文本(您必须计算标题行以知道要删除多少行)。我还指定了日期格式。
要找到该URL,请像之前一样操作,但在看到图表时单击数据系列,然后从左侧菜单中选择“查看数据”。

Tim -- 感谢您的改进,一次性完成所有格式设置真是太好了。 - Jagra
@TimMayes 我们为Mathematica专门网站提出了一个建议,涉及任何与Mathematica相关的内容。如果您能承诺(需要创建Area51帐户)支持该提案,那将非常好。我们离正式启动还差大约50个用户。如果您已经这样做了,请接受我的道歉。 - user616736
@TimMayes 使用 API 更可取,因为您不需要预先知道要剥离多少行等。您所需的只是免费的 API 密钥。它还消除了在使用“导入”之前首先在 FRED 网站上查找 URL 的需要。 - Mike Honeychurch
@Mike,谢谢。我已经下载了你的笔记本并正在尝试它。我认为它对我会非常有用。 - Tim Mayes
@TimMayes 没关系。这是写在金融用户想要更长(比 How Tos 更长)的工作示例的背景下。因此,重点是逐步解决问题。为了使其尽可能易于跟随,我在函数中使用了与 API 中相同的选项名称。当我发布上面的代码时才记得。我经常使用它,但是通过 AppleScript 计划来使用它,因此实际上已经有 2 年没有查看任何代码了。 - Mike Honeychurch

5

4

关于如何使用您的API密钥,请参阅此处的讨论:

http://library.wolfram.com/infocenter/MathSource/7583/

该函数基于API文档。我已经有几年没有查看代码了,但我记得我很快就把它组合在一起,而且我已经定期使用它超过2年而没有问题。这是一个例子,显示自1992年早期以来每月未经季节调整的零售销售额:

enter image description here

Wolfram Alpha也使用FRED数据,因此您可以将其用作直接导入的替代方法,但更难正确查询。我更喜欢直接使用FRED。此外,据我所知,该数据仅在发布后的第二天才能在Alpha上获得,这通常不是您想要的。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接