WhatfettleOne CSV, thirty stories: 3. Minimal viable histograms

This is day 3 of "One CSV, 30 stories":http://blog.whatfettle.com/2014/10/13/one-csv-thirty-stories/ a series of articles exploring "price paid data":https://www.gov.uk/government/statistical-data-sets/price-paid-data-downloads from the Land Registry found on GOV.UK. The code for this and the other articles is available as open source from "GitHub":https://github.com/psd/price-paid-data

"Yesterday":http://blog.whatfettle.com/2014/10/15/one-csv-thirty-stories-2-counting-things/ we counted the occurrence of values in each column and made some frequency data. Processing the files and writing up the findings took me a bit longer than I'd have liked. Today I've a seat on the train and aim to use my commute home to timebox some quick and dirty histograms. These are a cinch in awk for anyone who grew up playing with BASIC which in my case involved chewing up rolls of paper on my VI form college's teletype link to a "Univac 1100/60":http://en.wikipedia.org/?title=UNIVAC_1100/60 in Teesside Polytechnic:

bc. $ head -25 price.tsv | awk 'NR == 1 {
width = 60
max = $1;
}
{
title = $2;
size = width * ($1 / max);
bar = "";
for (i = 0; i < size; i++) bar = bar"#"; count = sprintf("(%d)", $1); printf "%-10s %10s %s\n", title, count, bar; }' which gives: bc. 250000 (208199) ################################################################# 125000 (185912) ########################################################### 120000 (163323) ################################################### 60000 (159519) ################################################## 110000 (147645) ############################################### 150000 (145214) ############################################## 115000 (140833) ############################################ 135000 (134731) ########################################### 175000 (131334) ########################################## 85000 (131223) ######################################### 130000 (129597) ######################################### 105000 (129336) ######################################### 165000 (126161) ######################################## 95000 (126004) ######################################## 145000 (124379) ####################################### 75000 (123968) ####################################### 140000 (123893) ####################################### 160000 (123451) ####################################### 90000 (123340) ####################################### 100000 (120306) ###################################### 80000 (119776) ###################################### 155000 (115309) #################################### 185000 (111410) ################################### 180000 (111090) ################################### 65000 (109939) ################################### Putting this awk script into it's own file "histogram.awk":https://github.com/psd/price-paid-data/blob/master/bin/histogram.awk gives us a command we can use again and again, allowing us to compare new versus old builds: bc. $ bin/histogram.awk < data/new.tsv N (17351417) ############################################################ Y (1974154) ####### freehold (F) versus leaseholds (L) versus uncategorised (U): bc. $ head -10 data/duration.tsv | bin/histogram.awk F (14871813) ################################################################# L (4450166) #################### U (3592) # and the distribution of prices paid is a typical long-tail: bc. $ head -80 data/price.tsv | bin/histogram.awk 250000 (208199) ################################################################# 125000 (185912) ########################################################### 120000 (163323) ################################################### 60000 (159519) ################################################## 110000 (147645) ############################################### 150000 (145214) ############################################## 115000 (140833) ############################################ 135000 (134731) ########################################### 175000 (131334) ########################################## 85000 (131223) ######################################### 130000 (129597) ######################################### 105000 (129336) ######################################### 165000 (126161) ######################################## 95000 (126004) ######################################## 145000 (124379) ####################################### 75000 (123968) ####################################### 140000 (123893) ####################################### 160000 (123451) ####################################### 90000 (123340) ####################################### 100000 (120306) ###################################### 80000 (119776) ###################################### 155000 (115309) #################################### 185000 (111410) ################################### 180000 (111090) ################################### 65000 (109939) ################################### 170000 (109751) ################################### 70000 (106529) ################################## 55000 (103816) ################################# 200000 (100245) ################################ 50000 (98030) ############################### 210000 (96644) ############################### 195000 (96202) ############################### 190000 (95358) ############################## 220000 (94951) ############################## 225000 (94851) ############################## 45000 (94356) ############################## 40000 (88038) ############################ 215000 (85757) ########################### 230000 (82970) ########################## 245000 (82390) ########################## 235000 (79704) ######################### 240000 (78959) ######################### 205000 (76377) ######################## 59950 (75494) ######################## 35000 (70778) ####################### 58000 (65743) ##################### 30000 (64087) ##################### 52000 (63009) #################### 68000 (61675) #################### 275000 (60762) ################### 78000 (60281) ################### 249950 (60125) ################### 72000 (58979) ################### 42000 (58826) ################### 48000 (58184) ################### 59000 (57247) ################## 57000 (56613) ################## 54000 (56264) ################## 118000 (56147) ################## 82000 (55993) ################## 56000 (55033) ################## 53000 (55025) ################## 38000 (54752) ################## 67000 (52000) ################# 87000 (51853) ################# 112000 (51682) ################# 285000 (51649) ################# 92000 (51467) ################# 88000 (51394) ################# 300000 (51274) ################# 46000 (51099) ################ 280000 (50749) ################ 84000 (49414) ################ 43000 (49405) ################ 47000 (49340) ################ 64000 (49208) ################ 83000 (49149) ################ 74000 (48966) ################ 73000 (48934) ################ 270000 (48631) ################ Streets are something worth exploring another day, there's real history in them names: bc. $ head -20 street.tsv | ../bin/histogram.awk (284236) ################################################################# HIGH STREET (111407) ########################## STATION ROAD (61918) ############### LONDON ROAD (41652) ########## CHURCH ROAD (35596) ######### CHURCH STREET (35022) ######### MAIN STREET (34270) ######## PARK ROAD (29846) ####### VICTORIA ROAD (25819) ###### CHURCH LANE (23414) ###### QUEENS ROAD (21434) ##### NEW ROAD (21423) ##### MAIN ROAD (21308) ##### MANOR ROAD (21069) ##### THE STREET (21068) ##### WEST STREET (17359) #### GREEN LANE (17231) #### MILL LANE (16908) #### THE GREEN (16886) #### THE AVENUE (16853) #### and the other address fields are something we also need to dig into further because they're pretty inconsistent. I assume that's due to the longevity of this data, and differences in how the data is recorded by different people over the years: bc. $ head -10 data/locality.tsv | bin/histogram.awk (4354411) ################################################################# LONDON (915332) ############## BIRMINGHAM (112836) ## MANCHESTER (102982) ## LIVERPOOL (101127) ## LEEDS (90163) ## BRISTOL (89995) ## SHEFFIELD (77372) ## BOURNEMOUTH (61337) # SOUTHAMPTON (57342) # bc. $ head -10 town.tsv | ../bin/histogram.awk LONDON (1499904) ################################################################# MANCHESTER (312555) ############## BRISTOL (296232) ############# BIRMINGHAM (285479) ############# NOTTINGHAM (251575) ########### LEEDS (217870) ########## LIVERPOOL (190190) ######### SHEFFIELD (183048) ######## LEICESTER (169283) ######## SOUTHAMPTON (161070) ####### bc. $ head -10 district.tsv | ../bin/histogram.awk BIRMINGHAM (287828) ################################################################# LEEDS (257632) ########################################################### BRADFORD (173120) ######################################## SHEFFIELD (155900) #################################### MANCHESTER (154451) ################################### CITY OF BRISTOL (149031) ################################## WANDSWORTH (134851) ############################### KIRKLEES (131368) ############################## LIVERPOOL (126932) ############################# EAST RIDING OF YO (125271) ############################# bc. $ head -10 county.tsv | ../bin/histogram.awk GREATER LONDON (2520251) ################################################################# GREATER MANCHESTE (843778) ###################### WEST MIDLANDS (739206) #################### WEST YORKSHIRE (733941) ################### KENT (544938) ############### ESSEX (544377) ############### HAMPSHIRE (516377) ############## SURREY (450990) ############ LANCASHIRE (435968) ############ HERTFORDSHIRE (426834) ############ Time's up! "Tomorrow":http://blog.whatfettle.com/2014/10/17/one-csv-thirty-stories-day-4-scattering/ we should make some timelines and dig more deeply into those prices.