关于Pandas数据帧的数据

时间:2017-12-05 04:27:56

标签: python pandas scikit-learn forecasting sklearn-pandas

我正在使用sklearn进行预测。通常我会创建滞后数据进行预测,如果该功能只包含1列,这很容易。

例如:

index  temperature
1      100
2      80
3      50
4      90
5      110

通常我会创建另一个列,通过移动温度值来创建滞后数据,使用如下函数:

dataframe.temperature.shift()

所以我的数据框变为:

index  temperature temperature2 temperature3
1      100         NaN          NaN
2      80          100          NaN
3      50          80           100
4      90          50           80
5      110         90           50

然后当我想预测时,我可以使用如下代码:

x = dataframe.loc[:,('temperature3','temperature2')]
y = dataframe.temperature
model.fit([x],y)

问题是当我有很多专栏来创建滞后数据,并且每列需要更多滞后数据时,我的数据帧会太大。

我可以使用任何简单的方法吗?谢谢!

供参考,这是我的数据框:

import pandas as pd
import talib

df = pd.read_csv('..\\data\\uj5.CSV', names=['date','time','open','high','low','close','volume'])
df.index = pd.to_datetime(df.date + df.time,format='%Y.%m.%d%H:%M')


# assuming this is the 'X', let say i need 100 lags of these column to predict the 'Y'
df['CDLBELTHOLD'] = talib.CDLBELTHOLD(df.open.values, df.high.values, df.low.values, df.close.values)
df['CDLCLOSINGMARUBOZU'] = talib.CDLCLOSINGMARUBOZU(df.open.values, df.high.values, df.low.values, df.close.values)
df['CDLDOJI'] = talib.CDLDOJI(df.open.values, df.high.values, df.low.values, df.close.values)
df['CDLHIKKAKE'] = talib.CDLHIKKAKE(df.open.values, df.high.values, df.low.values, df.close.values)
df['CDLLONGLEGGEDDOJI'] = talib.CDLLONGLEGGEDDOJI(df.open.values, df.high.values, df.low.values, df.close.values)
df['CDLLONGLINE'] = talib.  CDLLONGLINE(df.open.values, df.high.values, df.low.values, df.close.values)
df['CDLSHORTLINE'] = talib.CDLSHORTLINE(df.open.values, df.high.values, df.low.values, df.close.values)
df['CDLSPINNINGTOP'] = talib.CDLSPINNINGTOP(df.open.values, df.high.values, df.low.values, df.close.values)
df['atr'] = talib.ATR(df.high.values, df.low.values, df.close.values,timeperiod=14)


#assuming this is the Y
df['target'] = #some int value

2 个答案:

答案 0 :(得分:2)

如果最终得到一个大矩阵,我不会在这里使用pandas。 Numpy在这里更合适:

import numpy as np

x = you_data_frame.values
max_lag = 10 # number of lags you want to have 

m = np.array([])
for i in np.arange(len(x) - max_lag):
    new_row = x[i:i+max_lag][None, :]
    if len(m) == 0:
        m = new_row
    else:
        m = np.vstack([m, new_row])

然后你使用

来适应你的数据
model.fit(m[:, 1:], m[:, 0])

答案 1 :(得分:-1)

因此,不要使用lag-n数据创建多个列。

仅在需要时动态计算滞后数据。例如,甚至有可能将所有滞后的计算框架化为一些矩阵内核。在看到你的代码之前我们不知道。 如果您想要更具体的答案,请向我们展示您尝试计算的特定代码或公式。

编辑:对于downvoters来说,这实际上是更正确的答案。如果使用各种中间列和临时列阻塞数据帧,则会浪费内存。在东西上,您可以根据需要动态计算。这是错误的方式。与Spark中的懒惰评估相同的一般原则。