Skip to content

Instantly share code, notes, and snippets.

@armollica
Last active April 10, 2016 19:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save armollica/5a728eea67694fba94d675dd036d6ecc to your computer and use it in GitHub Desktop.
Save armollica/5a728eea67694fba94d675dd036d6ecc to your computer and use it in GitHub Desktop.
Alcohol Impaired Driving Deaths
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;
};
<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>
[{"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}]
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment