def del_image(self, mid): ''' 从 ctx 中删除图片 ''' if self.__del_image(mid): return result(ResultType.success) return result(ResultType.failed, desc='invalid image id')
def get_ncpus(self): ''' 获取可用核数 ''' if self.mpc != None: return result(ResultType.success, data=self.mpc.ncpus) return result(ResultType.failed, desc='MPC invaliable')
def wrapper(obj, method, label): try: return func(obj, method, label) except ValueError: return result(ResultType.failed, desc='数据不合法,无法进行操作') except: msg = traceback.format_exc() return result(ResultType.failed, desc=msg)
def enable_mpc(self): ''' 启用mpc ''' # 始终禁用 try: self.__enable_mpc = True if self.mpc is None: self.mpc = MPCompute() return result(ResultType.success) except: msg = traceback.format_exc() return result(ResultType.failed, desc=msg)
def visualization(self, method, label): ''' 可视化 ''' data = sup.visualization(self.data, method, label) i = self.__add_image(visualization_type[method], label, data) return result(ResultType.success, data=bytes_to_b64(data), ext=i)
def disable_mpc(self): ''' 禁用mpc ''' self.__enable_mpc = False if not self.mpc is None: self.mpc.shutdown() self.mpc = None return result(ResultType.success)
def normalize(self, method, label): ''' 数据规范化 ''' if self.__enable_mpc: new_data = self.mpc.compute(sup.normalize, args=(self.data, method, label))() else: new_data = sup.normalize(self.data, method, label) self.__new_version(new_data, 'normalize (%s)' % noise_type[method]) return result(ResultType.success, data=self.__get_data())
def null_process(self, method, label): ''' 空值处理 ''' if self.__enable_mpc: new_data = self.mpc.compute(sup.null_process, args=(self.data, method, label))() else: new_data = sup.null_process(self.data, method, label) self.__new_version(new_data, 'null process (%s)' % noise_type[method]) return result(ResultType.success, data=self.__get_data())
def open_path(self, p): ''' 查询目录子结构 ''' data = [] for name in os.listdir(p): data.append({ 'name': name, 'type': 'dir' if path.isdir(path.join(p, name)) else 'file' }) return result(ResultType.success, data=data)
def save_data(self): ''' 在输入目录下创建 DPTool-output,存储数据到该目录下 ''' try: output_dir = path.join(path.dirname(self.data_path), 'DPTool-output') if path.exists(output_dir): shutil.rmtree(output_dir) os.mkdir(output_dir) # 存储处理后的数据 output_path = path.join(output_dir, str(self.data_version) + '-' + path.basename(self.data_path)) self.data.to_csv(output_path) # 存储视图 for name in self.images: with open(path.join(output_dir, name + '.png'), 'wb') as f: f.write(self.images[name]) # 存储操作日志 with open(path.join(output_dir, 'op-records.txt'), 'wb') as f: for item in self.op_records: f.write((item + '\n').encode('utf-8')) return result(ResultType.success, data=output_dir) except: msg = traceback.format_exc() return result(ResultType.failed, desc=msg)
def read_file(self, p): ''' 读文件,获取数据,用于预览 支持的数据文件类型:sup_file_type ''' name = path.basename(p) i = name.rfind('.') file_type = name[i + 1:].lower() if i >= 0 else None self.data_path = p with open(p, 'rb') as f: if file_type and file_type in Context.sup_file_type: try: if file_type == 'csv': self.data = pd.read_csv(f, ';') else: self.data = getattr(pd, 'read_' + file_type)(f) self.__reset() return result(ResultType.success, data=self.__get_data()) except: msg = traceback.format_exc() return result(ResultType.failed, desc=msg) else: return result(ResultType.failed, desc='unsupported file type: ' + file_type) return result(ResultType.failed, desc='cannot open file: ' + p)
def get_data(self): ''' 返回 context 中保存的 data ''' return result(ResultType.success, data=self.__get_data())
def get_cwd(self): ''' 获取工作路径 ''' return result(ResultType.success, data=os.getcwd())