Aquí está mi código:
d3.csv('stockdataToPlot.csv', function(d){ return {date : d3.timeParse("%Y-%m-%d")(d.Date), aapl : d.AAPL, aapl_sma: d.SMA_AAPL, tsla : d.TSLA, tsla_sma: d.SMA_TSLA} }).then(plot_data); Me gustaría eliminar los valores de NaN de d.SMA_AAPL y d.SMA_TSLA . Agradecería que alguien me ayudara a incorporar este ejemplo correctamente:
d3.csv('stockdataToPlot.csv', function(d){ var data = d.filter(function(e){ if(isNaN(e.value)){ return false; } e.value = parseInt(e.value, 10); return true; }); return {date : d3.timeParse("%Y-%m-%d")(d.Date), aapl : d.AAPL, aapl_sma: data.SMA_AAPL, tsla : d.TSLA, tsla_sma: data.SMA_TSLA} }).then(plot_data); El error actual es TypeError: d.filter is not a function . Lo cual es confuso porque .filter toma una matriz de datos como parámetro, que debe ser d como se menciona en la primera línea.
Esta es una buena línea compacta de código de la documentación: const result = words.filter(word => word.length > 6); ¿Cómo se adapta esto? var data = d.filter(?? => ??.isNan(??)); ?
Estoy seguro de que estoy pensando demasiado en esto, pero soy nuevo en javascript y no entiendo completamente cómo funciona. En python pandas simplemente haría data.dropna() :(
Fijado:
d3.csv('stockdataToPlot.csv', function(d){ function removeNaN(e,c){ if(e>0){return e}else{return c} } return {date : d3.timeParse("%Y-%m-%d")(d.Date), aapl : d.AAPL, aapl_sma: removeNaN(+d.SMA_AAPL,d.AAPL), tsla : d.TSLA, tsla_sma: removeNaN(+d.SMA_TSLA,d.TSLA)} }).then(plot_data);En mi caso, el NaN se registraba como "", que por defecto es 0 cuando se pasa con un +. Afortunadamente, no tenía ningún valor en mis datos menor o igual a 0. En lugar de eliminarlos, los reemplacé con los mismos valores que el cierre, ya que es solo un promedio móvil. No es lo ideal, pero está bien por ahora.