私は同等のクエリを持っています
SELECT
MONTH,
TEAM,
COUNT(*)
FROM
TABLE
Matplotlib を使用した結果を、TEAM の異なる値に対して同じグラフに別々のプロットでプロットするつもりです。このフィールドの可能な値は事前にわかりません。
pyplot に送信するのに適しているように、カーソルから返されたリストを分割する最良の方法は何でしょうか?
私は同等のクエリを持っています
SELECT
MONTH,
TEAM,
COUNT(*)
FROM
TABLE
Matplotlib を使用した結果を、TEAM の異なる値に対して同じグラフに別々のプロットでプロットするつもりです。このフィールドの可能な値は事前にわかりません。
pyplot に送信するのに適しているように、カーソルから返されたリストを分割する最良の方法は何でしょうか?
リストを分割する方法は次のとおりです。それが「リストを分割する最良の方法」であるかどうかはわかりません。
def display(conn):
cur = conn.cursor()
cur.execute('select month, team, count(*) from events group by month, team')
months = defaultdict(list)
count = defaultdict(list)
for row in cur:
months[row[1]].append(int(row[0]))
count[row[1]].append(int(row[2]))
cur.close()
for k in months:
pylab.plot(months[k], count[k], label=k)
pylab.legend()
pylab.show()
完全なサンプル プログラム:
import sqlite3
import pylab
from collections import defaultdict
def populate_table(conn):
with conn:
conn.execute('create table events (month, team, value)')
conn.executemany(
'insert into events values (?,?,?)', (
(1, 'Bluejays', 98.2),
(1, 'Redbirds', 42),
(1, 'Green Eggs and Ham', 1),
(1, 'Bluejays', 98.2),
(1, 'Redbirds', 42),
(1, 'Bluejays', 98.2),
(1, 'Green Eggs and Ham', 1),
(2, 'Green Eggs and Ham', 98.2),
(2, 'Redbirds', 42),
(2, 'Green Eggs and Ham', 1),
(2, 'Bluejays', 98.2),
(2, 'Redbirds', 42),
(2, 'Bluejays', 98.2),
(2, 'Green Eggs and Ham', 1),
(3, 'Green Eggs and Ham', 98.2),
(3, 'Redbirds', 42),
(3, 'Green Eggs and Ham', 1),
(3, 'Bluejays', 98.2),
(3, 'Redbirds', 42),
(3, 'Redbirds', 98.2),
(3, 'Green Eggs and Ham', 1)))
def display(conn):
cur = conn.cursor()
cur.execute('select month, team, count(*) from events group by month, team')
months = defaultdict(list)
count = defaultdict(list)
for row in cur:
months[row[1]].append(int(row[0]))
count[row[1]].append(int(row[2]))
cur.close()
for k in months:
pylab.plot(months[k], count[k], label=k)
pylab.legend(loc="lower left")
pylab.xlim(.5,3.5)
pylab.xticks(range(1,4))
pylab.ylim(.5,3.5)
pylab.yticks(range(1,4))
pylab.xlabel("Month")
pylab.ylabel("Events")
pylab.show()
conn = sqlite3.connect(':memory:')
populate_table(conn)
display(conn)
結果: