{"id":15673536,"url":"https://github.com/alancoding/gpxstats","last_synced_at":"2025-02-22T11:43:50.549Z","repository":{"id":144899624,"uuid":"51559584","full_name":"AlanCoding/gpxstats","owner":"AlanCoding","description":"Project to gobble up some personal Garmin navigator data","archived":false,"fork":false,"pushed_at":"2017-01-29T21:31:09.000Z","size":38,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-03T05:39:15.678Z","etag":null,"topics":["gps-unit","gpx"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlanCoding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-02-12T01:03:29.000Z","updated_at":"2017-01-29T21:31:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"1cd620a5-555d-4095-a756-814d89efbe3e","html_url":"https://github.com/AlanCoding/gpxstats","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlanCoding%2Fgpxstats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlanCoding%2Fgpxstats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlanCoding%2Fgpxstats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlanCoding%2Fgpxstats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlanCoding","download_url":"https://codeload.github.com/AlanCoding/gpxstats/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240170064,"owners_count":19759143,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gps-unit","gpx"],"created_at":"2024-10-03T15:41:10.340Z","updated_at":"2025-02-22T11:43:50.518Z","avatar_url":"https://github.com/AlanCoding.png","language":"Python","readme":"[![Build Status](https://travis-ci.org/AlanCoding/gpxstats.svg?branch=master)](https://travis-ci.org/AlanCoding/gpxstats)\n\n# GPX Stats Project\n\nThis is my project to gobble up some personal Garmin navigator data.\nIts point is to be a data grinder for anyone who owns a navigation unit \nand drives around with it regularly. The kinds of questions it hopes to \neventually answer are things like:\n\n - Where places did you visit most?\n - What speeds do you typically drive at?\n - What are the highest elevations you drive to?\n - What's the hardest you've ever braked?\n\n### Site Map\n\nFor research about some related resources, see [the notes page](docs/Notes.md).\nFor some pretty graphs see [the data analysis examples](docs/data_examples.md).\n\n## Instructions\n\nDid you know that your GPS unit is probably storing a record of everywhere \nyou go? Creeped out? Turn those lemons into lemonade today.\n\n### \"In Real Life\" Instructions\n\nPlug in your Garmin unit to your computer and copy over the files in the\ngpx archive folder into the archive folder of this project. These should\nfollow a filename pattern like:\n\n - 1.gpx\n - 2.gpx\n - 3.gpx\n \nThe unit will store these sequentially as you drive, but it will delete \nold ones as it accumulates new data. Thus, I can't predict what numbers\nyou will see.\n\n### Python Instructions\n\nYou must put them in the archive folder with this naming. Then you can run the\nanalyzer with `python analyze.py`. Or, you can import the python module, and\nthen use it kind of like this:\n\n```python\nfrom gpxstats.objects import Archive\n\narchive = Archive('archive/')\n\nfor pt in archive:\n    print(pt.speed)\n```\n\n#### Using the generator\n\nThe above example is the class-based implementation, and in addition to that\nthere is a generator-based implementation in order to provide a lighter\noption to cycle through points.\n\n\n\n## Questions\n\nHow can we take our extremely obvious intuition and apply it to a large set\nof data like this? Some boundaries are easy to draw. I'm pretty sure my car\nnever went 1,000 miles per hour, so if we see that, it's safe to say that we\ncan mark some points as invalid. But our intuition is much more detailed than\nthis.\n\n\n## Discoveries about Archive Character\n\nUnderstanding exactly what type of thing a GPS unit stores is a trial and \nerror process.\n\n### Packaged speed values\n\nThe Garmin units appear to record speed only in specific increments. These\nincrements seem to be 1.37 or 1.38, depending on how the rounding works out.\nHere are a few of the first set of speeds that the unit uses:\n\n    1.37, 2.75, 4.12, 5.49, 6.86, 8.24, 9.61, 10.98, 12.35, 13.73, 15.1, 16.47\n\nIn terms of units, there are almost certainly in terms of meters per second.\n\n### Data Imperfections\n\nAs of version 0.1, we can get a list of the top attributes for various fields.\nMany of these just demonstrate where the data is bad. I will explain this \npoint-by-point.\n\n#### Elevation\n\nI found about 9 clusters of highly negative elevation values. Again, no, \nI did not drive into Death Vally or something real like that. These are data \nartifacts that will eventually need to get ironed out somehow.\n\n## Roadmap\n\nFuture features:\n\n - Data cleaning process that will drop a point if there is something \n   suspicious about it\n - Segment-based objects that will store information about driving between \n   stops\n - Trip and destination based objects\n\nThe final point is the spiffy ultimate goal, but the intermediate steps \nremain a little more murky. Should we store all segments in an array for \nthe entire archive? That's not entirely clear.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falancoding%2Fgpxstats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falancoding%2Fgpxstats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falancoding%2Fgpxstats/lists"}