a few fixes, new tables

This commit is contained in:
2021-06-11 11:18:32 +02:00
parent 498b71cd7c
commit 7008a08c6d
4 changed files with 264 additions and 125 deletions

View File

@@ -29,52 +29,61 @@ def visit_times_to_float(fish_behavior, feeder_number):
return start_times, end_times, durations
def get_visit_times(fish_behavior, day, subject, light_cond):
def get_visit_durations(fish_behavior, day, subject, light_cond):
# print(day, subject)
subject_behavior_today = fish_behavior[(fish_behavior.day == day) & (fish_behavior.subject == subject)] # bastelt mir auch Kombis die es gar nicht gibt--> die müssten dann ja leer sein
visit_times = np.zeros(8)
visit_durations = np.zeros(8)
all_light = [] # Visittimes die im Hellen stattgefunden haben
all_dark = [] # Visittimes die im Dunkeln stattgefunden haben
for d in range(1, 9): # Holt den ganzen kladderadatsch aus der anderen csv Datei
feeder_light_condition = "light" if (light_cond == "top" and d < 5) or (light_cond == "bottom" and d >= 5) else "dark"
_, _, durations = visit_times_to_float(subject_behavior_today, d)
dark_counts = 0
light_counts = 0
for feeder_number in range(1, 9): # Holt den ganzen kladderadatsch aus der anderen csv Datei
feeder_light_condition = "light" if (light_cond == "top" and feeder_number < 5) or (light_cond == "bottom" and feeder_number >= 5) else "dark"
_, _, durations = visit_times_to_float(subject_behavior_today, feeder_number)
if len(durations) == 0: # Wenn die Durationliste für diesen Feeder leer sein sollte : setze nan ein
visit_times[d - 1] = np.nan
visit_durations[feeder_number - 1] = np.nan
else:
visit_times[d - 1] = np.median(durations) # Wenn die Liste länger als 0 ist --> mach mir nen Median
visit_durations[feeder_number - 1] = np.median(durations) # Wenn die Liste länger als 0 ist --> mach mir nen Median
if feeder_light_condition == 'light':
all_light.append(visit_times[d-1])
all_light.append(visit_durations[feeder_number-1])
light_counts += len(durations)
else:
all_dark.append(visit_times[d-1])
return visit_times, np.nanmedian(all_light), np.nanmedian(all_dark)
all_dark.append(visit_durations[feeder_number-1])
dark_counts += len(durations)
return visit_durations, np.nanmedian(all_light), np.nanmedian(all_dark), light_counts, dark_counts
def plot_trial_visit_times (fish_behavior, setup_config, days, subjects):
x_val = [1, 2, 3, 4, 5, 6, 7, 8]
for day in days: # muss diese Schleife bauen, weil meine Funktion nur für einen Trial konzipiert ist
dark_light_duration_relation = []
dark_light_count_relation = []
for day in days:
fig = plt.figure(figsize=(7, 4))
feeder_visists_axis = fig.add_subplot(1, 2, 1)
boxplot_axis = fig.add_subplot(1,2,2)
feeder_visists_axis = fig.add_subplot(1, 3, 1)
boxplot_axis = fig.add_subplot(1,3,2)
count_axis = fig.add_subplot(1,3,3)
light_duration = []
dark_duration = []
light_counts = []
dark_counts = []
for i, subject in enumerate(subjects):
if subject not in setup_config.subject[setup_config['day'] == day].unique():
print("subject %s was not recorded on day %s" % (subject, day))
continue
print(subject, day)
light_cond = setup_config.dark[(setup_config['day'] == day) & (setup_config['subject'] == subject)].values[0]
feeder_visit_times, med_light, med_dark = get_visit_times(fish_behavior, day, subject, light_cond)
plot_visit_times = feeder_visit_times
plot_visit_times[np.isnan(feeder_visit_times)] = 0.0
feeder_visists_axis.scatter(x_val, plot_visit_times)
feeder_visit_durations, med_light, med_dark, count_light, count_dark = get_visit_durations(fish_behavior, day, subject, light_cond)
plot_visit_durations = feeder_visit_durations
plot_visit_durations[np.isnan(feeder_visit_durations)] = 0.0
feeder_visists_axis.scatter(x_val, plot_visit_durations)
light_duration.append(med_light)
dark_duration.append(med_dark)
light_counts.append(count_light)
dark_counts.append(count_dark)
light_duration = np.array(light_duration)
dark_duration = np.array(dark_duration)
@@ -84,8 +93,40 @@ def plot_trial_visit_times (fish_behavior, setup_config, days, subjects):
feeder_visists_axis.set_title(title)
boxplot_axis.boxplot([light_duration[~np.isnan(light_duration)],
dark_duration[~np.isnan(dark_duration)]])
#print(light_cond)
plt.show()
boxplot_axis.set_xticklabels(["light", "dark"])
count_axis.boxplot([light_counts, dark_counts])
count_axis.set_xticklabels(["light", "dark"])
count_axis.set_ylabel("number of visits")
plt.close()
dark_light_duration_relation.append(np.median(dark_duration)/np.median(light_duration))
dark_light_count_relation.append(np.median(dark_counts)/np.median(light_counts))
dark_light_duration_relation = np.array(dark_light_duration_relation)
dark_light_count_relation = np.array(dark_light_count_relation)
days = np.arange(len(dark_light_duration_relation), dtype=int)
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(days, dark_light_duration_relation, marker=".", lw=0.1, label="visit durations")
m, n, r, p, _ = st.linregress(days[~ np.isnan(dark_light_duration_relation)],
dark_light_duration_relation[~ np.isnan(dark_light_duration_relation)])
ax1.plot(days, m * days + n, label="r: %.2f, p:%.3f" % (r, p))
ax1.legend()
ax1.set_ylabel("duration relation dark/light", fontsize=9)
ax1.set_ylim([0., 1.2* max(dark_light_duration_relation)])
ax2 = fig.add_subplot(2,1,2)
ax2.plot(days, dark_light_count_relation, marker=".", lw=0.1, label="visit counts")
m, n, r, p, _ = st.linregress(days[~ np.isnan(dark_light_count_relation)],
dark_light_count_relation[~ np.isnan(dark_light_count_relation)])
ax2.plot(days, m * days + n, label="r: %.2f, p:%.3f" % (r, p))
ax2.legend()
ax2.set_ylabel("count relation dark/light", fontsize=9)
ax2.set_xlabel("experimental days", fontsize=9)
ax2.set_ylim([0., 1.2* max(dark_light_count_relation)])
plt.show()
def get_feeder_risks(data, feeder_count=8):
risks = np.zeros(8)
@@ -279,13 +320,13 @@ if __name__ == '__main__':
#df = pd.read_csv(r'C:\Users\marie\Documents\UNI\7.Semester\Betschler\Skriptschnickschnack\csv_dateien\feeder_visits.csv', index_col=0, sep=';')
#df2 = pd.read_csv(r'C:\Users\marie\Documents\UNI\7.Semester\Betschler\Skriptschnickschnack\csv_dateien\setup_configurations.csv', index_col=0, sep=';')
df = pd.read_csv("../data/feeder_visits.csv", index_col=0, sep=';')
df2 = pd.read_csv('../data/setup_configurations.csv', index_col=0, sep=';')
df2 = pd.read_csv('../data/setup_configuration.csv', index_col=0, sep=';')
days = df.day.unique()
subjects = df.subject.unique()
# plot_trial_visit_times(df, df2, days, subjects)
boldness = analyze_feeder_risk(df, subjects, days)
plot_risk_per_day(boldness, subjects)
compare_risks_per_subject(boldness, subjects)
plot_risk_over_time(boldness, subjects)
plot_trial_visit_times(df, df2, days, subjects)
#boldness = analyze_feeder_risk(df, subjects, days)
#plot_risk_per_day(boldness, subjects)
#compare_risks_per_subject(boldness, subjects)
#plot_risk_over_time(boldness, subjects)

