{"id":16277622,"url":"https://github.com/erikbjare/quantifiedme","last_synced_at":"2025-10-17T10:13:49.549Z","repository":{"id":37198106,"uuid":"134724751","full_name":"ErikBjare/quantifiedme","owner":"ErikBjare","description":"Analyzing all my Quantified Self data","archived":false,"fork":false,"pushed_at":"2024-06-25T21:27:02.000Z","size":24004,"stargazers_count":64,"open_issues_count":3,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-01T21:48:28.988Z","etag":null,"topics":["activitywatch","analytics","fitbit","fitness-tracker","google-location-history","heart-rate","lifedata","lifelogging","oura","quantified-self","sleep-analysis","time-tracking","whoop"],"latest_commit_sha":null,"homepage":"https://erik.bjareholt.com/quantifiedme/Dashboard.html","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/ErikBjare.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":"2018-05-24T14:11:10.000Z","updated_at":"2025-03-22T12:07:18.000Z","dependencies_parsed_at":"2022-08-02T12:30:58.630Z","dependency_job_id":"2536cf93-5f40-4d4d-83c7-6f2e4b428b31","html_url":"https://github.com/ErikBjare/quantifiedme","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ErikBjare/quantifiedme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErikBjare%2Fquantifiedme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErikBjare%2Fquantifiedme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErikBjare%2Fquantifiedme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErikBjare%2Fquantifiedme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ErikBjare","download_url":"https://codeload.github.com/ErikBjare/quantifiedme/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErikBjare%2Fquantifiedme/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261280139,"owners_count":23134904,"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":["activitywatch","analytics","fitbit","fitness-tracker","google-location-history","heart-rate","lifedata","lifelogging","oura","quantified-self","sleep-analysis","time-tracking","whoop"],"created_at":"2024-10-10T18:55:47.073Z","updated_at":"2025-10-17T10:13:49.447Z","avatar_url":"https://github.com/ErikBjare.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"QuantifiedMe\n============\n\n[![Build](https://github.com/ErikBjare/quantifiedme/actions/workflows/build.yml/badge.svg)](https://github.com/ErikBjare/quantifiedme/actions/workflows/build.yml)\n[![codecov](https://codecov.io/gh/ErikBjare/quantifiedme/branch/master/graph/badge.svg?token=zZ7hwaw9tR)](https://codecov.io/gh/ErikBjare/quantifiedme)\n\nLoading and plotting of various Quantified Self data sources.\n\nYou can see an example notebook with fake data built in CI [down below](#notebooks).\n\n**Note:** This code is only used by me, as far as I know, but I encourage you to try it out anyway, and report or send PRs for any issues you encounter. I will try to keep it tidy and somewhat usable.\n\n\n## Features\n\nThe code in this repository generally loads data from some source into a Pandas dataframe, and provides tools to process, aggregate, and plot the data. \n\nThis makes it a useful toolkit for exploratory data analysis with Jupyter notebooks, for example.\n\nTypes of data supported:\n\n - Time tracking data (from ActivityWatch, Toggl, SmarterTime)\n - Sleep data (from Fitbit, Oura, Whoop)\n - Heartrate data (from Fitbit, Oura, Whoop)\n - Location data (from Google Location History)\n   - Includes basic plotting of time spent in a certain location.\n   - Includes function for computing the colocation time of two location histories (time spent together).\n - Habit data (from HabitBull)\n   - Includes a calendar plot.\n   - Easy to adapt to any other habit app that supports CSV export\n - Drug consumption (from QSlang)\n\nCan load data from:\n\n - ActivityWatch\n - Fitbit\n - Whoop\n - Oura\n - EEG devices (WIP)\n - ...and more (see `src/quantifiedme/load/`)\n\nIt also contains a bunch of useful tools for aggregating or otherwise deriving data from the sources, including helper tools for combining multiple sources for the same type of data (see `src/quantifiedme/derived`).\n\n## Notebooks\n\nThere is currently only one example notebook.\n\n - Dashboard - Preview at: https://erik.bjareholt.com/quantifiedme/Dashboard.html\n   - Uses ActivityWatch and SmarterTime data from multiple devices (desktop, laptop, phone) to create a unified overview of time spent. \n   - Used by me as a sort of personal-productivity dashboard.\n   - Plots things like:\n     - hours worked per day (and on what)\n     - which categories are consuming most of my time on a 30-day and 365-day basis\n     - how much I make in \"fictional salary\" over time (by assigning an hourly wage to each category)\n\nI also have a collection of private notebooks for exploratory analysis, which I hope to share later.\n\n\n## Configuration\n\nThe configuration is used to specify where data files are located, as well as a few settings.\n\nAn example configuration file is provided in `config.example.toml`.\n\n\n## Related projects\n\n - [HPI](https://github.com/karlicoss/HPI) (\"Human Programming Interface\") by @karlicoss\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferikbjare%2Fquantifiedme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferikbjare%2Fquantifiedme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferikbjare%2Fquantifiedme/lists"}