Mar 30 2016
Data obsession
Sometimes I get sucked into a coding obsession. I am not even a programmer. But when creating data processing routines I can get into a flow. Improve. Debug. Improve. Debug. The end result is
- Lack of sleep
- Spent more time coding than I will ever save using the code
- Spending a lot of time daydreaming about code improvements
The remedies are to either completely abandon the project or to tolerate it for a while. The enthusiasm ebbs once a certain level of usability is achieved but other people fail to agree what a great thing I have produced … 🙂
So last week I spent a few hours getting Greg’s great python routines to work with TCX files. Did that, and tweaked the plots a bit to my taste. I could have stopped there. In the mean time, I have
- Added parsers for the CSV files produced by RowPro and the desktop version of painsled
- Added a routine to make “pretty” summary strings, one-line-per-interval pretty strings for painsled CSV files and CrewNerd summary CSV files
- Packed everything into a python package and uploaded it to pypi.python.org when people can download and install it
- Pedantry alert: Rewrote one of Greg’s for-loops using Python pandas selection tools
The final big thing I want to do is add a concept2 logbook uploader. Then I may even start uploading my OTW rows to the logbook.Painsled is great, but you have to use the Concept2 utility to upload your rows to the logbook. The C2 utility is fine, but only works if you have your PM3/4/5 with logcard connected to the computer. With my utility, you should at least get the basic data (total time, total distance, date, weight category into the logbook.
Anyway, for the adventurous: https://pypi.python.org/pypi/rowingdata
There will probably not be more than three people in the world who may find this useful. I wonder who number three is.
Anyway, here is today’s row in all it’s glory:
Workout Summary - D:tijdelijkcrewnerd-2016-03-30.csv
--|Total|-Total-|--Avg--|Avg-|-Avg-|-Max-|-Avg
--|Dist-|-Time--|-Pace--|SPM-|-HR--|-HR--|-DPS
--|09908|53:13.0|02:41.1|19.5|142.8|174.0|09.5
No intervals summary, because I did this row as one big “Just Row” in CrewNerd.
I was a little time pressed, doing this row between work meetings, so it was shorter than I wanted. I did the 10 strokes on/10 strokes off again, experimenting a lot with stroke length and rate.
Coming Saturday I will row a test 6km trial against the 15/16 year olds in pairs. Not sure who should theoretically be faster. I hope I will win.
Here are two other highlights:
The session of March 25th as intervals (jimported from CrewNerd):
Workout Summary - 2016-03-25-0758.CSV
--|Total|-Total-|--Avg--|Avg-|-Avg-|-Max-|-Avg
--|Dist-|-Time--|-Pace--|SPM-|-HR--|-HR--|-DPS
--|03394|13:30.0|01:59.3|30.5|164.0|173.4|08.2
Workout Details
#-|SDist|-Split-|-SPace-|SPM-|AvgHR|MaxHR|DPS-
01|00179| 00:45 |02:05.9|30.6|138.0|162.0|07.8
02|00189| 00:45 |01:59.2|30.6|162.0|171.0|08.2
03|00189| 00:45 |01:58.8|30.7|163.0|173.0|08.2
04|00189| 00:45 |01:59.2|30.7|164.0|173.0|08.2
05|00190| 00:45 |01:58.0|30.7|167.0|174.0|08.3
06|00188| 00:45 |01:59.3|30.7|165.0|172.0|08.2
07|00187| 00:45 |02:00.3|32.0|158.0|171.0|07.8
08|00193| 00:45 |01:56.4|30.6|166.0|175.0|08.4
09|00191| 00:45 |01:57.8|29.3|167.0|174.0|08.7
10|00192| 00:45 |01:57.2|29.4|168.0|175.0|08.7
11|00193| 00:45 |01:56.7|30.7|169.0|176.0|08.4
12|00181| 00:45 |02:04.0|28.0|165.0|174.0|08.6
13|00187| 00:45 |02:00.4|32.0|156.0|172.0|07.8
14|00187| 00:45 |02:00.1|30.7|168.0|175.0|08.1
15|00187| 00:45 |02:00.5|29.3|166.0|173.0|08.5
16|00191| 00:45 |01:57.7|32.0|168.0|175.0|08.0
17|00194| 00:45 |01:56.2|32.0|172.0|179.0|08.1
18|00187| 00:45 |02:00.5|29.4|170.0|178.0|08.5
Mar 31 2016
More steady state stuff and more python
Today was steady state day, and even though it was the first day of this year when we could walk outside without a coat, I had to row on the erg. It was 19 degrees C, but I had too much work to do.
I sat down for a 3x20min. Did a short warming up. Then on to the main event. Tried to hold 200W, but gave up in the second interval. Today it felt too hard. Probably lack of sleep. I didn’t want to do the third interval. So I did something else instead. Rowed a 3k, lowering the pace every 500m.
Workout Summary - 2x20min.csv_o.csv
--|Total|-Total-|--Avg--|Avg-|-Avg-|-Max-|-Avg
--|Dist-|-Time--|-Pace--|SPM-|-HR--|-HR--|-DPS
--|09832|41:44.0|02:07.3|21.3|158.2|171.0|11.1
Workout Summary - 3km_cd.csv_o.csv
--|Total|-Total-|--Avg--|Avg-|-Avg-|-Max-|-Avg
--|Dist-|-Time--|-Pace--|SPM-|-HR--|-HR--|-DPS
--|03000|14:04.0|02:20.7|18.1|162.4|173.0|11.8
I used the Desktop version of painsled. Notice that my python code includes the time the PM3 “waits” before you start the row. I need to remove that part of the data in a next release.
On the python front, I have added an upload to the Concept2 logbook. I hope the folks at Concept2 don’t watch their logbook for suspicious behaviour, because I did a lot of uploading and subsequent deleting of rows today. :-/
On the other hand, I have new sculls ordered and I am getting a PM5 …
Here’s a screenshot from the tool:
And here is the result in the logbook:
I guess I’ll be using the Concept2 Utility for erg uploads, but it’s a nice functionality for when I forget to do that and am away from my erg. Also, I can start uploading OTW rows now as well. I never did that because it’s a hassle. Now I can do it easily:
And get this:
In the process, I also learned how to go from a file with some python to a full-blown package that other people can install, including easily created documentation.
So https://pypi.python.org/pypi/rowingdata
A small step for mankind, but a big step for me.
By sanderroosendaal • Uncategorized • 3 • Tags: concept2, erg, graph tool, OTE, rowing, steady state