Mercurial > repos > recetox > matchms_metadata_match
diff formatter.py @ 0:03bc9b7f40f6 draft
planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/matchms commit f79a5b51599254817727bc9028b9797ea994cb4e
author | recetox |
---|---|
date | Tue, 27 Jun 2023 14:28:41 +0000 |
parents | |
children | b5b360897004 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/formatter.py Tue Jun 27 14:28:41 2023 +0000 @@ -0,0 +1,49 @@ +import click +from matchms.importing import scores_from_json +from pandas import DataFrame + + +def scores_to_dataframe(scores): + """Unpack scores from matchms.scores into two dataframes of scores and matches. + + Args: + scores (matchms.scores): matchms.scores object. + + Returns: + DataFrame: Scores + DataFrame: Matches + """ + dataframe = DataFrame(columns=['query', 'reference', *scores.scores.score_names]) + + for i, (row, col) in enumerate(zip(scores.scores.row, scores.scores.col)): + dataframe.loc[i] = [scores.queries[col].metadata['compound_name'], scores.references[row].metadata['compound_name'], *scores.scores.data[i]] + + return dataframe + + +def load_data(scores_filename: str) -> DataFrame: + """Load data from filenames and join on compound id. + + Args: + scores_filename (str): Path to json file with serialized scores. + + Returns: + DataFrame: Joined dataframe on compounds containing scores and matches in long format. + """ + scores = scores_from_json(scores_filename) + scores = scores_to_dataframe(scores) + + return scores + + +@click.group(invoke_without_command=True) +@click.option('--sf', 'scores_filename', type=click.Path(exists=True), required=True) +@click.option('--o', 'output_filename', type=click.Path(writable=True), required=True) +def cli(scores_filename, output_filename): + result = load_data(scores_filename) + result.to_csv(output_filename, sep="\t", index=False) + pass + + +if __name__ == '__main__': + cli()