An open API service indexing awesome lists of open source software.

https://github.com/marceelrf/tidyspec

Analyze spectroscopy data using tidy-data philosophy
https://github.com/marceelrf/tidyspec

ftir spectroscopy tidy-data

Last synced: 7 months ago
JSON representation

Analyze spectroscopy data using tidy-data philosophy

Awesome Lists containing this project

README

          

---
output: github_document
---

```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```

# tidyspec

[![R-CMD-check](https://github.com/marceelrf/tidyspec/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/marceelrf/tidyspec/actions/workflows/R-CMD-check.yaml)
[![CRAN status](https://www.r-pkg.org/badges/version/tidyspec)](https://CRAN.R-project.org/package=tidyspec)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

The goal of **tidyspec** is to provide a friendly pipeline for spectroscopy analysis using the tidy data philosophy.

## Installation

You can install from CRAN (0.1.0):

```{r eval=FALSE}
install.packages("tidyspec")
```

You can install the development version of tidyspec from [GitHub](https://github.com/) with:

``` r
# install.packages("devtools")
devtools::install_github("marceelrf/tidyspec")
```

## About

The `tidyspec` package was design to enable the data analysis of spectroscopy data (as IR, Raman, NMR) with the tidy-data format. There are 6 families of functions in `tidyspec`, all starting with `spec_`:

- **Transformation**: Convert data from absorbance to transmittance (`spec_abs2trans`) & from transmittance to absorbance (`spec_trans2abs`).
- **Normalize**: Normalize the data to range 0-1 (`spec_norm_01`), normalize between a custom range (`spec_norm_minmax`), or normalize to have a standard deviation of one (`spec_norm_var`).
- **Baseline correction**: Correct the baseline using the the *rolling ball* algorithm (`spec_blc_rollingBall`) or *Rubberband* (`spec_blc_rubberband`). The function `spec_bl` return the baseline vectors (`spec_bl_rollingBall`, `spec_bl_rubberband`).
- **Smooth correction**: Smooth the data using the average window (`spec_smooth_avg`) or using the Savitzky-Golay algorithm (`spec_smooth_sga`).
- **Derivative**: Create differential data from the spectra (`spec_diff`).
- **Preview**: Preview your data while applying changes statically (`spec_smartplot`) or interactively (`spec_smartplotly`).

- **Import/Export**: Import spectra data from common data formats, like csv, txt, tsv, xslx and xls, with `spec_read`. Export functions will be created in next moment, but user can easily use `{readr}` or `{writexl}` functions.

The function `set_spec_wn` simplifies the use of functions by globally defining the column that contains the wave numbers. User can check the wavenumber column with `check_wn_col`.

## Example

This is a basic example which shows you how to solve a common problem:

```{r example, warning=FALSE}
library(tidyspec)
```

### The data

```{r the data}
head(CoHAspec)
```

### Set the wavenumber column

```{r set the wavenumber column}
set_spec_wn("Wavenumber")

check_wn_col()
```

### Plot the data

```{r plot_the_data, out.width = "100%",fig.alt="Static plot", fig.dpi=300}
spec_smartplot(CoHAspec)
```

### Convert to trasmittance

```{r plot_the_data_in_transmittance, out.width = "100%",fig.alt="Transmittance plot", fig.dpi=300}
CoHAspec |>
spec_abs2trans() |>
spec_smartplot(type = "transmittance")
```

### Select the spectra

```{r select_the_CoHA01_data, out.width = "100%",fig.alt="CoHA01 plot", fig.dpi=300}
spec_select(CoHAspec, CoHA01) |>
spec_smartplot(geom = "line")
```

## The future of `tidyspec`

Our plan is for tidyspec to be the first step toward a complete ecosystem for spectral data analysis. For spectral band analysis, we are creating the [bandspec](https://github.com/marceelrf/bandspec) package that handles different band profiles. We also intend to create a package focused on producing publication-level graphics for spectral data. We haven't thought of a name yet, so we welcome suggestions!