block by jalapic 7f10e5b679e0c604e811

gini curves linked

Full Screen

Built with blockbuilder.org

forked from jalapic‘s block: gini curves

index.html

<!DOCTYPE html>
<meta charset="utf-8">
<style>

body {
  font: 14px sans-serif;
}

.axis path,
  
.axis line {
  fill: none;
  stroke: #e5e5e5;
  shape-rendering: crispEdges;
}

.axis path {
  display: none;
}


.line {
  fill: none;
  stroke-width: 1px;
  opacity: 1;
}
 
  
</style>

<body>

  <p> Work in Progress !!!!!</p>
  
<div style="width: 1000px; padding-left: 0.75cm">
<div class="container" id="chartw" style="float: left; width: 500px; height: 500px;margin-top: 25px;"><h2>Wins</h2></div>
<div class="container" id="chartl" style="float: left; width: 500px; height: 500px;margin-top: 25px;"><h2>Losses</h2></div>
</div>
  
<script src="//d3js.org/d3.v3.min.js"></script>
<script>

var margin = {top: 60, right: 80, bottom: 60, left: 80},
    width = 500 - margin.left - margin.right,
    height = 460 - margin.top - margin.bottom;

var x = d3.scale.linear()
    .range([0, width])
	  .domain([12,1]);

var y = d3.scale.linear()
    .range([height, 0])
	.domain([0,1]);

var color = d3.scale.ordinal()
	.range(["#e4b31f", "#9d1422", "#f9db9e", "#f4a3a5", "#f1624f"])
	.domain(["A","B","C","D","E"]);

var giniw = [0.62,0.79,0.55,0.69,0.78];  
var ginil = [0.22,0.22,0.25,0.21,0.20];  
  
var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom")
	.tickFormat(d3.format("d"));

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left")
	.ticks(5)
	.tickSize(-width, 0, 0);

var line = d3.svg.line()
    .interpolate("basis")
    .x(function(d) { return x(d.rank); })
    .y(function(d) { return y(d.cohort); });

var svgw = d3.select("body").select("div#chartw").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

var svgl = d3.select("body").select("div#chartl").append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
 
  
d3.csv("wins.txt", function(error, data) {
  if (error) throw error;
  
  data.forEach(function (d,i) {
	  d.rank = +d.rank;
	  d.A = +d.A;
	  d.B = +d.B;
	  d.C = +d.C;
    d.D = +d.D;
    d.E = +d.E;
  })

  var keys = d3.keys(data[0]).filter(function(key) { return key !== "rank"; });
  
  var cohortLines = keys.map(function(name) {
    return {
      name: name,
      values: data.map(function(d) {
  	        return {
  				rank: d.rank,
  				cohort: d[name]};
  		})
    };
  });

  //Append axes
  svgw.append("g")
      .attr("class", "x axis")
      .attr("transform", "translate(0," + height + ")")
      .call(xAxis);

  svgw.append("g")
      .attr("class", "y axis")
      .call(yAxis);

  
  	//Append the lines
  	var lines = svgw.selectAll(".lines")
      	.data(cohortLines)
    	.enter().append("g")
  
 ;


	//Actual full opacity thin line		
	lines.append("path")
	      	.attr("class", "line")
          .classed("mainline", true)
	      	.attr("d", function(d) { return line(d.values); })
	      	.style("stroke", function(d) { return color(d.name); })
			.style("stroke-width", 2);

  // Fading and Selecting Lines
  doHover();
  
  
// X-axis label
d3.select("svg").append("text")
            .attr("text-anchor", "middle")  
            .attr("transform", "translate("
                  +((width + margin.left + margin.right)/2) +","
                  +(height + margin.top + margin.bottom/1.4)+")")  
            .text("Rank");

// Y-axis label
d3.select("svg").append("text")
            .attr("text-anchor", "middle")  
            .attr("transform", "translate("
                  + (margin.left/3) +","
                  +((height + margin.top + margin.bottom)/2)+")rotate(-90)")
            .text("Cumulative Proportion of Wins");  
  
});

  
// losses
  
