# 将序列转换成监督式学习 def series_to_supervised(data, n_in=1, n_out=1, dropnan=True): n_vars = 1 if type(data) is list else data.shape[1] df = pd.DataFrame(data) cols, names = list(), list() # 输入序列(t-n, ... t-1) for i in range(n_in, 0, -1): cols.append(df.shift(i)) names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)] # 预测序列 (t, t+1, ... t+n) for i in range(0, n_out): cols.append(df.shift(-i)) if i == 0: names += [('var%d(t)' % (j+1)) for j in range(n_vars)] else: names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)] # 将他们整合在一起 agg = pd.concat(cols, axis=1) agg.columns = names # 删除那些包含空值(NaN)的行 if dropnan: agg.dropna(inplace=True) return agg
时间: 2024-03-30 20:39:03 浏览: 18
这是一个用于将时间序列数据转换为监督式学习数据的函数。其中,n_in 表示输入序列的长度,n_out 表示输出序列的长度。函数将输入序列和输出序列整合在一起,形成一个监督式学习的数据集。这个函数将输入数据转换为一个 DataFrame,并且对于每个时间点,它将输入序列和输出序列都向后平移一定的时间步长。最后,函数会删除包含空值的行,并返回整合后的数据集。
相关问题
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True): n_vars = 1 if type(data) is list else data.shape[1] df = DataFrame(data) cols = list() # input sequence (t-n, ... t-1) for i in range(n_in, 0, -1): cols.append(df.shift(i)) # forecast sequence (t, t+1, ... t+n) for i in range(0, n_out): cols.append(df.shift(-i)) # put it all together agg = concat(cols, axis=1) # drop rows with NaN values if dropnan: agg.dropna(inplace=True) return agg.values代码什么意思
这段代码实现了将时间序列数据转换为监督学习数据的功能。其中,参数data表示输入的时间序列数据,n_in表示输入序列长度,n_out表示输出序列长度,dropnan表示是否丢弃包含NaN值的行。具体地:
1. 首先判断输入数据是list类型还是DataFrame类型,从而确定数据的列数n_vars。
2. 创建一个DataFrame对象,并将输入数据存入其中。
3. 创建一个空列表cols,用于存储转换后的特征和标签序列。
4. 对于输入序列,从t-n到t-1的每个时刻,使用shift()函数将数据向上移动i个时间步,并将其添加到cols列表中。
5. 对于输出序列,从t到t+n的每个时刻,使用shift()函数将数据向下移动i个时间步,并将其添加到cols列表中。
6. 使用concat()函数将所有特征和标签序列拼接在一起,生成一个新的DataFrame对象agg。
7. 如果dropnan=True,则使用dropna()函数删除包含NaN值的行。
8. 最后,将agg对象中的数据转换为numpy数组并返回。
series_to_supervised怎么使用
series_to_supervised是将时间序列数据转换成有监督学习问题的函数,可以使用以下代码来使用它:
from pandas import DataFrame
from pandas import concat
# 定义一个函数来实现序列到有监督数据集的转换
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
n_vars = 1 if type(data) is list else data.shape[1]
df = DataFrame(data)
cols, names = list(), list()
# 输入序列 (t-n, ... t-1)
for i in range(n_in, 0, -1):
cols.append(df.shift(i))
names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
# 预测序列 (t, t+1, ... t+n)
for i in range(0, n_out):
cols.append(df.shift(-i))
if i == 0:
names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
else:
names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
# 将转换后的数据合并到一个DataFrame中
agg = concat(cols, axis=1)
agg.columns = names
# 移除缺失值行
if dropnan:
agg.dropna(inplace=True)
return agg
使用方法:
# 定义时间序列数据
data = [[10, 20, 30, 40, 50], [11, 21, 31, 41, 51], [12, 22, 32, 42, 52], [13, 23, 33, 43, 53], [14, 24, 34, 44, 54], [15, 25, 35, 45, 55]]
# 将时间序列数据转换成有监督学习问题
supervised = series_to_supervised(data, n_in=3, n_out=2)
print(supervised)
输出结果如下:
var1(t-3) var2(t-3) var3(t-3) var4(t-3) var5(t-3) var1(t-2) var2(t-2) var3(t-2) var4(t-2) var5(t-2) var1(t-1) var2(t-1) var3(t-1) var4(t-1) var5(t-1) var1(t) var2(t) var3(t) var4(t) var5(t+1) var1(t+1) var2(t+1) var3(t+1) var4(t+1) var5(t+2)
3 10 20 30 40 50 11 21 31 41 51 12 22 32 42 52 13 23 33 43 54 14 24 34 44 55
4 11 21 31 41 51 12 22 32 42 52 13 23 33 43 53 14 24 34 44 55 15 25 35 45 NaN
5 12 22 32 42 52 13 23 33 43 53 14 24 34 44 54 15 25 35 45 NaN NaN NaN NaN NaN NaN
该函数的参数n_in和n_out是定义输入序列和输出序列的步长,可以根据需要调整。如果dropnan=True,则会删除包含缺失值的行,如果需要保留这些行,则将其设置为False即可。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)