正如你在下面的代码中看到的,你已经用过pandas_datareader来输入数据到工作空间中,得到的对象aapl是一个数据框(DataFrame),也就是一个二维带标记的数据结构,它的每一列都有可能是不同的数据类型。现在,当你手头有一个规则的数据框的时候,你可能首先要做的事情之一就是利用head() 和tail() 函数窥视一下数据框的第一和最后一行。幸运的是,当你处理时间序列数据的时候,这一点是不变的。 小贴士:也可以利用describe() 函数来获取一些有用的总结性统计数据 请从这里找到一些附带的练习 正如你在介绍部分所看到的,数据清楚地包含了四个列,包括苹果的股票每天的开盘价和收盘价,和极高和极低的价格变动。此外,你还得到了两个额外的列:Volume 和Adj Close。前一个列是用来记录在这一天内交易的股权总量。后者则是调整的收盘价格:当天的收盘价格经过细微的调整以适应在后一天开盘前所发生的任何操作。你可以使用这一个列来检验历史回报或者对历史回报做一些细致的分析。 前一个列是用来记录在这一天内交易的股权总量。后者则是调整的收盘价格:当天的收盘价格经过细微的调整以适应在后一天开盘前所发生的任何操作。你可以使用这一个列来检验历史回报或者对历史回报做一些细致的分析。 请注意行标签是如何包含日期信息的,以及你的列和列标签是如何包含了数值数据的。 小贴士:如果你现在想要使用pandas 的to_csv()函数把这些数据存储为csv格式的文件,或是通过read_csv()函数把数据读入回Python。这一点在一些特定场景下是极其便利的,例如说Yahoo API终端发生了变动,你难以再次获取数据的情况。 现在,你已经简要地检查了你的数据的第一行,并且已经查看了一些总结性统计数据,现在我们可以稍微深入一步了。 做这件事的一种方法是通过筛选,例如说某一个列的最后十行数据来检查行标签和列标签。后者则被称为取子集,因为你得到的是数据中的一个小的自己。取子集得到的结果是一个序列,也就是一个带标签的,可以是任何数据类型的一维数组。 请记住,DataFrame结构是一个二维标记的数组,它的列中可能包含不同类型的数据。 在下面的练习中,将检查各种类型的数据。首先,使用index和columns属性来查看数据的索引和列。接下来,通过只选择DataFrame的最近10次观察来取close列的子集。使用方括号[ ]来分隔这最后的十个值。您可能已经从其他编程语言(例如R)中了解了这种取子集的方法。总而言之,将后者分配给变量ts,然后使用该type()函数来检查ts的类型。您可以在这里进行练习。 方括号可以很好地对数据进行取子集,但这可能不是使用Pandas最习惯的做法。这就是为什么您还应该看看loc()和iloc()函数:您可以使用前者进行基于标签的索引,后者可用于位置索引。 在实践中,这意味着您可以将行标签(如标签2007和2006-11-01)传递到loc()函数,同时传递整数(如22与43)到iloc()函数。 完成原文中的练习,了解loc()和iloc()两者是如何工作的。 小贴士:如果您仔细查看子集的结果,您会注意到数据中缺少某些日期; 如果您仔细观察这个模式,您会发现通常缺少两三天;这些天通常是周末或公共假期,这些并不是您需要的数据。没有什么可担心的:它完全正常,您不必补全这些缺失的日期。 除了索引之外,您还可能想要探索一些其他技术来更好地了解您的数据。您永远不知道还会出现什么。我们尝试从数据集中抽取大约20行,然后对数据进行重新采样,使得aapl按照每月进行采样而不是每天采样。您可以利用sample()和resample()函数来完成这项功能。 非常简单直接,不是吗? resample()函数经常被使用,因为它为您的时间序列的频率转换提供了精细的控制和更多的灵活性:除了自己指定新的时间间隔,并指定如何处理丢失的数据之外,还可以选择指示如何重新取样您的数据,您可以在上面的代码示例中看到。这与asfreq()方法形成清晰的对比,它只有前面两种选择。 小贴士:在上述DataCamp Light块的IPython控制台中自己尝试一下。传递aapl.asfreq("M", method="bfill")看看会发生什么! 最后,在您将数据探索提升到一个新的水平之前,请先可视化您的数据并对数据执行一些常见财务分析,您可能已经开始计算每天开盘价和收盘价之间的差额。您可以在Pandas的帮助下轻松执行这项算术运算;只需将aapl数据Close列的值减去Open列的值。或者说,aapl.Close减去aapl.Open。您可以在aapl DataFrame中创建一个新的叫做diff的列存储结果,然后使用del再次删除它。 小贴士:请确保注释掉最后一行代码,以便aapl DataFrame 的新列不会被删除,这样您可以检查算术运算的结果! (责任编辑:本港台直播) |