block by armollica 5a728eea67694fba94d675dd036d6ecc

Alcohol Impaired Driving Deaths

Full Screen

Driving deaths and the rate at which an alcohol-impaired driver is involved in Wisconsin counties.

Uses the d3.forceChart() plugin to create the cartogram layout. Cartogram style inspired by this and this block. Data from County Health Rankings & Roadmaps.

index.html

<html>
  <head>
    <style>
      body {
        font: 14px sans-serif;
      }
      .cartogram text {
        pointer-events: none;
        text-shadow:
          -1px -1px 0.5px #fff,  
            1px -1px 0.5px #fff,
            -1px 1px 0.5px #fff,
            1px 1px 0.5px #fff;
      }
    </style>
  </head>
  <body>
    <script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/topojson/1.6.20/topojson.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/queue-async/1.0.7/queue.min.js"></script>
    <script src="force-chart.js"></script>
    <script>
      var width = 960,
          height = 500;
      
      var area = function(d) { return d.driving_deaths; },
          color = function(d) { return d.pct_alcohol_driving_deaths; };
      
      var areaScale = d3.scale.linear().range([300, 3500]),
          colorScale = d3.scale.threshold()
            .domain([30, 40, 50, 60])
            .range(["#F8C8AB","#E08D74","#B75947","#852D23","#4C0A08"]);
      
      var rValue = function(d) { return Math.sqrt(areaScale(area(d))/ Math.PI); },
          colorValue = function(d) { return colorScale(color(d)); };
      
      var cartogram = d3.forceChart()
        .size([width, height])
        .padding(4)
        .shape("square")
        .draggable(false)
        .x(function(d) { return d.centroid[0]; })
        .y(function(d) { return d.centroid[1]; })
        .r(rValue)      // In order to make for a nicer layout...
        .rStart(4)      // start squares out small so there are no collisions
        .rGravity(10);  // and have radius grow quickly
      
      var projection = d3.geo.conicConformal()
        .rotate([90, 0])
        .center([1.5, 44.4])
        .parallels([29.5, 45.5])
        .scale(6000)
        .translate([width/2, height/2])
        .precision(0.1);

      var path = d3.geo.path()
          .projection(projection);

      var svg = d3.select("body").append("svg")
        .attr("width", width)
        .attr("height", height);
       
      queue()
        .defer(d3.json, "wi.json")
        .defer(d3.json, "wi-alcohol.json")
        .await(ready);
      
      function ready(error, wi, alcohol) {
        if (error) throw error;
        
        // Merge county geography with alcohol-related data 
        var countyData = topojson.feature(wi, wi.objects.wi).features
          .map(function(feature) {
            
            // Get the alcohol-related data for the county
            var fips = +feature.properties.GEOID;
            var d = alcohol
              .filter(function(d) {
                return d.fips === fips;
              })[0];
            
            // Get the centroid for the county
            d.centroid = path.centroid(feature);
            
            return d;
          });
        
        areaScale.domain([0, d3.max(countyData, area)]);
        
        // Draw legends
        svg.append("g").call(legend)
          .attr("class", "legend");
        
        // Draw cartogram
        svg.append("g").call(cartogram, countyData)
            .attr("class", "cartogram")
          .selectAll(".node").append("rect")
            .attr("x", function(d) { return -d.r0; })
            .attr("y", function(d) { return -d.r0; })
            .attr("width", function(d) { return 2*d.r0; })
            .attr("height", function(d) { return 2*d.r0; })
            .attr("fill", colorValue)
            .on("mouseenter", drawTooltip)
            .on("mouseleave", removeTooltip);
      }
      
      function drawTooltip(d) {
        var map = d3.select(".cartogram");
        
        map.append("text")
          .attr("x", d.x)
          .attr("y", d.y)
          .attr("dy", -d.r - 3)
          .style("text-anchor", "middle")
          .style("font-size", "18px")
          .style("font-weight", "bold")
          .text(d.county)
          
        map.append("text")
          .attr("x", d.x)
          .attr("y", d.y)
          .attr("dy", 3)
          .style("text-anchor", "middle")
          .style("font-size", "12px")
          .style("font-weight", "bold")
          .text(d.pct_alcohol_driving_deaths + "%");
      }
      
      function removeTooltip() {
        d3.selectAll(".cartogram text").remove();
      }
      
      function legend(selection) {
        var legendData = {
          size: [
            { driving_deaths: 100, text: "100 driving deaths", dy: 0 },
            { driving_deaths: 50, text: "50 deaths", dy: 45 },
            { driving_deaths: 10, text: "10 deaths", dy: 80 }
          ],
          color: [
            { pct_alcohol_driving_deaths: 60, text: "60% alcohol-impaired", dy: 0 },
            { pct_alcohol_driving_deaths: 50, text: "50%", dy: 20 },
            { pct_alcohol_driving_deaths: 40, text: "40%", dy: 40 },
            { pct_alcohol_driving_deaths: 30, text: "30%", dy: 60 },
            { pct_alcohol_driving_deaths: 20, text: "", dy: 80 }
          ]
        };
        
        // Size legend
        selection.append("g")
            .attr("class", "legend size")
            .attr("transform", "translate(" + 3*width/4 + "," + height/4 + ")")
          .selectAll(".item").data(legendData.size)
            .enter().append("g")
              .attr("class", "item")
              .attr("transform", function(d) { return "translate(0," + d.dy + ")"; })
              .each(function(d) {
                var r = rValue(d);
                
                d3.select(this).append("rect")
                  .attr("x", -r)
                  .attr("y", -r)
                  .attr("width", 2*r)
                  .attr("height", 2*r)
                  .style("fill", "none")
                  .style("stroke", "slategrey")
                  .style("stroke-width", 1.5);
                  
                d3.select(this).append("text")
                  .attr("dx", 30)
                  .attr("dy", 5)
                  .text(d.text);
              });
        
        // Color legend
        selection.append("g")
            .attr("class", "legend color")
            .attr("transform", "translate(" + 3*width/4 + "," + height/2 + ")")
          .selectAll(".item").data(legendData.color)
            .enter().append("g")
              .attr("class", "item")
              .attr("transform", function(d) { return "translate(0," + d.dy + ")"; })
              .each(function(d) {
                d3.select(this).append("rect")
                  .attr("x", -10)
                  .attr("y", -10)
                  .attr("width", 20)
                  .attr("height", 20)
                  .style("fill", colorValue);
                d3.select(this).append("text")
                  .attr("dx", 18)
                  .attr("dy", 15)
                  .text(d.text);
                d3.select(this).append("line")
                  .attr("x1", 10)
                  .attr("x2", 14)
                  .attr("y1", 10)
                  .attr("y2", 10)
                  .style("stroke", "slategrey")
                  .style("stroke-width", d.text == "" ? 0 : 1.5);
              });
      }
    </script>
  </body>
