使用pytables和pandas处理大型时间序列
tstables的Python项目详细描述
tstables是一个python包,用于将时间序列数据存储在hdf5文件中 使用pytables。它将时间序列数据存储到每日分区中,并且 提供跨分区查询数据子集的函数。
它的目标是支持大量(千兆字节)时间的工作流 序列数据定期附加到hdf5文件中,并且需要 阅读很多次(快速)分析模型和研究。
示例
本例以分钟为单位读取比特币价格数据,然后获取 数据范围。有关此处的完整示例和其他示例,请参见 EXAMPLES.md。
# Class to use as the table descriptionclassBpiValues(tables.IsDescription):timestamp=tables.Int64Col(pos=0)bpi=tables.Float64Col(pos=1)# Use pandas to read in the CSV databpi=pandas.read_csv('bpi_2014_01.csv',index_col=0,names=['date','bpi'],parse_dates=True)f=tables.open_file('bpi.h5','a')# Create a new time seriests=f.create_ts('/','BPI',BpiValues)# Append the BPI datats.append(bpi)# Read in some dataread_start_dt=datetime(2014,1,4,12,00)read_end_dt=datetime(2014,1,4,14,30)rows=ts.read_range(read_start_dt,read_end_dt)# `rows` will be a pandas DataFrame with a DatetimeIndex.
这里是如何打开预先存在的^ {TT1}$HDF5文件并获得 它的时间序列。
f=tables.open_file('bpi.h5','r')ts=f.root.BPI._f_get_timeseries()# Read in some dataread_start_dt=datetime(2014,1,4,12,00)read_end_dt=datetime(2014,1,4,14,30)rows=ts.read_range(read_start_dt,read_end_dt)
运行单元测试
您可以从 存储库:
python setup.py test
初步基准
tstables的主要目标是使读取 数据,给定日期范围。tstables目前包括一个简单的基准测试 跟踪实现这一目标的进展。在安装 包,您可以从命令行运行tstables_benchmark,或者 可以在python控制台中导入包并直接运行它。
importtstableststables.Benchmark.main()
运行基准测试会将结果输出到屏幕并保存 它们在benchmark.txt中。
基准加载一年的随机第二数据(只是时间戳 列和32位整数“price”列)放入文件中,然后 随机读取一小时的数据块。
目前,这里有一些tstables的基准(来自一个带有 固态硬盘):
Metric | Results |
---|---|
Append one month of data (2.67 million rows) | 0.711 seconds |
Fetch one hour of data into memory | 0.305 seconds |
File size (one year of data, 32 million rows, uncompressed) | 391.6 MB |
hdf5支持zlib和其他压缩算法,可以是 通过Pytables启用以减小文件大小。没有压缩, HDF5文件大小比原始数据大1.8%左右。 二进制格式,比csv文件的开销低得多。
贡献
如果你对这个项目感兴趣 更新),发邮件到andy@andyfiedler.com给andy fiedler或者提交一个pull 请求。