Python 结合三种功能
我创建了以下脚本: 1.function1从yahoo finance获取数据并将其放入DataFrame,然后对所有股票执行此操作 2.函数2执行滚动回归并将残差保存到列表中。 我想对每个入库函数1重复函数2,取残差的标准偏差,同时将输出保存到最终列表中。 我似乎不知道如何组合这些功能。任何帮助都将不胜感激 更新:Python 结合三种功能,python,list,function,for-loop,Python,List,Function,For Loop,我创建了以下脚本: 1.function1从yahoo finance获取数据并将其放入DataFrame,然后对所有股票执行此操作 2.函数2执行滚动回归并将残差保存到列表中。 我想对每个入库函数1重复函数2,取残差的标准偏差,同时将输出保存到最终列表中。 我似乎不知道如何组合这些功能。任何帮助都将不胜感激 更新: 我现在的问题是,该脚本只适用于最后一个库存清单。也就是说,脚本只在xx列表中添加一个数字,而不是在所有股票中循环,从每个股票中获取(0,90)范围,然后为每个股票添加一个stde
- 我现在的问题是,该脚本只适用于最后一个库存清单。也就是说,脚本只在xx列表中添加一个数字,而不是在所有股票中循环,从每个股票中获取(0,90)范围,然后为每个股票添加一个stdev编号李>
def stockprice(stock, y, X, xx, xxx):
try:
start = datetime.datetime(2016,8,1)
end = datetime.datetime(2017,1,1)
f = web.get_data_yahoo(stock, start, end, interval='d')
f.drop(f.columns[[0,1,2,3,4]], axis=1, inplace=True)
f['LnReturn'] = np.log(f['Adj Close']) - np.log(f['Adj Close'].shift(1))
data2 = pd.concat([f,kf], axis = 1)
data2['XRtrn'] = (data2['LnReturn']*100 - data2['RF'])
df = data2[np.isfinite(data2['XRtrn'])]
df = pd.DataFrame(df)
y = df['XRtrn'].shift(-1)
y = y.dropna()
y = pd.DataFrame(y)
x = df.ix[:,[2,3,4]]
x = x[:-1]
X = sm.add_constant(x)
except:
xx.append(['nan'])
return y, X, xx, xxx
def regression(n, y, X, xx, xxx):
try:
model = sm.OLS(y[n:(90+n)], X[n:(90+n)])
results = model.fit()
r2 = results.rsquared
xxx.append(r2)
except:
xxx.append(['nan'])
return y, X, xx, xxx
def stdev(xx, xxx):
try:
xxx1 = pd.DataFrame(xxx)
std = xxx1.std()
stdv = std.tolist()
xx.append(stdv)
except:
xxx.append(['nan'])
return xx, xxx
# set the initial value for the variables you will use later on
xx = []
xxx = []
X = []
y = []
for stock in stock_list:
y, X, xx, xxx = stockprice(stock, y, X, xx, xxx)
for n in range(0,90):
y, X, xx, xxx = regression(n, y, X, xx, xxx)
xx, xxx = stdev(xx, xxx)
我不确定你的代码应该做什么,或者你的变量是什么,但我认为你可以这样做(你需要调整,但我只是想让你了解使用的原则):
请让我知道它是否解决了您的问题从函数1返回df,并将其作为函数2的参数?抱歉,Python新手。不确定这意味着什么。您能用一个示例演示一下吗?基本上,您没有按预期的方式使用函数。您的函数应该(通常)以
return
值结束,这样您就可以在函数之外访问它。当前,当函数完成时,所有内容都被丢弃。同样,您也不会向函数传递参数。其思想是函数只做标准的事情,而只做一系列输入,而不仅仅是一组特定的数据。最好阅读一些关于函数的教程,而不是我们给出答案-你需要这些知识来做任何有用的事情。此外,这些概念并不局限于Python,而是大多数编程语言。在阅读了一些教程之后,我遇到了一些与我想做的事情相关的问题。是否有一个具体的例子,你可以指出哪些是让学习变得更容易吗?谢谢[peet peeve]Python没有变量声明的概念。变量在分配给时就开始存在。[/peet peeve]是的……你说得对。我的意思是“为变量设置初始值”…我只是选择了错误的单词。谢谢你的评论!我会相应地更新我的答案。很好。很好。谢谢你caspillaga-更清楚!我已经更新了上面的代码。在计算如何在上一个函数(stdev())中同时使用for stock in stock_list和for n in range时遇到困难.现在,我只得到最后一只股票的价值,它被附加到我的最终清单(xx)中。
def function1(stock, kf, xx, X): # provide all varibles you will use as parameters
try:
## your code here, using stock, kf, xx and/or X
except:
## your code here, using stock, kf, xx and/or X
return kf, xx, X # return all variables you will need on next steps, except 'stock' because it will be managed by the for-loop
def function2(n, y, X, xxx, xx): # provide all varibles you will use as parameters
try:
## your code here, using n, y, X, xxx and/or xx
except:
## your code here, using n, y, X, xxx and/or xx
return y, X, xxx, xx # return all variables you will need on next steps, except 'n' because it will be managed by the for-loop
# set the initial value for the variables you will use later on
kf = ***whatever***
xx = ***whatever***
xxx = ***whatever***
X = ***whatever***
Y = ***whatever***
for stock in stock_list:
kf, xx, X = function1(stock, kf, xx, X)
for n in range(0,90):
y, X, xxx, xx = function2(n, y, X, xxx, xx)