diff --git a/Untitled.ipynb b/Untitled.ipynb
deleted file mode 100644
index d07fb3b..0000000
--- a/Untitled.ipynb
+++ /dev/null
@@ -1,1051 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "c0ccf4cd",
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "9bc76e03",
- "metadata": {},
- "outputs": [],
- "source": [
- "df = pd.read_csv('diet.csv')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "id": "a6f9c607",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "KauraTyynyt 8\n",
- "Cheese 7\n",
- "Ketchup 7\n",
- "Milk 6\n",
- "Orange 6\n",
- "Sugar 6\n",
- "Egg 6\n",
- "RainbowNoodles 5\n",
- "Margarine 5\n",
- "CherryTomatoes 5\n",
- "Name: name, dtype: int64"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "df['name'].value_counts().head(10)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "id": "e9a1667f",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " timestamp | \n",
- " grams | \n",
- " calories | \n",
- " carbs | \n",
- " fat | \n",
- " protein | \n",
- " saturated_fat | \n",
- " sugar | \n",
- " fiber | \n",
- "
\n",
- " \n",
- " | name | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- " | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | Omlette | \n",
- " 1.620148e+09 | \n",
- " 382.000000 | \n",
- " 680.800000 | \n",
- " 22.890000 | \n",
- " 46.780000 | \n",
- " 35.340000 | \n",
- " 6.8200 | \n",
- " 2.520000 | \n",
- " 1.650000 | \n",
- "
\n",
- " \n",
- " | OmletteWithoutMilk | \n",
- " 1.620737e+09 | \n",
- " 330.000000 | \n",
- " 665.300000 | \n",
- " 19.890000 | \n",
- " 46.630000 | \n",
- " 34.840000 | \n",
- " 6.8200 | \n",
- " 0.420000 | \n",
- " 0.600000 | \n",
- "
\n",
- " \n",
- " | LeipaJuusto | \n",
- " 1.621168e+09 | \n",
- " 188.000000 | \n",
- " 518.880000 | \n",
- " 6.580000 | \n",
- " 41.360000 | \n",
- " 30.080000 | \n",
- " 26.3200 | \n",
- " 5.260000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Egg | \n",
- " 1.620818e+09 | \n",
- " 172.166667 | \n",
- " 266.858333 | \n",
- " 1.930000 | \n",
- " 18.250000 | \n",
- " 21.693333 | \n",
- " 0.0000 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | ProteinSpaghettiBolognese | \n",
- " 1.620805e+09 | \n",
- " 518.000000 | \n",
- " 649.075000 | \n",
- " 118.760000 | \n",
- " 6.950000 | \n",
- " 21.000000 | \n",
- " 1.2650 | \n",
- " 14.845000 | \n",
- " 11.845000 | \n",
- "
\n",
- " \n",
- " | ProteinRahka | \n",
- " 1.620931e+09 | \n",
- " 175.000000 | \n",
- " 117.250000 | \n",
- " 10.500000 | \n",
- " 0.350000 | \n",
- " 17.500000 | \n",
- " 0.1800 | \n",
- " 10.330000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | MilkSoup | \n",
- " 1.620793e+09 | \n",
- " 330.000000 | \n",
- " 495.380000 | \n",
- " 61.360000 | \n",
- " 16.930000 | \n",
- " 15.430000 | \n",
- " 5.1800 | \n",
- " 4.710000 | \n",
- " 3.510000 | \n",
- "
\n",
- " \n",
- " | FakeChickenVeggies | \n",
- " 1.620210e+09 | \n",
- " 163.000000 | \n",
- " 277.720000 | \n",
- " 17.490000 | \n",
- " 16.100000 | \n",
- " 13.890000 | \n",
- " 1.4200 | \n",
- " 2.950000 | \n",
- " 3.920000 | \n",
- "
\n",
- " \n",
- " | CreamPotatoes | \n",
- " 1.620579e+09 | \n",
- " 430.000000 | \n",
- " 538.550000 | \n",
- " 43.720000 | \n",
- " 31.170000 | \n",
- " 13.850000 | \n",
- " 14.3300 | \n",
- " 3.300000 | \n",
- " 2.380000 | \n",
- "
\n",
- " \n",
- " | Pancake | \n",
- " 1.620461e+09 | \n",
- " 210.000000 | \n",
- " 403.500000 | \n",
- " 44.220000 | \n",
- " 16.290000 | \n",
- " 13.300000 | \n",
- " 3.5300 | \n",
- " 3.320000 | \n",
- " 1.400000 | \n",
- "
\n",
- " \n",
- " | Cheese | \n",
- " 1.620517e+09 | \n",
- " 42.714286 | \n",
- " 140.530000 | \n",
- " 0.000000 | \n",
- " 10.251429 | \n",
- " 11.532857 | \n",
- " 5.9800 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Blov | \n",
- " 1.620528e+09 | \n",
- " 300.000000 | \n",
- " 404.540000 | \n",
- " 68.980000 | \n",
- " 7.270000 | \n",
- " 11.370000 | \n",
- " 0.8500 | \n",
- " 8.760000 | \n",
- " 7.870000 | \n",
- "
\n",
- " \n",
- " | RainbowNoodles | \n",
- " 1.620367e+09 | \n",
- " 85.000000 | \n",
- " 383.350000 | \n",
- " 53.550000 | \n",
- " 15.300000 | \n",
- " 9.350000 | \n",
- " 7.3100 | \n",
- " 1.440000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Muesli | \n",
- " 1.620594e+09 | \n",
- " 108.750000 | \n",
- " 425.212500 | \n",
- " 67.320000 | \n",
- " 11.857500 | \n",
- " 9.135000 | \n",
- " 4.2375 | \n",
- " 29.040000 | \n",
- " 6.525000 | \n",
- "
\n",
- " \n",
- " | FakeChicken | \n",
- " 1.620647e+09 | \n",
- " 65.000000 | \n",
- " 92.300000 | \n",
- " 7.350000 | \n",
- " 3.250000 | \n",
- " 8.540000 | \n",
- " 0.3300 | \n",
- " 1.020000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | OatmealPorridge | \n",
- " 1.620911e+09 | \n",
- " 280.000000 | \n",
- " 258.880000 | \n",
- " 34.100000 | \n",
- " 8.420000 | \n",
- " 8.400000 | \n",
- " 1.9000 | \n",
- " 2.360000 | \n",
- " 6.600000 | \n",
- "
\n",
- " \n",
- " | FriedFalafel | \n",
- " 1.621105e+09 | \n",
- " 80.000000 | \n",
- " 209.190000 | \n",
- " 14.810000 | \n",
- " 11.460000 | \n",
- " 7.960000 | \n",
- " 0.9100 | \n",
- " 3.050000 | \n",
- " 7.370000 | \n",
- "
\n",
- " \n",
- " | KauraTyynyt | \n",
- " 1.620907e+09 | \n",
- " 65.000000 | \n",
- " 165.100000 | \n",
- " 25.350000 | \n",
- " 2.665000 | \n",
- " 7.800000 | \n",
- " 0.3250 | \n",
- " 0.520000 | \n",
- " 4.290000 | \n",
- "
\n",
- " \n",
- " | TaffelJuustoSnaks | \n",
- " 1.620405e+09 | \n",
- " 70.000000 | \n",
- " 385.000000 | \n",
- " 35.700000 | \n",
- " 23.100000 | \n",
- " 7.000000 | \n",
- " 4.3400 | \n",
- " 2.520000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Oatmeal | \n",
- " 1.620120e+09 | \n",
- " 50.000000 | \n",
- " 181.000000 | \n",
- " 27.000000 | \n",
- " 3.750000 | \n",
- " 7.000000 | \n",
- " 0.6500 | \n",
- " 0.550000 | \n",
- " 5.500000 | \n",
- "
\n",
- " \n",
- " | FriedPotatoes | \n",
- " 1.620922e+09 | \n",
- " 415.000000 | \n",
- " 399.010000 | \n",
- " 53.150000 | \n",
- " 14.940000 | \n",
- " 6.390000 | \n",
- " 1.0800 | \n",
- " 0.000000 | \n",
- " 3.200000 | \n",
- "
\n",
- " \n",
- " | Milk | \n",
- " 1.620455e+09 | \n",
- " 189.166667 | \n",
- " 121.066667 | \n",
- " 0.000000 | \n",
- " 6.621667 | \n",
- " 6.053333 | \n",
- " 4.3500 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | WhiteBeansTomatoSauce | \n",
- " 1.620481e+09 | \n",
- " 140.000000 | \n",
- " 147.000000 | \n",
- " 25.200000 | \n",
- " 0.000000 | \n",
- " 5.600000 | \n",
- " 0.0000 | \n",
- " 2.800000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | MashedPotato | \n",
- " 1.620210e+09 | \n",
- " 300.000000 | \n",
- " 241.660000 | \n",
- " 30.690000 | \n",
- " 8.380000 | \n",
- " 5.020000 | \n",
- " 2.8000 | \n",
- " 0.000000 | \n",
- " 1.850000 | \n",
- "
\n",
- " \n",
- " | RoastedVeggies | \n",
- " 1.620390e+09 | \n",
- " 325.000000 | \n",
- " 367.355000 | \n",
- " 47.370000 | \n",
- " 16.055000 | \n",
- " 4.930000 | \n",
- " 1.1900 | \n",
- " 4.015000 | \n",
- " 4.565000 | \n",
- "
\n",
- " \n",
- " | BakedPotatoes | \n",
- " 1.621105e+09 | \n",
- " 310.000000 | \n",
- " 274.480000 | \n",
- " 40.120000 | \n",
- " 8.310000 | \n",
- " 4.830000 | \n",
- " 0.5900 | \n",
- " 0.000000 | \n",
- " 2.410000 | \n",
- "
\n",
- " \n",
- " | WhiteBread | \n",
- " 1.620238e+09 | \n",
- " 50.000000 | \n",
- " 126.500000 | \n",
- " 22.500000 | \n",
- " 1.250000 | \n",
- " 4.700000 | \n",
- " 0.1500 | \n",
- " 0.550000 | \n",
- " 3.050000 | \n",
- "
\n",
- " \n",
- " | GelatiPremium | \n",
- " 1.621058e+09 | \n",
- " 84.000000 | \n",
- " 284.760000 | \n",
- " 25.790000 | \n",
- " 17.890000 | \n",
- " 4.540000 | \n",
- " 11.0000 | \n",
- " 23.940000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | SobaChili | \n",
- " 1.620383e+09 | \n",
- " 92.000000 | \n",
- " 200.560000 | \n",
- " 25.210000 | \n",
- " 8.560000 | \n",
- " 4.510000 | \n",
- " 4.0500 | \n",
- " 5.520000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | DarkBread | \n",
- " 1.620278e+09 | \n",
- " 50.000000 | \n",
- " 121.000000 | \n",
- " 21.800000 | \n",
- " 0.650000 | \n",
- " 4.100000 | \n",
- " 0.1000 | \n",
- " 0.700000 | \n",
- " 5.850000 | \n",
- "
\n",
- " \n",
- " | Watermelon | \n",
- " 1.621006e+09 | \n",
- " 610.000000 | \n",
- " 183.000000 | \n",
- " 48.800000 | \n",
- " 0.000000 | \n",
- " 3.660000 | \n",
- " 0.0000 | \n",
- " 36.600000 | \n",
- " 2.440000 | \n",
- "
\n",
- " \n",
- " | KeishaCandy | \n",
- " 1.620747e+09 | \n",
- " 37.000000 | \n",
- " 204.610000 | \n",
- " 17.390000 | \n",
- " 12.950000 | \n",
- " 3.000000 | \n",
- " 6.6600 | \n",
- " 16.650000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | VanilliIceCream | \n",
- " 1.620579e+09 | \n",
- " 90.000000 | \n",
- " 144.000000 | \n",
- " 20.250000 | \n",
- " 5.670000 | \n",
- " 2.880000 | \n",
- " 3.6900 | \n",
- " 17.910000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | SeedAndOilSalad | \n",
- " 1.621105e+09 | \n",
- " 150.000000 | \n",
- " 113.540000 | \n",
- " 4.270000 | \n",
- " 9.520000 | \n",
- " 2.850000 | \n",
- " 0.7400 | \n",
- " 2.450000 | \n",
- " 0.770000 | \n",
- "
\n",
- " \n",
- " | Hummus | \n",
- " 1.621083e+09 | \n",
- " 41.500000 | \n",
- " 115.370000 | \n",
- " 3.200000 | \n",
- " 9.875000 | \n",
- " 2.820000 | \n",
- " 1.1250 | \n",
- " 0.085000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | VahvlitortTallinn | \n",
- " 1.620359e+09 | \n",
- " 45.000000 | \n",
- " 227.250000 | \n",
- " 18.000000 | \n",
- " 22.950000 | \n",
- " 2.700000 | \n",
- " 0.0000 | \n",
- " 11.250000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | BiscuitRings | \n",
- " 1.620421e+09 | \n",
- " 50.000000 | \n",
- " 270.500000 | \n",
- " 30.900000 | \n",
- " 15.050000 | \n",
- " 2.300000 | \n",
- " 7.4000 | \n",
- " 11.550000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Pringles | \n",
- " 1.621015e+09 | \n",
- " 50.000000 | \n",
- " 268.000000 | \n",
- " 28.000000 | \n",
- " 16.000000 | \n",
- " 2.300000 | \n",
- " 1.5000 | \n",
- " 1.200000 | \n",
- " 1.450000 | \n",
- "
\n",
- " \n",
- " | MousseCherry | \n",
- " 1.620612e+09 | \n",
- " 31.500000 | \n",
- " 168.525000 | \n",
- " 13.040000 | \n",
- " 11.465000 | \n",
- " 2.045000 | \n",
- " 6.6800 | \n",
- " 9.890000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Pomegranate | \n",
- " 1.621135e+09 | \n",
- " 100.000000 | \n",
- " 83.000000 | \n",
- " 19.000000 | \n",
- " 0.000000 | \n",
- " 1.700000 | \n",
- " 0.0000 | \n",
- " 14.000000 | \n",
- " 4.000000 | \n",
- "
\n",
- " \n",
- " | SourCream | \n",
- " 1.620409e+09 | \n",
- " 60.000000 | \n",
- " 83.400000 | \n",
- " 2.400000 | \n",
- " 7.200000 | \n",
- " 1.680000 | \n",
- " 4.0200 | \n",
- " 2.400000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Banana | \n",
- " 1.620646e+09 | \n",
- " 136.750000 | \n",
- " 121.707500 | \n",
- " 31.232500 | \n",
- " 0.450000 | \n",
- " 1.492500 | \n",
- " 0.0000 | \n",
- " 16.722500 | \n",
- " 3.555000 | \n",
- "
\n",
- " \n",
- " | BoiledWokMix | \n",
- " 1.620922e+09 | \n",
- " 90.000000 | \n",
- " 74.330000 | \n",
- " 4.660000 | \n",
- " 4.870000 | \n",
- " 1.440000 | \n",
- " 0.3700 | \n",
- " 3.300000 | \n",
- " 2.290000 | \n",
- "
\n",
- " \n",
- " | GelatelliVeganIceCream | \n",
- " 1.620411e+09 | \n",
- " 62.000000 | \n",
- " 212.040000 | \n",
- " 21.270000 | \n",
- " 13.210000 | \n",
- " 1.430000 | \n",
- " 9.9200 | \n",
- " 15.000000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | BerryMustikaVaarika | \n",
- " 1.620579e+09 | \n",
- " 100.000000 | \n",
- " 85.000000 | \n",
- " 13.000000 | \n",
- " 0.000000 | \n",
- " 0.950000 | \n",
- " 0.0000 | \n",
- " 7.200000 | \n",
- " 4.700000 | \n",
- "
\n",
- " \n",
- " | Salad | \n",
- " 1.620148e+09 | \n",
- " 60.000000 | \n",
- " 6.000000 | \n",
- " 0.600000 | \n",
- " 0.120000 | \n",
- " 0.660000 | \n",
- " 0.0000 | \n",
- " 0.300000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Cocoa | \n",
- " 1.620579e+09 | \n",
- " 10.000000 | \n",
- " 37.300000 | \n",
- " 7.860000 | \n",
- " 0.290000 | \n",
- " 0.480000 | \n",
- " 0.1500 | \n",
- " 7.660000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | CherryTomatoes | \n",
- " 1.620744e+09 | \n",
- " 48.800000 | \n",
- " 8.784000 | \n",
- " 1.912000 | \n",
- " 0.096000 | \n",
- " 0.430000 | \n",
- " 0.0000 | \n",
- " 1.280000 | \n",
- " 0.584000 | \n",
- "
\n",
- " \n",
- " | Ketchup | \n",
- " 1.620674e+09 | \n",
- " 33.571429 | \n",
- " 34.242857 | \n",
- " 7.788571 | \n",
- " 0.000000 | \n",
- " 0.402857 | \n",
- " 0.0000 | \n",
- " 7.654286 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | SaladDressing | \n",
- " 1.620289e+09 | \n",
- " 40.000000 | \n",
- " 103.600000 | \n",
- " 5.600000 | \n",
- " 8.920000 | \n",
- " 0.160000 | \n",
- " 0.6000 | \n",
- " 4.320000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | PureOrangeJuice | \n",
- " 1.621037e+09 | \n",
- " 134.000000 | \n",
- " 60.300000 | \n",
- " 12.595000 | \n",
- " 0.270000 | \n",
- " 0.110000 | \n",
- " 0.0000 | \n",
- " 12.595000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Sugar | \n",
- " 1.620373e+09 | \n",
- " 18.333333 | \n",
- " 73.333333 | \n",
- " 18.333333 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.0000 | \n",
- " 18.333333 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Margarine | \n",
- " 1.620566e+09 | \n",
- " 15.600000 | \n",
- " 98.280000 | \n",
- " 0.000000 | \n",
- " 10.920000 | \n",
- " 0.000000 | \n",
- " 3.1200 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | SaskiaPeach | \n",
- " 1.620760e+09 | \n",
- " 243.333333 | \n",
- " 38.933333 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.0000 | \n",
- " 9.733333 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | PickleSlices | \n",
- " 1.620888e+09 | \n",
- " 33.750000 | \n",
- " 18.225000 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.0000 | \n",
- " 4.080000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Orange | \n",
- " 1.620933e+09 | \n",
- " 138.333333 | \n",
- " 69.166667 | \n",
- " 17.983333 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.0000 | \n",
- " 11.758333 | \n",
- " 3.043333 | \n",
- "
\n",
- " \n",
- " | Oil | \n",
- " 1.620786e+09 | \n",
- " 15.750000 | \n",
- " 130.410000 | \n",
- " 0.000000 | \n",
- " 14.490000 | \n",
- " 0.000000 | \n",
- " 1.1025 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | Honey | \n",
- " 1.620592e+09 | \n",
- " 15.000000 | \n",
- " 9.600000 | \n",
- " 2.550000 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.0000 | \n",
- " 2.550000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | MonsterEnergy | \n",
- " 1.620575e+09 | \n",
- " 500.000000 | \n",
- " 235.000000 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.0000 | \n",
- " 55.000000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- " | CocaCola | \n",
- " 1.620441e+09 | \n",
- " 330.000000 | \n",
- " 138.600000 | \n",
- " 34.980000 | \n",
- " 0.000000 | \n",
- " 0.000000 | \n",
- " 0.0000 | \n",
- " 34.980000 | \n",
- " 0.000000 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " timestamp grams calories carbs \\\n",
- "name \n",
- "Omlette 1.620148e+09 382.000000 680.800000 22.890000 \n",
- "OmletteWithoutMilk 1.620737e+09 330.000000 665.300000 19.890000 \n",
- "LeipaJuusto 1.621168e+09 188.000000 518.880000 6.580000 \n",
- "Egg 1.620818e+09 172.166667 266.858333 1.930000 \n",
- "ProteinSpaghettiBolognese 1.620805e+09 518.000000 649.075000 118.760000 \n",
- "ProteinRahka 1.620931e+09 175.000000 117.250000 10.500000 \n",
- "MilkSoup 1.620793e+09 330.000000 495.380000 61.360000 \n",
- "FakeChickenVeggies 1.620210e+09 163.000000 277.720000 17.490000 \n",
- "CreamPotatoes 1.620579e+09 430.000000 538.550000 43.720000 \n",
- "Pancake 1.620461e+09 210.000000 403.500000 44.220000 \n",
- "Cheese 1.620517e+09 42.714286 140.530000 0.000000 \n",
- "Blov 1.620528e+09 300.000000 404.540000 68.980000 \n",
- "RainbowNoodles 1.620367e+09 85.000000 383.350000 53.550000 \n",
- "Muesli 1.620594e+09 108.750000 425.212500 67.320000 \n",
- "FakeChicken 1.620647e+09 65.000000 92.300000 7.350000 \n",
- "OatmealPorridge 1.620911e+09 280.000000 258.880000 34.100000 \n",
- "FriedFalafel 1.621105e+09 80.000000 209.190000 14.810000 \n",
- "KauraTyynyt 1.620907e+09 65.000000 165.100000 25.350000 \n",
- "TaffelJuustoSnaks 1.620405e+09 70.000000 385.000000 35.700000 \n",
- "Oatmeal 1.620120e+09 50.000000 181.000000 27.000000 \n",
- "FriedPotatoes 1.620922e+09 415.000000 399.010000 53.150000 \n",
- "Milk 1.620455e+09 189.166667 121.066667 0.000000 \n",
- "WhiteBeansTomatoSauce 1.620481e+09 140.000000 147.000000 25.200000 \n",
- "MashedPotato 1.620210e+09 300.000000 241.660000 30.690000 \n",
- "RoastedVeggies 1.620390e+09 325.000000 367.355000 47.370000 \n",
- "BakedPotatoes 1.621105e+09 310.000000 274.480000 40.120000 \n",
- "WhiteBread 1.620238e+09 50.000000 126.500000 22.500000 \n",
- "GelatiPremium 1.621058e+09 84.000000 284.760000 25.790000 \n",
- "SobaChili 1.620383e+09 92.000000 200.560000 25.210000 \n",
- "DarkBread 1.620278e+09 50.000000 121.000000 21.800000 \n",
- "Watermelon 1.621006e+09 610.000000 183.000000 48.800000 \n",
- "KeishaCandy 1.620747e+09 37.000000 204.610000 17.390000 \n",
- "VanilliIceCream 1.620579e+09 90.000000 144.000000 20.250000 \n",
- "SeedAndOilSalad 1.621105e+09 150.000000 113.540000 4.270000 \n",
- "Hummus 1.621083e+09 41.500000 115.370000 3.200000 \n",
- "VahvlitortTallinn 1.620359e+09 45.000000 227.250000 18.000000 \n",
- "BiscuitRings 1.620421e+09 50.000000 270.500000 30.900000 \n",
- "Pringles 1.621015e+09 50.000000 268.000000 28.000000 \n",
- "MousseCherry 1.620612e+09 31.500000 168.525000 13.040000 \n",
- "Pomegranate 1.621135e+09 100.000000 83.000000 19.000000 \n",
- "SourCream 1.620409e+09 60.000000 83.400000 2.400000 \n",
- "Banana 1.620646e+09 136.750000 121.707500 31.232500 \n",
- "BoiledWokMix 1.620922e+09 90.000000 74.330000 4.660000 \n",
- "GelatelliVeganIceCream 1.620411e+09 62.000000 212.040000 21.270000 \n",
- "BerryMustikaVaarika 1.620579e+09 100.000000 85.000000 13.000000 \n",
- "Salad 1.620148e+09 60.000000 6.000000 0.600000 \n",
- "Cocoa 1.620579e+09 10.000000 37.300000 7.860000 \n",
- "CherryTomatoes 1.620744e+09 48.800000 8.784000 1.912000 \n",
- "Ketchup 1.620674e+09 33.571429 34.242857 7.788571 \n",
- "SaladDressing 1.620289e+09 40.000000 103.600000 5.600000 \n",
- "PureOrangeJuice 1.621037e+09 134.000000 60.300000 12.595000 \n",
- "Sugar 1.620373e+09 18.333333 73.333333 18.333333 \n",
- "Margarine 1.620566e+09 15.600000 98.280000 0.000000 \n",
- "SaskiaPeach 1.620760e+09 243.333333 38.933333 0.000000 \n",
- "PickleSlices 1.620888e+09 33.750000 18.225000 0.000000 \n",
- "Orange 1.620933e+09 138.333333 69.166667 17.983333 \n",
- "Oil 1.620786e+09 15.750000 130.410000 0.000000 \n",
- "Honey 1.620592e+09 15.000000 9.600000 2.550000 \n",
- "MonsterEnergy 1.620575e+09 500.000000 235.000000 0.000000 \n",
- "CocaCola 1.620441e+09 330.000000 138.600000 34.980000 \n",
- "\n",
- " fat protein saturated_fat sugar \\\n",
- "name \n",
- "Omlette 46.780000 35.340000 6.8200 2.520000 \n",
- "OmletteWithoutMilk 46.630000 34.840000 6.8200 0.420000 \n",
- "LeipaJuusto 41.360000 30.080000 26.3200 5.260000 \n",
- "Egg 18.250000 21.693333 0.0000 0.000000 \n",
- "ProteinSpaghettiBolognese 6.950000 21.000000 1.2650 14.845000 \n",
- "ProteinRahka 0.350000 17.500000 0.1800 10.330000 \n",
- "MilkSoup 16.930000 15.430000 5.1800 4.710000 \n",
- "FakeChickenVeggies 16.100000 13.890000 1.4200 2.950000 \n",
- "CreamPotatoes 31.170000 13.850000 14.3300 3.300000 \n",
- "Pancake 16.290000 13.300000 3.5300 3.320000 \n",
- "Cheese 10.251429 11.532857 5.9800 0.000000 \n",
- "Blov 7.270000 11.370000 0.8500 8.760000 \n",
- "RainbowNoodles 15.300000 9.350000 7.3100 1.440000 \n",
- "Muesli 11.857500 9.135000 4.2375 29.040000 \n",
- "FakeChicken 3.250000 8.540000 0.3300 1.020000 \n",
- "OatmealPorridge 8.420000 8.400000 1.9000 2.360000 \n",
- "FriedFalafel 11.460000 7.960000 0.9100 3.050000 \n",
- "KauraTyynyt 2.665000 7.800000 0.3250 0.520000 \n",
- "TaffelJuustoSnaks 23.100000 7.000000 4.3400 2.520000 \n",
- "Oatmeal 3.750000 7.000000 0.6500 0.550000 \n",
- "FriedPotatoes 14.940000 6.390000 1.0800 0.000000 \n",
- "Milk 6.621667 6.053333 4.3500 0.000000 \n",
- "WhiteBeansTomatoSauce 0.000000 5.600000 0.0000 2.800000 \n",
- "MashedPotato 8.380000 5.020000 2.8000 0.000000 \n",
- "RoastedVeggies 16.055000 4.930000 1.1900 4.015000 \n",
- "BakedPotatoes 8.310000 4.830000 0.5900 0.000000 \n",
- "WhiteBread 1.250000 4.700000 0.1500 0.550000 \n",
- "GelatiPremium 17.890000 4.540000 11.0000 23.940000 \n",
- "SobaChili 8.560000 4.510000 4.0500 5.520000 \n",
- "DarkBread 0.650000 4.100000 0.1000 0.700000 \n",
- "Watermelon 0.000000 3.660000 0.0000 36.600000 \n",
- "KeishaCandy 12.950000 3.000000 6.6600 16.650000 \n",
- "VanilliIceCream 5.670000 2.880000 3.6900 17.910000 \n",
- "SeedAndOilSalad 9.520000 2.850000 0.7400 2.450000 \n",
- "Hummus 9.875000 2.820000 1.1250 0.085000 \n",
- "VahvlitortTallinn 22.950000 2.700000 0.0000 11.250000 \n",
- "BiscuitRings 15.050000 2.300000 7.4000 11.550000 \n",
- "Pringles 16.000000 2.300000 1.5000 1.200000 \n",
- "MousseCherry 11.465000 2.045000 6.6800 9.890000 \n",
- "Pomegranate 0.000000 1.700000 0.0000 14.000000 \n",
- "SourCream 7.200000 1.680000 4.0200 2.400000 \n",
- "Banana 0.450000 1.492500 0.0000 16.722500 \n",
- "BoiledWokMix 4.870000 1.440000 0.3700 3.300000 \n",
- "GelatelliVeganIceCream 13.210000 1.430000 9.9200 15.000000 \n",
- "BerryMustikaVaarika 0.000000 0.950000 0.0000 7.200000 \n",
- "Salad 0.120000 0.660000 0.0000 0.300000 \n",
- "Cocoa 0.290000 0.480000 0.1500 7.660000 \n",
- "CherryTomatoes 0.096000 0.430000 0.0000 1.280000 \n",
- "Ketchup 0.000000 0.402857 0.0000 7.654286 \n",
- "SaladDressing 8.920000 0.160000 0.6000 4.320000 \n",
- "PureOrangeJuice 0.270000 0.110000 0.0000 12.595000 \n",
- "Sugar 0.000000 0.000000 0.0000 18.333333 \n",
- "Margarine 10.920000 0.000000 3.1200 0.000000 \n",
- "SaskiaPeach 0.000000 0.000000 0.0000 9.733333 \n",
- "PickleSlices 0.000000 0.000000 0.0000 4.080000 \n",
- "Orange 0.000000 0.000000 0.0000 11.758333 \n",
- "Oil 14.490000 0.000000 1.1025 0.000000 \n",
- "Honey 0.000000 0.000000 0.0000 2.550000 \n",
- "MonsterEnergy 0.000000 0.000000 0.0000 55.000000 \n",
- "CocaCola 0.000000 0.000000 0.0000 34.980000 \n",
- "\n",
- " fiber \n",
- "name \n",
- "Omlette 1.650000 \n",
- "OmletteWithoutMilk 0.600000 \n",
- "LeipaJuusto 0.000000 \n",
- "Egg 0.000000 \n",
- "ProteinSpaghettiBolognese 11.845000 \n",
- "ProteinRahka 0.000000 \n",
- "MilkSoup 3.510000 \n",
- "FakeChickenVeggies 3.920000 \n",
- "CreamPotatoes 2.380000 \n",
- "Pancake 1.400000 \n",
- "Cheese 0.000000 \n",
- "Blov 7.870000 \n",
- "RainbowNoodles 0.000000 \n",
- "Muesli 6.525000 \n",
- "FakeChicken 0.000000 \n",
- "OatmealPorridge 6.600000 \n",
- "FriedFalafel 7.370000 \n",
- "KauraTyynyt 4.290000 \n",
- "TaffelJuustoSnaks 0.000000 \n",
- "Oatmeal 5.500000 \n",
- "FriedPotatoes 3.200000 \n",
- "Milk 0.000000 \n",
- "WhiteBeansTomatoSauce 0.000000 \n",
- "MashedPotato 1.850000 \n",
- "RoastedVeggies 4.565000 \n",
- "BakedPotatoes 2.410000 \n",
- "WhiteBread 3.050000 \n",
- "GelatiPremium 0.000000 \n",
- "SobaChili 0.000000 \n",
- "DarkBread 5.850000 \n",
- "Watermelon 2.440000 \n",
- "KeishaCandy 0.000000 \n",
- "VanilliIceCream 0.000000 \n",
- "SeedAndOilSalad 0.770000 \n",
- "Hummus 0.000000 \n",
- "VahvlitortTallinn 0.000000 \n",
- "BiscuitRings 0.000000 \n",
- "Pringles 1.450000 \n",
- "MousseCherry 0.000000 \n",
- "Pomegranate 4.000000 \n",
- "SourCream 0.000000 \n",
- "Banana 3.555000 \n",
- "BoiledWokMix 2.290000 \n",
- "GelatelliVeganIceCream 0.000000 \n",
- "BerryMustikaVaarika 4.700000 \n",
- "Salad 0.000000 \n",
- "Cocoa 0.000000 \n",
- "CherryTomatoes 0.584000 \n",
- "Ketchup 0.000000 \n",
- "SaladDressing 0.000000 \n",
- "PureOrangeJuice 0.000000 \n",
- "Sugar 0.000000 \n",
- "Margarine 0.000000 \n",
- "SaskiaPeach 0.000000 \n",
- "PickleSlices 0.000000 \n",
- "Orange 3.043333 \n",
- "Oil 0.000000 \n",
- "Honey 0.000000 \n",
- "MonsterEnergy 0.000000 \n",
- "CocaCola 0.000000 "
- ]
- },
- "execution_count": 27,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "df.groupby('name').mean().sort_values('protein', ascending=False)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.4"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/analyze.py b/analyze.py
index dca9fc5..e9e8a04 100644
--- a/analyze.py
+++ b/analyze.py
@@ -1,46 +1,22 @@
-from pathlib import Path
-from datetime import datetime
from collections import Counter
-from functools import reduce
-import re
+from common import parse_foods_file, evaluate_food_entry
import string
-
import sys
+import json
-from common import parse_foods_file
+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'))
- if name in recipes:
- food = recipes[name]
-
- if value == 0.0:
- value = food['TOTAL']
-
- food = {k: v*(value/food['TOTAL']) for k,v in food.items()}
- elif name in foods:
- if value == 0.0:
- value = 100
-
- food = {k: v*(value/100.0) for k,v in foods[name].items()}
- else:
- breakpoint()
- print(f'ERROR: Invalid diet entry: {content}')
-
from pprint import pprint
- pprint(food)
+ pprint(evaluate_food_entry(foods, recipes, value, name))
exit(0)
-
-entry_re = re.compile(r'^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) ', re.MULTILINE)
-diet_re = re.compile(r'@diet (\d+g) ([a-zA-Z]+)')
-
total_entries = 0
total_words = 0
word_frequency = Counter()
@@ -56,14 +32,8 @@ diet_csv = [[
'saturated_fat', 'sugar', 'fiber'
]]
-output = open('diet', 'w')
-
-for fpath in sorted((Path.home() / 'workspace' / 'journal').glob('*.md')):
- day = fpath.stem
- header, *tmp = entry_re.split(fpath.read_text())
- entries = list(zip(tmp[::2], tmp[1::2]))
-
- daily_entries = len(entries)
+for day, obj in journal.items():
+ daily_entries = len(obj['entries'])
daily_words = 0
daily_calories = 0.0
daily_protein = 0.0
@@ -71,73 +41,43 @@ for fpath in sorted((Path.home() / 'workspace' / 'journal').glob('*.md')):
daily_fat = 0.0
daily_sugar = 0.0
- output.write(f'-- {day}\n')
+ 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()
- for (timestamp, content) in sorted(entries, key=lambda x: x[0]):
- ts_str = timestamp
- timestamp = int(datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S').timestamp())
+ word_frequency.update(words)
- content = '\n'.join(
- part.replace('\n', ' ')
- for part in content.split('\n\n')
- )
+ 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)
- for diet in diet_re.finditer(content):
- value, name = diet.groups()
- output.write(f'{ts_str} {name} {value}\n')
+ 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),
+ ))
- value = float(value.removesuffix('g'))
+ 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)
-
- if name in recipes:
- food = recipes[name]
-
- if value == 0.0:
- value = food['TOTAL']
-
- food = {k: v*(value/food['TOTAL']) for k,v in food.items()}
- elif name in foods:
- if value == 0.0:
- value = 100
-
- food = {k: v*(value/100.0) for k,v in foods[name].items()}
- else:
- breakpoint()
- print(f'ERROR: Invalid diet entry: {content}')
- continue
-
-
-
- diet_csv.append((
- 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)
-
- words = ''.join(
- c if c in string.ascii_letters+"'" else ' '
- for c in content.lower()
- ).split()
-
- word_frequency.update(words)
-
- entry_words = len(words)
- daily_words += entry_words
-
- entry_csv.append([timestamp, entry_words])
+ entry_csv.append([entry['timestamp'], entry_words])
daily_macros = daily_protein + daily_fat + daily_carbs
@@ -164,8 +104,8 @@ 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('total.csv', total_csv)
-write_csv('daily.csv', daily_csv)
-write_csv('entry.csv', entry_csv)
-write_csv('words.csv', words_csv)
-write_csv('diet.csv', diet_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)
diff --git a/common.py b/common.py
index bbb51cf..219b179 100644
--- a/common.py
+++ b/common.py
@@ -4,6 +4,9 @@ from datetime import datetime
def parse_timestamp(timestamp):
return datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S')
+def format_timestamp(timestamp):
+ return datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
+
def parse_foods_file():
path = Path.home() / 'projects' / 'open-journal' / 'foods'
text = path.read_text()
@@ -79,4 +82,22 @@ def parse_foods_file():
return foods, recipes
+def evaluate_food_entry(foods, recipes, value, name):
+ if name in recipes:
+ food = recipes[name]
+ if value == 0.0:
+ value = food['TOTAL']
+
+ food = {k: v*(value/food['TOTAL']) for k,v in food.items()}
+ elif name in foods:
+ if value == 0.0:
+ value = 100
+
+ food = {k: v*(value/100.0) for k,v in foods[name].items()}
+ else:
+ breakpoint()
+ print(f'ERROR: Invalid diet entry: {content}')
+
+ return food
+
diff --git a/foods b/foods
index 04953fe..a43e5c0 100644
--- a/foods
+++ b/foods
@@ -1,4 +1,13 @@
+KauraPasta
+Energy 359kcal
+Fat 3.5g
+SaturatedFat 0.7g
+Carbs 65g
+Sugar 2.9g
+Fiber 6g
+Protein 13g
+
Kaurakeksi
Energy 461kcal
Fat 20g
@@ -892,3 +901,8 @@ SkimMilk 100g
Margarine 20g
TOTAL 788
+KauraPastaVeggies
+Oil 40g
+KauraPasta 500g
+PeasCornPepper 450g
+TOTAL 1720g
diff --git a/search.py b/search.py
index 8537e68..0eb06d8 100644
--- a/search.py
+++ b/search.py
@@ -1,24 +1,20 @@
-from pathlib import Path
from subprocess import run
-import re
import sys
+import json
-entry_re = re.compile(r'^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})', re.MULTILINE)
+from common import format_timestamp
+
+journal = json.load(open('journal.json'))
matches = []
+keyword = sys.argv[1].lower()
-for fpath in sorted((Path.home() / 'workspace' / 'journal').glob('*.md')):
- header, *tmp = entry_re.split(fpath.read_text())
- entries = list(zip(tmp[::2], tmp[1::2]))
-
- for (timestamp, content) in sorted(entries, key=lambda x: x[0]):
- content = '\n'.join(
- part.replace('\n', ' ')
- for part in content.split('\n\n')
- )
-
- if sys.argv[1].lower() in content.lower().split():
- matches.append((timestamp, content))
+for day, obj in journal.items():
+ for entry in obj['entries']:
+ for block in entry['blocks']:
+ if isinstance(block, str):
+ if keyword in block.lower().split():
+ matches.append((format_timestamp(entry['timestamp']), block))
buf = ''
diff --git a/summary.py b/summary.py
index 8205f51..06fac9c 100644
--- a/summary.py
+++ b/summary.py
@@ -1,49 +1,32 @@
-from pathlib import Path
from datetime import datetime
-from collections import Counter
-from functools import reduce
-import re
-import string
-
+import json
import sys
-do_yesterday = len(sys.argv) > 1
-
-from common import parse_foods_file
-
+from common import parse_foods_file, format_timestamp
foods, recipes = parse_foods_file()
-entry_re = re.compile(r'^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) ', re.MULTILINE)
-diet_re = re.compile(r'@diet (\d+g) ([a-zA-Z]+)')
-
+do_yesterday = len(sys.argv) > 1
day_index = -2 if do_yesterday else -1
-current_day = list(sorted((Path.home() / 'workspace' /
- 'journal').glob('*.md')))[day_index]
+journal = json.load(open('journal.json'))
-header, *tmp = entry_re.split(current_day.read_text())
-entries = list(zip(tmp[::2], tmp[1::2]))
+current_day = list(journal)[day_index]
daily_grams = 0.0
daily_calories = 0.0
daily_protein = 0.0
-for (timestamp, content) in sorted(entries, key=lambda x: x[0]):
- content = '\n'.join(
- part.replace('\n', ' ')
- for part in content.split('\n\n')
- )
-
+for entry in journal[current_day]['entries']:
has_printed = False
entry_calories = 0.0
entry_protein = 0.0
- for diet in diet_re.finditer(content):
+ for diet in (b for b in entry['blocks'] if type(b) != str and b['type'] == 'diet'):
if not has_printed:
- print(f'-- {timestamp}')
+ print(f'-- {format_timestamp(entry["timestamp"])}')
has_printed = True
-
- value, name = diet.groups()
- value = float(value.removesuffix('g'))
+
+ value = diet['amount']
+ name = diet['food']
if name in recipes:
food = recipes[name]
@@ -58,8 +41,7 @@ for (timestamp, content) in sorted(entries, key=lambda x: x[0]):
food = {k: v*(value/100.0) for k,v in foods[name].items()}
else:
- breakpoint()
- print(f'ERROR: Invalid diet entry: {content}')
+ print(f'ERROR: Invalid diet entry: {diet}')
continue
protein = round(food.get('Protein', 0.0), 2)