Source code for spiketimes.df.surrogates

import pandas as pd
from ..surrogates import shuffled_isi_spiketrains as shuffled_isi_spiketrains_arr
from ..surrogates import jitter_spiketrains as jitter_spiketrains_arr
from .conversion import list_to_df


[docs]def shuffled_isi_spiketrains( df: pd.core.frame.DataFrame, spiketimes_col: str = "spiketimes", n: int = 1, returned_surrogate_label: str = "surrogate", ): """ Create multiple shuffled-ISI surrogates from a single parent spiketrain. Given a dataframe containing a spiketimes from a neuron, returns a dataframe of n surrogate spiketrians by shuffling inter-spike-intervals Args: df: dataframe containing the data spiketimes_col: label of column containing spiketimes n: number of surrogate spiketrains to replicate returned_surrogate_label: column label indicating surrogate identity Returns: a pandas dataframe of spiketimes indexed by spiketrain """ return list_to_df( shuffled_isi_spiketrains_arr(df[spiketimes_col].values, n=n), returned_spiketrain_label=returned_surrogate_label, )
[docs]def jitter_spiketrains( df: pd.core.frame.DataFrame, jitter_window_size: float, spiketimes_col: str = "spiketimes", n: int = 1, returned_surrogate_label: str = "surrogate", ): """ Create multiple spiketime-jittered surrogates from a single parent spiketrain. Given a dataframe containing a spiketimes from a neuron, returns a dataframe of n surrogate spiketrians by binning spike counts and randomly dispersing spiketimes within each timebin. Args: df: dataframe containing the data spiketimes_col: label of column containing spiketimes jitter_window_size: binwidth in seconds used to bin spike counts n: number of surrogate spiketrains to replicate returned_surrogate_label: column label indicating surrogate identity Returns: a pandas dataframe of spiketimes indexed by spiketrain """ return list_to_df( jitter_spiketrains_arr( df[spiketimes_col].values, jitter_window_size=jitter_window_size, n=n ), returned_spiketrain_label=returned_surrogate_label, )
[docs]def shuffled_isi_spiketrains_by( df: pd.core.frame.DataFrame, spiketimes_col: str = "spiketimes", by_col: str = "spiketrain", n: int = 1, ): """ Craete multiple shuffled-ISI surrogates for spiketrain in a dataframe. Given a dataframe of spiketimes grouped by spiketrain another column, generates n surrogates from each spiketrain. Surrgates are generated by shuffling inter-spike-intervals. Args: df: dataframe containing the data spiketimes_col: label of column containing spiketimes by_col: label of column indicating group (e.g. neuron_id, spiketrain_id or trial_id) n: number of surrogates to generate per group Returns: A pandas dataframe containing surrogate spiketrain indexed by a 'surrogate_replicate' column """ return ( df.groupby(by_col) .apply( lambda x: shuffled_isi_spiketrains(x, spiketimes_col=spiketimes_col, n=n) ) .reset_index() .drop("level_1", axis=1) )
[docs]def jitter_spiketrains_by( df: pd.core.frame.DataFrame, jitter_window_size: float, spiketimes_col: str = "spiketimes", by_col: str = "spiketrain", n: int = 1, ): """ Craete multiple shuffled-ISI surrogates for spiketrain in a dataframe. Given a dataframe of spiketimes grouped by spiketrain another column, generates n surrogates from each spiketrain. Surrogates generated by generating spikecounts from the parent from the start point of the spiketrain untill the end, then generating surrogates with the same number of spikes in each time bin, but with spiketimes randomised. Args: df: dataframe containing the data jitter_window_size: binwidth in seconds used to bin spike counts spiketimes_col: label of column containing spiketimes by_col: label of column indicating group (e.g. neuron_id, spiketrain_id or trial_id) n: number of surrogates to generate per group Returns: A pandas dataframe containing surrogate spiketrain indexed by a 'surrogate_replicate' column """ return ( df.groupby(by_col) .apply( lambda x: jitter_spiketrains( x, spiketimes_col=spiketimes_col, n=n, jitter_window_size=jitter_window_size, ) ) .reset_index() .drop("level_1", axis=1) )