d3.tsv找到最大值(d3.tsv Find Maximum Value)

编程入门 行业动态 更新时间:2024-10-23 09:30:54
d3.tsv找到最大值(d3.tsv Find Maximum Value)

这是我的tsv的样子,但是有更多的行和值更经常变化(.tsv大小约为10MB)

cdate ctime Saarland Mecklenburg-Vorpommern Thueringen Magdeburg Dessau Halle Leipzig Dresden Chemnitz Karlsruhe Stuttgart Tuebingen Freiburg Berlin Brandenburg Schleswig-Holstein Hamburg Bremen Trier Koblenz Rheinhessen-Pfalz Unterfranken Oberfranken Mittelfranken Oberpfalz Niederbayern Oberbayern Schwaben Kassel Giessen Darmstadt Munster Detmold Arnsberg Duesseldorf Koeln Luneburg Weser-Ems Hannover Braunschweig 01.01.2011 00:00 1526.66 0.00 497.24 0.00 0.00 0.00 0.00 0.00 0.00 25484.15 319.77 5992.47 92729.72 0.00 0.00 0.00 0.00 551.05 15948.44 9511.05 0.00 12506.98 0.00 11792.09 2354.59 34020.30 40880.95 6813.97 81734.04 0.00 981.48 0.00 0.00 44933.62 1122.27 3760.11 0.00 0.00 27893.19 714.28 01.01.2011 00:15 1526.66 0.00 497.24 0.00 0.00 0.00 0.00 0.00 0.00 25484.15 319.77 5992.47 92729.72 0.00 0.00 0.00 0.00 551.05 15948.44 9511.05 0.00 12506.98 0.00 11792.09 2354.59 34020.30 40880.95 6813.97 81734.04 0.00 981.48 0.00 0.00 44933.62 1122.27 3760.11 0.00 0.00 27893.19 714.28

如何从这个tsv中读出最大值?

这是d3.tsv调用

d3.tsv("WasserNeu.tsv", importTSV);

var importedData = []; //[date][time].city

