处理 PEMS-SF 数据集并添加静态特征可以分为以下几个步骤:

  1. 数据读取和预处理

首先,我们需要读取 PEMS-SF 数据集中的 .mat 文件,并将其转换为 pandas DataFrame 格式。可以使用 scipy 库中的 loadmat 函数来读取 .mat 文件,然后使用 pandas 库中的 DataFrame 函数将其转换为 DataFrame 格式。接着,我们需要对数据进行一些预处理,例如去除不必要的列、重命名列等。

import pandas as pd
from scipy.io import loadmat

# 读取 PEMS-SF 数据集中的 .mat 文件
data = loadmat('PEMS-SF/data/sensor_data.mat')

# 将 .mat 文件转换为 DataFrame 格式
df = pd.DataFrame(data['sensor'])

# 去除不必要的列
df.drop(columns=['sensor_description', 'latitude', 'longitude'], inplace=True)

# 重命名列
df.columns = ['timestamp'] + [f'sensor_{i+1}' for i in range(df.shape[1]-1)]
  1. 特征工程

接着,我们需要进行特征工程,以提取 PEMS-SF 数据集中的动态特征。在这里,我们可以使用一些常用的时间序列特征,例如滑动平均、滑动标准差、滑动最小值、滑动最大值等。可以使用 pandas 库中的 rolling 函数来实现这些特征。例如,下面的代码展示了如何计算每个传感器的滑动平均值和滑动标准差:

# 计算每个传感器的滑动平均值和滑动标准差
for i in range(1, df.shape[1]):
    sensor = f'sensor_{i}'
    df[f'{sensor}_mean'] = df[sensor].rolling(window=12, min_periods=1).mean()
    df[f'{sensor}_std'] = df[sensor].rolling(window=12, min_periods=1).std()
  1. 添加静态特征

最后,我们需要添加静态特征,例如天气、节假日等。由于 PEMS-SF 数据集中没有这些静态变量的 CSV 文件,我们可以使用其他数据源来获取这些信息。例如,我们可以使用天气 API 来获取每个时间戳的天气信息,并将其作为静态特征添加到 PEMS-SF 数据集中。可以使用 requests 库来调用 API 接口,然后使用 pandas 库来将结果转换为 DataFrame 格式并与 PEMS-SF 数据集进行合并。以下是一个简单的示例:

import requests

# 调用天气 API 获取天气信息
def get_weather(timestamp):
    url = f'https://api.openweathermap.org/data/2.5/weather?lat=37.7985&lon=-122.3774&appid=<YOUR_API_KEY>&dt={timestamp}'
    response = requests.get(url)
    data = response.json()
    return data['weather'][0]['main']

# 添加天气特征
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df['weather'] = df['timestamp'].apply(lambda x: get_weather(int(x.timestamp())))

同样,我们也可以使用其他数据源来添加其他静态特征,例如节假日、交通状况等。最后,我们可以将特征保存为 CSV 文件,以便以后使用。

# 保存特征为 CSV 文件
df.to_csv('pems_sf_features.csv', index=False)
PEMS-SF 数据集特征工程:Python 处理和添加静态特征

原文地址: https://www.cveoy.top/t/topic/myiH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录