diff --git a/solventmapcreator/polynomialanalysis/polynomialanalysisplotting.py b/solventmapcreator/polynomialanalysis/polynomialanalysisplotting.py index 18b7b9c79dee25b0363526708a76323b7e53ead7..9380f96a31dd2ad95e992f2311b81b700061f1e9 100644 --- a/solventmapcreator/polynomialanalysis/polynomialanalysisplotting.py +++ b/solventmapcreator/polynomialanalysis/polynomialanalysisplotting.py @@ -18,6 +18,29 @@ LOGGER.setLevel(logging.WARN) COLOUR_LIST = ["orangered", "mediumblue", "green", "red", "darkturquoise", "darkmagenta", "darkorange", "olive", "navy", "forestgreen"] +def create_and_write_bar_plot_rmse(input_data, filename_stem, **kwargs): + """This creates and writes bar plot. + """ + bar_plot, bar_plot_axis = create_bar_plot_rmse(input_data, **kwargs) + fileformat = kwargs.get("fileformat", "eps") + output_filename = filename_stem + '.' + fileformat + plt.savefig(output_filename, format=fileformat) + plt.close(bar_plot) + return 0 + +def create_bar_plot_rmse(input_data, **kwargs): + """This creates a bar plot where the mean RMSE by order is plotted. + """ + bar_plot, bar_plot_axis = create_plot_with_axis(kwargs.get("figsize", + plottinginput.FIGURE_SIZES['vertical bar chart'])) + index = np.arange(len(input_data[0])) + bar_plot_axis.bar(index, input_data[1]) + bar_plot_axis.set_ylabel("Average RMSE/$kJmol^{-1}$") + bar_plot_axis.set_xlabel("polynomial order") + bar_plot_axis.set_xticks(index) + bar_plot_axis.set_xticklabels(input_data[0]) + return bar_plot, bar_plot_axis + def create_bar_plot_write_to_file(input_data, filename_stem, **kwargs): """This creates the bar plot and saves it to file. """ diff --git a/solventmapcreator/polynomialanalysis/polynomialdataanalysis.py b/solventmapcreator/polynomialanalysis/polynomialdataanalysis.py index 619740b0da84255808f17db1ea5cf9a7edab3058..ecd774ce5537cc931f542277b9ad67bd0915c799 100644 --- a/solventmapcreator/polynomialanalysis/polynomialdataanalysis.py +++ b/solventmapcreator/polynomialanalysis/polynomialdataanalysis.py @@ -15,6 +15,32 @@ logging.basicConfig() LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.WARN) +def get_mean_rmse_by_order_asarray(polynomial_dict_by_solvent_id, order_list): + """This gets the mean RMSE by order and returns it as an (2,n) array. + """ + mean_rmse_dict = get_mean_rmse_by_order(polynomial_dict_by_solvent_id, order_list) + mean_rmse_array = np.empty((2, len(order_list))) + for i in range(len(order_list)): + order = order_list[i] + mean_rmse_array[0][i] = order + mean_rmse_array[1][i] = mean_rmse_dict[order] + return mean_rmse_array + +def get_mean_rmse_by_order(polynomial_dict_by_solvent_id, order_list): + """This gets the mean RMSE by order. + """ + mean_rmse_dict = {} + for order in order_list: + mean_rmse_dict[order] = get_mean_rmse(polynomial_dict_by_solvent_id, order) + return mean_rmse_dict + +def get_mean_rmse(polynomial_dict_by_solvent_id, order): + """This extracts the + """ + rmse_array = np.array([polynomial_dict_by_solvent_id[solvent_id][order]["RMSE"] for solvent_id in polynomial_dict_by_solvent_id.keys()]) + return rmse_array.mean() + + def get_total_sorted_by_alt_metric(full_order_list, best_order_sorted_dict): """This gets the sorted information and orders them ready to plot them. Need to feed in a list of all the orders, as not all may appear. diff --git a/solventmapcreator/test/polynomialanalysistest/polynomialdataanalysistest.py b/solventmapcreator/test/polynomialanalysistest/polynomialdataanalysistest.py index 230bcc0f71b0d6ab07ecedbd95fd7b914f519298..d659cc8a5d86317e8c7c5677cd69ce6facbdf668 100644 --- a/solventmapcreator/test/polynomialanalysistest/polynomialdataanalysistest.py +++ b/solventmapcreator/test/polynomialanalysistest/polynomialdataanalysistest.py @@ -49,6 +49,26 @@ class PolynomialDataAnalysisTestCase(unittest.TestCase): del self.expected_data_by_solvent_id del self.rmse_dict del self.covar_dict + def test_get_mean_rmse_by_order_asarray(self): + """Test to see if expected array is returned. + """ + expected_array = np.array([[1.0, 2.0], [0.020430299999999998, 0.0304303]]) + actual_array = polynomialdataanalysis.get_mean_rmse_by_order_asarray(self.expected_data_by_solvent_id, [1,2]) + np.testing.assert_array_almost_equal(expected_array, actual_array) + def test_get_mean_rmse_by_order(self): + """Test to see if expected dict is returned. + """ + expected_dict = {1:0.020430299999999998, 2:0.0304303} + actual_dict = polynomialdataanalysis.get_mean_rmse_by_order(self.expected_data_by_solvent_id, [1,2]) + self.assertEqual(sorted(expected_dict.keys()), sorted(actual_dict.keys())) + for key in expected_dict.keys(): + self.assertAlmostEqual(expected_dict[key], actual_dict[key]) + def test_get_mean_rmse(self): + """Test to see if expected mean is returned + """ + expected_mean = 0.020430299999999998 + actual_mean = polynomialdataanalysis.get_mean_rmse(self.expected_data_by_solvent_id, 1) + self.assertAlmostEqual(expected_mean, actual_mean) def test_get_total_sorted_by_alt_metric(self): """Test to see if """