Skip to content

Instantly share code, notes, and snippets.

@agware
Last active February 26, 2017 23:11
Show Gist options
  • Save agware/46040e1583f91d3a899cdc7fbf7d2a7a to your computer and use it in GitHub Desktop.
Save agware/46040e1583f91d3a899cdc7fbf7d2a7a to your computer and use it in GitHub Desktop.
Code Jumping in WAFL
license: gpl-3.0

As the AFL Women's league has gotten up and running, there's been a lot of talk about players transitioning from other sports to play AFL. I wanted to practice making force directed graphs whilst also investigating just how prevalent code jumping is.

Overall I think the main thing I learnt is that a disproportionately large number of women have some sort of background in javelin. If anyone has any theories about why that is, I'm really curious.

For a player to be linked with AFL they had to have played more than 5 matches, at least one of which had to be before 2016. They also had to have played at least one game in the previous 3 years.

Any mistakes in the data are almost certainly my own, please feel free to contact me if you notice anything.

Credit

The force directed graph was modelled on that created by Mike Bostock.

All information was gathered from the AFL player profiles and data available on SportsTG.

Colours used are slightly modified versions of colour palettes available on Colour Brewer 2.0.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Code Jumping in WAFL</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
const width = 960;
const height = 500;
const club = ['adelaide', 'gws', 'melbourne', 'brisbane', 'bulldogs', 'carlton', 'fremantle', 'collingwood'];
const contract = ['marquee', 'rookie', 'priority', 'free agent', 'regular'];
// contract type is colorbrewer2
const color = {
'marquee': '#c7e9b4',
'rookie': '#7fcdbb',
'priority': '#1d91c0',
'free agent': '#12578c',
'regular': '#081d58',
'adelaide': '#ffe303',
'brisbane': '#b15928',
'carlton': '#253494',
'collingwood': '#000',
'fremantle': '#6a3d9a',
'gws': '#ff7f00',
'melbourne': '#e31a1c',
'bulldogs': '#1f78b4'
};
const buttons = [
{name: 'Contract Type', id: 'contract', state: true, y: 0},
{name: 'Club', id: 'club', state: false, y: 60}
];
const buttonsDims = {r: 15, ringOffset: 6, textOffset: 5,
xOffset: 200, yOffset: 80, xLegendOffset: 400, yLegendOffset: 120};
let svg = d3.select('body').append('svg')
.attr('width', width)
.attr('height', height);
let simulation = d3.forceSimulation()
.force('link', d3.forceLink().id(function(d) { return d.id; }))
.force('charge', d3.forceManyBody());
d3.json('sports.json', function(error, graph) {
if (error) throw error;
const nodeR = {player: 5, sport: 9};
let link = svg.append('g')
.attr('class', 'link')
.selectAll('line')
.data(graph.links)
.enter().append('line');
let node = svg.append('g')
.classed('node', true)
.selectAll('circle')
.data(graph.nodes)
.enter().append('circle')
.attr('r', function(d) { return d.type == 'player' ? nodeR.player : nodeR.sport; })
.attr('id', function(d) { return d.id.replace(/\s+/g, ''); })
.classed('player', function(d) { return d.type == 'player'; })
.classed('sport', function(d) { return d.type == 'sport'; })
.on('mouseover', mouseOverNode)
.on('mouseout', mouseOut)
.call(d3.drag()
.on('start', dragstarted)
.on('drag', dragged)
.on('end', dragended));
let players = d3.selectAll('.player')
.style('fill', function(d) { return color[d.contract]; });
for (let i = 0; i < contract.length; i++) {
players.classed(contract[i].replace(/\s+/g, ''), function(d) {return d.contract == contract[i]; });
}
for (let i = 0; i < club.length; i++) {
players.classed(club[i].replace(/\s+/g, ''), function(d) {return d.club == club[i]; });
}
node.append('title')
.text(function(d) { return d.id; });
simulation
.nodes(graph.nodes)
.on("tick", ticked);
simulation.force('link')
.links(graph.links);
function ticked() {
link
.attr('x1', function(d) { return d.source.x; })
.attr('y1', function(d) { return d.source.y; })
.attr('x2', function(d) { return d.target.x; })
.attr('y2', function(d) { return d.target.y; });
node
.attr('cx', function(d) { return d.x; })
.attr('cy', function(d) { return d.y; });
}
});
svg.append('g')
.attr('transform', 'translate(' + (width - buttonsDims.xOffset) + ',' + buttonsDims.yOffset + ')')
.attr('id', 'buttons')
.selectAll('circle')
.data(buttons)
.enter().append('circle')
.attr('cy', function(d) {return d.y; })
.attr('r', buttonsDims.r + buttonsDims.ringOffset)
.attr('id', function(d) {return d.id + 'Ring'; })
.classed('active', function(d) {return d.state; })
.classed('ring', true);
d3.select('#buttons').append('g')
.selectAll('circle')
.data(buttons)
.enter().append('circle')
.attr('cy', function(d) {return d.y; })
.attr('r', buttonsDims.r)
.classed('click', true)
.on('click', clicked);
d3.select('#buttons').selectAll('text')
.data(buttons)
.enter().append('text')
.attr('x', buttonsDims.r + buttonsDims.ringOffset + buttonsDims.textOffset)
.attr('y', function(d) {return d.y + buttonsDims.textOffset; })
.text(function(d) {return d.name});
const legendTitles = [{id: 'contract', state: true}, {id: 'club', state: false}];
d3.select('#buttons').append('g')
.attr('transform', 'translate(' + buttonsDims.xLegendOffset + ',' + buttonsDims.yLegendOffset + ')')
.attr('id', 'legend');
d3.select('#legend').selectAll('g')
.data(legendTitles)
.enter().append('g')
.attr('transform', function(d) {return 'translate(' + (d.state ? -(buttonsDims.xLegendOffset + 30) : 0) + ',0)'; })
.attr('id', function(d) {return d.id + 'G'});
createLegend(legendTitles[0].id, contract);
createLegend(legendTitles[1].id, club);
function createLegend(title, data) {
const legendDims = {width: 50, height: 30, gap: 35, round: 5, xText: 60, yText: 20};
d3.select('#' + title + 'G').selectAll('rect')
.data(data)
.enter().append('rect')
.attr('width', legendDims.width)
.attr('height', legendDims.height)
.attr('y', function(d,i) {return legendDims.gap*i; })
.attr('rx', legendDims.round)
.attr('ry', legendDims.round)
.style('fill', function(d,i) {return color[data[i]]; })
.on('mouseover', mouseOverLegend)
.on('mouseout', mouseOut);
d3.select('#' + title + 'G').selectAll('text')
.data(d3.range(data.length))
.enter().append('text')
.attr('x', legendDims.xText)
.attr('y', function(d) {return legendDims.gap*d + legendDims.yText; })
.text(function(d) {return data[d]; });
}
function mouseOverNode(d2) {
// lower link opacity if it doesn't link to the sport
let links = svg.selectAll('line');
links
.classed('fadeLink', function(d) {return !(d.source === d2 || d.target === d2)})
.classed('connectedLink', function(d) {return (d.source === d2 || d.target === d2); });
d3.selectAll('.sport').classed('fadeNode', true);
d3.selectAll('.player').classed('fadeNode', true);
d3.select(this).classed('fadeNode', false);
let linkData = d3.selectAll('.connectedLink').data();
if (d2.type == 'sport') {
for (let i = 0; i < linkData.length; i++) {
let source = linkData[i].source;
let id = source.id;
id = id.replace(/\s+/g, '');
d3.select('#' + id).classed('fadeNode', false);
}
} else {
for (let i = 0; i < linkData.length; i++) {
let target = linkData[i].target;
let id = target.id;
id = id.replace(/\s+/g, '');
d3.select('#' + id).classed('fadeNode', false);
}
}
}
function mouseOverLegend(d2) {
let id = d2.replace(/\s+/g, '');
d3.selectAll('.player').classed('fadeNode', true);
d3.selectAll('.' + id).classed('fadeNode', false);
d3.selectAll('line')
.classed('fadeLink', function(d) {return !(d.source.contract === d2 || d.source.club === d2)})
.classed('connectedLink', function(d) {return (d.source.contract === d2 || d.source.club === d2)});
d3.selectAll('.sport').classed('fadeNode', true);
let linkData = d3.selectAll('.connectedLink').data();
for (let i = 0; i < linkData.length; i++) {
let target = linkData[i].target;
let id = target.id;
id = id.replace(/\s+/g, '');
d3.select('#' + id).classed('fadeNode', false);
}
}
function mouseOut() {
d3.selectAll('.fadeNode').classed('fadeNode', false);
d3.selectAll('.connectedLink').classed('connectedLink', false);
d3.selectAll('.fadeLink').classed('fadeLink', false);
}
function dragstarted(d) {
if (!d3.event.active) simulation.alphaTarget(0.3).restart();
d.fx = d.x;
d.fy = d.y;
}
function dragged(d) {
d.fx = d3.event.x;
d.fy = d3.event.y;
}
function dragended(d) {
if (!d3.event.active) simulation.alphaTarget(0);
if (d.type != 'sport') {
d.fx = null;
d.fy = null;
}
}
function clicked(d2) {
d3.select('#buttons').selectAll('circle').classed('active', false);
d3.select('#' + d2.id + 'Ring').classed('active', true);
d3.selectAll('.player').style('fill', function(d) {return color[d[d2.id]];});
d3.select('#legend').selectAll('g')
.transition()
.duration(2000)
.attr('transform', function(d) {return 'translate(' + (d.id == d2.id ? -(buttonsDims.xLegendOffset + 30) : 0) + ',0)'; })
.style('fill-opacity', function(d) {return d.id == d2.id ? 1 : 0});
}
</script>
</body>
</html>
{
"nodes": [
{"id": "AFL", "type": "sport", "fx": 380, "fy": 250},
{"id": "Volleyball", "type": "sport", "fx": 521.9, "fy": 298.7},
{"id": "Rugby", "type": "sport", "fx": 498.4, "fy": 342.1},
{"id": "Touch Football", "type": "sport", "fx": 462, "fy": 375.6},
{"id": "Cricket", "type": "sport", "fx": 416.8, "fy": 395.4},
{"id": "Softball", "type": "sport", "fx": 367.6, "fy": 399.5},
{"id": "Tennis", "type": "sport", "fx": 319.7, "fy": 387.4},
{"id": "Futsal", "type": "sport", "fx": 278.4, "fy": 360.4},
{"id": "Soccer", "type": "sport", "fx": 248.1, "fy": 321.4},
{"id": "Athletics", "type": "sport", "fx": 232, "fy": 274.7},
{"id": "Rowing", "type": "sport", "fx": 232, "fy": 225.3},
{"id": "Netball", "type": "sport", "fx": 248.1, "fy": 178.6},
{"id": "Basketball", "type": "sport", "fx": 278.4, "fy": 139.6},
{"id": "Javelin", "type": "sport", "fx": 319.7, "fy": 112.6},
{"id": "Bobsled", "type": "sport", "fx": 367.6, "fy": 100.5},
{"id": "Baseball", "type": "sport", "fx": 416.8, "fy": 104.6},
{"id": "American Football", "type": "sport", "fx": 462, "fy": 124.4},
{"id": "Ultimate Frisbee", "type": "sport", "fx": 498.4, "fy": 157.9},
{"id": "Gaellic Football", "type": "sport", "fx": 521.9, "fy": 201.3},
{"id": "Ice Skating", "type": "sport", "fx": 530, "fy": 250},
{"id": "Chelsea Randall", "contract": "marquee", "club": "adelaide", "type": "player"},
{"id": "Kellie Gibson", "contract": "marquee", "club": "adelaide", "type": "player"},
{"id": "Courtney Cramey", "contract": "priority", "club": "adelaide", "type": "player"},
{"id": "Angela Foley", "contract": "priority", "club": "adelaide", "type": "player"},
{"id": "Ebony Marinoff", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Heather Anderson", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Jenna McCormick", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Deni Varnhagen", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Sally Riley", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Georgia Bevan", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Sophie Armitstead", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Talia Radan", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Rachael Killian", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Rhiannon Metcalfe", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Anne Hatchard", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Tayla Thorn", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Abbey Holmes", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Stevie-Lee Thompson", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Jessica Sedunary", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Sarah Allan", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Justine Mules", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Monique Hollick", "contract": "regular", "club": "adelaide", "type": "player"},
{"id": "Lauren OShea", "contract": "free agent", "club": "adelaide", "type": "player"},
{"id": "Dayna Cox", "contract": "free agent", "club": "adelaide", "type": "player"},
{"id": "Sarah Perkins", "contract": "free agent", "club": "adelaide", "type": "player"},
{"id": "Erin Phillips", "contract": "rookie", "club": "adelaide", "type": "player"},
{"id": "Jasmine Anderson", "contract": "rookie", "club": "adelaide", "type": "player"},
{"id": "Tayla Harris", "contract": "marquee", "club": "brisbane", "type": "player"},
{"id": "Sabrina Frederick-Traub", "contract": "marquee", "club": "brisbane", "type": "player"},
{"id": "Emma Zielke", "contract": "priority", "club": "brisbane", "type": "player"},
{"id": "Kaitlyn Ashmore", "contract": "priority", "club": "brisbane", "type": "player"},
{"id": "Emily Bates", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Tahlia Randall", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Nicole Hildebrand", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Leah Kaslar", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Jessica Wuetschner", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Alexandra Anderson", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Breanna Koenen", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Megan Hunt", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Samantha Virgo", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Kate Lutkins", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Kate McCarthy", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Shaleise Law", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Selina Goodman", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Sharni Webb", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Nikki Wallace", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Jamie Stanton", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Jade Ransfield", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Brittany Gibson", "contract": "regular", "club": "brisbane", "type": "player"},
{"id": "Jordan Membrey", "contract": "free agent", "club": "brisbane", "type": "player"},
{"id": "Caitlin Collins", "contract": "free agent", "club": "brisbane", "type": "player"},
{"id": "Shannon Campbell", "contract": "free agent", "club": "brisbane", "type": "player"},
{"id": "Kate Deegan", "contract": "rookie", "club": "brisbane", "type": "player"},
{"id": "Delissa Kimmince", "contract": "rookie", "club": "brisbane", "type": "player"},
{"id": "Brianna Davey", "contract": "marquee", "club": "carlton", "type": "player"},
{"id": "Darcy Vescio", "contract": "marquee", "club": "carlton", "type": "player"},
{"id": "Lauren Arnell", "contract": "priority", "club": "carlton", "type": "player"},
{"id": "Bianca Jakobsson", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Kate Gillespie-Jones", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Sarah Hosking", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Gabriella Pound", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Danielle Hardiman", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Shae Audley", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Bella Ayre", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Lauren Brazzale", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Breann Moody", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Jessica Hosking", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Natalie Plane", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Sarah Last", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Tilly Lucas-Rodd", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Katie Loynes", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Madeline Keryk", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Kate Darby", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Alison Downie", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Laura Attard", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Rebecca Privitelli", "contract": "regular", "club": "carlton", "type": "player"},
{"id": "Alison Brown", "contract": "free agent", "club": "carlton", "type": "player"},
{"id": "Jessica Kennedy", "contract": "free agent", "club": "carlton", "type": "player"},
{"id": "Hayley Trevean", "contract": "free agent", "club": "carlton", "type": "player"},
{"id": "Nat Exon", "contract": "rookie", "club": "carlton", "type": "player"},
{"id": "Kate Shierlaw", "contract": "rookie", "club": "carlton", "type": "player"},
{"id": "Moana Hope", "contract": "marquee", "club": "collingwood", "type": "player"},
{"id": "Emma King", "contract": "marquee", "club": "collingwood", "type": "player"},
{"id": "Meg Hutchins", "contract": "priority", "club": "collingwood", "type": "player"},
{"id": "Nicola Stevens", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Stephanie Chiocci", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Sarah DArcy", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Brittany Bonnici", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Bree White", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Caitlyn Edwards", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Alicia Eva", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Amelia Barden", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Stacey Livingstone", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Jessica Cameron", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Jasmine Garner", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Emma Grant", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Penny Cula-Reid", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Lauren Tesoriero", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Melissa Kuys", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Cecilia Mcintosh", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Christina Bernardi", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Ruby Schleicher", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Tara Morgan", "contract": "regular", "club": "collingwood", "type": "player"},
{"id": "Kendra Heil", "contract": "free agent", "club": "collingwood", "type": "player"},
{"id": "Lou Watton", "contract": "free agent", "club": "collingwood", "type": "player"},
{"id": "Sophie Casey", "contract": "free agent", "club": "collingwood", "type": "player"},
{"id": "Kate Sheahan", "contract": "rookie", "club": "collingwood", "type": "player"},
{"id": "Helen Roden", "contract": "rookie", "club": "collingwood", "type": "player"},
{"id": "Kara Donnellan", "contract": "marquee", "club": "fremantle", "type": "player"},
{"id": "Kiara Bowers", "contract": "marquee", "club": "fremantle", "type": "player"},
{"id": "Ebony Antonio", "contract": "priority", "club": "fremantle", "type": "player"},
{"id": "Kirby Bentley", "contract": "priority", "club": "fremantle", "type": "player"},
{"id": "Hayley Miller", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Brianna Green", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Ashley Sharp", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Lara Filocamo", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Tiah Haynes", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Kira Phillips", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Tayla Bresland", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Amy Lavell", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Stacey Barr", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Melissa Caulfield", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Cassie Davidson", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Taylah Angel", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Belinda Smith", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Stephanie Cain", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Kelly Clinch", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Demi Okely", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Dana Hooker", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Akec Makur Chuot", "contract": "regular", "club": "fremantle", "type": "player"},
{"id": "Emily Bosner", "contract": "free agent", "club": "fremantle", "type": "player"},
{"id": "Taryn Priestly", "contract": "free agent", "club": "fremantle", "type": "player"},
{"id": "Gemma Houghton", "contract": "free agent", "club": "fremantle", "type": "player"},
{"id": "Tarnica Golisano", "contract": "free agent", "club": "fremantle", "type": "player"},
{"id": "Kim Mickle", "contract": "rookie", "club": "fremantle", "type": "player"},
{"id": "Gabby OSullivan", "contract": "rookie", "club": "fremantle", "type": "player"},
{"id": "Renee Forth", "contract": "marquee", "club": "gws", "type": "player"},
{"id": "Emma Swanson", "contract": "marquee", "club": "gws", "type": "player"},
{"id": "Alex Williams", "contract": "priority", "club": "gws", "type": "player"},
{"id": "Maddy Collier", "contract": "priority", "club": "gws", "type": "player"},
{"id": "Louise Stephenson", "contract": "priority", "club": "gws", "type": "player"},
{"id": "Phoebe McWilliams", "contract": "priority", "club": "gws", "type": "player"},
{"id": "Jessica Dal Pos", "contract": "priority", "club": "gws", "type": "player"},
{"id": "Nicola Barr", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Ashleigh Guest", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Aimee Schmidt", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Rebecca Beeson", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Kate Stanton", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Erin McKinnon", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Mai Nguyen", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Amanda Farrugia", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Jacinda Barclay", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Britt Tully", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Kristy De Pellegrini", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Renee Tomkins", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Clare Lawton", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Ella Ross", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Stephanie Walker", "contract": "regular", "club": "gws", "type": "player"},
{"id": "Codie Briggs", "contract": "free agent", "club": "gws", "type": "player"},
{"id": "Isabella Rudolph", "contract": "free agent", "club": "gws", "type": "player"},
{"id": "Hannah Wallett", "contract": "free agent", "club": "gws", "type": "player"},
{"id": "Alex Saundry", "contract": "free agent", "club": "gws", "type": "player"},
{"id": "Jessica Bibby", "contract": "rookie", "club": "gws", "type": "player"},
{"id": "Ellie Brush", "contract": "rookie", "club": "gws", "type": "player"},
{"id": "Daisy Pearce", "contract": "marquee", "club": "melbourne", "type": "player"},
{"id": "Melissa Hickey", "contract": "marquee", "club": "melbourne", "type": "player"},
{"id": "Karen Paxman", "contract": "priority", "club": "melbourne", "type": "player"},
{"id": "Elise ODea", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Deanna Berry", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Richelle Cranston", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Lauren Pearce", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Alyssa Mifsud", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Shelley Scott", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Katherine Smith", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Emma Humphries", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Stephanie De Bortoli", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Lily Mithen", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Ainslie Kemp", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Mia-Rae Clifford", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Brooke Patterson", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Jessica Anderson", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Madeleine Boyd", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Pepa Randall", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Sarah Lampard", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Jasmine Grierson", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Sarah Jolly", "contract": "regular", "club": "melbourne", "type": "player"},
{"id": "Meg Downie", "contract": "free agent", "club": "melbourne", "type": "player"},
{"id": "Laura Corrigan", "contract": "free agent", "club": "melbourne", "type": "player"},
{"id": "Aliesha Newman", "contract": "free agent", "club": "melbourne", "type": "player"},
{"id": "Cat Phillips", "contract": "rookie", "club": "melbourne", "type": "player"},
{"id": "Harriet Cordner", "contract": "rookie", "club": "melbourne", "type": "player"},
{"id": "Katie Brennan", "contract": "marquee", "club": "bulldogs", "type": "player"},
{"id": "Ellie Blackburn", "contract": "marquee", "club": "bulldogs", "type": "player"},
{"id": "Emma Kearney", "contract": "priority", "club": "bulldogs", "type": "player"},
{"id": "Jaimee Lambert", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Aasta OConnor", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Hannah Scott", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Kirsten Mcleod", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Kimberley Ebb", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Hayley Wildes", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Brooke Lochland", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Bailey Hunt", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Ellyse Gamble", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Lauren Spark", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Nicole Callinan", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Lisa Williams", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Lauren Morecroft", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Tiana Ernst", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Kate Tyndall", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Courtney Clarkson", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Jess Gardner", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Kirsty Lamb", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Laura Bailey", "contract": "regular", "club": "bulldogs", "type": "player"},
{"id": "Rebecca Neaves", "contract": "free agent", "club": "bulldogs", "type": "player"},
{"id": "Meg McDonald", "contract": "free agent", "club": "bulldogs", "type": "player"},
{"id": "Angelica Gogos", "contract": "free agent", "club": "bulldogs", "type": "player"},
{"id": "Libby Birch", "contract": "rookie", "club": "bulldogs", "type": "player"},
{"id": "Romy Timmins", "contract": "rookie", "club": "bulldogs", "type": "player"}
],
"links": [
{"source": "Chelsea Randall", "target": "AFL"},
{"source": "Kellie Gibson", "target": "AFL"},
{"source": "Kellie Gibson", "target": "Rugby"},
{"source": "Courtney Cramey", "target": "AFL"},
{"source": "Angela Foley", "target": "AFL"},
{"source": "Ebony Marinoff", "target": "AFL"},
{"source": "Heather Anderson", "target": "AFL"},
{"source": "Jenna McCormick", "target": "Soccer"},
{"source": "Deni Varnhagen", "target": "AFL"},
{"source": "Deni Varnhagen", "target": "Soccer"},
{"source": "Sally Riley", "target": "AFL"},
{"source": "Sally Riley", "target": "Netball"},
{"source": "Georgia Bevan", "target": "AFL"},
{"source": "Georgia Bevan", "target": "Softball"},
{"source": "Sophie Armitstead", "target": "AFL"},
{"source": "Sophie Armitstead", "target": "Rugby"},
{"source": "Sophie Armitstead", "target": "Touch Football"},
{"source": "Talia Radan", "target": "AFL"},
{"source": "Rachael Killian", "target": "AFL"},
{"source": "Rachael Killian", "target": "Tennis"},
{"source": "Rhiannon Metcalfe", "target": "AFL"},
{"source": "Anne Hatchard", "target": "AFL"},
{"source": "Anne Hatchard", "target": "Basketball"},
{"source": "Tayla Thorn", "target": "AFL"},
{"source": "Abbey Holmes", "target": "AFL"},
{"source": "Stevie-Lee Thompson", "target": "Touch Football"},
{"source": "Jessica Sedunary", "target": "AFL"},
{"source": "Sarah Allan", "target": "AFL"},
{"source": "Justine Mules", "target": "AFL"},
{"source": "Monique Hollick", "target": "AFL"},
{"source": "Monique Hollick", "target": "Athletics"},
{"source": "Lauren OShea", "target": "AFL"},
{"source": "Lauren OShea", "target": "Netball"},
{"source": "Lauren OShea", "target": "Basketball"},
{"source": "Lauren OShea", "target": "Rowing"},
{"source": "Lauren OShea", "target": "Athletics"},
{"source": "Dayna Cox", "target": "AFL"},
{"source": "Sarah Perkins", "target": "AFL"},
{"source": "Erin Phillips", "target": "Basketball"},
{"source": "Jasmine Anderson", "target": "Soccer"},
{"source": "Tayla Harris", "target": "AFL"},
{"source": "Sabrina Frederick-Traub", "target": "AFL"},
{"source": "Sabrina Frederick-Traub", "target": "Soccer"},
{"source": "Emma Zielke", "target": "AFL"},
{"source": "Kaitlyn Ashmore", "target": "AFL"},
{"source": "Kaitlyn Ashmore", "target": "Javelin"},
{"source": "Emily Bates", "target": "AFL"},
{"source": "Tahlia Randall", "target": "AFL"},
{"source": "Tahlia Randall", "target": "Volleyball"},
{"source": "Nicole Hildebrand", "target": "AFL"},
{"source": "Leah Kaslar", "target": "AFL"},
{"source": "Jessica Wuetschner", "target": "AFL"},
{"source": "Alexandra Anderson", "target": "AFL"},
{"source": "Breanna Koenen", "target": "AFL"},
{"source": "Megan Hunt", "target": "AFL"},
{"source": "Samantha Virgo", "target": "AFL"},
{"source": "Kate Lutkins", "target": "AFL"},
{"source": "Kate Lutkins", "target": "Futsal"},
{"source": "Kate McCarthy", "target": "Touch Football"},
{"source": "Shaleise Law", "target": "AFL"},
{"source": "Selina Goodman", "target": "AFL"},
{"source": "Sharni Webb", "target": "AFL"},
{"source": "Nikki Wallace", "target": "AFL"},
{"source": "Jamie Stanton", "target": "Soccer"},
{"source": "Jade Ransfield", "target": "AFL"},
{"source": "Brittany Gibson", "target": "AFL"},
{"source": "Jordan Membrey", "target": "AFL"},
{"source": "Caitlin Collins", "target": "AFL"},
{"source": "Shannon Campbell", "target": "AFL"},
{"source": "Shannon Campbell", "target": "Soccer"},
{"source": "Kate Deegan", "target": "Soccer"},
{"source": "Delissa Kimmince", "target": "Cricket"},
{"source": "Brianna Davey", "target": "AFL"},
{"source": "Brianna Davey", "target": "Soccer"},
{"source": "Darcy Vescio", "target": "AFL"},
{"source": "Lauren Arnell", "target": "AFL"},
{"source": "Lauren Arnell", "target": "Basketball"},
{"source": "Bianca Jakobsson", "target": "AFL"},
{"source": "Kate Gillespie-Jones", "target": "AFL"},
{"source": "Sarah Hosking", "target": "Netball"},
{"source": "Gabriella Pound", "target": "AFL"},
{"source": "Danielle Hardiman", "target": "AFL"},
{"source": "Shae Audley", "target": "AFL"},
{"source": "Bella Ayre", "target": "AFL"},
{"source": "Lauren Brazzale", "target": "AFL"},
{"source": "Breann Moody", "target": "AFL"},
{"source": "Jessica Hosking", "target": "Netball"},
{"source": "Natalie Plane", "target": "Cricket"},
{"source": "Sarah Last", "target": "AFL"},
{"source": "Tilly Lucas-Rodd", "target": "AFL"},
{"source": "Katie Loynes", "target": "AFL"},
{"source": "Madeline Keryk", "target": "AFL"},
{"source": "Kate Darby", "target": "AFL"},
{"source": "Alison Downie", "target": "AFL"},
{"source": "Alison Downie", "target": "Basketball"},
{"source": "Laura Attard", "target": "AFL"},
{"source": "Rebecca Privitelli", "target": "AFL"},
{"source": "Alison Brown", "target": "AFL"},
{"source": "Jessica Kennedy", "target": "AFL"},
{"source": "Hayley Trevean", "target": "AFL"},
{"source": "Nat Exon", "target": "Soccer"},
{"source": "Nat Exon", "target": "Athletics"},
{"source": "Kate Shierlaw", "target": "Basketball"},
{"source": "Kate Shierlaw", "target": "Javelin"},
{"source": "Moana Hope", "target": "AFL"},
{"source": "Emma King", "target": "AFL"},
{"source": "Meg Hutchins", "target": "AFL"},
{"source": "Nicola Stevens", "target": "AFL"},
{"source": "Stephanie Chiocci", "target": "AFL"},
{"source": "Sarah DArcy", "target": "AFL"},
{"source": "Brittany Bonnici", "target": "AFL"},
{"source": "Bree White", "target": "AFL"},
{"source": "Caitlyn Edwards", "target": "AFL"},
{"source": "Alicia Eva", "target": "AFL"},
{"source": "Amelia Barden", "target": "AFL"},
{"source": "Stacey Livingstone", "target": "AFL"},
{"source": "Jessica Cameron", "target": "Cricket"},
{"source": "Jasmine Garner", "target": "AFL"},
{"source": "Emma Grant", "target": "AFL"},
{"source": "Penny Cula-Reid", "target": "AFL"},
{"source": "Lauren Tesoriero", "target": "Netball"},
{"source": "Melissa Kuys", "target": "AFL"},
{"source": "Cecilia Mcintosh", "target": "Javelin"},
{"source": "Cecilia Mcintosh", "target": "Bobsled"},
{"source": "Christina Bernardi", "target": "AFL"},
{"source": "Ruby Schleicher", "target": "Basketball"},
{"source": "Tara Morgan", "target": "AFL"},
{"source": "Kendra Heil", "target": "AFL"},
{"source": "Kendra Heil", "target": "Rugby"},
{"source": "Lou Watton", "target": "AFL"},
{"source": "Lou Watton", "target": "Athletics"},
{"source": "Sophie Casey", "target": "AFL"},
{"source": "Kate Sheahan", "target": "Tennis"},
{"source": "Helen Roden", "target": "Basketball"},
{"source": "Kara Donnellan", "target": "AFL"},
{"source": "Kiara Bowers", "target": "AFL"},
{"source": "Ebony Antonio", "target": "AFL"},
{"source": "Ebony Antonio", "target": "Basketball"},
{"source": "Kirby Bentley", "target": "AFL"},
{"source": "Hayley Miller", "target": "AFL"},
{"source": "Brianna Green", "target": "AFL"},
{"source": "Ashley Sharp", "target": "AFL"},
{"source": "Lara Filocamo", "target": "AFL"},
{"source": "Tiah Haynes", "target": "AFL"},
{"source": "Kira Phillips", "target": "AFL"},
{"source": "Tayla Bresland", "target": "AFL"},
{"source": "Amy Lavell", "target": "AFL"},
{"source": "Stacey Barr", "target": "Basketball"},
{"source": "Melissa Caulfield", "target": "AFL"},
{"source": "Cassie Davidson", "target": "AFL"},
{"source": "Taylah Angel", "target": "AFL"},
{"source": "Belinda Smith", "target": "AFL"},
{"source": "Stephanie Cain", "target": "Soccer"},
{"source": "Kelly Clinch", "target": "AFL"},
{"source": "Demi Okely", "target": "AFL"},
{"source": "Dana Hooker", "target": "AFL"},
{"source": "Akec Makur Chuot", "target": "AFL"},
{"source": "Emily Bosner", "target": "AFL"},
{"source": "Taryn Priestly", "target": "Basketball"},
{"source": "Gemma Houghton", "target": "Basketball"},
{"source": "Tarnica Golisano", "target": "AFL"},
{"source": "Kim Mickle", "target": "Javelin"},
{"source": "Gabby OSullivan", "target": "Basketball"},
{"source": "Renee Forth", "target": "AFL"},
{"source": "Emma Swanson", "target": "AFL"},
{"source": "Alex Williams", "target": "AFL"},
{"source": "Maddy Collier", "target": "AFL"},
{"source": "Louise Stephenson", "target": "AFL"},
{"source": "Phoebe McWilliams", "target": "AFL"},
{"source": "Jessica Dal Pos", "target": "AFL"},
{"source": "Nicola Barr", "target": "AFL"},
{"source": "Ashleigh Guest", "target": "AFL"},
{"source": "Aimee Schmidt", "target": "AFL"},
{"source": "Rebecca Beeson", "target": "AFL"},
{"source": "Kate Stanton", "target": "AFL"},
{"source": "Erin McKinnon", "target": "AFL"},
{"source": "Mai Nguyen", "target": "AFL"},
{"source": "Amanda Farrugia", "target": "AFL"},
{"source": "Jacinda Barclay", "target": "Baseball"},
{"source": "Jacinda Barclay", "target": "American Football"},
{"source": "Britt Tully", "target": "AFL"},
{"source": "Kristy De Pellegrini", "target": "AFL"},
{"source": "Renee Tomkins", "target": "AFL"},
{"source": "Renee Tomkins", "target": "Soccer"},
{"source": "Renee Tomkins", "target": "Futsal"},
{"source": "Clare Lawton", "target": "AFL"},
{"source": "Ella Ross", "target": "AFL"},
{"source": "Stephanie Walker", "target": "AFL"},
{"source": "Codie Briggs", "target": "AFL"},
{"source": "Isabella Rudolph", "target": "AFL"},
{"source": "Hannah Wallett", "target": "AFL"},
{"source": "Alex Saundry", "target": "AFL"},
{"source": "Jessica Bibby", "target": "Basketball"},
{"source": "Ellie Brush", "target": "Soccer"},
{"source": "Daisy Pearce", "target": "AFL"},
{"source": "Melissa Hickey", "target": "AFL"},
{"source": "Karen Paxman", "target": "AFL"},
{"source": "Elise ODea", "target": "AFL"},
{"source": "Deanna Berry", "target": "AFL"},
{"source": "Richelle Cranston", "target": "AFL"},
{"source": "Richelle Cranston", "target": "American Football"},
{"source": "Lauren Pearce", "target": "Basketball"},
{"source": "Alyssa Mifsud", "target": "AFL"},
{"source": "Shelley Scott", "target": "Netball"},
{"source": "Katherine Smith", "target": "AFL"},
{"source": "Emma Humphries", "target": "AFL"},
{"source": "Stephanie De Bortoli", "target": "AFL"},
{"source": "Lily Mithen", "target": "AFL"},
{"source": "Ainslie Kemp", "target": "AFL"},
{"source": "Mia-Rae Clifford", "target": "AFL"},
{"source": "Brooke Patterson", "target": "Basketball"},
{"source": "Jessica Anderson", "target": "AFL"},
{"source": "Madeleine Boyd", "target": "AFL"},
{"source": "Pepa Randall", "target": "AFL"},
{"source": "Pepa Randall", "target": "Athletics"},
{"source": "Sarah Lampard", "target": "AFL"},
{"source": "Jasmine Grierson", "target": "AFL"},
{"source": "Sarah Jolly", "target": "AFL"},
{"source": "Meg Downie", "target": "AFL"},
{"source": "Laura Corrigan", "target": "AFL"},
{"source": "Laura Corrigan", "target": "Gaellic Football"},
{"source": "Aliesha Newman", "target": "Soccer"},
{"source": "Aliesha Newman", "target": "Athletics"},
{"source": "Cat Phillips", "target": "Ultimate Frisbee"},
{"source": "Harriet Cordner", "target": "Soccer"},
{"source": "Katie Brennan", "target": "AFL"},
{"source": "Ellie Blackburn", "target": "AFL"},
{"source": "Emma Kearney", "target": "AFL"},
{"source": "Emma Kearney", "target": "Cricket"},
{"source": "Jaimee Lambert", "target": "AFL"},
{"source": "Aasta OConnor", "target": "AFL"},
{"source": "Hannah Scott", "target": "AFL"},
{"source": "Kirsten Mcleod", "target": "AFL"},
{"source": "Kimberley Ebb", "target": "AFL"},
{"source": "Hayley Wildes", "target": "AFL"},
{"source": "Brooke Lochland", "target": "AFL"},
{"source": "Brooke Lochland", "target": "Ice Skating"},
{"source": "Bailey Hunt", "target": "AFL"},
{"source": "Ellyse Gamble", "target": "AFL"},
{"source": "Lauren Spark", "target": "AFL"},
{"source": "Lauren Spark", "target": "Volleyball"},
{"source": "Nicole Callinan", "target": "Cricket"},
{"source": "Lisa Williams", "target": "AFL"},
{"source": "Lisa Williams", "target": "Netball"},
{"source": "Lauren Morecroft", "target": "AFL"},
{"source": "Tiana Ernst", "target": "AFL"},
{"source": "Kate Tyndall", "target": "AFL"},
{"source": "Courtney Clarkson", "target": "AFL"},
{"source": "Jess Gardner", "target": "AFL"},
{"source": "Kirsty Lamb", "target": "Cricket"},
{"source": "Laura Bailey", "target": "AFL"},
{"source": "Rebecca Neaves", "target": "Rugby"},
{"source": "Libby Birch", "target": "Netball"},
{"source": "Romy Timmins", "target": "Basketball"}
]
}
circle {
fill: #000;
}
rect {
fill: #fff;
stroke: #000;
stroke-width: 2px;
}
text {
font-family: 'Open Sans', sans-serif;
font-size: 18px;
fill: #000;
}
.node {
fill: #000;
stroke: #ccc;
stroke-width: 2px;
}
.player {
stroke: #fff;
stroke-width: 1px;
}
.sport {
stroke: #fff;
stroke-width: 2px;
cursor: pointer;
}
.link {
stroke: #777;
stroke-width: 2px;
}
.active {
stroke: #000;
stroke-width: 2px;
}
.ring {
fill-opacity: 0;
}
.click {
cursor: pointer;
}
.fadeLink {
stroke-opacity: 0.2;
}
.fadeNode {
fill-opacity: 0.2;
stroke-opacity: 0.2;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment