示例#1
0
    def create(cls, site_config):
        """Create a new site

        Args:
            site_config (dict): config for site to create

        Returns:
            str: the site id for the newly created site

        Raises:
            rebase.InvalidUsageError: if site_config is missing some required fields

        Example::

            >>> site_config = {
                'latitude': 51,
                'longitude': 7
            }
            >>> site_id = rb.Site.create(site_config)
            >>> print(site_id)
            4ab82692-3944-4069-9cbb-f9c59513c1c3
        """
        path = '{}/site/create'.format(cls.base_path)
        json_site = json.dumps(site_config)
        response = api_request.post(path, data=json_site)
        return response.json()
示例#2
0
def train(model_id, start_date, end_date):
    """Trigger the training for a specific model

    Args:
        model_id (str): the id of the model
        start_date (datetime): the start date of training period
        end_date (datetime): the end date of training period

    Returns:
        str: -

    Example::

        from datetime import datetime

        model_id = 'd9ed55d2-4c7f-4486-a55d-fba8cb2c8791'
        start_date = datetime(2020, 2, 3, 0, 0)
        end_date = datetime(2021, 1, 4, 0, 0)

        rb.train(model_id, start_date, end_date)
    """
    path = 'platform/v1/model/train/{}'.format(model_id)
    data = {
        'start_date': start_date,
        'end_date': end_date
    }
    r = api_request.post(path, data=json.dumps(data))
    if r.status_code != 200:
        raise Exception(f"Error starting train for model {model_id}: {r.content.decode('utf-8')}")
    return r.content.decode('utf-8')
示例#3
0
 def create(cls, packages):
     path = '{}/layer/create'.format(cls.base_path)
     data = json.dumps({'packages': packages})
     response = api_request.post(path, data=data)
     if response.status_code == 400:
         raise InvalidInputError(response.text)
     return response.json()
示例#4
0
def create(site_id, model):
    """Create a new model for the specified site

    Args:
        site_id (str): the id of the site
        model (class): the model class to create

    Returns:
        str: -

    Example::

        class MyModel(rb.Model):
            # your code
            ...

        site_id = '4ab82692-3944-4069-9cbb-f9c59513c1c3'
        rb.create(site_id, MyModel)
    """
    data = dill.dumps(model, recurse=True)

    params = {'model_name': model.__name__}
    path = 'platform/v1/model/custom/create/{}'.format(site_id)
    r = api_request.post(path, params=params, data=data)
    if r.status_code != 200:
        raise Exception(f"Error creating model for site {site_id}: {r.content.decode('utf-8')}")
    return r.json()
示例#5
0
def update(model_id, model):
    """Update an existing model for a specified site

    Args:
        site_id (str): the id of the site
        model (class): the model class to create

    Returns:
        str: -

    Example::

        class MyNewModel(rb.Model):
            # your code
            ...

        model_id = '4ab82692-3944-4069-9cbb-f9c59513c1c3'
        rb.update(model_id, MyNewModel)
    """

    data = dill.dumps(model, recurse=True)
    params = {'model_name': model.__name__}
    path = 'platform/v1/model/custom/update/{}'.format(model_id)
    r = api_request.post(path, params=params, data=data)
    if r.status_code == 200:
        print('Ok, updated model {}'.format(model_id))
    else:
        raise Exception('Failed updating model {}'.format(model_id))
示例#6
0
    def deploy(cls, pred):
        print("Deploying {}".format(pred.name))
        path = 'platform/v1/site/train/{}'.format(pred.site_id)

        response = api_request.post(path)
        if response.status_code == 200:
            print("Success!")
        else:
            print("Failed")
示例#7
0
def hyperparam_search(model_id, params={}, hyperparams={}, n_trials=10, compute_params={}):
    path = 'platform/v1/model/hyperparam_search/{}'.format(model_id)
    params['model_id'] = model_id
    params['api_key'] = rb.api_key
    data = {
        'params': params,
        'hyperparams': hyperparams,
        'n_trials': n_trials,
        'compute_params': compute_params
    }
    r = api_request.post(path, data=json.dumps(data))
    if r.status_code != 200:
        raise Exception(f"Error starting hyperparam_search for model {model_id}: {r.content.decode('utf-8')}")
    return r.json()
