diff --git a/notebook.ipynb b/notebook.ipynb index 0deedfd..924b879 100644 --- a/notebook.ipynb +++ b/notebook.ipynb @@ -1,17 +1,27 @@ { "cells": [ { - "cell_type": "code", - "execution_count": 5, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "import pandas as pd" + "# Habits" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 69, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import calendar\n", + "import matplotlib \n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 73, "metadata": {}, "outputs": [], "source": [ @@ -22,9 +32,810 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 79, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
dateMeditateExerciseReadJournaldevlogPlantsDraw
02020-01-172201000
12020-01-160001000
22020-01-150001000
32020-01-142111000
42020-01-130122000
52020-01-120120000
62020-01-110110000
72020-01-100220000
82020-01-090200000
92020-01-081211000
102020-01-072221000
112020-01-060021000
122020-01-052001000
132020-01-040201000
142020-01-030001000
152020-01-020002000
162020-01-010000000
172019-12-310000000
182019-12-300100000
192019-12-290210000
202019-12-280020000
212019-12-270220100
222019-12-260101100
232019-12-250101100
242019-12-242201100
252019-12-231001100
262019-12-221001100
272019-12-212201200
282019-12-202212000
292019-12-190021000
...........................
7172018-01-302002000
7182018-01-290002000
7192018-01-280101000
7202018-01-270101000
7212018-01-260201000
7222018-01-251002000
7232018-01-241101000
7242018-01-232202000
7252018-01-222202000
7262018-01-210100000
7272018-01-200100000
7282018-01-190100000
7292018-01-180201000
7302018-01-172201000
7312018-01-160101000
7322018-01-150201000
7332018-01-141201000
7342018-01-131101000
7352018-01-122102000
7362018-01-112100000
7372018-01-100200000
7382018-01-090100000
7392018-01-080200000
7402018-01-070200000
7412018-01-060100000
7422018-01-050200000
7432018-01-040000000
7442018-01-030000000
7452018-01-022200000
7462018-01-010200000
\n", + "

747 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " date Meditate Exercise Read Journal devlog Plants Draw\n", + "0 2020-01-17 2 2 0 1 0 0 0\n", + "1 2020-01-16 0 0 0 1 0 0 0\n", + "2 2020-01-15 0 0 0 1 0 0 0\n", + "3 2020-01-14 2 1 1 1 0 0 0\n", + "4 2020-01-13 0 1 2 2 0 0 0\n", + "5 2020-01-12 0 1 2 0 0 0 0\n", + "6 2020-01-11 0 1 1 0 0 0 0\n", + "7 2020-01-10 0 2 2 0 0 0 0\n", + "8 2020-01-09 0 2 0 0 0 0 0\n", + "9 2020-01-08 1 2 1 1 0 0 0\n", + "10 2020-01-07 2 2 2 1 0 0 0\n", + "11 2020-01-06 0 0 2 1 0 0 0\n", + "12 2020-01-05 2 0 0 1 0 0 0\n", + "13 2020-01-04 0 2 0 1 0 0 0\n", + "14 2020-01-03 0 0 0 1 0 0 0\n", + "15 2020-01-02 0 0 0 2 0 0 0\n", + "16 2020-01-01 0 0 0 0 0 0 0\n", + "17 2019-12-31 0 0 0 0 0 0 0\n", + "18 2019-12-30 0 1 0 0 0 0 0\n", + "19 2019-12-29 0 2 1 0 0 0 0\n", + "20 2019-12-28 0 0 2 0 0 0 0\n", + "21 2019-12-27 0 2 2 0 1 0 0\n", + "22 2019-12-26 0 1 0 1 1 0 0\n", + "23 2019-12-25 0 1 0 1 1 0 0\n", + "24 2019-12-24 2 2 0 1 1 0 0\n", + "25 2019-12-23 1 0 0 1 1 0 0\n", + "26 2019-12-22 1 0 0 1 1 0 0\n", + "27 2019-12-21 2 2 0 1 2 0 0\n", + "28 2019-12-20 2 2 1 2 0 0 0\n", + "29 2019-12-19 0 0 2 1 0 0 0\n", + ".. ... ... ... ... ... ... ... ...\n", + "717 2018-01-30 2 0 0 2 0 0 0\n", + "718 2018-01-29 0 0 0 2 0 0 0\n", + "719 2018-01-28 0 1 0 1 0 0 0\n", + "720 2018-01-27 0 1 0 1 0 0 0\n", + "721 2018-01-26 0 2 0 1 0 0 0\n", + "722 2018-01-25 1 0 0 2 0 0 0\n", + "723 2018-01-24 1 1 0 1 0 0 0\n", + "724 2018-01-23 2 2 0 2 0 0 0\n", + "725 2018-01-22 2 2 0 2 0 0 0\n", + "726 2018-01-21 0 1 0 0 0 0 0\n", + "727 2018-01-20 0 1 0 0 0 0 0\n", + "728 2018-01-19 0 1 0 0 0 0 0\n", + "729 2018-01-18 0 2 0 1 0 0 0\n", + "730 2018-01-17 2 2 0 1 0 0 0\n", + "731 2018-01-16 0 1 0 1 0 0 0\n", + "732 2018-01-15 0 2 0 1 0 0 0\n", + "733 2018-01-14 1 2 0 1 0 0 0\n", + "734 2018-01-13 1 1 0 1 0 0 0\n", + "735 2018-01-12 2 1 0 2 0 0 0\n", + "736 2018-01-11 2 1 0 0 0 0 0\n", + "737 2018-01-10 0 2 0 0 0 0 0\n", + "738 2018-01-09 0 1 0 0 0 0 0\n", + "739 2018-01-08 0 2 0 0 0 0 0\n", + "740 2018-01-07 0 2 0 0 0 0 0\n", + "741 2018-01-06 0 1 0 0 0 0 0\n", + "742 2018-01-05 0 2 0 0 0 0 0\n", + "743 2018-01-04 0 0 0 0 0 0 0\n", + "744 2018-01-03 0 0 0 0 0 0 0\n", + "745 2018-01-02 2 2 0 0 0 0 0\n", + "746 2018-01-01 0 2 0 0 0 0 0\n", + "\n", + "[747 rows x 8 columns]" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#colNames = ['date', 'Godmode', 'Meditate', 'Exercise', 'Piano','Read', 'Journal', 'Gratitude', 'devlog','Plants', 'Job', 'Draw']\n", + "checks = pd.read_csv('LoopHabits/Checkmarks.csv', header=0)\n", + "checks = checks.drop(['Godmode', 'Piano', 'Gratitude', 'Job'], axis=1)\n", + "checks" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "ename": "IndentationError", + "evalue": "expected an indented block (, line 19)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m19\u001b[0m\n\u001b[0;31m diffStreak = pd.concat([pd.Series([0]) , df[::-1].value, pd.Series([0])]).diff().tolist()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m expected an indented block\n" + ] + } + ], "source": [ "def only2019(df):\n", " df['drop'] = df['date'].apply(lambda x: 0 if x[0:4] == '2019' else 1)\n", @@ -32,7 +843,7 @@ " df = df.drop(columns=['drop'])\n", " return df\n", "\n", - "def onlyMarch(df):\n", + "def MarchOnwards(df):\n", " # For habits only, lost my phone in late Febuary, didn't have a recent backup\n", " df['drop'] = df['date'].apply(lambda x: 1 if x[5:7] == '01' or x[5:7] == '02' else 0)\n", " df = df.drop(df[df['drop'] == 1].index)\n", @@ -54,7 +865,7 @@ " else:\n", " streakList.append(streak)\n", " streak = 0\n", - " return sum(streakList)\n", + " return max(streakList)\n", "\n", "def longestStreak(df):\n", " # reverse the series so dates are ascending (increasing?)\n", @@ -71,22 +882,23 @@ " else:\n", " streakList.append(streak)\n", " streak = 0\n", - " return sum(streakList)\n", + " return max(streakList)\n", "\n", - "def bestMonth(df):\n", - " pass\n", + "def sumMonth(df):\n", + " df['month'] = pd.DatetimeIndex(df['date']).month\n", + " return df.groupby(['month']).sum()\n", "\n", - "def worstMonth(df):\n", - " pass\n", - "\n", - "def averagePerMonth(df):\n", - " pass\n", + "def meanMonth(df):\n", + " df['month'] = pd.DatetimeIndex(df['date']).month\n", + " return df.groupby(['month']).mean()\n", "\n", "def plotScore(df):\n", - " pass\n", + " df = meanMonth(df)\n", + " plt.plot(df)\n", + " plt.show()\n", "\n", "def countZeros(df):\n", - " return (df.value == 0).astype(int).sum()\n", + " return countValue(0, df)\n", "\n", "def countValue(countValue, df):\n", " return (df.value == countValue).astype(int).sum()\n" @@ -94,7 +906,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 72, "metadata": {}, "outputs": [ { @@ -103,14 +915,36 @@ "text": [ "Days done: 72\n", "Non-streak days: 195\n", - "Streak days: 39\n" + "Streak days: 39\n", + "Longest streak: 17\n", + "Longest zeros: 23\n", + "Best month: September\n", + "Worst month: April\n" ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "print(\"Days done: \" + str(countValue(2, onlyMarch(only2019(meditateChecks)))))\n", - "print(\"Non-streak days: \" + str(countZeros(onlyMarch(only2019(meditateChecks)))))\n", - "print(\"Streak days: \" + str(countValue(1, onlyMarch(only2019(meditateChecks)))))" + "df = MarchOnwards(only2019(meditateChecks))\n", + "print(\"Days done: \" + str(countValue(2, df)))\n", + "print(\"Non-streak days: \" + str(countZeros(df)))\n", + "print(\"Streak days: \" + str(countValue(1, df)))\n", + "print(\"Longest streak: \" + str(longestStreak(df)))\n", + "print(\"Longest zeros: \" + str(longestZero(df)))\n", + "print(\"Best month: \" + calendar.month_name[int(sumMonth(df).idxmax())])\n", + "print(\"Worst month: \" + calendar.month_name[int(sumMonth(df).idxmin())])\n", + "plotScore(df)" ] }, { @@ -137,6 +971,9 @@ } ], "source": [ + "# Total days for habits: 306\n", + "# How come when counting streaks I only get 299?\n", + "# missing 1 week??\n", "print(72 + 195 + 39)\n", "longestStreak(onlyMarch(only2019(meditateChecks))) + longestZero(onlyMarch(only2019(meditateChecks)))" ] @@ -147,6 +984,26 @@ "source": [ "Why don't the above two numbers match??" ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['date', 'value', 'month'], dtype='object')" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.keys()" + ] } ], "metadata": {