Гистограмма на основе часовых минут - PullRequest
0 голосов
/ 23 ноября 2018
jupyter notebook 5.2.2
Python 3.6.4
pandas 0.22.0
matplotlib 2.2.2

Привет. Я пытаюсь представить и отформатировать гистограмму в блокноте Jupyter на основе данных журнала часов и минут, полученных из хранилища hadoop с использованием Hive SQL.

У меня проблемы с презентацией.Я хотел бы иметь возможность устанавливать оси с 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)

В настоящее времямои оси начинаются задолго до и после данных, а срезы центрируются в течение минуты, что является большей болью, если я изменяю количество бинов.Я не вижу, где остановить автоматическое преобразование строки в дату и время, и я не уверен, что мне нужно, чтобы получить желаемый результат.

Речь идет о форматировании времени события и установкеоси или я могу просто установить оси независимо от типа данных.В идеале помеченные тики должны быть удобными для пользователя

Это график, который я получаю с 144 корзинами.Поскольку некоторые записи журнала являются ручными, бинарная диаграмма 1440 является «волосатой» из-за тенденции к округлению ручных записей.Одна из вещей, с которыми я экспериментирую, - это разное количество бинов.

1 Ответ

0 голосов
/ 28 ноября 2018

Спасибо 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);

Это позволяет мне аккуратно построить график и поиграть с настройками корзины, чтобы увидеть, как она влияет на кривую, как для представления на приборной панели, так и для размышлений о категоризации по временным диапазонам для анализа четных типов.по времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...