function importTSV(error, data) {
    
        for (var row in data) { 
            var dataRow = data[row]; //row is just the number of the current object, data[row] represents its contents
            if (importedData[dataRow.cdate] === undefined) {
                importedData[dataRow.cdate] = [];
            }
            if (importedData[dataRow.cdate][dataRow.ctime] === undefined) {
                importedData[dataRow.cdate][dataRow.ctime] = [];
            }
            for (var oneCity in dataRow) {
                if (oneCity != "cdate" && oneCity != "ctime") {

                    if (importedData[dataRow.cdate][dataRow.ctime][oneCity] === undefined) {
                        importedData[dataRow.cdate][dataRow.ctime][oneCity] = [];
                    }
                    importedData[dataRow.cdate][dataRow.ctime][oneCity] = dataRow[oneCity];
                    //console.log("dataPoint ("+oneCity+"): "+dataRow[oneCity]);
                }   
            } 
  
 

//编辑

现在,我在return + d3.max之前添加了+

var maxValue = d3.max(d3.values(importedData), function(times){
  return +d3.max(d3.values(times), function(cities){
    return d3.max(d3.values(cities));
  });
}); 
  
 

现在我得到最大9672.44,但这不是我的最大值..

this is how my tsv looks like, but with a lot more of rows and the values varies more often (.tsv size is about 10MB)

cdate ctime Saarland Mecklenburg-Vorpommern Thueringen Magdeburg Dessau Halle Leipzig Dresden Chemnitz Karlsruhe Stuttgart Tuebingen Freiburg Berlin Brandenburg Schleswig-Holstein Hamburg Bremen Trier Koblenz Rheinhessen-Pfalz Unterfranken Oberfranken Mittelfranken Oberpfalz Niederbayern Oberbayern Schwaben Kassel Giessen Darmstadt Munster Detmold Arnsberg Duesseldorf Koeln Luneburg Weser-Ems Hannover Braunschweig 01.01.2011 00:00 1526.66 0.00 497.24 0.00 0.00 0.00 0.00 0.00 0.00 25484.15 319.77 5992.47 92729.72 0.00 0.00 0.00 0.00 551.05 15948.44 9511.05 0.00 12506.98 0.00 11792.09 2354.59 34020.30 40880.95 6813.97 81734.04 0.00 981.48 0.00 0.00 44933.62 1122.27 3760.11 0.00 0.00 27893.19 714.28 01.01.2011 00:15 1526.66 0.00 497.24 0.00 0.00 0.00 0.00 0.00 0.00 25484.15 319.77 5992.47 92729.72 0.00 0.00 0.00 0.00 551.05 15948.44 9511.05 0.00 12506.98 0.00 11792.09 2354.59 34020.30 40880.95 6813.97 81734.04 0.00 981.48 0.00 0.00 44933.62 1122.27 3760.11 0.00 0.00 27893.19 714.28

How can I read out the Maximum Value out of this tsv?

This is the d3.tsv call

d3.tsv("WasserNeu.tsv", importTSV);

var importedData = []; //[date][time].city

function importTSV(error, data) {
    
        for (var row in data) { 
            var dataRow = data[row]; //row is just the number of the current object, data[row] represents its contents
            if (importedData[dataRow.cdate] === undefined) {
                importedData[dataRow.cdate] = [];
            }
            if (importedData[dataRow.cdate][dataRow.ctime] === undefined) {
                importedData[dataRow.cdate][dataRow.ctime] = [];
            }
            for (var oneCity in dataRow) {
                if (oneCity != "cdate" && oneCity != "ctime") {

                    if (importedData[dataRow.cdate][dataRow.ctime][oneCity] === undefined) {
                        importedData[dataRow.cdate][dataRow.ctime][oneCity] = [];
                    }
                    importedData[dataRow.cdate][dataRow.ctime][oneCity] = dataRow[oneCity];
                    //console.log("dataPoint ("+oneCity+"): "+dataRow[oneCity]);
                }   
            } 
  
 

//Edit

Now I've added just + before return +d3.max

var maxValue = d3.max(d3.values(importedData), function(times){
  return +d3.max(d3.values(times), function(cities){
    return d3.max(d3.values(cities));
  });
}); 
  
 

Now I get 9672.44 as maximum, still this isn't my maximum..

最满意答案

为什么不在迭代数组的时候简单地存储它?

我还添加了一行来检查数据是否实际表示为数字(parseFloat)。 人们可能会放弃这一点,但它有助于减少错误来源。

d3.tsv("WasserNeu.tsv", importTSV); var importedData = []; //[date][time].city var valueCache; //caching value var newMaxValue = 0; //store the max value function importTSV(error, data) { for (var row in data) { var dataRow = data[row]; //row is just the number of the current object, data[row] represents its contents if (importedData[dataRow.cdate] === undefined) { importedData[dataRow.cdate] = []; } if (importedData[dataRow.cdate][dataRow.ctime] === undefined) { importedData[dataRow.cdate][dataRow.ctime] = []; } for (var oneCity in dataRow) { if (oneCity != "cdate" && oneCity != "ctime") { if (importedData[dataRow.cdate][dataRow.ctime][oneCity] === undefined) { importedData[dataRow.cdate][dataRow.ctime][oneCity] = []; } valueCache = parseFloat(dataRow[oneCity]); //cache the value to reduce parse and array-access activity if (valueCache > newMaxValue) { newMaxValue = valueCache; } importedData[dataRow.cdate][dataRow.ctime][oneCity] = valueCache; } } } console.log("NewMax " + newMaxValue);

Why not simply store it while iterating through the array?

I also added a line to check that the data is actually represented as number (parseFloat). One could probably leave that out, but it helps reducing error sources.

d3.tsv("WasserNeu.tsv", importTSV); var importedData = []; //[date][time].city var valueCache; //caching value var newMaxValue = 0; //store the max value function importTSV(error, data) { for (var row in data) { var dataRow = data[row]; //row is just the number of the current object, data[row] represents its contents if (importedData[dataRow.cdate] === undefined) { importedData[dataRow.cdate] = []; } if (importedData[dataRow.cdate][dataRow.ctime] === undefined) { importedData[dataRow.cdate][dataRow.ctime] = []; } for (var oneCity in dataRow) { if (oneCity != "cdate" && oneCity != "ctime") { if (importedData[dataRow.cdate][dataRow.ctime][oneCity] === undefined) { importedData[dataRow.cdate][dataRow.ctime][oneCity] = []; } valueCache = parseFloat(dataRow[oneCity]); //cache the value to reduce parse and array-access activity if (valueCache > newMaxValue) { newMaxValue = valueCache; } importedData[dataRow.cdate][dataRow.ctime][oneCity] = valueCache; } } } console.log("NewMax " + newMaxValue);

更多推荐

本文发布于:2023-07-07 21:43:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1068533.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:最大值   tsv   Find   Maximum

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!