영어 버전 문서로 돌아가기Decision Optimization Python DOcplex 모델용 입력 및 출력 데이터 형식
Decision Optimization Python 모델 입력 및 출력 데이터 파일 형식
마지막 업데이트 날짜: 2024년 11월 21일
다음과 같은 입력 및 출력 데이터 형식을 Python Decision Optimization 모델에 사용할 수 있습니다.
입력 데이터
Python DOcplex 모델의 경우, 입력 데이터는 모든 형식의 파일에서 읽을 수 있습니다. 커넥터를 사용하여 외부 소스를 사용하여 입력 데이터를 채우려면 입력 데이터에 .csv
파일을 사용해야 합니다.
사전을 사용하여 입력 데이터를 정의할 수 있습니다.
get_all_inputs
메서드를 사용하여 파일을 읽고 데이터프레임 사전을 반환할 수 있습니다.from docplex.util.environment import get_environment
import pandas
from six import iteritems
from collections.abc import Mapping
from os.path import join, dirname, basename, splitext, exists
import glob
class _InputDict(dict):
def __init__(self, directory, names):
dict.__init__(self)
self._directory = directory
for k in names:
dict.__setitem__(self, k, None)
file='model_schema.json'
if self._directory is not None:
file = "{0}/".format(self._directory) + file
self.dtype_schemas = self.get_dtype_schemas( file)
def __getitem__(self, key):
if isinstance(key, str):
item = dict.__getitem__(self, key)
if item is None:
file = "{0}.csv".format(key)
if file in self.dtype_schemas:
return self.read_df( key, dtype=self.dtype_schemas[file])
else:
return self.read_df( key)
else:
return item
else:
raise Exception("Accessing input dict via non string index")
def read_df(self, key, **kwargs):
env = get_environment()
file = "{0}.csv".format(key)
if self._directory is not None:
file = "{0}/".format(self._directory) + file
with env.get_input_stream(file) as ist:
params = {'encoding': 'utf8'}
if kwargs:
params.update(kwargs)
df = pandas.read_csv( ist, **params)
dict.__setitem__(self, key, df)
return df
def get_dtype_schemas(self, path):
dtype_schemas = {}
if exists(path):
input_schemas=json.load(open(path))
if 'input' in input_schemas:
for input_schema in input_schemas['input']:
dtype_schema = {}
if 'fields' in input_schema:
for input_schema_field in input_schema['fields']:
if input_schema_field['type']=='string':
dtype_schema[input_schema_field['name']]='str'
if len(dtype_schema) > 0:
dtype_schemas[input_schema['id']]=dtype_schema
print(dtype_schemas)
return dtype_schemas
class _LazyDict(Mapping):
def __init__(self, *args, **kw):
self._raw_dict = _InputDict(*args, **kw)
def __getitem__(self, key):
return self._raw_dict.__getitem__(key)
def __iter__(self):
return iter(self._raw_dict)
def __len__(self):
return len(self._raw_dict)
def read_df(self, key, **kwargs):
return self._raw_dict.read_df(key, **kwargs)
def get_all_inputs(directory=None):
'''Utility method to read a list of files and return a tuple with all
read data frames.
Returns:
a map { datasetname: data frame }
'''
all_csv = "*.csv"
g = join(directory, all_csv) if directory else all_csv
names = [splitext(basename(f))[0] for f in glob.glob(g)]
result = _LazyDict(directory, names)
return result
출력 데이터
이 예는 데이터프레임 사전에서 출력을 사용하는 경우 모든 출력을 작성하고 사전 데이터를 작업의 출력으로 저장하는 방법을 보여 줍니다.
def write_all_outputs(outputs):
'''Write all dataframes in ``outputs`` as .csv.
Args:
outputs: The map of outputs 'outputname' -> 'output df'
'''
for (name, df) in iteritems(outputs):
csv_file = '%s.csv' % name
print(csv_file)
with get_environment().get_output_stream(csv_file) as fp:
if sys.version_info[0] < 3:
fp.write(df.to_csv(index=False, encoding='utf8'))
else:
fp.write(df.to_csv(index=False).encode(encoding='utf8'))
if len(outputs) == 0:
print("Warning: no outputs written")
get_environment().get_output_stream(csv_file) as fp:
을 사용하여 출력을 저장할 수도 있습니다.
Decision Optimization Python DOcplex 모델 배포의 전체 예제를 보려면 다음을 참조하세요, DO-samples의 jupyter 폴더에 있는 Deploying a DO model with WML 샘플을 참조하세요. 관련 제품 및 버전 서브폴더를 선택하십시오.
이 샘플은 ' Cloud Pak for Data ' 리소스 허브' , ' ' Decision Optimization 모델을 ' watsonx.ai 런타임'에 배포하기 ' 에서도 확인할 수 있습니다.