Added plot.
This commit is contained in:
parent
f86b2420bc
commit
b75ce9ef4c
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,5 +1,7 @@
|
|||||||
*.db*
|
*.db*
|
||||||
|
|
||||||
|
.venv
|
||||||
|
|
||||||
# ---> C++
|
# ---> C++
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
*.d
|
*.d
|
||||||
|
9
Makefile
9
Makefile
@ -5,3 +5,12 @@ tikker: tikker.c sormc.h
|
|||||||
|
|
||||||
run:
|
run:
|
||||||
./tikker
|
./tikker
|
||||||
|
|
||||||
|
PYTHON="./.venv/bin/python"
|
||||||
|
|
||||||
|
ensure_env:
|
||||||
|
-@python3 -m venv .venv
|
||||||
|
|
||||||
|
plot: ensure_env
|
||||||
|
$(PYTHON) plot.py
|
||||||
|
|
||||||
|
92
plot.py
Normal file
92
plot.py
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
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()
|
Loading…
Reference in New Issue
Block a user