Published
Edited
Jul 3, 2020
Insert cell
Insert cell
Insert cell
Insert cell
results = await FileAttachment("results@1.json").json()
Insert cell
// Votes per party
vote_map = {
let vote_map = new Map();
results.forEach(function(o) {
o.results.forEach(function(r) {
let party = r.party;
if (vote_map.get(party) == undefined) {
vote_map.set(party, parseInt(r.votes));
} else {
vote_map.set(party, vote_map.get(party) + parseInt(r.votes));
}
});
});
return vote_map;
}
Insert cell
// Seats per party
seat_map = {
let seat_map = new Map();
results
.map(o => o.winning_party)
.reduce(function(acc, curr) {
if (typeof seat_map.get(curr) == 'undefined') {
seat_map.set(curr, 1);
} else {
seat_map.set(curr, seat_map.get(curr) + 1);
}
});
return seat_map;
}
Insert cell
// Seats per winning party
winner_map = {
let winner_map = new Map();
seat_map.forEach((v, k) => winner_map.set(k, seat_map.get(k)));
return winner_map;
}
Insert cell
function color(district) {
let district_id = district.properties.FEDNUM.toString();
let winning_party = results.filter(o => o.district_number == district_id)[0]
.winning_party;
if (winning_party.slice(0, 3) == "NDP") {
return d3.schemeCategory10[1];
} else if (winning_party == "Conservative") {
return d3.schemeCategory10[0];
} else if (winning_party == "Liberal") {
return d3.schemeCategory10[3];
} else if (winning_party == "Bloc Québécois") {
return d3.schemeCategory10[9];
} else if (winning_party == "Green Party") {
return d3.schemeCategory10[2];
}

return 'gray';
}
Insert cell
Insert cell
map_data = {
let map_file = await FileAttachment("canadian_election_map3.json").json();
let districts = topojson.feature(
map_file,
map_file.objects.canadian_districts_clipped
);
let provinces = topojson.feature(map_file, map_file.objects.provinces);
let land = topojson.feature(map_file, map_file.objects.natural_earth_clipped);
return { districts: districts, provinces: provinces, land };
}
Insert cell
function get_province(district) {
let provcode = district.properties.PROVCODE;
return map_data.provinces.features.filter(
f => f.properties.PROVCODE == provcode
)[0];
}
Insert cell
// Not currently using this, but it seems like it might come in handy
province_map = {
let province_map = new Map();
province_map.set('AB', 'Alberta');
province_map.set('QC', 'Quebec');
province_map.set('ON', 'Ontario');
province_map.set('NS', 'Nova Scotia');
province_map.set('SK', 'Saskatchewan');
province_map.set('BC', 'British Columbia');
province_map.set('PE', 'Prince Edward Island');
province_map.set('NL', 'Newfoundland and Labrador');
province_map.set('YT', 'Yukon');
province_map.set('NT', 'Northwest Territories');
province_map.set('NU', 'Nunavut');
province_map.set('NB', 'New Brunswick');
province_map.set('MB', 'Manitoba');
return province_map;
}
Insert cell
Insert cell
d3 = require('d3@5')
Insert cell
topojson = require("topojson-client@3")
Insert cell

One platform to build and deploy the best data apps

Experiment and prototype by building visualizations in live JavaScript notebooks. Collaborate with your team and decide which concepts to build out.
Use Observable Framework to build data apps locally. Use data loaders to build in any language or library, including Python, SQL, and R.
Seamlessly deploy to Observable. Test before you ship, use automatic deploy-on-commit, and ensure your projects are always up-to-date.
Learn more