DSS 或HEC-DSS是美国陆军工程兵团水文工程中心 (HEC) 开发的数据库系统。它不是关系数据库,而是旨在更有效地检索和存储大量数据的数据库,这些数据不一定与其他数据集相互关联。HEC-DSS 支持时间序列数据、配对数据(如 pandas DataFrame)、面向空间的网格数据等数据类型。HEC-DSS 通过路径名引用数据集或记录。路径名分为六个部分,并以“A”到“F”标记为 /A/B/C/D/E/F/。HEC-DSS被纳入HEC-RAS、HEC-HMS、HEC-RTS等HEC的主要程序中。
HEC 发布了 Java 库和基于 Java 的可视化实用程序HEC-DSSVue,用于查看、编辑或操作 HEC-DSS。Java 库可以在 Jython 中使用,但是,Jython 缺少 numpy、pandas、matplotlib 和其他流行的科学库。所以我在 2017 年底开始研究pydsstools
HEC-DSS 的 python 库。目前,pydsstools
支持主要的 HEC-DSS 数据类型和基本的复制、删除操作,并在 Windows 和 Ubuntu 等发行版中工作。以下 python 代码是读取和绘制时间序列数据的示例:
from pydsstools.heclib.dss import HecDss
import matplotlib.pyplot as plt
import numpy as np
dss_file = "example.dss"
pathname = "/REGULAR/TIMESERIES/FLOW//1HOUR/Ex1/"
startDate = "15JUL2019 19:00:00"
endDate = "15JUL2019 21:00:00"
with HecDss.Open(dss_file) as fid:
ts = fid.read_ts(pathname,window=(startDate,endDate),trim_missing=True)
times = np.array(ts.pytimes)
values = ts.values
plt.plot(times[~ts.nodata],values[~ts.nodata],"o")
plt.show()
操作其他数据类型(配对数据、网格数据)的示例在 GitHub 的 pydsstools 存储库的 README 部分中提供。