top of page

Data Breaches

An interactive storytelling project for Bitsight analysing US data breaches, combining exploratory analysis to an interactive visualisation.

Year

2023

Clients

Bitsight

Tools

HTML, CSS, JS, d3.js, arquero.js, plot.js

Topics

Cybersecurity, data breaches · Barcode chart · Small multiples · Interactive storytelling · Severity encoding

Description

This project was created to address the learning gap in D3.js. While simple tutorials exist, the leap to the stunning real-world projects online is steep. To help bridge this, I built a 30-day challenge in Observable notebooks, where each day introduced new concepts, visualizations, or challenges.
The series started with fundamentals like scales, selections, and data binding, but quickly moved into real visualization challenges. One example was building a scatterplot with Spotify data containing nearly 30,000 points. I tackled overplotting using small circle sizes and opacity, then added animation to reveal points sequentially, and finally built rich tooltips for interactivity. Other notebooks explored advanced visualizations like hexbin plots and animated line graphs.

Learnings

I learned how to structure a teaching progression in D3, balancing clarity of explanation with a wide variety of chart types. I deepened my knowledge of dynamic vs. static visualisation, tooltips, animation, and interactivity. I also discovered how powerful notebooks are for combining explanation, code, and visuals in one place.

Challenges

The hardest part was balancing depth vs. breadth: explaining enough for learners to follow while still producing a wide collection of visualisations. Another challenge was creating designs that were not only functional but elegant, with tooltips, animations, and interactions carefully crafted.

Impact

The notebook series became a practical learning tool for others interested in D3, offering a structured way to go from basics to advanced. It also strengthened my own mastery of D3 and my ability to explain it clearly.

bottom of page