a few fixes, new tables
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user