From ba2f4e5ae00df4fe812dd918d69cc69761977a6f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 16:38:07 +0000 Subject: [PATCH] Python wrapper update --- AMR.egg-info/PKG-INFO | 212 +++++++++ AMR.egg-info/SOURCES.txt | 10 + AMR.egg-info/dependency_links.txt | 1 + AMR.egg-info/requires.txt | 3 + AMR.egg-info/top_level.txt | 1 + AMR/__init__.py | 213 +++++++++ AMR/datasets.py | 77 ++++ AMR/functions.py | 665 +++++++++++++++++++++++++++ README.md | 184 ++++++++ dist/amr-2.1.1.9234-py3-none-any.whl | Bin 0 -> 10220 bytes dist/amr-2.1.1.9234.tar.gz | Bin 0 -> 10058 bytes setup.py | 27 ++ 12 files changed, 1393 insertions(+) create mode 100644 AMR.egg-info/PKG-INFO create mode 100644 AMR.egg-info/SOURCES.txt create mode 100644 AMR.egg-info/dependency_links.txt create mode 100644 AMR.egg-info/requires.txt create mode 100644 AMR.egg-info/top_level.txt create mode 100644 AMR/__init__.py create mode 100644 AMR/datasets.py create mode 100644 AMR/functions.py create mode 100755 README.md create mode 100644 dist/amr-2.1.1.9234-py3-none-any.whl create mode 100644 dist/amr-2.1.1.9234.tar.gz create mode 100644 setup.py diff --git a/AMR.egg-info/PKG-INFO b/AMR.egg-info/PKG-INFO new file mode 100644 index 000000000..797390da9 --- /dev/null +++ b/AMR.egg-info/PKG-INFO @@ -0,0 +1,212 @@ +Metadata-Version: 2.4 +Name: AMR +Version: 2.1.1.9234 +Summary: A Python wrapper for the AMR R package +Home-page: https://github.com/msberends/AMR +Author: Matthijs Berends +Author-email: m.s.berends@umcg.nl +License: GPL 2 +Project-URL: Bug Tracker, https://github.com/msberends/AMR/issues +Classifier: Programming Language :: Python :: 3 +Classifier: Operating System :: OS Independent +Requires-Python: >=3.6 +Description-Content-Type: text/markdown +Requires-Dist: rpy2 +Requires-Dist: numpy +Requires-Dist: pandas +Dynamic: author +Dynamic: author-email +Dynamic: classifier +Dynamic: description +Dynamic: description-content-type +Dynamic: home-page +Dynamic: license +Dynamic: project-url +Dynamic: requires-dist +Dynamic: requires-python +Dynamic: summary + + +The `AMR` package for R is a powerful tool for antimicrobial resistance (AMR) analysis. It provides extensive features for handling microbial and antimicrobial data. However, for those who work primarily in Python, we now have a more intuitive option available: the [`AMR` Python package](https://pypi.org/project/AMR/). + +This Python package is a wrapper around the `AMR` R package. It uses the `rpy2` package internally. Despite the need to have R installed, Python users can now easily work with AMR data directly through Python code. + +# Prerequisites + +This package was only tested with a [virtual environment (venv)](https://docs.python.org/3/library/venv.html). You can set up such an environment by running: + +```python +# linux and macOS: +python -m venv /path/to/new/virtual/environment + +# Windows: +python -m venv C:\path\to\new\virtual\environment +``` + +Then you can [activate the environment](https://docs.python.org/3/library/venv.html#how-venvs-work), after which the venv is ready to work with. + +# Install AMR + +1. Since the Python package is available on the official [Python Package Index](https://pypi.org/project/AMR/), you can just run: + + ```bash + pip install AMR + ``` + +2. Make sure you have R installed. There is **no need to install the `AMR` R package**, as it will be installed automatically. + + For Linux: + + ```bash + # Ubuntu / Debian + sudo apt install r-base + # Fedora: + sudo dnf install R + # CentOS/RHEL + sudo yum install R + ``` + + For macOS (using [Homebrew](https://brew.sh)): + + ```bash + brew install r + ``` + + For Windows, visit the [CRAN download page](https://cran.r-project.org) to download and install R. + +# Examples of Usage + +## Cleaning Taxonomy + +Here’s an example that demonstrates how to clean microorganism and drug names using the `AMR` Python package: + +```python +import pandas as pd +import AMR + +# Sample data +data = { + "MOs": ['E. coli', 'ESCCOL', 'esco', 'Esche coli'], + "Drug": ['Cipro', 'CIP', 'J01MA02', 'Ciproxin'] +} +df = pd.DataFrame(data) + +# Use AMR functions to clean microorganism and drug names +df['MO_clean'] = AMR.mo_name(df['MOs']) +df['Drug_clean'] = AMR.ab_name(df['Drug']) + +# Display the results +print(df) +``` + +| MOs | Drug | MO_clean | Drug_clean | +|-------------|-----------|--------------------|---------------| +| E. coli | Cipro | Escherichia coli | Ciprofloxacin | +| ESCCOL | CIP | Escherichia coli | Ciprofloxacin | +| esco | J01MA02 | Escherichia coli | Ciprofloxacin | +| Esche coli | Ciproxin | Escherichia coli | Ciprofloxacin | + +### Explanation + +* **mo_name:** This function standardises microorganism names. Here, different variations of *Escherichia coli* (such as "E. coli", "ESCCOL", "esco", and "Esche coli") are all converted into the correct, standardised form, "Escherichia coli". + +* **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". + +## Calculating AMR + +```python +import AMR +import pandas as pd + +df = AMR.example_isolates +result = AMR.resistance(df["AMX"]) +print(result) +``` + +``` +[0.59555556] +``` + +## Generating Antibiograms + +One of the core functions of the `AMR` package is generating an antibiogram, a table that summarises the antimicrobial susceptibility of bacterial isolates. Here’s how you can generate an antibiogram from Python: + +```python +result2a = AMR.antibiogram(df[["mo", "AMX", "CIP", "TZP"]]) +print(result2a) +``` + +| Pathogen | Amoxicillin | Ciprofloxacin | Piperacillin/tazobactam | +|-----------------|-----------------|-----------------|--------------------------| +| CoNS | 7% (10/142) | 73% (183/252) | 30% (10/33) | +| E. coli | 50% (196/392) | 88% (399/456) | 94% (393/416) | +| K. pneumoniae | 0% (0/58) | 96% (53/55) | 89% (47/53) | +| P. aeruginosa | 0% (0/30) | 100% (30/30) | None | +| P. mirabilis | None | 94% (34/36) | None | +| S. aureus | 6% (8/131) | 90% (171/191) | None | +| S. epidermidis | 1% (1/91) | 64% (87/136) | None | +| S. hominis | None | 80% (56/70) | None | +| S. pneumoniae | 100% (112/112) | None | 100% (112/112) | + + +```python +result2b = AMR.antibiogram(df[["mo", "AMX", "CIP", "TZP"]], mo_transform = "gramstain") +print(result2b) +``` + +| Pathogen | Amoxicillin | Ciprofloxacin | Piperacillin/tazobactam | +|----------------|-----------------|------------------|--------------------------| +| Gram-negative | 36% (226/631) | 91% (621/684) | 88% (565/641) | +| Gram-positive | 43% (305/703) | 77% (560/724) | 86% (296/345) | + + +In this example, we generate an antibiogram by selecting various antibiotics. + +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antimicrobials`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antimicrobials +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + +# Conclusion + +With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance. + +By just running `import AMR`, users can seamlessly integrate the robust features of the R `AMR` package into Python workflows. + +Whether you're cleaning data or analysing resistance patterns, the `AMR` Python package makes it easy to work with AMR data in Python. diff --git a/AMR.egg-info/SOURCES.txt b/AMR.egg-info/SOURCES.txt new file mode 100644 index 000000000..f37c14848 --- /dev/null +++ b/AMR.egg-info/SOURCES.txt @@ -0,0 +1,10 @@ +README.md +setup.py +AMR/__init__.py +AMR/datasets.py +AMR/functions.py +AMR.egg-info/PKG-INFO +AMR.egg-info/SOURCES.txt +AMR.egg-info/dependency_links.txt +AMR.egg-info/requires.txt +AMR.egg-info/top_level.txt \ No newline at end of file diff --git a/AMR.egg-info/dependency_links.txt b/AMR.egg-info/dependency_links.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/AMR.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/AMR.egg-info/requires.txt b/AMR.egg-info/requires.txt new file mode 100644 index 000000000..fb2bcf682 --- /dev/null +++ b/AMR.egg-info/requires.txt @@ -0,0 +1,3 @@ +rpy2 +numpy +pandas diff --git a/AMR.egg-info/top_level.txt b/AMR.egg-info/top_level.txt new file mode 100644 index 000000000..18f3926f7 --- /dev/null +++ b/AMR.egg-info/top_level.txt @@ -0,0 +1 @@ +AMR diff --git a/AMR/__init__.py b/AMR/__init__.py new file mode 100644 index 000000000..0dd6e1f18 --- /dev/null +++ b/AMR/__init__.py @@ -0,0 +1,213 @@ +from .datasets import example_isolates +from .datasets import microorganisms +from .datasets import antimicrobials +from .datasets import clinical_breakpoints +from .functions import ab_class +from .functions import ab_selector +from .functions import ab_from_text +from .functions import ab_name +from .functions import ab_cid +from .functions import ab_synonyms +from .functions import ab_tradenames +from .functions import ab_group +from .functions import ab_atc +from .functions import ab_atc_group1 +from .functions import ab_atc_group2 +from .functions import ab_loinc +from .functions import ab_ddd +from .functions import ab_ddd_units +from .functions import ab_info +from .functions import ab_url +from .functions import ab_property +from .functions import add_custom_antimicrobials +from .functions import clear_custom_antimicrobials +from .functions import add_custom_microorganisms +from .functions import clear_custom_microorganisms +from .functions import age +from .functions import age_groups +from .functions import antibiogram +from .functions import wisca +from .functions import retrieve_wisca_parameters +from .functions import aminoglycosides +from .functions import aminopenicillins +from .functions import antifungals +from .functions import antimycobacterials +from .functions import betalactams +from .functions import betalactams_with_inhibitor +from .functions import carbapenems +from .functions import cephalosporins +from .functions import cephalosporins_1st +from .functions import cephalosporins_2nd +from .functions import cephalosporins_3rd +from .functions import cephalosporins_4th +from .functions import cephalosporins_5th +from .functions import fluoroquinolones +from .functions import glycopeptides +from .functions import isoxazolylpenicillins +from .functions import lincosamides +from .functions import lipoglycopeptides +from .functions import macrolides +from .functions import monobactams +from .functions import nitrofurans +from .functions import oxazolidinones +from .functions import penicillins +from .functions import phenicols +from .functions import polymyxins +from .functions import quinolones +from .functions import rifamycins +from .functions import streptogramins +from .functions import sulfonamides +from .functions import tetracyclines +from .functions import trimethoprims +from .functions import ureidopenicillins +from .functions import amr_class +from .functions import amr_selector +from .functions import administrable_per_os +from .functions import administrable_iv +from .functions import not_intrinsic_resistant +from .functions import as_ab +from .functions import is_ab +from .functions import ab_reset_session +from .functions import as_av +from .functions import is_av +from .functions import as_disk +from .functions import is_disk +from .functions import as_mic +from .functions import is_mic +from .functions import rescale_mic +from .functions import mic_p50 +from .functions import mic_p90 +from .functions import as_mo +from .functions import is_mo +from .functions import mo_uncertainties +from .functions import mo_renamed +from .functions import mo_failures +from .functions import mo_reset_session +from .functions import mo_cleaning_regex +from .functions import as_sir +from .functions import is_sir +from .functions import is_sir_eligible +from .functions import sir_interpretation_history +from .functions import atc_online_property +from .functions import atc_online_groups +from .functions import atc_online_ddd +from .functions import atc_online_ddd_units +from .functions import av_from_text +from .functions import av_name +from .functions import av_cid +from .functions import av_synonyms +from .functions import av_tradenames +from .functions import av_group +from .functions import av_atc +from .functions import av_loinc +from .functions import av_ddd +from .functions import av_ddd_units +from .functions import av_info +from .functions import av_url +from .functions import av_property +from .functions import availability +from .functions import bug_drug_combinations +from .functions import count_resistant +from .functions import count_susceptible +from .functions import count_S +from .functions import count_SI +from .functions import count_I +from .functions import count_IR +from .functions import count_R +from .functions import count_all +from .functions import n_sir +from .functions import count_df +from .functions import custom_eucast_rules +from .functions import eucast_rules +from .functions import eucast_dosage +from .functions import export_ncbi_biosample +from .functions import first_isolate +from .functions import filter_first_isolate +from .functions import g_test +from .functions import is_new_episode +from .functions import ggplot_pca +from .functions import ggplot_sir +from .functions import geom_sir +from .functions import guess_ab_col +from .functions import italicise_taxonomy +from .functions import italicize_taxonomy +from .functions import inner_join_microorganisms +from .functions import left_join_microorganisms +from .functions import right_join_microorganisms +from .functions import full_join_microorganisms +from .functions import semi_join_microorganisms +from .functions import anti_join_microorganisms +from .functions import key_antimicrobials +from .functions import all_antimicrobials +from .functions import kurtosis +from .functions import like +from .functions import mdro +from .functions import custom_mdro_guideline +from .functions import brmo +from .functions import mrgn +from .functions import mdr_tb +from .functions import mdr_cmi2012 +from .functions import eucast_exceptional_phenotypes +from .functions import mean_amr_distance +from .functions import amr_distance_from_row +from .functions import mo_matching_score +from .functions import mo_name +from .functions import mo_fullname +from .functions import mo_shortname +from .functions import mo_subspecies +from .functions import mo_species +from .functions import mo_genus +from .functions import mo_family +from .functions import mo_order +from .functions import mo_class +from .functions import mo_phylum +from .functions import mo_kingdom +from .functions import mo_domain +from .functions import mo_type +from .functions import mo_status +from .functions import mo_pathogenicity +from .functions import mo_gramstain +from .functions import mo_is_gram_negative +from .functions import mo_is_gram_positive +from .functions import mo_is_yeast +from .functions import mo_is_intrinsic_resistant +from .functions import mo_oxygen_tolerance +from .functions import mo_is_anaerobic +from .functions import mo_snomed +from .functions import mo_ref +from .functions import mo_authors +from .functions import mo_year +from .functions import mo_lpsn +from .functions import mo_mycobank +from .functions import mo_gbif +from .functions import mo_rank +from .functions import mo_taxonomy +from .functions import mo_synonyms +from .functions import mo_current +from .functions import mo_group_members +from .functions import mo_info +from .functions import mo_url +from .functions import mo_property +from .functions import pca +from .functions import theme_sir +from .functions import labels_sir_count +from .functions import resistance +from .functions import susceptibility +from .functions import sir_confidence_interval +from .functions import proportion_R +from .functions import proportion_IR +from .functions import proportion_I +from .functions import proportion_SI +from .functions import proportion_S +from .functions import proportion_df +from .functions import sir_df +from .functions import random_mic +from .functions import random_disk +from .functions import random_sir +from .functions import resistance_predict +from .functions import sir_predict +from .functions import ggplot_sir_predict +from .functions import skewness +from .functions import top_n_microorganisms +from .functions import reset_AMR_locale +from .functions import translate_AMR diff --git a/AMR/datasets.py b/AMR/datasets.py new file mode 100644 index 000000000..348bbc339 --- /dev/null +++ b/AMR/datasets.py @@ -0,0 +1,77 @@ +import os +import sys +import pandas as pd +import importlib.metadata as metadata + +# Get the path to the virtual environment +venv_path = sys.prefix +r_lib_path = os.path.join(venv_path, "R_libs") +os.makedirs(r_lib_path, exist_ok=True) + +# Set environment variable before importing rpy2 +os.environ['R_LIBS_SITE'] = r_lib_path + +from rpy2 import robjects +from rpy2.robjects import pandas2ri +from rpy2.robjects.packages import importr, isinstalled + +# Import base and utils +base = importr('base') +utils = importr('utils') + +base.options(warn=-1) + +# Ensure library paths explicitly +base._libPaths(r_lib_path) + +# Check if the AMR package is installed in R +if not isinstalled('AMR', lib_loc=r_lib_path): + print(f"AMR: Installing latest AMR R package to {r_lib_path}...", flush=True) + utils.install_packages('AMR', repos='https://msberends.r-universe.dev', quiet=True) + +# # Retrieve Python AMR version +# try: +# python_amr_version = metadata.version('AMR') +# except metadata.PackageNotFoundError: +# python_amr_version = '' +# +# # Retrieve R AMR version +# r_amr_version = robjects.r(f'as.character(packageVersion("AMR", lib.loc = "{r_lib_path}"))') +# r_amr_version = str(r_amr_version[0]) +# +# # Compare R and Python package versions +# if r_amr_version != python_amr_version: +# try: +# print(f"AMR: Updating AMR package in {r_lib_path}...", flush=True) +# utils.install_packages('AMR', repos='https://msberends.r-universe.dev', quiet=True) +# except Exception as e: +# print(f"AMR: Could not update: {e}", flush=True) + +print(f"AMR: Setting up R environment and AMR datasets...", flush=True) + +# Activate the automatic conversion between R and pandas DataFrames +pandas2ri.activate() + +# example_isolates +example_isolates = pandas2ri.rpy2py(robjects.r(''' +df <- AMR::example_isolates +df[] <- lapply(df, function(x) { + if (inherits(x, c("Date", "POSIXt", "factor"))) { + as.character(x) + } else { + x + } +}) +df <- df[, !sapply(df, is.list)] +df +''')) +example_isolates['date'] = pd.to_datetime(example_isolates['date']) + +# microorganisms +microorganisms = pandas2ri.rpy2py(robjects.r('AMR::microorganisms[, !sapply(AMR::microorganisms, is.list)]')) +antimicrobials = pandas2ri.rpy2py(robjects.r('AMR::antimicrobials[, !sapply(AMR::antimicrobials, is.list)]')) +clinical_breakpoints = pandas2ri.rpy2py(robjects.r('AMR::clinical_breakpoints[, !sapply(AMR::clinical_breakpoints, is.list)]')) + +base.options(warn = 0) + +print(f"AMR: Done.", flush=True) diff --git a/AMR/functions.py b/AMR/functions.py new file mode 100644 index 000000000..fd4987d69 --- /dev/null +++ b/AMR/functions.py @@ -0,0 +1,665 @@ +import rpy2.robjects as robjects +from rpy2.robjects.packages import importr +from rpy2.robjects.vectors import StrVector, FactorVector, IntVector, FloatVector, DataFrame +from rpy2.robjects import pandas2ri +import pandas as pd +import numpy as np + +# Activate automatic conversion between R data frames and pandas data frames +pandas2ri.activate() + +# Import the AMR R package +amr_r = importr('AMR') + +def convert_to_python(r_output): + # Check if it's a StrVector (R character vector) + if isinstance(r_output, StrVector): + return list(r_output) # Convert to a Python list of strings + + # Check if it's a FactorVector (R factor) + elif isinstance(r_output, FactorVector): + return list(r_output) # Convert to a list of integers (factor levels) + + # Check if it's an IntVector or FloatVector (numeric R vectors) + elif isinstance(r_output, (IntVector, FloatVector)): + return list(r_output) # Convert to a Python list of integers or floats + + # Check if it's a pandas-compatible R data frame + elif isinstance(r_output, pd.DataFrame): + return r_output # Return as pandas DataFrame (already converted by pandas2ri) + elif isinstance(r_output, DataFrame): + return pandas2ri.rpy2py(r_output) # Return as pandas DataFrame + + # Check if the input is a NumPy array and has a string data type + if isinstance(r_output, np.ndarray) and np.issubdtype(r_output.dtype, np.str_): + return r_output.tolist() # Convert to a regular Python list + + # Fall-back + return r_output +def ab_class(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_class(*args, **kwargs)) +def ab_selector(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_selector(*args, **kwargs)) +def ab_from_text(text, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_from_text(text, *args, **kwargs)) +def ab_name(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_name(x, *args, **kwargs)) +def ab_cid(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_cid(x, *args, **kwargs)) +def ab_synonyms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_synonyms(x, *args, **kwargs)) +def ab_tradenames(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_tradenames(x, *args, **kwargs)) +def ab_group(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_group(x, *args, **kwargs)) +def ab_atc(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_atc(x, *args, **kwargs)) +def ab_atc_group1(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_atc_group1(x, *args, **kwargs)) +def ab_atc_group2(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_atc_group2(x, *args, **kwargs)) +def ab_loinc(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_loinc(x, *args, **kwargs)) +def ab_ddd(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_ddd(x, *args, **kwargs)) +def ab_ddd_units(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_ddd_units(x, *args, **kwargs)) +def ab_info(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_info(x, *args, **kwargs)) +def ab_url(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_url(x, *args, **kwargs)) +def ab_property(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_property(x, *args, **kwargs)) +def add_custom_antimicrobials(x): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.add_custom_antimicrobials(x)) +def clear_custom_antimicrobials(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.clear_custom_antimicrobials(*args, **kwargs)) +def add_custom_microorganisms(x): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.add_custom_microorganisms(x)) +def clear_custom_microorganisms(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.clear_custom_microorganisms(*args, **kwargs)) +def age(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.age(x, *args, **kwargs)) +def age_groups(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.age_groups(x, *args, **kwargs)) +def antibiogram(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.antibiogram(x, *args, **kwargs)) +def wisca(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.wisca(x, *args, **kwargs)) +def retrieve_wisca_parameters(wisca_model, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.retrieve_wisca_parameters(wisca_model, *args, **kwargs)) +def aminoglycosides(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.aminoglycosides(only_sir_columns = False, *args, **kwargs)) +def aminopenicillins(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.aminopenicillins(only_sir_columns = False, *args, **kwargs)) +def antifungals(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.antifungals(only_sir_columns = False, *args, **kwargs)) +def antimycobacterials(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.antimycobacterials(only_sir_columns = False, *args, **kwargs)) +def betalactams(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.betalactams(only_sir_columns = False, *args, **kwargs)) +def betalactams_with_inhibitor(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.betalactams_with_inhibitor(only_sir_columns = False, *args, **kwargs)) +def carbapenems(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.carbapenems(only_sir_columns = False, *args, **kwargs)) +def cephalosporins(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.cephalosporins(only_sir_columns = False, *args, **kwargs)) +def cephalosporins_1st(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.cephalosporins_1st(only_sir_columns = False, *args, **kwargs)) +def cephalosporins_2nd(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.cephalosporins_2nd(only_sir_columns = False, *args, **kwargs)) +def cephalosporins_3rd(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.cephalosporins_3rd(only_sir_columns = False, *args, **kwargs)) +def cephalosporins_4th(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.cephalosporins_4th(only_sir_columns = False, *args, **kwargs)) +def cephalosporins_5th(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.cephalosporins_5th(only_sir_columns = False, *args, **kwargs)) +def fluoroquinolones(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.fluoroquinolones(only_sir_columns = False, *args, **kwargs)) +def glycopeptides(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.glycopeptides(only_sir_columns = False, *args, **kwargs)) +def isoxazolylpenicillins(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.isoxazolylpenicillins(only_sir_columns = False, *args, **kwargs)) +def lincosamides(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.lincosamides(only_sir_columns = False, *args, **kwargs)) +def lipoglycopeptides(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.lipoglycopeptides(only_sir_columns = False, *args, **kwargs)) +def macrolides(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.macrolides(only_sir_columns = False, *args, **kwargs)) +def monobactams(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.monobactams(only_sir_columns = False, *args, **kwargs)) +def nitrofurans(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.nitrofurans(only_sir_columns = False, *args, **kwargs)) +def oxazolidinones(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.oxazolidinones(only_sir_columns = False, *args, **kwargs)) +def penicillins(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.penicillins(only_sir_columns = False, *args, **kwargs)) +def phenicols(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.phenicols(only_sir_columns = False, *args, **kwargs)) +def polymyxins(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.polymyxins(only_sir_columns = False, *args, **kwargs)) +def quinolones(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.quinolones(only_sir_columns = False, *args, **kwargs)) +def rifamycins(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.rifamycins(only_sir_columns = False, *args, **kwargs)) +def streptogramins(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.streptogramins(only_sir_columns = False, *args, **kwargs)) +def sulfonamides(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.sulfonamides(only_sir_columns = False, *args, **kwargs)) +def tetracyclines(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.tetracyclines(only_sir_columns = False, *args, **kwargs)) +def trimethoprims(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.trimethoprims(only_sir_columns = False, *args, **kwargs)) +def ureidopenicillins(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ureidopenicillins(only_sir_columns = False, *args, **kwargs)) +def amr_class(amr_class, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.amr_class(amr_class, *args, **kwargs)) +def amr_selector(filter, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.amr_selector(filter, *args, **kwargs)) +def administrable_per_os(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.administrable_per_os(only_sir_columns = False, *args, **kwargs)) +def administrable_iv(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.administrable_iv(only_sir_columns = False, *args, **kwargs)) +def not_intrinsic_resistant(only_sir_columns = False, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.not_intrinsic_resistant(only_sir_columns = False, *args, **kwargs)) +def as_ab(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.as_ab(x, *args, **kwargs)) +def is_ab(x): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.is_ab(x)) +def ab_reset_session(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ab_reset_session(*args, **kwargs)) +def as_av(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.as_av(x, *args, **kwargs)) +def is_av(x): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.is_av(x)) +def as_disk(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.as_disk(x, *args, **kwargs)) +def is_disk(x): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.is_disk(x)) +def as_mic(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.as_mic(x, *args, **kwargs)) +def is_mic(x): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.is_mic(x)) +def rescale_mic(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.rescale_mic(x, *args, **kwargs)) +def mic_p50(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mic_p50(x, *args, **kwargs)) +def mic_p90(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mic_p90(x, *args, **kwargs)) +def as_mo(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.as_mo(x, *args, **kwargs)) +def is_mo(x): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.is_mo(x)) +def mo_uncertainties(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_uncertainties(*args, **kwargs)) +def mo_renamed(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_renamed(*args, **kwargs)) +def mo_failures(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_failures(*args, **kwargs)) +def mo_reset_session(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_reset_session(*args, **kwargs)) +def mo_cleaning_regex(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_cleaning_regex(*args, **kwargs)) +def as_sir(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.as_sir(x, *args, **kwargs)) +def is_sir(x): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.is_sir(x)) +def is_sir_eligible(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.is_sir_eligible(x, *args, **kwargs)) +def sir_interpretation_history(clean): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.sir_interpretation_history(clean)) +def atc_online_property(atc_code, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.atc_online_property(atc_code, *args, **kwargs)) +def atc_online_groups(atc_code, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.atc_online_groups(atc_code, *args, **kwargs)) +def atc_online_ddd(atc_code, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.atc_online_ddd(atc_code, *args, **kwargs)) +def atc_online_ddd_units(atc_code, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.atc_online_ddd_units(atc_code, *args, **kwargs)) +def av_from_text(text, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_from_text(text, *args, **kwargs)) +def av_name(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_name(x, *args, **kwargs)) +def av_cid(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_cid(x, *args, **kwargs)) +def av_synonyms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_synonyms(x, *args, **kwargs)) +def av_tradenames(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_tradenames(x, *args, **kwargs)) +def av_group(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_group(x, *args, **kwargs)) +def av_atc(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_atc(x, *args, **kwargs)) +def av_loinc(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_loinc(x, *args, **kwargs)) +def av_ddd(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_ddd(x, *args, **kwargs)) +def av_ddd_units(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_ddd_units(x, *args, **kwargs)) +def av_info(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_info(x, *args, **kwargs)) +def av_url(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_url(x, *args, **kwargs)) +def av_property(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.av_property(x, *args, **kwargs)) +def availability(tbl, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.availability(tbl, *args, **kwargs)) +def bug_drug_combinations(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.bug_drug_combinations(x, *args, **kwargs)) +def count_resistant(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_resistant(*args, **kwargs)) +def count_susceptible(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_susceptible(*args, **kwargs)) +def count_S(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_S(*args, **kwargs)) +def count_SI(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_SI(*args, **kwargs)) +def count_I(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_I(*args, **kwargs)) +def count_IR(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_IR(*args, **kwargs)) +def count_R(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_R(*args, **kwargs)) +def count_all(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_all(*args, **kwargs)) +def n_sir(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.n_sir(*args, **kwargs)) +def count_df(data, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.count_df(data, *args, **kwargs)) +def custom_eucast_rules(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.custom_eucast_rules(*args, **kwargs)) +def eucast_rules(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.eucast_rules(x, *args, **kwargs)) +def eucast_dosage(ab, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.eucast_dosage(ab, *args, **kwargs)) +def export_ncbi_biosample(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.export_ncbi_biosample(x, *args, **kwargs)) +def first_isolate(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.first_isolate(x = None, *args, **kwargs)) +def filter_first_isolate(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.filter_first_isolate(x = None, *args, **kwargs)) +def g_test(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.g_test(x, *args, **kwargs)) +def is_new_episode(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.is_new_episode(x, *args, **kwargs)) +def ggplot_pca(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ggplot_pca(x, *args, **kwargs)) +def ggplot_sir(data, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ggplot_sir(data, *args, **kwargs)) +def geom_sir(position = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.geom_sir(position = None, *args, **kwargs)) +def guess_ab_col(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.guess_ab_col(x = None, *args, **kwargs)) +def italicise_taxonomy(string, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.italicise_taxonomy(string, *args, **kwargs)) +def italicize_taxonomy(string, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.italicize_taxonomy(string, *args, **kwargs)) +def inner_join_microorganisms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.inner_join_microorganisms(x, *args, **kwargs)) +def left_join_microorganisms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.left_join_microorganisms(x, *args, **kwargs)) +def right_join_microorganisms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.right_join_microorganisms(x, *args, **kwargs)) +def full_join_microorganisms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.full_join_microorganisms(x, *args, **kwargs)) +def semi_join_microorganisms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.semi_join_microorganisms(x, *args, **kwargs)) +def anti_join_microorganisms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.anti_join_microorganisms(x, *args, **kwargs)) +def key_antimicrobials(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.key_antimicrobials(x = None, *args, **kwargs)) +def all_antimicrobials(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.all_antimicrobials(x = None, *args, **kwargs)) +def kurtosis(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.kurtosis(x, *args, **kwargs)) +def like(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.like(x, *args, **kwargs)) +def mdro(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mdro(x = None, *args, **kwargs)) +def custom_mdro_guideline(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.custom_mdro_guideline(*args, **kwargs)) +def brmo(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.brmo(x = None, *args, **kwargs)) +def mrgn(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mrgn(x = None, *args, **kwargs)) +def mdr_tb(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mdr_tb(x = None, *args, **kwargs)) +def mdr_cmi2012(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mdr_cmi2012(x = None, *args, **kwargs)) +def eucast_exceptional_phenotypes(x = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.eucast_exceptional_phenotypes(x = None, *args, **kwargs)) +def mean_amr_distance(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mean_amr_distance(x, *args, **kwargs)) +def amr_distance_from_row(amr_distance, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.amr_distance_from_row(amr_distance, *args, **kwargs)) +def mo_matching_score(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_matching_score(x, *args, **kwargs)) +def mo_name(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_name(x, *args, **kwargs)) +def mo_fullname(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_fullname(x, *args, **kwargs)) +def mo_shortname(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_shortname(x, *args, **kwargs)) +def mo_subspecies(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_subspecies(x, *args, **kwargs)) +def mo_species(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_species(x, *args, **kwargs)) +def mo_genus(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_genus(x, *args, **kwargs)) +def mo_family(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_family(x, *args, **kwargs)) +def mo_order(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_order(x, *args, **kwargs)) +def mo_class(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_class(x, *args, **kwargs)) +def mo_phylum(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_phylum(x, *args, **kwargs)) +def mo_kingdom(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_kingdom(x, *args, **kwargs)) +def mo_domain(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_domain(x, *args, **kwargs)) +def mo_type(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_type(x, *args, **kwargs)) +def mo_status(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_status(x, *args, **kwargs)) +def mo_pathogenicity(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_pathogenicity(x, *args, **kwargs)) +def mo_gramstain(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_gramstain(x, *args, **kwargs)) +def mo_is_gram_negative(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_is_gram_negative(x, *args, **kwargs)) +def mo_is_gram_positive(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_is_gram_positive(x, *args, **kwargs)) +def mo_is_yeast(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_is_yeast(x, *args, **kwargs)) +def mo_is_intrinsic_resistant(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_is_intrinsic_resistant(x, *args, **kwargs)) +def mo_oxygen_tolerance(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_oxygen_tolerance(x, *args, **kwargs)) +def mo_is_anaerobic(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_is_anaerobic(x, *args, **kwargs)) +def mo_snomed(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_snomed(x, *args, **kwargs)) +def mo_ref(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_ref(x, *args, **kwargs)) +def mo_authors(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_authors(x, *args, **kwargs)) +def mo_year(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_year(x, *args, **kwargs)) +def mo_lpsn(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_lpsn(x, *args, **kwargs)) +def mo_mycobank(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_mycobank(x, *args, **kwargs)) +def mo_gbif(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_gbif(x, *args, **kwargs)) +def mo_rank(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_rank(x, *args, **kwargs)) +def mo_taxonomy(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_taxonomy(x, *args, **kwargs)) +def mo_synonyms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_synonyms(x, *args, **kwargs)) +def mo_current(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_current(x, *args, **kwargs)) +def mo_group_members(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_group_members(x, *args, **kwargs)) +def mo_info(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_info(x, *args, **kwargs)) +def mo_url(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_url(x, *args, **kwargs)) +def mo_property(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.mo_property(x, *args, **kwargs)) +def pca(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.pca(x, *args, **kwargs)) +def theme_sir(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.theme_sir(*args, **kwargs)) +def labels_sir_count(position = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.labels_sir_count(position = None, *args, **kwargs)) +def resistance(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.resistance(*args, **kwargs)) +def susceptibility(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.susceptibility(*args, **kwargs)) +def sir_confidence_interval(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.sir_confidence_interval(*args, **kwargs)) +def proportion_R(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.proportion_R(*args, **kwargs)) +def proportion_IR(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.proportion_IR(*args, **kwargs)) +def proportion_I(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.proportion_I(*args, **kwargs)) +def proportion_SI(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.proportion_SI(*args, **kwargs)) +def proportion_S(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.proportion_S(*args, **kwargs)) +def proportion_df(data, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.proportion_df(data, *args, **kwargs)) +def sir_df(data, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.sir_df(data, *args, **kwargs)) +def random_mic(size = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.random_mic(size = None, *args, **kwargs)) +def random_disk(size = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.random_disk(size = None, *args, **kwargs)) +def random_sir(size = None, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.random_sir(size = None, *args, **kwargs)) +def resistance_predict(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.resistance_predict(x, *args, **kwargs)) +def sir_predict(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.sir_predict(x, *args, **kwargs)) +def ggplot_sir_predict(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.ggplot_sir_predict(x, *args, **kwargs)) +def skewness(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.skewness(x, *args, **kwargs)) +def top_n_microorganisms(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.top_n_microorganisms(x, *args, **kwargs)) +def reset_AMR_locale(*args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.reset_AMR_locale(*args, **kwargs)) +def translate_AMR(x, *args, **kwargs): + """See our website of the R package for the manual: https://msberends.github.io/AMR/index.html""" + return convert_to_python(amr_r.translate_AMR(x, *args, **kwargs)) diff --git a/README.md b/README.md new file mode 100755 index 000000000..43aa015bd --- /dev/null +++ b/README.md @@ -0,0 +1,184 @@ + +The `AMR` package for R is a powerful tool for antimicrobial resistance (AMR) analysis. It provides extensive features for handling microbial and antimicrobial data. However, for those who work primarily in Python, we now have a more intuitive option available: the [`AMR` Python package](https://pypi.org/project/AMR/). + +This Python package is a wrapper around the `AMR` R package. It uses the `rpy2` package internally. Despite the need to have R installed, Python users can now easily work with AMR data directly through Python code. + +# Prerequisites + +This package was only tested with a [virtual environment (venv)](https://docs.python.org/3/library/venv.html). You can set up such an environment by running: + +```python +# linux and macOS: +python -m venv /path/to/new/virtual/environment + +# Windows: +python -m venv C:\path\to\new\virtual\environment +``` + +Then you can [activate the environment](https://docs.python.org/3/library/venv.html#how-venvs-work), after which the venv is ready to work with. + +# Install AMR + +1. Since the Python package is available on the official [Python Package Index](https://pypi.org/project/AMR/), you can just run: + + ```bash + pip install AMR + ``` + +2. Make sure you have R installed. There is **no need to install the `AMR` R package**, as it will be installed automatically. + + For Linux: + + ```bash + # Ubuntu / Debian + sudo apt install r-base + # Fedora: + sudo dnf install R + # CentOS/RHEL + sudo yum install R + ``` + + For macOS (using [Homebrew](https://brew.sh)): + + ```bash + brew install r + ``` + + For Windows, visit the [CRAN download page](https://cran.r-project.org) to download and install R. + +# Examples of Usage + +## Cleaning Taxonomy + +Here’s an example that demonstrates how to clean microorganism and drug names using the `AMR` Python package: + +```python +import pandas as pd +import AMR + +# Sample data +data = { + "MOs": ['E. coli', 'ESCCOL', 'esco', 'Esche coli'], + "Drug": ['Cipro', 'CIP', 'J01MA02', 'Ciproxin'] +} +df = pd.DataFrame(data) + +# Use AMR functions to clean microorganism and drug names +df['MO_clean'] = AMR.mo_name(df['MOs']) +df['Drug_clean'] = AMR.ab_name(df['Drug']) + +# Display the results +print(df) +``` + +| MOs | Drug | MO_clean | Drug_clean | +|-------------|-----------|--------------------|---------------| +| E. coli | Cipro | Escherichia coli | Ciprofloxacin | +| ESCCOL | CIP | Escherichia coli | Ciprofloxacin | +| esco | J01MA02 | Escherichia coli | Ciprofloxacin | +| Esche coli | Ciproxin | Escherichia coli | Ciprofloxacin | + +### Explanation + +* **mo_name:** This function standardises microorganism names. Here, different variations of *Escherichia coli* (such as "E. coli", "ESCCOL", "esco", and "Esche coli") are all converted into the correct, standardised form, "Escherichia coli". + +* **ab_name**: Similarly, this function standardises antimicrobial names. The different representations of ciprofloxacin (e.g., "Cipro", "CIP", "J01MA02", and "Ciproxin") are all converted to the standard name, "Ciprofloxacin". + +## Calculating AMR + +```python +import AMR +import pandas as pd + +df = AMR.example_isolates +result = AMR.resistance(df["AMX"]) +print(result) +``` + +``` +[0.59555556] +``` + +## Generating Antibiograms + +One of the core functions of the `AMR` package is generating an antibiogram, a table that summarises the antimicrobial susceptibility of bacterial isolates. Here’s how you can generate an antibiogram from Python: + +```python +result2a = AMR.antibiogram(df[["mo", "AMX", "CIP", "TZP"]]) +print(result2a) +``` + +| Pathogen | Amoxicillin | Ciprofloxacin | Piperacillin/tazobactam | +|-----------------|-----------------|-----------------|--------------------------| +| CoNS | 7% (10/142) | 73% (183/252) | 30% (10/33) | +| E. coli | 50% (196/392) | 88% (399/456) | 94% (393/416) | +| K. pneumoniae | 0% (0/58) | 96% (53/55) | 89% (47/53) | +| P. aeruginosa | 0% (0/30) | 100% (30/30) | None | +| P. mirabilis | None | 94% (34/36) | None | +| S. aureus | 6% (8/131) | 90% (171/191) | None | +| S. epidermidis | 1% (1/91) | 64% (87/136) | None | +| S. hominis | None | 80% (56/70) | None | +| S. pneumoniae | 100% (112/112) | None | 100% (112/112) | + + +```python +result2b = AMR.antibiogram(df[["mo", "AMX", "CIP", "TZP"]], mo_transform = "gramstain") +print(result2b) +``` + +| Pathogen | Amoxicillin | Ciprofloxacin | Piperacillin/tazobactam | +|----------------|-----------------|------------------|--------------------------| +| Gram-negative | 36% (226/631) | 91% (621/684) | 88% (565/641) | +| Gram-positive | 43% (305/703) | 77% (560/724) | 86% (296/345) | + + +In this example, we generate an antibiogram by selecting various antibiotics. + +## Taxonomic Data Sets Now in Python! + +As a Python user, you might like that the most important data sets of the `AMR` R package, `microorganisms`, `antimicrobials`, `clinical_breakpoints`, and `example_isolates`, are now available as regular Python data frames: + +```python +AMR.microorganisms +``` + +| mo | fullname | status | kingdom | gbif | gbif_parent | gbif_renamed_to | prevalence | +|--------------|------------------------------------|----------|----------|-----------|-------------|-----------------|------------| +| B_GRAMN | (unknown Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_GRAMP | (unknown Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-NEG | (unknown anaerobic Gram-negatives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER-POS | (unknown anaerobic Gram-positives) | unknown | Bacteria | None | None | None | 2.0 | +| B_ANAER | (unknown anaerobic bacteria) | unknown | Bacteria | None | None | None | 2.0 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| B_ZYMMN_POMC | Zymomonas pomaceae | accepted | Bacteria | 10744418 | 3221412 | None | 2.0 | +| B_ZYMPH | Zymophilus | synonym | Bacteria | None | 9475166 | None | 2.0 | +| B_ZYMPH_PCVR | Zymophilus paucivorans | synonym | Bacteria | None | None | None | 2.0 | +| B_ZYMPH_RFFN | Zymophilus raffinosivorans | synonym | Bacteria | None | None | None | 2.0 | +| F_ZYZYG | Zyzygomyces | unknown | Fungi | None | 7581 | None | 2.0 | + +```python +AMR.antimicrobials +``` + +| ab | cid | name | group | oral_ddd | oral_units | iv_ddd | iv_units | +|-----|-------------|----------------------|----------------------------|----------|------------|--------|----------| +| AMA | 4649.0 | 4-aminosalicylic acid| Antimycobacterials | 12.00 | g | NaN | None | +| ACM | 6450012.0 | Acetylmidecamycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ASP | 49787020.0 | Acetylspiramycin | Macrolides/lincosamides | NaN | None | NaN | None | +| ALS | 8954.0 | Aldesulfone sodium | Other antibacterials | 0.33 | g | NaN | None | +| AMK | 37768.0 | Amikacin | Aminoglycosides | NaN | None | 1.0 | g | +| ... | ... | ... | ... | ... | ... | ... | ... | +| VIR | 11979535.0 | Virginiamycine | Other antibacterials | NaN | None | NaN | None | +| VOR | 71616.0 | Voriconazole | Antifungals/antimycotics | 0.40 | g | 0.4 | g | +| XBR | 72144.0 | Xibornol | Other antibacterials | NaN | None | NaN | None | +| ZID | 77846445.0 | Zidebactam | Other antibacterials | NaN | None | NaN | None | +| ZFD | NaN | Zoliflodacin | None | NaN | None | NaN | None | + + +# Conclusion + +With the `AMR` Python package, Python users can now effortlessly call R functions from the `AMR` R package. This eliminates the need for complex `rpy2` configurations and provides a clean, easy-to-use interface for antimicrobial resistance analysis. The examples provided above demonstrate how this can be applied to typical workflows, such as standardising microorganism and antimicrobial names or calculating resistance. + +By just running `import AMR`, users can seamlessly integrate the robust features of the R `AMR` package into Python workflows. + +Whether you're cleaning data or analysing resistance patterns, the `AMR` Python package makes it easy to work with AMR data in Python. diff --git a/dist/amr-2.1.1.9234-py3-none-any.whl b/dist/amr-2.1.1.9234-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..bf8a6ec7281e3ab7dc2dcaae29e3579d9c30f1ab GIT binary patch literal 10220 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 literal 0 HcmV?d00001 diff --git a/dist/amr-2.1.1.9234.tar.gz b/dist/amr-2.1.1.9234.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..5a4799303bd49d28d59e6b5fb754919fd446a07b GIT binary patch literal 10058 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 literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..b5a5a128a --- /dev/null +++ b/setup.py @@ -0,0 +1,27 @@ +from setuptools import setup, find_packages + +setup( + name='AMR', + version='2.1.1.9234', + packages=find_packages(), + install_requires=[ + 'rpy2', + 'numpy', + 'pandas', + ], + author='Matthijs Berends', + author_email='m.s.berends@umcg.nl', + description='A Python wrapper for the AMR R package', + long_description=open('README.md').read(), + long_description_content_type='text/markdown', + url='https://github.com/msberends/AMR', + project_urls={ + 'Bug Tracker': 'https://github.com/msberends/AMR/issues', + }, + license='GPL 2', + classifiers=[ + 'Programming Language :: Python :: 3', + 'Operating System :: OS Independent', + ], + python_requires='>=3.6', +)