</html>

force-chart.js

d3.forceChart = function() {
  var width = 400, 
      height = 300, 
      padding = 3,
      x = function(d) { return d[0]; },
      y = function(d) { return d[1]; },
      r = function(d) { return d[2]; },
      xStart = function(d) { return x(d) + 50*Math.random() - 25},
      yStart = function(d) { return y(d) + 50*Math.random() - 25},
      rStart = function(d) { return r(d); },
      draggable = true,
      xGravity = function(d) { return 1; },
      yGravity = function(d) { return 1; },
      rGravity = function(d) { return 1; },
      shape = "circle",
      tickUpdate = function() {};
  
  var force = d3.layout.force()
    .charge(0)
    .gravity(0);
  
  function chart(selection, nodes) {
    
    if (shape === "circle") { collide = collideCircle; }
    else if (shape === "square") { collide = collideSquare; }
    else { console.error("forceChart.shape must be 'circle' or 'square'"); }
    
    nodes = nodes
      .map(function(d) {
        d.x = xStart(d);
        d.y = yStart(d);
        d.r = rStart(d);
        d.x0 = x(d);
        d.y0 = y(d);
        d.r0 = r(d);
        return d;    
      });
      
    var gNodes = selection.selectAll(".node").data(nodes)
      .enter().append("g")
        .attr("class", "node")
        .call(draggable ? force.drag : function() {});
        
    force
      .size([width, height])
      .nodes(nodes)
      .on("tick", tick)
      .start();
      
    function tick(e) {
      gNodes
        .each(gravity(e.alpha * .1))
        .each(collide(.5))
        .attr("transform", function(d) {
          return "translate(" + d.x + "," + d.y + ")";
        })
        .call(tickUpdate);
    }

    function gravity(k) {
      return function(d) {
        var dx = d.x0 - d.x,
            dy = d.y0 - d.y,
            dr = d.r0 - d.r;
            
        d.x += dx * k * xGravity(d);
        d.y += dy * k * yGravity(d);
        d.r += dr * k * rGravity(d);
      };
    }

    function collideCircle(k) {
      var q = d3.geom.quadtree(nodes);
      return function(node) {
        var nr = node.r + padding,
            nx1 = node.x - nr,
            nx2 = node.x + nr,
            ny1 = node.y - nr,
            ny2 = node.y + nr;
        q.visit(function(quad, x1, y1, x2, y2) {
          if (quad.point && (quad.point !== node)) {
            var x = node.x - quad.point.x,
                y = node.y - quad.point.y,
                l = x * x + y * y,
                r = nr + quad.point.r;
            if (l < r * r) {
              l = ((l = Math.sqrt(l)) - r) / l * k;
              node.x -= x *= l;
              node.y -= y *= l;
              quad.point.x += x;
              quad.point.y += y;
            }
          }
          return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1;
        });
      };
    }
    
    function collideSquare(k) {
    var q = d3.geom.quadtree(nodes);
    return function(node) {
      var nr = node.r + padding,
          nx1 = node.x - nr,
          nx2 = node.x + nr,
          ny1 = node.y - nr,
          ny2 = node.y + nr;
      q.visit(function(quad, x1, y1, x2, y2) {
        if (quad.point && (quad.point !== node)) {
          var x = node.x - quad.point.x,
              y = node.y - quad.point.y,
              lx = Math.abs(x),
              ly = Math.abs(y),
              r = nr + quad.point.r;
          if (lx < r && ly < r) {
            if (lx > ly) {
              lx = (lx - r) * (x < 0 ? -k : k);
              node.x -= lx;
              quad.point.x += lx;
            } else {
              ly = (ly - r) * (y < 0 ? -k : k);
              node.y -= ly;
              quad.point.y += ly;
            }
          }
        }
        return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1;
      });
    };
  }
  }
  
  chart.size = function(_) {
    if (!arguments.length) return [width, height];
    width = _[0];
    height = _[1];
    return chart;
  };
  
  chart.x = function(_) {
    if (!arguments.length) return x;
    if (typeof _ === "number") {
      x = function() { return _; };
    }
    else if (typeof _ === "function") {
      x = _;
    }
    return chart;
  };
  
  chart.y = function(_) {
    if (!arguments.length) return y;
    if (typeof _ === "number") {
      y = function() { return _; };
    }
    else if (typeof _ === "function") {
      y = _;
    }
    return chart;
  };
  
  chart.r = function(_) {
    if (!arguments.length) return r;
    if (typeof _ === "number") {
      r = function() { return _; };
    }
    else if (typeof _ === "function") {
      r = _;
    }
    return chart;
  };
  
  chart.draggable = function(_) {
    if (!arguments.length) return draggable;
    draggable = _;
    return chart;
  };
  
  chart.padding = function(_) {
    if (!arguments.length) return padding;
    padding = _;
    return chart;
  };
  
  chart.xGravity = function(_) {
    if (!arguments.length) return xGravity;
    if (typeof _ === "number") {
      xGravity = function() { return _; };
    }
    else if (typeof _ === "function") {
      xGravity = _;
    }
    return chart;
  };
  
  chart.yGravity = function(_) {
    if (!arguments.length) return yGravity;
    if (typeof _ === "number") {
      yGravity = function() { return _; };
    }
    else if (typeof _ === "function") {
      yGravity = _;
    }
    return chart;
  };
  
  chart.rGravity = function(_) {
    if (!arguments.length) return rGravity;
    if (typeof _ === "number") {
      rGravity = function() { return _; };
    }
    else if (typeof _ === "function") {
      rGravity = _;
    }
    return chart;
  };
  
  chart.xStart = function(_) {
    if (!arguments.length) return xStart;
    if (typeof _ === "number") {
      xStart = function() { return _; };
    }
    else if (typeof _ === "function") {
      xStart = _;
    }
    return chart;
  };
  
  chart.yStart = function(_) {
    if (!arguments.length) return yStart;
    if (typeof _ === "number") {
      yStart = function() { return _; };
    }
    else if (typeof _ === "function") {
      yStart = _;
    }
    return chart;
  };
  
  chart.rStart = function(_) {
    if (!arguments.length) return rStart;
    if (typeof _ === "number") {
      rStart = function() { return _; };
    }
    else if (typeof _ === "function") {
      rStart = _;
    }
    return chart;
  };
  
  chart.shape = function(_) {
    if (!arguments.length) return shape;
    shape = _;
    return chart;
  };
  
  chart.tickUpdate = function(_) {
    if (!arguments.length) return tickUpdate;
    tickUpdate = _;
    return chart;
  };
  
  return chart;
};

