Spaces:
Runtime error
Runtime error
| import requests | |
| import json | |
| import pickle | |
| import os | |
| class Profiling(): | |
| def __init__(self, apikey): | |
| self.apikey = apikey | |
| pass | |
| def profile(self, ts): | |
| ''' | |
| ts: list of number of timeseries value, the y column | |
| return: | |
| { | |
| 'classification_res':{ | |
| 'time_series_class':{ | |
| 'overall_characteristic':'continuous' | |
| } | |
| }, | |
| 'change_point_res':{'inter_order_cpi':[]}, | |
| '', | |
| } | |
| ''' | |
| print('Start profiling, note, predictability been disabled') | |
| # ======= # | |
| # TESTING # | |
| # ======= # | |
| # return self.__load_res() | |
| self.change_point(list(ts)) | |
| inter_order_cpi = self.change_point_res['inter_order_cpi'] | |
| order_quantity_cpi = self.change_point_res['order_quantity_cpi'] | |
| self.classification(list(ts), inter_order_cpi=inter_order_cpi) | |
| ''' | |
| Predictability is disabled because not really required at this moment | |
| ''' | |
| self.predictability( | |
| list(ts), | |
| inter_order_cpi=inter_order_cpi, | |
| order_quantity_cpi=order_quantity_cpi) | |
| profile_res = { | |
| 'change_point_res': self.change_point_res, | |
| 'classification_res': self.classification_res, | |
| 'predictability_res': self.predictability_res | |
| } | |
| print('Predictability') | |
| print(self.predictability_res) | |
| # self.__save_res(profile_res) | |
| # print('Profiling Completed\n', profile_res) | |
| return profile_res | |
| def parse_res(self, res): | |
| if str(res.status_code)[0] != '2': | |
| raise ValueError('API Call Failed!\n', res.text) | |
| else: | |
| return res.json() | |
| def classification(self, ts, inter_order_cpi=None): | |
| endpoint = 'https://idsc.com.sg/foretell/profiling/classification' | |
| payloads = {'time_series': ts, 'inter_order_cpi': inter_order_cpi} | |
| headers = {'api-key': self.apikey} | |
| res = requests.post(endpoint, json=payloads, headers=headers) | |
| parsed_res = self.parse_res(res) | |
| # print('classification res',parsed_res) | |
| # parsed_res['time_series_class'] = json.loads( | |
| # parsed_res['time_series_class']) | |
| self.classification_res = parsed_res | |
| return | |
| def change_point( | |
| self, | |
| ts, | |
| inter_order_penalty=None, | |
| order_qty_penalty=None): | |
| endpoint = 'https://idsc.com.sg/foretell/profiling/cpd' | |
| payloads = {'time_series': ts} | |
| if inter_order_penalty is not None: | |
| payloads['inter_order_penalty'] = inter_order_penalty | |
| if order_qty_penalty is not None: | |
| payloads['order_qty_penalty'] = order_qty_penalty | |
| headers = {'api-key': self.apikey} | |
| print('Change point detection') | |
| res = requests.post(endpoint, json=payloads, headers=headers) | |
| # print('Change point detection completed') | |
| self.change_point_res = self.parse_res(res) | |
| return | |
| def predictability( | |
| self, | |
| ts, | |
| inter_order_cpi=None, | |
| order_quantity_cpi=None, | |
| inter_discern_param=None, | |
| quantity_discern_param=None): | |
| endpoint = 'https://idsc.com.sg/foretell/profiling/predictability' | |
| payloads = {'time_series': ts} | |
| if inter_order_cpi is not None: | |
| payloads['inter_order_cpi'] = inter_order_cpi | |
| if order_quantity_cpi is not None: | |
| payloads['order_quantity_cpi'] = order_quantity_cpi | |
| if inter_discern_param is not None: | |
| payloads['inter_discern_param'] = inter_discern_param | |
| if quantity_discern_param is not None: | |
| payloads['quantity_discern_param'] = quantity_discern_param | |
| headers = {'api-key': self.apikey} | |
| res = requests.post(endpoint, json=payloads, headers=headers) | |
| self.predictability_res = self.parse_res(res) | |
| return | |
| # ------------------------------------------------ # | |
| # For testing purpose - save and load API response # | |
| # ------------------------------------------------ # | |
| def __save_res(self, res): | |
| # The successful res is based on "data/test.csv" | |
| script_dir = os.path.dirname(__file__) | |
| res_path = "./tests/profile_test.dict" | |
| abs_file_path = os.path.join(script_dir, res_path) | |
| print('Saving response to ' + res_path) | |
| with open(abs_file_path, 'wb') as f: | |
| pickle.dump(res, f) | |
| def __load_res(self): | |
| # The successful res is based on "data/test.csv" | |
| script_dir = os.path.dirname(__file__) | |
| res_path = "./tests/profile_test.dict" | |
| abs_file_path = os.path.join(script_dir, res_path) | |
| print('Reading response from ' + res_path) | |
| with open(abs_file_path, 'rb') as f: | |
| res = pickle.load(f) | |
| return res | |