rowingdata 3.6.6__tar.gz → 3.6.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rowingdata-3.6.6/rowingdata.egg-info → rowingdata-3.6.7}/PKG-INFO +20 -1
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/checkdatafiles.py +6 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/csvparsers.py +10 -2
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/rowingdata.py +283 -23
- {rowingdata-3.6.6 → rowingdata-3.6.7/rowingdata.egg-info}/PKG-INFO +20 -1
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/testdatasummary.csv +0 -2
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/testtcx.tcx +1 -1
- {rowingdata-3.6.6 → rowingdata-3.6.7}/tests/test_rowingdata.py +1 -7
- {rowingdata-3.6.6 → rowingdata-3.6.7}/LICENSE +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/MANIFEST.in +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/README.rst +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/bin/crewnerddata.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/bin/crewnerddata.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/bin/testdata.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/.buildinfo +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/2x20min.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/editrower.JPG +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/greghoc.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/image001.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/otwlogbook.JPG +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/otwscreenshot.JPG +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/screenshot.JPG +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/screenshotlogbook.JPG +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_images/woensdag.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_sources/index.txt +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_sources/modules.txt +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_sources/rowingdata.txt +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/ajax-loader.gif +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/alabaster.css +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/basic.css +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/comment-bright.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/comment-close.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/comment.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/custom.css +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/doctools.js +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/down-pressed.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/down.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/file.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/jquery-1.11.1.js +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/jquery.js +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/minus.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/plus.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/pygments.css +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/searchtools.js +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/underscore-1.3.1.js +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/underscore.js +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/up-pressed.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/up.png +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/_static/websupport.js +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/genindex.html +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/index.html +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/modules.html +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/objects.inv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/py-modindex.html +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/rowingdata.html +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/search.html +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/docs/_build/html/searchindex.js +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/__init__.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/__main__.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/boatedit.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/copystats.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/crewnerdplot.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/crewnerdplottime.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/ergdataplot.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/ergdataplottime.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/ergdatatotcx.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/ergstickplot.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/ergstickplottime.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/ergsticktotcx.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/gpxtools.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/gpxwrite.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/konkatenaadje.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/laptesting.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/obsolete.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/otherparsers.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/painsled_desktop_plot.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/painsled_desktop_plottime.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/painsled_desktop_toc2.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/painsledplot.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/painsledplottime.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/painsledtoc2.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/roweredit.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/rowproplot.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/rowproplottime.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/speedcoachplot.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/speedcoachplottime.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/speedcoachtoc2.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/tcxplot.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/tcxplot_nogeo.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/tcxplottime.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/tcxplottime_nogeo.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/tcxtoc2.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/tcxtools.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/trainingparser.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/utils.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/windcorrected.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata/writetcx.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata.egg-info/SOURCES.txt +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata.egg-info/dependency_links.txt +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata.egg-info/not-zip-safe +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata.egg-info/requires.txt +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/rowingdata.egg-info/top_level.txt +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/setup.cfg +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/setup.py +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/2016-03-25-0758.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/2016-03-25-0758_data.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/2x20min_o.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/3km_cd_o.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/EUBoatCoach.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/EmpowerSpeedCoachForce.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/NKEmporfromgreg.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/NKLiNKv130.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/NoHR.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/PainsledForce.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/RP_interval.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/RP_interval.csv_o.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/RP_testdata.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/SpdCoach2_imp_inconsistent.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/SpdCoachAmbiguous.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/SpeedCoach GPS Workout.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/SpeedCoach2Link_interval.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/SpeedCoach2Linkv1.27.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/SpeedCoach2v2.12.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/Speedcoach2example.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/aritmo.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/bc1.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/bc2.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/bc3.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/boatcoach.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/boatcoach_fixed_distance.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/boatcoach_otw.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/correctedpainsled.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/coxmate.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/crewnerd_interval.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/crewnerddata.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/crewnerddata.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/crewnerddata_o.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/cumvalues.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/ergdata_example.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/ergdata_example.csv_o.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/ergstick.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/ergstick.csv_o.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/ergstick2.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/ergstick_o.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/example.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/example_data.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/faketcx.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/float.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/herodata.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/humon.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/impeller_empower.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/invalidchar.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/kinomap.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/mystery.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/nk_logbook.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/painsled.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/painsled_desktop_example.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/painsled_out_data.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/painsled_to_csv_20160221-105218_erg-400150318_760465m.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/quiske_per_stroke_left.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/quiske_per_stroke_new.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/quiske_per_stroke_right.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/quiske_per_stroke_seat.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/recover.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/ritmointervals.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rowingdata_eth.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rowinginmotionexample.TCX +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rowinginmotionexample.TCX_o.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rowperfect.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rowpro5.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rowpro_carrick.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rp3_curve.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rp3intervals.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rp3intervals2.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/rp_out.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/smartrow.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/smartrow_intervals.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/spdcoach2noheader.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/speedcoach2test2.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/speedcoach3test3.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/speedcoachexample.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/speedcoachexample.csv_o.CSV +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/summarytest.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/testdata.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/testdata_part1.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/testdata_part2.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/testlapidx.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/testtcs_210614.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/testtcx_210614.tcx +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata/tim.csv +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/testdata//345/210/222/350/210/271.csv" +0 -0
- {rowingdata-3.6.6 → rowingdata-3.6.7}/tests/testparser.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rowingdata
|
|
3
|
-
Version: 3.6.
|
|
3
|
+
Version: 3.6.7
|
|
4
4
|
Summary: The rowingdata library to create colorful plots from CrewNerd, Painsled and other rowing data tools
|
|
5
5
|
Home-page:
|
|
6
6
|
Author: Sander Roosendaal
|
|
@@ -9,6 +9,25 @@ License: MIT
|
|
|
9
9
|
Keywords: rowing ergometer concept2
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
License-File: LICENSE
|
|
12
|
+
Requires-Dist: Cython
|
|
13
|
+
Requires-Dist: numpy
|
|
14
|
+
Requires-Dist: scipy
|
|
15
|
+
Requires-Dist: matplotlib
|
|
16
|
+
Requires-Dist: pandas
|
|
17
|
+
Requires-Dist: fitparse
|
|
18
|
+
Requires-Dist: arrow>=1.0.2
|
|
19
|
+
Requires-Dist: python-dateutil
|
|
20
|
+
Requires-Dist: docopt
|
|
21
|
+
Requires-Dist: tqdm
|
|
22
|
+
Requires-Dist: rowingphysics>=0.2.3
|
|
23
|
+
Requires-Dist: iso8601
|
|
24
|
+
Requires-Dist: lxml
|
|
25
|
+
Requires-Dist: xmltodict
|
|
26
|
+
Requires-Dist: nose_parameterized
|
|
27
|
+
Requires-Dist: timezonefinder
|
|
28
|
+
Requires-Dist: pycairo
|
|
29
|
+
Requires-Dist: tk
|
|
30
|
+
Requires-Dist: requests
|
|
12
31
|
|
|
13
32
|
**************
|
|
14
33
|
Rowingdata
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import absolute_import
|
|
2
2
|
from __future__ import print_function
|
|
3
|
+
import polars as pl
|
|
3
4
|
|
|
4
5
|
try:
|
|
5
6
|
from . import rowingdata
|
|
@@ -151,6 +152,11 @@ def checkfile(f2, verbose=False):
|
|
|
151
152
|
else:
|
|
152
153
|
row = rowingdata.rowingdata(csvfile=f2)
|
|
153
154
|
|
|
155
|
+
row.write_csv(f2+'pl.csv')
|
|
156
|
+
row2 = rowingdata.rowingdata_pl(csvfile=f2 + 'pl.csv')
|
|
157
|
+
os.remove(f2 + 'pl.csv')
|
|
158
|
+
row2 = rowingdata.rowingdata_pl(df=pl.from_pandas(row.df))
|
|
159
|
+
|
|
154
160
|
nr_of_rows = row.number_of_rows
|
|
155
161
|
distmax = row.df['cum_dist'].max()
|
|
156
162
|
timemax = row.df['TimeStamp (sec)'].max() - row.df['TimeStamp (sec)'].min()
|
|
@@ -1969,10 +1969,18 @@ class HeroParser(CSVParser):
|
|
|
1969
1969
|
|
|
1970
1970
|
class SmartRowParser(CSVParser):
|
|
1971
1971
|
def __init__(self, *args, **kwargs):
|
|
1972
|
+
if args:
|
|
1973
|
+
csvfile = args[0]
|
|
1974
|
+
else: # pragma: no cover
|
|
1975
|
+
csvfile = kwargs['csvfile']
|
|
1976
|
+
|
|
1977
|
+
separator = get_separator(5, csvfile)
|
|
1978
|
+
kwargs['sep'] = separator
|
|
1979
|
+
|
|
1972
1980
|
super(SmartRowParser, self).__init__(*args, **kwargs)
|
|
1973
1981
|
|
|
1974
1982
|
self.cols = [
|
|
1975
|
-
'
|
|
1983
|
+
'Timestamp (UTC)',
|
|
1976
1984
|
'Distance (m)',
|
|
1977
1985
|
'Stroke rate (SPM)',
|
|
1978
1986
|
'Heart rate (bpm)',
|
|
@@ -1986,7 +1994,7 @@ class SmartRowParser(CSVParser):
|
|
|
1986
1994
|
'', #' AverageDriveForce (lbs)',
|
|
1987
1995
|
'', #' PeakDriveForce (lbs)',
|
|
1988
1996
|
'', #' lapIdx',
|
|
1989
|
-
'
|
|
1997
|
+
'Second (#)',
|
|
1990
1998
|
'', #' latitude',
|
|
1991
1999
|
'', #' longitude',
|
|
1992
2000
|
]
|
|
@@ -5,7 +5,7 @@ from __future__ import print_function
|
|
|
5
5
|
from six.moves import range
|
|
6
6
|
from six.moves import input
|
|
7
7
|
|
|
8
|
-
__version__ = "3.6.
|
|
8
|
+
__version__ = "3.6.7"
|
|
9
9
|
|
|
10
10
|
from collections import Counter
|
|
11
11
|
|
|
@@ -40,7 +40,7 @@ import math
|
|
|
40
40
|
from math import cos
|
|
41
41
|
|
|
42
42
|
import pickle
|
|
43
|
-
|
|
43
|
+
import gzip
|
|
44
44
|
import time
|
|
45
45
|
import warnings
|
|
46
46
|
import sys
|
|
@@ -58,6 +58,7 @@ import numpy as np
|
|
|
58
58
|
from numpy import isinf, isnan
|
|
59
59
|
|
|
60
60
|
import pandas as pd
|
|
61
|
+
import polars as pl
|
|
61
62
|
from pandas import DataFrame, Series
|
|
62
63
|
|
|
63
64
|
|
|
@@ -1778,6 +1779,40 @@ def addpowerzones(df, ftp, powerperc):
|
|
|
1778
1779
|
|
|
1779
1780
|
return df
|
|
1780
1781
|
|
|
1782
|
+
def addpowerzones_pl(df, ftp, powerperc):
|
|
1783
|
+
percut2, percut1, percat, perctr, percan = np.array(powerperc) / 100.
|
|
1784
|
+
|
|
1785
|
+
ut2, ut1, at, tr, an = ftp * np.array(powerperc) / 100.
|
|
1786
|
+
|
|
1787
|
+
df = df.with_columns([
|
|
1788
|
+
(pl.when(pl.col(" Power (watts)") <= ut2).then(pl.col(" Power (watts)"))
|
|
1789
|
+
.otherwise(pl.lit(0))).alias("pw_ut2"),
|
|
1790
|
+
(pl.when(pl.col(" Power (watts)") > ut2, pl.col(" Power (watts)") <= ut1).then(pl.col(" Power (watts)"))
|
|
1791
|
+
.otherwise(pl.lit(0))).alias("pw_ut1"),
|
|
1792
|
+
(pl.when(pl.col(" Power (watts)") > ut1, pl.col(" Power (watts)") <= at).then(pl.col(" Power (watts)"))
|
|
1793
|
+
.otherwise(pl.lit(0))).alias("pw_at"),
|
|
1794
|
+
(pl.when(pl.col(" Power (watts)") > at, pl.col(" Power (watts)") <= tr).then(pl.col(" Power (watts)")).otherwise(pl.lit(0))).alias("pw_tr"),
|
|
1795
|
+
(pl.when(pl.col(" Power (watts)") > tr, pl.col(" Power (watts)") <= an).then(pl.col(" Power (watts)")).otherwise(pl.lit(0))).alias("pw_an"),
|
|
1796
|
+
(pl.when(pl.col(" Power (watts)") > an, pl.col(" Power (watts)") <= 360).then(pl.col(" Power (watts)")).otherwise(pl.lit(0))).alias("pw_max"),
|
|
1797
|
+
]
|
|
1798
|
+
)
|
|
1799
|
+
|
|
1800
|
+
return df
|
|
1801
|
+
|
|
1802
|
+
|
|
1803
|
+
def addzones_pl(df, ut2, ut1, at, tr, an, mmax):
|
|
1804
|
+
df = df.with_columns([
|
|
1805
|
+
(pl.when(pl.col(" HRCur (bpm)") <= ut2).then(pl.col(" HRCur (bpm)")).otherwise(pl.lit(0))).alias("hr_ut2"),
|
|
1806
|
+
(pl.when(pl.col(" HRCur (bpm)") > ut2, pl.col(" HRCur (bpm)") <= ut1).then(pl.col(" HRCur (bpm)")).otherwise(pl.lit(0))).alias("hr_ut1"),
|
|
1807
|
+
(pl.when(pl.col(" HRCur (bpm)") > ut1, pl.col(" HRCur (bpm)") <= at).then(pl.col(" HRCur (bpm)")).otherwise(pl.lit(0))).alias("hr_at"),
|
|
1808
|
+
(pl.when(pl.col(" HRCur (bpm)") > at, pl.col(" HRCur (bpm)") <= tr).then(pl.col(" HRCur (bpm)")).otherwise(pl.lit(0))).alias("hr_tr"),
|
|
1809
|
+
(pl.when(pl.col(" HRCur (bpm)") > tr, pl.col(" HRCur (bpm)") <= an).then(pl.col(" HRCur (bpm)")).otherwise(pl.lit(0))).alias("hr_an"),
|
|
1810
|
+
(pl.when(pl.col(" HRCur (bpm)") > an, pl.col(" HRCur (bpm)") <= 360).then(pl.col(" HRCur (bpm)")).otherwise(pl.lit(0))).alias("hr_max"),
|
|
1811
|
+
]
|
|
1812
|
+
)
|
|
1813
|
+
|
|
1814
|
+
return df
|
|
1815
|
+
|
|
1781
1816
|
def addzones(df, ut2, ut1, at, tr, an, mmax):
|
|
1782
1817
|
# define an additional data frame that will hold the multiple bar plot data and the hr
|
|
1783
1818
|
# limit data for the plot, it also holds a cumulative distance column
|
|
@@ -1868,6 +1903,249 @@ def getaddress(spm,vw,vb):
|
|
|
1868
1903
|
|
|
1869
1904
|
return i,j,k
|
|
1870
1905
|
|
|
1906
|
+
|
|
1907
|
+
class rowingdata_pl:
|
|
1908
|
+
"""
|
|
1909
|
+
This is used if you want to get a polars DataFrame. This class is much more finicky about
|
|
1910
|
+
the data, and might fail reading a csv file where the class rowingdata succeeds.
|
|
1911
|
+
|
|
1912
|
+
There are no plans to exactly reproduce the pandas version's functionality here.
|
|
1913
|
+
|
|
1914
|
+
The intention is to be strict about the width and data types of the resulting data frame.
|
|
1915
|
+
"""
|
|
1916
|
+
def __init__(self, *args, **kwargs):
|
|
1917
|
+
if 'debug' in kwargs: # pragma: no cover
|
|
1918
|
+
debug = kwargs['debug']
|
|
1919
|
+
else:
|
|
1920
|
+
debug = False
|
|
1921
|
+
|
|
1922
|
+
self.debug = debug
|
|
1923
|
+
|
|
1924
|
+
readFile = None
|
|
1925
|
+
if 'csvfile' in kwargs:
|
|
1926
|
+
readFile = kwargs['csvfile']
|
|
1927
|
+
|
|
1928
|
+
rwr = kwargs.get('rower', rower())
|
|
1929
|
+
|
|
1930
|
+
rowtype = kwargs.get('rowtype', 'Indoor Rower')
|
|
1931
|
+
|
|
1932
|
+
|
|
1933
|
+
sled_df = pl.DataFrame()
|
|
1934
|
+
if 'df' in kwargs:
|
|
1935
|
+
sled_df = kwargs['df']
|
|
1936
|
+
readFile = None
|
|
1937
|
+
elif readFile:
|
|
1938
|
+
try:
|
|
1939
|
+
try:
|
|
1940
|
+
sled_df = pl.read_csv(readFile,encoding='utf-8', infer_schema_length=1000)
|
|
1941
|
+
except IOError: # pragma: no cover
|
|
1942
|
+
sled_df = pl.read_csv(readFile + '.gz',encoding='utf-8')
|
|
1943
|
+
except:
|
|
1944
|
+
sled_df = pl.DataFrame()
|
|
1945
|
+
except IOError: # pragma: no cover
|
|
1946
|
+
try:
|
|
1947
|
+
f = open(readFile)
|
|
1948
|
+
sled_df = pl.read_csv(f)
|
|
1949
|
+
f.close()
|
|
1950
|
+
except IOError:
|
|
1951
|
+
try:
|
|
1952
|
+
f = open(readFile + '.gz')
|
|
1953
|
+
sled_df = pl.read_csv(f)
|
|
1954
|
+
f.close()
|
|
1955
|
+
except:
|
|
1956
|
+
sled_df = pl.DataFrame()
|
|
1957
|
+
except UnicodeEncodeError: # pragma: no cover
|
|
1958
|
+
try:
|
|
1959
|
+
f = open(readFile)
|
|
1960
|
+
sled_df = pl.read_csv(f)
|
|
1961
|
+
f.close()
|
|
1962
|
+
except IOError:
|
|
1963
|
+
try:
|
|
1964
|
+
f = open(readFile + '.gz')
|
|
1965
|
+
sled_df = pl.read_csv(f)
|
|
1966
|
+
f.close()
|
|
1967
|
+
except:
|
|
1968
|
+
sled_df = pl.DataFrame()
|
|
1969
|
+
|
|
1970
|
+
|
|
1971
|
+
self.readfilename = 'rowing dataframe'
|
|
1972
|
+
|
|
1973
|
+
if readFile:
|
|
1974
|
+
try:
|
|
1975
|
+
self.readfilename = readFile.name
|
|
1976
|
+
except AttributeError:
|
|
1977
|
+
self.readfilename = readFile
|
|
1978
|
+
|
|
1979
|
+
self.readFile = readFile
|
|
1980
|
+
self.rwr = rwr
|
|
1981
|
+
self.rowtype = rowtype
|
|
1982
|
+
|
|
1983
|
+
self.empty = False
|
|
1984
|
+
if sled_df.is_empty():
|
|
1985
|
+
self.empty = True
|
|
1986
|
+
|
|
1987
|
+
othernames = ['catch','finish','peakforceangle',
|
|
1988
|
+
'wash','slip','index',
|
|
1989
|
+
'cum_dist',
|
|
1990
|
+
'hr_an','hr_at','hr_tr','hr_ut1','hr_ut2','hr_max',
|
|
1991
|
+
# 'lim_an','lim_at','lim_tr','lim_ut1','lim_ut2',
|
|
1992
|
+
# 'limpw_an','limpw_at','limpw_tr',
|
|
1993
|
+
# 'limpw_ut1','limpw_ut2',
|
|
1994
|
+
'pw_an','pw_at','pw_max','pw_tr','pw_ut1','pw_ut2',
|
|
1995
|
+
# 'lim_max','hr_max',
|
|
1996
|
+
' latitude',' longitude']
|
|
1997
|
+
|
|
1998
|
+
# check for missing column names
|
|
1999
|
+
mandatorynames = [
|
|
2000
|
+
'TimeStamp (sec)',
|
|
2001
|
+
' Horizontal (meters)',
|
|
2002
|
+
' Cadence (stokes/min)',
|
|
2003
|
+
' HRCur (bpm)',
|
|
2004
|
+
' Stroke500mPace (sec/500m)',
|
|
2005
|
+
' Power (watts)',
|
|
2006
|
+
' DriveLength (meters)',
|
|
2007
|
+
' StrokeDistance (meters)',
|
|
2008
|
+
' DriveTime (ms)',
|
|
2009
|
+
' DragFactor',
|
|
2010
|
+
' StrokeRecoveryTime (ms)',
|
|
2011
|
+
' AverageDriveForce (lbs)',
|
|
2012
|
+
' AverageBoatSpeed (m/s)',
|
|
2013
|
+
' PeakDriveForce (lbs)',
|
|
2014
|
+
' AverageDriveForce (N)',
|
|
2015
|
+
' PeakDriveForce (N)',
|
|
2016
|
+
' lapIdx',
|
|
2017
|
+
' ElapsedTime (sec)',
|
|
2018
|
+
' Calories (kCal)',
|
|
2019
|
+
' WorkoutState',
|
|
2020
|
+
]
|
|
2021
|
+
|
|
2022
|
+
|
|
2023
|
+
self.defaultnames = othernames+mandatorynames
|
|
2024
|
+
|
|
2025
|
+
if readFile and not sled_df.is_empty():
|
|
2026
|
+
for name in self.defaultnames:
|
|
2027
|
+
if name in sled_df.columns:
|
|
2028
|
+
if sled_df[name].dtype == pl.String:
|
|
2029
|
+
if name != ' lapIdx':
|
|
2030
|
+
sled_df = sled_df.with_columns(
|
|
2031
|
+
(pl.col(name).str.strip_chars_start()).cast(pl.Float64).alias(name)
|
|
2032
|
+
)
|
|
2033
|
+
|
|
2034
|
+
|
|
2035
|
+
if ' ElapsedTime (sec)' not in sled_df.columns and not sled_df.is_empty():
|
|
2036
|
+
sled_df = sled_df.with_columns((pl.col("TimeStamp (sec)")-sled_df[0, "TimeStamp (sec)"]).alias(" ElapsedTime (sec)"))
|
|
2037
|
+
|
|
2038
|
+
if not sled_df.is_empty():
|
|
2039
|
+
for name in self.defaultnames:
|
|
2040
|
+
if name not in sled_df.columns:
|
|
2041
|
+
if debug:
|
|
2042
|
+
print(name + " is not found in data")
|
|
2043
|
+
sled_df = sled_df.with_columns((pl.lit(0)).alias(name))
|
|
2044
|
+
if name == "TimeStamp (sec)":
|
|
2045
|
+
sled_df = sled_df.rename({"TimeStamp (sec utc)" : name})
|
|
2046
|
+
if name == ' WorkoutState':
|
|
2047
|
+
sled_df = sled_df.with_columns((pl.lit(4)).alias(name))
|
|
2048
|
+
if name == ' Calories (kCal)':
|
|
2049
|
+
sled_df = sled_df.with_columns((pl.lit(1)).alias(name))
|
|
2050
|
+
if name == ' Stroke500mPace (sec/500m)': # pragma: no cover
|
|
2051
|
+
dd = sled_df[' Horizontal (meters)'].diff()
|
|
2052
|
+
dt = sled_df[' ElapsedTime (sec)'].diff()
|
|
2053
|
+
velo = dd / dt
|
|
2054
|
+
sled_df = sled_df.with_columns((500. / velo).alias(name))
|
|
2055
|
+
if name == ' AverageBoatSpeed (m/s)':
|
|
2056
|
+
try:
|
|
2057
|
+
velo = 500./sled_df[' Stroke500mPace (sec/500m)']
|
|
2058
|
+
except (KeyError,ValueError): # pragma: no cover
|
|
2059
|
+
dd = sled_df[' Horizontal (meters)'].diff()
|
|
2060
|
+
dt = sled_df[' ElapsedTime (sec)'].diff()
|
|
2061
|
+
velo = dd / dt
|
|
2062
|
+
sled_df = sled_df.with_columns((velo).alias(name))
|
|
2063
|
+
if name == ' AverageDriveForce (lbs)':
|
|
2064
|
+
try: # pragma: no cover
|
|
2065
|
+
forcen = sled_df[' AverageDriveForce (N)']
|
|
2066
|
+
sled_df = sled_df.with_columns((pl.col(" AverageDriveForce (lbs)") / lbstoN).alias(name))
|
|
2067
|
+
except (KeyError, TypeError):
|
|
2068
|
+
sled_df = sled_df.with_columns((pl.lit(0)).alias(name))
|
|
2069
|
+
if name == ' AverageDriveForce (N)':
|
|
2070
|
+
try:
|
|
2071
|
+
forcelbs = sled_df[' AverageDriveForce (lbs)']
|
|
2072
|
+
sled_df = sled_df.with_columns((pl.col(" AverageDriveForce (lbs)") * lbstoN).alias(name))
|
|
2073
|
+
except KeyError: # pragma: no cover
|
|
2074
|
+
sled_df = sled_df.with_columns((pl.lit(0)).alias(name))
|
|
2075
|
+
if name == ' PeakDriveForce (lbs)':
|
|
2076
|
+
try: # pragma: no cover
|
|
2077
|
+
forcen = sled_df[' PeakDriveForce (N)']
|
|
2078
|
+
sled_df = sled_df.with_columns((pl.col(forcen / lbstoN).alias(name)))
|
|
2079
|
+
except (KeyError, TypeError):
|
|
2080
|
+
sled_df = sled_df.with_columns((pl.lit(0)).alias(name))
|
|
2081
|
+
if name == ' PeakDriveForce (N)':
|
|
2082
|
+
try:
|
|
2083
|
+
forcelbs = sled_df[' PeakDriveForce (lbs)']
|
|
2084
|
+
sled_df = sled_df.with_columns((pl.col(" PeakDriveForce (lbs)") * lbstoN).alias(name))
|
|
2085
|
+
except KeyError: # pragma: no cover
|
|
2086
|
+
sled_df = sled_df.with_columns((pl.lit(0)).alias(name))
|
|
2087
|
+
if name == ' Cadence (stokes/min)':
|
|
2088
|
+
try:
|
|
2089
|
+
spm = sled_df[' Cadence (strokes/min)']
|
|
2090
|
+
if debug: # pragma: no cover
|
|
2091
|
+
print('Cadence found')
|
|
2092
|
+
sled_df = sled_df.with_columns((spm).alias(name))
|
|
2093
|
+
except KeyError: # pragma: no cover
|
|
2094
|
+
pass
|
|
2095
|
+
|
|
2096
|
+
sled_df = sled_df.drop([c for c in sled_df.columns if c not in self.defaultnames])
|
|
2097
|
+
|
|
2098
|
+
# add drive energy
|
|
2099
|
+
sled_df = sled_df.with_columns((pl.col(" Power (watts)")/pl.col(" Cadence (stokes/min)")).alias("driveenergy"))
|
|
2100
|
+
|
|
2101
|
+
self.duration = 0
|
|
2102
|
+
|
|
2103
|
+
if not sled_df.is_empty():
|
|
2104
|
+
sled_df = addzones_pl(
|
|
2105
|
+
sled_df,
|
|
2106
|
+
self.rwr.ut2,
|
|
2107
|
+
self.rwr.ut1,
|
|
2108
|
+
self.rwr.at,
|
|
2109
|
+
self.rwr.tr,
|
|
2110
|
+
self.rwr.an,
|
|
2111
|
+
self.rwr.max
|
|
2112
|
+
)
|
|
2113
|
+
|
|
2114
|
+
sled_df = sled_df.filter(pl.col(" WorkoutState") != 12)
|
|
2115
|
+
sled_df = sled_df.with_columns(pl.col(" Cadence (stokes/min)").cast(pl.Float64))
|
|
2116
|
+
|
|
2117
|
+
sled_df = addpowerzones_pl(sled_df, self.rwr.ftp, self.rwr.powerperc)
|
|
2118
|
+
|
|
2119
|
+
self.duration = sled_df['TimeStamp (sec)'].max()-sled_df['TimeStamp (sec)'].min()
|
|
2120
|
+
|
|
2121
|
+
self.df = sled_df
|
|
2122
|
+
self.number_of_rows = self.df.shape[0]
|
|
2123
|
+
|
|
2124
|
+
|
|
2125
|
+
def write_csv(self, writeFile, compressed=False):
|
|
2126
|
+
data = self.df.clone()
|
|
2127
|
+
data = data.drop([
|
|
2128
|
+
'hr_ut2',
|
|
2129
|
+
'hr_ut1',
|
|
2130
|
+
'hr_at',
|
|
2131
|
+
'hr_tr',
|
|
2132
|
+
'hr_an',
|
|
2133
|
+
'hr_max',
|
|
2134
|
+
'pw_ut2',
|
|
2135
|
+
'pw_ut1',
|
|
2136
|
+
'pw_at',
|
|
2137
|
+
'pw_tr',
|
|
2138
|
+
'pw_an',
|
|
2139
|
+
'pw_max',
|
|
2140
|
+
])
|
|
2141
|
+
|
|
2142
|
+
if compressed:
|
|
2143
|
+
with gzip.open(writeFile + '.gz','wb') as f:
|
|
2144
|
+
return data.write_csv(f)
|
|
2145
|
+
|
|
2146
|
+
return data.write_csv(writeFile)
|
|
2147
|
+
|
|
2148
|
+
|
|
1871
2149
|
class rowingdata:
|
|
1872
2150
|
""" This is the main class. Read the data from the csv file and do all
|
|
1873
2151
|
kinds
|
|
@@ -2097,11 +2375,6 @@ class rowingdata:
|
|
|
2097
2375
|
hrmean = sled_df[' HRCur (bpm)'].mean()
|
|
2098
2376
|
hrstd = sled_df[' HRCur (bpm)'].std()
|
|
2099
2377
|
|
|
2100
|
-
if hrmean != 0 and hrstd != 0:
|
|
2101
|
-
sled_df[' HRCur (bpm)'].replace(to_replace=0, value=np.nan,
|
|
2102
|
-
inplace=True)
|
|
2103
|
-
sled_df[' HRCur (bpm)'].ffill(inplace=True)
|
|
2104
|
-
|
|
2105
2378
|
self.dragfactor = sled_df[' DragFactor'].mean()
|
|
2106
2379
|
# do stroke count
|
|
2107
2380
|
dt = sled_df['TimeStamp (sec)'].diff()
|
|
@@ -2173,7 +2446,8 @@ class rowingdata:
|
|
|
2173
2446
|
|
|
2174
2447
|
# add HR zone data to dataframe
|
|
2175
2448
|
if len(sled_df):
|
|
2176
|
-
self.df = addzones(sled_df,
|
|
2449
|
+
self.df = addzones(sled_df,
|
|
2450
|
+
self.rwr.ut2,
|
|
2177
2451
|
self.rwr.ut1,
|
|
2178
2452
|
self.rwr.at,
|
|
2179
2453
|
self.rwr.tr,
|
|
@@ -2199,7 +2473,7 @@ class rowingdata:
|
|
|
2199
2473
|
else:
|
|
2200
2474
|
self.duration = 0
|
|
2201
2475
|
|
|
2202
|
-
|
|
2476
|
+
|
|
2203
2477
|
def __add__(self, other):
|
|
2204
2478
|
self_df = self.df.copy()
|
|
2205
2479
|
other_df = other.df.copy()
|
|
@@ -2278,20 +2552,6 @@ class rowingdata:
|
|
|
2278
2552
|
self.df[' DragFactor'] = dragfactor
|
|
2279
2553
|
self.dragfactor = dragfactor
|
|
2280
2554
|
|
|
2281
|
-
def get_minutes_averages(self, columnname):
|
|
2282
|
-
""" Returns a list of values, the mean for each minute of the session
|
|
2283
|
-
"""
|
|
2284
|
-
|
|
2285
|
-
df = self.df.copy()
|
|
2286
|
-
df['dt'] = df['TimeStamp (sec)'].apply(lambda x: arrow.get(x).datetime)
|
|
2287
|
-
df.set_index('dt',inplace=True)
|
|
2288
|
-
|
|
2289
|
-
try:
|
|
2290
|
-
result = df[columnname].resample('T').mean().values
|
|
2291
|
-
except KeyError:
|
|
2292
|
-
return []
|
|
2293
|
-
|
|
2294
|
-
return result
|
|
2295
2555
|
|
|
2296
2556
|
def getvalues(self, keystring):
|
|
2297
2557
|
""" Just a tool to get a column of the row data as a numpy array
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rowingdata
|
|
3
|
-
Version: 3.6.
|
|
3
|
+
Version: 3.6.7
|
|
4
4
|
Summary: The rowingdata library to create colorful plots from CrewNerd, Painsled and other rowing data tools
|
|
5
5
|
Home-page:
|
|
6
6
|
Author: Sander Roosendaal
|
|
@@ -9,6 +9,25 @@ License: MIT
|
|
|
9
9
|
Keywords: rowing ergometer concept2
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
License-File: LICENSE
|
|
12
|
+
Requires-Dist: Cython
|
|
13
|
+
Requires-Dist: numpy
|
|
14
|
+
Requires-Dist: scipy
|
|
15
|
+
Requires-Dist: matplotlib
|
|
16
|
+
Requires-Dist: pandas
|
|
17
|
+
Requires-Dist: fitparse
|
|
18
|
+
Requires-Dist: arrow>=1.0.2
|
|
19
|
+
Requires-Dist: python-dateutil
|
|
20
|
+
Requires-Dist: docopt
|
|
21
|
+
Requires-Dist: tqdm
|
|
22
|
+
Requires-Dist: rowingphysics>=0.2.3
|
|
23
|
+
Requires-Dist: iso8601
|
|
24
|
+
Requires-Dist: lxml
|
|
25
|
+
Requires-Dist: xmltodict
|
|
26
|
+
Requires-Dist: nose_parameterized
|
|
27
|
+
Requires-Dist: timezonefinder
|
|
28
|
+
Requires-Dist: pycairo
|
|
29
|
+
Requires-Dist: tk
|
|
30
|
+
Requires-Dist: requests
|
|
12
31
|
|
|
13
32
|
**************
|
|
14
33
|
Rowingdata
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
filename,type,nr_lines,year,month,day,hour,minute,second,dist,seconds,nrintervals,lap 1 time,lap 1 dist,timezone,lap 1 time new,lap 1 dist new,,,,
|
|
2
2
|
quiske_per_stroke_new.csv,quiske,139,2022,11,7,7,58,35,930,382,1,382,930,UTC,382,928,,,,
|
|
3
3
|
boatcoach_fixed_distance.csv,boatcoach,493,2022,6,13,12,31,37,1996,495,4,109,494,UTC,109,494,,,,
|
|
4
|
-
smartrow_intervals.csv,smartrow,739,0,0,0,0,0,0,6979,2335,1,2335,6979,UTC,2335,6970,,,,
|
|
5
|
-
smartrow.csv,smartrow,878,0,0,0,0,0,0,7836,3005,1,3005,7836,UTC,3005,7829,,,,
|
|
6
4
|
rowpro_carrick.csv,rp,1212,2022,1,19,17,33,0,10023,3608,10,422,1495,UTC,422,1493,,,,
|
|
7
5
|
fromnk.csv.gz,nklinklogbook,430,2021,7,7,17,33,28,3005,1062,12,60,250,UTC,60,250,,,,
|
|
8
6
|
herodata.csv,hero,300,2021,4,26,13,37,33,3512,896,1,896,3512,UTC,896,3509,,,,
|
|
@@ -258,12 +258,6 @@ class TestStringParser:
|
|
|
258
258
|
assert_equal(t6,d6)
|
|
259
259
|
assert_equal(t7,d7)
|
|
260
260
|
|
|
261
|
-
class TestMinutes:
|
|
262
|
-
def test_minutes(self):
|
|
263
|
-
row = rowingdata.rowingdata(csvfile='testdata/testdata.csv')
|
|
264
|
-
|
|
265
|
-
res = row.get_minutes_averages(' Cadence (stokes/min)')
|
|
266
|
-
assert_equal(len(res),9)
|
|
267
261
|
|
|
268
262
|
class TestPhysics:
|
|
269
263
|
row = rowingdata.rowingdata(csvfile='testdata/testdata.csv')
|
|
@@ -731,7 +725,7 @@ class TestSequence(unittest.TestCase):
|
|
|
731
725
|
if filetype not in ['unknown','c2log']:
|
|
732
726
|
assert_not_equal(res,0)
|
|
733
727
|
if res != 0:
|
|
734
|
-
for key,value in
|
|
728
|
+
for key,value in res.items():
|
|
735
729
|
if key not in ['summary']:
|
|
736
730
|
if expected[key] != 0:
|
|
737
731
|
assert_equal(value,expected[key])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|