ValueError:找到的数组具有0个样本(shape =(0,1)),而最少需要1个

时间:2019-04-19 12:31:03

标签: python pandas dataframe scikit-learn

这里有些麻烦,但确实会有所帮助。

我有df个股票数据,我想做的是测试Z分数的有效性,基本上是在绘制每只股票的Z分数,然后计算远期收益100天,然后将它们相互绘制以确定是否存在相关性。

但是,我只对极端感兴趣,而对买入仅感兴趣,因此我基本上只对较大的负Z分数感兴趣,比如说-3或更多的负数,以及它们相应的远期回报。 >

然后我还希望获得每只股票z得分与远期收益的R平方结果。

这是我到目前为止的位置。我将价格保存在一个名为data的数据框中,最终我想要做的就是将所有符合条件的数据输入到df中,然后全部绘制。我正试图将数据放入一个较长的数据框中,因为我对股票名称不感兴趣,因为我只是在按时绘制数据。

因此,我首先计算Zscore和所谓的正向收益,这很简单。但是,它们都产生NaN,因此为了避免df逐渐变小,我将这些新数据放入newdf中并丢弃NaN。

然后我用Zscores对newdf进行排序,以返回-3或更少的任何数据,这是我遇到的第一个问题。如果股票没有Zscores或-3或更少的任何数据,则会产生错误并循环中断。

ValueError: Found array with 0 sample(s) (shape=(0, 1)) while a minimum of 1 is required.

这是我遇到的错误。我已经在-2上对其进行了测试,并且一切正常,只是为了确保其余脚本可以正常工作。

然后我执行线性回归以返回r平方,并将该数字用作生成我的最终数据帧df的另一个限定符。

df = []

for stock in stocks:
    newdf = []
    data['zscore'] = (data[stock] - data[stock].rolling(100).mean()) / data[stock].rolling(100).std()
    data['fwd100'] = (data[stock].rolling(10).mean().shift(-105) - data[stock]) / data[stock]
    newdf.append(data[['zscore', 'fwd100']])
    newdf = pd.concat(newdf, axis=1)
    newdf.dropna(inplace=True)
    newdf.sort_values('zscore', inplace=True)
    newdf = newdf[newdf.zscore < -3]
    X = newdf['zscore'].values.reshape(-1, 1)
    y = newdf['fwd100'].values.reshape(-1, 1)
    linear_regressor = LinearRegression()
    linear_regressor.fit(X, y)
    rsq = linear_regressor.score(X, y)
    if rsq > 0.3:
        df.append(newdf[['zscore', 'fwd100']])
df = pd.concat(df, axis=0)

sns.regplot(df['zscore'],df['fwd100'])
plt.show()

使用-2作为参数,得到以下散点图。

enter image description here 因此,我的第一个问题是,如果股票没有任何合格数据,该如何停止发生此错误。其次,这对我而言是最有效的方式吗?我觉得我一直在做一些工作。第三,我正在查看100天的Zscores和100天的远期收益,但这是一个相当随意的数字,也许最​​佳组合是75和125之类的东西,但是我必须做些反复试验,这是机器学习可以帮助的吗?如果是这样,最好的方法是使用google /继续阅读?我不希望自己回答这个大问题。

真的很感谢任何帮助,欢呼声

以下是我的库存数据示例:

            Stock A  Stock B  Stock C  Stock D  Stock E
Date                                                   
01/04/2019     8.17     1.11     3.22    11.58     1.20
02/04/2019     8.17     1.11     3.21    11.53     1.20
03/04/2019     8.15     1.10     3.20    11.67     1.20
04/04/2019     8.12     1.10     3.21    11.66     1.21
05/04/2019     8.11     1.10     3.19    11.57     1.19
08/04/2019     8.11     1.09     3.18    11.46     1.20
09/04/2019     8.10     1.07     3.13    11.19     1.19
10/04/2019     8.15     1.08     3.13    11.30     1.17
11/04/2019     8.15     1.08     3.11    11.20     1.18
12/04/2019     8.14     1.09     3.09    11.17     1.19
15/04/2019     8.12     1.08     3.09    11.19     1.17
16/04/2019     8.11     1.08     3.08    11.02     1.17
17/04/2019     8.15     1.08     3.04    10.94     1.17
18/04/2019     8.14     1.08     3.05    11.05     1.18
19/04/2019     8.13     1.07     3.04    10.98     1.16

0 个答案:

没有答案