Showing posts with label python. Show all posts
Showing posts with label python. Show all posts

Sunday, April 14, 2013

medhelp sleep graph replacement using python


In other words, graphing time of day versus date in python.

This morning I logged on to medhelp.org only to see that it had gone from somewhat usable for my purposes:
from my previous post, http://orangenarwhals.blogspot.com/2012/05/caffeines-impact-on-sleep-inkscape-a0.html
where I can at least type in the times to some extent, even if there is no batch input (e.g. uploading a text file), to

wtf is this? i am clearly not in their target demographic...

So I decided to get up off my lazy butt and do some python plotting.

This is the end result:

(it's flipped, so time increases going upward like you would expect a graph to do but opposite of how you would read the medhelp graph, where time increases going downwards, which I feel makes more intuitive sense).

The code is here:
https://github.com/nouyang/sleepgraph/blob/master/graph.py

I keep track of my sleep in a google doc that I just downloaded as a csv file. See the github repo.

===

brain/linkdump as i was working out how to do this

===

http://stackoverflow.com/questions/5498510/creating-graph-with-date-and-time-in-axis-labels-with-matplotlib
http://stackoverflow.com/questions/2369492/generate-a-heatmap-in-matplotlib-using-a-scatter-data-set?rq=1
http://stackoverflow.com/questions/8973846/how-do-i-create-this-kind-of-grid-table-using-matplotlib?rq=1
http://blog.brianhouse.net/post/6877602920/an-activity-heatmap-from-fitbit-data
http://stackoverflow.com/questions/4790265/plot-time-of-day-vs-date-in-matplotlib
vlines

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines
can set line width but the plot does not adjust to this (how to pad the dates out so the lines won't ever overlap?)

unix time
http://www.epochconverter.com/

bar plot
http://matplotlib.org/api/pyplot_api.html?highlight=pyplot%20bar#matplotlib.pyplot.bar
http://stackoverflow.com/questions/5902371/matplotlib-bar-chart-with-dates
 now just need to adjust so not height, but also have start time

x = '3/18/2013'
datetime.datetime.strptime(str(x),'%m/%d/%Y')

x = 1365739200
datetime.datetime.fromtimestamp(x)
# datetime.datetime(2013, 4, 12, 0, 0)

http://matplotlib.org/api/pyplot_api.html?highlight=pyplot%20bar#matplotlib.pyplot.bar
http://matplotlib.org/api/axes_api.html?highlight=xaxis_date#matplotlib.axes.Axes.xaxis_date
http://matplotlib.org/api/dates_api.html#matplotlib.dates.DateFormatter
dates.DateFormatter('%B %d, %Y') # January 16, 1970
format: http://linux.die.net/man/3/strptime

http://stackoverflow.com/questions/886716/controling-bars-width-in-matplotlib-with-per-month-data

http://datadebrief.blogspot.com/2010/10/plotting-sunrise-sunset-times-in-python.html
okay, this solves the y-axis problem! excellent.

http://docs.scipy.org/doc/numpy/user/basics.io.genfromtxt.html
In particular,genfromtxt is able to take missing data into account, when other faster and simpler functions like loadtxt cannot

does not deal well with quotation marks in data
"Line #31 (got 8 columns instead of 7)"

24:00 --> 0:00:00 else

ValueError: time data '3/18/2013 24:00:00' does not match format '%m/%d/%Y %H:%M:%S'

also does not like 0 instead of 0:00:00