libcity.data.dataset.traffic_state_datatset

class libcity.data.dataset.traffic_state_datatset.TrafficStateDataset(config)[source]

Bases: libcity.data.dataset.abstract_dataset.AbstractDataset

交通状态预测数据集的基类。 默认使用`input_window`的数据预测`output_window`对应的数据,即一个X,一个y。 一般将外部数据融合到X中共同进行预测,因此数据为[X, y]。 默认使用`train_rate`和`eval_rate`在样本数量(num_samples)维度上直接切分训练集、测试集、验证集。

_add_external_information(df, ext_data=None)[source]

将外部数据和原始交通状态数据结合到高维数组中,子类必须实现这个方法来指定如何融合外部数据和交通状态数据, 如果不想加外部数据,可以把交通状态数据`df`直接返回, 提供3个实现好的方法适用于不同形状的交通状态数据跟外部数据结合: _add_external_information_3d/_add_external_information_4d/_add_external_information_6d

Parameters
  • df (np.ndarray) – 交通状态数据多维数组

  • ext_data (np.ndarray) – 外部数据

Returns

融合后的外部数据和交通状态数据

Return type

np.ndarray

_add_external_information_3d(df, ext_data=None)[source]

增加外部信息(一周中的星期几/day of week,一天中的某个时刻/time of day,外部数据)

Parameters
  • df (np.ndarray) – 交通状态数据多维数组, (len_time, num_nodes, feature_dim)

  • ext_data (np.ndarray) – 外部数据

Returns

融合后的外部数据和交通状态数据, (len_time, num_nodes, feature_dim_plus)

Return type

np.ndarray

_add_external_information_4d(df, ext_data=None)[source]

增加外部信息(一周中的星期几/day of week,一天中的某个时刻/time of day,外部数据)

Parameters
  • df (np.ndarray) – 交通状态数据多维数组, (len_time, len_row, len_column, feature_dim)

  • ext_data (np.ndarray) – 外部数据

Returns

融合后的外部数据和交通状态数据, (len_time, len_row, len_column, feature_dim_plus)

Return type

np.ndarray

_add_external_information_6d(df, ext_data=None)[source]

增加外部信息(一周中的星期几/day of week,一天中的某个时刻/time of day,外部数据)

Parameters
  • df (np.ndarray) – 交通状态数据多维数组, (len_time, len_row, len_column, len_row, len_column, feature_dim)

  • ext_data (np.ndarray) – 外部数据

Returns

融合后的外部数据和交通状态数据, (len_time, len_row, len_column, len_row, len_column, feature_dim)

Return type

np.ndarray

_calculate_adjacency_matrix()[source]

使用带有阈值的高斯核计算邻接矩阵的权重,如果有其他的计算方法,可以覆盖这个函数, 公式为:$ w_{ij} = exp left(- frac{d_{ij}^{2}}{sigma^{2}} right) $, $sigma$ 是方差, 小于阈值`weight_adj_epsilon`的值设为0:$ w_{ij}[w_{ij}<epsilon]=0 $

Returns

self.adj_mx, N*N的邻接矩阵

Return type

np.ndarray

_generate_data()[source]

加载数据文件(.dyna/.grid/.od/.gridod)和外部数据(.ext),且将二者融合,以X,y的形式返回

Returns

tuple contains:

x(np.ndarray): 模型输入数据,(num_samples, input_length, …, feature_dim)

y(np.ndarray): 模型输出数据,(num_samples, output_length, …, feature_dim)

Return type

tuple

_generate_input_data(df)[source]

根据全局参数`input_window`和`output_window`切分输入,产生模型需要的张量输入, 即使用过去`input_window`长度的时间序列去预测未来`output_window`长度的时间序列

Parameters

df (np.ndarray) – 数据数组,shape: (len_time, …, feature_dim)

Returns

tuple contains:

x(np.ndarray): 模型输入数据,(epoch_size, input_length, …, feature_dim)

y(np.ndarray): 模型输出数据,(epoch_size, output_length, …, feature_dim)

Return type

tuple

_generate_train_val_test()[source]

加载数据集,并划分训练集、测试集、验证集,并缓存数据集

Returns

tuple contains:

x_train: (num_samples, input_length, …, feature_dim)

y_train: (num_samples, input_length, …, feature_dim)

x_val: (num_samples, input_length, …, feature_dim)

y_val: (num_samples, input_length, …, feature_dim)

x_test: (num_samples, input_length, …, feature_dim)

y_test: (num_samples, input_length, …, feature_dim)

Return type

tuple

_get_scalar(scaler_type, x_train, y_train)[source]

根据全局参数`scaler_type`选择数据归一化方法

Parameters
  • x_train – 训练数据X

  • y_train – 训练数据y

Returns

归一化对象

Return type

Scaler

_load_cache_train_val_test()[source]

加载之前缓存好的训练集、测试集、验证集

Returns

tuple contains:

x_train: (num_samples, input_length, …, feature_dim)

y_train: (num_samples, input_length, …, feature_dim)

x_val: (num_samples, input_length, …, feature_dim)

y_val: (num_samples, input_length, …, feature_dim)

x_test: (num_samples, input_length, …, feature_dim)

y_test: (num_samples, input_length, …, feature_dim)

Return type

tuple

_load_dyna(filename)[source]

加载数据文件(.dyna/.grid/.od/.gridod),子类必须实现这个方法来指定如何加载数据文件,返回对应的多维数据, 提供5个实现好的方法加载上述几类文件,并转换成不同形状的数组: _load_dyna_3d/_load_grid_3d/_load_grid_4d/_load_grid_od_4d/_load_grid_od_6d

