Ich bin ein Forscher, der Tierverhalten studiert, und ich versuche herauszufinden, wie ich meine Daten am besten strukturiere. Ich präsentiere Tieren kurze Musikstücke und zeichne ihre Reaktionen auf.Datenbankdesign für komplexe Musikanalyse
Die Daten
tune Jede besteht aus 1-10 Notizen von großen + Moll-Tonleitern über mehrere Oktaven zufällig ausgewählt. Jede Note wird für eine festgelegte Dauer gespielt, aber innerhalb eines kurzen Zeitfensters zufällig gespielt.
Ich notiere dann die binäre Antwort des Tieres auf die Melodie (Like/Abneigung).
Ich spiele täglich> 500 Melodien für das Tier, für> 300 Tage. Ich kombiniere auch Daten von> 10 Tieren.
Ich muss auch Variablen wie Trial Nummer an jedem Tag (war es die erste Melodie präsentiert? Letzte? Usw.), und Datum, so dass ich weiß, welche Daten aufgrund externer Probleme auszuschließen (zB Tier gestoppt Antworten nach 100 Versuchen oder für den ganzen Tag).
Die Analyse
Ich versuche, welche Arten von musikalischer Struktur in diesen zufällig erzeugten Melodien Gleichen führen/Abneigungen von dem Tiere zu entdecken. Ich mache das auf der Grundlage früherer Forschungsergebnisse überwiegend auf Hypothesenbasis. Die Abfragen, die ich in meinem Dataset ausführen muss, haben die Form: "Erhöht das Hinzufügen von mehr Noten aus derselben Oktave die Sympathie der Melodie?"
Ich führe während des Jahres auch eine Analyse des Datensatzes durch, während Daten gesammelt werden.
Was ich versucht habe
Ich kombiniere Daten von allen Tieren in eine einzige riesige Liste mit dicts. Jeder dict stellt eine einzelne Studie und die damit verbundene:
- Tier ID #
- Sitzungs-ID #
- Versuch ID #
- binäre Antwort (wie/Abneigung)
- Melodie, die definiert ist durch ein Diktat. Die Tasten sind einfach die gespielten Noten und die Werte zeigen an, wann die Note gespielt wird. Z.B.
{'1A#':[30,100]}
bedeutet eine Melodie mit nur einer Note, A # von der ersten Oktave, gespielt von 30ms bis 100ms.
Ich speichere dies in einer einzigen Beize-Datei. Jeden Tag, nachdem alle Tiere fertig sind, aktualisiere ich die Beizdatei. Ich führe meine Datenanalyse ungefähr einmal pro Woche durch Laden der aktualisierten Beizdatei durch.
Ich habe versucht, meine Daten in eine Datenbank oder Pandas DataFrame Format wegen der Geschwindigkeit von 1) Serialisierung von Daten und 2) Abfragen und 3) möglich sauberer Code, anstatt mit verschachtelten dicts. Ich dachte zunächst, dass sich meine Daten aufgrund der probeweisen Struktur meines Experiments natürlich gut für eine Tabellenstruktur eignen würden. Leider scheint die Definition von Melodien in der Tabelle heikel zu sein, da die Melodien nicht wirklich eine feste Struktur haben.
Was wären mögliche Alternativen bei der Strukturierung meiner Daten?
ich eine relationale Datenbank verwenden würde und jedes Element einer Melodie in einem separaten Aufnahme Spalte, dh Note1, Note2, Note3, Oktave, Dauer, gespielte Zeit, gespieltes Tier, usw. Sollte zu einem saubereren Code führen und weniger fehleranfällig sein. – postoronnim