2017-07-17 16 views
1

私は、Postgresqlデータベースからデータを取り出すFlask Webアプリケーションを作っています。私はpsycopg2を使用してdbとの接続を管理しています。matplotlibとpsycopg2を使った動的グラフ

私は、ユーザーの活動のグラフ(アクティブユーザーの#)時間にわたって(例えば、過去7日間)を持つようにしたい場合は、どのように私はこれはmatplotlibのを動的に表現することができますか?この(EDITED)のようになり、過去7日以内にユーザー数を取得するための

マイpsycopg2クエリ:

timeInterval = 7; 

def userCount(conn, cur): 
    cur.execute("""SELECT count(DISTINCT(username)) from user_table WHERE tstampz > 
       (current_timestamp - make_interval(days := %s))""", [timeInterval] 
    return cur.fetchone()[0] 

私の質問は、私は私のmatplotlibのグラフでは、このクエリの結果を得ることができる方法ですか?

答えて

0

まず、タイムスタンプを表示するクエリが必要です。そうでなければ、時系列をグラフ化する方法がありません。また、make_interval()関数を使って何をしているのか分かりませんが、これは必須ではありません。だからあなたのクエリは次のようになります。

cur.execute("""SELECT tstampz, count(DISTINCT(username)) 
       from user_table 
       WHERE tstampz > 
       (current_timestamp - INTERVAL '7 days') 
       GROUP BY tstampz ORDER BY tstampz;""") 

(ところで、タイムゾーン付きタイムスタンプを使用していただきありがとうございます)

matplotlibのは、あなたが配列としてデータを再構築したいので、あなたがそれをループにしたいでしょうし、

tses = [] 
ucounts = [] 
for rec in cur: 
    tses.append(rec[0]) 
    ucounts.append(rec[1]) 

これらをプロットに割り当てることができます。この構成では、時間の順序にギャップがないことを前提としています。そうするなら、より洗練されたアプローチをとる必要があります。

ax.plot(tses, ucounts, color='blue', label='User Count') 

あなたはmatplotlibのとPostgresの上の私のチュートリアルからdownloading the Jupiter notebookによって、より完全な例を見つけることができます。

+0

おっと、私は質問の目的のために私のコードを変更し、それが意味をなさないことを認識しませんでした。元の質問で修正されました。あなたのコメントをありがとう、私はこれを試してみよう! – Sarah

+0

私の答えが役に立ったら、私に投票してくださいね。 – FuzzyChef

関連する問題