Mi conjunto de datos original tiene 4 columnas: nombre, calificación_promedio, año y calificación. Tengo que crear un gráfico de líneas para contar (a_rating), donde 0<rating<9 vs rating. Sin embargo, si la calificación de un año en particular no existe, necesito reemplazar la cuenta con cero. por ejemplo, si no existe una calificación 2 para el año 2015, entonces año: 2015, calificación: 2, recuento: 0. No soy capaz de generar los ceros.
pocas filas de rating.csv->
name,year,average_rating,users_rated Codenames,2015,7.71148,51209 King of Tokyo,2011,7.23048,48611 Love Letter,2012,7.25253,47014 Splendor,2014,7.47331,45239 7 Wonders Duel,2015,8.12219,6the,20901 S ,8.2841,39962 Lords of Waterdeep,2012,7.76601,38696 Terraforming Mars,2016,8.40331,39327 Los castillos de Borgoña,2011,8.12835,36901 Patchwork,2014,7.7122,33721 Dead of Winter: A Crossroads Game,2014,7,6777 32915 Terra Mystica,2012,8.19293,32719 Pandemic Legacy: Season 1,2015,8.64165,31326 Coup,2012,7.03729,29287
d3.dsv(",", rating.csv, function (d) { return { // format data attributes if required name:d.name, year:d3.timeFormat("%Y")(new Date(d.year)), avgRating:Math.floor(+d["average_rating"]), users:+d['users_rated'] } }).then(function (data) { const m = new Map(); data.forEach(({year, avgRating}) => { // Create a key with values that we want to group by // A list of key-value pairs is chosen to make use of `Object.fromEntries` later if (year>2014){ const hash = JSON.stringify([['year', year], ['rating', +avgRating]]); m.set(hash, (m.get(hash) || 0) + 1);} }); const grouped = [...m].map(([rec, count]) => ({ ...Object.fromEntries(JSON.parse(rec)), count, })) var sumstat = d3.nest() // nest function allows to group the calculation per level of a factor .key(function(d) { return d.year;}) .entries(grouped); console.log(sumstat)