112 lines
3.4 KiB
Python
112 lines
3.4 KiB
Python
from collections import Counter
|
|
from common import parse_foods_file, evaluate_food_entry
|
|
import string
|
|
import sys
|
|
import json
|
|
|
|
journal = json.load(open('journal.json'))
|
|
|
|
foods, recipes = parse_foods_file()
|
|
|
|
if len(sys.argv) > 1:
|
|
value, name = sys.argv[1:]
|
|
value = float(value.removesuffix('g'))
|
|
|
|
from pprint import pprint
|
|
pprint(evaluate_food_entry(foods, recipes, value, name))
|
|
|
|
exit(0)
|
|
|
|
total_entries = 0
|
|
total_words = 0
|
|
word_frequency = Counter()
|
|
|
|
total_csv = [['day', 'entries', 'words']]
|
|
daily_csv = [['day', 'entries', 'words', 'calories', 'carbs', 'fat', 'protein',
|
|
'sugar']]
|
|
entry_csv = [['timestamp', 'words']]
|
|
words_csv = [['word', 'count']]
|
|
|
|
diet_csv = [[
|
|
'timestamp', 'name', 'grams', 'calories', 'carbs', 'fat', 'protein',
|
|
'saturated_fat', 'sugar', 'fiber'
|
|
]]
|
|
|
|
for day, obj in journal.items():
|
|
daily_entries = len(obj['entries'])
|
|
daily_words = 0
|
|
daily_calories = 0.0
|
|
daily_protein = 0.0
|
|
daily_carbs = 0.0
|
|
daily_fat = 0.0
|
|
daily_sugar = 0.0
|
|
|
|
for entry in obj['entries']:
|
|
for block in entry['blocks']:
|
|
if isinstance(block, str):
|
|
words = ''.join(
|
|
c if c in string.ascii_letters+"'" else ' '
|
|
for c in block.lower()
|
|
).split()
|
|
|
|
word_frequency.update(words)
|
|
|
|
entry_words = len(words)
|
|
daily_words += entry_words
|
|
elif block['type'] == 'diet':
|
|
name = block['food']
|
|
value = block['amount']
|
|
food = evaluate_food_entry(foods, recipes, value, name)
|
|
|
|
diet_csv.append((
|
|
entry['timestamp'],
|
|
name,
|
|
value,
|
|
round(food.get('Energy', 0.0), 2),
|
|
round(food.get('Carbs', 0.0), 2),
|
|
round(food.get('Fat', 0.0), 2),
|
|
round(food.get('Protein', 0.0), 2),
|
|
round(food.get('SaturatedFat', 0.0), 2),
|
|
round(food.get('Sugar', 0.0), 2),
|
|
round(food.get('Fiber', 0.0), 2),
|
|
))
|
|
|
|
daily_calories += food.get('Energy', 0.0)
|
|
daily_protein += food.get('Protein', 0.0)
|
|
daily_fat += food.get('Fat', 0.0)
|
|
daily_carbs += food.get('Carbs', 0.0)
|
|
daily_sugar += food.get('Sugar', 0.0)
|
|
|
|
entry_csv.append([entry['timestamp'], entry_words])
|
|
|
|
daily_macros = daily_protein + daily_fat + daily_carbs
|
|
|
|
daily_csv.append([
|
|
day,
|
|
daily_entries,
|
|
daily_words,
|
|
round(daily_calories, 2),
|
|
round(100 * (daily_carbs / daily_macros) if daily_carbs else 0, 2),
|
|
round(100 * (daily_fat / daily_macros) if daily_fat else 0, 2),
|
|
round(100 * (daily_protein / daily_macros) if daily_protein else 0, 2),
|
|
round(daily_protein, 2),
|
|
round(daily_sugar, 2)
|
|
])
|
|
|
|
total_entries += daily_entries
|
|
total_words += daily_words
|
|
|
|
total_csv.append([day, total_entries, total_words])
|
|
|
|
words_csv += word_frequency.most_common()
|
|
|
|
def write_csv(fname, csv):
|
|
with open(fname, 'w') as fp:
|
|
fp.write('\n'.join(','.join(str(x) for x in row) for row in csv))
|
|
|
|
write_csv('data/total.csv', total_csv)
|
|
write_csv('data/daily.csv', daily_csv)
|
|
write_csv('data/entry.csv', entry_csv)
|
|
write_csv('data/words.csv', words_csv)
|
|
write_csv('data/diet.csv', diet_csv)
|