Как построить гистограмму данных временного ряда с помощью панд? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть данные временного ряда, по которым я строю графики, используя pygal.Вот как выглядят данные

[(datetime.datetime(2019, 3, 3, 0, 20, 22, 195908, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 25, 807185, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 29, 566157, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 33, 57685, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 32, 3897, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 35, 739188, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 39, 592752, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 43, 242095, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 52, 37, 311601, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 11.0), (datetime.datetime(2019, 3, 3, 0, 52, 40, 976424, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 11.0)]

Теперь я могу сделать обычную bar plot, используя pygal, но теперь мне нужно построить histogram.Я обнаружил, что у pandas есть способ найти histogram и построить его, используя matplotlib.

Итак, вот что я сделал

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import datetime
import  psycopg2

data = [(datetime.datetime(2019, 3, 3, 0, 20, 22, 195908, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 25, 807185, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 29, 566157, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 33, 57685, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 32, 3897, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 35, 739188, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 39, 592752, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 43, 242095, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 52, 37, 311601, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 11.0), (datetime.datetime(2019, 3, 3, 0, 52, 40, 976424, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 11.0)]

df_hist = pd.DataFrame(np.array(data)).hist(bins=5)  // I divide the data into 5 buckets
plt.savefig('hist.svg')

Но я сталкиваюсь со следующей ошибкой

Traceback (most recent call last):
  File "/home/souvik/Music/Test331.py", line 120, in <module>
    df_hist = pd.DataFrame(np.array(data)).hist(bins=5)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/pandas/plotting/_core.py", line 2408, in hist_frame
    layout=layout)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/pandas/plotting/_tools.py", line 238, in _subplots
    ax0 = fig.add_subplot(nrows, ncols, 1, **subplot_kw)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/matplotlib/figure.py", line 1367, in add_subplot
    a = subplot_class_factory(projection_class)(self, *args, **kwargs)
  File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/matplotlib/axes/_subplots.py", line 60, in __init__
    ).format(maxn=rows*cols, num=num))
ValueError: num must be 1 <= num <= 0, not 1

Однако, если я включу числовое значение и исключу значение datetime из списка данных, я получу график

data = [x[1] for x in data]
df_hist = pd.DataFrame(np.array(data)).hist(bins=5)
plt.savefig('hist.svg')

enter image description here

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

Как я могу получить histogram данных временных рядов?Также вместо того, чтобы полагаться на matplotlib, могу ли я использовать pygal, чтобы сделать это?

Примечание: На рисунке выше приведены данные гораздо большего размера.Я уменьшил объем данных, чтобы разместить вопрос здесь.

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