示例#8
0
def report_result(model_id, job_name=None, params={}, score=None, exception=None):
    path = 'platform/v1/model/hyperparam_result/{}'.format(model_id)
    params['model_id'] = model_id
    params['api_key'] = rb.api_key
    data = {
        'job_name': job_name,
        'params': params,
        'score': score,
        'exception': exception
    }
    r = api_request.post(path, data=json.dumps(data))
    if r.status_code != 200:
        raise Exception(f"Error reporting hyperparam result for model {model_id}: {r.content.decode('utf-8')}")
    return r.json()
示例#9
0
    def upload_single_forecast(self, ref_time, df_ref_time):
        to_iso = lambda d : d.strftime('%Y%m%dT%H:%M:%SZ')
        data = {
            'ref_time': to_iso(ref_time),
            'valid_time': [to_iso(d) for d in df_ref_time.index],
            'forecast': df_ref_time['forecast'].values.tolist()
        }

        path = 'platform/v1/model/custom/forecast/upload/{}'.format(self.model_id)
        r = api_request.post(path, data=json.dumps(data))
        if r.status_code != 200:
            raise Exception(f'Failed uploading forecast: model_id: {self.model_id}', r.status_code)

        return True
示例#10
0
    def upload(cls, site_id, df):
        """Upload observed data for your site. This data is used when training a model.

        Args:
            site_id (str): id of site to upload data for
            df (pandas.DataFrame): DataFrame with the following format

                ::

                    >>>
                             valid_time                observation

                    0        2020-01-22 00:00:00+00:00       126.3
                    1        2020-01-22 00:15:00+00:00       122.7
                    .        ...                             ...
                    n-1      2020-10-17 23:30:00+00:00       169.2
                    n        2020-10-17 23:45:00+00:00       176.6

        Example::

            >>> import pandas as pd
            >>> site_id = '4ab82692-3944-4069-9cbb-f9c59513c1c3'
            >>> df = pd.read_csv('example_data.csv')
            >>> rb.Site.upload(site_id, df)
            Success!
        """
        path = '{}/site/measurement/upload_2/{}'.format(cls.base_path, site_id)
        df = df.dropna()
        data = {
            'valid_time':
            pd.to_datetime(df['valid_time']).dt.strftime(
                '%Y-%m-%dT%H:%M:%SZ').values.tolist(),
            'measurement':
            df['observation'].values.tolist(),
            'type':
            'ProductionPower'
        }
        response = api_request.post(path, data=json.dumps(data))
        if response.status_code == 200:
            print("Success! Data from {} to {} was uploaded.".format(
                df.iloc[0]['valid_time'], df.iloc[-1]['valid_time']))
        else:
            print(response.status_code)
示例#11
0
    def train(cls, site_id):
        """Start training for your site

        Args:
            site_id (str): id of site to train

        Raises:
            rebase.TrainingNotReadyError : if you have not uploaded observation data to train on for this site

        Example::

            >>> site_id = '4ab82692-3944-4069-9cbb-f9c59513c1c3'
            >>> rb.Site.train(site_id)

        """
        path = '{}/site/train/{}'.format(cls.base_path, site_id)
        response = api_request.post(path)
        if response.status_code == 200:
            print("Success! Queued training for site: {}".format(site_id))
        else:
            raise Exception('Failed for site: {}. API status code: {}'.format(
                site_id, response.status_code))
示例#12
0
 def upload_trained_model(self, model_trained):
     path = 'platform/v1/model/custom/upload/trained/{}'.format(self.model_id)
     r = api_request.post(path, data=dill.dumps(model_trained))
     if r.status_code != 200:
         raise Exception('Failed uploading trained model', r.status_code)