Skip to contents

Introduction

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, which uses rpy2 internally. This package allows Python users to access all the functions from the R AMR package without the need to set up rpy2 themselves. Since this Python package is not a true ‘port’ (which would require all R functions to be rewritten into Python), R and the AMR R package are still required to be installed. Yet, Python users can now easily work with AMR data directly through Python code.

In this document, we explain how this works and provide simple examples of using the AMR Python package.

How It Works

The AMR Python package acts as a wrapper around the functions in the AMR R package. The package simplifies the process of calling R functions in Python, eliminating the need to manually manage the rpy2 setup, which Python uses internally to be able to work with the R package. By just using import AMR, Python users can directly use the functions from the AMR R package as if they were native Python functions.

Internally, rpy2 is still being used, but all complexity is hidden from the user. This approach keeps the Python code clean and Pythonic, while still leveraging the full power of the R AMR package.

Example of Usage

Here’s an example that demonstrates how to clean microorganism and drug names using the AMR Python package:

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”.

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, antibiotics, clinical_breakpoints, and example_isolates, are now available as regular Python data frames:

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
AMR.antibiotics
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

Installation

To be able to use the AMR Python package, it is required to install both R and the AMR R package.

Preparation: Install R and AMR R package

For Linux and macOS, this is just:

# Ubuntu / Debian
sudo apt install r-base && Rscript -e 'install.packages("AMR")'
# Fedora:
sudo dnf install R && Rscript -e 'install.packages("AMR")'
# CentOS/RHEL
sudo yum install R && Rscript -e 'install.packages("AMR")'
# Arch Linux
sudo pacman -S r && Rscript -e 'install.packages("AMR")'
# macOS
brew install r && Rscript -e 'install.packages("AMR")'

For Windows, visit the CRAN download page in install R, then afterwards install the ‘AMR’ package manually.

Install AMR Python Package

Since the Python package is available on the official Python Package Index, you can just run:

pip install AMR

Working with AMR in Python

Now that we have everything set up, let’s walk through some practical examples of using the AMR package within Python.

Example 1: Calculating AMR

import AMR
import pandas as pd

df = AMR.example_isolates
result = AMR.resistance(df["AMX"])
print(result)
[0.59555556]

Example 2: 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:

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)
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.

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 using import AMR, you can seamlessly integrate the robust features of the R AMR package into your 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.