expan.cli package¶
Submodules¶
expan.cli.cli module¶
# TODO: outdated
import argparse import ast import logging import pickle
import pandas as pd from expan.core.experimentdata import ExperimentData
from expan.core.experiment import Experiment
- class UsageError(Exception):
- def __init__(self, msg):
- self.msg = msg
- def __str__(self):
- return ‘Usage Error: {}’.format(self.msg)
- def parse_metadata(filename):
- “”“
Parse metadata file
Args: filename - metadata file path
“”” metadata_file = open(filename) metadata_s = metadata_file.read() return ast.literal_eval(metadata_s)
- def run_analysis(features_file, kpis_file, metadata_file):
- “”“
Load kpis and features from file and pass them to expan to perform delta and subgroup analyses
- Args:
- features_file: features file path kpis_file: kpis file path metadata_file: metadata file path
- Returns:
- delta analysis results and subgroup analysis results as a tuple
“”” kpis = pd.read_csv(kpis_file) if features_file:
features = pd.read_csv(features_file)- else:
- features = ‘default’
print(features) metadata = parse_metadata(metadata_file)
- exp_data = ExperimentData(metrics=kpis,
- metadata=metadata, features=features)
- exp = Experiment(baseline_variant=metadata[‘baseline_variant’],
- metrics_or_kpis=kpis, metadata=metadata, features=features)
return (exp.delta(), exp.sga())
- def run_expan(xxx_todo_changeme):
- “”“
- Triggers expan to perform delta and subgroup analyses Print response either to stdout or output file, if specified
“”” (features_file, kpis_file, metadata_file, output_file) = xxx_todo_changeme (delta_result, sga_result) = run_analysis(features_file, kpis_file, metadata_file) print_results(delta_result, sga_result, output_file)
- def print_results(delta, sga, output_file):
- “”“
Print analyses results either to stdout or output file, if specified
- Args:
- delta - delta analysis results sga - subgroup analysis results output_file - output file path
“”” delta_s = pickle.dumps(delta) sga_s = pickle.dumps(sga) if output_file:
output = open(output_file, ‘w’) output.write(delta_s) output.write(sga_s)- else:
- print(delta_s) print(sga_s)
- def check_input_data(args):
- “”“
- Check if kpi and metadata files are provided in input arguments
“”” print(args) if not args.kpis:
raise UsageError(‘Kpis file shall be provided (-k cli parameter)’)- if not args.metadata:
- raise UsageError(‘Metadata file shall be provided (-m cli parameter)’)
- def prepare_cli_parameters(args):
- “”“
- Parse input parameters
“”” check_input_data(args) features_file = args.features kpis_file = args.kpis metadata_file = args.metadata output_file = args.output
return features_file, kpis_file, metadata_file, output_file
- def main():
parser = argparse.ArgumentParser() parser.add_argument(‘-f’, ‘–features’, help=’Path to file with feature data’) parser.add_argument(‘-k’, ‘–kpis’, help=’Path to file with kpis data’) parser.add_argument(‘-m’, ‘–metadata’, help=’Path to file with metadata’) parser.add_argument(‘-o’, ‘–output’, help=’Path to output file’)
args = parser.parse_args()
- try:
- run_expan(prepare_cli_parameters(args))
- except UsageError as e:
- logging.error(e)
- if __name__ == ‘__main__’:
- main()
Module contents¶
ExpAn Command Line Interface module.