用于散景周期时间序列的智能x轴

时间:2015-07-22 17:03:06

标签: python pandas time-series bokeh

我在pandas Series对象中有时间序列数据。值是表示事件大小的浮点数。事件时间和大小一起告诉我我的系统有多繁忙。我正在使用散点图。

我想看一下不同时期的交通模式,回答像#34;中午是否有每日飙升的问题?"或者"一周中的哪几天拥有最多的流量?"因此,我需要覆盖许多不同时期的数据。我这样做是通过将时间戳转换为timedeltas(首先通过减去第一个句点的开始,然后通过执行具有句点长度的mod)。

现在我的索引使用相对于" abstract"的时间间隔。时间段,如一天或一周。我想制作一些图,其中x轴显示的不仅仅是纳秒。理想情况下,它会显示月份,星期几,小时等,具体取决于放大和缩小时的时间刻度(如散景图通常用于时间序列)。

下面的代码显示了我目前的情节示例。结果图的x轴以纳秒为单位,这不是我想要的。如何获得一个更像我在时间戳上看到的智能x轴?

import numpy as np
import pandas as pd
from bokeh.charts import show, output_file
from bokeh.plotting import figure

oneDay = np.timedelta64(24*60*60,'s')
fourHours = 24000000000000 # four hours in nanoseconds (ugly)

time = [pd.Timestamp('2015-04-27 01:00:00'),  # a Monday
        pd.Timestamp('2015-05-04 02:00:00'),  # a Monday
        pd.Timestamp('2015-05-11 03:00:00'),  # a Monday
        pd.Timestamp('2015-05-12 04:00:00')   # a Tuesday
        ]
resp = [2.0, 1.3, 2.6, 1.3]

ts = pd.Series(resp, index=time)
days = dict(list(ts.groupby(lambda x: x.weekday)))
monday = days[0]  # this TimeSeries consists of all data for all Mondays

# Now convert timestamps to timedeltas
# First subtract the timestamp of the starting date
# Then take the remainder after dividing by one day
# Result: each index value is in the 24 hour range [00:00:00, 23:59:59]
tdi = monday.index - pd.Timestamp(monday.index.date[0])
x = pd.TimedeltaIndex([td % oneDay for td in tdi])
y = monday.values

output_file('bogus.html')
xmax = fourHours  # why doesn't np.timedelta64 work for xmax?
fig = figure(x_range=[0,xmax], y_range=[0,4])
fig.circle(x, y)
show(fig)

0 个答案:

没有答案