Matplotlib基于小时的直方图

时间:2018-11-23 11:46:45

标签: python pandas matplotlib hive jupyter-notebook

jupyter notebook 5.2.2
Python 3.6.4
pandas 0.22.0
matplotlib 2.2.2

嗨,我正尝试使用Hive SQL基于从hadoop存储中检索的小时和分钟日志数据在jupyter笔记本中呈现和格式化直方图。

我在演示中遇到问题。我希望能够将轴从00:00设置为23:59,并将垃圾箱从零开始到下一分钟结束。我想要半小时刻度。我只是看不到该怎么做。

以下内容将回溯2年的数据,其中包含1440行以及每分钟的事件总数。

%%sql -o jondat
select eventtime, count(1) as cnt
from logs.eventlogs
group by eventtime

数据以字符串形式存储,但是是小时和分钟hh:mm,但是笔记本似乎正在将其自动转换为sysdate和timestamp,我一直在使用这种格式的数据以及其他格式。

如果我剔除冒号

df.dtypes

eventtime int64
cnt int64

如果我使用虚拟填充物(例如管道),我会得到

eventtime object
cnt int64

如果我将结肠留在结肠中,我会得到

eventtime datetime64
cnt int64

这是我目前正在使用的。

...
2018-11-22 00:27:00 32140
2018-11-22 00:28:00 32119
2018-11-22 00:29:00 31726
...
2018-11-22 23:30:00 47989
2018-11-22 23:31:00 40019
2018-11-22 23:32:00 40962
...

然后我可以绘制数据

%%local

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import datetime as dt
import mateplotlib.dates as md

xtformat = md.DateFormatter('%H:%M')

plt.rcParams['figure.figsize'] = [15,10]
df = pd.DataFrame(jondat)

x=df['eventtime']
b=144
y=df['cnt']

fig, ax=plt.subplots()

ax.xaxis_date()

ax.hist(x,b,weights=y)
ax.xaxis.set_major_formatter(xtformat)

plt.show(ax)

当前,我的轴在数据前后都已经很好地启动了,并且垃圾箱在一分钟内居中,如果更改垃圾箱的数量,这会更痛苦。我看不到在哪里停止从字符串到日期时间的自动转换,而且我不确定是否需要这样做才能得到想要的结果。

这与格式化事件时间和设置轴有关,还是可以不考虑数据类型而轻松地设置轴。理想情况下,标记的刻度线将是用户友好的

This is the chart I get with 144 bins. As some of the log records are manual the 1440 bin chart is "hairy" due to the tendency for the manual records being rounded. One of the things I am experimenting with is different bin counts.

1 个答案:

答案 0 :(得分:0)

感谢https://stackoverflow.com/users/4124317/importanceofbeingernest为我提供了足够的线索来找到答案。

%%local

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import datetime as dt
import mateplotlib.dates as md

plt.rcParams['figure.figsize'] = [15,10]
df = pd.DataFrame(jondat)

xtformat = md.DateFormatter('%H:%M')
xtinter = md.MinuteLocator(byminute=[0], interval=1)
xtmin = md.MinuteLocator(byminute=[30], interval=1)


x=df['eventtime']
b=144
y=df[cnt']

fig, ax=plt.subplots()

ld=min(df['eventtime'])
hd=max(df['eventtime'])

ax.xaxis_date()

ax.hist(x,b,weights=y)
ax.xaxis.set_major_formatter(xtformat)
ax.xaxis.set_major_locator(xtinter)
ax.xaxis.set_minor_locator(stmin)
ax.set_xlim([ld,hd])

plt.show(ax);

这使我可以整理图表并使用bin设置,以查看它对曲线的影响程度,既可以显示在仪表板上,也可以帮助您考虑将其归类为时间段,以便按时间分析偶数类型。