509 lines
24 KiB
Plaintext
509 lines
24 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Taskwarrior"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 103,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import json\n",
|
|
"from tasklib import TaskWarrior\n",
|
|
"import datetime\n",
|
|
"import pandas as pd\n",
|
|
"import matplotlib.pyplot as plt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "raw",
|
|
"metadata": {},
|
|
"source": [
|
|
"Year Month Added Completed Deleted Net\n",
|
|
"---- --------- ----- --------- ------- ---\n",
|
|
"2019 January 18 19 0 -1\n",
|
|
" February 9 7 0 2\n",
|
|
" March 27 23 0 4\n",
|
|
" April 13 14 3 -4\n",
|
|
" May 10 9 0 1\n",
|
|
" June 17 13 0 4\n",
|
|
" July 17 17 0 0\n",
|
|
" August 35 37 0 -2\n",
|
|
" September 22 24 1 -3\n",
|
|
" October 19 15 2 2\n",
|
|
" November 17 16 0 1\n",
|
|
" December 37 42 1 -6\n",
|
|
" \n",
|
|
" Total 241 236 7 5 "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 100,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"with open('data/task.json', 'r') as myfile:\n",
|
|
" task = json.load(myfile)\n",
|
|
"\n",
|
|
"tasks = pd.DataFrame.from_dict(task)\n",
|
|
"tasks.set_axis(tasks['entry'], axis='index', inplace=True)\n",
|
|
"tasks = tasks.drop(['annotations', 'depends', 'description', 'parent', 'uuid', 'entry'], axis=1)\n",
|
|
"only2019(tasks).count()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 105,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(array([164., 3., 27., 2., 11., 1., 2., 1., 2., 2.]),\n",
|
|
" array([ 0. , 1.5, 3. , 4.5, 6. , 7.5, 9. , 10.5, 12. , 13.5, 15. ]),\n",
|
|
" <a list of 10 Patch objects>)"
|
|
]
|
|
},
|
|
"execution_count": 105,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"l = only2019(tasks).tags.dropna().to_list()\n",
|
|
"flat_list = [item for sublist in l for item in sublist]\n",
|
|
"\n",
|
|
"plt.hist(flat_list)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Habits"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"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": 183,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Days done: Meditate 64\n",
|
|
"Exercise 65\n",
|
|
"Read 69\n",
|
|
"Journal 49\n",
|
|
"devlog 32\n",
|
|
"Plants 38\n",
|
|
"Draw 12\n",
|
|
"dtype: int64\n",
|
|
"Non-streak days: Meditate 176\n",
|
|
"Exercise 179\n",
|
|
"Read 161\n",
|
|
"Journal 70\n",
|
|
"devlog 154\n",
|
|
"Plants 120\n",
|
|
"Draw 252\n",
|
|
"dtype: int64\n",
|
|
"Streak days: Meditate 35\n",
|
|
"Exercise 31\n",
|
|
"Read 45\n",
|
|
"Journal 156\n",
|
|
"devlog 89\n",
|
|
"Plants 117\n",
|
|
"Draw 11\n",
|
|
"dtype: int64\n",
|
|
"Longest streak: Meditate 17\n",
|
|
"Exercise 11\n",
|
|
"Read 12\n",
|
|
"Journal 55\n",
|
|
"devlog 29\n",
|
|
"Plants 87\n",
|
|
"Draw 17\n",
|
|
"dtype: int64\n",
|
|
"Longest zeros: Meditate 23\n",
|
|
"Exercise 26\n",
|
|
"Read 43\n",
|
|
"Journal 27\n",
|
|
"devlog 121\n",
|
|
"Plants 54\n",
|
|
"Draw 229\n",
|
|
"dtype: int64\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Meditate</th>\n",
|
|
" <th>Exercise</th>\n",
|
|
" <th>Read</th>\n",
|
|
" <th>Journal</th>\n",
|
|
" <th>devlog</th>\n",
|
|
" <th>Plants</th>\n",
|
|
" <th>Draw</th>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>month</th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>0.133333</td>\n",
|
|
" <td>0.266667</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.900000</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>1.133333</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>0.387097</td>\n",
|
|
" <td>0.193548</td>\n",
|
|
" <td>0.193548</td>\n",
|
|
" <td>0.645161</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.516129</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>0.500000</td>\n",
|
|
" <td>0.266667</td>\n",
|
|
" <td>0.166667</td>\n",
|
|
" <td>0.666667</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>0.516129</td>\n",
|
|
" <td>0.838710</td>\n",
|
|
" <td>0.967742</td>\n",
|
|
" <td>0.774194</td>\n",
|
|
" <td>0.064516</td>\n",
|
|
" <td>0.612903</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>0.806452</td>\n",
|
|
" <td>0.741935</td>\n",
|
|
" <td>0.935484</td>\n",
|
|
" <td>1.161290</td>\n",
|
|
" <td>1.225806</td>\n",
|
|
" <td>1.193548</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>1.133333</td>\n",
|
|
" <td>0.600000</td>\n",
|
|
" <td>1.233333</td>\n",
|
|
" <td>1.300000</td>\n",
|
|
" <td>1.066667</td>\n",
|
|
" <td>1.333333</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <td>0.774194</td>\n",
|
|
" <td>1.064516</td>\n",
|
|
" <td>0.580645</td>\n",
|
|
" <td>0.935484</td>\n",
|
|
" <td>1.032258</td>\n",
|
|
" <td>1.193548</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>0.700000</td>\n",
|
|
" <td>0.733333</td>\n",
|
|
" <td>0.800000</td>\n",
|
|
" <td>1.233333</td>\n",
|
|
" <td>1.000000</td>\n",
|
|
" <td>0.333333</td>\n",
|
|
" <td>0.533333</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>12</th>\n",
|
|
" <td>0.387097</td>\n",
|
|
" <td>0.548387</td>\n",
|
|
" <td>1.096774</td>\n",
|
|
" <td>0.709677</td>\n",
|
|
" <td>0.612903</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.612903</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Meditate Exercise Read Journal devlog Plants Draw\n",
|
|
"month \n",
|
|
"4 0.133333 0.266667 0.000000 0.900000 0.000000 1.133333 0.000000\n",
|
|
"5 0.387097 0.193548 0.193548 0.645161 0.000000 0.516129 0.000000\n",
|
|
"6 0.500000 0.266667 0.166667 0.666667 0.000000 0.000000 0.000000\n",
|
|
"7 0.516129 0.838710 0.967742 0.774194 0.064516 0.612903 0.000000\n",
|
|
"8 0.806452 0.741935 0.935484 1.161290 1.225806 1.193548 0.000000\n",
|
|
"9 1.133333 0.600000 1.233333 1.300000 1.066667 1.333333 0.000000\n",
|
|
"10 0.774194 1.064516 0.580645 0.935484 1.032258 1.193548 0.000000\n",
|
|
"11 0.700000 0.733333 0.800000 1.233333 1.000000 0.333333 0.533333\n",
|
|
"12 0.387097 0.548387 1.096774 0.709677 0.612903 0.000000 0.612903"
|
|
]
|
|
},
|
|
"execution_count": 183,
|
|
"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.set_axis(checks['date'], axis='index', inplace=True)\n",
|
|
"checks = checks.drop(['Godmode', 'Piano', 'Gratitude', 'Job', 'date'], axis=1)\n",
|
|
"df = MarchOnwards(only2019(checks))\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(df.apply(longestStreak, axis=0)))\n",
|
|
"print(\"Longest zeros: \" + str(df.apply(longestZero, axis=0)))\n",
|
|
"#print(\"Best month: \" + str(sumMonth(df)))\n",
|
|
"sumMonth(df)\n",
|
|
"meanMonth(df)\n",
|
|
"#print(\"Worst month: \" + calendar.month_name[int(sumMonth(df).idxmin())])\n",
|
|
"#plotScore(df)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 69,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def only2019(df):\n",
|
|
" return df.filter(like='2019', axis=0)\n",
|
|
"\n",
|
|
"def MarchOnwards(df):\n",
|
|
" # For habits only, lost my phone in late Febuary, didn't have a recent backup\n",
|
|
" return df.filter(regex='[0-9]{4}-(0?[4-9]|1?[0-2])-[0-9]{2}', axis=0)\n",
|
|
"\n",
|
|
"def longestZero(df):\n",
|
|
" # reverse the series so dates are ascending (increasing?)\n",
|
|
" # pad out the series with 0s, then diff it to track total, use that total to calculate highest streak\n",
|
|
" # streak increases when sum is 0\n",
|
|
" diffStreak = pd.concat([pd.Series([0]) , df[::-1], pd.Series([0])]).diff().tolist()\n",
|
|
" runningSum = 0\n",
|
|
" streak = 0\n",
|
|
" streakList = []\n",
|
|
" for e in diffStreak[1:-1]:\n",
|
|
" runningSum += e\n",
|
|
" if runningSum == 0:\n",
|
|
" streak += 1\n",
|
|
" else:\n",
|
|
" streakList.append(streak)\n",
|
|
" streak = 0\n",
|
|
" return max(streakList)\n",
|
|
"\n",
|
|
"def longestStreak(df):\n",
|
|
" # reverse the series so dates are ascending (increasing?)\n",
|
|
" # pad out the series with 0s, then diff it to track total, use that total to calculate highest streak\n",
|
|
" # streak increases when sum is non-zero\n",
|
|
" diffStreak = pd.concat([pd.Series([0]) , df[::-1], pd.Series([0])]).diff().tolist()\n",
|
|
" runningSum = 0\n",
|
|
" streak = 0\n",
|
|
" streakList = []\n",
|
|
" for e in diffStreak[1:-1]:\n",
|
|
" runningSum += e\n",
|
|
" if runningSum != 0:\n",
|
|
" streak += 1\n",
|
|
" else:\n",
|
|
" streakList.append(streak)\n",
|
|
" streak = 0\n",
|
|
" return max(streakList)\n",
|
|
"\n",
|
|
"def sumMonth(df):\n",
|
|
" df2 = df.reset_index()\n",
|
|
" df['month'] = pd.DatetimeIndex(df2['date']).month\n",
|
|
" return df.groupby(['month']).sum()\n",
|
|
"\n",
|
|
"def meanMonth(df):\n",
|
|
" df2 = df.reset_index()\n",
|
|
" df['month'] = pd.DatetimeIndex(df2['date']).month\n",
|
|
" return df.groupby(['month']).mean()\n",
|
|
"\n",
|
|
"def plotScore(df):\n",
|
|
" df = meanMonth(df)\n",
|
|
" plt.plot(df)\n",
|
|
" plt.show()\n",
|
|
"\n",
|
|
"def countZeros(df):\n",
|
|
" return countValue(0, df)\n",
|
|
"\n",
|
|
"def countValue(countValue, df):\n",
|
|
" return (df == countValue).astype(int).sum()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 83,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# checking for CSV of simply one habit\n",
|
|
"\n",
|
|
"colNames = ['date', 'value']\n",
|
|
"meditateChecks = pd.read_csv('LoopHabits/002 Meditate/Checkmarks.csv', names=colNames, header=None)\n",
|
|
"meditateScore = pd.read_csv('LoopHabits/002 Meditate/Scores.csv', names=colNames, header=None)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# might be broken now\n",
|
|
"# need to deal with dates in columns\n",
|
|
"meditateChecks.set_axis(checks['date'], axis='index', inplace=True)\n",
|
|
"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)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 71,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"306\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"299"
|
|
]
|
|
},
|
|
"execution_count": 71,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"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)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Why don't the above two numbers match??"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"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.7.1"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|