From c06c9b0425524c1d44c665b75b75ee99c3f922f9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Sat, 12 Apr 2025 15:53:28 +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.9236-py3-none-any.whl | Bin 0 -> 10188 bytes dist/amr-2.1.1.9236.tar.gz | Bin 0 -> 10040 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.9236-py3-none-any.whl create mode 100644 dist/amr-2.1.1.9236.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..63497dfac --- /dev/null +++ b/AMR.egg-info/PKG-INFO @@ -0,0 +1,212 @@ +Metadata-Version: 2.4 +Name: AMR +Version: 2.1.1.9236 +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.9236-py3-none-any.whl b/dist/amr-2.1.1.9236-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ee10dc7a89ffac445db90e7130452ac656190dac GIT binary patch literal 10188 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 literal 0 HcmV?d00001 diff --git a/dist/amr-2.1.1.9236.tar.gz b/dist/amr-2.1.1.9236.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9e2384b75acf3339a05c42f171ed9e5ae9b55f7d GIT binary patch literal 10040 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 LyAWy@8tQ)mwKx8$ literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..7894b53f1 --- /dev/null +++ b/setup.py @@ -0,0 +1,27 @@ +from setuptools import setup, find_packages + +setup( + name='AMR', + version='2.1.1.9236', + 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', +)