View File

@@ -47,6 +47,7 @@ def plot_risk_surface():
plt.savefig("risk_surface.pdf")
plt.close()
if __name__ == "__main__":
# plot_risk_surface()
setup_cfg_ext = pd.read_csv("../data/setup_configurations_ext.csv", sep=";", index_col=0)
@@ -78,10 +79,15 @@ if __name__ == "__main__":
pos = pos_row["feeder_pos_%i" % feeder_number].values[0]
pos = np.array(list(map(float, pos[1:-1].split())))
risk = get_feeder_risk(pos, sep[1], dark_center_y=dc[1])
config["feeder_pos_%i" % (9 - feeder_number)] = pos
config["feeder_risk_%i" % (9 - feeder_number)] = risk
if v == "2020.12.02_lepto40.mp4" or v == "2020.12.02_lepto43.mp4": # beide verkehrt herum gelabled
config["feeder_pos_%i" % (feeder_number)] = pos
config["feeder_risk_%i" % (feeder_number)] = risk
else:
config["feeder_pos_%i" % (9 - feeder_number)] = pos
config["feeder_risk_%i" % (9 - feeder_number)] = risk
configs.append(config)
df = pd.DataFrame(configs)
df.to_csv("../data/setup_configuration.csv", sep=";")
embed()
exit()