Hi all,
Can someone please have a look at the script below and give me a direction / hint what’s wrong with it?
This part works.
<html>
<body>
<table id="table_data">
</table>
</body>
<script scr="d3v5/d3.js"></script> // using D3 V5
<script type="text/javascript">
// Data
d3.json("https://data.cityofnewyork.us/resource/jb7j-dtam.json").then(ShowData)
// LoadData in html table
let dct = {};
function htmlTable(data) {
for (let i=0; i< data.length; i++) {
dct.test = data[i];
};
const table = d3.select("#table_data") //.attr("cellspacing", "2").attr('cellpadding', "2")
const thead = table.append("thead")
.append("tr")
.selectAll("th")
.data( d3.keys(dct.test) )
const tbody = table.append("tbody").attr("class", "data_tbody_tbl").selectAll("td").data(data).enter().append("tr")
// Columns
thead.enter().append("th").text(function(k) { return k} ).style("background-color", "lightblue")
// Values of each columns
tbody.append("td").text(function(v) { return v['year']})
tbody.append("td").text(function(k) { return k["leading_cause"] })
tbody.append("td").text(function(k) { return k["sex"] })
tbody.append("td").text(function(k) { return k["race_ethnicity"] })
tbody.append("td").text(function(k) { return k["deaths"] })
tbody.append("td").text(function(k) { return k["death_rate"] })
tbody.append("td").text(function(k) { return k["age_adjusted_death_rate"] })
// Adding a bit interactive style
tbody.on("mouseover", function(k) {
d3.select(this).style("background-color", "lightgray")
})
.on("mouseleave", function() {
d3.select(this).style("background-color", "white")
})
}
I am encountering the issue in this part of script. The min and max values returning decimal output which is not a case, then those values are integer.
// Aggregation
const ExtentValues = function(data) {
let metrics = d3.nest()
.key(function(v) { return v.year; })
.sortKeys(d3.descending)
.rollup(function(dv) { return {
// min : d3.map(col => d3.min(dv, (fn) => {return +fn[col] } ) )
min : d3.min(dv, fn => {return +fn.deaths, Number(d3.format(",.3f")(+fn.death_rate)), Number(d3.format(",.3f")(+fn.age_adjusted_death_rate)) }),
max : d3.max(dv, fn => {return +fn.deaths, Number(d3.format(",.3f")(+fn.death_rate)), Number(d3.format(",.3f")(+fn.age_adjusted_death_rate)) } ),
avg: d3.mean(dv, fn => {return +fn.deaths, Number(d3.format(",.3f")(+fn.death_rate)), Number(d3.format(",.3f")(+fn.age_adjusted_death_rate)) } ),
median: d3.median(dv, fn => {return +fn.deaths, Number(d3.format(",.3f")(+fn.death_rate)), Number(d3.format(",.3f")(+fn.age_adjusted_death_rate)) } ),
std : d3.deviation(dv, fn => {return +fn.deaths, Number(d3.format(",.3f")(+fn.death_rate)), Number(d3.format(",.3f")(+fn.age_adjusted_death_rate)) } ),
sum: d3.sum(dv, fn => {return +fn.deaths, +fn.death_rate, +fn.age_adjusted_death_rate })
};
}).entries(data)
return metrics;
}
function ShowData(data) {
htmlTable(data);
return console.log(ExtentValues(data) );
}
// return decimal output of min and max
</html>
I am looking the metrics of each numerical columns and not the rows.
Thanks in advance.
Best regards,
Kanatbek