48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
import json
|
|
import sqlite3
|
|
from collections import Counter
|
|
from datetime import date
|
|
|
|
db = sqlite3.connect("mensa.db")
|
|
|
|
rows = db.execute("""
|
|
SELECT date, title, category, type
|
|
FROM dishes
|
|
WHERE title != ''
|
|
""").fetchall()
|
|
|
|
meals = [title for _, title, _, _ in rows]
|
|
vegan = [title for _, title, category, _ in rows if "vegan" in json.loads(category)]
|
|
nds = [title for _, title, category, _ in rows if "NDS" in json.loads(category)]
|
|
|
|
counts = Counter(meals)
|
|
vegan_counts = Counter(vegan)
|
|
nds_counts = Counter(nds)
|
|
|
|
dates = [date.fromisoformat(d) for d, _, _, _ in rows]
|
|
|
|
print(f"date range: {min(dates)} → {max(dates)}")
|
|
print(f"meals: {len(meals)}")
|
|
print(f"vegan meals: {len(vegan)}")
|
|
print(f"unique meals: {len(counts)}")
|
|
|
|
print("\ntop 5 most served:")
|
|
for meal, count in counts.most_common(5):
|
|
print(f" {count:3}x {meal}")
|
|
|
|
print("\ntop 5 vegan meals:")
|
|
for meal, count in vegan_counts.most_common(5):
|
|
print(f" {count:3}x {meal}")
|
|
|
|
print("\ntop 5 NDS menus:")
|
|
for meal, count in nds_counts.most_common(5):
|
|
print(f" {count:3}x {meal}")
|
|
|
|
print("\nmeals served only once:")
|
|
for date_, meal, _, _ in rows:
|
|
if counts[meal] == 1:
|
|
days = (date.today() - date.fromisoformat(date_)).days
|
|
print(f" {days:3} days ago {date_} {meal}")
|
|
|
|
db.close()
|