93 lines
3.4 KiB
Python
93 lines
3.4 KiB
Python
|
import sqlite3
|
||
|
|
||
|
connection = sqlite3.connect('tikker.db')
|
||
|
|
||
|
def render_per_hour():
|
||
|
cursor = connection.cursor()
|
||
|
|
||
|
cursor.execute("SELECT count(0) as total, strftime('%H',timestamp) as hour FROM kevent WHERE event = 'PRESSED' GROUP BY hour ORDEr BY hour")
|
||
|
rows_presses = cursor.fetchall()
|
||
|
|
||
|
cursor.execute("SELECT count(0) as total, strftime('%H',timestamp) as hour FROM kevent WHERE event = 'REPEATED' GROUP BY hour ORDEr BY hour")
|
||
|
rows_repeated = cursor.fetchall()
|
||
|
|
||
|
|
||
|
cursor.execute("SELECT count(0) as total, strftime('%H',timestamp) as hour FROM kevent WHERE event = 'RELEASED' GROUP BY hour ORDEr BY hour")
|
||
|
rows_released = cursor.fetchall()
|
||
|
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
totals = [row[0] for row in rows_presses]
|
||
|
hours = [row[1] for row in rows_presses]
|
||
|
|
||
|
totals_repeated = [row[0] for row in rows_repeated]
|
||
|
hours_repeated = [row[1] for row in rows_repeated]
|
||
|
|
||
|
totals_released = [row[0] for row in rows_released]
|
||
|
hours_released = [row[1] for row in rows_released]
|
||
|
|
||
|
plt.figure(figsize=(8, 6))
|
||
|
|
||
|
plt.plot(hours_repeated, totals_repeated, marker='o', label='Repeats per hour', color='green')
|
||
|
plt.plot(hours_released, totals_released, marker='o', label='Releases per hour', color='orange')
|
||
|
|
||
|
plt.plot(hours, totals, marker='o', label='Presses per hour', color='red')
|
||
|
plt.xlabel('Hour')
|
||
|
plt.ylabel('Event count')
|
||
|
plt.title('Keyboard events')
|
||
|
plt.legend()
|
||
|
|
||
|
plt.grid(True)
|
||
|
plt.show()
|
||
|
|
||
|
def render_per_weekday():
|
||
|
cursor = connection.cursor()
|
||
|
|
||
|
weekday_sql = """ CASE
|
||
|
WHEN strftime("%w",timestamp) = 0 THEN 'Sunday'
|
||
|
WHEN strftime("%w",timestamp) = 1 THEN 'Monday'
|
||
|
WHEN strftime("%w",timestamp) = 2 THEN 'Tuesday'
|
||
|
WHEN strftime("%w",timestamp) = 3 THEN 'Wednesday'
|
||
|
WHEN strftime("%w",timestamp) = 4 THEN 'Thursday'
|
||
|
WHEN strftime("%w",timestamp) = 5 THEN 'Friday'
|
||
|
WHEN strftime("%w",timestamp) = 6 THEN 'Saturday'
|
||
|
END """
|
||
|
|
||
|
cursor.execute(f"SELECT count(0) as total, {weekday_sql} as weekday, strftime('%w',timestamp) as hour FROM kevent WHERE event = 'PRESSED' GROUP BY hour ORDEr BY hour")
|
||
|
rows_presses = cursor.fetchall()
|
||
|
|
||
|
cursor.execute(f"SELECT count(0) as total, {weekday_sql} as weekday, strftime('%w',timestamp) as hour FROM kevent WHERE event = 'REPEATED' GROUP BY hour ORDEr BY hour")
|
||
|
rows_repeated = cursor.fetchall()
|
||
|
|
||
|
|
||
|
cursor.execute(f"SELECT count(0) as total, {weekday_sql} as weekday, strftime('%w',timestamp) as hour FROM kevent WHERE event = 'RELEASED' GROUP BY hour ORDEr BY hour")
|
||
|
rows_released = cursor.fetchall()
|
||
|
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
totals = [row[0] for row in rows_presses]
|
||
|
hours = [row[2] for row in rows_presses]
|
||
|
|
||
|
totals_repeated = [row[0] for row in rows_repeated]
|
||
|
hours_repeated = [row[2] for row in rows_repeated]
|
||
|
|
||
|
totals_released = [row[0] for row in rows_released]
|
||
|
hours_released = [row[2] for row in rows_released]
|
||
|
|
||
|
plt.figure(figsize=(8, 6))
|
||
|
|
||
|
plt.plot(hours_repeated, totals_repeated, marker='o', label='Repeats per weekday', color='green')
|
||
|
plt.plot(hours_released, totals_released, marker='o', label='Releases per weekday', color='orange')
|
||
|
|
||
|
plt.plot(hours, totals, marker='o', label='Presses per weekday', color='red')
|
||
|
plt.xlabel('Day of week (0 = Sunday, 6 = Saturday)')
|
||
|
plt.ylabel('Event count')
|
||
|
plt.title('Keyboard events')
|
||
|
plt.legend()
|
||
|
|
||
|
plt.grid(True)
|
||
|
plt.show()
|
||
|
|
||
|
render_per_hour()
|
||
|
render_per_weekday()
|