From 925b5e71ceabd0339fc7e06b679fe38189157de4 Mon Sep 17 00:00:00 2001 From: Wojciech Jarmosz Date: Sun, 23 May 2021 14:53:17 +0200 Subject: [PATCH] Add MLFlow model generator && serving it --- Jenkinsfile_train | 6 ++ ml_model.py | 54 ++++++++++++++++++ .../meta.yaml | 15 +++++ .../tags/mlflow.source.git.commit | 1 + .../tags/mlflow.source.name | 1 + .../tags/mlflow.source.type | 1 + .../tags/mlflow.user | 1 + movies_on_streaming_platforms_model/MLmodel | 20 +++++++ .../conda.yaml | 10 ++++ .../data/keras_module.txt | 1 + .../data/model/keras_metadata.pb | 9 +++ .../data/model/saved_model.pb | Bin 0 -> 141392 bytes .../variables/variables.data-00000-of-00001 | Bin 0 -> 15070 bytes .../data/model/variables/variables.index | Bin 0 -> 2360 bytes .../data/save_format.txt | 1 + .../input_example.json | 1 + 16 files changed, 121 insertions(+) create mode 100644 ml_model.py create mode 100644 mlruns/0/724dc0d672664057b760fe5f18801036/meta.yaml create mode 100644 mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.git.commit create mode 100644 mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.name create mode 100644 mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.type create mode 100644 mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.user create mode 100644 movies_on_streaming_platforms_model/MLmodel create mode 100644 movies_on_streaming_platforms_model/conda.yaml create mode 100644 movies_on_streaming_platforms_model/data/keras_module.txt create mode 100644 movies_on_streaming_platforms_model/data/model/keras_metadata.pb create mode 100644 movies_on_streaming_platforms_model/data/model/saved_model.pb create mode 100644 movies_on_streaming_platforms_model/data/model/variables/variables.data-00000-of-00001 create mode 100644 movies_on_streaming_platforms_model/data/model/variables/variables.index create mode 100644 movies_on_streaming_platforms_model/data/save_format.txt create mode 100644 movies_on_streaming_platforms_model/input_example.json diff --git a/Jenkinsfile_train b/Jenkinsfile_train index 47bf9b6..7d05c39 100644 --- a/Jenkinsfile_train +++ b/Jenkinsfile_train @@ -20,8 +20,14 @@ pipeline { sh "python3 sacred_exp.py" } } + stage("Run MLFlow training"){ + steps { + sh "python3 ml_model.py ${verbose} ${epochs}" + } + } stage('Save trained model files') { steps{ + archiveArtifacts 'movies_on_streaming_platforms_model/**' archiveArtifacts 'sacred_file/**' archiveArtifacts 'linear_regression.h5' } diff --git a/ml_model.py b/ml_model.py new file mode 100644 index 0000000..d8954cf --- /dev/null +++ b/ml_model.py @@ -0,0 +1,54 @@ +import pandas as pd +import numpy as np +import tensorflow as tf +import os.path + +import mlflow +import sys + +from tensorflow import keras +from tensorflow.keras import layers +from tensorflow.keras.layers.experimental import preprocessing + +arguments = sys.argv[1:] + +verbose = int(arguments[0]) +epochs = int(arguments[1]) + + # Wczytanie danych +train_data = pd.read_csv("./MoviesOnStreamingPlatforms_updated.train") +test_data = pd.read_csv("./MoviesOnStreamingPlatforms_updated.test") + +# Stworzenie modelu +columns_to_use = ['Year', 'Runtime', 'Netflix'] +train_X = tf.convert_to_tensor(train_data[columns_to_use]) +train_Y = tf.convert_to_tensor(train_data[["IMDb"]]) + +test_X = tf.convert_to_tensor(test_data[columns_to_use]) +test_Y = tf.convert_to_tensor(test_data[["IMDb"]]) + +normalizer = preprocessing.Normalization(input_shape=[3,]) +normalizer.adapt(train_X) + +model = keras.Sequential([ + keras.Input(shape=(len(columns_to_use),)), + normalizer, + layers.Dense(30, activation='relu'), + layers.Dense(10, activation='relu'), + layers.Dense(25, activation='relu'), + layers.Dense(1) +]) + +model.compile(loss='mean_absolute_error', + optimizer=tf.keras.optimizers.Adam(0.001), + metrics=[tf.keras.metrics.RootMeanSquaredError()]) + +model.fit(train_X, train_Y, verbose=verbose, epochs=epochs) + +signature = mlflow.models.signature.infer_signature(train_X.numpy(), model.predict(train_X.numpy())) +input_data = test_X + +with mlflow.start_run(): + mlflow.keras.save_model(model, "movies_on_streaming_platforms_model", input_example=input_data.numpy(), signature=signature) + + diff --git a/mlruns/0/724dc0d672664057b760fe5f18801036/meta.yaml b/mlruns/0/724dc0d672664057b760fe5f18801036/meta.yaml new file mode 100644 index 0000000..89380dc --- /dev/null +++ b/mlruns/0/724dc0d672664057b760fe5f18801036/meta.yaml @@ -0,0 +1,15 @@ +artifact_uri: file:///Volumes/seagate/ium_434704/mlruns/0/724dc0d672664057b760fe5f18801036/artifacts +end_time: 1621772380826 +entry_point_name: '' +experiment_id: '0' +lifecycle_stage: active +name: '' +run_id: 724dc0d672664057b760fe5f18801036 +run_uuid: 724dc0d672664057b760fe5f18801036 +source_name: '' +source_type: 4 +source_version: '' +start_time: 1621772379167 +status: 3 +tags: [] +user_id: wj diff --git a/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.git.commit b/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.git.commit new file mode 100644 index 0000000..f31c988 --- /dev/null +++ b/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.git.commit @@ -0,0 +1 @@ +b82917a5d90e071de9b67f2b6648be0353c54b62 \ No newline at end of file diff --git a/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.name b/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.name new file mode 100644 index 0000000..87f4742 --- /dev/null +++ b/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.name @@ -0,0 +1 @@ +ml_model.py \ No newline at end of file diff --git a/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.type b/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.type new file mode 100644 index 0000000..0c2c1fe --- /dev/null +++ b/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.source.type @@ -0,0 +1 @@ +LOCAL \ No newline at end of file diff --git a/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.user b/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.user new file mode 100644 index 0000000..1fa4079 --- /dev/null +++ b/mlruns/0/724dc0d672664057b760fe5f18801036/tags/mlflow.user @@ -0,0 +1 @@ +wj \ No newline at end of file diff --git a/movies_on_streaming_platforms_model/MLmodel b/movies_on_streaming_platforms_model/MLmodel new file mode 100644 index 0000000..9a8b98e --- /dev/null +++ b/movies_on_streaming_platforms_model/MLmodel @@ -0,0 +1,20 @@ +flavors: + keras: + data: data + keras_module: tensorflow.keras + keras_version: 2.5.0 + save_format: tf + python_function: + data: data + env: conda.yaml + loader_module: mlflow.keras + python_version: 3.9.1 +saved_input_example_info: + artifact_path: input_example.json + format: tf-serving + type: ndarray +signature: + inputs: '[{"type": "tensor", "tensor-spec": {"dtype": "float64", "shape": [-1, 3]}}]' + outputs: '[{"type": "tensor", "tensor-spec": {"dtype": "float32", "shape": [-1, + 1]}}]' +utc_time_created: '2021-05-23 12:19:39.663838' diff --git a/movies_on_streaming_platforms_model/conda.yaml b/movies_on_streaming_platforms_model/conda.yaml new file mode 100644 index 0000000..17949eb --- /dev/null +++ b/movies_on_streaming_platforms_model/conda.yaml @@ -0,0 +1,10 @@ +channels: +- defaults +- conda-forge +dependencies: +- python=3.9.1 +- pip +- pip: + - mlflow + - tensorflow==2.5.0-rc1 +name: mlflow-env diff --git a/movies_on_streaming_platforms_model/data/keras_module.txt b/movies_on_streaming_platforms_model/data/keras_module.txt new file mode 100644 index 0000000..2c73dfd --- /dev/null +++ b/movies_on_streaming_platforms_model/data/keras_module.txt @@ -0,0 +1 @@ +tensorflow.keras \ No newline at end of file diff --git a/movies_on_streaming_platforms_model/data/model/keras_metadata.pb b/movies_on_streaming_platforms_model/data/model/keras_metadata.pb new file mode 100644 index 0000000..2cd9b0a --- /dev/null +++ b/movies_on_streaming_platforms_model/data/model/keras_metadata.pb @@ -0,0 +1,9 @@ + +,root"_tf_keras_sequential*,{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 3]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "input_1"}}, {"class_name": "Normalization", "config": {"name": "normalization", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3]}, "dtype": "float32", "axis": {"class_name": "__tuple__", "items": [-1]}}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 30, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 10, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 25, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 14, "build_input_shape": {"class_name": "TensorShape", "items": [null, 3]}, "is_graph_network": true, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 3]}, "float32", "input_1"]}, "keras_version": "2.5.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 3]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "input_1"}, "shared_object_id": 0}, {"class_name": "Normalization", "config": {"name": "normalization", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3]}, "dtype": "float32", "axis": {"class_name": "__tuple__", "items": [-1]}}, "shared_object_id": 1}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 30, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 2}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 3}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 4}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 10, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 5}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 6}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 7}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 25, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 8}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 9}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 10}, {"class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 11}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 12}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 13}]}}, "training_config": {"loss": "mean_absolute_error", "metrics": [[{"class_name": "RootMeanSquaredError", "config": {"name": "root_mean_squared_error", "dtype": "float32"}, "shared_object_id": 15}]], "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adam", "config": {"name": "Adam", "learning_rate": 0.0010000000474974513, "decay": 0.0, "beta_1": 0.8999999761581421, "beta_2": 0.9990000128746033, "epsilon": 1e-07, "amsgrad": false}}}}2 +root.layer_with_weights-0"_tf_keras_layer*{"name": "normalization", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3]}, "stateful": true, "must_restore_from_config": true, "class_name": "Normalization", "config": {"name": "normalization", "trainable": true, "batch_input_shape": {"class_name": "__tuple__", "items": [null, 3]}, "dtype": "float32", "axis": {"class_name": "__tuple__", "items": [-1]}}, "shared_object_id": 1, "build_input_shape": [null, 3]}2 +root.layer_with_weights-1"_tf_keras_layer*{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 30, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 2}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 3}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 4, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 3}}, "shared_object_id": 16}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 3]}}2 +root.layer_with_weights-2"_tf_keras_layer*{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 10, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 5}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 6}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 7, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 30}}, "shared_object_id": 17}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 30]}}2 +root.layer_with_weights-3"_tf_keras_layer*{"name": "dense_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 25, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 8}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 9}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 10, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 10}}, "shared_object_id": 18}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 10]}}2 +root.layer_with_weights-4"_tf_keras_layer*{"name": "dense_3", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "class_name": "Dense", "config": {"name": "dense_3", "trainable": true, "dtype": "float32", "units": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 11}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 12}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 13, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 25}}, "shared_object_id": 19}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 25]}}2 +Jroot.keras_api.metrics.0"_tf_keras_metric*{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 20}2 +Kroot.keras_api.metrics.1"_tf_keras_metric*{"class_name": "RootMeanSquaredError", "name": "root_mean_squared_error", "dtype": "float32", "config": {"name": "root_mean_squared_error", "dtype": "float32"}, "shared_object_id": 15}2 \ No newline at end of file diff --git a/movies_on_streaming_platforms_model/data/model/saved_model.pb b/movies_on_streaming_platforms_model/data/model/saved_model.pb new file mode 100644 index 0000000000000000000000000000000000000000..195fa6c73a645861a74b2b0b9fe457feace8fd11 GIT binary patch literal 141392 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 literal 0 HcmV?d00001 diff --git a/movies_on_streaming_platforms_model/data/model/variables/variables.data-00000-of-00001 b/movies_on_streaming_platforms_model/data/model/variables/variables.data-00000-of-00001 new file mode 100644 index 0000000000000000000000000000000000000000..4c4d9d52ee776d6ea1e3f24c708a3ffe61629506 GIT binary patch literal 15070 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 literal 0 HcmV?d00001 diff --git a/movies_on_streaming_platforms_model/data/save_format.txt b/movies_on_streaming_platforms_model/data/save_format.txt new file mode 100644 index 0000000..439ab29 --- /dev/null +++ b/movies_on_streaming_platforms_model/data/save_format.txt @@ -0,0 +1 @@ +tf \ No newline at end of file diff --git a/movies_on_streaming_platforms_model/input_example.json b/movies_on_streaming_platforms_model/input_example.json new file mode 100644 index 0000000..64a4e35 --- /dev/null +++ b/movies_on_streaming_platforms_model/input_example.json @@ -0,0 +1 @@ +{"inputs": [[2015.0, 0.3333333333333333, 0.0], [2018.0, 0.4417670682730923, 0.0], [2018.0, 0.3253012048192771, 0.0], [2012.0, 0.3172690763052208, 0.0], [2002.0, 0.3654618473895582, 0.0], [2001.0, 0.4538152610441767, 1.0], [1980.0, 0.3734939759036144, 0.0], [2016.0, 0.4257028112449799, 0.0], [2020.0, 0.3815261044176706, 1.0], [2011.0, 0.3172690763052208, 0.0], [1992.0, 0.4417670682730923, 0.0], [2013.0, 0.3694779116465863, 0.0], [2006.0, 0.3775100401606425, 0.0], [2017.0, 0.2771084337349397, 0.0], [2017.0, 0.3293172690763052, 1.0], [2003.0, 0.3493975903614457, 0.0], [2018.0, 0.5502008032128514, 1.0], [1975.0, 0.4658634538152609, 0.0], [2004.0, 0.3534136546184738, 1.0], [2014.0, 0.3975903614457831, 0.0], [2019.0, 0.3052208835341365, 0.0], [1992.0, 0.3574297188755019, 0.0], [1995.0, 0.4176706827309236, 0.0], [2007.0, 0.570281124497992, 0.0], [2011.0, 0.3815261044176706, 0.0], [2018.0, 0.2891566265060241, 0.0], [2014.0, 0.3654618473895582, 0.0], [1972.0, 0.3734939759036144, 0.0], [2014.0, 0.3654618473895582, 0.0], [2015.0, 0.2971887550200803, 0.0], [2019.0, 0.3574297188755019, 0.0], [2017.0, 0.36144578313253, 1.0], [2018.0, 0.3373493975903614, 0.0], [2017.0, 0.3493975903614457, 1.0], [2017.0, 0.3493975903614457, 0.0], [2010.0, 0.4618473895582329, 1.0], [1998.0, 0.3574297188755019, 1.0], [2019.0, 0.3413654618473895, 1.0], [2011.0, 0.4337349397590361, 1.0], [2017.0, 0.3493975903614457, 0.0], [2014.0, 0.5220883534136546, 1.0], [2007.0, 0.3574297188755019, 0.0], [1995.0, 0.3815261044176706, 0.0], [2016.0, 0.5502008032128514, 1.0], [1992.0, 0.4257028112449799, 1.0], [2019.0, 0.3694779116465863, 0.0], [2000.0, 0.3052208835341365, 0.0], [2014.0, 0.3052208835341365, 0.0], [2017.0, 0.4337349397590361, 0.0], [2001.0, 0.4497991967871486, 1.0], [2012.0, 0.3253012048192771, 1.0], [2015.0, 0.3453815261044176, 0.0], [2014.0, 0.502008032128514, 0.0], [2016.0, 0.3855421686746987, 1.0], [1998.0, 0.4377510040160642, 1.0], [2010.0, 0.4417670682730923, 0.0], [1998.0, 0.285140562248996, 1.0], [2018.0, 0.4216867469879518, 0.0], [1996.0, 0.3132530120481927, 0.0], [1975.0, 0.3855421686746987, 0.0], [2014.0, 0.321285140562249, 1.0], [2010.0, 0.4136546184738955, 1.0], [2019.0, 0.3453815261044176, 1.0], [2015.0, 0.3373493975903614, 0.0], [2017.0, 0.3132530120481927, 0.0], [2017.0, 0.4096385542168674, 0.0], [2010.0, 0.3694779116465863, 1.0], [2003.0, 0.5301204819277108, 0.0], [2013.0, 0.6787148594377509, 1.0], [1984.0, 0.4377510040160642, 0.0], [2016.0, 0.3293172690763052, 0.0], [2018.0, 0.3333333333333333, 0.0], [2016.0, 0.3253012048192771, 0.0], [1995.0, 0.3654618473895582, 0.0], [2000.0, 0.4337349397590361, 0.0], [2009.0, 0.6385542168674698, 1.0], [2008.0, 0.8112449799196786, 1.0], [2004.0, 0.3012048192771084, 1.0], [2018.0, 0.3775100401606425, 0.0], [2013.0, 0.3373493975903614, 0.0], [1974.0, 0.4096385542168674, 0.0], [1985.0, 0.3293172690763052, 0.0], [2008.0, 0.4176706827309236, 0.0], [2016.0, 0.3574297188755019, 0.0], [2018.0, 0.4417670682730923, 0.0], [2009.0, 0.3333333333333333, 0.0], [2016.0, 0.3493975903614457, 0.0], [2012.0, 0.3855421686746987, 1.0], [1983.0, 0.3534136546184738, 0.0], [2019.0, 0.3734939759036144, 0.0], [1970.0, 0.2690763052208835, 0.0], [1989.0, 0.4658634538152609, 1.0], [2018.0, 0.5542168674698794, 1.0], [1998.0, 0.4337349397590361, 0.0], [2017.0, 0.5140562248995983, 0.0], [2002.0, 0.3534136546184738, 0.0], [1986.0, 0.3815261044176706, 0.0], [1993.0, 0.3694779116465863, 0.0], [1998.0, 0.2891566265060241, 0.0], [2015.0, 0.3534136546184738, 1.0], [2016.0, 0.4779116465863453, 0.0], [2002.0, 0.5582329317269076, 0.0], [2014.0, 0.3253012048192771, 0.0], [2016.0, 0.5461847389558232, 0.0], [1978.0, 0.3775100401606425, 0.0], [2019.0, 0.393574297188755, 0.0], [2009.0, 0.5060240963855421, 1.0], [2008.0, 0.3734939759036144, 0.0], [1999.0, 0.4257028112449799, 0.0], [1997.0, 0.4056224899598393, 0.0], [2006.0, 0.4979919678714859, 0.0], [2006.0, 0.4257028112449799, 0.0], [2018.0, 0.4457831325301204, 0.0], [2015.0, 0.3092369477911646, 0.0], [2016.0, 0.3333333333333333, 0.0], [1969.0, 0.3493975903614457, 0.0], [2006.0, 0.3815261044176706, 1.0], [2015.0, 0.3172690763052208, 0.0], [1962.0, 0.4176706827309236, 0.0], [2012.0, 0.3373493975903614, 0.0], [1978.0, 0.3373493975903614, 0.0], [2017.0, 0.3775100401606425, 1.0], [2017.0, 0.2730923694779116, 0.0], [1995.0, 0.4016064257028112, 0.0], [2012.0, 0.36144578313253, 0.0], [2012.0, 0.3574297188755019, 1.0], [1990.0, 0.429718875502008, 1.0], [2009.0, 0.3012048192771084, 0.0], [2018.0, 0.5140562248995983, 0.0], [2013.0, 0.2811244979919678, 0.0], [2013.0, 0.36144578313253, 0.0], [2014.0, 0.4096385542168674, 1.0], [2015.0, 0.3694779116465863, 0.0], [1993.0, 0.3293172690763052, 0.0], [1985.0, 0.3333333333333333, 0.0], [1987.0, 0.3654618473895582, 0.0], [2013.0, 0.3333333333333333, 0.0], [2001.0, 0.3253012048192771, 0.0], [1980.0, 0.2971887550200803, 0.0], [2019.0, 0.393574297188755, 0.0], [2015.0, 0.3574297188755019, 0.0], [2014.0, 0.4457831325301204, 1.0], [1981.0, 0.3534136546184738, 1.0], [2011.0, 0.3253012048192771, 0.0], [2014.0, 0.4377510040160642, 0.0], [2005.0, 0.3493975903614457, 0.0], [1972.0, 0.3574297188755019, 0.0], [2004.0, 0.3574297188755019, 1.0], [2004.0, 0.3975903614457831, 0.0], [2010.0, 0.3453815261044176, 0.0], [1984.0, 0.3333333333333333, 0.0], [2010.0, 0.4899598393574297, 0.0], [1985.0, 0.3172690763052208, 0.0], [2010.0, 0.4377510040160642, 1.0], [2001.0, 0.3052208835341365, 0.0], [2014.0, 0.3574297188755019, 0.0], [2014.0, 0.2891566265060241, 1.0], [2005.0, 0.2811244979919678, 1.0], [1982.0, 0.3373493975903614, 0.0], [2018.0, 0.3373493975903614, 1.0], [2016.0, 0.3132530120481927, 0.0], [2019.0, 0.3333333333333333, 0.0], [2014.0, 0.3293172690763052, 1.0], [2013.0, 0.3012048192771084, 1.0], [1972.0, 0.3815261044176706, 0.0], [1987.0, 0.3253012048192771, 0.0], [2014.0, 0.2650602409638554, 0.0], [2018.0, 0.3975903614457831, 1.0], [2005.0, 0.3975903614457831, 0.0], [1982.0, 0.4216867469879518, 1.0], [1986.0, 0.2971887550200803, 0.0], [1985.0, 0.502008032128514, 0.0], [2007.0, 0.3493975903614457, 0.0], [2017.0, 0.4497991967871486, 0.0], [1995.0, 0.3373493975903614, 0.0], [2001.0, 0.3373493975903614, 0.0], [2009.0, 0.3132530120481927, 0.0], [2013.0, 0.3493975903614457, 0.0], [2017.0, 0.285140562248996, 1.0], [2014.0, 0.4337349397590361, 0.0], [2011.0, 0.4337349397590361, 0.0], [2008.0, 0.3574297188755019, 0.0], [2017.0, 0.4216867469879518, 1.0], [1996.0, 0.393574297188755, 0.0], [2016.0, 0.3815261044176706, 0.0], [2018.0, 0.3493975903614457, 1.0], [2012.0, 0.5622489959839357, 1.0], [2017.0, 0.4016064257028112, 0.0], [2002.0, 0.2891566265060241, 0.0], [1976.0, 0.3855421686746987, 0.0], [1996.0, 0.4497991967871486, 0.0], [2009.0, 0.2971887550200803, 0.0], [2012.0, 0.2771084337349397, 0.0], [1981.0, 0.3534136546184738, 0.0], [2006.0, 0.3293172690763052, 0.0], [2014.0, 0.3734939759036144, 0.0], [2006.0, 0.5622489959839357, 0.0], [2018.0, 0.3493975903614457, 0.0], [1984.0, 0.3333333333333333, 0.0], [1990.0, 0.3895582329317268, 0.0], [2001.0, 0.3172690763052208, 0.0], [1999.0, 0.3975903614457831, 1.0], [1971.0, 0.3413654618473895, 0.0], [2014.0, 0.3574297188755019, 0.0], [2009.0, 0.36144578313253, 0.0], [1977.0, 0.3855421686746987, 0.0], [2011.0, 0.3775100401606425, 0.0], [2017.0, 0.3253012048192771, 0.0], [2010.0, 0.3975903614457831, 0.0], [1996.0, 0.3574297188755019, 1.0], [2017.0, 0.3172690763052208, 0.0], [2015.0, 0.3132530120481927, 0.0], [2013.0, 0.3534136546184738, 1.0], [2011.0, 0.3373493975903614, 0.0], [2014.0, 0.4016064257028112, 1.0], [2010.0, 0.3172690763052208, 0.0], [2000.0, 0.3975903614457831, 0.0], [2004.0, 0.3815261044176706, 0.0], [2014.0, 0.3574297188755019, 0.0], [2011.0, 0.3293172690763052, 1.0], [2014.0, 0.3815261044176706, 1.0], [2017.0, 0.3333333333333333, 1.0], [2017.0, 0.3052208835341365, 1.0], [2016.0, 0.4377510040160642, 0.0], [1981.0, 0.2570281124497992, 0.0], [2006.0, 0.2730923694779116, 0.0], [2009.0, 0.4738955823293173, 1.0], [1979.0, 0.2690763052208835, 1.0], [1989.0, 0.2891566265060241, 0.0], [2014.0, 0.3132530120481927, 1.0], [2008.0, 0.2891566265060241, 0.0], [1981.0, 0.3895582329317268, 0.0], [2012.0, 0.4859437751004015, 0.0], [2005.0, 0.2449799196787148, 1.0], [2018.0, 0.3895582329317268, 0.0], [1994.0, 0.4337349397590361, 0.0], [2002.0, 0.3734939759036144, 0.0], [2011.0, 0.321285140562249, 1.0], [1997.0, 0.4176706827309236, 1.0], [1961.0, 0.2730923694779116, 0.0], [2018.0, 0.3534136546184738, 1.0], [2010.0, 0.3333333333333333, 0.0], [2016.0, 0.4056224899598393, 1.0], [2018.0, 0.4899598393574297, 1.0], [2014.0, 0.321285140562249, 0.0], [1995.0, 0.36144578313253, 1.0], [2018.0, 0.3333333333333333, 1.0], [2018.0, 0.36144578313253, 0.0], [1976.0, 0.3172690763052208, 0.0], [2018.0, 0.3855421686746987, 0.0], [1955.0, 0.3815261044176706, 0.0], [2009.0, 0.4176706827309236, 1.0], [2010.0, 0.3253012048192771, 0.0], [2007.0, 0.3574297188755019, 0.0], [1996.0, 0.3293172690763052, 0.0], [2017.0, 0.4979919678714859, 1.0], [2009.0, 0.393574297188755, 0.0], [2013.0, 0.3333333333333333, 0.0], [2014.0, 0.4538152610441767, 0.0], [2012.0, 0.3172690763052208, 1.0], [2019.0, 0.3413654618473895, 1.0], [2011.0, 0.3855421686746987, 0.0], [2007.0, 0.3092369477911646, 1.0], [2011.0, 0.3654618473895582, 0.0], [2002.0, 0.3453815261044176, 0.0], [2017.0, 0.5301204819277108, 0.0], [2006.0, 0.4136546184738955, 0.0], [2013.0, 0.4497991967871486, 1.0], [2001.0, 0.4016064257028112, 0.0], [2004.0, 0.3534136546184738, 0.0], [2017.0, 0.36144578313253, 1.0], [2008.0, 0.4497991967871486, 1.0], [2000.0, 0.2811244979919678, 1.0], [2017.0, 0.0441767068273092, 0.0], [2014.0, 0.4979919678714859, 0.0], [2017.0, 0.3172690763052208, 1.0], [2013.0, 0.3253012048192771, 0.0], [2002.0, 0.2610441767068273, 0.0], [2017.0, 0.3333333333333333, 1.0], [2012.0, 0.5301204819277108, 0.0], [1984.0, 0.3815261044176706, 0.0], [1995.0, 0.3172690763052208, 0.0], [2016.0, 0.4899598393574297, 1.0], [2008.0, 0.4136546184738955, 0.0], [2010.0, 0.3855421686746987, 0.0], [2016.0, 0.3333333333333333, 1.0], [2009.0, 0.3092369477911646, 0.0], [2012.0, 0.4417670682730923, 0.0], [2008.0, 0.6224899598393574, 1.0], [1987.0, 0.3012048192771084, 0.0], [2008.0, 0.3975903614457831, 1.0], [1985.0, 0.393574297188755, 0.0], [1986.0, 0.3775100401606425, 0.0], [2007.0, 0.3534136546184738, 0.0], [2017.0, 0.3975903614457831, 0.0], [1959.0, 0.3293172690763052, 0.0], [2005.0, 0.3975903614457831, 0.0], [2012.0, 0.3815261044176706, 0.0], [2006.0, 0.4377510040160642, 0.0], [1996.0, 0.4337349397590361, 0.0], [2016.0, 0.3253012048192771, 1.0], [2015.0, 0.3855421686746987, 0.0], [2004.0, 0.7269076305220883, 0.0], [2011.0, 0.2771084337349397, 1.0], [2003.0, 0.36144578313253, 0.0], [2014.0, 0.3333333333333333, 0.0], [2013.0, 0.3694779116465863, 0.0], [1985.0, 0.5100401606425702, 0.0], [2018.0, 0.3654618473895582, 1.0], [1971.0, 0.321285140562249, 0.0], [2000.0, 0.3012048192771084, 0.0], [2017.0, 0.393574297188755, 0.0], [1974.0, 0.4779116465863453, 0.0], [2018.0, 0.3895582329317268, 0.0], [2010.0, 0.3574297188755019, 0.0], [2018.0, 0.4216867469879518, 1.0], [2009.0, 0.3172690763052208, 0.0], [2008.0, 0.3172690763052208, 0.0], [2008.0, 0.3413654618473895, 1.0], [2017.0, 0.321285140562249, 0.0], [2015.0, 0.3815261044176706, 1.0], [1979.0, 0.3453815261044176, 0.0], [2012.0, 0.3373493975903614, 0.0], [1985.0, 0.4216867469879518, 0.0], [2005.0, 0.3373493975903614, 0.0], [2009.0, 0.429718875502008, 0.0], [2015.0, 0.3895582329317268, 1.0], [2016.0, 0.2891566265060241, 1.0], [2013.0, 0.321285140562249, 0.0], [2017.0, 0.4698795180722891, 0.0], [1992.0, 0.4979919678714859, 0.0]]} \ No newline at end of file