Reputation: 3081
I have a csv file like this for which I want to draw plots (always date on x axis) and cust is customer (team1,team2, team3), prod is product (A,B,C,D) and units is units sold for each product on a given day:
date,cust,prod,units
2012-04-01,team1,A,34
2012-04-02,team1,B,45
2012-04-03,team2,C,67
2012-04-04,team1,A,78
2012-04-05,team3,D,89
2012-04-06,team2,C,99
2012-04-07,team2,A,101
2012-04-08,team3,A,122
2012-04-09,team1,D,134
2012-04-10,team1,D,160
2012-04-11,team2,D,180
I want to plot line graphs for different combinations. So basically I want to be able to plot just on product (units of either A, B, C or D sold for a given customer) or (units sold by a particular customer regardless of product type or units sold of a particular type) or (just units of a particular product A, B, C or D sold irrespective of customer) . Here is the snippet I want to get right in a general way. Down below it allows me to filter out just the data for cust 'team1' and prod 'A'. How can I generalize this?
d3.csv("test.csv", function (error, tdata) {
if (error) throw error;
var _data = d3.nest()
.key(function(d) {return d.cust; })
.key(function(d) {return d.prod;})
.entries(tdata);
data = _data[0].values[0].values; // This gives me the filtered values I need for
Upvotes: 0
Views: 886
Reputation: 102194
You probably don't need nest()
here, but just a simple filter
for each situation.
For instance, to show only the data regarding the product D:
var dataProductD = data.filter(e=>e.prod==="D");
var data = [{
"date": "2012-04-01",
"cust": "team1",
"prod": "A",
"units": "34"
}, {
"date": "2012-04-02",
"cust": "team1",
"prod": "B",
"units": "45"
}, {
"date": "2012-04-03",
"cust": "team2",
"prod": "C",
"units": "67"
}, {
"date": "2012-04-04",
"cust": "team1",
"prod": "A",
"units": "78"
}, {
"date": "2012-04-05",
"cust": "team3",
"prod": "D",
"units": "89"
}, {
"date": "2012-04-06",
"cust": "team2",
"prod": "C",
"units": "99"
}, {
"date": "2012-04-07",
"cust": "team2",
"prod": "A",
"units": "101"
}, {
"date": "2012-04-08",
"cust": "team3",
"prod": "A",
"units": "122"
}, {
"date": "2012-04-09",
"cust": "team1",
"prod": "D",
"units": "134"
}, {
"date": "2012-04-10",
"cust": "team1",
"prod": "D",
"units": "160"
}, {
"date": "2012-04-11",
"cust": "team2",
"prod": "D",
"units": "180"
}];
var dataProductD = data.filter(e=>e.prod==="D");
console.log(dataProductD);
<script src="https://d3js.org/d3.v4.min.js"></script>
Or to show the data regarding the products D sold for the costumer Team2:
var dataProductDTeam2 = data.filter(e=>e.prod==="D" && e.cust==="team2");
var data = [{
"date": "2012-04-01",
"cust": "team1",
"prod": "A",
"units": "34"
}, {
"date": "2012-04-02",
"cust": "team1",
"prod": "B",
"units": "45"
}, {
"date": "2012-04-03",
"cust": "team2",
"prod": "C",
"units": "67"
}, {
"date": "2012-04-04",
"cust": "team1",
"prod": "A",
"units": "78"
}, {
"date": "2012-04-05",
"cust": "team3",
"prod": "D",
"units": "89"
}, {
"date": "2012-04-06",
"cust": "team2",
"prod": "C",
"units": "99"
}, {
"date": "2012-04-07",
"cust": "team2",
"prod": "A",
"units": "101"
}, {
"date": "2012-04-08",
"cust": "team3",
"prod": "A",
"units": "122"
}, {
"date": "2012-04-09",
"cust": "team1",
"prod": "D",
"units": "134"
}, {
"date": "2012-04-10",
"cust": "team1",
"prod": "D",
"units": "160"
}, {
"date": "2012-04-11",
"cust": "team2",
"prod": "D",
"units": "180"
}];
var dataProductDTeam2 = data.filter(e=>e.prod==="D" && e.cust==="team2");
console.log(dataProductDTeam2);
<script src="https://d3js.org/d3.v4.min.js"></script>
Or to show the data regarding Team2:
var dataTeam2 = data.filter(e=>e.cust==="team2");
var data = [{
"date": "2012-04-01",
"cust": "team1",
"prod": "A",
"units": "34"
}, {
"date": "2012-04-02",
"cust": "team1",
"prod": "B",
"units": "45"
}, {
"date": "2012-04-03",
"cust": "team2",
"prod": "C",
"units": "67"
}, {
"date": "2012-04-04",
"cust": "team1",
"prod": "A",
"units": "78"
}, {
"date": "2012-04-05",
"cust": "team3",
"prod": "D",
"units": "89"
}, {
"date": "2012-04-06",
"cust": "team2",
"prod": "C",
"units": "99"
}, {
"date": "2012-04-07",
"cust": "team2",
"prod": "A",
"units": "101"
}, {
"date": "2012-04-08",
"cust": "team3",
"prod": "A",
"units": "122"
}, {
"date": "2012-04-09",
"cust": "team1",
"prod": "D",
"units": "134"
}, {
"date": "2012-04-10",
"cust": "team1",
"prod": "D",
"units": "160"
}, {
"date": "2012-04-11",
"cust": "team2",
"prod": "D",
"units": "180"
}];
var dataTeam2 = data.filter(e=>e.cust==="team2");
console.log(dataTeam2);
<script src="https://d3js.org/d3.v4.min.js"></script>
I'm using an array of objects as the data (which is exactly the outcome of d3.csv
) because I cannot load an CSV using S.O. snippet.
Upvotes: 2