mirror of
https://github.com/msberends/AMR.git
synced 2024-12-26 06:46:11 +01:00
204 lines
10 KiB
Plaintext
Executable File
204 lines
10 KiB
Plaintext
Executable File
---
|
||
title: "AMR for Python"
|
||
output:
|
||
rmarkdown::html_vignette:
|
||
toc: true
|
||
toc_depth: 3
|
||
vignette: >
|
||
%\VignetteIndexEntry{AMR for Python}
|
||
%\VignetteEncoding{UTF-8}
|
||
%\VignetteEngine{knitr::rmarkdown}
|
||
editor_options:
|
||
chunk_output_type: console
|
||
---
|
||
|
||
```{r setup, include = FALSE, results = 'markup'}
|
||
knitr::opts_chunk$set(
|
||
warning = FALSE,
|
||
collapse = TRUE,
|
||
comment = "#>",
|
||
fig.width = 7.5,
|
||
fig.height = 5
|
||
)
|
||
```
|
||
|
||
# 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:
|
||
|
||
```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".
|
||
|
||
### 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:
|
||
|
||
```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.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:
|
||
|
||
```bash
|
||
# 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](https://cran.r-project.org) 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](https://pypi.org/project/AMR/), you can just run:
|
||
|
||
```bash
|
||
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
|
||
|
||
```python
|
||
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:
|
||
|
||
```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.
|
||
|
||
# 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.
|