def peaks_in_block1P(fname="../../Daten/BekJan/HOAF_02.vhdr", dauer=60): """ Methode um es für einen Probanden auszurechnen, dafür relativen Pfad mit Name des Probanden versehen """ df = load_blocks() s0, t0, s1, t1, s2, t2 = df.loc[path.basename(fname)] freq, point = af_blocks(fname, dauer=dauer, start=s2, endzeit=t2) point = np.array(point) # freq, point = af_blocks(fname, start=s0, endzeit=t0) """ Plot der nicht die Datenpunkte sondern noch die Zeiten betrachtet, da kein Vergleich zwischen den Blöcken """ point = point - point[0] + 0.5 * dauer #%matplotlib plt.plot(point, freq) plt.xlabel("Zeit(s)") plt.ylabel("Af 1/120s") plt.title("Af_Stressblock_x") plt.gca().axvspan(6, 154, facecolor="0.8", alpha=0.5) plt.gca().axvspan(182, 330, facecolor="0.8", alpha=0.5) plt.gca().axvspan(358, 506, facecolor="0.8", alpha=0.5) plt.gca().axvspan(534, 682, facecolor="0.8", alpha=0.5) return freq, point
def plot_blocks(fname): """ so-t2 sind die Anfangs und Endzeiten von allen 3 Blöcken in chronologischer Reihenfolge definiert über die REsponseantwort während der Blöcke. """ df = load_blocks() s0, t0, s1, t1, s2, t2 = df.loc[path.basename(fname)] plt.gca().axvspan(s0, t0, alpha=0.2, color="red") plt.gca().axvspan(s1, t1, alpha=0.2, color="blue") plt.gca().axvspan(s2, t2, alpha=0.2, color="red") plt.legend()
def peaks_in_block(fname, dauer=60, block0=True): """ aufrufen der Funktion für 1 Stressblock: freq0, point0 = peaks_in_block(fname) block0= true, für 2 Stressblock: freq2, point2 = peaks_in_block(fname, block0=False), block0 auf false plot: plt.plot(point0, freq0) plt.plot(point2, freq2) """ df = load_blocks() s0, t0, s1, t1, s2, t2 = df.loc[path.basename(fname)] s, t = (s0, t0) if block0 else (s2, t2) freq, point = af_blocks(fname, dauer=dauer, start=s, endzeit=t) point = np.array(point) """ da wir den moving average betrachten, verlieren wir am Anfang und am Ende Zeit diese Zeit müssen wir wieder hinzurechnen """ return freq, point - point[0] + 0.5 * dauer
lf = (ef.reset_index().melt(id_vars=["prob_id"], value_name="eda", var_name="time").dropna()) lf["block"] = pd.NA for i, (pid, breaks) in enumerate(blocks.iterrows()): breaks[0] = -0.001 intervals = pd.IntervalIndex.from_breaks(breaks) rows = lf.prob_id == pid block_codes = pd.cut(lf.loc[rows, "time"], intervals).cat.codes lf.loc[rows, "block"] = block_codes lf.block = lf.block.astype("int8") return lf if __name__ == "__main__": bs = load_blocks() keep = bs.index.str.match(r"HOAF_\d.+vhdr") bs.drop(bs[~keep].index, inplace=True) bs[0] = 0.0 bs = bs.reindex(columns=sorted(bs.columns)) bs.index.set_names("file", inplace=True) duration = pd.DataFrame(index=bs.index) for i in range(6): duration[i] = bs[i + 1] - bs[i] duration.to_csv("duration.tsv", sep="\t", float_format="%.2f") blocks = index_prob_id(bs) lf = eda_long(blocks) lf.eda *= 1e6 lf.to_csv("eda_long.tsv", sep="\t", float_format="%07.4f", index=False)
s, t = (s0, t0) if block0 else (s2, t2) freq, point = af_blocks(fname, dauer=dauer, start=s, endzeit=t) point = np.array(point) """ da wir den moving average betrachten, verlieren wir am Anfang und am Ende Zeit diese Zeit müssen wir wieder hinzurechnen """ return freq, point - point[0] + 0.5 * dauer if __name__ == "__main__": process_all = True if process_all: ls = [] point = None filenames = [path.join("../../Daten/BekJan/", f) for f in load_blocks().index] for filepath in filenames: freq, point = peaks_in_block(filepath) ls.append(freq) matrix = np.array(ls) dmatrix = pd.DataFrame(matrix) df_peak.columns = [ "HOAF_01", " HOAF_02", "HOAF_03", "HOAF_04", "HOAF_05", "HOAF_09", "HOAF_11", "HOAF_12",
(reduce_mean(times, size=size), reduce_mean(data, size=size)) ) # reduced mean(um die Datenpunkte zu minimieren) with open(backup, "wb") as io: pickle.dump(ls, io) return ls if __name__ == "__main__": process_all = True if process_all: """ s kann flexibel angepasst werden jenachdem wieviele Datenpunkte wir darstellen wollen """ size = 50000 rs = 1 filenames = [path.join(DATEN + "/BekJan/", f) for f in load_blocks().index] ls = compute_reduced_eda(size, filenames) for (times, data) in ls: """ würde man vor data noch zscore setzten, dann kann man sich die Abweichungen vom Mittelwert, bzw der Std darstellen rolling (moving average): Glätten der Daten durch Vergleich mit den Nachbardaten """ plt.plot(times, pd.Series(data).rolling(rs).mean()) plt.title("alle Probanden EDA" + " s=" + str(size) + " rs=" + str(rs)) plt.xlabel("Zeit(s)") plt.ylabel("EDA(S)", labelpad=25) else: fname = DATEN + "/BekJan/HOAF_16.vhdr" times, data, _ = load_eda(fname) """