Source code for py_pal.util

import argparse
import logging
import os
import string
from pathlib import Path
from typing import Tuple

import pandas as pd


[docs]def set_log_level(level): loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict] for _logger in loggers: _logger.setLevel(level)
[docs]def setup_logging(module, level=logging.WARNING): logging.basicConfig(level=level) logger = logging.getLogger(module) logger.setLevel(level) console = logging.StreamHandler() console.setLevel(level) formatter = logging.Formatter('[%(levelname)s, %(module)s, %(funcName)s]: %(message)s') console.setFormatter(formatter) logger.addHandler(console) return logger
logger = setup_logging(__name__)
[docs]def check_positive(value): int_value = int(value) if int_value <= 0: raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value) return int_value
[docs]def scale_column(data_frame: pd.DataFrame, scale: float): return data_frame.apply(lambda x: x * scale)
[docs]def normalize_column(data_frame: pd.DataFrame) -> Tuple[pd.DataFrame, float]: _min = data_frame.min() _max = data_frame.max() div = _max - _min if _max == _min: div = _max logger.debug(f"Normalizing column with factor (x - {_min}) / {div}.") return data_frame.apply(lambda x: (x - _min) / div), div
VALID_CHARS = "-_.() %s%s" % (string.ascii_letters, string.digits)
[docs]def escape(filename): filename_escaped = ''.join(c for c in filename if c in VALID_CHARS) filename_escaped = filename_escaped.replace(' ', '_') return filename_escaped
levels = { 'critical': logging.CRITICAL, 'error': logging.ERROR, 'warn': logging.WARNING, 'warning': logging.WARNING, 'info': logging.INFO, 'debug': logging.DEBUG }
[docs]def get_alt_path(path: Path): if path.is_file(): i = 0 while True: i += 1 _path, ext = os.path.splitext(path) new_path = Path("{}-{}{}".format(_path, str(i), ext)) if not new_path.is_file(): return new_path return path