netGenByState=d3.rollup(data,v=>d3.sum(v,d=>d["Plant annual net generation (MWh)"]),d=>d["Plant state abbreviation"]);
netGenByState.get("VA")
netGenByStateAndFuel=d3.rollup(data,v=>d3.sum(v,d=>d["Plant annual net generation (MWh)"]),d=>d["Plant state abbreviation"],d=>d["Plant primary fuel generation category"]);
netGenByStateAndFuel.get("VA")
netGenByStateAndFuel.get("VA").get("GAS")
stateSums=d3.rollup(data,
v=>Object.fromEntries(["Plant annual net generation (MWh)","Plant annual CO2 equivalent emissions (tons)"].map(col=>[col,d3.sum(v,d=>toNum(d[col]))])),
d=>d["Plant state abbreviation"])
stateAvgLongs=d3.rollup(data,v=>d3.mean(v,d=>d["Plant longitude"]),d=>d["Plant state abbreviation"]);
stateAvgLongs.get("VA")
states=[...newSet(plantsByState.keys())]
//sortedData = d3.sort(data, d => d["Plant annual net generation (MWh)"])
//sortedData = d3.sort(data,(a,b) => d3.ascending(a["Plant annual net generation (MWh)"],b["Plant annual net generation (MWh)"]))
viewofsortedtable=Inputs.table(sortedData)
data.slice(0,1000)
data.slice(1000,5000)
shuffledData=d3.shuffle(data)
viewofshuffledtable=Inputs.table(shuffledData)
sample=d3.shuffle(data).slice(0,1000)
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.