NeuroKit.py icon indicating copy to clipboard operation
NeuroKit.py copied to clipboard

TypeError when analysing EDA

Open jaros1024 opened this issue 5 years ago • 8 comments

Hello, I have a problem when trying to analyse EDA. Here is the stacktrace: File "C:\Users\jaros1024\PycharmProjects\Project1\lib\new_gsr.py", line 13, in __init__ self.data = nk.eda_scr(y, sampling_rate=freq) File "C:\Users\jaros1024\PycharmProjects\Project1\venv3\lib\site-packages\neurokit\bio\bio_eda.py", line 399, in eda_scr peaks, _ = biosppy.tools.find_extrema(signal=signal, mode='max') File "C:\Users\jaros1024\PycharmProjects\Project1\venv3\lib\site-packages\biosppy\signals\tools.py", line 1108, in find_extrema values = signal[extrema] TypeError: only integer scalar arrays can be converted to a scalar index

I tried Python 3.6 and 3.7, both with numpy 1.14.6 and 1.15.2. Same effect for all. As far as I know, something was changed in recent numpy versions, so the syntax that you used is no longer supported. Could you track it down and try to implement a workaround for this issue?

jaros1024 avatar Sep 25 '18 19:09 jaros1024

@jaros1024 That's weird indeed, I'll look at it :) Could you tell me what is your version of NeuroKit and Biosppy?

DominiqueMakowski avatar Sep 25 '18 20:09 DominiqueMakowski

I just noticed that I had NeuroKit version 0.2.0 installed, but just updated to 0.2.7 and the problem is still the same. Biosppy is 0.6.1 - so I haven't changed anything.

jaros1024 avatar Sep 25 '18 20:09 jaros1024

Great, could you provide a sample of data and a reproducible code snippet so that I can reproduce it and dig into it? Thanks!

DominiqueMakowski avatar Sep 25 '18 20:09 DominiqueMakowski

Sure! See the attached file. It's just a pickle dump, so you can open it like:

import pickle

def open_file(in_file):
    with open(in_file, 'rb') as fp:
        itemlist = pickle.load(fp)
        return itemlist

sample.zip

jaros1024 avatar Sep 26 '18 20:09 jaros1024

It works for me with this code:

import pickle
import neurokit as nk
import pandas as pd

def open_file(in_file):
    with open(in_file, 'rb') as fp:
        itemlist = pickle.load(fp)
        return itemlist


data = open_file("sample.dat")
data = pd.DataFrame({"EDA" : data})  # Convert to dataframe
data.plot()  # Check signal

figure_1

results = nk.eda_process(data["EDA"], sampling_rate=100)

# Plot standardized data (visually more clear) wiht SCR peaks markers
nk.plot_events_in_signal(nk.z_score(results["df"]), results["EDA"]["SCR_Peaks_Indexes"])

figure_1-1

However, make sure to adjust correctly your sampling_rate (I set to 100 for illustrative purposes)

DominiqueMakowski avatar Sep 27 '18 08:09 DominiqueMakowski

Thanks! Do you think the error might be caused by wrong sampling_rate? To be honest, my data is so poorly documented that I won't be surprised if the sampling rate in documentation is wrong :)

jaros1024 avatar Sep 28 '18 17:09 jaros1024

Just copied and pasted your code. I got an another error:

NeuroKit Warning: eda_process(): Error in cvxEDA algorithm, couldn't extract phasic and tonic components. Using raw signal.
Traceback (most recent call last):
  File "C:/Users/Jarek/PycharmProjects/emotion-predictor/test.py", line 22, in <module>
    nk.plot_events_in_signal(nk.z_score(results["df"]), results["EDA"]["SCR_Peaks_Indexes"])
  File "C:\Users\Jarek\PycharmProjects\emotion-predictor\venv\lib\site-packages\neurokit\signal\events.py", line 271, in plot_events_in_signal
    len(events_onsets[0])
IndexError: index 0 is out of bounds for axis 0 with size 0

So it looks like something is wrong with my configuration. What cvxopt version do you use? Mine is 1.2.1.

// never mind, downgraded to Python 3.6 and looks like it works.

jaros1024 avatar Sep 29 '18 11:09 jaros1024

@jaros1024 Ok it's good that it works, but I'll try to understand what was wrong with 3.7 and fix it :) thanks for reporting!

DominiqueMakowski avatar Sep 30 '18 08:09 DominiqueMakowski