【发布时间】:2013-08-28 05:35:43
【问题描述】:
我有以下从网上下载的代码。我已经通过分解它进行了修改,以便在雅虎上更容易。
我的问题是关于 python(通常)和 python+pandas 能够处理比我在这里尝试的更多的数据的能力。当我运行这段代码时,如果我计算了符号之间的所有相关性,它最终会阻塞(参见“相反它显示这个”部分)。如果我删除一些计算,它似乎没问题。我不确定是什么东西,我认为是熊猫?
什么是分解此代码的正确方法,以便它不会失去其简洁性[而不是使用矢量化的循环],并且仍然能够处理更多数据?我希望能够处理存储在文件中的 10 年 1 分钟的数据,如果它甚至不能处理一年的日常数据,它将永远无法处理该数据集。
所以我的问题是:
修复这个程序的正确方法是什么(希望我能概括一下)以便它适用于 DOW 30 符号?
import pandas
from matplotlib.pyplot import show, legend
from datetime import datetime
from matplotlib import finance
import numpy
# 2011 to 2012
start = datetime(2011, 01, 01)
end = datetime(2012, 01, 01)
symbolsAK = ["AA", "AXP", "BA", "BAC", "CAT",
"CSCO", "CVX", "DD", "DIS", "GE", "HD",
"HPQ", "IBM", "INTC", "JNJ", "JPM",
"KO"]
symbolsMP = ["MCD", "MMM", "MRK", "MSFT", "PFE", "PG"]
#symbolsTX = ["T", "TRV", "UNH", "UTX", "VZ", "WMT", "XOM"]
symbols = symbolsAK
symbols = symbols + symbolsMP
#symbols = symbols + symbolsTX
quotesAK = [finance.quotes_historical_yahoo(symbol, start, end, asobject=True)
for symbol in symbolsAK]
quotesMP = [finance.quotes_historical_yahoo(symbol, start, end, asobject=True)
for symbol in symbolsMP]
#quotesTX = [finance.quotes_historical_yahoo(symbol, start, end, asobject=True)
# for symbol in symbolsTX]
quotes = quotesAK
quotes = quotes + quotesMP
#quotes = quotes + quotesTX
close = numpy.array([q.close for q in quotes]).astype(numpy.float)
dates = numpy.array([q.date for q in quotes])
data = {}
for i in xrange(len(symbols)):
data[symbols[i]] = numpy.diff(numpy.log(close[i]))
df = pandas.DataFrame(data, index=dates[0][:-1], columns=symbols)
print df.corr()
它应该看起来像(某物)这个[缩短]的输出
# AA AXP BA BAC CAT
#AA 1.000000 0.768484 0.758264 0.737625 0.837643
#AXP 0.768484 1.000000 0.746898 0.760043 0.736337
#BA 0.758264 0.746898 1.000000 0.657075 0.770696
#BAC 0.737625 0.760043 0.657075 1.000000 0.657113
#CAT 0.837643 0.736337 0.770696 0.657113 1.000000
而是显示这个
<class 'pandas.core.frame.DataFrame'>
Index: 23 entries, AA to PG
Data columns (total 23 columns):
AA 23 non-null values
AXP 23 non-null values
BA 23 non-null values
BAC 23 non-null values
CAT 23 non-null values
CSCO 23 non-null values
CVX 23 non-null values
DD 23 non-null values
DIS 23 non-null values
GE 23 non-null values
HD 23 non-null values
HPQ 23 non-null values
IBM 23 non-null values
INTC 23 non-null values
JNJ 23 non-null values
JPM 23 non-null values
KO 23 non-null values
MCD 23 non-null values
MMM 23 non-null values
MRK 23 non-null values
MSFT 23 non-null values
PFE 23 non-null values
PG 23 non-null values
dtypes: float64(23)
【问题讨论】:
-
在提出这个问题之前,请缩小您的问题范围,并表明您已经尝试过任何种分析或调试工作。
-
我缩小了问题的范围。正如我所说,我对代码进行了几处更改,因此如果我缩小符号数量,它就可以工作。如果我尝试做所有 30 个,它会窒息。
-
您的计算机有多少内存以及您希望它使用多少内存?
-
究竟是什么不起作用? “它窒息”是什么意思?如果我运行示例代码,我会在几分之一秒内得到它应该看起来的结果。
-
tcaswell,16GB 内存。我不知道这应该使用多少,因为我对 numpy 或 pandas 的内部知识知之甚少。 python中有没有办法判断我是否遇到内存限制?
标签: python-2.7 numpy pandas