用于处理时间相关数据的Python库?

时间:2010-12-01 21:57:40

标签: python

我有一些数据(NOAA提供的天气预报)我正在尝试使用。有各种数据系列(温度,湿度等),每个数据系列包含一系列数据点,并在不同的时间尺度上指向日期时间数组(有些系列是每小时,有些是3小时,有些是每天)。是否有任何类型的库来处理这样的数据,并以用户友好的方式访问它。 理想的用法是:

db = TimeData() 
db.set_val('2010-12-01 12:00','temp',34) 
db.set_val('2010-12-01 15:00','temp',37) 
db.set_val('2010-12-01 12:00','wind',5) 
db.set_val('2010-12-01 13:00','wind',6) 
db.query('2010-12-01 13:00') # {'wind':6, 'temp':34}  

基本上,查询将返回每个系列的最新值。 我查看了scikits.timeseries,但由于涉及预计算的数量(它预期一次性中的所有数据,没有随机访问设置),因此对此用例不太合适。

3 个答案:

答案 0 :(得分:1)

如果您的数据已排序,您可以使用bisect模块快速获取时间小于或等于指定时间的条目。

类似的东西:

i = bisect_right(times, time)
# times[j] <= time for j<i
# times[j] > time for j>=i
if times[i-1] == time:
      # exact match
      value = values[i-1]
else:
      # interpolate
      value = (values[i-1]+values[i])/2

答案 1 :(得分:0)

SQLite有一个日期类型。您也可以将所有时间转换为自纪元以来的秒数(通过time.gmtime()time.localtime()),这使得比较变得微不足道。

答案 2 :(得分:0)

这是一个经典的行到列问题,在一个好的SQL DBMS中你可以使用联合:

SELECT MAX(d_t) AS d_t, SUM(temp) AS temp, SUM(wind) AS wind, ... FROM ( 
  SELECT d_t, 0 AS temp, value AS wind FROM table 
     WHERE type='wind' AND d_t >= some_date
     ORDER BY d_t DESC LIMIT 1
  UNION
  SELECT d_t, value, 0 FROM table
     WHERE type='temp' AND d_t >= some_date
     ORDER BY d_t DESC LIMIT 1
  UNION
  ...
) q1;

诀窍是为每个维度创建子查询,同时为其他维度提供占位符列。在Python中,您可以使用SQLAlchemy动态生成这样的查询。