From 347766ff3fdbb5e1a20bd59e1130b376c210b92d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 07:50:48 +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.9239-py3-none-any.whl | Bin 0 -> 10187 bytes dist/amr-2.1.1.9239.tar.gz | Bin 0 -> 10031 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.9239-py3-none-any.whl create mode 100644 dist/amr-2.1.1.9239.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..76ee04fc7 --- /dev/null +++ b/AMR.egg-info/PKG-INFO @@ -0,0 +1,212 @@ +Metadata-Version: 2.4 +Name: AMR +Version: 2.1.1.9239 +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..8b1dbb67d --- /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='beta.amr-for-r.org', 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='beta.amr-for-r.org', 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..e0146c94a --- /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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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.9239-py3-none-any.whl b/dist/amr-2.1.1.9239-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a027bbab7b2916d6c87b6129644493bcc08da091 GIT binary patch literal 10187 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 literal 0 HcmV?d00001 diff --git a/dist/amr-2.1.1.9239.tar.gz b/dist/amr-2.1.1.9239.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..15076d1717bb4a6d7ff0439eb988c54f9f093fb9 GIT binary patch literal 10031 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 MpI3iEZ9_x-FT(2pVE_OC literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..47eec626a --- /dev/null +++ b/setup.py @@ -0,0 +1,27 @@ +from setuptools import setup, find_packages + +setup( + name='AMR', + version='2.1.1.9239', + 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', +)