Repository: climate Updated Branches: refs/heads/master 260e6b71d -> 9263dc60c
CLIMATE-685 - Update the examples using Evaluation Objects - most of the examples have been updated and all examples are tested except the esgf_integration_example.py - CLIMATE-686 should be addressed for running some examples Project: http://git-wip-us.apache.org/repos/asf/climate/repo Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/d5a43a35 Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/d5a43a35 Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/d5a43a35 Branch: refs/heads/master Commit: d5a43a35252859113517e43b6e88f16d6517a0b5 Parents: b6baf0f Author: huikyole <[email protected]> Authored: Mon Oct 5 17:29:52 2015 -0700 Committer: huikyole <[email protected]> Committed: Mon Oct 5 17:29:52 2015 -0700 ---------------------------------------------------------------------- examples/knmi_to_cru31_full_bias.py | 7 ++- examples/model_ensemble_to_rcmed.py | 12 ++-- examples/multi_model_evaluation.py | 21 ++----- examples/multi_model_taylor_diagram.py | 27 ++++----- .../simple_model_to_model_bias_DJF_and_JJA.py | 64 -------------------- examples/subregions_portrait_diagram.py | 7 ++- examples/taylor_diagram_example.py | 10 +-- examples/time_series_with_regions.py | 4 ++ 8 files changed, 44 insertions(+), 108 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/climate/blob/d5a43a35/examples/knmi_to_cru31_full_bias.py ---------------------------------------------------------------------- diff --git a/examples/knmi_to_cru31_full_bias.py b/examples/knmi_to_cru31_full_bias.py index a241442..beab16f 100644 --- a/examples/knmi_to_cru31_full_bias.py +++ b/examples/knmi_to_cru31_full_bias.py @@ -28,6 +28,11 @@ import ocw.dataset_processor as dsp import ocw.evaluation as evaluation import ocw.metrics as metrics import ocw.plotter as plotter +import ssl + +if hasattr(ssl, '_create_unverified_context'): + ssl._create_default_https_context = ssl._create_unverified_context + # File URL leader FILE_LEADER = "http://zipper.jpl.nasa.gov/dist/" # This way we can easily adjust the time span of the retrievals @@ -157,7 +162,7 @@ bias_evaluation.run() # Accessing the actual results when we have used 1 metric and 1 dataset is # done this way: print("Accessing the Results of the Evaluation run") -results = bias_evaluation.results[0][0] +results = bias_evaluation.results[0][0,:] # From the bias output I want to make a Contour Map of the region print("Generating a contour map using ocw.plotter.draw_contour_map()") http://git-wip-us.apache.org/repos/asf/climate/blob/d5a43a35/examples/model_ensemble_to_rcmed.py ---------------------------------------------------------------------- diff --git a/examples/model_ensemble_to_rcmed.py b/examples/model_ensemble_to_rcmed.py index 1f653a1..45ab599 100644 --- a/examples/model_ensemble_to_rcmed.py +++ b/examples/model_ensemble_to_rcmed.py @@ -29,6 +29,10 @@ import ocw.dataset_processor as dsp import ocw.evaluation as evaluation import ocw.metrics as metrics import ocw.plotter as plotter +import ssl + +if hasattr(ssl, '_create_unverified_context'): + ssl._create_default_https_context = ssl._create_unverified_context # File URL leader FILE_LEADER = "http://zipper.jpl.nasa.gov/dist/" @@ -168,7 +172,7 @@ bias_evaluation.run() # Accessing the actual results when we have used 3 datasets and 1 metric is # done this way: print("Accessing the Results of the Evaluation run") -results = bias_evaluation.results +results = bias_evaluation.results[0] # From the bias output I want to make a Contour Map of the region print("Generating a contour map using ocw.plotter.draw_contour_map()") @@ -178,9 +182,9 @@ lons = new_lons fname = OUTPUT_PLOT gridshape = (3, 1) # Using a 3 x 1 since we have a 1 year of data for 3 models plotnames = ["KNMI", "WRF311", "ENSEMBLE"] -for i, result in enumerate(results): +for i in np.arange(3): plot_title = "TASMAX Bias of CRU 3.1 vs. %s (%s - %s)" % (plotnames[i], start_time.strftime("%Y/%d/%m"), end_time.strftime("%Y/%d/%m")) output_file = "%s_%s" % (fname, plotnames[i].lower()) print "creating %s" % (output_file,) - plotter.draw_contour_map(result[0], lats, lons, output_file, - gridshape=gridshape, ptitle=plot_title) \ No newline at end of file + plotter.draw_contour_map(results[i,:], lats, lons, output_file, + gridshape=gridshape, ptitle=plot_title) http://git-wip-us.apache.org/repos/asf/climate/blob/d5a43a35/examples/multi_model_evaluation.py ---------------------------------------------------------------------- diff --git a/examples/multi_model_evaluation.py b/examples/multi_model_evaluation.py index 8136001..a09c526 100644 --- a/examples/multi_model_evaluation.py +++ b/examples/multi_model_evaluation.py @@ -16,6 +16,7 @@ # under the License. import datetime +import urllib import numpy as np from os import path @@ -37,8 +38,7 @@ if hasattr(ssl, '_create_unverified_context'): FILE_LEADER = "http://zipper.jpl.nasa.gov/dist/" # Three Local Model Files FILE_1 = "AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_pr.nc" -FILE_2 = "AFRICA_UC-WRF311_CTL_ERAINT_MM_50km-rg_1989-2008_pr.nc" -FILE_3 = "AFRICA_UCT-PRECIS_CTL_ERAINT_MM_50km_1989-2008_pr.nc" +FILE_2 = "AFRICA_UCT-PRECIS_CTL_ERAINT_MM_50km_1989-2008_pr.nc" # Filename for the output image/plot (without file extension) OUTPUT_PLOT = "pr_africa_bias_annual" #variable that we are analyzing @@ -73,19 +73,14 @@ if path.exists(FILE_2): else: urllib.urlretrieve(FILE_LEADER + FILE_2, FILE_2) -if path.exists(FILE_3): - pass -else: - urllib.urlretrieve(FILE_LEADER + FILE_3, FILE_3) """ Step 1: Load Local NetCDF File into OCW Dataset Objects and store in list""" target_datasets.append(local.load_file(FILE_1, varName, name="KNMI")) -target_datasets.append(local.load_file(FILE_2, varName, name="UC")) -target_datasets.append(local.load_file(FILE_3, varName, name="UCT")) +target_datasets.append(local.load_file(FILE_2, varName, name="UCT")) """ Step 2: Fetch an OCW Dataset Object from the data_source.rcmed module """ -print("Working with the rcmed interface to get CRU3.1 Daily Precipitation") +print("Working with the rcmed interface to get CRU3.1 Monthly Mean Precipitation") # the dataset_id and the parameter id were determined from # https://rcmes.jpl.nasa.gov/content/data-rcmes-database CRU31 = rcmed.parameter_dataset(10, 37, LAT_MIN, LAT_MAX, LON_MIN, LON_MAX, START, END) @@ -121,12 +116,9 @@ target_datasets.append(target_datasets_ensemble) #find the mean value #way to get the mean. Note the function exists in util.py _, CRU31.values = utils.calc_climatology_year(CRU31) -CRU31.values = np.expand_dims(CRU31.values, axis=0) for member, each_target_dataset in enumerate(target_datasets): _,target_datasets[member].values = utils.calc_climatology_year(target_datasets[member]) - target_datasets[member].values = np.expand_dims(target_datasets[member].values, axis=0) - for target in target_datasets: allNames.append(target.name) @@ -144,8 +136,7 @@ RCMs_to_CRU_evaluation.run() #extract the relevant data from RCMs_to_CRU_evaluation.results #the results returns a list (num_target_datasets, num_metrics). See docs for further details -rcm_bias = RCMs_to_CRU_evaluation.results[:][0] #remove the metric dimension -new_rcm_bias = np.squeeze(np.array(RCMs_to_CRU_evaluation.results)) +rcm_bias = RCMs_to_CRU_evaluation.results[0] -plotter.draw_contour_map(new_rcm_bias, new_lats, new_lons, gridshape=(2, 5),fname=OUTPUT_PLOT, subtitles=allNames, cmap='coolwarm_r') +plotter.draw_contour_map(rcm_bias, new_lats, new_lons, gridshape=(2, 3),fname=OUTPUT_PLOT, subtitles=allNames, cmap='coolwarm_r') http://git-wip-us.apache.org/repos/asf/climate/blob/d5a43a35/examples/multi_model_taylor_diagram.py ---------------------------------------------------------------------- diff --git a/examples/multi_model_taylor_diagram.py b/examples/multi_model_taylor_diagram.py index f91ab3e..48fc736 100644 --- a/examples/multi_model_taylor_diagram.py +++ b/examples/multi_model_taylor_diagram.py @@ -10,8 +10,13 @@ import ocw.utils as utils import datetime import numpy as np +import urllib from os import path +import ssl +if hasattr(ssl, '_create_unverified_context'): + ssl._create_default_https_context = ssl._create_unverified_context + # File URL leader FILE_LEADER = "http://zipper.jpl.nasa.gov/dist/" @@ -66,7 +71,7 @@ target_datasets.append(local.load_file(FILE_3, varName, name="UCT")) """ Step 2: Fetch an OCW Dataset Object from the data_source.rcmed module """ -print("Working with the rcmed interface to get CRU3.1 Daily Precipitation") +print("Working with the rcmed interface to get CRU3.1 Monthly Mean Precipitation") # the dataset_id and the parameter id were determined from # https://rcmes.jpl.nasa.gov/content/data-rcmes-database CRU31 = rcmed.parameter_dataset(10, 37, LAT_MIN, LAT_MAX, LON_MIN, LON_MAX, START, END) @@ -94,8 +99,7 @@ for member, each_target_dataset in enumerate(target_datasets): #find the mean values #way to get the mean. Note the function exists in util.py as def calc_climatology_year(dataset): -CRU31.values,_ = utils.calc_climatology_year(CRU31) -CRU31.values = np.expand_dims(CRU31.values, axis=0) +CRU31.values = utils.calc_temporal_mean(CRU31) #make the model ensemble target_datasets_ensemble = dsp.ensemble(target_datasets) @@ -105,8 +109,7 @@ target_datasets_ensemble.name="ENS" target_datasets.append(target_datasets_ensemble) for member, each_target_dataset in enumerate(target_datasets): - target_datasets[member].values,_ = utils.calc_climatology_year(target_datasets[member]) - target_datasets[member].values = np.expand_dims(target_datasets[member].values, axis=0) + target_datasets[member].values = utils.calc_temporal_mean(target_datasets[member]) allNames =[] @@ -114,8 +117,7 @@ for target in target_datasets: allNames.append(target.name) #calculate the metrics -pattern_correlation = metrics.PatternCorrelation() -spatial_std_dev = metrics.StdDevRatio() +taylor_diagram = metrics.SpatialPatternTaylorDiagram() #create the Evaluation object @@ -123,17 +125,12 @@ RCMs_to_CRU_evaluation = evaluation.Evaluation(CRU31, # Reference dataset for th # 1 or more target datasets for the evaluation target_datasets, # 1 or more metrics to use in the evaluation - [spatial_std_dev, pattern_correlation])#, mean_bias,spatial_std_dev_ratio, pattern_correlation]) + [taylor_diagram])#, mean_bias,spatial_std_dev_ratio, pattern_correlation]) RCMs_to_CRU_evaluation.run() -rcm_std_dev = [results[0] for results in RCMs_to_CRU_evaluation.results] -rcm_pat_cor = [results[1] for results in RCMs_to_CRU_evaluation.results] - -taylor_data = np.array([rcm_std_dev, rcm_pat_cor]).transpose() - -new_taylor_data = np.squeeze(np.array(taylor_data)) +taylor_data = RCMs_to_CRU_evaluation.results[0] -plotter.draw_taylor_diagram(new_taylor_data, +plotter.draw_taylor_diagram(taylor_data, allNames, "CRU31", fname=OUTPUT_PLOT, http://git-wip-us.apache.org/repos/asf/climate/blob/d5a43a35/examples/simple_model_to_model_bias_DJF_and_JJA.py ---------------------------------------------------------------------- diff --git a/examples/simple_model_to_model_bias_DJF_and_JJA.py b/examples/simple_model_to_model_bias_DJF_and_JJA.py deleted file mode 100644 index 364498a..0000000 --- a/examples/simple_model_to_model_bias_DJF_and_JJA.py +++ /dev/null @@ -1,64 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -import datetime -from os import path -import urllib - -import numpy as np - -import ocw.data_source.local as local -import ocw.dataset_processor as dsp -import ocw.evaluation as evaluation -import ocw.metrics as metrics -import ocw.plotter as plotter -import ocw.utils as utils - -# File URL leader -FILE_LEADER = "http://zipper.jpl.nasa.gov/dist/" -# Two Local Model Files -FILE_1 = "AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_tasmax.nc" -FILE_2 = "AFRICA_UC-WRF311_CTL_ERAINT_MM_50km-rg_1989-2008_tasmax.nc" -# Filename for the output image/plot (without file extension) -OUTPUT_PLOT = "wrf_bias_compared_to_knmi" - -FILE_1_PATH = path.join('/tmp', FILE_1) -FILE_2_PATH = path.join('/tmp', FILE_2) - -if not path.exists(FILE_1_PATH): - urllib.urlretrieve(FILE_LEADER + FILE_1, FILE_1_PATH) -if not path.exists(FILE_2_PATH): - urllib.urlretrieve(FILE_LEADER + FILE_2, FILE_2_PATH) - -""" Step 1: Load Local NetCDF Files into OCW Dataset Objects """ -print("Loading %s into an OCW Dataset Object" % (FILE_1_PATH,)) -knmi_dataset = local.load_file(FILE_1_PATH, "tasmax") -print("KNMI_Dataset.values shape: (times, lats, lons) - %s \n" % (knmi_dataset.values.shape,)) - -print("Loading %s into an OCW Dataset Object" % (FILE_2_PATH,)) -wrf_dataset = local.load_file(FILE_2_PATH, "tasmax") -print("WRF_Dataset.values shape: (times, lats, lons) - %s \n" % (wrf_dataset.values.shape,)) - -""" Step 2: Calculate seasonal average """ -print("Calculate seasonal average") -knmi_DJF_mean = utils.calc_temporal_mean(dsp.temporal_subset(month_start=12, month_end=2, target_dataset=knmi_dataset)) -wrf_DJF_mean = utils.calc_temporal_mean(dsp.temporal_subset(month_start=12, month_end=2, target_dataset=wrf_dataset)) -print("Seasonally averaged KNMI_Dataset.values shape: (times, lats, lons) - %s \n" % (knmi_DJF_mean.shape,)) -print("Seasonally averaged wrf_Dataset.values shape: (times, lats, lons) - %s \n" % (wrf_DJF_mean.shape,)) -knmi_JJA_mean = utils.calc_temporal_mean(dsp.temporal_subset(month_start=6, month_end=8, target_dataset=knmi_dataset)) -wrf_JJA_mean = utils.calc_temporal_mean(dsp.temporal_subset(month_start=6, month_end=8, target_dataset=wrf_dataset)) - http://git-wip-us.apache.org/repos/asf/climate/blob/d5a43a35/examples/subregions_portrait_diagram.py ---------------------------------------------------------------------- diff --git a/examples/subregions_portrait_diagram.py b/examples/subregions_portrait_diagram.py index 075de2d..d8d982f 100644 --- a/examples/subregions_portrait_diagram.py +++ b/examples/subregions_portrait_diagram.py @@ -14,6 +14,9 @@ import numpy.ma as ma from os import path import urllib +import ssl +if hasattr(ssl, '_create_unverified_context'): + ssl._create_default_https_context = ssl._create_unverified_context # File URL leader FILE_LEADER = "http://zipper.jpl.nasa.gov/dist/" @@ -61,7 +64,7 @@ target_datasets.append(local.load_file(FILE_2, varName, name="REGCM")) target_datasets.append(local.load_file(FILE_3, varName, name="UCT")) """ Step 2: Fetch an OCW Dataset Object from the data_source.rcmed module """ -print("Working with the rcmed interface to get CRU3.1 Daily Precipitation") +print("Working with the rcmed interface to get CRU3.1 Monthly Mean Precipitation") # the dataset_id and the parameter id were determined from # https://rcmes.jpl.nasa.gov/content/data-rcmes-database CRU31 = rcmed.parameter_dataset(10, 37, LAT_MIN, LAT_MAX, LON_MIN, LON_MAX, START, END) @@ -133,7 +136,7 @@ RCMs_to_CRU_evaluation.run() new_patcor = np.squeeze(np.array(RCMs_to_CRU_evaluation.results), axis=1) -plotter.draw_portrait_diagram(new_patcor,allNames, region_list, fname=OUTPUT_PLOT, fmt='png', cmap='coolwarm_r') +plotter.draw_portrait_diagram(np.transpose(new_patcor),allNames, region_list, fname=OUTPUT_PLOT, fmt='png', cmap='coolwarm_r') http://git-wip-us.apache.org/repos/asf/climate/blob/d5a43a35/examples/taylor_diagram_example.py ---------------------------------------------------------------------- diff --git a/examples/taylor_diagram_example.py b/examples/taylor_diagram_example.py index b08502e..4ed803e 100644 --- a/examples/taylor_diagram_example.py +++ b/examples/taylor_diagram_example.py @@ -85,23 +85,19 @@ wrf_dataset = dsp.spatial_regrid(wrf_dataset, new_lats, new_lons) # Load the metrics that we want to use for the evaluation. ################################################################################ -sstdr = metrics.StdDevRatio() -pc = metrics.PatternCorrelation() +taylor_diagram = metrics.SpatialPatternTaylorDiagram() # Create our new evaluation object. The knmi dataset is the evaluations # reference dataset. We then provide a list of 1 or more target datasets # to use for the evaluation. In this case, we only want to use the wrf dataset. # Then we pass a list of all the metrics that we want to use in the evaluation. ################################################################################ -test_evaluation = evaluation.Evaluation(knmi_dataset, [wrf_dataset], [sstdr, pc]) +test_evaluation = evaluation.Evaluation(knmi_dataset, [wrf_dataset], [taylor_diagram]) test_evaluation.run() # Pull our the evaluation results and prepare them for drawing a Taylor diagram. ################################################################################ -spatial_stddev_ratio = test_evaluation.results[0][0] -spatial_correlation = test_evaluation.results[0][1] - -taylor_data = numpy.array([[spatial_stddev_ratio], [spatial_correlation]]).transpose() +taylor_data = test_evaluation.results[0] # Draw our taylor diagram! ################################################################################ http://git-wip-us.apache.org/repos/asf/climate/blob/d5a43a35/examples/time_series_with_regions.py ---------------------------------------------------------------------- diff --git a/examples/time_series_with_regions.py b/examples/time_series_with_regions.py index 1d552a8..ec9516d 100644 --- a/examples/time_series_with_regions.py +++ b/examples/time_series_with_regions.py @@ -13,6 +13,10 @@ import numpy as np import numpy.ma as ma from os import path import urllib +import ssl +if hasattr(ssl, '_create_unverified_context'): + ssl._create_default_https_context = ssl._create_unverified_context + # File URL leader FILE_LEADER = "http://zipper.jpl.nasa.gov/dist/"
