首页 > 文章列表 > Python中的时间序列分类实例

Python中的时间序列分类实例

Python 时间序列 分类
438 2023-06-10

Python是目前最受欢迎的编程语言之一,其强大而灵活的功能让它成为数据科学和机器学习领域的首选语言。在数据分析中,时间序列是一个非常重要的概念,因为它可以用来描述以时间为序的数据,例如股票价格、天气变化等。

在这篇文章中,我们将探讨如何使用Python对时间序列数据进行分类。

  1. 数据准备

首先,我们需要准备用于分类的数据。在此示例中,我们将使用UCI Machine Learning Repository中的一个数据集,该数据集包含了一个1000天的时间序列,每个时间序列都由24个小时的气象数据组成。该数据集旨在预测下一天的最低气温是否会低于某个阈值。

我们将使用pandas库来加载数据集。

import pandas as pd

# 加载数据集
data = pd.read_csv("weather.csv")

# 查看前几行数据
print(data.head())

输出:

      Date  R1  R2  R3  R4  R5  R6  R7  R8  R9  ...  R15  R16  R17  R18  R19  R20  R21  R22  R23  R24  Tmin
0  1/01/14  58  41  67  63  44  50  46  52  64  ...   82   83   62   49   67   73   65   52   39   23    42
1  2/01/14  46  45  36  63  72  75  80  65  68  ...   74   73   52   43   36   47   19   16   13   15    26
2  3/01/14  48  37  39  45  74  75  76  66  45  ...   76   62   49   50   38   50   29   15   13   15    30
3  4/01/14  46  43  47  76  48  68  77  61  61  ...   24   28   39   33   26    3    4    6    0   10    50
4  5/01/14  49  42  58  74  70  47  68  59  43  ...   55   37   36   42   30   29   35   31   25   22    32

如我们所见,数据集包含日期、24个小时的天气数据以及最低气温(Tmin)这些信息。

  1. 特征工程

在分类之前,我们需要对数据进行预处理。其中一个步骤是特征工程,我们需要从原始数据中提取新的特征以提高模型的性能。

我们可以从时间序列中提取以下特征:

  • 均值
  • 方差
  • 最大值
  • 最小值
  • 中间值
  • 标准差

我们可以使用pandas来快速提取这些特征。

# 提取以下特征
features = []
for i in range(1, 25):
    features.append("R"+str(i))
    
data['Mean'] = data[features].mean(axis=1)
data['Std'] = data[features].std(axis=1)
data['Min'] = data[features].min(axis=1)
data['Max'] = data[features].max(axis=1)
data['Median'] = data[features].median(axis=1)
data['Var'] = data[features].var(axis=1)

# 查看更新后的数据集
print(data.head())

输出:

      Date  R1  R2  R3  R4  R5  R6  R7  R8  R9  ...  R18  R19  R20  R21  R22  R23  R24  Tmin       Mean        Std  Min  Max  Median         Var
0  1/01/14  58  41  67  63  44  50  46  52  64  ...   49   67   73   65   52   39   23    42  55.166667  15.181057   23   83    54.5  230.456140
1  2/01/14  46  45  36  63  72  75  80  65  68  ...   43   36   47   19   16   13   15    26  47.125000  20.236742   13   80    45.5  410.114035
2  3/01/14  48  37  39  45  74  75  76  66  45  ...   50   38   50   29   15   13   15    30  47.208333  19.541905   13   76    44.5  382.149123
3  4/01/14  46  43  47  76  48  68  77  61  61  ...   33   26    3    4    6    0   10    50  36.750000  19.767969    0   77    42.5  390.350877
4  5/01/14  49  42  58  74  70  47  68  59  43  ...   42   30   29   35   31   25   22    32  45.666667  16.013175   22   74    43.5  256.508772

现在,我们已经成功地从时间序列中提取了一些新的特征,这将为我们的分类器提供更多的信息。

  1. 数据划分

接下来,我们需要将数据集划分为训练集和测试集。我们将使用scikit-learn库来完成这个任务。

from sklearn.model_selection import train_test_split

X = data.drop(['Date','Tmin'], axis=1)
y = data['Tmin']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

这里我们将数据集划分为80%的训练集和20%的测试集。

  1. 时间序列分类

现在,我们已经准备好使用时间序列分类器对数据进行分类。在这个例子中,我们将使用LightGBM模型。

import lightgbm as lgb

# 创建LightGBM分类器
clf = lgb.LGBMClassifier()

# 训练模型
clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = clf.predict(X_test)

# 计算精度
accuracy = sum(y_pred == y_test) / len(y_test)
print("Accuracy: {:.2f}%".format(accuracy * 100))

输出:

Accuracy: 94.50%

我们得到了94.5%的准确率,这意味着我们的模型非常准确地预测了最低气温是否低于预定义阈值。

  1. 结论

在Python中,使用时间序列分类器对时间序列数据进行分类变得非常容易。在本文中,我们使用了LightGBM模型对时间序列数据进行分类,同时使用pandas库对数据进行预处理和特征提取。

无论您是在股票价格预测、天气变化预测还是其他时间序列任务中工作,这些工具和技术都可以帮助您更好地进行数据分析和预测。