以下是一个示例代码,用于保留时间序列数据集中模式的前n个项:
import numpy as np
def keep_top_n_pattern(data, n):
patterns = []
unique_patterns = []
# 寻找所有不重复的模式
for i in range(len(data)-n+1):
pattern = tuple(data[i:i+n])
if pattern not in unique_patterns:
unique_patterns.append(pattern)
# 统计每个模式的频率
pattern_freq = {pattern: 0 for pattern in unique_patterns}
for i in range(len(data)-n+1):
pattern = tuple(data[i:i+n])
pattern_freq[pattern] += 1
# 按频率降序排序
sorted_patterns = sorted(pattern_freq.items(), key=lambda x: x[1], reverse=True)
# 保留前n个模式
top_n_patterns = sorted_patterns[:n]
# 提取模式中的项
for pattern, freq in top_n_patterns:
patterns.extend(list(pattern))
return patterns
# 示例使用
data = [1, 2, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3]
n = 2
top_n_patterns = keep_top_n_pattern(data, n)
print(top_n_patterns)
在上述示例中,我们定义了一个名为keep_top_n_pattern
的函数,该函数接受一个时间序列数据集data
和一个整数n
作为输入参数。函数的目标是找到数据集中频率最高的前n个模式,并返回这些模式中的所有项。
首先,我们遍历数据集中的每个n项序列,将其作为模式存储在unique_patterns
列表中,确保没有重复的模式。然后,我们使用字典pattern_freq
统计每个模式的频率,通过在数据集中查找模式并递增相应的频率计数器。
将模式和频率存储在元组中,并使用sorted
函数按频率降序对它们进行排序。然后,我们将前n个模式存储在top_n_patterns
列表中。
最后,我们将每个模式中的项提取出来,并将它们存储在patterns
列表中。最后,我们返回patterns
列表,即所有频率最高的模式中的项的列表。
在示例中,我们使用data = [1, 2, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3]
作为输入数据集,n设置为2。函数的输出将是[2, 3, 1, 2, 3]
,这是数据集中频率最高的两个模式[2, 3]
和[1, 2]
的项的组合。