mirror of
https://github.com/msberends/AMR.git
synced 2025-07-11 22:21:53 +02:00
Built site for AMR@2.1.1.9095: 5c4d8fc
This commit is contained in:
@ -29,7 +29,7 @@
|
||||
|
||||
<a class="navbar-brand me-2" href="../index.html">AMR (for R)</a>
|
||||
|
||||
<small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">2.1.1.9094</small>
|
||||
<small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">2.1.1.9095</small>
|
||||
|
||||
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
|
||||
@ -86,203 +86,562 @@
|
||||
<div class="section level2">
|
||||
<h2 id="introduction">Introduction<a class="anchor" aria-label="anchor" href="#introduction"></a>
|
||||
</h2>
|
||||
<p>The <code>AMR</code> package for R is an incredible tool for
|
||||
antimicrobial resistance (AMR) data analysis, providing extensive
|
||||
functionality for working with microbial and antimicrobial properties.
|
||||
But what if you’re working in Python and still want to benefit from the
|
||||
robust features of <code>AMR</code>?</p>
|
||||
<p>The best way is to access R directly from Python with the help of
|
||||
<code>rpy2</code>, a simple yet powerful Python package. You can easily
|
||||
call functions from the <code>AMR</code> package to process your own
|
||||
data in your own Python environment. This post will guide you through
|
||||
setting up <code>rpy2</code> and show you how to use R functions from
|
||||
<code>AMR</code> in Python to supercharge your antimicrobial resistance
|
||||
analysis.</p>
|
||||
</div>
|
||||
<div class="section level2">
|
||||
<h2 id="what-is-rpy2">What is <code>rpy2</code>?<a class="anchor" aria-label="anchor" href="#what-is-rpy2"></a>
|
||||
</h2>
|
||||
<p><code>rpy2</code> is a Python library that allows Python users to run
|
||||
R code within their Python scripts. Essentially, it acts as a bridge
|
||||
between the two languages, allowing you to tap into the rich ecosystem
|
||||
of R libraries (like <code>AMR</code>) while maintaining the flexibility
|
||||
of Python.</p>
|
||||
<p>The <code>AMR</code> 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 <code>AMR</code> Python package, which uses <code>rpy2</code>
|
||||
internally. This package allows Python users to access all the functions
|
||||
from the R <code>AMR</code> package without the need to set up
|
||||
<code>rpy2</code> 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.</p>
|
||||
<p>In this document, we explain how this works and provide simple
|
||||
examples of using the <code>AMR</code> Python package.</p>
|
||||
<div class="section level3">
|
||||
<h3 id="key-features-of-rpy2">Key Features of <code>rpy2</code>:<a class="anchor" aria-label="anchor" href="#key-features-of-rpy2"></a>
|
||||
<h3 id="how-it-works">How It Works<a class="anchor" aria-label="anchor" href="#how-it-works"></a>
|
||||
</h3>
|
||||
<p>The <code>AMR</code> Python package acts as a wrapper around the
|
||||
functions in the <code>AMR</code> R package. The package simplifies the
|
||||
process of calling R functions in Python, eliminating the need to
|
||||
manually manage the <code>rpy2</code> setup, which Python uses
|
||||
internally to be able to work with the R package. By just using
|
||||
<code>import AMR</code>, Python users can directly use the functions
|
||||
from the <code>AMR</code> R package as if they were native Python
|
||||
functions.</p>
|
||||
<p>Internally, <code>rpy2</code> 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
|
||||
<code>AMR</code> package.</p>
|
||||
</div>
|
||||
<div class="section level3">
|
||||
<h3 id="example-of-usage">Example of Usage<a class="anchor" aria-label="anchor" href="#example-of-usage"></a>
|
||||
</h3>
|
||||
<p>Here’s an example that demonstrates how to clean microorganism and
|
||||
drug names using the <code>AMR</code> Python package:</p>
|
||||
<div class="sourceCode" id="cb1"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb1-1"><a href="#cb1-1" tabindex="-1"></a><span class="im">import</span> pandas <span class="im">as</span> pd</span>
|
||||
<span id="cb1-2"><a href="#cb1-2" tabindex="-1"></a><span class="im">import</span> AMR</span>
|
||||
<span id="cb1-3"><a href="#cb1-3" tabindex="-1"></a></span>
|
||||
<span id="cb1-4"><a href="#cb1-4" tabindex="-1"></a><span class="co"># Sample data</span></span>
|
||||
<span id="cb1-5"><a href="#cb1-5" tabindex="-1"></a>data <span class="op">=</span> {</span>
|
||||
<span id="cb1-6"><a href="#cb1-6" tabindex="-1"></a> <span class="st">"MOs"</span>: [<span class="st">'E. coli'</span>, <span class="st">'ESCCOL'</span>, <span class="st">'esco'</span>, <span class="st">'Esche coli'</span>],</span>
|
||||
<span id="cb1-7"><a href="#cb1-7" tabindex="-1"></a> <span class="st">"Drug"</span>: [<span class="st">'Cipro'</span>, <span class="st">'CIP'</span>, <span class="st">'J01MA02'</span>, <span class="st">'Ciproxin'</span>]</span>
|
||||
<span id="cb1-8"><a href="#cb1-8" tabindex="-1"></a>}</span>
|
||||
<span id="cb1-9"><a href="#cb1-9" tabindex="-1"></a>df <span class="op">=</span> pd.DataFrame(data)</span>
|
||||
<span id="cb1-10"><a href="#cb1-10" tabindex="-1"></a></span>
|
||||
<span id="cb1-11"><a href="#cb1-11" tabindex="-1"></a><span class="co"># Use AMR functions to clean microorganism and drug names</span></span>
|
||||
<span id="cb1-12"><a href="#cb1-12" tabindex="-1"></a>df[<span class="st">'MO_clean'</span>] <span class="op">=</span> AMR.mo_name(df[<span class="st">'MOs'</span>])</span>
|
||||
<span id="cb1-13"><a href="#cb1-13" tabindex="-1"></a>df[<span class="st">'Drug_clean'</span>] <span class="op">=</span> AMR.ab_name(df[<span class="st">'Drug'</span>])</span>
|
||||
<span id="cb1-14"><a href="#cb1-14" tabindex="-1"></a></span>
|
||||
<span id="cb1-15"><a href="#cb1-15" tabindex="-1"></a><span class="co"># Display the results</span></span>
|
||||
<span id="cb1-16"><a href="#cb1-16" tabindex="-1"></a><span class="bu">print</span>(df)</span></code></pre></div>
|
||||
<table class="table">
|
||||
<thead><tr class="header">
|
||||
<th>MOs</th>
|
||||
<th>Drug</th>
|
||||
<th>MO_clean</th>
|
||||
<th>Drug_clean</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>E. coli</td>
|
||||
<td>Cipro</td>
|
||||
<td>Escherichia coli</td>
|
||||
<td>Ciprofloxacin</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>ESCCOL</td>
|
||||
<td>CIP</td>
|
||||
<td>Escherichia coli</td>
|
||||
<td>Ciprofloxacin</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>esco</td>
|
||||
<td>J01MA02</td>
|
||||
<td>Escherichia coli</td>
|
||||
<td>Ciprofloxacin</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>Esche coli</td>
|
||||
<td>Ciproxin</td>
|
||||
<td>Escherichia coli</td>
|
||||
<td>Ciprofloxacin</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="section level4">
|
||||
<h4 id="explanation">Explanation<a class="anchor" aria-label="anchor" href="#explanation"></a>
|
||||
</h4>
|
||||
<ul>
|
||||
<li>Seamlessly call R functions from Python.</li>
|
||||
<li>Convert R data structures into Python data structures like pandas
|
||||
DataFrames.</li>
|
||||
<li>Leverage the full power of R libraries without leaving your Python
|
||||
environment.</li>
|
||||
<li><p><strong>mo_name:</strong> This function standardises
|
||||
microorganism names. Here, different variations of <em>Escherichia
|
||||
coli</em> (such as “E. coli”, “ESCCOL”, “esco”, and “Esche coli”) are
|
||||
all converted into the correct, standardised form, “Escherichia
|
||||
coli”.</p></li>
|
||||
<li><p><strong>ab_name</strong>: 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”.</p></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section level4">
|
||||
<h4 id="taxonomic-data-sets-now-in-python">Taxonomic Data Sets Now in Python!<a class="anchor" aria-label="anchor" href="#taxonomic-data-sets-now-in-python"></a>
|
||||
</h4>
|
||||
<p>As a Python user, you might like that the most important data sets of
|
||||
the <code>AMR</code> R package, <code>microorganisms</code>,
|
||||
<code>antibiotics</code>, <code>clinical_breakpoints</code>, and
|
||||
<code>example_isolates</code>, are now available as regular Python data
|
||||
frames:</p>
|
||||
<div class="sourceCode" id="cb2"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb2-1"><a href="#cb2-1" tabindex="-1"></a>AMR.microorganisms</span></code></pre></div>
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col width="11%">
|
||||
<col width="29%">
|
||||
<col width="8%">
|
||||
<col width="8%">
|
||||
<col width="8%">
|
||||
<col width="10%">
|
||||
<col width="13%">
|
||||
<col width="9%">
|
||||
</colgroup>
|
||||
<thead><tr class="header">
|
||||
<th>mo</th>
|
||||
<th>fullname</th>
|
||||
<th>status</th>
|
||||
<th>kingdom</th>
|
||||
<th>gbif</th>
|
||||
<th>gbif_parent</th>
|
||||
<th>gbif_renamed_to</th>
|
||||
<th>prevalence</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>B_GRAMN</td>
|
||||
<td>(unknown Gram-negatives)</td>
|
||||
<td>unknown</td>
|
||||
<td>Bacteria</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>B_GRAMP</td>
|
||||
<td>(unknown Gram-positives)</td>
|
||||
<td>unknown</td>
|
||||
<td>Bacteria</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>B_ANAER-NEG</td>
|
||||
<td>(unknown anaerobic Gram-negatives)</td>
|
||||
<td>unknown</td>
|
||||
<td>Bacteria</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>B_ANAER-POS</td>
|
||||
<td>(unknown anaerobic Gram-positives)</td>
|
||||
<td>unknown</td>
|
||||
<td>Bacteria</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>B_ANAER</td>
|
||||
<td>(unknown anaerobic bacteria)</td>
|
||||
<td>unknown</td>
|
||||
<td>Bacteria</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>B_ZYMMN_POMC</td>
|
||||
<td>Zymomonas pomaceae</td>
|
||||
<td>accepted</td>
|
||||
<td>Bacteria</td>
|
||||
<td>10744418</td>
|
||||
<td>3221412</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>B_ZYMPH</td>
|
||||
<td>Zymophilus</td>
|
||||
<td>synonym</td>
|
||||
<td>Bacteria</td>
|
||||
<td>None</td>
|
||||
<td>9475166</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>B_ZYMPH_PCVR</td>
|
||||
<td>Zymophilus paucivorans</td>
|
||||
<td>synonym</td>
|
||||
<td>Bacteria</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>B_ZYMPH_RFFN</td>
|
||||
<td>Zymophilus raffinosivorans</td>
|
||||
<td>synonym</td>
|
||||
<td>Bacteria</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>F_ZYZYG</td>
|
||||
<td>Zyzygomyces</td>
|
||||
<td>unknown</td>
|
||||
<td>Fungi</td>
|
||||
<td>None</td>
|
||||
<td>7581</td>
|
||||
<td>None</td>
|
||||
<td>2.0</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="sourceCode" id="cb3"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb3-1"><a href="#cb3-1" tabindex="-1"></a>AMR.antibiotics</span></code></pre></div>
|
||||
<table style="width:100%;" class="table">
|
||||
<colgroup>
|
||||
<col width="4%">
|
||||
<col width="12%">
|
||||
<col width="20%">
|
||||
<col width="25%">
|
||||
<col width="9%">
|
||||
<col width="11%">
|
||||
<col width="7%">
|
||||
<col width="9%">
|
||||
</colgroup>
|
||||
<thead><tr class="header">
|
||||
<th>ab</th>
|
||||
<th>cid</th>
|
||||
<th>name</th>
|
||||
<th>group</th>
|
||||
<th>oral_ddd</th>
|
||||
<th>oral_units</th>
|
||||
<th>iv_ddd</th>
|
||||
<th>iv_units</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>AMA</td>
|
||||
<td>4649.0</td>
|
||||
<td>4-aminosalicylic acid</td>
|
||||
<td>Antimycobacterials</td>
|
||||
<td>12.00</td>
|
||||
<td>g</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>ACM</td>
|
||||
<td>6450012.0</td>
|
||||
<td>Acetylmidecamycin</td>
|
||||
<td>Macrolides/lincosamides</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>ASP</td>
|
||||
<td>49787020.0</td>
|
||||
<td>Acetylspiramycin</td>
|
||||
<td>Macrolides/lincosamides</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>ALS</td>
|
||||
<td>8954.0</td>
|
||||
<td>Aldesulfone sodium</td>
|
||||
<td>Other antibacterials</td>
|
||||
<td>0.33</td>
|
||||
<td>g</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>AMK</td>
|
||||
<td>37768.0</td>
|
||||
<td>Amikacin</td>
|
||||
<td>Aminoglycosides</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
<td>1.0</td>
|
||||
<td>g</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
<td>…</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>VIR</td>
|
||||
<td>11979535.0</td>
|
||||
<td>Virginiamycine</td>
|
||||
<td>Other antibacterials</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>VOR</td>
|
||||
<td>71616.0</td>
|
||||
<td>Voriconazole</td>
|
||||
<td>Antifungals/antimycotics</td>
|
||||
<td>0.40</td>
|
||||
<td>g</td>
|
||||
<td>0.4</td>
|
||||
<td>g</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>XBR</td>
|
||||
<td>72144.0</td>
|
||||
<td>Xibornol</td>
|
||||
<td>Other antibacterials</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>ZID</td>
|
||||
<td>77846445.0</td>
|
||||
<td>Zidebactam</td>
|
||||
<td>Other antibacterials</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>ZFD</td>
|
||||
<td>NaN</td>
|
||||
<td>Zoliflodacin</td>
|
||||
<td>None</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
<td>NaN</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section level2">
|
||||
<h2 id="setting-up-rpy2">Setting Up <code>rpy2</code><a class="anchor" aria-label="anchor" href="#setting-up-rpy2"></a>
|
||||
<h2 id="installation">Installation<a class="anchor" aria-label="anchor" href="#installation"></a>
|
||||
</h2>
|
||||
<p>Before diving into the examples, you’ll need to install both R and
|
||||
<code>rpy2</code>. Here’s a step-by-step guide on setting things up.</p>
|
||||
<div class="section level3">
|
||||
<h3 id="step-1-install-r">Step 1: Install R<a class="anchor" aria-label="anchor" href="#step-1-install-r"></a>
|
||||
</h3>
|
||||
<p>Ensure that R is installed on your system. R has minimal dependencies
|
||||
and is very simple to install:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Linux</strong>
|
||||
<ul>
|
||||
<li>Ubuntu / Debian:<br><code>sudo apt install r-base</code>
|
||||
</li>
|
||||
<li>Fedora:<br><code>sudo dnf install R</code>
|
||||
</li>
|
||||
<li>CentOS/RHEL:<br><code>sudo yum install R</code>
|
||||
</li>
|
||||
<li>Arch Linux:<br><code>sudo pacman -S r</code>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<strong>macOS</strong> (with Homebrew):<br><code>brew install r</code>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Other Systems:</strong><br>
|
||||
Visit the <a href="https://cran.r-project.org" class="external-link">CRAN download
|
||||
page</a>.</li>
|
||||
</ul>
|
||||
<p>To be able to use the <code>AMR</code> Python package, it is required
|
||||
to install both R and the <code>AMR</code> R package.</p>
|
||||
<div class="section level4">
|
||||
<h4 id="preparation-install-r-and-amr-r-package">Preparation: Install R and <code>AMR</code> R package<a class="anchor" aria-label="anchor" href="#preparation-install-r-and-amr-r-package"></a>
|
||||
</h4>
|
||||
<p>For Linux and macOS, this is just:</p>
|
||||
<div class="sourceCode" id="cb4"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" tabindex="-1"></a><span class="co"># Ubuntu / Debian</span></span>
|
||||
<span id="cb4-2"><a href="#cb4-2" tabindex="-1"></a><span class="fu">sudo</span> apt install r-base <span class="kw">&&</span> <span class="ex">Rscript</span> <span class="at">-e</span> <span class="st">'install.packages("AMR")'</span></span>
|
||||
<span id="cb4-3"><a href="#cb4-3" tabindex="-1"></a><span class="co"># Fedora:</span></span>
|
||||
<span id="cb4-4"><a href="#cb4-4" tabindex="-1"></a><span class="fu">sudo</span> dnf install R <span class="kw">&&</span> <span class="ex">Rscript</span> <span class="at">-e</span> <span class="st">'install.packages("AMR")'</span></span>
|
||||
<span id="cb4-5"><a href="#cb4-5" tabindex="-1"></a><span class="co"># CentOS/RHEL</span></span>
|
||||
<span id="cb4-6"><a href="#cb4-6" tabindex="-1"></a><span class="fu">sudo</span> yum install R <span class="kw">&&</span> <span class="ex">Rscript</span> <span class="at">-e</span> <span class="st">'install.packages("AMR")'</span></span>
|
||||
<span id="cb4-7"><a href="#cb4-7" tabindex="-1"></a><span class="co"># Arch Linux</span></span>
|
||||
<span id="cb4-8"><a href="#cb4-8" tabindex="-1"></a><span class="fu">sudo</span> pacman <span class="at">-S</span> r <span class="kw">&&</span> <span class="ex">Rscript</span> <span class="at">-e</span> <span class="st">'install.packages("AMR")'</span></span>
|
||||
<span id="cb4-9"><a href="#cb4-9" tabindex="-1"></a><span class="co"># macOS</span></span>
|
||||
<span id="cb4-10"><a href="#cb4-10" tabindex="-1"></a><span class="ex">brew</span> install r <span class="kw">&&</span> <span class="ex">Rscript</span> <span class="at">-e</span> <span class="st">'install.packages("AMR")'</span></span></code></pre></div>
|
||||
<p>For Windows, visit the <a href="https://cran.r-project.org" class="external-link">CRAN
|
||||
download page</a> in install R, then afterwards install the ‘AMR’
|
||||
package manually.</p>
|
||||
</div>
|
||||
<div class="section level3">
|
||||
<h3 id="step-2-install-the-amr-package-in-r">Step 2: Install the <code>AMR</code> package in R<a class="anchor" aria-label="anchor" href="#step-2-install-the-amr-package-in-r"></a>
|
||||
</h3>
|
||||
<p>On Linux and macOS, open Terminal and run:</p>
|
||||
<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" tabindex="-1"></a><span class="ex">Rscript</span> <span class="at">-e</span> <span class="st">'install.packages("AMR")'</span></span></code></pre></div>
|
||||
<p>For other systems, open your R console and install the
|
||||
<code>AMR</code> package by running:</p>
|
||||
<div class="sourceCode" id="cb2"><pre class="downlit sourceCode r">
|
||||
<code class="sourceCode R"><span><span class="fu"><a href="https://rdrr.io/r/utils/install.packages.html" class="external-link">install.packages</a></span><span class="op">(</span><span class="st">"AMR"</span><span class="op">)</span></span></code></pre></div>
|
||||
<p>On any system, you can also install the latest development version of
|
||||
the <code>AMR</code> package by setting <code>repos</code> to our beta
|
||||
channel:</p>
|
||||
<div class="sourceCode" id="cb3"><pre class="downlit sourceCode r">
|
||||
<code class="sourceCode R"><span><span class="fu"><a href="https://rdrr.io/r/utils/install.packages.html" class="external-link">install.packages</a></span><span class="op">(</span><span class="st">"AMR"</span>, repos <span class="op">=</span> <span class="st">"https://msberends.r-universe.dev"</span><span class="op">)</span></span></code></pre></div>
|
||||
</div>
|
||||
<div class="section level3">
|
||||
<h3 id="step-3-install-rpy2-in-python">Step 3: Install <code>rpy2</code> in Python<a class="anchor" aria-label="anchor" href="#step-3-install-rpy2-in-python"></a>
|
||||
</h3>
|
||||
<p>To install <code>rpy2</code>, simply run the following command in
|
||||
your terminal:</p>
|
||||
<div class="sourceCode" id="cb4"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" tabindex="-1"></a><span class="ex">pip</span> install rpy2</span></code></pre></div>
|
||||
</div>
|
||||
<div class="section level3">
|
||||
<h3 id="step-4-test-rpy2-installation">Step 4: Test <code>rpy2</code> Installation<a class="anchor" aria-label="anchor" href="#step-4-test-rpy2-installation"></a>
|
||||
</h3>
|
||||
<p>To ensure everything is set up correctly, you can test your
|
||||
installation by running the following Python script, which essentially
|
||||
runs R in the background:</p>
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb5-1"><a href="#cb5-1" tabindex="-1"></a><span class="im">import</span> rpy2.robjects <span class="im">as</span> ro</span>
|
||||
<span id="cb5-2"><a href="#cb5-2" tabindex="-1"></a></span>
|
||||
<span id="cb5-3"><a href="#cb5-3" tabindex="-1"></a><span class="co"># Test a simple R function from Python</span></span>
|
||||
<span id="cb5-4"><a href="#cb5-4" tabindex="-1"></a>ro.r(<span class="st">'1 + 1'</span>)</span></code></pre></div>
|
||||
<p>If this returns <code>2</code>, you’re good to go!</p>
|
||||
<div class="section level4">
|
||||
<h4 id="install-amr-python-package">Install <code>AMR</code> Python Package<a class="anchor" aria-label="anchor" href="#install-amr-python-package"></a>
|
||||
</h4>
|
||||
<p>Since the Python package is available on the official <a href="https://pypi.org/project/AMR/" class="external-link">Python Package Index</a>, you can
|
||||
just run:</p>
|
||||
<div class="sourceCode" id="cb5"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" tabindex="-1"></a><span class="ex">pip</span> install AMR</span></code></pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section level2">
|
||||
<h2 id="working-with-amr-in-python">Working with <code>AMR</code> in Python<a class="anchor" aria-label="anchor" href="#working-with-amr-in-python"></a>
|
||||
</h2>
|
||||
<p>Now that we have <code>rpy2</code> set up, let’s walk through some
|
||||
practical examples of using the <code>AMR</code> package within
|
||||
Python.</p>
|
||||
<p>Now that we have everything set up, let’s walk through some practical
|
||||
examples of using the <code>AMR</code> package within Python.</p>
|
||||
<div class="section level3">
|
||||
<h3 id="example-1-converting-taxonomic-data">Example 1: Converting Taxonomic Data<a class="anchor" aria-label="anchor" href="#example-1-converting-taxonomic-data"></a>
|
||||
<h3 id="example-1-calculating-amr">Example 1: Calculating AMR<a class="anchor" aria-label="anchor" href="#example-1-calculating-amr"></a>
|
||||
</h3>
|
||||
<p>Let’s start by converting taxonomic user input to valid taxonomy
|
||||
using the <code>AMR</code> package, from within Python:</p>
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb6-1"><a href="#cb6-1" tabindex="-1"></a><span class="im">import</span> pandas <span class="im">as</span> pd</span>
|
||||
<span id="cb6-2"><a href="#cb6-2" tabindex="-1"></a><span class="im">import</span> rpy2.robjects <span class="im">as</span> ro</span>
|
||||
<span id="cb6-3"><a href="#cb6-3" tabindex="-1"></a><span class="im">from</span> rpy2.robjects.packages <span class="im">import</span> importr</span>
|
||||
<span id="cb6-4"><a href="#cb6-4" tabindex="-1"></a><span class="im">from</span> rpy2.robjects <span class="im">import</span> pandas2ri</span>
|
||||
<span id="cb6-5"><a href="#cb6-5" tabindex="-1"></a></span>
|
||||
<span id="cb6-6"><a href="#cb6-6" tabindex="-1"></a><span class="co"># Load the AMR package from R</span></span>
|
||||
<span id="cb6-7"><a href="#cb6-7" tabindex="-1"></a>amr <span class="op">=</span> importr(<span class="st">'AMR'</span>)</span>
|
||||
<span id="cb6-8"><a href="#cb6-8" tabindex="-1"></a></span>
|
||||
<span id="cb6-9"><a href="#cb6-9" tabindex="-1"></a><span class="co"># Example user dataset in Python</span></span>
|
||||
<span id="cb6-10"><a href="#cb6-10" tabindex="-1"></a>data <span class="op">=</span> pd.DataFrame({</span>
|
||||
<span id="cb6-11"><a href="#cb6-11" tabindex="-1"></a> <span class="st">'microorganism'</span>: [<span class="st">'E. coli'</span>, <span class="st">'S. aureus'</span>, <span class="st">'P. aeruginosa'</span>, <span class="st">'K. pneumoniae'</span>]</span>
|
||||
<span id="cb6-12"><a href="#cb6-12" tabindex="-1"></a>})</span>
|
||||
<span id="cb6-13"><a href="#cb6-13" tabindex="-1"></a></span>
|
||||
<span id="cb6-14"><a href="#cb6-14" tabindex="-1"></a><span class="co"># Apply mo_name() from the AMR package to the 'microorganism' column</span></span>
|
||||
<span id="cb6-15"><a href="#cb6-15" tabindex="-1"></a>ro.globalenv[<span class="st">'r_data'</span>] <span class="op">=</span> data</span>
|
||||
<span id="cb6-16"><a href="#cb6-16" tabindex="-1"></a>ro.r(<span class="st">'r_data$mo_name <- mo_name(r_data$microorganism)'</span>)</span>
|
||||
<span id="cb6-17"><a href="#cb6-17" tabindex="-1"></a></span>
|
||||
<span id="cb6-18"><a href="#cb6-18" tabindex="-1"></a><span class="co"># Retrieve and print the modified R DataFrame in Python</span></span>
|
||||
<span id="cb6-19"><a href="#cb6-19" tabindex="-1"></a>result <span class="op">=</span> ro.r(<span class="st">'r_data'</span>)</span>
|
||||
<span id="cb6-20"><a href="#cb6-20" tabindex="-1"></a>result <span class="op">=</span> pandas2ri.rpy2py(result)</span>
|
||||
<span id="cb6-21"><a href="#cb6-21" tabindex="-1"></a><span class="bu">print</span>(result)</span></code></pre></div>
|
||||
<p>In this example, a Python dataset with microorganism names like
|
||||
<em>E. coli</em> and <em>S. aureus</em> is passed to the R function
|
||||
<code><a href="../reference/mo_property.html">mo_name()</a></code>. The result is an updated <code>DataFrame</code>
|
||||
that includes the standardised microorganism names based on the
|
||||
<code><a href="../reference/mo_property.html">mo_name()</a></code> function from the <code>AMR</code> package.</p>
|
||||
<div class="sourceCode" id="cb6"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb6-1"><a href="#cb6-1" tabindex="-1"></a><span class="im">import</span> AMR</span>
|
||||
<span id="cb6-2"><a href="#cb6-2" tabindex="-1"></a><span class="im">import</span> pandas <span class="im">as</span> pd</span>
|
||||
<span id="cb6-3"><a href="#cb6-3" tabindex="-1"></a></span>
|
||||
<span id="cb6-4"><a href="#cb6-4" tabindex="-1"></a>df <span class="op">=</span> AMR.example_isolates</span>
|
||||
<span id="cb6-5"><a href="#cb6-5" tabindex="-1"></a>result <span class="op">=</span> AMR.resistance(df[<span class="st">"AMX"</span>])</span>
|
||||
<span id="cb6-6"><a href="#cb6-6" tabindex="-1"></a><span class="bu">print</span>(result)</span></code></pre></div>
|
||||
<pre><code>[0.59555556]</code></pre>
|
||||
</div>
|
||||
<div class="section level3">
|
||||
<h3 id="example-2-generating-an-antibiogram">Example 2: Generating an Antibiogram<a class="anchor" aria-label="anchor" href="#example-2-generating-an-antibiogram"></a>
|
||||
<h3 id="example-2-generating-antibiograms">Example 2: Generating Antibiograms<a class="anchor" aria-label="anchor" href="#example-2-generating-antibiograms"></a>
|
||||
</h3>
|
||||
<p>One of the core functions of the <code>AMR</code> 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:</p>
|
||||
<div class="sourceCode" id="cb7"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb7-1"><a href="#cb7-1" tabindex="-1"></a><span class="co"># Run an antibiogram in R from Python</span></span>
|
||||
<span id="cb7-2"><a href="#cb7-2" tabindex="-1"></a>ro.r(<span class="st">'result <- antibiogram(example_isolates, antibiotics = c(aminoglycosides(), carbapenems()))'</span>)</span>
|
||||
<span id="cb7-3"><a href="#cb7-3" tabindex="-1"></a></span>
|
||||
<span id="cb7-4"><a href="#cb7-4" tabindex="-1"></a><span class="co"># Retrieve the result in Python</span></span>
|
||||
<span id="cb7-5"><a href="#cb7-5" tabindex="-1"></a>result <span class="op">=</span> ro.r(<span class="st">'as.data.frame(result)'</span>)</span>
|
||||
<span id="cb7-6"><a href="#cb7-6" tabindex="-1"></a><span class="bu">print</span>(result)</span></code></pre></div>
|
||||
<p>In this example, we generate an antibiogram by selecting
|
||||
aminoglycosides and carbapenems, two classes of antibiotics, and then
|
||||
convert the resulting R data frame into a Python-readable format.</p>
|
||||
</div>
|
||||
<div class="section level3">
|
||||
<h3 id="example-3-filtering-data-based-on-gram-negative-bacteria">Example 3: Filtering Data Based on Gram-Negative Bacteria<a class="anchor" aria-label="anchor" href="#example-3-filtering-data-based-on-gram-negative-bacteria"></a>
|
||||
</h3>
|
||||
<p>Let’s say you want to filter the dataset for Gram-negative bacteria
|
||||
and display their resistance to certain antibiotics:</p>
|
||||
<div class="sourceCode" id="cb8"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb8-1"><a href="#cb8-1" tabindex="-1"></a><span class="co"># Filter for Gram-negative bacteria with intrinsic resistance to cefotaxime</span></span>
|
||||
<span id="cb8-2"><a href="#cb8-2" tabindex="-1"></a>ro.r(<span class="st">'result <- example_isolates[which(mo_is_gram_negative() & mo_is_intrinsic_resistant(ab = "cefotax")), c("bacteria", aminoglycosides(), carbapenems())]'</span>)</span>
|
||||
<span id="cb8-3"><a href="#cb8-3" tabindex="-1"></a></span>
|
||||
<span id="cb8-4"><a href="#cb8-4" tabindex="-1"></a><span class="co"># Retrieve the filtered result in Python</span></span>
|
||||
<span id="cb8-5"><a href="#cb8-5" tabindex="-1"></a>result <span class="op">=</span> ro.r(<span class="st">'as.data.frame(result)'</span>)</span>
|
||||
<span id="cb8-6"><a href="#cb8-6" tabindex="-1"></a><span class="bu">print</span>(result)</span></code></pre></div>
|
||||
<p>This example uses the AMR functions
|
||||
<code><a href="../reference/mo_property.html">mo_is_gram_negative()</a></code> and
|
||||
<code><a href="../reference/mo_property.html">mo_is_intrinsic_resistant()</a></code> to filter the dataset and
|
||||
returns a subset of bacteria with resistance data.</p>
|
||||
</div>
|
||||
<div class="section level3">
|
||||
<h3 id="example-4-customising-the-antibiogram">Example 4: Customising the Antibiogram<a class="anchor" aria-label="anchor" href="#example-4-customising-the-antibiogram"></a>
|
||||
</h3>
|
||||
<p>You can easily customise the antibiogram by passing different
|
||||
antibiotics or microorganism transformations, as shown below:</p>
|
||||
<div class="sourceCode" id="cb9"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb9-1"><a href="#cb9-1" tabindex="-1"></a><span class="co"># Customise the antibiogram with different settings</span></span>
|
||||
<span id="cb9-2"><a href="#cb9-2" tabindex="-1"></a>ro.r(<span class="st">'result <- antibiogram(example_isolates, antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"), mo_transform = "gramstain")'</span>)</span>
|
||||
<span id="cb9-3"><a href="#cb9-3" tabindex="-1"></a></span>
|
||||
<span id="cb9-4"><a href="#cb9-4" tabindex="-1"></a><span class="co"># Retrieve and print the result</span></span>
|
||||
<span id="cb9-5"><a href="#cb9-5" tabindex="-1"></a>result <span class="op">=</span> ro.r(<span class="st">'as.data.frame(result)'</span>)</span>
|
||||
<span id="cb9-6"><a href="#cb9-6" tabindex="-1"></a><span class="bu">print</span>(result)</span></code></pre></div>
|
||||
<p>Here, we use piperacillin/tazobactam (TZP) in combination with
|
||||
tobramycin (TOB) and gentamicin (GEN) to see how they perform against
|
||||
various Gram-negative bacteria.</p>
|
||||
<div class="sourceCode" id="cb8"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb8-1"><a href="#cb8-1" tabindex="-1"></a>result2a <span class="op">=</span> AMR.antibiogram(df[[<span class="st">"mo"</span>, <span class="st">"AMX"</span>, <span class="st">"CIP"</span>, <span class="st">"TZP"</span>]])</span>
|
||||
<span id="cb8-2"><a href="#cb8-2" tabindex="-1"></a><span class="bu">print</span>(result2a)</span></code></pre></div>
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col width="22%">
|
||||
<col width="22%">
|
||||
<col width="22%">
|
||||
<col width="33%">
|
||||
</colgroup>
|
||||
<thead><tr class="header">
|
||||
<th>Pathogen</th>
|
||||
<th>Amoxicillin</th>
|
||||
<th>Ciprofloxacin</th>
|
||||
<th>Piperacillin/tazobactam</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>CoNS</td>
|
||||
<td>7% (10/142)</td>
|
||||
<td>73% (183/252)</td>
|
||||
<td>30% (10/33)</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>E. coli</td>
|
||||
<td>50% (196/392)</td>
|
||||
<td>88% (399/456)</td>
|
||||
<td>94% (393/416)</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>K. pneumoniae</td>
|
||||
<td>0% (0/58)</td>
|
||||
<td>96% (53/55)</td>
|
||||
<td>89% (47/53)</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>P. aeruginosa</td>
|
||||
<td>0% (0/30)</td>
|
||||
<td>100% (30/30)</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>P. mirabilis</td>
|
||||
<td>None</td>
|
||||
<td>94% (34/36)</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>S. aureus</td>
|
||||
<td>6% (8/131)</td>
|
||||
<td>90% (171/191)</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>S. epidermidis</td>
|
||||
<td>1% (1/91)</td>
|
||||
<td>64% (87/136)</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>S. hominis</td>
|
||||
<td>None</td>
|
||||
<td>80% (56/70)</td>
|
||||
<td>None</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>S. pneumoniae</td>
|
||||
<td>100% (112/112)</td>
|
||||
<td>None</td>
|
||||
<td>100% (112/112)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="sourceCode" id="cb9"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb9-1"><a href="#cb9-1" tabindex="-1"></a>result2b <span class="op">=</span> AMR.antibiogram(df[[<span class="st">"mo"</span>, <span class="st">"AMX"</span>, <span class="st">"CIP"</span>, <span class="st">"TZP"</span>]], mo_transform <span class="op">=</span> <span class="st">"gramstain"</span>)</span>
|
||||
<span id="cb9-2"><a href="#cb9-2" tabindex="-1"></a><span class="bu">print</span>(result2b)</span></code></pre></div>
|
||||
<table class="table">
|
||||
<colgroup>
|
||||
<col width="20%">
|
||||
<col width="22%">
|
||||
<col width="23%">
|
||||
<col width="33%">
|
||||
</colgroup>
|
||||
<thead><tr class="header">
|
||||
<th>Pathogen</th>
|
||||
<th>Amoxicillin</th>
|
||||
<th>Ciprofloxacin</th>
|
||||
<th>Piperacillin/tazobactam</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>Gram-negative</td>
|
||||
<td>36% (226/631)</td>
|
||||
<td>91% (621/684)</td>
|
||||
<td>88% (565/641)</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>Gram-positive</td>
|
||||
<td>43% (305/703)</td>
|
||||
<td>77% (560/724)</td>
|
||||
<td>86% (296/345)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In this example, we generate an antibiogram by selecting various
|
||||
antibiotics.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section level2">
|
||||
<h2 id="conclusion">Conclusion<a class="anchor" aria-label="anchor" href="#conclusion"></a>
|
||||
</h2>
|
||||
<p>Using <code>rpy2</code>, you can easily integrate the power of R’s
|
||||
<code>AMR</code> package into your Python workflows. Whether you are
|
||||
generating antibiograms, analyzing resistance data, or performing
|
||||
complex filtering, <code>rpy2</code> gives you the flexibility to run R
|
||||
code without leaving the Python environment. This makes it a perfect
|
||||
solution for teams working across both R and Python.</p>
|
||||
<p>With the <code>AMR</code> Python package, Python users can now
|
||||
effortlessly call R functions from the <code>AMR</code> R package. This
|
||||
eliminates the need for complex <code>rpy2</code> 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.</p>
|
||||
<p>By using <code>import AMR</code>, you can seamlessly integrate the
|
||||
robust features of the R <code>AMR</code> package into your Python
|
||||
workflows. Whether you’re cleaning data or analysing resistance
|
||||
patterns, the <code>AMR</code> Python package makes it easy to work with
|
||||
AMR data in Python.</p>
|
||||
</div>
|
||||
</main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
|
||||
</nav></aside>
|
||||
|
Reference in New Issue
Block a user