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