Budget Visualization Framework ========
Adapted for Raleigh, NC.
Open-source budget visualization framework.
Clone this repository to your local machine and point your webserver root to src/httpdocs
, the application should work out of the box, this repository contains some sample data that can be used for testing.
Report statical information about selected entry (src/httpdocs/js/cards.js
).
Shows data change over time (src/httpdocs/js/chart.js
).
Used as the main navigation component (src/httpdocs/js/treemap.js
).
Alternative navigation technique to a treemap (src/httpdocs/js/tables.js
).
Each component implements a common interface of 3 calls:
Initialize
: called only once, prepares the component to show dataOpen
: opens a data object and displays its contents using the specified componentUpdate
: refreshes component data (useful when year changes and new values need to be plotted)processCSV.py
: converts CSV file to nested JSON structureupdate.php
: Interface for data updateimports.php
: CSS and JS assets importsdatafiles.php
: json datafiles loaded in each instance (AJAX can be used as an alternative)home.php
: homescreen htmlnavbar.php
: navigation bar htmltemplates.php
: contains Mustache templates (eg. table row templates, cards...)avb.js
: helper functions and initialization routinescards.js
: cards component routineschart.js
: chart component routineshome.js
: homescreen routines and introJs based tutorials codestatistics.js
: functions used to generate statistical info and number formatting functionstable.js
: table component routinestreemap.js
: treemap component routinesprint.scss
: SCSS applied when printing a Visual Budget pageglobal.scss
: main SCSS file (imports all the partials defined below)_avb.scss
: section styles_base.scss
: html, body styles, colors and font variables_cards.scss
: styles for card component_chart.scss
: styles for chart component_home.scss
: styles for homescreen_navbar.scss
: styles for top navigation bar_table.scss
: styles for tabular view_treemap.scss
: styles for treemap componentSample Expenses.json
, Revenues.json
and Funds.json
from Arlington, MA in src/httpdocs/data
.
Budget data is kept in JSON and CSV format. The JSON format is actively used for computation while the CSV format is kept for reference and data download.
The base data unit is an object with the following fields:
key
{string}: entry namesrc
{url string}: link to data source from where entry data was extracted (optional)hash
{string}: entry id (can be arbitrary)sub
{array of other entries}: subsections that make up current entrydescr
{string} : entry description (optional)values
{array of value objects} : entry values over timeA simple value object is defined by:
year
: year of valueval
: valueThis data structure could be changed should it be considered not ideal for future uses.
The data sample below is partial section of src/httpdocs/data/expenses.json
.
{
"key": "Expenses",
"src": "",
"hash": "13495828",
"sub": [
{
"key": "Watershed Protection Fee Fund",
"src": "",
"hash": "bdec0635",
"sub": [
{
"key": "Non-Departmental",
"src": "",
"hash": "71dee769",
"sub": [
{
"key": "Interfund Transfers In/Out",
"src": "",
"hash": "9d0c00df",
"sub": [
{
"key": "To 320 Water Bond",
"src": "",
"hash": "e39fcf89",
"sub": [],
"descr": "",
"url": "",
"values": [
{
"val": 0,
"year": 2012
},
{
"val": 0,
"year": 2013
},
{
"val": 0,
"year": 2014
},
{
"val": 0,
"year": 2015
},
{
"val": 1500000,
"year": 2016
}
]
}
],
"descr": "",
"url": "",
"values": [
{
"val": 0,
"year": 2012
},
{
"val": 0,
"year": 2013
},
{
"val": 0,
"year": 2014
},
{
"val": 0,
"year": 2015
},
{
"val": 1500000,
"year": 2016
}
]
}
],
"descr": "",
"url": "",
"values": [
{
"val": 0,
"year": 2012
},
{
"val": 0,
"year": 2013
},
{
"val": 0,
"year": 2014
},
{
"val": 0,
"year": 2015
},
{
"val": 1500000,
"year": 2016
}
]
}
],
"descr": "",
"url": "",
"values": [
{
"val": 0,
"year": 2012
},
{
"val": 0,
"year": 2013
},
{
"val": 0,
"year": 2014
},
{
"val": 0,
"year": 2015
},
{
"val": 1500000,
"year": 2016
}
]
},
{
"key": "Water Infrastructure",
"src": "",
"hash": "da7c1e01",
"sub": [
{
"key": "Non-Departmental",
"src": "",
"hash": "71dee769",
"sub": [
{
"key": "Interfund Transfers In/Out",
"src": "",
"hash": "9d0c00df",
"sub": [
{
"key": "To 320 Water Bond",
"src": "",
"hash": "e39fcf89",
"sub": [],
"descr": "",
"url": "",
"values": [
{
"val": 0,
"year": 2012
},
{
"val": 0,
"year": 2013
},
{
"val": 0,
"year": 2014
},
{
"val": 2888422,
"year": 2015
},
{
"val": 3720000,
"year": 2016
}
]
}
],
"descr": "",
"url": "",
"values": [
{
"val": 0,
"year": 2012
},
{
"val": 0,
"year": 2013
},
{
"val": 0,
"year": 2014
},
{
"val": 2888422,
"year": 2015
},
{
"val": 3720000,
"year": 2016
}
]
}
],
"descr": "",
"url": "",
"values": [
{
"val": 0,
"year": 2012
},
{
"val": 0,
"year": 2013
},
{
"val": 0,
"year": 2014
},
{
"val": 2888422,
"year": 2015
},
{
"val": 3720000,
"year": 2016
}
]
}
],
"descr": "",
"url": "",
"values": [
{
"val": 0,
"year": 2012
},
{
"val": 0,
"year": 2013
},
{
"val": 0,
"year": 2014
},
{
"val": 2888422,
"year": 2015
},
{
"val": 3720000,
"year": 2016
}
]
}
Town representatives are likely to be proficient in editing spreadsheets. The Visual Budget application currently uses a pipeline that converts CSV files (created with Microsoft Excel) to nested JSON files used for computation.
A python script src/httpdocs/data/processing/processCSV.py
converts a flat CSV file into the nested JSON structure listed above. A php script src/httpdocs/data/processing/update.php
orchestrates the entire data update procedure.
For more information about CSV data formats or update procedures check docs/data
.
navbar.php
), homepage data (home.php
), initialization javascripts (avb.js
) and update routines (processCSV.py
, update.php
). This process should be simplified to allow a simpler migration between different types of data.Visual Town Budget is licensed under the Apache-2.0 open source license. You can find more information on the Apache-2.0 license at http://www.apache.org/licenses/LICENSE-2.0