d3.csv("losses.txt", function(error, data) {
  if (error) throw error;
  
  data.forEach(function (d,i) {
	  d.rank = +d.rank;
	  d.A = +d.A;
	  d.B = +d.B;
	  d.C = +d.C;
    d.D = +d.D;
    d.E = +d.E;
  })

  var keys = d3.keys(data[0]).filter(function(key) { return key !== "rank"; });
  
  var cohortLines = keys.map(function(name) {
    return {
      name: name,
      values: data.map(function(d) {
  	        return {
  				rank: d.rank,
  				cohort: d[name]};
  		})
    };
  });

  //Append axes
  svgl.append("g")
      .attr("class", "x axis")
      .attr("transform", "translate(0," + height + ")")
      .call(xAxis);

  svgl.append("g")
      .attr("class", "y axis")
      .call(yAxis);

  
  	//Append the lines
  	var lines = svgl.selectAll(".lines")
      	.data(cohortLines)
    	.enter().append("g")
      	.attr("class", "lines")
   

	//Actual full opacity thin line		
	lines.append("path")
	      	.attr("class", "line")
          .classed("mainlinel", true)
	      	.attr("d", function(d) { return line(d.values); })
	      	.style("stroke", function(d) { return color(d.name); })
			.style("stroke-width", 2)
  
 ;

// Fading and Selecting Lines
 doHover()
  
 
// X-axis label
d3.select("body").select("div#chartl").select("svg").append("text")
            .attr("text-anchor", "middle")  
            .attr("transform", "translate("
                  +((width + margin.left + margin.right)/2) +","
                  +(height + margin.top + margin.bottom/1.4)+")")  
            .text("Rank");

// Y-axis label
d3.select("body").select("div#chartl").select("svg").append("text")
            .attr("text-anchor", "middle")  
            .attr("transform", "translate("
                  + (margin.left/3) +","
                  +((height + margin.top + margin.bottom)/2)+")rotate(-90)")
            .text("Cumulative Proportion of Losses");  
  
    
});  
  
    
function doHover() {
  d3.selectAll('path.line')//register this to all paths
    .on("mouseover", function(d,i) {
      //first make all lines vanish
      d3.selectAll('path.line')
        .style("opacity", 0.1)
        .style("stroke-width", 2)
      //only show lines which have same name.
      d3.selectAll('path.line').filter(function(d1) {
          return d.name == d1.name
        })
        .style("opacity", 1)
        .style("stroke-width", 4);
        
      d3.select("div#chartw.container svg")
        .append("text")
        .attr("id", "cohorttext")
        .html("Cohort " + d.name)
        .attr("x", (width) / 1.2)
        .attr("y", margin.top * 1.5)
        .style("fill", color(d.name))
        .style("font-weight", "bold")
        .style("font-size", "18px");

      d3.select("div#chartw.container svg")
        .append("text")
        .attr("id", "cohorttextx")
        .html("Gini = " + giniw[i%giniw.length])//so that its always within the max length
        .attr("x", (width) / 1.2)
        .attr("y", 20 + margin.top * 1.5)
        .style("fill", color(d.name))
        .style("font-size", "14px");  
        
        
        
    d3.select("div#chartl.container svg")
        .append("text")
        .attr("id", "cohorttext")
        .text("Cohort " + d.name)
        .attr("x", (width) / 1.2)
        .attr("y", margin.top * 1.5)
        .style("fill", color(d.name))
        .style("font-weight", "bold")
        .style("font-size", "18px");


   d3.select("div#chartl.container svg")
        .append("text")
        .attr("id", "cohorttextx")
        .html("Gini = " + ginil[i%ginil.length])//so that its always within the max length
        .attr("x", (width) / 1.2)
        .attr("y", 20 + margin.top * 1.5)
        .style("fill", color(d.name))
        .style("font-size", "14px");    
    })
    .on("mouseout", function() {
      d3.selectAll('path.line')
        .style("opacity", 1)
        .style("stroke-width", 2);
      //selectALL because we are giving same id to both text in 2 svgs  
      d3.selectAll("#cohorttext").remove()
      d3.selectAll("#cohorttextx").remove()  

    })
}  
  
  
  
</script>

losses.txt

"rank","A","B","C","D","E"
1,1,1,1,1,1
2,0.87906976744186,0.854807692307692,0.83034379671151,0.84828349944629,0.855758880516685
3,0.761860465116279,0.736538461538462,0.721973094170404,0.739756367663344,0.734122712594187
4,0.644651162790698,0.624038461538462,0.615844544095665,0.638981173864895,0.632938643702906
5,0.536744186046512,0.529807692307692,0.511210762331839,0.539313399778516,0.539289558665231
6,0.436279069767442,0.4375,0.414050822122571,0.440753045404208,0.446716899892357
7,0.336744186046512,0.349038461538462,0.32660687593423,0.35437430786268,0.355220667384284
8,0.252093023255814,0.261538461538462,0.243647234678625,0.272425249169435,0.266953713670614
9,0.177674418604651,0.190384615384615,0.174140508221226,0.193798449612403,0.196986006458558
10,0.113488372093023,0.125,0.105381165919283,0.120708748615725,0.135629709364909
11,0.052093023255814,0.0644230769230769,0.0523168908819133,0.062015503875969,0.077502691065662
12,0.0027906976744186,0.00961538461538462,0.0254110612855007,0.00332225913621262,0.031216361679225

wins.txt

"rank","A","B","C","D","E"
1,1,1,1,1,1
2,0.543255813953488,0.315384615384615,0.616591928251121,0.39202657807309,0.369214208826695
3,0.40093023255814,0.144230769230769,0.463378176382661,0.30343300110742,0.181916038751346
4,0.267906976744186,0.0836538461538461,0.366218236173393,0.231450719822813,0.0742734122712594
5,0.183255813953488,0.0625,0.273542600896861,0.172757475083056,0.0581270182992465
6,0.122790697674419,0.0451923076923077,0.195814648729447,0.116279069767442,0.0441334768568353
7,0.0874418604651163,0.0355769230769231,0.121076233183857,0.0786267995570321,0.0322927879440258
8,0.0623255813953488,0.0269230769230769,0.0852017937219731,0.0409745293466224,0.0215285252960172
9,0.0427906976744186,0.0192307692307692,0.0568011958146487,0.0276854928017719,0.0129171151776103
10,0.0241860465116279,0.0125,0.0298953662182362,0.0155038759689922,0.00645855758880517
11,0.012093023255814,0.00673076923076923,0.00597907324364723,0.00664451827242525,0.00107642626480086
12,0.00465116279069767,0.00288461538461538,0.00298953662182362,0.00221483942414175,0