wi-alcohol.json

[{"fips":55001,"county":"Adams","pct_excessive_drinking":23,"alcohol_driving_deaths":11,"driving_deaths":18,"pct_alcohol_driving_deaths":61,"population":20215},{"fips":55003,"county":"Ashland","pct_excessive_drinking":22,"alcohol_driving_deaths":3,"driving_deaths":7,"pct_alcohol_driving_deaths":43,"population":16103},{"fips":55005,"county":"Barron","pct_excessive_drinking":23,"alcohol_driving_deaths":5,"driving_deaths":26,"pct_alcohol_driving_deaths":19,"population":45455},{"fips":55007,"county":"Bayfield","pct_excessive_drinking":22,"alcohol_driving_deaths":13,"driving_deaths":22,"pct_alcohol_driving_deaths":59,"population":14985},{"fips":55009,"county":"Brown","pct_excessive_drinking":26,"alcohol_driving_deaths":35,"driving_deaths":75,"pct_alcohol_driving_deaths":47,"population":256670},{"fips":55011,"county":"Buffalo","pct_excessive_drinking":23,"alcohol_driving_deaths":6,"driving_deaths":10,"pct_alcohol_driving_deaths":60,"population":13188},{"fips":55013,"county":"Burnett","pct_excessive_drinking":21,"alcohol_driving_deaths":8,"driving_deaths":23,"pct_alcohol_driving_deaths":35,"population":15328},{"fips":55015,"county":"Calumet","pct_excessive_drinking":26,"alcohol_driving_deaths":8,"driving_deaths":16,"pct_alcohol_driving_deaths":50,"population":49491},{"fips":55017,"county":"Chippewa","pct_excessive_drinking":23,"alcohol_driving_deaths":16,"driving_deaths":32,"pct_alcohol_driving_deaths":50,"population":63460},{"fips":55019,"county":"Clark","pct_excessive_drinking":22,"alcohol_driving_deaths":11,"driving_deaths":33,"pct_alcohol_driving_deaths":33,"population":34423},{"fips":55021,"county":"Columbia","pct_excessive_drinking":26,"alcohol_driving_deaths":14,"driving_deaths":49,"pct_alcohol_driving_deaths":29,"population":56615},{"fips":55023,"county":"Crawford","pct_excessive_drinking":23,"alcohol_driving_deaths":3,"driving_deaths":12,"pct_alcohol_driving_deaths":25,"population":16392},{"fips":55025,"county":"Dane","pct_excessive_drinking":26,"alcohol_driving_deaths":72,"driving_deaths":168,"pct_alcohol_driving_deaths":43,"population":516284},{"fips":55027,"county":"Dodge","pct_excessive_drinking":26,"alcohol_driving_deaths":16,"driving_deaths":53,"pct_alcohol_driving_deaths":30,"population":88574},{"fips":55029,"county":"Door","pct_excessive_drinking":21,"alcohol_driving_deaths":3,"driving_deaths":10,"pct_alcohol_driving_deaths":30,"population":27766},{"fips":55031,"county":"Douglas","pct_excessive_drinking":24,"alcohol_driving_deaths":14,"driving_deaths":30,"pct_alcohol_driving_deaths":47,"population":43698},{"fips":55033,"county":"Dunn","pct_excessive_drinking":25,"alcohol_driving_deaths":9,"driving_deaths":33,"pct_alcohol_driving_deaths":27,"population":44305},{"fips":55035,"county":"Eau Claire","pct_excessive_drinking":25,"alcohol_driving_deaths":13,"driving_deaths":35,"pct_alcohol_driving_deaths":37,"population":101564},{"fips":55037,"county":"Florence","pct_excessive_drinking":21,"alcohol_driving_deaths":3,"driving_deaths":6,"pct_alcohol_driving_deaths":50,"population":4481},{"fips":55039,"county":"Fond du Lac","pct_excessive_drinking":25,"alcohol_driving_deaths":15,"driving_deaths":58,"pct_alcohol_driving_deaths":26,"population":101759},{"fips":55041,"county":"Forest","pct_excessive_drinking":22,"alcohol_driving_deaths":10,"driving_deaths":16,"pct_alcohol_driving_deaths":63,"population":9127},{"fips":55043,"county":"Grant","pct_excessive_drinking":26,"alcohol_driving_deaths":10,"driving_deaths":30,"pct_alcohol_driving_deaths":33,"population":51829},{"fips":55045,"county":"Green","pct_excessive_drinking":25,"alcohol_driving_deaths":9,"driving_deaths":27,"pct_alcohol_driving_deaths":33,"population":37063},{"fips":55047,"county":"Green Lake","pct_excessive_drinking":24,"alcohol_driving_deaths":3,"driving_deaths":13,"pct_alcohol_driving_deaths":23,"population":18836},{"fips":55049,"county":"Iowa","pct_excessive_drinking":25,"alcohol_driving_deaths":8,"driving_deaths":22,"pct_alcohol_driving_deaths":36,"population":23825},{"fips":55051,"county":"Iron","pct_excessive_drinking":22,"alcohol_driving_deaths":3,"driving_deaths":8,"pct_alcohol_driving_deaths":38,"population":5917},{"fips":55053,"county":"Jackson","pct_excessive_drinking":23,"alcohol_driving_deaths":4,"driving_deaths":23,"pct_alcohol_driving_deaths":17,"population":20652},{"fips":55055,"county":"Jefferson","pct_excessive_drinking":25,"alcohol_driving_deaths":13,"driving_deaths":43,"pct_alcohol_driving_deaths":30,"population":84395},{"fips":55057,"county":"Juneau","pct_excessive_drinking":23,"alcohol_driving_deaths":13,"driving_deaths":31,"pct_alcohol_driving_deaths":42,"population":26395},{"fips":55059,"county":"Kenosha","pct_excessive_drinking":23,"alcohol_driving_deaths":28,"driving_deaths":84,"pct_alcohol_driving_deaths":33,"population":168068},{"fips":55061,"county":"Kewaunee","pct_excessive_drinking":24,"alcohol_driving_deaths":4,"driving_deaths":11,"pct_alcohol_driving_deaths":36,"population":20444},{"fips":55063,"county":"La Crosse","pct_excessive_drinking":26,"alcohol_driving_deaths":14,"driving_deaths":46,"pct_alcohol_driving_deaths":30,"population":118011},{"fips":55065,"county":"Lafayette","pct_excessive_drinking":24,"alcohol_driving_deaths":10,"driving_deaths":21,"pct_alcohol_driving_deaths":48,"population":16853},{"fips":55067,"county":"Langlade","pct_excessive_drinking":22,"alcohol_driving_deaths":9,"driving_deaths":19,"pct_alcohol_driving_deaths":47,"population":19410},{"fips":55069,"county":"Lincoln","pct_excessive_drinking":24,"alcohol_driving_deaths":8,"driving_deaths":17,"pct_alcohol_driving_deaths":47,"population":28493},{"fips":55071,"county":"Manitowoc","pct_excessive_drinking":24,"alcohol_driving_deaths":32,"driving_deaths":54,"pct_alcohol_driving_deaths":59,"population":80160},{"fips":55073,"county":"Marathon","pct_excessive_drinking":24,"alcohol_driving_deaths":20,"driving_deaths":74,"pct_alcohol_driving_deaths":27,"population":135780},{"fips":55075,"county":"Marinette","pct_excessive_drinking":23,"alcohol_driving_deaths":20,"driving_deaths":51,"pct_alcohol_driving_deaths":39,"population":41298},{"fips":55077,"county":"Marquette","pct_excessive_drinking":22,"alcohol_driving_deaths":6,"driving_deaths":18,"pct_alcohol_driving_deaths":33,"population":15050},{"fips":55078,"county":"Menominee","pct_excessive_drinking":21,"alcohol_driving_deaths":4,"driving_deaths":7,"pct_alcohol_driving_deaths":57,"population":4522},{"fips":55079,"county":"Milwaukee","pct_excessive_drinking":22,"alcohol_driving_deaths":107,"driving_deaths":289,"pct_alcohol_driving_deaths":37,"population":956406},{"fips":55081,"county":"Monroe","pct_excessive_drinking":24,"alcohol_driving_deaths":8,"driving_deaths":24,"pct_alcohol_driving_deaths":33,"population":45379},{"fips":55083,"county":"Oconto","pct_excessive_drinking":25,"alcohol_driving_deaths":18,"driving_deaths":34,"pct_alcohol_driving_deaths":53,"population":37417},{"fips":55085,"county":"Oneida","pct_excessive_drinking":22,"alcohol_driving_deaths":12,"driving_deaths":36,"pct_alcohol_driving_deaths":33,"population":35563},{"fips":55087,"county":"Outagamie","pct_excessive_drinking":27,"alcohol_driving_deaths":15,"driving_deaths":60,"pct_alcohol_driving_deaths":25,"population":182006},{"fips":55089,"county":"Ozaukee","pct_excessive_drinking":25,"alcohol_driving_deaths":12,"driving_deaths":26,"pct_alcohol_driving_deaths":46,"population":87470},{"fips":55091,"county":"Pepin","pct_excessive_drinking":23,"alcohol_driving_deaths":2,"driving_deaths":5,"pct_alcohol_driving_deaths":40,"population":7335},{"fips":55093,"county":"Pierce","pct_excessive_drinking":27,"alcohol_driving_deaths":21,"driving_deaths":42,"pct_alcohol_driving_deaths":50,"population":40958},{"fips":55095,"county":"Polk","pct_excessive_drinking":23,"alcohol_driving_deaths":17,"driving_deaths":37,"pct_alcohol_driving_deaths":46,"population":43437},{"fips":55097,"county":"Portage","pct_excessive_drinking":26,"alcohol_driving_deaths":24,"driving_deaths":41,"pct_alcohol_driving_deaths":59,"population":70482},{"fips":55099,"county":"Price","pct_excessive_drinking":21,"alcohol_driving_deaths":1,"driving_deaths":8,"pct_alcohol_driving_deaths":13,"population":13675},{"fips":55101,"county":"Racine","pct_excessive_drinking":24,"alcohol_driving_deaths":22,"driving_deaths":62,"pct_alcohol_driving_deaths":35,"population":195163},{"fips":55103,"county":"Richland","pct_excessive_drinking":22,"alcohol_driving_deaths":12,"driving_deaths":21,"pct_alcohol_driving_deaths":57,"population":17662},{"fips":55105,"county":"Rock","pct_excessive_drinking":23,"alcohol_driving_deaths":36,"driving_deaths":90,"pct_alcohol_driving_deaths":40,"population":161188},{"fips":55107,"county":"Rusk","pct_excessive_drinking":21,"alcohol_driving_deaths":2,"driving_deaths":8,"pct_alcohol_driving_deaths":25,"population":14333},{"fips":55109,"county":"St. Croix","pct_excessive_drinking":26,"alcohol_driving_deaths":13,"driving_deaths":55,"pct_alcohol_driving_deaths":24,"population":86759},{"fips":55111,"county":"Sauk","pct_excessive_drinking":24,"alcohol_driving_deaths":18,"driving_deaths":43,"pct_alcohol_driving_deaths":42,"population":63379},{"fips":55113,"county":"Sawyer","pct_excessive_drinking":21,"alcohol_driving_deaths":2,"driving_deaths":11,"pct_alcohol_driving_deaths":18,"population":16437},{"fips":55115,"county":"Shawano","pct_excessive_drinking":23,"alcohol_driving_deaths":11,"driving_deaths":43,"pct_alcohol_driving_deaths":26,"population":41579},{"fips":55117,"county":"Sheboygan","pct_excessive_drinking":24,"alcohol_driving_deaths":12,"driving_deaths":41,"pct_alcohol_driving_deaths":29,"population":115290},{"fips":55119,"county":"Taylor","pct_excessive_drinking":25,"alcohol_driving_deaths":5,"driving_deaths":11,"pct_alcohol_driving_deaths":45,"population":20540},{"fips":55121,"county":"Trempealeau","pct_excessive_drinking":24,"alcohol_driving_deaths":7,"driving_deaths":23,"pct_alcohol_driving_deaths":30,"population":29509},{"fips":55123,"county":"Vernon","pct_excessive_drinking":22,"alcohol_driving_deaths":14,"driving_deaths":32,"pct_alcohol_driving_deaths":44,"population":30362},{"fips":55125,"county":"Vilas","pct_excessive_drinking":20,"alcohol_driving_deaths":8,"driving_deaths":16,"pct_alcohol_driving_deaths":50,"population":21398},{"fips":55127,"county":"Walworth","pct_excessive_drinking":25,"alcohol_driving_deaths":27,"driving_deaths":68,"pct_alcohol_driving_deaths":40,"population":103527},{"fips":55129,"county":"Washburn","pct_excessive_drinking":22,"alcohol_driving_deaths":4,"driving_deaths":14,"pct_alcohol_driving_deaths":29,"population":15694},{"fips":55131,"county":"Washington","pct_excessive_drinking":26,"alcohol_driving_deaths":24,"driving_deaths":65,"pct_alcohol_driving_deaths":37,"population":133251},{"fips":55133,"county":"Waukesha","pct_excessive_drinking":24,"alcohol_driving_deaths":41,"driving_deaths":114,"pct_alcohol_driving_deaths":36,"population":395118},{"fips":55135,"county":"Waupaca","pct_excessive_drinking":25,"alcohol_driving_deaths":18,"driving_deaths":43,"pct_alcohol_driving_deaths":42,"population":52066},{"fips":55137,"county":"Waushara","pct_excessive_drinking":22,"alcohol_driving_deaths":13,"driving_deaths":36,"pct_alcohol_driving_deaths":36,"population":24178},{"fips":55139,"county":"Winnebago","pct_excessive_drinking":26,"alcohol_driving_deaths":25,"driving_deaths":56,"pct_alcohol_driving_deaths":45,"population":169511},{"fips":55141,"county":"Wood","pct_excessive_drinking":24,"alcohol_driving_deaths":8,"driving_deaths":32,"pct_alcohol_driving_deaths":25,"population":73608}]