Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 复杂音乐分析的数据库设计_Python_Data Modeling - Fatal编程技术网

Python 复杂音乐分析的数据库设计

Python 复杂音乐分析的数据库设计,python,data-modeling,Python,Data Modeling,我是一名研究动物行为的研究员,我正试图找出构建数据的最佳方法。我向动物们呈现简短的音乐曲调,并记录它们的反应 数据 每个曲调由1-10个音符组成,从跨越几个八度的大调+小调音阶中随机选择。每个音符的播放时间固定,但在短时间内随机播放 然后我记录动物对曲调的二元反应(喜欢/不喜欢) 我每天为动物播放超过500首曲子,持续超过300天。我还结合了超过10只动物的数据 我还需要存储变量,如每天的试验编号(是否为第一首曲子?最后一首曲子?等)和日期,以便我知道由于外部问题(例如,100次试验后或一整天动

我是一名研究动物行为的研究员,我正试图找出构建数据的最佳方法。我向动物们呈现简短的音乐曲调,并记录它们的反应

数据

每个曲调由1-10个音符组成,从跨越几个八度的大调+小调音阶中随机选择。每个音符的播放时间固定,但在短时间内随机播放

然后我记录动物对曲调的二元反应(喜欢/不喜欢)

我每天为动物播放超过500首曲子,持续超过300天。我还结合了超过10只动物的数据

我还需要存储变量,如每天的试验编号(是否为第一首曲子?最后一首曲子?等)和日期,以便我知道由于外部问题(例如,100次试验后或一整天动物停止反应)需要排除哪些数据点

分析

我试图揭示在这些随机产生的曲调中,什么样的音乐结构会导致动物的好恶。基于之前的研究,我主要是以假设驱动的方式来做这件事的。我需要在我的数据集上执行的查询是这样的:“同一个八度音阶中有更多的音符会增加曲调的可听性吗?”

随着数据的积累,我还在全年对数据集进行分析

我尝试过的

我将所有动物的数据合并成一个巨大的清单,其中包含dicts。每个dict代表一次试验及其相关的:

  • 动物ID#
  • 会话ID#
  • 试用ID#
  • 二进制响应(喜欢/不喜欢)
  • 由dict定义的tune。键只是播放的音符,值表示何时播放音符。例如,
    {'1A#':[30100]}
    指的是只有一个音符的曲调,从第一个八度开始,从30毫秒到100毫秒播放
我把它保存到一个pickle文件中。每天做完所有的动物后,我都会更新pickle文件。通过加载更新后的pickle文件,我大约每周运行一次数据分析

我一直在寻找将数据重新构造为数据库或数据帧格式的方法,因为1)序列化数据和2)查询的速度,以及3)可能更干净的代码,而不是处理嵌套的dict。我最初认为我的数据自然适合某种表格结构,因为我的实验采用了逐次试验的结构。不幸的是,表中曲调的定义似乎很棘手,因为曲调实际上没有固定的结构


在构建我的数据时,有哪些可能的替代方案

我会使用支持JSON的关系数据库,例如postgresql。这样,您就可以将tune存储为JSON对象,而不必担心tune的结构。数据模型的其余部分似乎是相关的。我会为动物创建一个表格,然后为试验/会议创建一个表格。因此,您的会话表可能如下所示

SessionId (integer, primary key) | TrialId (integer) | AnimalId (integer, foreign key) | tune (json) | response (bool)

我将使用支持JSON的关系数据库,例如postgresql。这样,您就可以将tune存储为JSON对象,而不必担心tune的结构。数据模型的其余部分似乎是相关的。我会为动物创建一个表格,然后为试验/会议创建一个表格。因此,您的会话表可能如下所示

SessionId (integer, primary key) | TrialId (integer) | AnimalId (integer, foreign key) | tune (json) | response (bool)

我认为问题的难点在于,对于不同的查询,您可能需要不同格式的刺激(调优)数据。我想做的是为你的刺激(曲调)创建一个相对简单的数据结构,并为每个独特的曲调添加一个独特的标识符。如果您的字典结构可以放入内存,那么您可以在这里使用字典结构

然后,我会将您的试验放入一个具有相应刺激ID的关系数据库中。数据库中的每个试用条目都有完整的主题和会话信息

对于每个分析排列,您将执行两个步骤来获取相关数据:

  • 使用刺激数据结构过滤刺激,并获得相应ID的列表
  • 在试用数据库上执行查询,以获取具有此列表ID的试用。显然,您可以向查询中添加其他参数,以便根据主题、会话等进行筛选

  • 我希望这会有所帮助

    我认为问题的难点在于,您可能需要针对不同的查询使用不同格式的刺激(调整)数据。我想做的是为你的刺激(曲调)创建一个相对简单的数据结构,并为每个独特的曲调添加一个独特的标识符。如果您的字典结构可以放入内存,那么您可以在这里使用字典结构

    然后,我会将您的试验放入一个具有相应刺激ID的关系数据库中。数据库中的每个试用条目都有完整的主题和会话信息

    对于每个分析排列,您将执行两个步骤来获取相关数据:

  • 使用刺激数据结构过滤刺激,并获得相应ID的列表
  • 在试用数据库上执行查询,以获取具有此列表ID的试用。显然,您可以向查询中添加其他参数,以便根据主题、会话等进行筛选

  • 我希望这会有帮助

    我会使用关系数据库,将一首曲子的每个元素记录在一个单独的列中,即note1、note2、note3、八度、持续时间、播放时间、播放动物等,这样代码更清晰,更不容易出错。我会使用关系数据库,将一首曲子的每个元素记录在一个单独的列中,即note1,注2、注3、八度、持续时间、播放时间、播放动物等都应该使代码更清晰,更不容易出错。