witan.models.household
is a Clojure library to determine the number of households and dwellings based on population projections. More information about the methodology can be found in the docs.
See witan.models.demography
for a Clojure library to build population projections.
These models will be used on MastodonC's Witan city decision-making platform. They can also be used independently of Witan as a standalone modelling library.
Current status:
- Household model: First release of a minimal version coming soon!
If you wish to contribute to witan.models.household
, please read the following guidelines.
-
Fork this repository (or clone it if you have writing rights to the reposotory).
-
Create a new branch. Let's try and keep the following naming conventions for branches:
feature/
, example:feature/calculate-vacancy-rates
doc/
, example:doc/contributor-best-practices
fix/
, example:fix/run-model-from-cli
tidy-up/
, example:tidy-up/upgrade-deps
This way, when you see a branch starting by
fix/
we know something is broken and someone is repairing it. -
Keep branches short so that the reviewing process is easier and faster
-
Start a pull request (PR) as early as possible. You can add a
WIP
in the title to specify it's in progress. -
Describe the aim of your changes in the PR description box.
-
Before asking for a review of your PR:
- Write unit tests, docstrings, and documentation.
- Try to not have data changes and code changes in the same commit, and preferably not the same branch, as the data tends to swamp the code and hinder reviewing.
- Avoid modifying a file that is being modified on another branch.
- Avoid changing the name of a file while someone is working on another branch.
- We moved away from using Incanter library.
To manipulate
core.matrix
datasets look for functions:- from
core.matrix
incore.matrix.datasets
- from the
witan.workspace-api
dependency inwitan.datasets
- from
- Have a look at the following paragraph for useful development tools.
- Commit and push your changes often using descriptive commit messages. And squash commits (as much as possible/necessary) before asking for a review.
When combining functions into a model there are useful tools to take advantage of, thanks to dependencies for witan.workspace-executor
and witan.workspace-api
.
- Install
Graphviz
:
-
Ubuntu:
$ sudo apt-get install graphviz
-
MacOS:
$ brew install graphviz
For any OS you should also be able to install it with "pip": $ pip install graphviz
.
- Use the
view-workflow
function using the household model workflow (hh-model-workflow) as follows:
(witan.workspace-executor.core/view-workflow hh-model-workflow)
(witan.workspace-api/set-api-logging! println)
Whenever a defworkflowfn
is called logs will be written to your repl or terminal. It's very useful for debugging purpose.
Turn it off with:
(witan.workspace-api/set-api-logging! identity)
By default, the data for the CCM is amalgamated into single data files. To split the files by GSS code, use the following command:
lein split-data
To upload all the CSV files to S3 (gzipped), use the following command:
lein upload-data
This assumes a valid AWS profile, called 'witan', is installed. For ease, these commands can be chained like so:
lein do split-data, upload-data
The test namespace currently checks the model can actually be run by the workspace executor.
When running the model in the workspace executor from the repl it's very useful to turn on the logs for the model, using:
(witan.workspace-api/set-api-logging! println)
Note:
The version of the code containing the structure of the model for it to run using the workspace executor can be accessed by selecting the tag model-skeleton
.
Copyright © 2016 MastodonC Ltd
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.