Public
Edited
Sep 3, 2024
Importers
Insert cell
Insert cell
Insert cell
data = FileAttachment("players_20.csv").csv()
Insert cell
// Only extracting necessary parts of age and nationality
extract = data.map((person) => ({
age: +person.age,
nationality: person.nationality
}))
Insert cell
// Grouping by nationality
results = Object.groupBy(extract, ({ nationality }) => nationality)
Insert cell
// Including only age variables
AgebyNation = Object.fromEntries(
Object.entries(results).map(([nationality, players]) => [
nationality,
players.map((player) => player.age)
])
)
Insert cell
// Create obj containing age avg and player amt

Age_Count = {
const combined = {};

// Compute the average for each array and store in the new object
for (const key in AgebyNation) {
if (AgebyNation.hasOwnProperty(key)) {
const array = AgebyNation[key];
const sum = array.reduce((acc, num) => acc + num, 0);
const average = array.length > 0 ? sum / array.length : 0;

combined[key] = {
averageAge: average,
Players: array.length
};
}
}

return combined;
}
Insert cell
// table creation
tableData = Object.keys(Age_Count).map((country) => ({
Country: country,
AverageAge: Age_Count[country].averageAge,
NumbersofPlayers: Age_Count[country].Players
}))
Insert cell
tableData
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
Insert cell
Insert cell
Insert cell
{
const target = html`<div class='tableauPlaceholder' id='viz1725326012636' style='position: relative'><noscript><a href='#'><img alt='Player Count and Average Age by Country ' src='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;We&#47;Week2_17253256956000&#47;Sheet1&#47;1_rss.png' style='border: none' /></a></noscript><object class='tableauViz' style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='embed_code_version' value='3' /> <param name='site_root' value='' /><param name='name' value='Week2_17253256956000&#47;Sheet1' /><param name='tabs' value='no' /><param name='toolbar' value='yes' /><param name='static_image' value='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;We&#47;Week2_17253256956000&#47;Sheet1&#47;1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='language' value='en-US' /></object></div> <script type='text/javascript'> var divElement = document.getElementById('viz1725326012636'); var vizElement = divElement.getElementsByTagName('object')[0]; vizElement.style.width='100%';vizElement.style.height=(divElement.offsetWidth*0.75)+'px'; var scriptElement = document.createElement('script'); scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js'; vizElement.parentNode.insertBefore(scriptElement, vizElement); </script>;</div>`;

// Return the div first so the following code can find it
yield target;

var divElement = document.getElementById("viz1725326012636");
var vizElement = divElement.getElementsByTagName("object")[0];
if (divElement.offsetWidth > 800) {
vizElement.style.width = "100%";
vizElement.style.height = divElement.offsetWidth * 0.75 + "px";
} else if (divElement.offsetWidth > 500) {
vizElement.style.width = "100%";
vizElement.style.height = divElement.offsetWidth * 0.75 + "px";
} else {
vizElement.style.width = "100%";
vizElement.style.height = "727px";
}
var scriptElement = document.createElement("script");
scriptElement.src = "https://public.tableau.com/javascripts/api/viz_v1.js";
vizElement.parentNode.insertBefore(scriptElement, vizElement);

yield target;
}
Insert cell
Insert cell
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