使用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的基准(来自一个带有 固态硬盘):

MetricResults
Append one month of data (2.67 million rows)0.711 seconds
Fetch one hour of data into memory0.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 请求。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将<String,Object>映射到JSONString   java如何读取多个文件。if语句中的equals语句   java启动Glassfish时出现间歇性异常   java如何根据用户偏好进行动态API调用?   HibernateJavaSpring,处理域对象   java Thumbnailator库将图像转换为cmyk   Java初学者租赁计划   java存储和检索特殊字符mysql   在Java 10上评测远程JProfiler   授权中的java角色概念   java使用Dropwizard和JDBI查询具有多个模式的数据库?   java冲突检测,在libgdx中   java如何使用SAX解析器解析xml文件中的嵌套标记   使用asm重建方法时的java错误指令   java如何使用GWT增加ListBox的文本大小   java:我的编码应该遵循什么样的设计结构   java“is prime”算法运行时   java如何保护我的进程被终止?