1
0
mirror of https://github.com/msberends/AMR.git synced 2024-12-26 08:06:12 +01:00
AMR/articles/AMR_for_Python.html
2024-10-06 20:53:43 +00:00

310 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>AMR for Python • AMR (for R)</title>
<!-- favicons --><link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="../apple-touch-icon.png">
<link rel="apple-touch-icon" type="image/png" sizes="120x120" href="../apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" type="image/png" sizes="76x76" href="../apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" type="image/png" sizes="60x60" href="../apple-touch-icon-60x60.png">
<script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="../deps/bootstrap-5.3.1/bootstrap.min.css" rel="stylesheet">
<script src="../deps/bootstrap-5.3.1/bootstrap.bundle.min.js"></script><link href="../deps/Lato-0.4.9/font.css" rel="stylesheet">
<link href="../deps/Fira_Code-0.4.9/font.css" rel="stylesheet">
<link href="../deps/font-awesome-6.4.2/css/all.min.css" rel="stylesheet">
<link href="../deps/font-awesome-6.4.2/css/v4-shims.min.css" rel="stylesheet">
<script src="../deps/headroom-0.11.0/headroom.min.js"></script><script src="../deps/headroom-0.11.0/jQuery.headroom.min.js"></script><script src="../deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js"></script><script src="../deps/clipboard.js-2.0.11/clipboard.min.js"></script><script src="../deps/search-1.0.0/autocomplete.jquery.min.js"></script><script src="../deps/search-1.0.0/fuse.min.js"></script><script src="../deps/search-1.0.0/mark.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><link href="../extra.css" rel="stylesheet">
<script src="../extra.js"></script><meta property="og:title" content="AMR for Python">
</head>
<body>
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
<nav class="navbar navbar-expand-lg fixed-top bg-primary" data-bs-theme="dark" aria-label="Site navigation"><div class="container">
<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.9093</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">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse ms-3">
<ul class="navbar-nav me-auto">
<li class="nav-item dropdown">
<button class="nav-link dropdown-toggle" type="button" id="dropdown-how-to" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true"><span class="fa fa-question-circle"></span> How to</button>
<ul class="dropdown-menu" aria-labelledby="dropdown-how-to">
<li><a class="dropdown-item" href="../articles/AMR.html"><span class="fa fa-directions"></span> Conduct AMR Analysis</a></li>
<li><a class="dropdown-item" href="../reference/antibiogram.html"><span class="fa fa-file-prescription"></span> Generate Antibiogram (Trad./Syndromic/WISCA)</a></li>
<li><a class="dropdown-item" href="../articles/resistance_predict.html"><span class="fa fa-dice"></span> Predict Antimicrobial Resistance</a></li>
<li><a class="dropdown-item" href="../articles/datasets.html"><span class="fa fa-database"></span> Download Data Sets for Own Use</a></li>
<li><a class="dropdown-item" href="../reference/AMR-options.html"><span class="fa fa-gear"></span> Set User- Or Team-specific Package Settings</a></li>
<li><a class="dropdown-item" href="../articles/PCA.html"><span class="fa fa-compress"></span> Conduct Principal Component Analysis for AMR</a></li>
<li><a class="dropdown-item" href="../articles/MDR.html"><span class="fa fa-skull-crossbones"></span> Determine Multi-Drug Resistance (MDR)</a></li>
<li><a class="dropdown-item" href="../articles/WHONET.html"><span class="fa fa-globe-americas"></span> Work with WHONET Data</a></li>
<li><a class="dropdown-item" href="../articles/EUCAST.html"><span class="fa fa-exchange-alt"></span> Apply Eucast Rules</a></li>
<li><a class="dropdown-item" href="../reference/mo_property.html"><span class="fa fa-bug"></span> Get Taxonomy of a Microorganism</a></li>
<li><a class="dropdown-item" href="../reference/ab_property.html"><span class="fa fa-capsules"></span> Get Properties of an Antibiotic Drug</a></li>
<li><a class="dropdown-item" href="../reference/av_property.html"><span class="fa fa-capsules"></span> Get Properties of an Antiviral Drug</a></li>
</ul>
</li>
<li class="active nav-item"><a class="nav-link" href="../articles/AMR_for_Python.html"><span class="fa fab fa-python"></span> AMR for Python</a></li>
<li class="nav-item"><a class="nav-link" href="../reference/index.html"><span class="fa fa-book-open"></span> Manual</a></li>
<li class="nav-item"><a class="nav-link" href="../authors.html"><span class="fa fa-users"></span> Authors</a></li>
</ul>
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="../news/index.html"><span class="fa far fa-newspaper"></span> Changelog</a></li>
<li class="nav-item"><a class="external-link nav-link" href="https://github.com/msberends/AMR"><span class="fa fab fa-github"></span> Source Code</a></li>
</ul>
</div>
</div>
</nav><div class="container template-article">
<div class="row">
<main id="main" class="col-md-9"><div class="page-header">
<img src="../logo.svg" class="logo" alt=""><h1>AMR for Python</h1>
<small class="dont-index">Source: <a href="https://github.com/msberends/AMR/blob/main/vignettes/AMR_for_Python.Rmd" class="external-link"><code>vignettes/AMR_for_Python.Rmd</code></a></small>
<div class="d-none name"><code>AMR_for_Python.Rmd</code></div>
</div>
<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 youre 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>
<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>
<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>
</ul>
</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>
<p>Before diving into the examples, youll need to install both R and
<code>rpy2</code>. Heres 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>
</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>, youre good to go!</p>
</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, lets 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>
<p>Lets 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 &lt;- 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>
<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>
<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. Heres 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 &lt;- 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>Lets 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 &lt;- example_isolates[which(mo_is_gram_negative() &amp; 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 &lt;- 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>
</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 Rs
<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>
</div>
</main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
</nav></aside>
</div>
<footer><div class="pkgdown-footer-left">
<p><code>AMR</code> (for R). Free and open-source, licenced under the <a target="_blank" href="https://github.com/msberends/AMR/blob/main/LICENSE" class="external-link">GNU General Public License version 2.0 (GPL-2)</a>.<br>Developed at the <a target="_blank" href="https://www.rug.nl" class="external-link">University of Groningen</a> and <a target="_blank" href="https://www.umcg.nl" class="external-link">University Medical Center Groningen</a> in The Netherlands.</p>
</div>
<div class="pkgdown-footer-right">
<p><a target="_blank" href="https://www.rug.nl" class="external-link"><img src="https://github.com/msberends/AMR/raw/main/pkgdown/assets/logo_rug.svg" style="max-width: 150px;"></a><a target="_blank" href="https://www.umcg.nl" class="external-link"><img src="https://github.com/msberends/AMR/raw/main/pkgdown/assets/logo_umcg.svg" style="max-width: 150px;"></a></p>
</div>
</footer>
</div>
</body>
</html>