From f141b8574584d3a4e2b581acb4874d0890bafca8 Mon Sep 17 00:00:00 2001
From: Chris Leaman
Date: Tue, 27 Nov 2018 10:15:35 +1100
Subject: [PATCH 1/6] Ignore .log files
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index 1dadcb9..5f368cf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ __pycache__/
*.py[cod]
*$py.class
/.venv/
+*.log
\ No newline at end of file
From db5997889595b401990fe0f50faf1eff547234ba Mon Sep 17 00:00:00 2001
From: Chris Leaman
Date: Tue, 27 Nov 2018 10:16:38 +1100
Subject: [PATCH 2/6] Switch to conda rather than pipenv to manage environment
---
.env | 6 +-
Makefile | 64 ++--
Pipfile | 31 --
Pipfile.lock | 753 ------------------------------------------------
README.md | 38 ++-
environment.yml | 149 ++++++++++
6 files changed, 206 insertions(+), 835 deletions(-)
delete mode 100644 Pipfile
delete mode 100644 Pipfile.lock
create mode 100644 environment.yml
diff --git a/.env b/.env
index a71086e..de5e5c4 100644
--- a/.env
+++ b/.env
@@ -10,10 +10,10 @@ MATLAB_PATH="C:/Program Files/MATLAB/R2016b/bin/win64/MATLAB.exe"
# total water level.
MULTIPROCESS_THREADS=2
-# The settings below should be left as is unless you know what you're doing.
+# GDAL_DATA="C://Users//z5189959//Desktop//nsw-2016-storm-impact//.venv//Library//share//gdal"
+
-# We want to create the pipenv virtualenv in the current folder
-PIPENV_VENV_IN_PROJECT=1
+# The settings below should be left as is unless you know what you're doing.
# Need to set pythonpath so that relative imports can be properly used in with pipenv
# Refer to https://stackoverflow.com/q/52986500 and https://stackoverflow.com/a/49797761
diff --git a/Makefile b/Makefile
index fc7f22b..c6ad96e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,5 @@
+SHELL=cmd
+
###############################
# Load environment variables
@@ -12,13 +14,21 @@ CURRENT_DIR = $(shell pwd)
. PHONY: venv_init
venv-init: ##@environment Setup virtual environment
- pip install pipenv
- pipenv --python 3.7
- pipenv install
+ conda create -f environment.yml --prefix=.venv python=3.7
+
+venv-activate: ##@environment Activates the virtual environment
+ activate $(CURRENT_DIR)/.venv
+
+venv-requirements-install: ##@enviornment Ensures environment.yml packages are installed
+ conda env update
+
+venv-requirements-export: ##@environment Exports current environment to environment.yml
+ conda env export --file environment.yml
###############################
# Get data from network drive
+.PHONY: push-data pull-data
push-data: ##@data Copies data from ./data/ to data backup directory
rclone copy ./data/ $(DATA_BACKUP_DIR) --exclude "*.las" --progress
@@ -39,44 +49,35 @@ process-mat: ./data/interim/sites.csv ./data/interim/waves.csv ./data/interim/pr
$(MATLAB_PATH) -nosplash -r "cd $(CURRENT_DIR); run('./src/data/beach_orientations.m'); quit"
# Produces a .csv of sites where our beach cross-sections are located
-./data/interim/sites.csv: ./data/raw/processed_shorelines/*.mat
- pipenv run python ./src/data/parse_mat.py create-sites-csv \
- --waves-mat "./data/raw/processed_shorelines/waves.mat" \
- --tides-mat "./data/raw/processed_shorelines/tides.mat" \
+./data/interim/sites.csv ./data/interim/profiles.csv: ./data/raw/processed_shorelines/profiles.mat
+ activate ./.venv && python ./src/data/parse_mat.py create-sites-and-profiles-csv \
--profiles-mat "./data/raw/processed_shorelines/profiles.mat" \
- --orientations-mat "./data/raw/processed_shorelines/orientations.mat" \
- --output-file "./data/interim/sites.csv"
+ --profiles-output-file "./data/interim/profiles.csv" \
+ --sites-output-file "./data/interim/sites.csv"
# Produces a .csv of waves for each site
./data/interim/waves.csv: ./data/interim/sites.csv ./data/raw/processed_shorelines/waves.mat
- pipenv run python ./src/data/parse_mat.py create-waves-csv \
+ activate ./.venv && python ./src/data/parse_mat.py create-waves-csv \
--waves-mat "./data/raw/processed_shorelines/waves.mat" \
--sites-csv "./data/interim/sites.csv" \
--output-file "./data/interim/waves.csv"
-# Produces a .csv of profiles for each site
-./data/interim/profiles.csv: ./data/interim/sites.csv ./data/raw/processed_shorelines/profiles.mat
- pipenv run python ./src/data/parse_mat.py create-profiles-csv \
- --profiles-mat "./data/raw/processed_shorelines/profiles.mat" \
- --sites-csv "./data/interim/sites.csv" \
- --output-file "./data/interim/profiles.csv"
-
# Produces a .csv of tides for each site
./data/interim/tides.csv: ./data/interim/sites.csv ./data/raw/processed_shorelines/tides.mat
- pipenv run python ./src/data/parse_mat.py create-tides-csv \
+ activate ./.venv && python ./src/data/parse_mat.py create-tides-csv \
--tides-mat "./data/raw/processed_shorelines/tides.mat" \
--sites-csv "./data/interim/sites.csv" \
--output-file "./data/interim/tides.csv"
# Creates a .shp of our sites to load into QGis
./data/interim/sites.shp: ./data/interim/sites.csv
- pipenv run python ./src/data/csv_to_shp.py sites-csv-to-shp \
+ activate ./.venv && python ./src/data/csv_to_shp.py sites-csv-to-shp \
--input-csv "./data/interim/sites.csv" \
--output-shp "./data/interim/sites.shp"
# Creates a .csv of our dune toe and crest profile features
./data/interim/profile_features.csv: ./data/raw/profile_features/dune_crests.shp ./data/raw/profile_features/dune_toes.shp ./data/interim/sites.csv ./data/interim/profiles.csv
- pipenv run python ./src/data/profile_features.py create-profile-features \
+ activate ./.venv && python ./src/data/profile_features.py create-profile-features \
--dune-crest-shp "./data/raw/profile_features/dune_crests.shp" \
--dune-toe-shp "./data/raw/profile_features/dune_toes.shp" \
--sites-csv "./data/interim/sites.csv" \
@@ -85,7 +86,7 @@ process-mat: ./data/interim/sites.csv ./data/interim/waves.csv ./data/interim/pr
# Creates a forecast of twl using sto06 and prestorm time varying prestorm foreshore slope
./data/interim/twl_foreshore_slope_sto06.csv: ./data/interim/waves.csv ./data/interim/tides.csv ./data/interim/profiles.csv ./data/interim/sites.csv ./data/interim/profile_features.csv
- pipenv run python ./src/analysis/forecast_twl.py create-twl-forecast \
+ activate ./.venv && python ./src/analysis/forecast_twl.py create-twl-forecast \
--waves-csv "./data/interim/waves.csv" \
--tides-csv "./data/interim/tides.csv" \
--profiles-csv "./data/interim/profiles.csv" \
@@ -96,7 +97,7 @@ process-mat: ./data/interim/sites.csv ./data/interim/waves.csv ./data/interim/pr
# Creates a forecast of twl using sto06 and prestorm mean foreshore slope
./data/interim/twl_mean_slope_sto06.csv: ./data/interim/waves.csv ./data/interim/tides.csv ./data/interim/profiles.csv ./data/interim/sites.csv ./data/interim/profile_features.csv
- pipenv run python ./src/analysis/forecast_twl.py create-twl-forecast \
+ activate ./.venv && python ./src/analysis/forecast_twl.py create-twl-forecast \
--waves-csv "./data/interim/waves.csv" \
--tides-csv "./data/interim/tides.csv" \
--profiles-csv "./data/interim/profiles.csv" \
@@ -106,37 +107,24 @@ process-mat: ./data/interim/sites.csv ./data/interim/waves.csv ./data/interim/pr
--output-file "./data/interim/twl_mean_slope_sto06.csv"
./data/interim/impacts_observed.csv: ./data/interim/profiles.csv ./data/interim/profile_features.csv
- pipenv run python ./src/analysis/observed_storm_impacts.py create-observed-impacts \
+ activate ./.venv && python ./src/analysis/observed_storm_impacts.py create-observed-impacts \
--profiles-csv "./data/interim/profiles.csv" \
--profile-features-csv "./data/interim/profile_features.csv" \
--output-file "./data/interim/impacts_observed.csv"
./data/interim/impacts_forecasted_mean_slope_sto06.csv: ./data/interim/profile_features.csv ./data/interim/twl_mean_slope_sto06.csv
- pipenv run python ./src/analysis/forecasted_storm_impacts.py create-forecasted-impacts \
+ activate ./.venv && python ./src/analysis/forecasted_storm_impacts.py create-forecasted-impacts \
--profile-features-csv "./data/interim/profile_features.csv" \
--forecasted-twl-csv "./data/interim/twl_mean_slope_sto06.csv" \
--output-file "./data/interim/impacts_forecasted_mean_slope_sto06.csv"
./data/interim/impacts_forecasted_foreshore_slope_sto06.csv: ./data/interim/profile_features.csv ./data/interim/twl_foreshore_slope_sto06.csv
- pipenv run python ./src/analysis/forecasted_storm_impacts.py create-forecasted-impacts \
+ activate ./.venv && python ./src/analysis/forecasted_storm_impacts.py create-forecasted-impacts \
--profile-features-csv "./data/interim/profile_features.csv" \
--forecasted-twl-csv "./data/interim/twl_foreshore_slope_sto06.csv" \
--output-file "./data/interim/impacts_forecasted_foreshore_slope_sto06.csv"
-#################################################################################
-# PROJECT RULES #
-#################################################################################
-.PHONY: push-data parse_mat sites-csv-to-shp
-
-
-mat-to-csv: ##@data Converts raw .mat files to .csv for python
- cd ./src/data/ && python parse_mat.py
-
-sites-csv-to-shp: ##@data Create the sites.shp from sites.csv
- cd ./src/data && python csv_to_shp.py sites_csv_to_shp "..\..\data\interim\sites.csv" "..\..\data\interim\sites.shp"
-
-
###############################
# Misc commands
format: ./src/*.py ##@misc Check python file formatting
diff --git a/Pipfile b/Pipfile
deleted file mode 100644
index 0e234e9..0000000
--- a/Pipfile
+++ /dev/null
@@ -1,31 +0,0 @@
-[[source]]
-name = "pypi"
-url = "https://pypi.org/simple"
-verify_ssl = true
-
-[dev-packages]
-
-[packages]
-numpy = "*"
-scipy = "*"
-pandas = "*"
-matplotlib = "*"
-click = "*"
-mat4py = "*"
-black = "*"
-shapely = "*"
-fiona = {file = "https://download.lfd.uci.edu/pythonlibs/h2ufg7oq/Fiona-1.8.2-cp37-cp37m-win_amd64.whl"}
-gdal = {file = "https://download.lfd.uci.edu/pythonlibs/h2ufg7oq/GDAL-2.3.2-cp37-cp37m-win_amd64.whl"}
-pyproj = {file = "https://download.lfd.uci.edu/pythonlibs/h2ufg7oq/pyproj-1.9.5.1-cp37-cp37m-win_amd64.whl"}
-colorlover = "*"
-ipykernel = "*"
-jupyter = "*"
-plotly = "*"
-jupyter-contrib-nbextensions = "*"
-jupyter-nbextensions-configurator = "*"
-
-[requires]
-python_version = "3.7"
-
-[pipenv]
-allow_prereleases = true
diff --git a/Pipfile.lock b/Pipfile.lock
deleted file mode 100644
index 5359b48..0000000
--- a/Pipfile.lock
+++ /dev/null
@@ -1,753 +0,0 @@
-{
- "_meta": {
- "hash": {
- "sha256": "d1086c407632a2c2f9a8e1b657d7e0703ac8929bb3aa41f68ea364448c47cb33"
- },
- "pipfile-spec": 6,
- "requires": {
- "python_version": "3.7"
- },
- "sources": [
- {
- "name": "pypi",
- "url": "https://pypi.org/simple",
- "verify_ssl": true
- }
- ]
- },
- "default": {
- "appdirs": {
- "hashes": [
- "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
- "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
- ],
- "version": "==1.4.3"
- },
- "attrs": {
- "hashes": [
- "sha256:10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69",
- "sha256:ca4be454458f9dec299268d472aaa5a11f67a4ff70093396e1ceae9c76cf4bbb"
- ],
- "version": "==18.2.0"
- },
- "backcall": {
- "hashes": [
- "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4",
- "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2"
- ],
- "version": "==0.1.0"
- },
- "black": {
- "hashes": [
- "sha256:817243426042db1d36617910df579a54f1afd659adb96fc5032fcf4b36209739",
- "sha256:e030a9a28f542debc08acceb273f228ac422798e5215ba2a791a6ddeaaca22a5"
- ],
- "index": "pypi",
- "version": "==18.9b0"
- },
- "bleach": {
- "hashes": [
- "sha256:48d39675b80a75f6d1c3bdbffec791cf0bbbab665cf01e20da701c77de278718",
- "sha256:73d26f018af5d5adcdabf5c1c974add4361a9c76af215fe32fdec8a6fc5fb9b9"
- ],
- "version": "==3.0.2"
- },
- "certifi": {
- "hashes": [
- "sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c",
- "sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a"
- ],
- "version": "==2018.10.15"
- },
- "chardet": {
- "hashes": [
- "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
- "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
- ],
- "version": "==3.0.4"
- },
- "click": {
- "hashes": [
- "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
- "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
- ],
- "index": "pypi",
- "version": "==7.0"
- },
- "click-plugins": {
- "hashes": [
- "sha256:b1ee1ccc9421c73007fe290680d97984eb6eaf5f4512b7620c6aa46031d6cb6b",
- "sha256:dfed74b5063546a137de99baaaf742b4de4337ad2b3e1df5ec7c8a256adc0847"
- ],
- "version": "==1.0.4"
- },
- "cligj": {
- "hashes": [
- "sha256:20f24ce9abfde3f758aec3399e6811b936b6772f360846c662c19bf5537b4f14",
- "sha256:60c93dda4499562eb87509a8ff3535a7441053b766c9c26bcf874a732f939c7c",
- "sha256:6c7d52d529a78712491974f975c33473f430c0f7beb18c0d7a402a743dcb460a"
- ],
- "version": "==0.5.0"
- },
- "colorama": {
- "hashes": [
- "sha256:a3d89af5db9e9806a779a50296b5fdb466e281147c2c235e8225ecc6dbf7bbf3",
- "sha256:c9b54bebe91a6a803e0772c8561d53f2926bfeb17cd141fbabcb08424086595c"
- ],
- "markers": "sys_platform == 'win32'",
- "version": "==0.4.0"
- },
- "colorlover": {
- "hashes": [
- "sha256:f12a091ca2bca29e0e9294a072693bc70d2fafc573bb7c0fc8070099b5de9cb2"
- ],
- "index": "pypi",
- "version": "==0.2.1"
- },
- "cycler": {
- "hashes": [
- "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d",
- "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"
- ],
- "version": "==0.10.0"
- },
- "decorator": {
- "hashes": [
- "sha256:2c51dff8ef3c447388fe5e4453d24a2bf128d3a4c32af3fabef1f01c6851ab82",
- "sha256:c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c"
- ],
- "version": "==4.3.0"
- },
- "defusedxml": {
- "hashes": [
- "sha256:24d7f2f94f7f3cb6061acb215685e5125fbcdc40a857eff9de22518820b0a4f4",
- "sha256:702a91ade2968a82beb0db1e0766a6a273f33d4616a6ce8cde475d8e09853b20"
- ],
- "version": "==0.5.0"
- },
- "entrypoints": {
- "hashes": [
- "sha256:10ad569bb245e7e2ba425285b9fa3e8178a0dc92fc53b1e1c553805e15a8825b",
- "sha256:d2d587dde06f99545fb13a383d2cd336a8ff1f359c5839ce3a64c917d10c029f"
- ],
- "version": "==0.2.3"
- },
- "fiona": {
- "file": "https://download.lfd.uci.edu/pythonlibs/h2ufg7oq/Fiona-1.8.2-cp37-cp37m-win_amd64.whl",
- "hashes": [
- "sha256:ea6f9f7914fe25e7e9945cabf628edb94c483702f8181d9b868b6bfffec2db25"
- ],
- "index": "pypi",
- "version": "==1.8.2"
- },
- "gdal": {
- "file": "https://download.lfd.uci.edu/pythonlibs/h2ufg7oq/GDAL-2.3.2-cp37-cp37m-win_amd64.whl",
- "hashes": [
- "sha256:2f6c36ee59f9b24fb16514e4fce8b73e7833714feb9b8397f91662256e1b12d8"
- ],
- "index": "pypi",
- "version": "==2.3.2"
- },
- "idna": {
- "hashes": [
- "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
- "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
- ],
- "version": "==2.7"
- },
- "ipykernel": {
- "hashes": [
- "sha256:0aeb7ec277ac42cc2b59ae3d08b10909b2ec161dc6908096210527162b53675d",
- "sha256:0fc0bf97920d454102168ec2008620066878848fcfca06c22b669696212e292f"
- ],
- "index": "pypi",
- "version": "==5.1.0"
- },
- "ipython": {
- "hashes": [
- "sha256:a5781d6934a3341a1f9acb4ea5acdc7ea0a0855e689dbe755d070ca51e995435",
- "sha256:b10a7ddd03657c761fc503495bc36471c8158e3fc948573fb9fe82a7029d8efd"
- ],
- "markers": "python_version >= '3.3'",
- "version": "==7.1.1"
- },
- "ipython-genutils": {
- "hashes": [
- "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8",
- "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"
- ],
- "version": "==0.2.0"
- },
- "ipywidgets": {
- "hashes": [
- "sha256:0f2b5cde9f272cb49d52f3f0889fdd1a7ae1e74f37b48dac35a83152780d2b7b",
- "sha256:a3e224f430163f767047ab9a042fc55adbcab0c24bbe6cf9f306c4f89fdf0ba3"
- ],
- "version": "==7.4.2"
- },
- "jedi": {
- "hashes": [
- "sha256:0191c447165f798e6a730285f2eee783fff81b0d3df261945ecb80983b5c3ca7",
- "sha256:b7493f73a2febe0dc33d51c99b474547f7f6c0b2c8fb2b21f453eef204c12148"
- ],
- "version": "==0.13.1"
- },
- "jinja2": {
- "hashes": [
- "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd",
- "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"
- ],
- "version": "==2.10"
- },
- "jsonschema": {
- "hashes": [
- "sha256:3ae8afd6f4ca6417f14bf43ef61341311598f14234cdb4174fe43d42b236a3c8",
- "sha256:dfd8426040892c8d0ef6da574085f282569f189cb24b70091a66c21c12d6705e"
- ],
- "version": "==3.0.0a3"
- },
- "jupyter": {
- "hashes": [
- "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7",
- "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78",
- "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"
- ],
- "index": "pypi",
- "version": "==1.0.0"
- },
- "jupyter-client": {
- "hashes": [
- "sha256:27befcf0446b01e29853014d6a902dd101ad7d7f94e2252b1adca17c3466b761",
- "sha256:59e6d791e22a8002ad0e80b78c6fd6deecab4f9e1b1aa1a22f4213de271b29ea"
- ],
- "version": "==5.2.3"
- },
- "jupyter-console": {
- "hashes": [
- "sha256:308ce876354924fb6c540b41d5d6d08acfc946984bf0c97777c1ddcb42e0b2f5",
- "sha256:cc80a97a5c389cbd30252ffb5ce7cefd4b66bde98219edd16bf5cb6f84bb3568"
- ],
- "version": "==6.0.0"
- },
- "jupyter-contrib-core": {
- "hashes": [
- "sha256:1ec81e275a8f5858d56b0c4c6cd85335aa8e915001b8657fe51c620c3cdde50f",
- "sha256:e65bc0e932ff31801003cef160a4665f2812efe26a53801925a634735e9a5794"
- ],
- "version": "==0.3.3"
- },
- "jupyter-contrib-nbextensions": {
- "hashes": [
- "sha256:40eba9492d22302599d0a8f29d1297efb06e233677fe2d6f4d224e7c3e373872",
- "sha256:f4893d99fed6be6587cd2c722ef8841556283a697a482288b621b514beda2405"
- ],
- "index": "pypi",
- "version": "==0.5.0"
- },
- "jupyter-core": {
- "hashes": [
- "sha256:927d713ffa616ea11972534411544589976b2493fc7e09ad946e010aa7eb9970",
- "sha256:ba70754aa680300306c699790128f6fbd8c306ee5927976cbe48adacf240c0b7"
- ],
- "version": "==4.4.0"
- },
- "jupyter-highlight-selected-word": {
- "hashes": [
- "sha256:9545dfa9cb057eebe3a5795604dcd3a5294ea18637e553f61a0b67c1b5903c58",
- "sha256:9fa740424859a807950ca08d2bfd28a35154cd32dd6d50ac4e0950022adc0e7b"
- ],
- "version": "==0.2.0"
- },
- "jupyter-latex-envs": {
- "hashes": [
- "sha256:b0a83e0cda2d33e61c4b2da94365d2de4dfcdc1ed67abdba3cbe390872cf5231"
- ],
- "version": "==1.4.4"
- },
- "jupyter-nbextensions-configurator": {
- "hashes": [
- "sha256:778f36a0996e622c224589327405583f4a539d183fa2fdaeecbc4397c1af9991",
- "sha256:e2cea15dde24c9090104cf3ebedd6bcd354004cbea5e858b3776372ad50b7d46"
- ],
- "index": "pypi",
- "version": "==0.4.0"
- },
- "kiwisolver": {
- "hashes": [
- "sha256:0ee4ed8b3ae8f5f712b0aa9ebd2858b5b232f1b9a96b0943dceb34df2a223bc3",
- "sha256:0f7f532f3c94e99545a29f4c3f05637f4d2713e7fd91b4dd8abfc18340b86cd5",
- "sha256:1a078f5dd7e99317098f0e0d490257fd0349d79363e8c923d5bb76428f318421",
- "sha256:1aa0b55a0eb1bd3fa82e704f44fb8f16e26702af1a073cc5030eea399e617b56",
- "sha256:2874060b91e131ceeff00574b7c2140749c9355817a4ed498e82a4ffa308ecbc",
- "sha256:379d97783ba8d2934d52221c833407f20ca287b36d949b4bba6c75274bcf6363",
- "sha256:3b791ddf2aefc56382aadc26ea5b352e86a2921e4e85c31c1f770f527eb06ce4",
- "sha256:4329008a167fac233e398e8a600d1b91539dc33c5a3eadee84c0d4b04d4494fa",
- "sha256:45813e0873bbb679334a161b28cb9606d9665e70561fd6caa8863e279b5e464b",
- "sha256:53a5b27e6b5717bdc0125338a822605084054c80f382051fb945d2c0e6899a20",
- "sha256:574f24b9805cb1c72d02b9f7749aa0cc0b81aa82571be5201aa1453190390ae5",
- "sha256:66f82819ff47fa67a11540da96966fb9245504b7f496034f534b81cacf333861",
- "sha256:79e5fe3ccd5144ae80777e12973027bd2f4f5e3ae8eb286cabe787bed9780138",
- "sha256:83410258eb886f3456714eea4d4304db3a1fc8624623fc3f38a487ab36c0f653",
- "sha256:8b6a7b596ce1d2a6d93c3562f1178ebd3b7bb445b3b0dd33b09f9255e312a965",
- "sha256:9576cb63897fbfa69df60f994082c3f4b8e6adb49cccb60efb2a80a208e6f996",
- "sha256:95a25d9f3449046ecbe9065be8f8380c03c56081bc5d41fe0fb964aaa30b2195",
- "sha256:a424f048bebc4476620e77f3e4d1f282920cef9bc376ba16d0b8fe97eec87cde",
- "sha256:aaec1cfd94f4f3e9a25e144d5b0ed1eb8a9596ec36d7318a504d813412563a85",
- "sha256:acb673eecbae089ea3be3dcf75bfe45fc8d4dcdc951e27d8691887963cf421c7",
- "sha256:b15bc8d2c2848a4a7c04f76c9b3dc3561e95d4dabc6b4f24bfabe5fd81a0b14f",
- "sha256:b1c240d565e977d80c0083404c01e4d59c5772c977fae2c483f100567f50847b",
- "sha256:c595693de998461bcd49b8d20568c8870b3209b8ea323b2a7b0ea86d85864694",
- "sha256:ce3be5d520b4d2c3e5eeb4cd2ef62b9b9ab8ac6b6fedbaa0e39cdb6f50644278",
- "sha256:e0f910f84b35c36a3513b96d816e6442ae138862257ae18a0019d2fc67b041dc",
- "sha256:ea36e19ac0a483eea239320aef0bd40702404ff8c7e42179a2d9d36c5afcb55c",
- "sha256:efabbcd4f406b532206b8801058c8bab9e79645b9880329253ae3322b7b02cd5",
- "sha256:f923406e6b32c86309261b8195e24e18b6a8801df0cfc7814ac44017bfcb3939"
- ],
- "version": "==1.0.1"
- },
- "lxml": {
- "hashes": [
- "sha256:02bc220d61f46e9b9d5a53c361ef95e9f5e1d27171cd461dddb17677ae2289a5",
- "sha256:22f253b542a342755f6cfc047fe4d3a296515cf9b542bc6e261af45a80b8caf6",
- "sha256:2f31145c7ff665b330919bfa44aacd3a0211a76ca7e7b441039d2a0b0451e415",
- "sha256:36720698c29e7a9626a0dc802ef8885f8f0239bfd1689628ecd459a061f2807f",
- "sha256:438a1b0203545521f6616132bfe0f4bca86f8a401364008b30e2b26ec408ce85",
- "sha256:4815892904c336bbaf73dafd54f45f69f4021c22b5bad7332176bbf4fb830568",
- "sha256:5be031b0f15ad63910d8e5038b489d95a79929513b3634ad4babf77100602588",
- "sha256:5c93ae37c3c588e829b037fdfbd64a6e40c901d3f93f7beed6d724c44829a3ad",
- "sha256:60842230678674cdac4a1cf0f707ef12d75b9a4fc4a565add4f710b5fcf185d5",
- "sha256:62939a8bb6758d1bf923aa1c13f0bcfa9bf5b2fc0f5fa917a6e25db5fe0cfa4e",
- "sha256:75830c06a62fe7b8fe3bbb5f269f0b308f19f3949ac81cfd40062f47c1455faf",
- "sha256:81992565b74332c7c1aff6a913a3e906771aa81c9d0c68c68113cffcae45bc53",
- "sha256:8c892fb0ee52c594d9a7751c7d7356056a9682674b92cc1c4dc968ff0f30c52f",
- "sha256:9d862e3cf4fc1f2837dedce9c42269c8c76d027e49820a548ac89fdcee1e361f",
- "sha256:a623965c086a6e91bb703d4da62dabe59fe88888e82c4117d544e11fd74835d6",
- "sha256:a7783ab7f6a508b0510490cef9f857b763d796ba7476d9703f89722928d1e113",
- "sha256:aab09fbe8abfa3b9ce62aaf45aca2d28726b1b9ee44871dbe644050a2fff4940",
- "sha256:abf181934ac3ef193832fb973fd7f6149b5c531903c2ec0f1220941d73eee601",
- "sha256:ae07fa0c115733fce1e9da96a3ac3fa24801742ca17e917e0c79d63a01eeb843",
- "sha256:b9c78242219f674ab645ec571c9a95d70f381319a23911941cd2358a8e0521cf",
- "sha256:bccb267678b870d9782c3b44d0cefe3ba0e329f9af8c946d32bf3778e7a4f271",
- "sha256:c4df4d27f4c93b2cef74579f00b1d3a31a929c7d8023f870c4b476f03a274db4",
- "sha256:caf0e50b546bb60dfa99bb18dfa6748458a83131ecdceaf5c071d74907e7e78a",
- "sha256:d3266bd3ac59ac4edcd5fa75165dee80b94a3e5c91049df5f7c057ccf097551c",
- "sha256:db0d213987bcd4e6d41710fb4532b22315b0d8fb439ff901782234456556aed1",
- "sha256:dbbd5cf7690a40a9f0a9325ab480d0fccf46d16b378eefc08e195d84299bfae1",
- "sha256:e16e07a0ec3a75b5ee61f2b1003c35696738f937dc8148fbda9fe2147ccb6e61",
- "sha256:e175a006725c7faadbe69e791877d09936c0ef2cf49d01b60a6c1efcb0e8be6f",
- "sha256:edd9c13a97f6550f9da2236126bb51c092b3b1ce6187f2bd966533ad794bbb5e",
- "sha256:fa39ea60d527fbdd94215b5e5552f1c6a912624521093f1384a491a8ad89ad8b"
- ],
- "version": "==4.2.5"
- },
- "markupsafe": {
- "hashes": [
- "sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1"
- ],
- "version": "==1.1.0"
- },
- "mat4py": {
- "hashes": [
- "sha256:8272ce80747120ff44200b1fde341c657595813e1adf61262e44b52642c10dbe"
- ],
- "index": "pypi",
- "version": "==0.4.1"
- },
- "matplotlib": {
- "hashes": [
- "sha256:16aa61846efddf91df623bbb4598e63be1068a6b6a2e6361cc802b41c7a286eb",
- "sha256:1975b71a33ac986bb39b6d5cfbc15c7b1f218f1134efb4eb3881839d6ae69984",
- "sha256:2b222744bd54781e6cc0b717fa35a54e5f176ba2ced337f27c5b435b334ef854",
- "sha256:317643c0e88fad55414347216362b2e229c130edd5655fea5f8159a803098468",
- "sha256:4269ce3d1b897d46fc3cc2273a0cc2a730345bb47e4456af662e6fca85c89dd7",
- "sha256:65214fd668975077cdf8d408ccf2b2d6bdf73b4e6895a79f8e99ce4f0b43fcdb",
- "sha256:74bc213ab8a92d86a0b304d9359d1e1d14168d4c6121b83862c9d8a88b89a738",
- "sha256:88949be0db54755995dfb0210d0099a8712a3c696c860441971354c3debfc4af",
- "sha256:8e1223d868be89423ec95ada5f37aa408ee64fe76ccb8e4d5f533699ba4c0e4a",
- "sha256:9fa00f2d7a552a95fa6016e498fdeb6d74df537853dda79a9055c53dfc8b6e1a",
- "sha256:c27fd46cab905097ba4bc28d5ba5289930f313fb1970c9d41092c9975b80e9b4",
- "sha256:c94b792af431f6adb6859eb218137acd9a35f4f7442cea57e4a59c54751c36af",
- "sha256:f4c12a01eb2dc16693887a874ba948b18c92f425c4d329639ece6d3bb8e631bb"
- ],
- "index": "pypi",
- "version": "==3.0.2"
- },
- "mistune": {
- "hashes": [
- "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e",
- "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"
- ],
- "version": "==0.8.4"
- },
- "munch": {
- "hashes": [
- "sha256:6ae3d26b837feacf732fb8aa5b842130da1daf221f5af9f9d4b2a0a6414b0d51"
- ],
- "version": "==2.3.2"
- },
- "nbconvert": {
- "hashes": [
- "sha256:08d21cf4203fabafd0d09bbd63f06131b411db8ebeede34b0fd4be4548351779",
- "sha256:a8a2749f972592aa9250db975304af6b7337f32337e523a2c995cc9e12c07807"
- ],
- "version": "==5.4.0"
- },
- "nbformat": {
- "hashes": [
- "sha256:b9a0dbdbd45bb034f4f8893cafd6f652ea08c8c1674ba83f2dc55d3955743b0b",
- "sha256:f7494ef0df60766b7cabe0a3651556345a963b74dbc16bc7c18479041170d402"
- ],
- "version": "==4.4.0"
- },
- "notebook": {
- "hashes": [
- "sha256:661341909008d1e7bfa1541904006f9789fa3de1cbec8379d2879819454cc04b",
- "sha256:91705b109fc785198faed892489cddb233265564d5e2dad5e4f7974af05ee8dd"
- ],
- "version": "==5.7.2"
- },
- "numpy": {
- "hashes": [
- "sha256:0df89ca13c25eaa1621a3f09af4c8ba20da849692dcae184cb55e80952c453fb",
- "sha256:154c35f195fd3e1fad2569930ca51907057ae35e03938f89a8aedae91dd1b7c7",
- "sha256:18e84323cdb8de3325e741a7a8dd4a82db74fde363dce32b625324c7b32aa6d7",
- "sha256:1e8956c37fc138d65ded2d96ab3949bd49038cc6e8a4494b1515b0ba88c91565",
- "sha256:23557bdbca3ccbde3abaa12a6e82299bc92d2b9139011f8c16ca1bb8c75d1e95",
- "sha256:24fd645a5e5d224aa6e39d93e4a722fafa9160154f296fd5ef9580191c755053",
- "sha256:36e36b6868e4440760d4b9b44587ea1dc1f06532858d10abba98e851e154ca70",
- "sha256:3d734559db35aa3697dadcea492a423118c5c55d176da2f3be9c98d4803fc2a7",
- "sha256:416a2070acf3a2b5d586f9a6507bb97e33574df5bd7508ea970bbf4fc563fa52",
- "sha256:4a22dc3f5221a644dfe4a63bf990052cc674ef12a157b1056969079985c92816",
- "sha256:4d8d3e5aa6087490912c14a3c10fbdd380b40b421c13920ff468163bc50e016f",
- "sha256:4f41fd159fba1245e1958a99d349df49c616b133636e0cf668f169bce2aeac2d",
- "sha256:561ef098c50f91fbac2cc9305b68c915e9eb915a74d9038ecf8af274d748f76f",
- "sha256:56994e14b386b5c0a9b875a76d22d707b315fa037affc7819cda08b6d0489756",
- "sha256:73a1f2a529604c50c262179fcca59c87a05ff4614fe8a15c186934d84d09d9a5",
- "sha256:7da99445fd890206bfcc7419f79871ba8e73d9d9e6b82fe09980bc5bb4efc35f",
- "sha256:99d59e0bcadac4aa3280616591fb7bcd560e2218f5e31d5223a2e12a1425d495",
- "sha256:a4cc09489843c70b22e8373ca3dfa52b3fab778b57cf81462f1203b0852e95e3",
- "sha256:a61dc29cfca9831a03442a21d4b5fd77e3067beca4b5f81f1a89a04a71cf93fa",
- "sha256:b1853df739b32fa913cc59ad9137caa9cc3d97ff871e2bbd89c2a2a1d4a69451",
- "sha256:b1f44c335532c0581b77491b7715a871d0dd72e97487ac0f57337ccf3ab3469b",
- "sha256:b261e0cb0d6faa8fd6863af26d30351fd2ffdb15b82e51e81e96b9e9e2e7ba16",
- "sha256:c857ae5dba375ea26a6228f98c195fec0898a0fd91bcf0e8a0cae6d9faf3eca7",
- "sha256:cf5bb4a7d53a71bb6a0144d31df784a973b36d8687d615ef6a7e9b1809917a9b",
- "sha256:db9814ff0457b46f2e1d494c1efa4111ca089e08c8b983635ebffb9c1573361f",
- "sha256:df04f4bad8a359daa2ff74f8108ea051670cafbca533bb2636c58b16e962989e",
- "sha256:ecf81720934a0e18526177e645cbd6a8a21bb0ddc887ff9738de07a1df5c6b61",
- "sha256:edfa6fba9157e0e3be0f40168eb142511012683ac3dc82420bee4a3f3981b30e"
- ],
- "index": "pypi",
- "version": "==1.15.4"
- },
- "pandas": {
- "hashes": [
- "sha256:11975fad9edbdb55f1a560d96f91830e83e29bed6ad5ebf506abda09818eaf60",
- "sha256:12e13d127ca1b585dd6f6840d3fe3fa6e46c36a6afe2dbc5cb0b57032c902e31",
- "sha256:1c87fcb201e1e06f66e23a61a5fea9eeebfe7204a66d99df24600e3f05168051",
- "sha256:242e9900de758e137304ad4b5663c2eff0d798c2c3b891250bd0bd97144579da",
- "sha256:26c903d0ae1542890cb9abadb4adcb18f356b14c2df46e4ff657ae640e3ac9e7",
- "sha256:2e1e88f9d3e5f107b65b59cd29f141995597b035d17cc5537e58142038942e1a",
- "sha256:31b7a48b344c14691a8e92765d4023f88902ba3e96e2e4d0364d3453cdfd50db",
- "sha256:4fd07a932b4352f8a8973761ab4e84f965bf81cc750fb38e04f01088ab901cb8",
- "sha256:5b24ca47acf69222e82530e89111dd9d14f9b970ab2cd3a1c2c78f0c4fbba4f4",
- "sha256:647b3b916cc8f6aeba240c8171be3ab799c3c1b2ea179a3be0bd2712c4237553",
- "sha256:66b060946046ca27c0e03e9bec9bba3e0b918bafff84c425ca2cc2e157ce121e",
- "sha256:6efa9fa6e1434141df8872d0fa4226fc301b17aacf37429193f9d70b426ea28f",
- "sha256:be4715c9d8367e51dbe6bc6d05e205b1ae234f0dc5465931014aa1c4af44c1ba",
- "sha256:bea90da782d8e945fccfc958585210d23de374fa9294a9481ed2abcef637ebfc",
- "sha256:d318d77ab96f66a59e792a481e2701fba879e1a453aefeebdb17444fe204d1ed",
- "sha256:d785fc08d6f4207437e900ffead930a61e634c5e4f980ba6d3dc03c9581748c7",
- "sha256:de9559287c4fe8da56e8c3878d2374abc19d1ba2b807bfa7553e912a8e5ba87c",
- "sha256:f4f98b190bb918ac0bc0e3dd2ab74ff3573da9f43106f6dba6385406912ec00f",
- "sha256:f71f1a7e2d03758f6e957896ed696254e2bc83110ddbc6942018f1a232dd9dad",
- "sha256:fb944c8f0b0ab5c1f7846c686bc4cdf8cde7224655c12edcd59d5212cd57bec0"
- ],
- "index": "pypi",
- "version": "==0.23.4"
- },
- "pandocfilters": {
- "hashes": [
- "sha256:b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9"
- ],
- "version": "==1.4.2"
- },
- "parso": {
- "hashes": [
- "sha256:895c63e93b94ac1e1690f5fdd40b65f07c8171e3e53cbd7793b5b96c0e0a7f24"
- ],
- "version": "==0.3.1"
- },
- "pickleshare": {
- "hashes": [
- "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca",
- "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"
- ],
- "version": "==0.7.5"
- },
- "plotly": {
- "hashes": [
- "sha256:53c647fdb28590de838678029f7d8fdc42f5ba4643d13c2afd2c4e4d56e18426",
- "sha256:5dc85bde91bc80fa05f0d89e9f3a8eaee735b2b404047266874e0ff9c104407f"
- ],
- "index": "pypi",
- "version": "==3.4.1"
- },
- "prometheus-client": {
- "hashes": [
- "sha256:046cb4fffe75e55ff0e6dfd18e2ea16e54d86cc330f369bebcc683475c8b68a9"
- ],
- "version": "==0.4.2"
- },
- "prompt-toolkit": {
- "hashes": [
- "sha256:c1d6aff5252ab2ef391c2fe498ed8c088066f66bc64a8d5c095bbf795d9fec34",
- "sha256:d4c47f79b635a0e70b84fdb97ebd9a274203706b1ee5ed44c10da62755cf3ec9",
- "sha256:fd17048d8335c1e6d5ee403c3569953ba3eb8555d710bfc548faf0712666ea39"
- ],
- "version": "==2.0.7"
- },
- "pygments": {
- "hashes": [
- "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d",
- "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc"
- ],
- "version": "==2.2.0"
- },
- "pyparsing": {
- "hashes": [
- "sha256:40856e74d4987de5d01761a22d1621ae1c7f8774585acae358aa5c5936c6c90b",
- "sha256:f353aab21fd474459d97b709e527b5571314ee5f067441dc9f88e33eecd96592"
- ],
- "version": "==2.3.0"
- },
- "pyproj": {
- "file": "https://download.lfd.uci.edu/pythonlibs/h2ufg7oq/pyproj-1.9.5.1-cp37-cp37m-win_amd64.whl",
- "hashes": [
- "sha256:2b8d0e937e1fa28b65bb351930ab2df9b5bd78e4cc953f7a5a415ff206a3acde"
- ],
- "index": "pypi",
- "version": "==1.9.5.1"
- },
- "pyrsistent": {
- "hashes": [
- "sha256:05910b7ff43cec0a853c15da0bfaf2867faa95f29b08e71f5846a195f1f38c75"
- ],
- "version": "==0.14.7"
- },
- "python-dateutil": {
- "hashes": [
- "sha256:063df5763652e21de43de7d9e00ccf239f953a832941e37be541614732cdfc93",
- "sha256:88f9287c0174266bb0d8cedd395cfba9c58e87e5ad86b2ce58859bc11be3cf02"
- ],
- "version": "==2.7.5"
- },
- "pytz": {
- "hashes": [
- "sha256:31cb35c89bd7d333cd32c5f278fca91b523b0834369e757f4c5641ea252236ca",
- "sha256:8e0f8568c118d3077b46be7d654cc8167fa916092e28320cde048e54bfc9f1e6"
- ],
- "version": "==2018.7"
- },
- "pywinpty": {
- "hashes": [
- "sha256:79f2b4584111e36826e587d33eb4e7416a12ae1d6c094cb554e873c5c162fa5f"
- ],
- "markers": "os_name == 'nt'",
- "version": "==0.5.4"
- },
- "pyyaml": {
- "hashes": [
- "sha256:254bf6fda2b7c651837acb2c718e213df29d531eebf00edb54743d10bcb694eb",
- "sha256:3108529b78577327d15eec243f0ff348a0640b0c3478d67ad7f5648f93bac3e2",
- "sha256:3c17fb92c8ba2f525e4b5f7941d850e7a48c3a59b32d331e2502a3cdc6648e76",
- "sha256:8d6d96001aa7f0a6a4a95e8143225b5d06e41b1131044913fecb8f85a125714b",
- "sha256:c8a88edd93ee29ede719080b2be6cb2333dfee1dccba213b422a9c8e97f2967b"
- ],
- "version": "==4.2b4"
- },
- "pyzmq": {
- "hashes": [
- "sha256:25a0715c8f69cf72f67cfe5a68a3f3ed391c67c063d2257bec0fe7fc2c7f08f8",
- "sha256:2bab63759632c6b9e0d5bf19cc63c3b01df267d660e0abcf230cf0afaa966349",
- "sha256:30ab49d99b24bf0908ebe1cdfa421720bfab6f93174e4883075b7ff38cc555ba",
- "sha256:32c7ca9fc547a91e3c26fc6080b6982e46e79819e706eb414dd78f635a65d946",
- "sha256:41219ae72b3cc86d97557fe5b1ef5d1adc1057292ec597b50050874a970a39cf",
- "sha256:4b8c48a9a13cea8f1f16622f9bd46127108af14cd26150461e3eab71e0de3e46",
- "sha256:55724997b4a929c0d01b43c95051318e26ddbae23565018e138ae2dc60187e59",
- "sha256:65f0a4afae59d4fc0aad54a917ab599162613a761b760ba167d66cc646ac3786",
- "sha256:6f88591a8b246f5c285ee6ce5c1bf4f6bd8464b7f090b1333a446b6240a68d40",
- "sha256:75022a4c60dcd8765bb9ca32f6de75a0ec83b0d96e0309dc479f4c7b21f26cb7",
- "sha256:76ea493bfab18dcb090d825f3662b5612e2def73dffc196d51a5194b0294a81d",
- "sha256:7b60c045b80709e4e3c085bab9b691e71761b44c2b42dbb047b8b498e7bc16b3",
- "sha256:8e6af2f736734aef8ed6f278f9f552ec7f37b1a6b98e59b887484a840757f67d",
- "sha256:9ac2298e486524331e26390eac14e4627effd3f8e001d4266ed9d8f1d2d31cce",
- "sha256:9ba650f493a9bc1f24feca1d90fce0e5dd41088a252ac9840131dfbdbf3815ca",
- "sha256:a02a4a385e394e46012dc83d2e8fd6523f039bb52997c1c34a2e0dd49ed839c1",
- "sha256:a3ceee84114d9f5711fa0f4db9c652af0e4636c89eabc9b7f03a3882569dd1ed",
- "sha256:a72b82ac1910f2cf61a49139f4974f994984475f771b0faa730839607eeedddf",
- "sha256:ab136ac51027e7c484c53138a0fab4a8a51e80d05162eb7b1585583bcfdbad27",
- "sha256:c095b224300bcac61e6c445e27f9046981b1ac20d891b2f1714da89d34c637c8",
- "sha256:c5cc52d16c06dc2521340d69adda78a8e1031705924e103c0eb8fc8af861d810",
- "sha256:d612e9833a89e8177f8c1dc68d7b4ff98d3186cd331acd616b01bbdab67d3a7b",
- "sha256:e828376a23c66c6fe90dcea24b4b72cd774f555a6ee94081670872918df87a19",
- "sha256:e9767c7ab2eb552796440168d5c6e23a99ecaade08dda16266d43ad461730192",
- "sha256:ebf8b800d42d217e4710d1582b0c8bff20cdcb4faad7c7213e52644034300924"
- ],
- "version": "==17.1.2"
- },
- "qtconsole": {
- "hashes": [
- "sha256:1ac4a65e81a27b0838330a6d351c2f8435d4013d98a95373e8a41119b2968390",
- "sha256:bc1ba15f50c29ed50f1268ad823bb6543be263c18dd093b80495e9df63b003ac"
- ],
- "version": "==4.4.3"
- },
- "requests": {
- "hashes": [
- "sha256:65b3a120e4329e33c9889db89c80976c5272f56ea92d3e74da8a463992e3ff54",
- "sha256:ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263"
- ],
- "version": "==2.20.1"
- },
- "retrying": {
- "hashes": [
- "sha256:08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b"
- ],
- "version": "==1.3.3"
- },
- "scipy": {
- "hashes": [
- "sha256:0611ee97296265af4a21164a5323f8c1b4e8e15c582d3dfa7610825900136bb7",
- "sha256:08237eda23fd8e4e54838258b124f1cd141379a5f281b0a234ca99b38918c07a",
- "sha256:0e645dbfc03f279e1946cf07c9c754c2a1859cb4a41c5f70b25f6b3a586b6dbd",
- "sha256:0e9bb7efe5f051ea7212555b290e784b82f21ffd0f655405ac4f87e288b730b3",
- "sha256:108c16640849e5827e7d51023efb3bd79244098c3f21e4897a1007720cb7ce37",
- "sha256:340ef70f5b0f4e2b4b43c8c8061165911bc6b2ad16f8de85d9774545e2c47463",
- "sha256:3ad73dfc6f82e494195144bd3a129c7241e761179b7cb5c07b9a0ede99c686f3",
- "sha256:3b243c77a822cd034dad53058d7c2abf80062aa6f4a32e9799c95d6391558631",
- "sha256:404a00314e85eca9d46b80929571b938e97a143b4f2ddc2b2b3c91a4c4ead9c5",
- "sha256:423b3ff76957d29d1cce1bc0d62ebaf9a3fdfaf62344e3fdec14619bb7b5ad3a",
- "sha256:42d9149a2fff7affdd352d157fa5717033767857c11bd55aa4a519a44343dfef",
- "sha256:625f25a6b7d795e8830cb70439453c9f163e6870e710ec99eba5722775b318f3",
- "sha256:698c6409da58686f2df3d6f815491fd5b4c2de6817a45379517c92366eea208f",
- "sha256:729f8f8363d32cebcb946de278324ab43d28096f36593be6281ca1ee86ce6559",
- "sha256:8190770146a4c8ed5d330d5b5ad1c76251c63349d25c96b3094875b930c44692",
- "sha256:878352408424dffaa695ffedf2f9f92844e116686923ed9aa8626fc30d32cfd1",
- "sha256:8b984f0821577d889f3c7ca8445564175fb4ac7c7f9659b7c60bef95b2b70e76",
- "sha256:8f841bbc21d3dad2111a94c490fb0a591b8612ffea86b8e5571746ae76a3deac",
- "sha256:c22b27371b3866c92796e5d7907e914f0e58a36d3222c5d436ddd3f0e354227a",
- "sha256:d0cdd5658b49a722783b8b4f61a6f1f9c75042d0e29a30ccb6cacc9b25f6d9e2",
- "sha256:d40dc7f494b06dcee0d303e51a00451b2da6119acbeaccf8369f2d29e28917ac",
- "sha256:d8491d4784aceb1f100ddb8e31239c54e4afab8d607928a9f7ef2469ec35ae01",
- "sha256:dfc5080c38dde3f43d8fbb9c0539a7839683475226cf83e4b24363b227dfe552",
- "sha256:e24e22c8d98d3c704bb3410bce9b69e122a8de487ad3dbfe9985d154e5c03a40",
- "sha256:e7a01e53163818d56eabddcafdc2090e9daba178aad05516b20c6591c4811020",
- "sha256:ee677635393414930541a096fc8e61634304bb0153e4e02b75685b11eba14cae",
- "sha256:f0521af1b722265d824d6ad055acfe9bd3341765735c44b5a4d0069e189a0f40",
- "sha256:f25c281f12c0da726c6ed00535ca5d1622ec755c30a3f8eafef26cf43fede694"
- ],
- "index": "pypi",
- "version": "==1.1.0"
- },
- "send2trash": {
- "hashes": [
- "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2",
- "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b"
- ],
- "version": "==1.5.0"
- },
- "shapely": {
- "hashes": [
- "sha256:045e991636787c22bf3e18b57cdaa200681acc0e5db0720123643909d99ad32b",
- "sha256:2e8398aacf67cfdfcd64154738c809fea52008afefb4704103f43face369230d",
- "sha256:56b8184ef9cf2e2e1dd09ccfe341028af08ea57254524c9458e7f115655385af",
- "sha256:7268fd767dc88ef083a528a1e8977a358c7a56cb349aae9e4c36913cfba30857",
- "sha256:7e06705e0a20e10f0ce35b233b32b57f6b77044e58e2ad4023d6e64f6c3719a7",
- "sha256:937502b7f7bfea39910e30617a30d74ce1b6585895b3d8a2a4602c223a0dd73c",
- "sha256:99dc867fe6519c1af1840cceea8bcf5dd1ece077207bdcb19072cdb4fbda8584",
- "sha256:9e45485c49fd9ee81a81be756e648a0c1c125e770e3ed42845350d75a46723ad",
- "sha256:e3c3eb85f7d4308ccbfcdd23513bfe201b193673c98400219b9a480b903b3033",
- "sha256:eb4f295b1ff558857d8061ff7716b1e10ec3c24b5b784bccb51dc87e6fd3ad07",
- "sha256:f87c677c0b176827167d1ebad37bba36a9e6baf61f608ff8ef4b9d9ff002c3c3",
- "sha256:ffe14cf22da9c95aa87a287ddb96202e3cbb4ec1ec862050d9e4b114307fa206"
- ],
- "index": "pypi",
- "version": "==1.7a1"
- },
- "six": {
- "hashes": [
- "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
- "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
- ],
- "version": "==1.11.0"
- },
- "terminado": {
- "hashes": [
- "sha256:55abf9ade563b8f9be1f34e4233c7b7bde726059947a593322e8a553cc4c067a",
- "sha256:65011551baff97f5414c67018e908110693143cfbaeb16831b743fe7cad8b927"
- ],
- "version": "==0.8.1"
- },
- "testpath": {
- "hashes": [
- "sha256:46c89ebb683f473ffe2aab0ed9f12581d4d078308a3cb3765d79c6b2317b0109",
- "sha256:b694b3d9288dbd81685c5d2e7140b81365d46c29f5db4bc659de5aa6b98780f8"
- ],
- "version": "==0.4.2"
- },
- "toml": {
- "hashes": [
- "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
- "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"
- ],
- "version": "==0.10.0"
- },
- "tornado": {
- "hashes": [
- "sha256:0662d28b1ca9f67108c7e3b77afabfb9c7e87bde174fbda78186ecedc2499a9d",
- "sha256:4e5158d97583502a7e2739951553cbd88a72076f152b4b11b64b9a10c4c49409",
- "sha256:732e836008c708de2e89a31cb2fa6c0e5a70cb60492bee6f1ea1047500feaf7f",
- "sha256:8154ec22c450df4e06b35f131adc4f2f3a12ec85981a203301d310abf580500f",
- "sha256:8e9d728c4579682e837c92fdd98036bd5cdefa1da2aaf6acf26947e6dd0c01c5",
- "sha256:d4b3e5329f572f055b587efc57d29bd051589fb5a43ec8898c77a47ec2fa2bbb",
- "sha256:e5f2585afccbff22390cddac29849df463b252b711aa2ce7c5f3f342a5b3b444"
- ],
- "version": "==5.1.1"
- },
- "traitlets": {
- "hashes": [
- "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835",
- "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9"
- ],
- "version": "==4.3.2"
- },
- "urllib3": {
- "hashes": [
- "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39",
- "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22"
- ],
- "version": "==1.24.1"
- },
- "wcwidth": {
- "hashes": [
- "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"
- ],
- "version": "==0.1.7"
- },
- "webencodings": {
- "hashes": [
- "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"
- ],
- "version": "==0.5.1"
- },
- "widgetsnbextension": {
- "hashes": [
- "sha256:14b2c65f9940c9a7d3b70adbe713dbd38b5ec69724eebaba034d1036cf3d4740",
- "sha256:fa618be8435447a017fd1bf2c7ae922d0428056cfc7449f7a8641edf76b48265"
- ],
- "version": "==3.4.2"
- }
- },
- "develop": {}
-}
diff --git a/README.md b/README.md
index 341ff13..d00579c 100644
--- a/README.md
+++ b/README.md
@@ -7,19 +7,36 @@ structure where possible. The analysis is done in python (look at the `/src/` fo
Development is conducted using a [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) approach. The `master` branch stores the officialrelease history and the `develop` branch serves as an integration branch for features. Other `hotfix` and `feature` branches should be created and merged as necessary.
-## Where to start?
-Check .env
-Uses pipenv
-1. Clone this repository.
-2. Pull data from WRL coastal J drive with `make pull-data`
-3. Check out jupyter notebook `./notebooks/01_exploration.ipynb` which has an example of how to import the data and some interactive widgets.
-
-## Requirements
+## How to start?
+
+### # Getting software requirements
The following requirements are needed to run various bits:
-- [Python 3.6+](https://conda.io/docs/user-guide/install/windows.html): Used for processing and analysing data. Jupyter notebooks are used for exploratory analyis and communication.
+- [Anacond](https://www.anaconda.com/download/): Used for processing and analysing data. The Anaconda distribution is used for managing environments and is available for Windows, Mac and Linux. Jupyter notebooks are used for exploratory analyis and communication.
- [QGIS](https://www.qgis.org/en/site/forusers/download): Used for looking at raw LIDAR pre/post storm surveys and extracting dune crests/toes
- [rclone](https://rclone.org/downloads/): Data is not tracked by this repository, but is backed up to a remote Chris Leaman working directory located on the WRL coastal drive. Rclone is used to sync local and remote copies. Ensure rclone.exe is located on your `PATH` environment.
- [gnuMake](http://gnuwin32.sourceforge.net/packages/make.htm): A list of commands for processing data is provided in the `./Makefile`. Use gnuMake to launch these commands. Ensure make.exe is located on your `PATH` environment.
+- git
+
+#### Getting the repository
+Clone the repository:
+```
+git clone http://git.wrl.unsw.edu.au:3000/chrisl/nsw-2016-storm-impact.git
+cd nsw-2016-storm-impact
+```
+
+#### Getting the python environment set up
+Commands for setting up the python environment are provided in the `Makefile`. Simply run the following commands in the repo root directory:
+```
+make venv-init
+make venv-activate
+make venv-requirements-install
+```
+You can see what these commands are actually running by inspecting the `Makefile`.
+
+#### Pull data
+
+#### View notebooks
+
## Available data
Raw, interim and processed data used in this analysis is kept in the `/data/` folder. Data is not tracked in the repository due to size constraints, but stored locally. A mirror is kept of the coastal folder J drive which you can
@@ -44,4 +61,5 @@ been corrected for systematic errors, so actual elevations should be taken from
- [ ] Implement (bayesian change detection algorithm)[https://github.com/hildensia/bayesian_changepoint_detection] to help detect dune crests and toes from profiles. Probably low priority at the moment since we are doing manual detection.
- [ ] Implement dune impact calculations as per Palmsten & Holman. Calculation should be done in a new dataframe.
- [ ] Implement data/interim/*.csv file checking using py.test. Check for correct columns, number of nans etc. Testing of code is probably a lower priority than just checking the interim data files at the moment.
-- [ ] Investigate using [modin](https://github.com/modin-project/modin) to help speed up analysis.
\ No newline at end of file
+- [ ] Investigate using [modin](https://github.com/modin-project/modin) to help speed up analysis.
+- [ ] Need to think about how relative imports are handled, see [here](https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html). Maybe the click CLI interface should be moved to the `./src/` folder and it can import all the other packages?
\ No newline at end of file
diff --git a/environment.yml b/environment.yml
new file mode 100644
index 0000000..561fc32
--- /dev/null
+++ b/environment.yml
@@ -0,0 +1,149 @@
+name: C:\Users\z5189959\Desktop\nsw-2016-storm-impact\.venv
+channels:
+ - defaults
+ - conda-forge
+dependencies:
+ - appdirs=1.4.3=py_1
+ - attrs=18.2.0=py_0
+ - backcall=0.1.0=py_0
+ - black=18.9b0=py_0
+ - bleach=3.0.2=py_0
+ - boost=1.66.0=py36_vc14_1
+ - boost-cpp=1.66.0=vc14_1
+ - ca-certificates=2018.10.15=ha4d7672_0
+ - certifi=2018.10.15=py36_1000
+ - colorama=0.4.0=py_0
+ - colorlover=0.2.1=py_0
+ - curl=7.60.0=vc14_0
+ - entrypoints=0.2.3=py36_1002
+ - expat=2.2.5=vc14_0
+ - freetype=2.8.1=vc14_0
+ - freexl=1.0.2=vc14_2
+ - geotiff=1.4.2=vc14_1
+ - hdf4=4.2.13=vc14_0
+ - hdf5=1.10.1=vc14_2
+ - icu=58.2=vc14_0
+ - ipykernel=5.1.0=py36h39e3cac_1001
+ - ipython=7.1.1=py36h39e3cac_1000
+ - jedi=0.13.1=py36_1000
+ - jinja2=2.10=py_1
+ - jpeg=9b=vc14_2
+ - jupyter_client=5.2.3=py_1
+ - jupyter_contrib_core=0.3.3=py_2
+ - jupyter_contrib_nbextensions=0.5.0=py36_1000
+ - jupyter_highlight_selected_word=0.2.0=py36_1000
+ - jupyter_latex_envs=1.4.4=py36_1000
+ - jupyter_nbextensions_configurator=0.4.0=py36_1000
+ - kealib=1.4.7=vc14_4
+ - krb5=1.14.6=vc14_0
+ - libgdal=2.2.4=vc14_5
+ - libiconv=1.14=vc14_4
+ - libnetcdf=4.6.1=vc14_2
+ - libpng=1.6.34=vc14_0
+ - libpq=9.6.3=vc14_0
+ - libsodium=1.0.16=vc14_0
+ - libspatialite=4.3.0a=vc14_19
+ - libtiff=4.0.9=vc14_0
+ - libxml2=2.9.5=vc14_1
+ - libxslt=1.1.32=vc14_0
+ - lxml=4.2.3=py36heafd4d3_0
+ - markupsafe=1.1.0=py36hfa6e2cd_1000
+ - matplotlib=2.2.2=py36_1
+ - mistune=0.8.4=py36hfa6e2cd_1000
+ - nbconvert=5.3.1=py_1
+ - notebook=5.7.2=py36_1000
+ - openjpeg=2.3.0=vc14_2
+ - openssl=1.0.2p=hfa6e2cd_1001
+ - pandoc=2.4=0
+ - pandocfilters=1.4.2=py_1
+ - parso=0.3.1=py_0
+ - pickleshare=0.7.5=py36_1000
+ - proj4=4.9.3=vc14_5
+ - prometheus_client=0.4.2=py_0
+ - prompt_toolkit=2.0.7=py_0
+ - pygments=2.2.0=py_1
+ - python=3.6.6=he025d50_0
+ - pywinpty=0.5.4=py36_1002
+ - pyzmq=17.1.2=py36hf576995_1001
+ - qt=5.6.2=vc14_1
+ - send2trash=1.5.0=py_0
+ - sqlite=3.20.1=vc14_2
+ - terminado=0.8.1=py36_1001
+ - testpath=0.4.2=py36_1000
+ - tk=8.6.8=vc14_0
+ - toml=0.10.0=py_0
+ - vc=14=0
+ - wcwidth=0.1.7=py_1
+ - webencodings=0.5.1=py_1
+ - winpty=0.4.3=4
+ - xerces-c=3.2.0=vc14_0
+ - yaml=0.1.7=vc14_0
+ - zeromq=4.2.5=vc14_2
+ - zlib=1.2.11=vc14_0
+ - asn1crypto=0.24.0=py36_0
+ - blas=1.0=mkl
+ - cffi=1.11.5=py36h74b6da3_1
+ - chardet=3.0.4=py36_1
+ - click=7.0=py36_0
+ - click-plugins=1.0.4=py36_0
+ - cligj=0.5.0=py36_0
+ - cryptography=2.3.1=py36h74b6da3_0
+ - cycler=0.10.0=py36h009560c_0
+ - decorator=4.3.0=py36_0
+ - fiona=1.7.10=py36h5bf8d1d_0
+ - gdal=2.2.2=py36hcebd033_1
+ - geos=3.6.2=h9ef7328_2
+ - icc_rt=2017.0.4=h97af966_0
+ - idna=2.7=py36_0
+ - intel-openmp=2019.1=144
+ - ipython_genutils=0.2.0=py36h3c5d0ee_0
+ - jsonschema=2.6.0=py36h7636477_0
+ - jupyter_core=4.4.0=py36_0
+ - kiwisolver=1.0.1=py36h6538335_0
+ - libboost=1.67.0=hd9e427e_4
+ - libcurl=7.61.1=h7602738_0
+ - libkml=1.3.0=he5f2a48_4
+ - libssh2=1.8.0=hd619d38_4
+ - m2w64-gcc-libgfortran=5.3.0=6
+ - m2w64-gcc-libs=5.3.0=7
+ - m2w64-gcc-libs-core=5.3.0=7
+ - m2w64-gmp=6.1.0=2
+ - m2w64-libwinpthread-git=5.0.0.4634.697f757=2
+ - mkl=2018.0.3=1
+ - mkl_fft=1.0.6=py36hdbbee80_0
+ - mkl_random=1.0.1=py36h77b88f5_1
+ - msys2-conda-epoch=20160418=1
+ - munch=2.3.2=py36_0
+ - nbformat=4.4.0=py36h3a5bc1b_0
+ - numpy=1.15.4=py36ha559c80_0
+ - numpy-base=1.15.4=py36h8128ebf_0
+ - pandas=0.23.4=py36h830ac7b_0
+ - pip=18.1=py36_0
+ - plotly=3.4.1=py36h28b3542_0
+ - pycparser=2.19=py36_0
+ - pyopenssl=18.0.0=py36_0
+ - pyparsing=2.3.0=py36_0
+ - pyproj=1.9.5.1=py36_0
+ - pyqt=5.6.0=py36_2
+ - pysocks=1.6.8=py36_0
+ - python-dateutil=2.7.5=py36_0
+ - pytz=2018.7=py36_0
+ - pyyaml=3.13=py36hfa6e2cd_0
+ - requests=2.20.1=py36_0
+ - retrying=1.3.3=py36_2
+ - scipy=1.1.0=py36h4f6bf74_1
+ - setuptools=40.6.2=py36_0
+ - shapely=1.6.4=py36hc90234e_0
+ - sip=4.19.8=py36h6538335_0
+ - six=1.11.0=py36_1
+ - tornado=5.1.1=py36hfa6e2cd_0
+ - traitlets=4.3.2=py36h096827d_0
+ - urllib3=1.23=py36_0
+ - vs2015_runtime=14.15.26706=h3a45250_0
+ - wheel=0.32.3=py36_0
+ - win_inet_pton=1.0.1=py36_1
+ - wincertstore=0.2=py36h7fe50ca_0
+ - xz=5.2.4=h2fa13f4_4
+ - pip:
+ - mat4py==0.4.1
+prefix: C:\Users\z5189959\Desktop\nsw-2016-storm-impact\.venv
From 0cf76b3165c4b943543cc605483ed7ac31dc5353 Mon Sep 17 00:00:00 2001
From: Chris Leaman
Date: Tue, 27 Nov 2018 12:59:21 +1100
Subject: [PATCH 3/6] Update Makefile
---
Makefile | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index c6ad96e..c31a2c7 100644
--- a/Makefile
+++ b/Makefile
@@ -19,7 +19,7 @@ venv-init: ##@environment Setup virtual environment
venv-activate: ##@environment Activates the virtual environment
activate $(CURRENT_DIR)/.venv
-venv-requirements-install: ##@enviornment Ensures environment.yml packages are installed
+venv-requirements-install: ##@environment Ensures environment.yml packages are installed
conda env update
venv-requirements-export: ##@environment Exports current environment to environment.yml
@@ -42,7 +42,7 @@ pull-data: ##@data Copies data from data backup directory to ./data/
# Process data
.PHONY: process-mat
-process-mat: ./data/interim/sites.csv ./data/interim/waves.csv ./data/interim/profiles.csv ./data/interim/tides.csv ##@data Process all .mat to .csv
+impacts: ./data/interim/impacts_forecasted_foreshore_slope_sto06.csv ./data/interim/impacts_forecasted_mean_slope_sto06.csv ./data/interim/impacts_observed.csv ##@products makes obsered and forecasted impacts
# Calculates beach orientations at each profile
./data/raw/processed_shorelines/orientations.mat: ./data/raw/processed_shorelines/profiles.mat
@@ -95,7 +95,6 @@ process-mat: ./data/interim/sites.csv ./data/interim/waves.csv ./data/interim/pr
--slope "foreshore" \
--output-file "./data/interim/twl_foreshore_slope_sto06.csv"
-# Creates a forecast of twl using sto06 and prestorm mean foreshore slope
./data/interim/twl_mean_slope_sto06.csv: ./data/interim/waves.csv ./data/interim/tides.csv ./data/interim/profiles.csv ./data/interim/sites.csv ./data/interim/profile_features.csv
activate ./.venv && python ./src/analysis/forecast_twl.py create-twl-forecast \
--waves-csv "./data/interim/waves.csv" \
@@ -128,7 +127,7 @@ process-mat: ./data/interim/sites.csv ./data/interim/waves.csv ./data/interim/pr
###############################
# Misc commands
format: ./src/*.py ##@misc Check python file formatting
- pipenv run black --line-length 120 "src/"
+ activate ./.venv && black --line-length 120 "src/"
###############################
From b811565e99a8ce49b334e68ceaad3f57ec390c76 Mon Sep 17 00:00:00 2001
From: Chris Leaman
Date: Tue, 27 Nov 2018 12:59:34 +1100
Subject: [PATCH 4/6] Improve README for starting out
---
README.md | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index d00579c..00f303c 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ Development is conducted using a [gitflow](https://www.atlassian.com/git/tutoria
## How to start?
-### # Getting software requirements
+#### Getting software requirements
The following requirements are needed to run various bits:
- [Anacond](https://www.anaconda.com/download/): Used for processing and analysing data. The Anaconda distribution is used for managing environments and is available for Windows, Mac and Linux. Jupyter notebooks are used for exploratory analyis and communication.
- [QGIS](https://www.qgis.org/en/site/forusers/download): Used for looking at raw LIDAR pre/post storm surveys and extracting dune crests/toes
@@ -18,7 +18,7 @@ The following requirements are needed to run various bits:
- git
#### Getting the repository
-Clone the repository:
+Clone the repository onto into your local environment:
```
git clone http://git.wrl.unsw.edu.au:3000/chrisl/nsw-2016-storm-impact.git
cd nsw-2016-storm-impact
@@ -34,9 +34,20 @@ make venv-requirements-install
You can see what these commands are actually running by inspecting the `Makefile`.
#### Pull data
+The actual raw, interim and processed data are not tracked by the repository as part of good git practices. A copy of the raw data is stored on the WRL Coastal J:\ drive and can be copied using the following command.
+```
+make pull-data
+```
+If you have updated the data and want to copy it back to the J:\ drive, use the following command. Note that it is probably not a good idea to modify data stored in `./data/raw`.
+```
+make push-data
+```
#### View notebooks
-
+Jupyter notebooks have been set up to help explore the data. Once you have set up your environment and pulled the data, this is probably a good place to start as you. To run the notebook, use the following command and navigate to the `./notebooks` folder.
+```
+jupyter notebook
+```
## Available data
Raw, interim and processed data used in this analysis is kept in the `/data/` folder. Data is not tracked in the repository due to size constraints, but stored locally. A mirror is kept of the coastal folder J drive which you can
From 022c7b890754e428e3c9045726dac5854b68c226 Mon Sep 17 00:00:00 2001
From: Chris Leaman
Date: Tue, 27 Nov 2018 14:51:52 +1100
Subject: [PATCH 5/6] Update notebook
---
notebooks/01_exploration.ipynb | 108 +++++++++++++++++++--------------
1 file changed, 61 insertions(+), 47 deletions(-)
diff --git a/notebooks/01_exploration.ipynb b/notebooks/01_exploration.ipynb
index 03189fd..9150b26 100644
--- a/notebooks/01_exploration.ipynb
+++ b/notebooks/01_exploration.ipynb
@@ -10,11 +10,11 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 7,
"metadata": {
"ExecuteTime": {
- "end_time": "2018-11-25T21:56:41.533322Z",
- "start_time": "2018-11-25T21:56:41.362045Z"
+ "end_time": "2018-11-27T03:27:16.641947Z",
+ "start_time": "2018-11-27T03:27:15.791353Z"
}
},
"outputs": [],
@@ -29,11 +29,11 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 8,
"metadata": {
"ExecuteTime": {
- "end_time": "2018-11-25T21:57:10.456785Z",
- "start_time": "2018-11-25T21:56:41.534324Z"
+ "end_time": "2018-11-27T03:27:16.655952Z",
+ "start_time": "2018-11-27T03:27:16.642938Z"
},
"scrolled": true
},
@@ -70,11 +70,11 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 9,
"metadata": {
"ExecuteTime": {
- "end_time": "2018-11-25T21:57:33.969096Z",
- "start_time": "2018-11-25T21:57:10.456785Z"
+ "end_time": "2018-11-27T03:27:31.268696Z",
+ "start_time": "2018-11-27T03:27:16.657959Z"
},
"pixiedust": {
"displayParams": {}
@@ -130,23 +130,23 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 10,
"metadata": {
"ExecuteTime": {
- "end_time": "2018-11-25T22:27:09.754717Z",
- "start_time": "2018-11-25T22:27:06.633214Z"
+ "end_time": "2018-11-27T03:27:34.422864Z",
+ "start_time": "2018-11-27T03:27:31.278426Z"
},
"code_folding": [
408
],
- "hide_input": false,
+ "hide_input": true,
"scrolled": false
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "9bf50bbca81147ee9d37120a32bed4ea",
+ "model_id": "80589953e2e04fecb2a0f3add40b3d5b",
"version_major": 2,
"version_minor": 0
},
@@ -166,45 +166,45 @@
"
\n"
],
"text/plain": [
- "VBox(children=(VBox(children=(HTML(value='Filter by observed and predicted impacts:'), HBox(children=(VBox(children=(HTML(value='Observed Impacts'), SelectMultiple(index=(0, 1), options=('swash', 'collision'), value=('swash', 'collision')))), VBox(children=(HTML(value='Forecasted: foreshore_slope_sto06'), SelectMultiple(index=(0, 1, 2, 3), options=('swash', 'collision', 'overwash', 'inundation'), value=('swash', 'collision', 'overwash', 'inundation')))), VBox(children=(HTML(value='Forecasted: mean_slope_sto06'), SelectMultiple(index=(0, 1, 2), options=('swash', 'collision', 'overwash'), value=('swash', 'collision', 'overwash')))))))), HBox(children=(VBox(children=(HTML(value='Filter by site_id:'), HBox(children=(Dropdown(description='site_id: ', index=942, options=('AVOCAn0001', 'AVOCAn0002', 'AVOCAn0003', 'AVOCAn0004', 'AVOCAn0005', 'AVOCAn0006', 'AVOCAn0007', 'AVOCAn0008', 'AVOCAn0009', 'AVOCAs0002', 'AVOCAs0003', 'AVOCAs0004', 'AVOCAs0005', 'AVOCAs0006', 'AVOCAs0007', 'AVOCAs0008', 'BILG0001', 'BILG0002', 'BILG0003', 'BILG0004', 'BILG0005', 'BLUEYS0001', 'BLUEYS0002', 'BLUEYS0003', 'BLUEYS0004', 'BLUEYS0005', 'BLUEYS0006', 'BOAT0001', 'BOAT0002', 'BOAT0003', 'BOAT0004', 'BOAT0005', 'BOOM0001', 'BOOM0002', 'BOOM0003', 'BOOM0004', 'BOOM0005', 'BOOM0006', 'BOOM0007', 'BOOM0008', 'BOOM0009', 'BOOM0010', 'BOOM0011', 'BOOM0012', 'BOOM0013', 'BOOM0014', 'CATHIE0001', 'CATHIE0002', 'CATHIE0003', 'CATHIE0004', 'CATHIE0005', 'CATHIE0006', 'CATHIE0007', 'CATHIE0008', 'CATHIE0009', 'CATHIE0010', 'CATHIE0011', 'CATHIE0012', 'CATHIE0013', 'CATHIE0014', 'CATHIE0015', 'CATHIE0016', 'CATHIE0017', 'CATHIE0018', 'CATHIE0019', 'CATHIE0020', 'CATHIE0021', 'CATHIE0022', 'CATHIE0023', 'CATHIE0024', 'CATHIE0025', 'CATHIE0026', 'CATHIE0027', 'CATHIE0028', 'CATHIE0029', 'CRESn0001', 'CRESn0002', 'CRESn0003', 'CRESn0004', 'CRESn0005', 'CRESn0006', 'CRESn0007', 'CRESn0008', 'CRESn0009', 'CRESn0010', 'CRESn0011', 'CRESn0012', 'CRESn0013', 'CRESn0014', 'CRESn0015', 'CRESn0016', 'CRESn0017', 'CRESn0018', 'CRESn0019', 'CRESn0020', 'CRESn0021', 'CRESn0022', 'CRESn0023', 'CRESn0024', 'CRESn0025', 'CRESn0026', 'CRESn0027', 'CRESn0028', 'CRESn0029', 'CRESn0030', 'CRESn0031', 'CRESn0032', 'CRESn0033', 'CRESn0034', 'CRESn0035', 'CRESn0036', 'CRESn0037', 'CRESn0038', 'CRESn0039', 'CRESn0040', 'CRESn0041', 'CRESn0042', 'CRESn0043', 'CRESn0044', 'CRESn0045', 'CRESn0046', 'CRESn0047', 'CRESn0048', 'CRESn0049', 'CRESn0050', 'CRESn0051', 'CRESn0052', 'CRESn0053', 'CRESn0054', 'CRESn0055', 'CRESn0056', 'CRESn0057', 'CRESn0058', 'CRESn0059', 'CRESn0060', 'CRESn0061', 'CRESn0062', 'CRESn0063', 'CRESn0064', 'CRESn0065', 'CRESn0066', 'CRESn0067', 'CRESn0068', 'CRESn0069', 'CRESn0070', 'CRESn0071', 'CRESn0072', 'CRESn0073', 'CRESn0074', 'CRESn0075', 'CRESn0076', 'CRESn0077', 'CRESn0078', 'CRESn0079', 'CRESn0080', 'CRESn0081', 'CRESn0082', 'CRESn0083', 'CRESn0084', 'CRESn0085', 'CRESn0086', 'CRESn0087', 'CRESn0088', 'CRESn0089', 'CRESn0090', 'CRESn0091', 'CRESn0092', 'CRESn0093', 'CRESn0094', 'CRESn0095', 'CRESn0096', 'CRESn0097', 'CRESn0098', 'CRESn0099', 'CRESn0100', 'CRESn0101', 'CRESn0102', 'CRESn0103', 'CRESn0104', 'CRESn0105', 'CRESn0106', 'CRESn0107', 'CRESn0108', 'CRESn0109', 'CRESn0110', 'CRESn0111', 'CRESn0112', 'CRESn0113', 'CRESn0114', 'CRESn0115', 'CRESn0116', 'CRESn0117', 'CRESn0118', 'CRESn0119', 'CRESn0120', 'CRESn0121', 'CRESn0122', 'CRESn0123', 'CRESn0124', 'CRESn0125', 'CRESs0001', 'CRESs0002', 'CRESs0003', 'CRESs0004', 'CRESs0005', 'CRESs0006', 'CRESs0007', 'CRESs0008', 'CRESs0009', 'CRESs0010', 'CRESs0011', 'CRESs0012', 'CRESs0013', 'CRESs0014', 'DEEWHYn0001', 'DEEWHYn0002', 'DEEWHYn0003', 'DEEWHYn0004', 'DEEWHYn0005', 'DEEWHYn0006', 'DEEWHYn0007', 'DEEWHYn0008', 'DEEWHYn0009', 'DEEWHYn0010', 'DEEWHYn0011', 'DEEWHYn0012', 'DEEWHYs0001', 'DEEWHYs0002', 'DEEWHYs0003', 'DEEWHYs0004', 'DEEWHYs0005', 'DEEWHYs0006', 'DEEWHYs0007', 'DEEWHYs0008', 'DIAMONDn0001', 'DIAMONDn0002', 'DIAMONDn0003', 'DIAMONDn0004', 'DIAMONDn0005', 'DIAMONDn0006', 'DIAMONDn0007', 'DIAMONDn0008', 'DIAMONDn0009', 'DIAMONDn0010', 'DIAMONDn0011', 'DIAMONDn0012', 'DIAMONDn0013', 'DIAMONDn0014', 'DIAMONDn0015', 'DIAMONDn0016', 'DIAMONDn0017', 'DIAMONDn0018', 'DIAMONDn0019', 'DIAMONDn0020', 'DIAMONDn0021', 'DIAMONDn0022', 'DIAMONDn0023', 'DIAMONDn0024', 'DIAMONDn0025', 'DIAMONDn0026', 'DIAMONDn0027', 'DIAMONDn0028', 'DIAMONDn0029', 'DIAMONDn0030', 'DIAMONDn0031', 'DIAMONDn0032', 'DIAMONDn0033', 'DIAMONDn0034', 'DIAMONDn0035', 'DIAMONDn0036', 'DIAMONDn0037', 'DIAMONDn0038', 'DIAMONDn0039', 'DIAMONDn0040', 'DIAMONDn0041', 'DIAMONDs0001', 'DIAMONDs0002', 'DIAMONDs0003', 'DIAMONDs0004', 'DIAMONDs0005', 'DIAMONDs0006', 'DIAMONDs0007', 'DUNBn0001', 'DUNBn0002', 'DUNBn0003', 'DUNBn0004', 'DUNBn0005', 'DUNBn0006', 'DUNBn0007', 'DUNBn0008', 'DUNBn0009', 'DUNBn0010', 'DUNBn0011', 'DUNBn0012', 'DUNBn0013', 'DUNBn0014', 'DUNBn0015', 'DUNBn0016', 'DUNBn0017', 'DUNBn0018', 'DUNBn0019', 'DUNBn0020', 'DUNBn0021', 'DUNBn0022', 'DUNBn0023', 'DUNBn0024', 'DUNBn0025', 'DUNBn0026', 'DUNBn0027', 'DUNBn0028', 'DUNBn0029', 'DUNBn0030', 'DUNBn0031', 'DUNBn0032', 'DUNBn0033', 'DUNBn0034', 'DUNBn0035', 'DUNBn0036', 'DUNBn0037', 'DUNBn0038', 'DUNBn0039', 'DUNBn0040', 'DUNBn0041', 'DUNBn0042', 'DUNBn0043', 'DUNBn0044', 'DUNBn0045', 'DUNBn0046', 'DUNBn0047', 'DUNBn0048', 'DUNBn0049', 'DUNBn0050', 'DUNBn0051', 'DUNBn0052', 'DUNBn0053', 'DUNBn0054', 'DUNBn0055', 'DUNBn0056', 'DUNBn0057', 'DUNBn0058', 'DUNBn0059', 'DUNBn0060', 'DUNBn0061', 'DUNBn0062', 'DUNBn0063', 'DUNBn0064', 'DUNBn0065', 'DUNBn0066', 'DUNBn0067', 'DUNBn0068', 'DUNBn0069', 'DUNBn0070', 'DUNBn0071', 'DUNBn0072', 'DUNBn0073', 'DUNBn0074', 'DUNBs0001', 'DUNBs0002', 'DUNBs0003', 'DUNBs0004', 'DUNBs0005', 'DUNBs0006', 'DUNBs0007', 'DUNBs0008', 'DUNBs0009', 'DUNBs0010', 'DUNBs0011', 'ELIZA0001', 'ELIZA0002', 'ELIZA0003', 'ELIZA0004', 'ELIZA0005', 'ELIZA0006', 'ELIZA0007', 'ENTRA0001', 'ENTRA0002', 'ENTRA0003', 'ENTRA0004', 'ENTRA0005', 'ENTRA0006', 'ENTRA0007', 'ENTRA0008', 'ENTRA0009', 'ENTRA0010', 'ENTRA0011', 'ENTRA0012', 'ENTRA0013', 'ENTRA0014', 'ENTRA0015', 'ENTRA0016', 'ENTRA0017', 'ENTRA0018', 'ENTRA0019', 'ENTRA0020', 'ENTRA0021', 'ENTRA0022', 'ENTRA0023', 'ENTRA0024', 'ENTRA0025', 'ENTRA0026', 'ENTRA0027', 'ENTRA0028', 'ENTRA0029', 'ENTRA0030', 'ENTRA0031', 'ENTRA0032', 'ENTRA0033', 'ENTRA0034', 'ENTRA0035', 'ENTRA0036', 'ENTRA0037', 'ENTRA0038', 'ENTRA0039', 'ENTRA0040', 'ENTRA0041', 'ENTRA0042', 'ENTRA0043', 'ENTRA0044', 'ENTRA0045', 'ENTRA0046', 'ENTRA0047', 'ENTRA0048', 'ENTRA0049', 'ENTRA0050', 'ENTRA0051', 'ENTRA0052', 'ENTRA0053', 'ENTRA0054', 'ENTRA0055', 'ENTRA0056', 'ENTRA0057', 'ENTRA0058', 'ENTRA0059', 'ENTRA0060', 'ENTRA0061', 'ENTRA0062', 'ENTRA0063', 'ENTRA0064', 'ENTRA0065', 'ENTRA0066', 'ENTRA0067', 'ENTRA0068', 'ENTRA0069', 'ENTRA0070', 'ENTRA0071', 'ENTRA0072', 'ENTRA0073', 'ENTRA0074', 'ENTRA0075', 'ENTRA0076', 'ENTRA0077', 'ENTRA0078', 'ENTRA0079', 'FOST0001', 'FOST0002', 'FOST0003', 'FOST0004', 'FOST0005', 'FOST0006', 'GRANTSn0001', 'GRANTSn0002', 'GRANTSn0003', 'GRANTSn0004', 'GRANTSn0005', 'GRANTSn0006', 'GRANTSn0007', 'GRANTSn0008', 'GRANTSn0009', 'GRANTSn0010', 'GRANTSn0011', 'GRANTSn0012', 'GRANTSn0013', 'GRANTSn0014', 'GRANTSn0015', 'GRANTSn0016', 'GRANTSn0017', 'GRANTSn0018', 'GRANTSn0019', 'GRANTSn0020', 'GRANTSn0021', 'GRANTSn0022', 'GRANTSn0023', 'GRANTSn0024', 'GRANTSs0001', 'GRANTSs0002', 'GRANTSs0003', 'GRANTSs0004', 'GRANTSs0005', 'GRANTSs0006', 'GRANTSs0007', 'GRANTSs0008', 'GRANTSs0009', 'GRANTSs0010', 'GRANTSs0011', 'GRANTSs0012', 'GRANTSs0013', 'GRANTSs0014', 'HARGn0001', 'HARGn0002', 'HARGn0003', 'HARGn0004', 'HARGn0005', 'HARGn0006', 'HARGn0007', 'HARGs0001', 'HARGs0002', 'HARGs0003', 'HARGs0004', 'HARGs0005', 'HARGs0006', 'HARGs0007', 'HARR0001', 'HARR0002', 'HARR0003', 'HARR0004', 'HARR0005', 'HARR0006', 'HARR0007', 'HARR0008', 'HARR0009', 'HARR0010', 'HARR0011', 'HARR0012', 'HARR0013', 'HARR0014', 'HARR0015', 'HARR0016', 'HARR0017', 'HARR0018', 'HARR0019', 'HARR0020', 'HARR0021', 'HARR0022', 'HARR0023', 'HARR0024', 'HARR0025', 'HARR0026', 'HARR0027', 'HARR0028', 'HARR0029', 'HARR0030', 'HARR0031', 'HARR0032', 'HARR0033', 'HARR0034', 'HARR0035', 'HARR0036', 'HARR0037', 'HARR0038', 'HARR0039', 'HARR0040', 'HARR0041', 'HARR0042', 'HARR0043', 'HARR0044', 'HARR0045', 'HARR0046', 'HARR0047', 'HARR0048', 'HARR0049', 'HARR0050', 'HARR0051', 'HARR0052', 'HARR0053', 'HARR0054', 'HARR0055', 'HARR0056', 'LHOUSE0001', 'LHOUSE0002', 'LHOUSE0003', 'LHOUSE0004', 'LHOUSE0005', 'LHOUSE0006', 'LHOUSE0007', 'LHOUSE0008', 'LHOUSE0009', 'LHOUSE0010', 'LHOUSE0011', 'LHOUSE0012', 'LHOUSE0013', 'LHOUSEn0001', 'LHOUSEn0002', 'LHOUSEn0003', 'LHOUSEn0004', 'LHOUSEn0005', 'LHOUSEn0006', 'LHOUSEn0007', 'LHOUSEn0008', 'LHOUSEn0009', 'LHOUSEn0010', 'LHOUSEn0011', 'LHOUSEn0012', 'LHOUSEn0013', 'LHOUSEn0014', 'LHOUSEn0015', 'LHOUSEn0016', 'LHOUSEn0017', 'LHOUSEn0018', 'LHOUSEn0019', 'LHOUSEn0020', 'LHOUSEn0021', 'LHOUSEn0022', 'LHOUSEn0023', 'LHOUSEn0024', 'LHOUSEn0025', 'LHOUSEn0026', 'LHOUSEn0027', 'LHOUSEn0028', 'LHOUSEn0029', 'LHOUSEn0030', 'LHOUSEn0031', 'LHOUSEn0032', 'LHOUSEn0033', 'LHOUSEn0034', 'LHOUSEn0035', 'LHOUSEn0036', 'LHOUSEn0037', 'LHOUSEn0038', 'LHOUSEn0039', 'LHOUSEn0040', 'LHOUSEn0041', 'LHOUSEn0042', 'LHOUSEn0043', 'LHOUSEn0044', 'LHOUSEn0045', 'LHOUSEn0046', 'LHOUSEn0047', 'LHOUSEn0048', 'LHOUSEn0049', 'LHOUSEn0050', 'LHOUSEn0051', 'LHOUSEn0052', 'LHOUSEn0053', 'LHOUSEn0054', 'LHOUSEn0055', 'LHOUSEn0056', 'LHOUSEn0057', 'LHOUSEn0058', 'LHOUSEn0059', 'LHOUSEn0060', 'LHOUSEn0061', 'LHOUSEn0062', 'LHOUSEn0063', 'LHOUSEn0064', 'LHOUSEn0065', 'LHOUSEn0066', 'LHOUSEn0067', 'LHOUSEn0068', 'LHOUSEn0069', 'LHOUSEn0070', 'LHOUSEn0071', 'LHOUSEn0072', 'LHOUSEn0073', 'LHOUSEn0074', 'LHOUSEn0075', 'LHOUSEn0076', 'LHOUSEn0077', 'LHOUSEn0078', 'LHOUSEn0079', 'LHOUSEn0080', 'LHOUSEn0081', 'LHOUSEn0082', 'LHOUSEn0083', 'LHOUSEn0084', 'LHOUSEn0085', 'LHOUSEn0086', 'LHOUSEn0087', 'LHOUSEn0088', 'LHOUSEn0089', 'LHOUSEn0090', 'LHOUSEn0091', 'LHOUSEn0092', 'LHOUSEn0093', 'LHOUSEs0001', 'LHOUSEs0002', 'LHOUSEs0003', 'LHOUSEs0004', 'LHOUSEs0005', 'LHOUSEs0006', 'LHOUSEs0007', 'LHOUSEs0008', 'LHOUSEs0009', 'LHOUSEs0010', 'LHOUSEs0011', 'LHOUSEs0012', 'LHOUSEs0013', 'LHOUSEs0014', 'LHOUSEs0015', 'LHOUSEs0016', 'LHOUSEs0017', 'LHOUSEs0018', 'LHOUSEs0019', 'LHOUSEs0020', 'LHOUSEs0021', 'LHOUSEs0022', 'LHOUSEs0023', 'LHOUSEs0024', 'LHOUSEs0025', 'LHOUSEs0026', 'LHOUSEs0027', 'LHOUSEs0028', 'LHOUSEs0029', 'LHOUSEs0030', 'LHOUSEs0031', 'LHOUSEs0032', 'MACM0001', 'MACM0002', 'MACM0003', 'MACM0004', 'MACM0005', 'MACM0006', 'MACM0007', 'MACM0008', 'MACM0009', 'MACM0010', 'MACM0011', 'MACM0012', 'MACM0013', 'MACM0014', 'MACM0015', 'MACM0016', 'MANNING0001', 'MANNING0002', 'MANNING0003', 'MANNING0004', 'MANNING0005', 'MANNING0006', 'MANNING0007', 'MANNING0008', 'MANNING0009', 'MANNING0010', 'MANNING0011', 'MANNING0012', 'MANNING0013', 'MANNING0014', 'MANNING0015', 'MANNING0016', 'MANNING0017', 'MANNING0018', 'MANNING0019', 'MANNING0020', 'MANNING0021', 'MANNING0022', 'MANNING0023', 'MANNING0024', 'MANNING0025', 'MANNING0026', 'MANNING0027', 'MANNING0028', 'MANNING0029', 'MANNING0030', 'MANNING0031', 'MANNING0032', 'MANNING0033', 'MANNING0034', 'MANNING0035', 'MANNING0036', 'MANNING0037', 'MANNING0038', 'MANNING0039', 'MANNING0040', 'MANNING0041', 'MANNING0042', 'MANNING0043', 'MANNING0044', 'MANNING0045', 'MANNING0046', 'MANNING0047', 'MANNING0048', 'MANNING0049', 'MANNING0050', 'MANNING0051', 'MANNING0052', 'MANNING0053', 'MANNING0054', 'MANNING0055', 'MANNING0056', 'MANNING0057', 'MANNING0058', 'MANNING0059', 'MANNING0060', 'MANNING0061', 'MANNING0062', 'MANNING0063', 'MANNING0064', 'MANNING0065', 'MANNING0066', 'MANNING0067', 'MANNING0068', 'MANNING0069', 'MANNING0070', 'MANNING0071', 'MANNING0072', 'MANNING0073', 'MANNING0074', 'MANNING0075', 'MANNING0076', 'MANNING0077', 'MANNING0078', 'MANNING0079', 'MANNING0080', 'MANNING0081', 'MANNING0082', 'MANNING0083', 'MANNING0084', 'MANNING0085', 'MANNING0086', 'MANNING0087', 'MANNING0088', 'MANNING0089', 'MANNING0090', 'MANNING0091', 'MANNING0092', 'MANNING0093', 'MANNING0094', 'MANNING0095', 'MANNING0096', 'MANNING0097', 'MANNING0098', 'MANNING0099', 'MANNING0100', 'MANNING0101', 'MANNING0102', 'MANNING0103', 'MANNING0104', 'MANNING0105', 'MANNING0106', 'MANNING0107', 'MANNING0108', 'MANNING0109', 'MANNING0110', 'MANNING0111', 'MANNING0112', 'MANNING0113', 'MANNING0114', 'MANNING0115', 'MANNING0116', 'MANNING0117', 'MANNING0118', 'MANNING0119', 'MANNING0120', 'MANNING0121', 'MANNING0122', 'MANNING0123', 'MANNING0124', 'MANNING0125', 'MANNING0126', 'MANNING0127', 'MONA0001', 'MONA0002', 'MONA0003', 'MONA0004', 'MONA0005', 'MONA0006', 'MONA0007', 'MONA0008', 'MONA0009', 'MONA0010', 'MONA0011', 'MONA0012', 'MONA0013', 'MONA0014', 'MONA0015', 'MONA0016', 'MONA0017', 'MONA0018', 'MONA0019', 'MONA0020', 'MONA0021', 'NAMB0001', 'NAMB0002', 'NAMB0003', 'NAMB0004', 'NAMB0005', 'NAMB0006', 'NAMB0007', 'NAMB0008', 'NAMB0009', 'NAMB0010', 'NAMB0011', 'NAMB0012', 'NAMB0013', 'NAMB0014', 'NAMB0015', 'NAMB0016', 'NAMB0017', 'NAMB0018', 'NAMB0019', 'NAMB0020', 'NAMB0021', 'NAMB0022', 'NAMB0023', 'NAMB0024', 'NAMB0025', 'NAMB0026', 'NAMB0027', 'NAMB0028', 'NAMB0029', 'NAMB0030', 'NAMB0031', 'NAMB0032', 'NAMB0033', 'NAMB0034', 'NAMB0035', 'NAMB0036', 'NAMB0037', 'NAMB0038', 'NAMB0039', 'NAMB0040', 'NAMB0041', 'NAMB0042', 'NAMB0043', 'NAMB0044', 'NAMB0045', 'NAMB0046', 'NAMB0047', 'NAMB0048', 'NAMB0049', 'NAMB0050', 'NAMB0051', 'NAMB0052', 'NAMB0053', 'NAMB0054', 'NAMB0055', 'NAMB0056', 'NAMB0057', 'NAMB0058', 'NAMB0059', 'NAMB0060', 'NAMB0061', 'NAMB0062', 'NAMB0063', 'NAMB0064', 'NAMB0065', 'NAMB0066', 'NAMB0067', 'NAMB0068', 'NAMB0069', 'NAMB0070', 'NAMB0071', 'NAMB0072', 'NAMB0073', 'NARRA0001', 'NARRA0002', 'NARRA0003', 'NARRA0004', 'NARRA0005', 'NARRA0006', 'NARRA0007', 'NARRA0008', 'NARRA0009', 'NARRA0010', 'NARRA0011', 'NARRA0012', 'NARRA0013', 'NARRA0014', 'NARRA0015', 'NARRA0016', 'NARRA0017', 'NARRA0018', 'NARRA0019', 'NARRA0020', 'NARRA0021', 'NARRA0022', 'NARRA0023', 'NARRA0024', 'NARRA0025', 'NARRA0026', 'NARRA0027', 'NARRA0028', 'NARRA0029', 'NARRA0030', 'NARRA0031', 'NARRA0032', 'NARRA0033', 'NARRA0034', 'NARRA0035', 'NARRA0036', 'NINEMn0001', 'NINEMn0002', 'NINEMn0003', 'NINEMn0004', 'NINEMn0005', 'NINEMn0006', 'NINEMn0007', 'NINEMn0008', 'NINEMn0009', 'NINEMn0010', 'NINEMn0011', 'NINEMn0012', 'NINEMn0013', 'NINEMn0014', 'NINEMn0015', 'NINEMn0016', 'NINEMn0017', 'NINEMn0018', 'NINEMn0019', 'NINEMn0020', 'NINEMn0021', 'NINEMn0022', 'NINEMn0023', 'NINEMn0024', 'NINEMn0025', 'NINEMn0026', 'NINEMn0027', 'NINEMn0028', 'NINEMn0029', 'NINEMn0030', 'NINEMn0031', 'NINEMn0032', 'NINEMn0033', 'NINEMn0034', 'NINEMn0035', 'NINEMn0036', 'NINEMn0037', 'NINEMn0038', 'NINEMn0039', 'NINEMn0040', 'NINEMn0041', 'NINEMn0042', 'NINEMn0043', 'NINEMn0044', 'NINEMn0045', 'NINEMn0046', 'NINEMn0047', 'NINEMn0048', 'NINEMn0049', 'NINEMn0050', 'NINEMn0051', 'NINEMn0052', 'NINEMn0053', 'NINEMn0054', 'NINEMs0001', 'NINEMs0002', 'NINEMs0003', 'NINEMs0004', 'NINEMs0005', 'NINEMs0006', 'NINEMs0007', 'NINEMs0008', 'NINEMs0009', 'NINEMs0010', 'NINEMs0011', 'NINEMs0012', 'NINEMs0013', 'NINEMs0014', 'NINEMs0015', 'NINEMs0016', 'NINEMs0017', 'NINEMs0018', 'NINEMs0019', 'NINEMs0020', 'NINEMs0021', 'NINEMs0022', 'NINEMs0023', 'NINEMs0024', 'NINEMs0025', 'NINEMs0026', 'NINEMs0027', 'NINEMs0028', 'NINEMs0029', 'NINEMs0030', 'NINEMs0031', 'NINEMs0032', 'NINEMs0033', 'NINEMs0034', 'NINEMs0035', 'NINEMs0036', 'NINEMs0037', 'NINEMs0038', 'NINEMs0039', 'NINEMs0040', 'NINEMs0041', 'NINEMs0042', 'NINEMs0043', 'NINEMs0044', 'NINEMs0045', 'NINEMs0046', 'NINEMs0047', 'NINEMs0048', 'NINEMs0049', 'NINEMs0050', 'NINEMs0051', 'NINEMs0052', 'NINEMs0053', 'NINEMs0054', 'NINEMs0055', 'NINEMs0056', 'NINEMs0057', 'NINEMs0058', 'NINEMs0059', 'NINEMs0060', 'NSHORE_n0001', 'NSHORE_n0002', 'NSHORE_n0003', 'NSHORE_n0004', 'NSHORE_n0005', 'NSHORE_n0006', 'NSHORE_n0007', 'NSHORE_n0008', 'NSHORE_n0009', 'NSHORE_n0010', 'NSHORE_n0011', 'NSHORE_n0012', 'NSHORE_n0013', 'NSHORE_n0014', 'NSHORE_n0015', 'NSHORE_n0016', 'NSHORE_n0017', 'NSHORE_n0018', 'NSHORE_n0019', 'NSHORE_n0020', 'NSHORE_n0021', 'NSHORE_n0022', 'NSHORE_n0023', 'NSHORE_n0024', 'NSHORE_n0025', 'NSHORE_n0026', 'NSHORE_n0027', 'NSHORE_n0028', 'NSHORE_n0029', 'NSHORE_n0030', 'NSHORE_n0031', 'NSHORE_n0032', 'NSHORE_n0033', 'NSHORE_n0034', 'NSHORE_n0035', 'NSHORE_n0036', 'NSHORE_n0037', 'NSHORE_n0038', 'NSHORE_n0039', 'NSHORE_n0040', 'NSHORE_n0041', 'NSHORE_n0042', 'NSHORE_n0043', 'NSHORE_n0044', 'NSHORE_n0045', 'NSHORE_n0046', 'NSHORE_n0047', 'NSHORE_n0048', 'NSHORE_n0049', 'NSHORE_n0050', 'NSHORE_n0051', 'NSHORE_n0052', 'NSHORE_n0053', 'NSHORE_n0054', 'NSHORE_n0055', 'NSHORE_n0056', 'NSHORE_n0057', 'NSHORE_n0058', 'NSHORE_n0059', 'NSHORE_n0060', 'NSHORE_n0061', 'NSHORE_n0062', 'NSHORE_n0063', 'NSHORE_n0064', 'NSHORE_n0065', 'NSHORE_n0066', 'NSHORE_n0067', 'NSHORE_n0068', 'NSHORE_n0069', 'NSHORE_n0070', 'NSHORE_n0071', 'NSHORE_n0072', 'NSHORE_n0073', 'NSHORE_n0074', 'NSHORE_n0075', 'NSHORE_n0076', 'NSHORE_n0077', 'NSHORE_n0078', 'NSHORE_n0079', 'NSHORE_n0080', 'NSHORE_n0081', 'NSHORE_n0082', 'NSHORE_s0001', 'NSHORE_s0002', 'NSHORE_s0003', 'NSHORE_s0004', 'NSHORE_s0005', 'NSHORE_s0006', 'NSHORE_s0007', 'NSHORE_s0008', 'NSHORE_s0009', 'NSHORE_s0010', 'NSHORE_s0011', 'NSHORE_s0012', 'NSHORE_s0013', 'NSHORE_s0014', 'NSHORE_s0015', 'NSHORE_s0016', 'NSHORE_s0017', 'NSHORE_s0018', 'NSHORE_s0019', 'NSHORE_s0020', 'NSHORE_s0021', 'NSHORE_s0022', 'NSHORE_s0023', 'NSHORE_s0024', 'NSHORE_s0025', 'NSHORE_s0026', 'NSHORE_s0027', 'NSHORE_s0028', 'NSHORE_s0029', 'NSHORE_s0030', 'NSHORE_s0031', 'NSHORE_s0032', 'NSHORE_s0033', 'NSHORE_s0034', 'NSHORE_s0035', 'NSHORE_s0036', 'NSHORE_s0037', 'NSHORE_s0038', 'NSHORE_s0039', 'NSHORE_s0040', 'NSHORE_s0041', 'NSHORE_s0042', 'NSHORE_s0043', 'NSHORE_s0044', 'OLDBAR0001', 'OLDBAR0002', 'OLDBAR0003', 'OLDBAR0004', 'OLDBAR0005', 'OLDBAR0006', 'OLDBAR0007', 'OLDBAR0008', 'OLDBAR0009', 'OLDBAR0010', 'OLDBAR0011', 'OLDBAR0012', 'OLDBAR0013', 'OLDBAR0014', 'OLDBAR0015', 'OLDBAR0016', 'OLDBAR0017', 'OLDBAR0018', 'OLDBAR0019', 'OLDBAR0020', 'OLDBAR0021', 'OLDBAR0022', 'OLDBAR0023', 'OLDBAR0024', 'OLDBAR0025', 'OLDBAR0026', 'OLDBAR0027', 'OLDBAR0028', 'OLDBAR0029', 'OLDBAR0030', 'OLDBAR0031', 'OLDBAR0032', 'OLDBAR0033', 'OLDBAR0034', 'OLDBAR0035', 'OLDBAR0036', 'ONEMILE0001', 'ONEMILE0002', 'ONEMILE0003', 'ONEMILE0004', 'ONEMILE0005', 'ONEMILE0006', 'ONEMILE0007', 'ONEMILE0008', 'ONEMILE0009', 'ONEMILE0010', 'ONEMILE0011', 'ONEMILE0012', 'ONEMILE0013', 'PEARLn0001', 'PEARLn0002', 'PEARLn0003', 'PEARLn0004', 'PEARLn0005', 'PEARLs0001', 'PEARLs0002', 'PEARLs0003', 'PEARLs0004', 'PEARLs0005', 'SCOT0001', 'SCOT0002', 'SCOT0003', 'SCOT0004', 'SCOT0005', 'SCOT0006', 'SCOT0007', 'SCOT0008', 'SCOT0009', 'SCOT0010', 'SCOT0011', 'SCOT0012', 'STOCNn0001', 'STOCNn0002', 'STOCNn0003', 'STOCNn0004', 'STOCNn0005', 'STOCNn0006', 'STOCNn0007', 'STOCNn0008', 'STOCNn0009', 'STOCNn0010', 'STOCNn0011', 'STOCNn0012', 'STOCNn0013', 'STOCNn0014', 'STOCNn0015', 'STOCNn0016', 'STOCNn0017', 'STOCNn0018', 'STOCNn0019', 'STOCNn0020', 'STOCNn0021', 'STOCNn0022', 'STOCNn0023', 'STOCNn0024', 'STOCNn0025', 'STOCNn0026', 'STOCNn0027', 'STOCNn0028', 'STOCNn0029', 'STOCNn0030', 'STOCNn0031', 'STOCNn0032', 'STOCNn0033', 'STOCNn0034', 'STOCNn0035', 'STOCNn0036', 'STOCNn0037', 'STOCNn0038', 'STOCNn0039', 'STOCNn0040', 'STOCNn0041', 'STOCNn0042', 'STOCNn0043', 'STOCNn0044', 'STOCNn0045', 'STOCNn0046', 'STOCNn0047', 'STOCNn0048', 'STOCNn0049', 'STOCNn0050', 'STOCNn0051', 'STOCNn0052', 'STOCNn0053', 'STOCNn0054', 'STOCNn0055', 'STOCNn0056', 'STOCNn0057', 'STOCNn0058', 'STOCNn0059', 'STOCNn0060', 'STOCNn0061', 'STOCNn0062', 'STOCNn0063', 'STOCNn0064', 'STOCNn0065', 'STOCNs0001', 'STOCNs0002', 'STOCNs0003', 'STOCNs0004', 'STOCNs0005', 'STOCNs0006', 'STOCNs0007', 'STOCNs0008', 'STOCNs0009', 'STOCNs0010', 'STOCNs0011', 'STOCNs0012', 'STOCNs0013', 'STOCNs0014', 'STOCNs0015', 'STOCNs0016', 'STOCNs0017', 'STOCNs0018', 'STOCNs0019', 'STOCNs0020', 'STOCNs0021', 'STOCNs0022', 'STOCNs0023', 'STOCNs0024', 'STOCNs0025', 'STOCNs0026', 'STOCNs0027', 'STOCNs0028', 'STOCNs0029', 'STOCNs0030', 'STOCNs0031', 'STOCNs0032', 'STOCNs0033', 'STOCNs0034', 'STOCNs0035', 'STOCNs0036', 'STOCNs0037', 'STOCNs0038', 'STOCNs0039', 'STOCNs0040', 'STOCNs0041', 'STOCNs0042', 'STOCNs0043', 'STOCNs0044', 'STOCNs0045', 'STOCNs0046', 'STOCNs0047', 'STOCNs0048', 'STOCNs0049', 'STOCNs0050', 'STOCNs0051', 'STOCNs0052', 'STOCNs0053', 'STOCNs0054', 'STOCNs0055', 'STOCNs0056', 'STOCNs0057', 'STOCNs0058', 'STOCNs0059', 'STOCNs0060', 'STOCNs0061', 'STOCNs0062', 'STOCNs0063', 'STOCNs0064', 'STOCNs0065', 'STOCNs0066', 'STOCNs0067', 'STOCNs0068', 'STOCNs0069', 'STOCNs0070', 'STOCNs0071', 'STOCNs0072', 'STOCNs0073', 'STOCNs0074', 'STOCNs0075', 'STOCNs0076', 'STOCNs0077', 'STOCNs0078', 'STOCNs0079', 'STOCNs0080', 'STOCNs0081', 'STOCNs0082', 'STOCNs0083', 'STOCNs0084', 'STOCNs0085', 'STOCNs0086', 'STOCNs0087', 'STOCNs0088', 'STOCNs0089', 'STOCNs0090', 'STOCNs0091', 'STOCNs0092', 'STOCNs0093', 'STOCNs0094', 'STOCNs0095', 'STOCNs0096', 'STOCNs0097', 'STOCNs0098', 'STOCNs0099', 'STOCNs0100', 'STOCNs0101', 'STOCNs0102', 'STOCNs0103', 'STOCNs0104', 'STOCNs0105', 'STOCNs0106', 'STOCNs0107', 'STOCNs0108', 'STOCNs0109', 'STOCNs0110', 'STOCNs0111', 'STOCNs0112', 'STOCNs0113', 'STOCNs0114', 'STOCNs0115', 'STOCNs0116', 'STOCNs0117', 'STOCNs0118', 'STOCNs0119', 'STOCNs0120', 'STOCNs0121', 'STOCNs0122', 'STOCNs0123', 'STOCNs0124', 'STOCNs0125', 'STOCNs0126', 'STOCNs0127', 'STOCNs0128', 'STOCNs0129', 'STOCNs0130', 'STOCNs0131', 'STOCNs0132', 'STOCNs0133', 'STOCNs0134', 'STOCNs0135', 'STOCNs0136', 'STOCNs0137', 'STOCNs0138', 'STOCNs0139', 'STOCNs0140', 'STOCNs0141', 'STOCNs0142', 'STOCNs0143', 'STOCNs0144', 'STOCNs0145', 'STOCNs0146', 'STOCNs0147', 'STOCNs0148', 'STOCNs0149', 'STOCNs0150', 'STOCNs0151', 'STOCNs0152', 'STOCNs0153', 'STOCNs0154', 'STOCNs0155', 'STOCNs0156', 'STOCNs0157', 'STOCNs0158', 'STOCNs0159', 'STOCNs0160', 'STOCNs0161', 'STOCNs0162', 'STOCNs0163', 'STOCNs0164', 'STOCNs0165', 'STOCNs0166', 'STOCNs0167', 'STOCNs0168', 'STOCNs0169', 'STOCNs0170', 'STOCNs0171', 'STOCNs0172', 'STOCNs0173', 'STOCNs0174', 'STOCNs0175', 'STOCNs0176', 'STOCNs0177', 'STOCNs0178', 'STOCNs0179', 'STOCNs0180', 'STOCNs0181', 'STOCNs0182', 'STOCNs0183', 'STOCNs0184', 'STOCNs0185', 'STOCNs0186', 'STOCNs0187', 'STOCNs0188', 'STOCNs0189', 'STOCNs0190', 'STOCNs0191', 'STOCNs0192', 'STOCNs0193', 'STOCNs0194', 'STOCNs0195', 'STOCNs0196', 'STOCNs0197', 'STOCNs0198', 'STOCNs0199', 'STOCNs0200', 'STOCNs0201', 'STOCNs0202', 'STOCNs0203', 'STOCNs0204', 'STOCNs0205', 'STOCNs0206', 'STOCNs0207', 'STOCNs0208', 'STOCNs0209', 'STOCS0001', 'STOCS0002', 'STOCS0003', 'STOCS0004', 'STOCS0005', 'STOCS0006', 'STOCS0007', 'STOCS0008', 'STOCS0009', 'STOCS0010', 'STOCS0011', 'STOCS0012', 'STOCS0013', 'STOCS0014', 'STOCS0015', 'STOCS0016', 'STOCS0017', 'STOCS0018', 'STOCS0019', 'STOCS0020', 'STOCS0021', 'STOCS0022', 'STOCS0023', 'STOCS0024', 'STOCS0025', 'STOCS0026', 'STOCS0027', 'STOCS0028', 'STOCS0029', 'STOCS0030', 'STOCS0031', 'STOCS0032', 'STOCS0033', 'STOCS0034', 'STOCS0035', 'STOCS0036', 'STOCS0037', 'STOCS0038', 'STOCS0039', 'STOCS0040', 'STOCS0041', 'STOCS0042', 'STOCS0043', 'STOCS0044', 'STOCS0045', 'STOCS0046', 'STUART0001', 'STUART0002', 'STUART0003', 'STUART0004', 'STUART0005', 'STUART0006', 'STUART0007', 'STUART0008', 'STUART0009', 'STUART0010', 'STUART0011', 'STUART0012', 'STUART0013', 'STUART0014', 'STUART0015', 'STUART0016', 'STUART0017', 'STUART0018', 'STUART0019', 'STUART0020', 'STUART0021', 'STUART0022', 'STUART0023', 'STUART0024', 'STUART0025', 'STUART0026', 'STUART0027', 'STUART0028', 'STUART0029', 'STUART0030', 'STUART0031', 'STUART0032', 'STUART0033', 'STUART0034', 'STUART0035', 'STUART0036', 'STUART0037', 'STUART0038', 'STUART0039', 'STUART0040', 'STUART0041', 'STUART0042', 'STUART0043', 'STUART0044', 'STUART0045', 'STUART0046', 'STUART0047', 'STUART0048', 'STUART0049', 'STUART0050', 'STUART0051', 'STUART0052', 'STUART0053', 'STUART0054', 'STUART0055', 'STUART0056', 'STUART0057', 'STUART0058', 'STUART0059', 'STUART0060', 'STUART0061', 'STUART0062', 'STUART0063', 'STUART0064', 'STUART0065', 'STUART0066', 'STUART0067', 'STUART0068', 'STUART0069', 'STUART0070', 'STUART0071', 'STUART0072', 'STUART0073', 'STUART0074', 'STUART0075', 'STUART0076', 'STUART0077', 'STUART0078', 'STUART0079', 'STUART0080', 'STUART0081', 'STUART0082', 'STUART0083', 'STUART0084', 'STUART0085', 'STUART0086', 'STUART0087', 'STUART0088', 'STUART0089', 'SWRO0001', 'SWRO0002', 'SWRO0003', 'SWRO0004', 'SWRO0005', 'SWRO0006', 'SWRO0007', 'SWRO0008', 'SWRO0009', 'SWRO0010', 'SWRO0011', 'SWRO0012', 'SWRO0013', 'SWRO0014', 'SWRO0015', 'SWRO0016', 'SWRO0017', 'SWRO0018', 'SWRO0019', 'SWRO0020', 'SWRO0021', 'SWRO0022', 'SWRO0023', 'SWRO0024', 'SWRO0025', 'SWRO0026', 'TREACH0001', 'TREACH0002', 'TREACH0003', 'TREACH0004', 'TREACH0005', 'TREACH0006', 'TREACH0007', 'TREACH0008', 'TREACH0009', 'TREACH0010', 'TREACH0011', 'TREACH0012', 'TREACH0013', 'TREACH0014', 'TREACH0015', 'TREACH0016', 'WAMBE0001', 'WAMBE0002', 'WAMBE0003', 'WAMBE0004', 'WAMBE0005', 'WAMBE0006', 'WAMBE0007', 'WAMBE0008', 'WAMBE0009', 'WAMBE0010', 'WAMBE0011', 'WAMBE0012', 'WAMBE0013', 'WAMBE0014', 'WAMBE0015', 'WAMBE0016', 'WAMBE0017', 'WAMBE0018', 'WAMBE0019', 'WAMBE0020', 'WAMBE0021', 'WAMBE0022', 'WAMBE0023', 'WAMBE0024', 'WAMBE0025', 'WAMBE0026', 'WAMBE0027'), value='NARRA0001'),)))), HTML(value=''))), HBox(children=(FigureWidget({\n",
+ "VBox(children=(VBox(children=(HTML(value='Filter by observed and predicted impacts:'), HBox(children=(VBox(children=(HTML(value='Observed Impacts'), SelectMultiple(index=(0, 1), options=('swash', 'collision'), value=('swash', 'collision')))), VBox(children=(HTML(value='Forecasted: foreshore_slope_sto06'), SelectMultiple(index=(0, 1, 2), options=('swash', 'collision', 'overwash'), value=('swash', 'collision', 'overwash')))), VBox(children=(HTML(value='Forecasted: mean_slope_sto06'), SelectMultiple(index=(0, 1, 2), options=('swash', 'overwash', 'collision'), value=('swash', 'overwash', 'collision')))))))), HBox(children=(VBox(children=(HTML(value='Filter by site_id:'), HBox(children=(Dropdown(description='site_id: ', index=943, options=('AVOCAn0001', 'AVOCAn0002', 'AVOCAn0003', 'AVOCAn0004', 'AVOCAn0005', 'AVOCAn0006', 'AVOCAn0007', 'AVOCAn0008', 'AVOCAn0009', 'AVOCAs0001', 'AVOCAs0002', 'AVOCAs0003', 'AVOCAs0004', 'AVOCAs0005', 'AVOCAs0006', 'AVOCAs0007', 'AVOCAs0008', 'BILG0001', 'BILG0002', 'BILG0003', 'BILG0004', 'BILG0005', 'BLUEYS0001', 'BLUEYS0002', 'BLUEYS0003', 'BLUEYS0004', 'BLUEYS0005', 'BLUEYS0006', 'BOAT0001', 'BOAT0002', 'BOAT0003', 'BOAT0004', 'BOAT0005', 'BOOM0001', 'BOOM0002', 'BOOM0003', 'BOOM0004', 'BOOM0005', 'BOOM0006', 'BOOM0007', 'BOOM0008', 'BOOM0009', 'BOOM0010', 'BOOM0011', 'BOOM0012', 'BOOM0013', 'BOOM0014', 'CATHIE0001', 'CATHIE0002', 'CATHIE0003', 'CATHIE0004', 'CATHIE0005', 'CATHIE0006', 'CATHIE0007', 'CATHIE0008', 'CATHIE0009', 'CATHIE0010', 'CATHIE0011', 'CATHIE0012', 'CATHIE0013', 'CATHIE0014', 'CATHIE0015', 'CATHIE0016', 'CATHIE0017', 'CATHIE0018', 'CATHIE0019', 'CATHIE0020', 'CATHIE0021', 'CATHIE0022', 'CATHIE0023', 'CATHIE0024', 'CATHIE0025', 'CATHIE0026', 'CATHIE0027', 'CATHIE0028', 'CATHIE0029', 'CRESn0001', 'CRESn0002', 'CRESn0003', 'CRESn0004', 'CRESn0005', 'CRESn0006', 'CRESn0007', 'CRESn0008', 'CRESn0009', 'CRESn0010', 'CRESn0011', 'CRESn0012', 'CRESn0013', 'CRESn0014', 'CRESn0015', 'CRESn0016', 'CRESn0017', 'CRESn0018', 'CRESn0019', 'CRESn0020', 'CRESn0021', 'CRESn0022', 'CRESn0023', 'CRESn0024', 'CRESn0025', 'CRESn0026', 'CRESn0027', 'CRESn0028', 'CRESn0029', 'CRESn0030', 'CRESn0031', 'CRESn0032', 'CRESn0033', 'CRESn0034', 'CRESn0035', 'CRESn0036', 'CRESn0037', 'CRESn0038', 'CRESn0039', 'CRESn0040', 'CRESn0041', 'CRESn0042', 'CRESn0043', 'CRESn0044', 'CRESn0045', 'CRESn0046', 'CRESn0047', 'CRESn0048', 'CRESn0049', 'CRESn0050', 'CRESn0051', 'CRESn0052', 'CRESn0053', 'CRESn0054', 'CRESn0055', 'CRESn0056', 'CRESn0057', 'CRESn0058', 'CRESn0059', 'CRESn0060', 'CRESn0061', 'CRESn0062', 'CRESn0063', 'CRESn0064', 'CRESn0065', 'CRESn0066', 'CRESn0067', 'CRESn0068', 'CRESn0069', 'CRESn0070', 'CRESn0071', 'CRESn0072', 'CRESn0073', 'CRESn0074', 'CRESn0075', 'CRESn0076', 'CRESn0077', 'CRESn0078', 'CRESn0079', 'CRESn0080', 'CRESn0081', 'CRESn0082', 'CRESn0083', 'CRESn0084', 'CRESn0085', 'CRESn0086', 'CRESn0087', 'CRESn0088', 'CRESn0089', 'CRESn0090', 'CRESn0091', 'CRESn0092', 'CRESn0093', 'CRESn0094', 'CRESn0095', 'CRESn0096', 'CRESn0097', 'CRESn0098', 'CRESn0099', 'CRESn0100', 'CRESn0101', 'CRESn0102', 'CRESn0103', 'CRESn0104', 'CRESn0105', 'CRESn0106', 'CRESn0107', 'CRESn0108', 'CRESn0109', 'CRESn0110', 'CRESn0111', 'CRESn0112', 'CRESn0113', 'CRESn0114', 'CRESn0115', 'CRESn0116', 'CRESn0117', 'CRESn0118', 'CRESn0119', 'CRESn0120', 'CRESn0121', 'CRESn0122', 'CRESn0123', 'CRESn0124', 'CRESn0125', 'CRESs0001', 'CRESs0002', 'CRESs0003', 'CRESs0004', 'CRESs0005', 'CRESs0006', 'CRESs0007', 'CRESs0008', 'CRESs0009', 'CRESs0010', 'CRESs0011', 'CRESs0012', 'CRESs0013', 'CRESs0014', 'DEEWHYn0001', 'DEEWHYn0002', 'DEEWHYn0003', 'DEEWHYn0004', 'DEEWHYn0005', 'DEEWHYn0006', 'DEEWHYn0007', 'DEEWHYn0008', 'DEEWHYn0009', 'DEEWHYn0010', 'DEEWHYn0011', 'DEEWHYn0012', 'DEEWHYs0001', 'DEEWHYs0002', 'DEEWHYs0003', 'DEEWHYs0004', 'DEEWHYs0005', 'DEEWHYs0006', 'DEEWHYs0007', 'DEEWHYs0008', 'DIAMONDn0001', 'DIAMONDn0002', 'DIAMONDn0003', 'DIAMONDn0004', 'DIAMONDn0005', 'DIAMONDn0006', 'DIAMONDn0007', 'DIAMONDn0008', 'DIAMONDn0009', 'DIAMONDn0010', 'DIAMONDn0011', 'DIAMONDn0012', 'DIAMONDn0013', 'DIAMONDn0014', 'DIAMONDn0015', 'DIAMONDn0016', 'DIAMONDn0017', 'DIAMONDn0018', 'DIAMONDn0019', 'DIAMONDn0020', 'DIAMONDn0021', 'DIAMONDn0022', 'DIAMONDn0023', 'DIAMONDn0024', 'DIAMONDn0025', 'DIAMONDn0026', 'DIAMONDn0027', 'DIAMONDn0028', 'DIAMONDn0029', 'DIAMONDn0030', 'DIAMONDn0031', 'DIAMONDn0032', 'DIAMONDn0033', 'DIAMONDn0034', 'DIAMONDn0035', 'DIAMONDn0036', 'DIAMONDn0037', 'DIAMONDn0038', 'DIAMONDn0039', 'DIAMONDn0040', 'DIAMONDn0041', 'DIAMONDs0001', 'DIAMONDs0002', 'DIAMONDs0003', 'DIAMONDs0004', 'DIAMONDs0005', 'DIAMONDs0006', 'DIAMONDs0007', 'DUNBn0001', 'DUNBn0002', 'DUNBn0003', 'DUNBn0004', 'DUNBn0005', 'DUNBn0006', 'DUNBn0007', 'DUNBn0008', 'DUNBn0009', 'DUNBn0010', 'DUNBn0011', 'DUNBn0012', 'DUNBn0013', 'DUNBn0014', 'DUNBn0015', 'DUNBn0016', 'DUNBn0017', 'DUNBn0018', 'DUNBn0019', 'DUNBn0020', 'DUNBn0021', 'DUNBn0022', 'DUNBn0023', 'DUNBn0024', 'DUNBn0025', 'DUNBn0026', 'DUNBn0027', 'DUNBn0028', 'DUNBn0029', 'DUNBn0030', 'DUNBn0031', 'DUNBn0032', 'DUNBn0033', 'DUNBn0034', 'DUNBn0035', 'DUNBn0036', 'DUNBn0037', 'DUNBn0038', 'DUNBn0039', 'DUNBn0040', 'DUNBn0041', 'DUNBn0042', 'DUNBn0043', 'DUNBn0044', 'DUNBn0045', 'DUNBn0046', 'DUNBn0047', 'DUNBn0048', 'DUNBn0049', 'DUNBn0050', 'DUNBn0051', 'DUNBn0052', 'DUNBn0053', 'DUNBn0054', 'DUNBn0055', 'DUNBn0056', 'DUNBn0057', 'DUNBn0058', 'DUNBn0059', 'DUNBn0060', 'DUNBn0061', 'DUNBn0062', 'DUNBn0063', 'DUNBn0064', 'DUNBn0065', 'DUNBn0066', 'DUNBn0067', 'DUNBn0068', 'DUNBn0069', 'DUNBn0070', 'DUNBn0071', 'DUNBn0072', 'DUNBn0073', 'DUNBn0074', 'DUNBs0001', 'DUNBs0002', 'DUNBs0003', 'DUNBs0004', 'DUNBs0005', 'DUNBs0006', 'DUNBs0007', 'DUNBs0008', 'DUNBs0009', 'DUNBs0010', 'DUNBs0011', 'ELIZA0001', 'ELIZA0002', 'ELIZA0003', 'ELIZA0004', 'ELIZA0005', 'ELIZA0006', 'ELIZA0007', 'ENTRA0001', 'ENTRA0002', 'ENTRA0003', 'ENTRA0004', 'ENTRA0005', 'ENTRA0006', 'ENTRA0007', 'ENTRA0008', 'ENTRA0009', 'ENTRA0010', 'ENTRA0011', 'ENTRA0012', 'ENTRA0013', 'ENTRA0014', 'ENTRA0015', 'ENTRA0016', 'ENTRA0017', 'ENTRA0018', 'ENTRA0019', 'ENTRA0020', 'ENTRA0021', 'ENTRA0022', 'ENTRA0023', 'ENTRA0024', 'ENTRA0025', 'ENTRA0026', 'ENTRA0027', 'ENTRA0028', 'ENTRA0029', 'ENTRA0030', 'ENTRA0031', 'ENTRA0032', 'ENTRA0033', 'ENTRA0034', 'ENTRA0035', 'ENTRA0036', 'ENTRA0037', 'ENTRA0038', 'ENTRA0039', 'ENTRA0040', 'ENTRA0041', 'ENTRA0042', 'ENTRA0043', 'ENTRA0044', 'ENTRA0045', 'ENTRA0046', 'ENTRA0047', 'ENTRA0048', 'ENTRA0049', 'ENTRA0050', 'ENTRA0051', 'ENTRA0052', 'ENTRA0053', 'ENTRA0054', 'ENTRA0055', 'ENTRA0056', 'ENTRA0057', 'ENTRA0058', 'ENTRA0059', 'ENTRA0060', 'ENTRA0061', 'ENTRA0062', 'ENTRA0063', 'ENTRA0064', 'ENTRA0065', 'ENTRA0066', 'ENTRA0067', 'ENTRA0068', 'ENTRA0069', 'ENTRA0070', 'ENTRA0071', 'ENTRA0072', 'ENTRA0073', 'ENTRA0074', 'ENTRA0075', 'ENTRA0076', 'ENTRA0077', 'ENTRA0078', 'ENTRA0079', 'FOST0001', 'FOST0002', 'FOST0003', 'FOST0004', 'FOST0005', 'FOST0006', 'GRANTSn0001', 'GRANTSn0002', 'GRANTSn0003', 'GRANTSn0004', 'GRANTSn0005', 'GRANTSn0006', 'GRANTSn0007', 'GRANTSn0008', 'GRANTSn0009', 'GRANTSn0010', 'GRANTSn0011', 'GRANTSn0012', 'GRANTSn0013', 'GRANTSn0014', 'GRANTSn0015', 'GRANTSn0016', 'GRANTSn0017', 'GRANTSn0018', 'GRANTSn0019', 'GRANTSn0020', 'GRANTSn0021', 'GRANTSn0022', 'GRANTSn0023', 'GRANTSn0024', 'GRANTSs0001', 'GRANTSs0002', 'GRANTSs0003', 'GRANTSs0004', 'GRANTSs0005', 'GRANTSs0006', 'GRANTSs0007', 'GRANTSs0008', 'GRANTSs0009', 'GRANTSs0010', 'GRANTSs0011', 'GRANTSs0012', 'GRANTSs0013', 'GRANTSs0014', 'HARGn0001', 'HARGn0002', 'HARGn0003', 'HARGn0004', 'HARGn0005', 'HARGn0006', 'HARGn0007', 'HARGs0001', 'HARGs0002', 'HARGs0003', 'HARGs0004', 'HARGs0005', 'HARGs0006', 'HARGs0007', 'HARR0001', 'HARR0002', 'HARR0003', 'HARR0004', 'HARR0005', 'HARR0006', 'HARR0007', 'HARR0008', 'HARR0009', 'HARR0010', 'HARR0011', 'HARR0012', 'HARR0013', 'HARR0014', 'HARR0015', 'HARR0016', 'HARR0017', 'HARR0018', 'HARR0019', 'HARR0020', 'HARR0021', 'HARR0022', 'HARR0023', 'HARR0024', 'HARR0025', 'HARR0026', 'HARR0027', 'HARR0028', 'HARR0029', 'HARR0030', 'HARR0031', 'HARR0032', 'HARR0033', 'HARR0034', 'HARR0035', 'HARR0036', 'HARR0037', 'HARR0038', 'HARR0039', 'HARR0040', 'HARR0041', 'HARR0042', 'HARR0043', 'HARR0044', 'HARR0045', 'HARR0046', 'HARR0047', 'HARR0048', 'HARR0049', 'HARR0050', 'HARR0051', 'HARR0052', 'HARR0053', 'HARR0054', 'HARR0055', 'HARR0056', 'LHOUSE0001', 'LHOUSE0002', 'LHOUSE0003', 'LHOUSE0004', 'LHOUSE0005', 'LHOUSE0006', 'LHOUSE0007', 'LHOUSE0008', 'LHOUSE0009', 'LHOUSE0010', 'LHOUSE0011', 'LHOUSE0012', 'LHOUSE0013', 'LHOUSEn0001', 'LHOUSEn0002', 'LHOUSEn0003', 'LHOUSEn0004', 'LHOUSEn0005', 'LHOUSEn0006', 'LHOUSEn0007', 'LHOUSEn0008', 'LHOUSEn0009', 'LHOUSEn0010', 'LHOUSEn0011', 'LHOUSEn0012', 'LHOUSEn0013', 'LHOUSEn0014', 'LHOUSEn0015', 'LHOUSEn0016', 'LHOUSEn0017', 'LHOUSEn0018', 'LHOUSEn0019', 'LHOUSEn0020', 'LHOUSEn0021', 'LHOUSEn0022', 'LHOUSEn0023', 'LHOUSEn0024', 'LHOUSEn0025', 'LHOUSEn0026', 'LHOUSEn0027', 'LHOUSEn0028', 'LHOUSEn0029', 'LHOUSEn0030', 'LHOUSEn0031', 'LHOUSEn0032', 'LHOUSEn0033', 'LHOUSEn0034', 'LHOUSEn0035', 'LHOUSEn0036', 'LHOUSEn0037', 'LHOUSEn0038', 'LHOUSEn0039', 'LHOUSEn0040', 'LHOUSEn0041', 'LHOUSEn0042', 'LHOUSEn0043', 'LHOUSEn0044', 'LHOUSEn0045', 'LHOUSEn0046', 'LHOUSEn0047', 'LHOUSEn0048', 'LHOUSEn0049', 'LHOUSEn0050', 'LHOUSEn0051', 'LHOUSEn0052', 'LHOUSEn0053', 'LHOUSEn0054', 'LHOUSEn0055', 'LHOUSEn0056', 'LHOUSEn0057', 'LHOUSEn0058', 'LHOUSEn0059', 'LHOUSEn0060', 'LHOUSEn0061', 'LHOUSEn0062', 'LHOUSEn0063', 'LHOUSEn0064', 'LHOUSEn0065', 'LHOUSEn0066', 'LHOUSEn0067', 'LHOUSEn0068', 'LHOUSEn0069', 'LHOUSEn0070', 'LHOUSEn0071', 'LHOUSEn0072', 'LHOUSEn0073', 'LHOUSEn0074', 'LHOUSEn0075', 'LHOUSEn0076', 'LHOUSEn0077', 'LHOUSEn0078', 'LHOUSEn0079', 'LHOUSEn0080', 'LHOUSEn0081', 'LHOUSEn0082', 'LHOUSEn0083', 'LHOUSEn0084', 'LHOUSEn0085', 'LHOUSEn0086', 'LHOUSEn0087', 'LHOUSEn0088', 'LHOUSEn0089', 'LHOUSEn0090', 'LHOUSEn0091', 'LHOUSEn0092', 'LHOUSEn0093', 'LHOUSEs0001', 'LHOUSEs0002', 'LHOUSEs0003', 'LHOUSEs0004', 'LHOUSEs0005', 'LHOUSEs0006', 'LHOUSEs0007', 'LHOUSEs0008', 'LHOUSEs0009', 'LHOUSEs0010', 'LHOUSEs0011', 'LHOUSEs0012', 'LHOUSEs0013', 'LHOUSEs0014', 'LHOUSEs0015', 'LHOUSEs0016', 'LHOUSEs0017', 'LHOUSEs0018', 'LHOUSEs0019', 'LHOUSEs0020', 'LHOUSEs0021', 'LHOUSEs0022', 'LHOUSEs0023', 'LHOUSEs0024', 'LHOUSEs0025', 'LHOUSEs0026', 'LHOUSEs0027', 'LHOUSEs0028', 'LHOUSEs0029', 'LHOUSEs0030', 'LHOUSEs0031', 'LHOUSEs0032', 'MACM0001', 'MACM0002', 'MACM0003', 'MACM0004', 'MACM0005', 'MACM0006', 'MACM0007', 'MACM0008', 'MACM0009', 'MACM0010', 'MACM0011', 'MACM0012', 'MACM0013', 'MACM0014', 'MACM0015', 'MACM0016', 'MANNING0001', 'MANNING0002', 'MANNING0003', 'MANNING0004', 'MANNING0005', 'MANNING0006', 'MANNING0007', 'MANNING0008', 'MANNING0009', 'MANNING0010', 'MANNING0011', 'MANNING0012', 'MANNING0013', 'MANNING0014', 'MANNING0015', 'MANNING0016', 'MANNING0017', 'MANNING0018', 'MANNING0019', 'MANNING0020', 'MANNING0021', 'MANNING0022', 'MANNING0023', 'MANNING0024', 'MANNING0025', 'MANNING0026', 'MANNING0027', 'MANNING0028', 'MANNING0029', 'MANNING0030', 'MANNING0031', 'MANNING0032', 'MANNING0033', 'MANNING0034', 'MANNING0035', 'MANNING0036', 'MANNING0037', 'MANNING0038', 'MANNING0039', 'MANNING0040', 'MANNING0041', 'MANNING0042', 'MANNING0043', 'MANNING0044', 'MANNING0045', 'MANNING0046', 'MANNING0047', 'MANNING0048', 'MANNING0049', 'MANNING0050', 'MANNING0051', 'MANNING0052', 'MANNING0053', 'MANNING0054', 'MANNING0055', 'MANNING0056', 'MANNING0057', 'MANNING0058', 'MANNING0059', 'MANNING0060', 'MANNING0061', 'MANNING0062', 'MANNING0063', 'MANNING0064', 'MANNING0065', 'MANNING0066', 'MANNING0067', 'MANNING0068', 'MANNING0069', 'MANNING0070', 'MANNING0071', 'MANNING0072', 'MANNING0073', 'MANNING0074', 'MANNING0075', 'MANNING0076', 'MANNING0077', 'MANNING0078', 'MANNING0079', 'MANNING0080', 'MANNING0081', 'MANNING0082', 'MANNING0083', 'MANNING0084', 'MANNING0085', 'MANNING0086', 'MANNING0087', 'MANNING0088', 'MANNING0089', 'MANNING0090', 'MANNING0091', 'MANNING0092', 'MANNING0093', 'MANNING0094', 'MANNING0095', 'MANNING0096', 'MANNING0097', 'MANNING0098', 'MANNING0099', 'MANNING0100', 'MANNING0101', 'MANNING0102', 'MANNING0103', 'MANNING0104', 'MANNING0105', 'MANNING0106', 'MANNING0107', 'MANNING0108', 'MANNING0109', 'MANNING0110', 'MANNING0111', 'MANNING0112', 'MANNING0113', 'MANNING0114', 'MANNING0115', 'MANNING0116', 'MANNING0117', 'MANNING0118', 'MANNING0119', 'MANNING0120', 'MANNING0121', 'MANNING0122', 'MANNING0123', 'MANNING0124', 'MANNING0125', 'MANNING0126', 'MANNING0127', 'MONA0001', 'MONA0002', 'MONA0003', 'MONA0004', 'MONA0005', 'MONA0006', 'MONA0007', 'MONA0008', 'MONA0009', 'MONA0010', 'MONA0011', 'MONA0012', 'MONA0013', 'MONA0014', 'MONA0015', 'MONA0016', 'MONA0017', 'MONA0018', 'MONA0019', 'MONA0020', 'MONA0021', 'NAMB0001', 'NAMB0002', 'NAMB0003', 'NAMB0004', 'NAMB0005', 'NAMB0006', 'NAMB0007', 'NAMB0008', 'NAMB0009', 'NAMB0010', 'NAMB0011', 'NAMB0012', 'NAMB0013', 'NAMB0014', 'NAMB0015', 'NAMB0016', 'NAMB0017', 'NAMB0018', 'NAMB0019', 'NAMB0020', 'NAMB0021', 'NAMB0022', 'NAMB0023', 'NAMB0024', 'NAMB0025', 'NAMB0026', 'NAMB0027', 'NAMB0028', 'NAMB0029', 'NAMB0030', 'NAMB0031', 'NAMB0032', 'NAMB0033', 'NAMB0034', 'NAMB0035', 'NAMB0036', 'NAMB0037', 'NAMB0038', 'NAMB0039', 'NAMB0040', 'NAMB0041', 'NAMB0042', 'NAMB0043', 'NAMB0044', 'NAMB0045', 'NAMB0046', 'NAMB0047', 'NAMB0048', 'NAMB0049', 'NAMB0050', 'NAMB0051', 'NAMB0052', 'NAMB0053', 'NAMB0054', 'NAMB0055', 'NAMB0056', 'NAMB0057', 'NAMB0058', 'NAMB0059', 'NAMB0060', 'NAMB0061', 'NAMB0062', 'NAMB0063', 'NAMB0064', 'NAMB0065', 'NAMB0066', 'NAMB0067', 'NAMB0068', 'NAMB0069', 'NAMB0070', 'NAMB0071', 'NAMB0072', 'NAMB0073', 'NARRA0001', 'NARRA0002', 'NARRA0003', 'NARRA0004', 'NARRA0005', 'NARRA0006', 'NARRA0007', 'NARRA0008', 'NARRA0009', 'NARRA0010', 'NARRA0011', 'NARRA0012', 'NARRA0013', 'NARRA0014', 'NARRA0015', 'NARRA0016', 'NARRA0017', 'NARRA0018', 'NARRA0019', 'NARRA0020', 'NARRA0021', 'NARRA0022', 'NARRA0023', 'NARRA0024', 'NARRA0025', 'NARRA0026', 'NARRA0027', 'NARRA0028', 'NARRA0029', 'NARRA0030', 'NARRA0031', 'NARRA0032', 'NARRA0033', 'NARRA0034', 'NARRA0035', 'NARRA0036', 'NINEMn0001', 'NINEMn0002', 'NINEMn0003', 'NINEMn0004', 'NINEMn0005', 'NINEMn0006', 'NINEMn0007', 'NINEMn0008', 'NINEMn0009', 'NINEMn0010', 'NINEMn0011', 'NINEMn0012', 'NINEMn0013', 'NINEMn0014', 'NINEMn0015', 'NINEMn0016', 'NINEMn0017', 'NINEMn0018', 'NINEMn0019', 'NINEMn0020', 'NINEMn0021', 'NINEMn0022', 'NINEMn0023', 'NINEMn0024', 'NINEMn0025', 'NINEMn0026', 'NINEMn0027', 'NINEMn0028', 'NINEMn0029', 'NINEMn0030', 'NINEMn0031', 'NINEMn0032', 'NINEMn0033', 'NINEMn0034', 'NINEMn0035', 'NINEMn0036', 'NINEMn0037', 'NINEMn0038', 'NINEMn0039', 'NINEMn0040', 'NINEMn0041', 'NINEMn0042', 'NINEMn0043', 'NINEMn0044', 'NINEMn0045', 'NINEMn0046', 'NINEMn0047', 'NINEMn0048', 'NINEMn0049', 'NINEMn0050', 'NINEMn0051', 'NINEMn0052', 'NINEMn0053', 'NINEMn0054', 'NINEMs0001', 'NINEMs0002', 'NINEMs0003', 'NINEMs0004', 'NINEMs0005', 'NINEMs0006', 'NINEMs0007', 'NINEMs0008', 'NINEMs0009', 'NINEMs0010', 'NINEMs0011', 'NINEMs0012', 'NINEMs0013', 'NINEMs0014', 'NINEMs0015', 'NINEMs0016', 'NINEMs0017', 'NINEMs0018', 'NINEMs0019', 'NINEMs0020', 'NINEMs0021', 'NINEMs0022', 'NINEMs0023', 'NINEMs0024', 'NINEMs0025', 'NINEMs0026', 'NINEMs0027', 'NINEMs0028', 'NINEMs0029', 'NINEMs0030', 'NINEMs0031', 'NINEMs0032', 'NINEMs0033', 'NINEMs0034', 'NINEMs0035', 'NINEMs0036', 'NINEMs0037', 'NINEMs0038', 'NINEMs0039', 'NINEMs0040', 'NINEMs0041', 'NINEMs0042', 'NINEMs0043', 'NINEMs0044', 'NINEMs0045', 'NINEMs0046', 'NINEMs0047', 'NINEMs0048', 'NINEMs0049', 'NINEMs0050', 'NINEMs0051', 'NINEMs0052', 'NINEMs0053', 'NINEMs0054', 'NINEMs0055', 'NINEMs0056', 'NINEMs0057', 'NINEMs0058', 'NINEMs0059', 'NINEMs0060', 'NSHORE_n0001', 'NSHORE_n0002', 'NSHORE_n0003', 'NSHORE_n0004', 'NSHORE_n0005', 'NSHORE_n0006', 'NSHORE_n0007', 'NSHORE_n0008', 'NSHORE_n0009', 'NSHORE_n0010', 'NSHORE_n0011', 'NSHORE_n0012', 'NSHORE_n0013', 'NSHORE_n0014', 'NSHORE_n0015', 'NSHORE_n0016', 'NSHORE_n0017', 'NSHORE_n0018', 'NSHORE_n0019', 'NSHORE_n0020', 'NSHORE_n0021', 'NSHORE_n0022', 'NSHORE_n0023', 'NSHORE_n0024', 'NSHORE_n0025', 'NSHORE_n0026', 'NSHORE_n0027', 'NSHORE_n0028', 'NSHORE_n0029', 'NSHORE_n0030', 'NSHORE_n0031', 'NSHORE_n0032', 'NSHORE_n0033', 'NSHORE_n0034', 'NSHORE_n0035', 'NSHORE_n0036', 'NSHORE_n0037', 'NSHORE_n0038', 'NSHORE_n0039', 'NSHORE_n0040', 'NSHORE_n0041', 'NSHORE_n0042', 'NSHORE_n0043', 'NSHORE_n0044', 'NSHORE_n0045', 'NSHORE_n0046', 'NSHORE_n0047', 'NSHORE_n0048', 'NSHORE_n0049', 'NSHORE_n0050', 'NSHORE_n0051', 'NSHORE_n0052', 'NSHORE_n0053', 'NSHORE_n0054', 'NSHORE_n0055', 'NSHORE_n0056', 'NSHORE_n0057', 'NSHORE_n0058', 'NSHORE_n0059', 'NSHORE_n0060', 'NSHORE_n0061', 'NSHORE_n0062', 'NSHORE_n0063', 'NSHORE_n0064', 'NSHORE_n0065', 'NSHORE_n0066', 'NSHORE_n0067', 'NSHORE_n0068', 'NSHORE_n0069', 'NSHORE_n0070', 'NSHORE_n0071', 'NSHORE_n0072', 'NSHORE_n0073', 'NSHORE_n0074', 'NSHORE_n0075', 'NSHORE_n0076', 'NSHORE_n0077', 'NSHORE_n0078', 'NSHORE_n0079', 'NSHORE_n0080', 'NSHORE_n0081', 'NSHORE_n0082', 'NSHORE_s0001', 'NSHORE_s0002', 'NSHORE_s0003', 'NSHORE_s0004', 'NSHORE_s0005', 'NSHORE_s0006', 'NSHORE_s0007', 'NSHORE_s0008', 'NSHORE_s0009', 'NSHORE_s0010', 'NSHORE_s0011', 'NSHORE_s0012', 'NSHORE_s0013', 'NSHORE_s0014', 'NSHORE_s0015', 'NSHORE_s0016', 'NSHORE_s0017', 'NSHORE_s0018', 'NSHORE_s0019', 'NSHORE_s0020', 'NSHORE_s0021', 'NSHORE_s0022', 'NSHORE_s0023', 'NSHORE_s0024', 'NSHORE_s0025', 'NSHORE_s0026', 'NSHORE_s0027', 'NSHORE_s0028', 'NSHORE_s0029', 'NSHORE_s0030', 'NSHORE_s0031', 'NSHORE_s0032', 'NSHORE_s0033', 'NSHORE_s0034', 'NSHORE_s0035', 'NSHORE_s0036', 'NSHORE_s0037', 'NSHORE_s0038', 'NSHORE_s0039', 'NSHORE_s0040', 'NSHORE_s0041', 'NSHORE_s0042', 'NSHORE_s0043', 'NSHORE_s0044', 'OLDBAR0001', 'OLDBAR0002', 'OLDBAR0003', 'OLDBAR0004', 'OLDBAR0005', 'OLDBAR0006', 'OLDBAR0007', 'OLDBAR0008', 'OLDBAR0009', 'OLDBAR0010', 'OLDBAR0011', 'OLDBAR0012', 'OLDBAR0013', 'OLDBAR0014', 'OLDBAR0015', 'OLDBAR0016', 'OLDBAR0017', 'OLDBAR0018', 'OLDBAR0019', 'OLDBAR0020', 'OLDBAR0021', 'OLDBAR0022', 'OLDBAR0023', 'OLDBAR0024', 'OLDBAR0025', 'OLDBAR0026', 'OLDBAR0027', 'OLDBAR0028', 'OLDBAR0029', 'OLDBAR0030', 'OLDBAR0031', 'OLDBAR0032', 'OLDBAR0033', 'OLDBAR0034', 'OLDBAR0035', 'OLDBAR0036', 'ONEMILE0001', 'ONEMILE0002', 'ONEMILE0003', 'ONEMILE0004', 'ONEMILE0005', 'ONEMILE0006', 'ONEMILE0007', 'ONEMILE0008', 'ONEMILE0009', 'ONEMILE0010', 'ONEMILE0011', 'ONEMILE0012', 'ONEMILE0013', 'PEARLn0001', 'PEARLn0002', 'PEARLn0003', 'PEARLn0004', 'PEARLn0005', 'PEARLs0001', 'PEARLs0002', 'PEARLs0003', 'PEARLs0004', 'PEARLs0005', 'SCOT0001', 'SCOT0002', 'SCOT0003', 'SCOT0004', 'SCOT0005', 'SCOT0006', 'SCOT0007', 'SCOT0008', 'SCOT0009', 'SCOT0010', 'SCOT0011', 'SCOT0012', 'STOCNn0001', 'STOCNn0002', 'STOCNn0003', 'STOCNn0004', 'STOCNn0005', 'STOCNn0006', 'STOCNn0007', 'STOCNn0008', 'STOCNn0009', 'STOCNn0010', 'STOCNn0011', 'STOCNn0012', 'STOCNn0013', 'STOCNn0014', 'STOCNn0015', 'STOCNn0016', 'STOCNn0017', 'STOCNn0018', 'STOCNn0019', 'STOCNn0020', 'STOCNn0021', 'STOCNn0022', 'STOCNn0023', 'STOCNn0024', 'STOCNn0025', 'STOCNn0026', 'STOCNn0027', 'STOCNn0028', 'STOCNn0029', 'STOCNn0030', 'STOCNn0031', 'STOCNn0032', 'STOCNn0033', 'STOCNn0034', 'STOCNn0035', 'STOCNn0036', 'STOCNn0037', 'STOCNn0038', 'STOCNn0039', 'STOCNn0040', 'STOCNn0041', 'STOCNn0042', 'STOCNn0043', 'STOCNn0044', 'STOCNn0045', 'STOCNn0046', 'STOCNn0047', 'STOCNn0048', 'STOCNn0049', 'STOCNn0050', 'STOCNn0051', 'STOCNn0052', 'STOCNn0053', 'STOCNn0054', 'STOCNn0055', 'STOCNn0056', 'STOCNn0057', 'STOCNn0058', 'STOCNn0059', 'STOCNn0060', 'STOCNn0061', 'STOCNn0062', 'STOCNn0063', 'STOCNn0064', 'STOCNn0065', 'STOCNs0001', 'STOCNs0002', 'STOCNs0003', 'STOCNs0004', 'STOCNs0005', 'STOCNs0006', 'STOCNs0007', 'STOCNs0008', 'STOCNs0009', 'STOCNs0010', 'STOCNs0011', 'STOCNs0012', 'STOCNs0013', 'STOCNs0014', 'STOCNs0015', 'STOCNs0016', 'STOCNs0017', 'STOCNs0018', 'STOCNs0019', 'STOCNs0020', 'STOCNs0021', 'STOCNs0022', 'STOCNs0023', 'STOCNs0024', 'STOCNs0025', 'STOCNs0026', 'STOCNs0027', 'STOCNs0028', 'STOCNs0029', 'STOCNs0030', 'STOCNs0031', 'STOCNs0032', 'STOCNs0033', 'STOCNs0034', 'STOCNs0035', 'STOCNs0036', 'STOCNs0037', 'STOCNs0038', 'STOCNs0039', 'STOCNs0040', 'STOCNs0041', 'STOCNs0042', 'STOCNs0043', 'STOCNs0044', 'STOCNs0045', 'STOCNs0046', 'STOCNs0047', 'STOCNs0048', 'STOCNs0049', 'STOCNs0050', 'STOCNs0051', 'STOCNs0052', 'STOCNs0053', 'STOCNs0054', 'STOCNs0055', 'STOCNs0056', 'STOCNs0057', 'STOCNs0058', 'STOCNs0059', 'STOCNs0060', 'STOCNs0061', 'STOCNs0062', 'STOCNs0063', 'STOCNs0064', 'STOCNs0065', 'STOCNs0066', 'STOCNs0067', 'STOCNs0068', 'STOCNs0069', 'STOCNs0070', 'STOCNs0071', 'STOCNs0072', 'STOCNs0073', 'STOCNs0074', 'STOCNs0075', 'STOCNs0076', 'STOCNs0077', 'STOCNs0078', 'STOCNs0079', 'STOCNs0080', 'STOCNs0081', 'STOCNs0082', 'STOCNs0083', 'STOCNs0084', 'STOCNs0085', 'STOCNs0086', 'STOCNs0087', 'STOCNs0088', 'STOCNs0089', 'STOCNs0090', 'STOCNs0091', 'STOCNs0092', 'STOCNs0093', 'STOCNs0094', 'STOCNs0095', 'STOCNs0096', 'STOCNs0097', 'STOCNs0098', 'STOCNs0099', 'STOCNs0100', 'STOCNs0101', 'STOCNs0102', 'STOCNs0103', 'STOCNs0104', 'STOCNs0105', 'STOCNs0106', 'STOCNs0107', 'STOCNs0108', 'STOCNs0109', 'STOCNs0110', 'STOCNs0111', 'STOCNs0112', 'STOCNs0113', 'STOCNs0114', 'STOCNs0115', 'STOCNs0116', 'STOCNs0117', 'STOCNs0118', 'STOCNs0119', 'STOCNs0120', 'STOCNs0121', 'STOCNs0122', 'STOCNs0123', 'STOCNs0124', 'STOCNs0125', 'STOCNs0126', 'STOCNs0127', 'STOCNs0128', 'STOCNs0129', 'STOCNs0130', 'STOCNs0131', 'STOCNs0132', 'STOCNs0133', 'STOCNs0134', 'STOCNs0135', 'STOCNs0136', 'STOCNs0137', 'STOCNs0138', 'STOCNs0139', 'STOCNs0140', 'STOCNs0141', 'STOCNs0142', 'STOCNs0143', 'STOCNs0144', 'STOCNs0145', 'STOCNs0146', 'STOCNs0147', 'STOCNs0148', 'STOCNs0149', 'STOCNs0150', 'STOCNs0151', 'STOCNs0152', 'STOCNs0153', 'STOCNs0154', 'STOCNs0155', 'STOCNs0156', 'STOCNs0157', 'STOCNs0158', 'STOCNs0159', 'STOCNs0160', 'STOCNs0161', 'STOCNs0162', 'STOCNs0163', 'STOCNs0164', 'STOCNs0165', 'STOCNs0166', 'STOCNs0167', 'STOCNs0168', 'STOCNs0169', 'STOCNs0170', 'STOCNs0171', 'STOCNs0172', 'STOCNs0173', 'STOCNs0174', 'STOCNs0175', 'STOCNs0176', 'STOCNs0177', 'STOCNs0178', 'STOCNs0179', 'STOCNs0180', 'STOCNs0181', 'STOCNs0182', 'STOCNs0183', 'STOCNs0184', 'STOCNs0185', 'STOCNs0186', 'STOCNs0187', 'STOCNs0188', 'STOCNs0189', 'STOCNs0190', 'STOCNs0191', 'STOCNs0192', 'STOCNs0193', 'STOCNs0194', 'STOCNs0195', 'STOCNs0196', 'STOCNs0197', 'STOCNs0198', 'STOCNs0199', 'STOCNs0200', 'STOCNs0201', 'STOCNs0202', 'STOCNs0203', 'STOCNs0204', 'STOCNs0205', 'STOCNs0206', 'STOCNs0207', 'STOCNs0208', 'STOCNs0209', 'STOCS0001', 'STOCS0002', 'STOCS0003', 'STOCS0004', 'STOCS0005', 'STOCS0006', 'STOCS0007', 'STOCS0008', 'STOCS0009', 'STOCS0010', 'STOCS0011', 'STOCS0012', 'STOCS0013', 'STOCS0014', 'STOCS0015', 'STOCS0016', 'STOCS0017', 'STOCS0018', 'STOCS0019', 'STOCS0020', 'STOCS0021', 'STOCS0022', 'STOCS0023', 'STOCS0024', 'STOCS0025', 'STOCS0026', 'STOCS0027', 'STOCS0028', 'STOCS0029', 'STOCS0030', 'STOCS0031', 'STOCS0032', 'STOCS0033', 'STOCS0034', 'STOCS0035', 'STOCS0036', 'STOCS0037', 'STOCS0038', 'STOCS0039', 'STOCS0040', 'STOCS0041', 'STOCS0042', 'STOCS0043', 'STOCS0044', 'STOCS0045', 'STOCS0046', 'STUART0001', 'STUART0002', 'STUART0003', 'STUART0004', 'STUART0005', 'STUART0006', 'STUART0007', 'STUART0008', 'STUART0009', 'STUART0010', 'STUART0011', 'STUART0012', 'STUART0013', 'STUART0014', 'STUART0015', 'STUART0016', 'STUART0017', 'STUART0018', 'STUART0019', 'STUART0020', 'STUART0021', 'STUART0022', 'STUART0023', 'STUART0024', 'STUART0025', 'STUART0026', 'STUART0027', 'STUART0028', 'STUART0029', 'STUART0030', 'STUART0031', 'STUART0032', 'STUART0033', 'STUART0034', 'STUART0035', 'STUART0036', 'STUART0037', 'STUART0038', 'STUART0039', 'STUART0040', 'STUART0041', 'STUART0042', 'STUART0043', 'STUART0044', 'STUART0045', 'STUART0046', 'STUART0047', 'STUART0048', 'STUART0049', 'STUART0050', 'STUART0051', 'STUART0052', 'STUART0053', 'STUART0054', 'STUART0055', 'STUART0056', 'STUART0057', 'STUART0058', 'STUART0059', 'STUART0060', 'STUART0061', 'STUART0062', 'STUART0063', 'STUART0064', 'STUART0065', 'STUART0066', 'STUART0067', 'STUART0068', 'STUART0069', 'STUART0070', 'STUART0071', 'STUART0072', 'STUART0073', 'STUART0074', 'STUART0075', 'STUART0076', 'STUART0077', 'STUART0078', 'STUART0079', 'STUART0080', 'STUART0081', 'STUART0082', 'STUART0083', 'STUART0084', 'STUART0085', 'STUART0086', 'STUART0087', 'STUART0088', 'STUART0089', 'SWRO0001', 'SWRO0002', 'SWRO0003', 'SWRO0004', 'SWRO0005', 'SWRO0006', 'SWRO0007', 'SWRO0008', 'SWRO0009', 'SWRO0010', 'SWRO0011', 'SWRO0012', 'SWRO0013', 'SWRO0014', 'SWRO0015', 'SWRO0016', 'SWRO0017', 'SWRO0018', 'SWRO0019', 'SWRO0020', 'SWRO0021', 'SWRO0022', 'SWRO0023', 'SWRO0024', 'SWRO0025', 'SWRO0026', 'TREACH0001', 'TREACH0002', 'TREACH0003', 'TREACH0004', 'TREACH0005', 'TREACH0006', 'TREACH0007', 'TREACH0008', 'TREACH0009', 'TREACH0010', 'TREACH0011', 'TREACH0012', 'TREACH0013', 'TREACH0014', 'TREACH0015', 'TREACH0016', 'WAMBE0001', 'WAMBE0002', 'WAMBE0003', 'WAMBE0004', 'WAMBE0005', 'WAMBE0006', 'WAMBE0007', 'WAMBE0008', 'WAMBE0009', 'WAMBE0010', 'WAMBE0011', 'WAMBE0012', 'WAMBE0013', 'WAMBE0014', 'WAMBE0015', 'WAMBE0016', 'WAMBE0017', 'WAMBE0018', 'WAMBE0019', 'WAMBE0020', 'WAMBE0021', 'WAMBE0022', 'WAMBE0023', 'WAMBE0024', 'WAMBE0025', 'WAMBE0026', 'WAMBE0027'), value='NARRA0001'),)))), HTML(value=''))), HBox(children=(FigureWidget({\n",
" 'data': [{'line': {'color': 'rgb(51,160,44)', 'width': 2},\n",
" 'name': 'Pre Storm Profile',\n",
" 'type': 'scatter',\n",
- " 'uid': 'c8ea5f67-a68e-492f-a718-c6d2b6a1a3ab',\n",
+ " 'uid': 'dede4ee7-342d-41c2-b899-daa42347f70c',\n",
" 'x': [0],\n",
" 'y': [0]},\n",
" {'line': {'color': 'rgb(255,127,0)', 'width': 2},\n",
" 'name': 'Post Storm Profile',\n",
" 'type': 'scatter',\n",
- " 'uid': 'ac860cf0-1e87-4a16-b5a1-ef914032c675',\n",
+ " 'uid': 'd51ed30f-dc58-4334-a0d2-e0e76b9f3ff4',\n",
" 'x': [0],\n",
" 'y': [0]},\n",
" {'marker': {'color': 'rgba(255,255,255,0)', 'line': {'color': 'rgba(106,61,154, 1)', 'width': 2}, 'size': 10},\n",
" 'mode': 'markers',\n",
" 'name': 'Pre-storm dune crest',\n",
" 'type': 'scatter',\n",
- " 'uid': '6d629f5f-ecdb-4a38-b5da-9390e53902c4',\n",
+ " 'uid': 'a09876d4-eebe-4a20-9f56-ddf10095c5de',\n",
" 'x': [0],\n",
" 'y': [0]},\n",
" {'marker': {'color': 'rgba(255,255,255,0)', 'line': {'color': 'rgba(202,178,214,1)', 'width': 2}, 'size': 10},\n",
" 'mode': 'markers',\n",
" 'name': 'Pre-storm dune toe',\n",
" 'type': 'scatter',\n",
- " 'uid': '7caff243-2d24-4b71-9eea-a037a121f7ff',\n",
+ " 'uid': '329c7dd8-2f5a-42e9-9813-81b6acb08419',\n",
" 'x': [0],\n",
" 'y': [0]},\n",
" {'line': {'color': 'rgb(44,127,184)', 'width': 4},\n",
" 'mode': 'lines',\n",
" 'name': 'Peak R_high: foreshore_slope_sto06',\n",
" 'type': 'scatter',\n",
- " 'uid': '0797ed89-9dd1-4b71-bbb9-dde65ce0e010',\n",
+ " 'uid': '8cef75dd-a4eb-40de-8149-a6179a9c6ba6',\n",
" 'x': [0],\n",
" 'y': [0]},\n",
" {'line': {'color': 'rgb(127,205,187)', 'width': 4},\n",
" 'mode': 'lines',\n",
" 'name': 'Peak R_high: mean_slope_sto06',\n",
" 'type': 'scatter',\n",
- " 'uid': '6db4b49a-049d-4182-b307-f14deeb8af01',\n",
+ " 'uid': 'c1691092-a100-4799-a807-13d8c2dc0679',\n",
" 'x': [0],\n",
" 'y': [0]}],\n",
" 'layout': {'height': 300,\n",
@@ -224,16 +224,16 @@
" 'title': 'z (m)',\n",
" 'zeroline': True}}\n",
"}), FigureWidget({\n",
- " 'data': [{'lat': array([-33.46381539, -33.46301835, -33.46221051, ..., -33.4279646 ,\n",
- " -33.42732743, -33.42671036]),\n",
- " 'lon': array([151.43639576, 151.43690633, 151.43738179, ..., 151.4501613 ,\n",
- " 151.45092222, 151.45170635]),\n",
+ " 'data': [{'lat': array([-33.45779575, -33.4584035 , -33.45911131, ..., -33.44589876,\n",
+ " -33.44665247, -33.44732817]),\n",
+ " 'lon': array([151.44105489, 151.44024676, 151.43957804, ..., 151.44420973,\n",
+ " 151.44479881, 151.44550951]),\n",
" 'marker': {'size': 10},\n",
" 'mode': 'markers',\n",
" 'text': array(['AVOCAn0001', 'AVOCAn0002', 'AVOCAn0003', ..., 'WAMBE0025', 'WAMBE0026',\n",
" 'WAMBE0027'], dtype='
Date: Tue, 27 Nov 2018 14:53:32 +1100
Subject: [PATCH 6/6] Parse new profiles.mat from Mitch
Mitch has updated profiles.mat to include more information, like time of LIDAR acquisition, profile flags and recovery profiles. The updates to the code parse this new information.
---
.env | 4 +-
src/analysis/forecast_twl.py | 4 +-
src/analysis/observed_storm_impacts.py | 44 +++--
src/data/__init__.py | 0
src/data/csv_to_shp.py | 15 +-
src/data/parse_mat.py | 259 ++++++++++++++-----------
src/data/profile_features.py | 34 ++--
src/logging.yaml | 50 +++++
src/utils.py | 16 ++
9 files changed, 271 insertions(+), 155 deletions(-)
create mode 100644 src/data/__init__.py
create mode 100644 src/logging.yaml
create mode 100644 src/utils.py
diff --git a/.env b/.env
index de5e5c4..8a4468b 100644
--- a/.env
+++ b/.env
@@ -10,11 +10,9 @@ MATLAB_PATH="C:/Program Files/MATLAB/R2016b/bin/win64/MATLAB.exe"
# total water level.
MULTIPROCESS_THREADS=2
-# GDAL_DATA="C://Users//z5189959//Desktop//nsw-2016-storm-impact//.venv//Library//share//gdal"
-
# The settings below should be left as is unless you know what you're doing.
# Need to set pythonpath so that relative imports can be properly used in with pipenv
# Refer to https://stackoverflow.com/q/52986500 and https://stackoverflow.com/a/49797761
-PYTHONPATH=${PWD}
\ No newline at end of file
+# PYTHONPATH=${PWD}
\ No newline at end of file
diff --git a/src/analysis/forecast_twl.py b/src/analysis/forecast_twl.py
index e15df6e..ddc93a6 100644
--- a/src/analysis/forecast_twl.py
+++ b/src/analysis/forecast_twl.py
@@ -7,8 +7,7 @@ import numpy.ma as ma
import pandas as pd
from scipy import stats
-
-from src.analysis import runup_models
+import runup_models
logging.config.fileConfig("./src/logging.conf", disable_existing_loggers=False)
logger = logging.getLogger(__name__)
@@ -266,6 +265,7 @@ def crossings(profile_x, profile_z, constant_z):
z = np.subtract(profile_z, constant_z)
# Find all indices right before any crossing.
+ # TODO Sometimes this can give a runtime warning https://stackoverflow.com/a/36489085
indicies = np.where(z[:-1] * z[1:] < 0)[0]
# Use linear interpolation to find intersample crossings.
diff --git a/src/analysis/observed_storm_impacts.py b/src/analysis/observed_storm_impacts.py
index 0aadbbe..80bdbda 100644
--- a/src/analysis/observed_storm_impacts.py
+++ b/src/analysis/observed_storm_impacts.py
@@ -48,6 +48,11 @@ def volume_change(df_profiles, df_profile_features, zone):
if np.isnan(prestorm_dune_toe_x):
prestorm_dune_toe_x = prestorm_dune_crest_x
+ # If no prestorm and poststorm profiles, skip site and continue
+ profile_lengths = [len(df_site.query("profile_type == '{}'".format(x))) for x in ['prestorm', 'poststorm']]
+ if any([length ==0 for length in profile_lengths]):
+ continue
+
# Find last x coordinate where we have both prestorm and poststorm measurements. If we don't do this,
# the prestorm and poststorm values are going to be calculated over different lengths.
df_zone = df_site.dropna(subset=["z"])
@@ -128,25 +133,26 @@ def storm_regime(df_observed_impacts):
return df_observed_impacts
-if __name__ == "__main__":
- logger.info("Importing existing data")
- data_folder = "./data/interim"
- df_profiles = pd.read_csv(os.path.join(data_folder, "profiles.csv"), index_col=[0, 1, 2])
- df_profile_features = pd.read_csv(os.path.join(data_folder, "profile_features.csv"), index_col=[0])
-
- logger.info("Creating new dataframe for observed impacts")
- df_observed_impacts = pd.DataFrame(index=df_profile_features.index)
-
- logger.info("Getting pre/post storm volumes")
- df_swash_vol_changes = volume_change(df_profiles, df_profile_features, zone="swash")
- df_dune_face_vol_changes = volume_change(df_profiles, df_profile_features, zone="dune_face")
- df_observed_impacts = df_observed_impacts.join([df_swash_vol_changes, df_dune_face_vol_changes])
-
- # Classify regime based on volume changes
- df_observed_impacts = storm_regime(df_observed_impacts)
-
- # Save dataframe to csv
- df_observed_impacts.to_csv(os.path.join(data_folder, "impacts_observed.csv"))
+#
+# if __name__ == "__main__":
+# logger.info("Importing existing data")
+# data_folder = "./data/interim"
+# df_profiles = pd.read_csv(os.path.join(data_folder, "profiles.csv"), index_col=[0, 1, 2])
+# df_profile_features = pd.read_csv(os.path.join(data_folder, "profile_features.csv"), index_col=[0])
+#
+# logger.info("Creating new dataframe for observed impacts")
+# df_observed_impacts = pd.DataFrame(index=df_profile_features.index)
+#
+# logger.info("Getting pre/post storm volumes")
+# df_swash_vol_changes = volume_change(df_profiles, df_profile_features, zone="swash")
+# df_dune_face_vol_changes = volume_change(df_profiles, df_profile_features, zone="dune_face")
+# df_observed_impacts = df_observed_impacts.join([df_swash_vol_changes, df_dune_face_vol_changes])
+#
+# # Classify regime based on volume changes
+# df_observed_impacts = storm_regime(df_observed_impacts)
+#
+# # Save dataframe to csv
+# df_observed_impacts.to_csv(os.path.join(data_folder, "impacts_observed.csv"))
@click.command()
diff --git a/src/data/__init__.py b/src/data/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/data/csv_to_shp.py b/src/data/csv_to_shp.py
index 39525fa..a5438c2 100644
--- a/src/data/csv_to_shp.py
+++ b/src/data/csv_to_shp.py
@@ -2,15 +2,20 @@
Converts .csv files to .shape files
"""
+import os
+import sys
+
+sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
import click
import fiona
import pandas as pd
from fiona.crs import from_epsg
from shapely.geometry import Point, mapping
-import logging.config
-logging.config.fileConfig("./src/logging.conf", disable_existing_loggers=False)
-logger = logging.getLogger(__name__)
+from utils import setup_logging
+
+logger = setup_logging()
@click.command()
@@ -25,11 +30,11 @@ def sites_csv_to_shp(input_csv, output_shp):
"""
logger.info("Converting %s to %s", input_csv, output_shp)
df_sites = pd.read_csv(input_csv, index_col=[0])
-
+ logger.info(os.environ.get("GDAL_DATA", None))
schema = {"geometry": "Point", "properties": {"beach": "str", "site_id": "str"}}
with fiona.open(output_shp, "w", crs=from_epsg(4326), driver="ESRI Shapefile", schema=schema) as output:
for index, row in df_sites.iterrows():
- point = Point(row["lon"], row["lat"])
+ point = Point(row["x_200_lon"], row["x_200_lat"])
prop = {"beach": row["beach"], "site_id": index}
output.write({"geometry": mapping(point), "properties": prop})
logger.info("Done!")
diff --git a/src/data/parse_mat.py b/src/data/parse_mat.py
index d6f7cb2..de17dfc 100644
--- a/src/data/parse_mat.py
+++ b/src/data/parse_mat.py
@@ -2,15 +2,25 @@
Converts raw .mat files into a flattened .csv structure which can be imported into python pandas.
"""
-import logging.config
+import os
+import sys
+
+sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
from datetime import datetime, timedelta
+import math
+
+
import click
+import numpy as np
import pandas as pd
from mat4py import loadmat
-import numpy as np
+from shapely.geometry import Point
+
+from profile_features import convert_coord_systems
+from utils import setup_logging
-logging.config.fileConfig("./src/logging.conf", disable_existing_loggers=False)
-logger = logging.getLogger(__name__)
+logger = setup_logging()
def parse_orientations(orientations_mat):
@@ -134,7 +144,7 @@ def parse_tides(tides_mat):
return df
-def parse_profiles(profiles_mat):
+def parse_profiles_and_sites(profiles_mat):
"""
Parses the raw profiles.mat file and returns a pandas dataframe
:param tides_mat:
@@ -142,39 +152,108 @@ def parse_profiles(profiles_mat):
"""
logger.info("Parsing %s", profiles_mat)
mat_data = loadmat(profiles_mat)["data"]
- rows = []
- for i in range(0, len(mat_data["site"])):
- for j in range(0, len(mat_data["pfx"][i])):
- for profile_type in ["prestorm", "poststorm"]:
-
- if profile_type == "prestorm":
- z = mat_data["pf1"][i][j][0]
- if profile_type == "poststorm":
- z = mat_data["pf2"][i][j][0]
-
- rows.append(
- {
- "beach": mat_data["site"][i],
- "lon": mat_data["lon"][i],
- "lat": mat_data["lat"][i],
- "profile_type": profile_type,
- "x": mat_data["pfx"][i][j][0],
- "z": z,
- }
- )
+ profile_rows = []
+ site_rows = []
+ site_counter = 0
+
+ for i, site in enumerate(mat_data["site"]):
+
+ # Give each site a unique id
+ if len(site_rows) == 0 or site_rows[-1]["beach"] != site:
+ site_counter = 1
+ else:
+ site_counter += 1
+ site_id = "{}{:04d}".format(site, site_counter)
+
+ # Initalize location of x=200m latitude and longitude
+ x_200_lat = np.nan
+ x_200_lon = np.nan
+
+ # Want to calculation the orientation
+ orientation = {}
+
+ for x, lat, lon, z_prestorm, z_poststorm, easting, northing in zip(
+ mat_data["x"][i],
+ mat_data["lats"][i],
+ mat_data["lons"][i],
+ mat_data["Zpre"][i],
+ mat_data["Zpost"][i],
+ mat_data["eastings"][i],
+ mat_data["northings"][i],
+ ):
+
+ # Only extract pre and post storm profile
+ for j, profile_type in enumerate(["prestorm", "poststorm"]):
+
+ if mat_data["isgood"][i][j] == 1:
+ land_lim = mat_data["landlims"][i][j]
+ survey_datetime = matlab_datenum_to_datetime(mat_data["surveydates"][i][j])
+
+ if profile_type == "prestorm":
+ z = z_prestorm
+ else:
+ z = z_poststorm
+
+ # Keep a record of the where the center of the profile is located, and the locations of the land
+ # and sea
+
+ # TODO: This code isn't very transferrable. What if we don't have lat/lons at 200 m? Relook at this
+ if x[0] == 200:
+ x_200_lat = lat[0]
+ x_200_lon = lon[0]
+ elif x[0] == 0:
+ orientation["land_easting"] = easting[0]
+ orientation["land_northing"] = northing[0]
+ elif x[0] == 400:
+ orientation["sea_easting"] = easting[0]
+ orientation["sea_northing"] = northing[0]
+
+ profile_rows.append(
+ {
+ "site_id": site_id,
+ "lon": lon[0],
+ "lat": lat[0],
+ "profile_type": profile_type,
+ "x": x[0],
+ "z": z[0],
+ "land_lim": land_lim,
+ "survey_datetime": survey_datetime,
+ }
+ )
+
+ orientation = math.degrees(
+ math.atan2(
+ orientation["land_northing"] - orientation["sea_northing"],
+ orientation["land_easting"] - orientation["sea_easting"],
+ )
+ )
+ site_rows.append(
+ {
+ "site_id": site_id,
+ "beach": site,
+ "lat": x_200_lat,
+ "lon": x_200_lon,
+ "orientation": orientation,
+ "profile_x_lat_lon": 200,
+ }
+ )
- df = pd.DataFrame(rows)
- return df
+ df_profiles = pd.DataFrame(profile_rows)
+ df_sites = pd.DataFrame(site_rows)
+
+ logger.info("Parsed profiles and sites")
+ return df_profiles, df_sites
def remove_zeros(df_profiles):
"""
When parsing the pre/post storm profiles, the end of some profiles have constant values of zero. Let's change
these to NaNs for consistancy. Didn't use pandas fillnan because 0 may still be a valid value.
- :param df:
+ :param df_profiles:
:return:
"""
+ logger.info("Removing zeros from end of profiles")
df_profiles = df_profiles.sort_index()
groups = df_profiles.groupby(level=["site_id", "profile_type"])
for key, _ in groups:
@@ -185,6 +264,7 @@ def remove_zeros(df_profiles):
df_profile = df_profiles[idx_site]
x_last_ele = df_profile[df_profile.z != 0].index.get_level_values("x")[-1]
df_profiles.loc[idx_site & (df_profiles.index.get_level_values("x") > x_last_ele), "z"] = np.nan
+ logger.info("Removed zeros from end of profiles")
return df_profiles
@@ -198,31 +278,7 @@ def matlab_datenum_to_datetime(matlab_datenum):
return datetime.fromordinal(int(matlab_datenum)) + timedelta(days=matlab_datenum % 1) - timedelta(days=366)
-def get_unique_sites(dfs, cols=["beach", "lat", "lon"]):
- """
- Generates a dataframe of unique sites based on beach names, lats and lons. Creates a unique site ID for each.
- :param dfs:
- :param cols:
- :return:
- """
-
- rows = []
- df_all = pd.concat([df[cols] for df in dfs])
- beach_groups = df_all.groupby(["beach"])
- for beach_name, beach_group in beach_groups:
- site_groups = beach_group.groupby(["lat", "lon"])
- siteNo = 1
- for site_name, site_group in site_groups:
- site = "{}{:04d}".format(beach_name, siteNo)
- rows.append({"site_id": site, "lat": site_name[0], "lon": site_name[1], "beach": beach_name})
- siteNo += 1
-
- df = pd.DataFrame(rows)
-
- return df
-
-
-def replace_unique_sites(df, df_sites, cols=["lat", "lon"]):
+def replace_unique_sites(df, df_sites):
"""
Replaces beach/lat/lon columns with the unique site_id
:param dfs:
@@ -232,56 +288,37 @@ def replace_unique_sites(df, df_sites, cols=["lat", "lon"]):
# Make the sites index a column, so it can be merged into df
df_sites["site_id"] = df_sites.index.get_level_values("site_id")
- # Merging on a float can lead to subtle bugs. Lets convert lat/lons to integers and merge on that instead
- precision = 8
- df_sites["lat_int"] = np.round(df_sites["lat"] * 10 ** precision).astype(np.int64)
- df_sites["lon_int"] = np.round(df_sites["lon"] * 10 ** precision).astype(np.int64)
- df["lat_int"] = np.round(df["lat"] * 10 ** precision).astype(np.int64)
- df["lon_int"] = np.round(df["lon"] * 10 ** precision).astype(np.int64)
+ # Create eastings and northings so we can calculate distances
+ site_points = [convert_coord_systems(Point(lon, lat)).xy for lon, lat in zip(df_sites["lon"], df_sites["lat"])]
+ df_sites["easting"] = [x[0][0] for x in site_points]
+ df_sites["northing"] = [x[1][0] for x in site_points]
- df_merged = df.merge(df_sites, on=["lat_int", "lon_int"])
+ # Process each unique combination lat/lons in groups
+ groups = df.groupby(["lat", "lon"])
+ for (lat, lon), df_group in groups:
- # Check that all our records have a unique site identifier
- n_unmatched = len(df) - len(df_merged)
- if n_unmatched > 0:
- logger.warning("Not all records (%d of %d) matched with a unique site", n_unmatched, len(df))
-
- df_merged = df_merged.drop(
- columns=[
- "lat_x",
- "lon_x",
- "lat_int",
- "lon_int",
- "beach_y",
- "beach_x",
- "lat_y",
- "lon_y",
- "orientation",
- "profile_x_lat_lon",
- ]
- )
+ # Calculate distances from each point to each site and determine closest site
+ easting, northing = [x[0] for x in convert_coord_systems(Point(lon, lat)).xy]
+ distances_to_sites = np.sqrt((df_sites["easting"] - easting) ** 2 + (df_sites["northing"] - northing) ** 2)
+ min_distance = distances_to_sites.min()
+ closest_site = distances_to_sites.idxmin()
- return df_merged
+ # Do some logging so we can check later.
+ if min_distance > 1:
+ logger.warning("Closest site to (%.4f,%.4f) is %s (%.2f m away)", lat, lon, closest_site, min_distance)
+ else:
+ logger.info("Closest site to (%.4f,%.4f) is %s (%.2f m away)", lat, lon, closest_site, min_distance)
+ # Assign site_id based on closest site
+ df.loc[df_group.index, "site_id"] = closest_site
-@click.command(short_help="create sites.csv")
-@click.option("--waves-mat", required=True, help=".mat file containing wave records")
-@click.option("--tides-mat", required=True, help=".mat file containing tide records")
-@click.option("--profiles-mat", required=True, help=".mat file containing beach profiles")
-@click.option("--orientations-mat", required=True, help=".mat file containing orientation of beach profiles")
-@click.option("--output-file", required=True, help="where to save sites.csv")
-def create_sites_csv(waves_mat, tides_mat, profiles_mat, orientations_mat, output_file):
- logger.info("Creating %s", output_file)
- df_waves = parse_waves(waves_mat=waves_mat)
- df_tides = parse_tides(tides_mat=tides_mat)
- df_profiles = parse_profiles(profiles_mat=profiles_mat)
- df_orientations = parse_orientations(orientations_mat=orientations_mat)
- df_sites = get_unique_sites(dfs=[df_waves, df_tides, df_profiles])
- df_sites = combine_sites_and_orientaions(df_sites, df_orientations)
- df_sites = specify_lat_lon_profile_center(df_sites)
- df_sites.set_index(["site_id"], inplace=True)
- df_sites.to_csv(output_file)
- logger.info("Created %s", output_file)
+ nan_count = df.site_id.isna().sum()
+ if nan_count > 0:
+ logger.warning("Not all records (%d of %d) matched with a unique site", nan_count, len(df))
+
+ df = df.drop(columns=["lat", "lon", "beach"])
+
+ return df
@click.command(short_help="create waves.csv")
@@ -301,17 +338,22 @@ def create_waves_csv(waves_mat, sites_csv, output_file):
@click.command(short_help="create profiles.csv")
@click.option("--profiles-mat", required=True, help=".mat file containing beach profiles")
-@click.option("--sites-csv", required=True, help=".csv file description of cross section sites")
-@click.option("--output-file", required=True, help="where to save profiles.csv")
-def create_profiles_csv(profiles_mat, sites_csv, output_file):
- logger.info("Creating %s", output_file)
- df_profiles = parse_profiles(profiles_mat=profiles_mat)
- df_sites = pd.read_csv(sites_csv, index_col=[0])
- df_profiles = replace_unique_sites(df_profiles, df_sites)
+@click.option("--profiles-output-file", required=True, help="where to save profiles.csv")
+@click.option("--sites-output-file", required=True, help="where to save sites.csv")
+def create_sites_and_profiles_csv(profiles_mat, profiles_output_file, sites_output_file):
+ logger.info("Creating sites and profiles csvs")
+ df_profiles, df_sites = parse_profiles_and_sites(profiles_mat=profiles_mat)
df_profiles.set_index(["site_id", "profile_type", "x"], inplace=True)
df_profiles.sort_index(inplace=True)
- df_profiles.to_csv(output_file)
- logger.info("Created %s", output_file)
+ df_profiles = remove_zeros(df_profiles)
+
+ df_sites.set_index(["site_id"], inplace=True)
+ df_sites.sort_index(inplace=True)
+
+ df_profiles.to_csv(profiles_output_file)
+ logger.info("Created %s", profiles_output_file)
+ df_sites.to_csv(sites_output_file)
+ logger.info("Created %s", sites_output_file)
@click.command(short_help="create profiles.csv")
@@ -335,8 +377,7 @@ def cli():
if __name__ == "__main__":
- cli.add_command(create_sites_csv)
cli.add_command(create_waves_csv)
- cli.add_command(create_profiles_csv)
+ cli.add_command(create_sites_and_profiles_csv)
cli.add_command(create_tides_csv)
cli()
diff --git a/src/data/profile_features.py b/src/data/profile_features.py
index 78ba406..cb63568 100644
--- a/src/data/profile_features.py
+++ b/src/data/profile_features.py
@@ -15,22 +15,6 @@ logging.config.fileConfig("./src/logging.conf", disable_existing_loggers=False)
logger = logging.getLogger(__name__)
-def shapes_from_shp(shp_file):
- """
- Parses a shape file and returns a list of shapely shapes, ids and properties
- :param shp_file:
- :return:
- """
- shapes = []
- ids = []
- properties = []
- for feat in fiona.open(shp_file, "r"):
- shapes.append(shape(feat["geometry"]))
- ids.append(feat["id"])
- properties.append(feat["properties"])
- return shapes, ids, properties
-
-
def convert_coord_systems(g1, in_coord_system="EPSG:4326", out_coord_system="EPSG:28356"):
"""
Converts coordinates from one coordinates system to another. Needed because shapefiles are usually defined in
@@ -50,6 +34,22 @@ def convert_coord_systems(g1, in_coord_system="EPSG:4326", out_coord_system="EPS
return g2
+def shapes_from_shp(shp_file):
+ """
+ Parses a shape file and returns a list of shapely shapes, ids and properties
+ :param shp_file:
+ :return:
+ """
+ shapes = []
+ ids = []
+ properties = []
+ for feat in fiona.open(shp_file, "r"):
+ shapes.append(shape(feat["geometry"]))
+ ids.append(feat["id"])
+ properties.append(feat["properties"])
+ return shapes, ids, properties
+
+
def distance_to_intersection(lat, lon, landward_orientation, beach, line_strings, line_properties):
"""
Returns the distance at whjch a line drawn from a lat/lon at an orientation intersects a line stinrg
@@ -143,7 +143,7 @@ def parse_profile_features(df_sites, df_profiles, dune_crest_shp, dune_toe_shp):
lambda row: beach_profile_elevation(row["{}_x".format(feat)], df_profiles, "prestorm", row.name), axis=1
)
- df_profile_features = df_profile_features.drop(columns=["beach", "lat", "lon", "orientation"])
+ df_profile_features = df_profile_features.drop(columns=["beach", "lat", "lon", "orientation", "profile_x_lat_lon"])
return df_profile_features
diff --git a/src/logging.yaml b/src/logging.yaml
new file mode 100644
index 0000000..fc82b31
--- /dev/null
+++ b/src/logging.yaml
@@ -0,0 +1,50 @@
+---
+version: 1
+disable_existing_loggers: False
+formatters:
+ simple:
+ format: "%(asctime)s - %(filename)s - %(levelname)s - %(message)s"
+
+handlers:
+ console:
+ class: logging.StreamHandler
+ level: DEBUG
+ formatter: simple
+ stream: ext://sys.stdout
+
+ info_file_handler:
+ class: logging.handlers.RotatingFileHandler
+ level: INFO
+ formatter: simple
+ filename: info.log
+ maxBytes: 10485760 # 10MB
+ backupCount: 3
+ encoding: utf8
+
+ warning_file_handler:
+ class: logging.handlers.RotatingFileHandler
+ level: WARNING
+ formatter: simple
+ filename: warning.log
+ maxBytes: 10485760 # 10MB
+ backupCount: 3
+ encoding: utf8
+
+ error_file_handler:
+ class: logging.handlers.RotatingFileHandler
+ level: ERROR
+ formatter: simple
+ filename: error.log
+ maxBytes: 10485760 # 10MB
+ backupCount: 3
+ encoding: utf8
+
+loggers:
+ my_module:
+ level: ERROR
+ handlers: [console]
+ propagate: no
+
+root:
+ level: INFO
+ handlers: [console, info_file_handler, error_file_handler, warning_file_handler]
diff --git a/src/utils.py b/src/utils.py
new file mode 100644
index 0000000..0df1fc6
--- /dev/null
+++ b/src/utils.py
@@ -0,0 +1,16 @@
+import logging.config
+import os
+import yaml
+
+
+def setup_logging(path="./src/logging.yaml", default_level=logging.INFO):
+ """
+ Setup logging configuration
+ """
+ if os.path.exists(path):
+ with open(path, "rt") as f:
+ config = yaml.safe_load(f.read())
+ logging.config.dictConfig(config)
+ else:
+ logging.basicConfig(level=default_level)
+ return logging.getLogger(__name__)