Published
Edited
May 8, 2021
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
API_BASE = "https://parlement.thundr.be"
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
session_name_votes = Promise.all(plenary_meetings_unfolded.map(meeting => {
const topics = meeting.topics;
const array = [];
for(const key in topics['TopicType.NAME_VOTE']) {
const nv = topics['TopicType.NAME_VOTE'][key];
if(nv.legislation.length === 0) continue;
const legislations = nv.legislation.map(url => legislations_unfolded[+url.match(/legislation\/(\d+)\.json$/)[1]]);
// Check whether there was an author of this legislation of this party
let contains = false;
for(const legislation of legislations) {
for(const author of legislation.authors) {
if(member_urls_of_this_party.has(author)) {
contains = true;
break;
}
}
if(contains) break;
}
if(!contains) continue;
//function countVoters(array) {
// if(!array) return 0;
// return array.filter(url => member_urls_of_this_party.has(url)).length;
//}

nv.yes = nv.votes[0]?.voters.yes.length;
nv.no = nv.votes[0]?.voters.no.length;
nv.abstention = nv.votes[0]?.voters.abstention.length;
nv.meeting = parseInt(meeting.id);
nv.yesPerc = nv.yes / (nv.yes + nv.no + nv.abstention);
if(isNaN(nv.yesPerc)){
nv.yesPerc = 0.0
}
nv.noPerc = nv.no / (nv.yes + nv.no + nv.abstention)
if(isNaN(nv.noPerc)){
nv.noPerc = 0.0
}
array.push(nv);
}
return array;
}))
Insert cell
session_name_votes_flat = session_name_votes.filter(a => a.length != 0).map((a, index) => a.map(r => {return {ind: r.meeting, val:r.title.NL.toLowerCase().includes('voorstel tot verwerping')?r.noPerc:r.yesPerc, name:r.title.NL, href: `${meeting_url}?session=${session_num}&meeting=${r.meeting}`}})).flat()
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
province
Insert cell
Insert cell
data = members_of_this_party.filter(m => province.includes(m.province)).map((m, index) => {
return {
...m,
row: Math.floor(index / 20),
col: index % 20
}
});
Insert cell
male_members = data.filter(a => a.gender === "male");
Insert cell
female_members = data.filter(a => a.gender === "female");
Insert cell
female_extended = female_members.concat(female_members.length > male_members.length ? [] : Array.apply(null, Array(male_members.length - female_members.length)).map(() => { return {party: "empty"}; }));
Insert cell
male_extended = male_members.concat(male_members.length > female_members.length ? [] : Array.apply(null, Array(female_members.length - male_members.length)).map(() => { return {party: "empty"}; }));
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more