Parameters

filename (str) – 数据文件名,不包含后缀

Returns

数据数组

Return type

np.ndarray

_load_dyna_3d(filename)[source]

加载.dyna文件,格式[dyna_id, type, time, entity_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载

Parameters

filename (str) – 数据文件名,不包含后缀

Returns

数据数组, 3d-array: (len_time, num_nodes, feature_dim)

Return type

np.ndarray

_load_ext()[source]

加载.ext文件,格式[ext_id, time, properties(若干列)], 其中全局参数`ext_col`用于指定需要加载的数据的列,不设置则默认全部加载

Returns

外部数据数组,shape: (timeslots, ext_dim)

Return type

np.ndarray

_load_geo()[source]

加载.geo文件,格式[geo_id, type, coordinates, properties(若干列)]

_load_grid_3d(filename)[source]

加载.grid文件,格式[dyna_id, type, time, row_id, column_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载,

Parameters

filename (str) – 数据文件名,不包含后缀

Returns

数据数组, 3d-array: (len_time, num_grids, feature_dim)

Return type

np.ndarray

_load_grid_4d(filename)[source]

加载.grid文件,格式[dyna_id, type, time, row_id, column_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载

Parameters

filename (str) – 数据文件名,不包含后缀

Returns

数据数组, 4d-array: (len_time, len_row, len_column, feature_dim)

Return type

np.ndarray

_load_grid_geo()[source]

加载.geo文件,格式[geo_id, type, coordinates, row_id, column_id, properties(若干列)]

_load_grid_od_4d(filename)[source]

加载.gridod文件,格式[dyna_id, type, time, origin_row_id, origin_column_id, destination_row_id, destination_column_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载

Parameters

filename (str) – 数据文件名,不包含后缀

Returns

数据数组, 4d-array: (len_time, num_grids, num_grids, feature_dim)

Return type

np.ndarray

_load_grid_od_6d(filename)[source]

加载.gridod文件,格式[dyna_id, type, time, origin_row_id, origin_column_id, destination_row_id, destination_column_id, properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载

Parameters

filename (str) – 数据文件名,不包含后缀

Returns

数据数组, 6d-array: (len_time, len_row, len_column, len_row, len_column, feature_dim)

Return type

np.ndarray

_load_grid_rel()[source]

根据网格结构构建邻接矩阵,一个格子跟他周围的8个格子邻接

Returns

self.adj_mx, N*N的邻接矩阵

Return type

np.ndarray

_load_od_4d(filename)[source]

加载.od文件,格式[dyna_id, type, time, origin_id, destination_id properties(若干列)], .geo文件中的id顺序应该跟.dyna中一致, 其中全局参数`data_col`用于指定需要加载的数据的列,不设置则默认全部加载

Parameters

filename (str) – 数据文件名,不包含后缀

Returns

数据数组, 4d-array: (len_time, len_row, len_column, feature_dim)

Return type

np.ndarray

_load_rel()[source]

加载.rel文件,格式[rel_id, type, origin_id, destination_id, properties(若干列)], 生成N*N的邻接矩阵,计算逻辑如下: (1) 权重所对应的列名用全局参数`weight_col`来指定, (2) 若没有指定该参数, (2.1) rel只有4列,则认为rel中的每一行代表一条邻接边,权重为1。其余边权重为0,代表不邻接。 (2.2) rel只有5列,则默认最后一列为`weight_col` (2.3) 否则报错 (3) 根据得到的权重列`weight_col`计算邻接矩阵 (3.1) 参数`bidir_adj_mx`=True代表构造无向图,=False为有向图 (3.2) 参数`set_weight_link_or_dist`为`link`代表构造01矩阵,为`dist`代表构造权重矩阵(非01) (3.3) 参数`init_weight_inf_or_zero`为`zero`代表矩阵初始化为全0,`inf`代表矩阵初始化成全inf,初始化值也就是rel文件中不存在的边的权值 (3.4) 参数`calculate_weight_adj`=True表示对权重矩阵应用带阈值的高斯核函数进行稀疏化,对01矩阵不做处理,=False不进行稀疏化,

修改函数self._calculate_adjacency_matrix()可以构造其他方法替换全阈值高斯核的稀疏化方法

Returns

self.adj_mx, N*N的邻接矩阵

Return type

np.ndarray

_split_train_val_test(x, y)[source]

划分训练集、测试集、验证集,并缓存数据集

Parameters
  • x (np.ndarray) – 输入数据 (num_samples, input_length, …, feature_dim)

  • y (np.ndarray) – 输出数据 (num_samples, input_length, …, feature_dim)

Returns

tuple contains:

x_train: (num_samples, input_length, …, feature_dim)

y_train: (num_samples, input_length, …, feature_dim)

x_val: (num_samples, input_length, …, feature_dim)

y_val: (num_samples, input_length, …, feature_dim)

x_test: (num_samples, input_length, …, feature_dim)

y_test: (num_samples, input_length, …, feature_dim)

Return type

tuple

get_data()[source]

返回数据的DataLoader,包括训练数据、测试数据、验证数据

Returns

tuple contains:

train_dataloader: Dataloader composed of Batch (class)

eval_dataloader: Dataloader composed of Batch (class)

test_dataloader: Dataloader composed of Batch (class)

Return type

tuple

get_data_feature()[source]

返回数据集特征,子类必须实现这个函数,返回必要的特征

Returns

包含数据集的相关特征的字典

Return type

dict