0

psycopg2 を使用して DB からデータを取得し、障害がログに記録された日付と時刻を取得しています。y軸に時間を、x軸に日付をとってグラフにしたいと思います。これにはドットグラフが理想的です。

これは、データを取得するコードの一部であり、zip を使用して、グラフにしたい 2 つのオブジェクトを作成します。

    cur.execute("SELECT date, time FROM querytimes where server = (%s) AND date > CURRENT_DATE - (%s) AND fail = 'Yes'", (server,days,))

    # retrieve the whole result set
    data = cur.fetchall()
    # close connection
    cur.close()
    conn.close()
    # Test
    date, time = zip(*data)

これらは結果の「日付」と「時刻」オブジェクトです。

(datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013) 、1、10)、datetime.date(2013、1、10)、datetime.date(2013、1、10)、datetime.date(2013、1、10)、datetime.date(2013、1、10)、 datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013, 1, 10), datetime.date(2013, 1, 11), datetime.date(2013, 1, 12), 日時.date(2013, 1, 12), datetime.date(2013, 1, 13))

(datetime.time(15、25、3)、datetime.time(15、26、3)、datetime.time(15、27、4)、datetime.time(15、28、3)、datetime.time(15) 、29、3)、datetime.time(15、30、4)、datetime.time(15、31、3)、datetime.time(15、32、4)、datetime.time(15、33、3)、 datetime.time(15, 34, 3), datetime.time(15, 35, 3), datetime.time(15, 36, 3), datetime.time(15, 37, 3), datetime.time(15, 3) 38、3)、datetime.time(15、39、3)、datetime.time(15、40、3)、datetime.time(0、20、4)、datetime.time(6、19、3)、datetime .time(10, 50, 3), datetime.time(2, 19, 3))

これをグラフ化するのに問題があります。私が理解していることから、データを理解するためにmatplotlibの前にこれらを浮動小数点数に変換する必要がありますか?

date2num を使用してみましたが、それは「日付」オブジェクトで機能しますが、「時間」オブジェクトでそれを行う方法がわかりません。

ありがとう

4

1 に答える 1

0

これは、 Pandasを使用して簡単に実現できます。

import pandas as pd
ts = pd.Series(times, index=dates)
ts.plot(rot=30, style='x-')

のようなものを取得するには

日付別の時間

代替アプローチ:インデックスとしての日時

日付オブジェクトだけでなく、日時オブジェクトをインデックスとして使用すると、柔軟性が向上する場合があるため、個人的にはこの種のデータをそのように表現します。最初に日付と時刻のオブジェクトを組み合わせることでそれを行うことができます

datetimes = []
for date, time in zip(dates, times):
    datetimes.append(datetime.datetime.combine(date, time))

時系列の構築

ts = pd.Series(1, index=datetimes)

(1は、その時点で1つの障害を示します)

これで、この種のデータに別の便利なビューを作成して、1日あたりの数量を確認できます。

ts.groupby(lambda x : x.date()).sum().plot(rot=30, style='x-', kind='bar')

1日あたりの量

于 2013-01-14T20:23:52.327 に答える