Analyzing years of my Fitbit data: How is my fitness journey?

Analyzing years of my Fitbit data: How is my fitness journey?


I've owned a Fitbit device for many years. Never gave it too much thought! The dashboard and app they have is pretty nice for a daily review. But, what about looking back a couple of years to review what has slowly changed.

On my day job, I crunch health data from surveys given by thousands of (anonymised) individuals all the time. What about my own data though? I don't want to become a hypocrite - so, this is a personal project that uses my own data.

The pandemic did hit everyone's fitness levels I'm sure (I was completely out of commission due to a broken leg). Since it's lifted - I have to make conscious effort to get back to a fitness baseline.

So, tracking my own fitness was the first step. Now that I have accumulated a hefty amount of info, it is ripe for exploration. Read on to see how my fitness journey has evolved over the years.

This is a followup article to the previous one about downloading all your Fitbit data from their dashboard. If you haven't got your personal data yet, then find out how here.

Tracking my activity levels

My Fitbit Charge 4 has a plethora of data types that are being tracked simultaneously. This goes from heart rate (and its variability), to capillary oxygen saturation and all forms of sports including running to biking.

I love cycling, the feeling of wind in my hair and the ability to speed through small streets is exhilarating. To encompass all forms of activities - I chose to look at the total distance moved daily (with cycling and walking being one of the main contributor).

Just a quick few pointers here:

  • I've managed to travel an additional 500 km in 2022 vs 2021 ๐Ÿšดโ€โ™‚๏ธ. Coming out of the pandemic, and having a toddler that loves napping during long outdoor walks helps.
  • A stagnant section in 2021 is around the birth of my first child. It was all hands-on-deck then!
  • Completely lost motivation in 2023 - I had a couple of personal issues (health, family requiring care) come up and was not able to be consistent with basic tracking ๐Ÿซฃ.

Tracking my sleep

Sleep is a huge part of my life and one of my most precious resources now. It is even more so now with the addition of kids. At random points in the night, I might just be up to deal with .

My comparison of sleep before and after kids:

  • 1-3hr
  • 3-5hr
  • 5-6hr
  • 7hr+
  • ๐Ÿšซ

I had a lot of fun making this one. This is a neat representation of the three years of sleep data from my Fitbit. Each day is a block on the chart.

In the early part of 2021, I had good amounts of sleep. I had more 'hotspots' of low sleep amounts in 2022. Honestly, I had not realized this until looking back. This probably built up over time and totally wrecked me in 2023.

The start of 2023 was just rough and really affected my sleep duration. I had totally lapsed in my tracking in the middle and was just tired out. It ties closely with the reduced exercise too.

I've worked on fixing my sleep and exercise of late, and all trains are running again. ๐Ÿ’ช


Fitness trackers work well when they are automated, and doing their job behind the scenes (ie. auto-detection of different activities like swimming).

The main achilles heel is the battery life. It can be such a drag to get out and find out you need more juice. With the Fitbit, it has a proprietary charger that makes it inconvenient.

Maybe next iterations could look into a waterproof USB-C (is that even possible?). I have not tried out other options, though wireless charging could be convenient.

Evaluation process

This was a fun article to write up. Throughout the process, it took me multiple tools that got me to the end results and evaluation.

I had dipped my toes into this nifty tool called jq or JSON-query which is a command line tool in Bash. It works like SQL but on masses of JSON files. Really speedy and handy for initial exploration.

My bread-and-butter process is then spinning up Python and the ever-trusty Pandas library for data cleaning, processing and formatting. Once the data is fresh out of the oven, it is now time to furnish it for your viewing pleasure on the web. This is where plotlyJS (web and javascript portion of the Dash / Plotly ecosystem) comes into play. I tested out chartJS but it had a limited selection of chart types.

And of course, in between there is quite a bit of tweaking and testing out different layouts for the best way to show a story in data. This includes trying out various color schemes and UX fine-tuning.


I am trying something new here to optimize YOUR reading experience:

  • nice charts and not focusing on just code (I do supply code for members!)
  • more stories around data - so I'm avoiding any heavy statistics and going for simple and direct insights

Let me know if you like this style and want more!


For me to maintain a baseline level of fitness, I should aim to get about 10,000 steps for six days a week. This isn't too hard and takes under two hours (for comparison, my work commute is longer than this!).

I think this is a nice and achievable goal for me personally. It is somewhat comforting to have a solid, data-backed health insight for me to go on.

Sleep ties itself to energy levels and is an overlooked but important part of health.

It'd be fun to break down the data more. And another cool thing to do is to improve my tracking and see if it makes a large difference in the data collected. The lack of data itself is a signal! I'm excited to test out the modern trackers like the WHOOP 4.0 which lets me continue tracking whilst charging it on the go.

If you want me to help analyze your fitness data: reach out ๐Ÿ˜ƒ I am happy to offer a bespoke service!

Extra below โคต๏ธ: for members who sign up on the free newsletter, you can get access to the code that I used for my data exploration. Sign up if you want to improve your own understanding of your health & optimize it!

This post is for subscribers only

Already have an account? Sign in.
David Tang