Exploring Family Trees - a D3 Visualization

Note: this has been updated to allow loading your own GEDCOM files or viewing sample trees. The updated site is at https://learnforeverlearn.com/ancestors/

My wife loves to play around on Ancestry.com.  Every now and then, I'll help her out with one of the trees.  It's interesting, and fun to see those little dynamic leaves pop up when there is a "hint", and you can then see about going further back in time.   Genealogy is a huge business.  Every one of us has a family tree, and we like seeing where we come from.  That's how we got here.

On one of the recent Ancestry shows "Who Do You Think You Are", the hosts got Cindy Crawford all excited because they could trace her lineage to Charlemagne, who lived in the 700's.  Of course, based on a number of factors, it would have been far more interesting if she had NOT been related to Charlemagne.  What they showed her was one path back to Charlemagne.  There are many more ancestors at each level, and we know that, but we are so bad at comprehending exponential growth that this kind of connection can sound impressive.  We might read how everyone should be related to Charlemagne, and how the number of our direct ancestors explodes very quickly as you start going back in time, but it is still hard to grasp that.

This has led me to want to come up with a visualization or visualizations that might be able to make this growth more plain (and to play with other features of d3.js).



My first steps in this direction (using d3) are available here:

 https://googledrive.com/host/0B2GQktu-wcTicXJlYWpfVm1Gd2M/

Viewing Ten Generations of Your Ancestors
(https://learnforeverlearn.com/ancestors/)
This current version shows ten generations back, showing all 2000 or so ancestors (updated version lets you view your own GEDCOM files).  You can change the birth year of the "start person", and if you mouseover the nodes, it will display that ancestor's relationship to you and some other info.  The birth years of the ancestors are randomly chosen, based on a mother age at birth of between 15 and 30, and the father's age at or slightly above the mother's age.  I haven't yet sought out detailed information for age at birth, but I'm sure I can improve this (although I'm not sure how much difference it will make to the overall qualitative results).

One thing I definitely want to play with is that of "pedigree collapse", whereby there is (usually distant) "inbreeding" further back in the tree.  This results in many of those circles being the same person. Pedigree collapse is inevitable given the exponential growth of ancestors and the actual population of the world.

As for d3, the tree is a modified version of the d3 tree layout, where I've modified the "y" values to work with the time scale.  The amount of drudgery that d3 takes care of when mapping scales is priceless - this greatly simplified the mapping from mouse position to year on the vertical scale.

Popular Posts