Lee Foot

Topical Map Visualiser

Visualise tagged keyword CSVs as interactive D3.js zoomable circle packing charts.

View the source

#about

Reads a tagged keyword CSV with a two-level topic hierarchy (parent > subtopic > keyword) and builds a zoomable D3.js circle packing chart via Jinja2 templating.

Circles are sized by one of five metrics: count, impressions, clicks, first_page_count (position 1-10) or top_3_count (position 1-3).

The chart uses a 10-colour pastel palette with 0.6 opacity for parent nodes.

Outputs a standalone HTML file for sharing or embedding.

Platform
Python script (requires Python 3.x)
Input
Tagged keyword CSV with parent topic, subtopic and keyword columnsOptional: metric columns (impressions, clicks, or position from GSC)
Output
Interactive zoomable circle packing HTML chart. Click circles to zoom in, click background to zoom out.

Use cases

  • Visualising topical map output for content strategy presentations
  • Exploring keyword universe by topic and subtopic
  • Identifying content gaps in underrepresented topic areas
  • Communicating keyword coverage to stakeholders

#features

  • D3.js v6 zoomable circle packing chart
  • 5 sizing metrics: count, impressions, clicks, first_page_count, top_3_count
  • Jinja2 HTML templating with 10-colour pastel palette
  • Click-to-zoom navigation with 750ms animated transitions
  • Column mapping for parent, subtopic and keyword columns
  • Standalone HTML download for embedding or sharing

#how-to-use

  1. Upload a tagged keyword CSV
  2. Select the metric for circle sizing in the sidebar
  3. Map the parent topic, subtopic and keyword columns
  4. Map any required metric columns (position, impressions or clicks)
  5. Click Generate Chart
  6. Download the standalone HTML file

#faq

What CSV format does it expect?
A CSV with at least three columns representing a two-level hierarchy: parent topic, subtopic and keyword. Column names are mappable in the sidebar (defaults: Parent, Child, query). For metrics other than count, you also need a position, impressions or clicks column.
How does the count metric work?
Each keyword contributes a value of 1 regardless of any other data. Circle size reflects the number of keywords within each subtopic and parent topic. This is the only metric that requires no numeric columns beyond the hierarchy.
What do first_page_count and top_3_count measure?
first_page_count counts keywords with a position column value between 1 and 10 (inclusive). top_3_count counts keywords with position 1 to 3. Keywords outside those ranges contribute zero to their parent circle size.
Can I embed the chart in a presentation or report?
Yes. The Download HTML button gives you a standalone HTML file with inline D3.js v6. It loads the D3 library from d3js.org CDN, so an internet connection is needed when viewing. The chart is fully interactive with click-to-zoom.
How does the zoom interaction work?
Click any circle to zoom into it (750ms animated transition). Click the background to zoom back out to the root level. Hold Alt while clicking for a slowed 7,500ms transition. Labels appear only for the focused level's children.

/contact

Want me to run this for you? I run this tool as a managed service, or build something custom around your data. You get the insights without touching the code.