Tengo un archivo csv con el nombre y las edades de las personas. Quiero obtener el recuento de personas menores de 30 años.
He probado el siguiente código.
<script src='https://d3js.org/d3.v7.min.js'></script> <script> let thiscsv = 'my csv link here'; let count=0; d3.csv(thiscsv, function(data) { if(data.age>30) { count++ } console.log(count); }); </script>Comprueba cada línea e imprime en ella la consola cada vez que agrega 1 conteo donde sea verdadero hasta el final del archivo csv. Quiero imprimir solo el conteo final directamente en la consola. ¿Cómo puedo hacer esto?
Lea atentamente la respuesta que recibió para su pregunta anterior (y le sugiero que la vote a favor, como lo hice yo): lo primero que dice el que responde es que necesita then() . Este es D3 v7, no usa una devolución de llamada como D3 v4 o menos. De la forma en que lo está haciendo ahora, la llamada función de fila se ejecutará para cada fila analizada, como se esperaba.
Esto es lo que debe hacer, de nuevo, preste atención al then() :
<script src='https://d3js.org/d3.v7.min.js'></script> <script> let thisCsv = URL.createObjectURL(new Blob([`name,age foo,12 bar,34 baz,63 foobar,17, barbar,43, barbaz,39`])); let count = 0; d3.csv(thisCsv, d3.autoType).then(data => { data.forEach(d => { if (d.age > 30) count++ }); console.log(count); }); </script> Además, observe el d3.autoType : sin eso, sus números CSV serán cadenas , no números.
Si SOLO desea contar personas con edades superiores a 30:
const process = data => { const ages = data.map(({Age}) => +Age) // make sure it is a number .filter(num => num > 30) .length console.log("Total ppl with age above 30:",ages) } // uncomment when you want to read a file // let mycsv = 'example.csv'; // d3.csv(mycsv) //.then(function(data) { process(data) //}) <script src='https://d3js.org/d3.v7.min.js'></script> <script> const data = d3.csvParse(`PassengerId,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked 111,1,"Ken, Mr. James",male,34.5,0,0,330911,7.8292,,A 112,2,"Will, Mrs. James",female,47,1,0,363272,7,,B`); </script>