2017-12-05 14 views
0

私はcsvファイルからデータをロードし、D3を使用してデータをグループ化することによってデータを取得するコードを持っています。javascriptを使用してjsonにマルチレベルネストされた配列を変換します。

私が書いたコードは次のとおりです。

   d3.csv("data/data2.csv", function(data1) {  

        var workStation = 
           {"key":"Data","values": 
           d3.nest() 
           .key(function(d) { return d.WorkStation_Id; }) 
           .key(function(d) { return d.Order_Id; }) 
           .rollup(function(v) { 
            return v.map(function(c){ 
             return { "actualStart": convertscheduledtime(c.ScheduledTime),"rowHeight": 30, "actualEnd":c.Duration*1000+convertscheduledtime(c.ScheduledTime), "name":c.Order_Id}; 
            }); 
           }).entries(data1)}; 

       var d2= [{"name":"Data", "children":workStation.values.map(function(major){ 
         return { 
          "name": major.key, 
          "children":major.values.map(function(Order_Id){ 
           return{ 
            "name" : Order_Id.key, 
            "actualStart" : Order_Id.values.actualStart, 
            "actualEnd" : Order_Id.values.actualEnd 
           }; 
          }) 
          }; 
         }) 
        }]; 

    }); 
    console.log(d2); 

私がしようとしていた私はオンラインを見つけ、次のコードを使用してJSON形式に得られた結果を変換した: これらは私がやろうとしています以下の通りです:

1)開始時刻の終了時刻を取得しようとしています。期間を追加して開始時間を計算しています。 2)取得された配列は、ネストされたキー値のペアとして使用されています。私はJSONデータに変換しようとしていますので、これをanychart.jsのvar treeData Ganttチャートに渡すことができます。

次は私が達成しようとしていますどのようなJSONデータであると私は私が子供の名前までしたいデータを得た:誰かが親切に何を示唆してもらえ parent : 10A, children:[{ name:1, actualStart:18332233333, actualEnd:12343434444}, { name:2, actualStart:18332233898, actualEnd:12343434998}, .... ], parent : 10B, children: [{ name:1, actualStart:18332233333, actualEnd:12343434444}, { name:2, actualStart:18332233898, actualEnd:12343434998}, .... ] .... :1を、actualStartとactualEndはのために私が値として未定義取得しています私はactualStartとactualEndデータを取得するために変更する必要があります。

ありがとうございます。

Iは、サンプルCSVデータが含まれている:

ScheduledTime,WorkStation_Id,Order_Id,Duration(seconds) 

2016年1月1日00:00:00,10A、1,15
2016年1月1日00:00:15,10A、1,25
を 2016年1月1日00:00:35,10A、
1,10 2016年1月1日00:00:45,10A、
2,10 2016年1月1日00:00:55,10A、2,10
01.01 .2016 00:01:05,10B、1,20
01.01.2016 00:01:25,10B、1,10
01.01.2016 00:01:35,10B 2,20
.....

+0

このコードをテストするのに特に使用する.csvデータの例を教えてください。 AnyGanttはCSVデータを扱うことができるので、おそらくCSVをJSONに解析する必要はありません。いずれにしても、生の.csvデータについての詳細が必要です(例として、データの方が優れています)。 –

+0

私はcsv生データの一部を含んでいました。親切に見て – gopi

答えて

1

この場合、カスタムデータフォーマットが必要です。下に、以前に提供した.csvデータを取得し、それを解析し、グループ化し、フォーマットするコードがあります。その後、ganttプロジェクトチャートが作成されます。このコードは、必要なデータ構造を得るのに役立ちます。

//parse .csv data and group by WorkStation_Id 
d3.csv("data.csv", function (data1) { 
    var workStation = d3.nest() 
     .key(function (d) { 
      return d.WorkStation_Id; 
     }) 
     .entries(data1); 

    //get formatted data as a tree 
    var formattedData = formatData(workStation); 
    console.log(formattedData); 

    //set formatted data as a tree 
    var treeData = anychart.data.tree(formattedData, "as-tree"); 
    // chart type 
    chart = anychart.ganttProject(); 

    // set data for the chart 
    chart.data(treeData); 

    // set container id for the chart 
    chart.container('container').draw(); 

    // Fit all visible data to timeline. 
    chart.fitAll(); 
}); 

//helper function to format data in apropriate way 
//to set to the gantt chart 
function formatData(data) { 

    var outputData = []; 

    data.forEach(function (item) { 
     var itemObj = {}; 
     itemObj['name'] = item['key']; 
     itemObj['children'] = []; 

     var childs = item['values']; 

     for (var i = 0; i < childs.length; i++) { 
      var childObj = {}; 
      childObj['name'] = 'Order ID: ' + childs[i]['Order_Id'] + '-' + i; 
      childObj['actualStart'] = new Date(childs[i]['ScheduledTime']).getTime(); 
      childObj['actualEnd'] = childObj['actualStart'] + childs[i]['Duration(seconds)'] * 1000; 
      childObj['Order_Id'] = childs[i]['Order_Id']; 
      itemObj['children'].push(childObj); 
     } 
     outputData.push(itemObj); 
    }); 
    return outputData; 
} 

以下は、このコードで作成されたチャートのスクリーンショットです。 enter image description here

+0

ありがとうございました。これはとても役に立ちました。今私はデータをどのように操作できるかを知る。 – gopi

関連する問題