Skip to content

Instantly share code, notes, and snippets.

@andrewharvey
Created July 28, 2012 07:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewharvey/3192345 to your computer and use it in GitHub Desktop.
Save andrewharvey/3192345 to your computer and use it in GitHub Desktop.
ASGS 2011 Mesh Block Statistics and Graphs
#!/usr/bin/perl -w
# Converts CSV data into JSON as required by NVD3.js
# This script is licensed CC0 by Andrew Harvey <andrew.harvey4@gmail.com>
#
# To the extent possible under law, the person who associated CC0
# with this work has waived all copyright and related or neighboring
# rights to this work.
# http://creativecommons.org/publicdomain/zero/1.0/
use strict;
use JSON;
# check usage
if (!defined $ARGV[0]) {
print STDERR "Usage: $0 <dataset_name>\n";
exit 1;
}
# make a new JSON OO object using the pretty printer
my $json = JSON->new->pretty;
# make a new JSON OO object without using the pretty printer
#my $json = JSON->new;
# list of rows (where rows are hashrefs)
my @rows;
while (<STDIN>) {
chomp;
my ($label, $value) = split /,/;
my $row_ref = { "label" => $label, "value" => $value };
push @rows, $row_ref;
}
my $hash_ref = { "key" => "$ARGV[0]", "values" => \@rows};
# convert from perl data structures to JSON
print $json->encode($hash_ref);
#!/bin/bash
# This script is licensed CC0 by Andrew Harvey <andrew.harvey4@gmail.com>
#
# To the extent possible under law, the person who associated CC0
# with this work has waived all copyright and related or neighboring
# rights to this work.
# http://creativecommons.org/publicdomain/zero/1.0/
# declare functions
csv () {
psql --output="csv/$1.csv" --no-align --field-separator=',' --tuples-only --command="$2"
}
mkdir -p csv
# create csv files
csv category_counts 'SELECT category, count(code) FROM asgs_2011.mb GROUP BY category ORDER BY count DESC;'
csv category_areas 'SELECT category, sum(ST_Area(geom)) FROM asgs_2011.mb GROUP BY category ORDER BY sum DESC;'
# ## Before you Run
# You need to have a PostgreSQL database up and running with data
# populated by asgs2pgsql - https://github.com/andrewharvey/asgs2pgsql
#
# You also need to ensure you PG* environment variables are set up.
# See http://www.postgresql.org/docs/current/static/libpq-envars.html
# ## License
# This script is licensed CC0 by Andrew Harvey <andrew.harvey4@gmail.com>
#
# To the extent possible under law, the person who associated CC0
# with this work has waived all copyright and related or neighboring
# rights to this work.
# http://creativecommons.org/publicdomain/zero/1.0/
all : csv json
csv :
./make-csv.sh
json :
mkdir -p json
./csv2json.pl "Mesh Block Counts by Category" < csv/category_counts.csv > json/asgs_2011-mb-counts-by-category.json
./csv2json.pl "Mesh Block Areas by Category" < csv/category_areas.csv > json/asgs_2011-mb-areas-by-category.json
clean :
rm -rf csv json
/*
The data following is derived from the Australian Bureau of Statistics <a href="http://abs.gov.au/websitedbs/D3310114.nsf/home/Australian+Statistical+Geography+Standard+(ASGS)">Australian Statistical Geography Standard 2011</a>, Mesh Block Structure, which is © Commonwealth of Australia and used under the terms of the <a href="http://creativecommons.org/licenses/by/2.5/au/">Creative Commons Attribution 2.5 Australia license</a>.
*/
// The JSON generated by https://gist.github.com/3192345
var mbCountsByCategory = [
{
"values" : [
{
"value" : "218268",
"label" : "Residential"
},
{
"value" : "63504",
"label" : "Parkland"
},
{
"value" : "25348",
"label" : "Agricultural"
},
{
"value" : "17007",
"label" : "Commercial"
},
{
"value" : "8217",
"label" : "Education"
},
{
"value" : "7636",
"label" : "Industrial"
},
{
"value" : "4963",
"label" : "Water"
},
{
"value" : "1587",
"label" : "Transport"
},
{
"value" : "780",
"label" : "Hospital/Medical"
},
{
"value" : "209",
"label" : "Other"
},
{
"value" : "78",
"label" : "SHIPPING"
},
{
"value" : "11",
"label" : "MIGRATORY"
},
{
"value" : "9",
"label" : "NOUSUALRESIDENCE"
},
{
"value" : "9",
"label" : "OFFSHORE"
},
{
"value" : "1",
"label" : "ANTARCTICA"
}
],
"key" : "Mesh Block Counts by Category"
}
];
var mbAreasByCategory = [
{
"values" : [
{
"value" : "",
"label" : "SHIPPING"
},
{
"value" : "",
"label" : "NOUSUALRESIDENCE"
},
{
"value" : "",
"label" : "MIGRATORY"
},
{
"value" : "",
"label" : "ANTARCTICA"
},
{
"value" : "",
"label" : "OFFSHORE"
},
{
"value" : "8735597731289.3",
"label" : "Agricultural"
},
{
"value" : "814972676479.451",
"label" : "Parkland"
},
{
"value" : "55298999431.0938",
"label" : "Water"
},
{
"value" : "37317863100.6699",
"label" : "Residential"
},
{
"value" : "3502212306.95312",
"label" : "Other"
},
{
"value" : "2821416542.81445",
"label" : "Industrial"
},
{
"value" : "1455170802.60547",
"label" : "Commercial"
},
{
"value" : "797830048.066406",
"label" : "Education"
},
{
"value" : "263896961.103516",
"label" : "Transport"
},
{
"value" : "74288617.5273438",
"label" : "Hospital/Medical"
}
],
"key" : "Mesh Block Areas by Category"
}
];
<!DOCTYPE html>
<html lang="en">
<!--
This file is licenced CC0 http://creativecommons.org/publicdomain/zero/1.0/
-->
<head>
<meta charset="utf-8">
<title>ABS ASGS 2011 Mesh Block Statistics</title>
<link href="/javascript/nvd3/nv.d3.css" rel="stylesheet" type="text/css">
<script src="/javascript/d3/d3.js"></script>
<script src="/javascript/nvd3/nv.d3.min.js"></script>
<script src="mesh-block-graphs-data.js"></script>
</head>
<body>
<h1>ABS ASGS 2011 Mesh Block Statistics</h1>
<h2 id="mbAreasByCategoryTitle">Mesh Blocks Total Area by Category</h2>
<svg id="mbAreasByCategory"></svg>
<h2 id="mbAreasByCategoryTitle">Mesh Block Counts by Category</h2>
<svg id="mbCountsByCategory"></svg>
<p><a href="/leaflet.html#lat=-28;lon=133;zoom=5;map=asgs-2011-mb">See here for a geographic representation of the mesh blocks.</a></p>
<footer>These graphs are derived from data obtained from the Australian Bureau of Statistics <a href="http://abs.gov.au/websitedbs/D3310114.nsf/home/Australian+Statistical+Geography+Standard+(ASGS)">Australian Statistical Geography Standard 2011</a>, Mesh Block Structure, which is © Commonwealth of Australia and used under the terms of the <a href="http://creativecommons.org/licenses/by/2.5/au/">Creative Commons Attribution 2.5 Australia license</a>.</footer>
<script>
nv.addGraph(function() {
var width = 500,
height = 500;
var chart = nv.models.pieChart()
.x(function(d) { return d.label })
.y(function(d) { return d.value })
.color(d3.scale.category10().range())
.valueFormat(d3.format(',f'))
.width(width)
.height(height);
d3.select("#mbCountsByCategory")
.datum(mbCountsByCategory)
.transition().duration(1200)
.attr('width', width)
.attr('height', height)
.call(chart);
return chart;
});
nv.addGraph(function() {
var width = 500,
height = 500;
var chart = nv.models.pieChart()
.x(function(d) { return d.label })
.y(function(d) { return d.value / Math.pow(10,6) }) // x 10^6 for km^2
.color(d3.scale.category10().range())
.valueFormat(d3.format(',f'))
.width(width)
.height(height);
// FIXME help how do I override this?
//chart.tooltipContent = function (key, y, e, graph) {
// return '<h3>' + key + '</h3>' +
// '<p>' + y + ' km<sup>2</sup></p>'
// };
d3.select("#mbAreasByCategory")
.datum(mbAreasByCategory)
.transition().duration(1200)
.attr('width', width)
.attr('height', height)
.call(chart);
return chart;
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment