OpenSesame
Rapunzel Code Editor
DataMatrix
Support forum
Python Tutorials
MindProbe
Supported by

记录和读取数据文件

在进行实验之前,始终要三重检查数据是否已正确记录!

使用日志记录器(logger)项目

OpenSesame 不会自动记录你的数据。相反,你需要在试验序列的末尾插入一个 logger 项目。

/pages/zh/manual/img/logging/logger.png

Figure 1. logger 项目。

使用 logger 的最简单方式是启用“自动记录所有变量”选项。这样,OpenSesame 所知道的所有变量都会被写入日志文件,除了那些明确排除的变量(见下文)。

你可以明确包括你想记录的变量。这样做的主要原因是,因为 OpenSesame 没有自动检测到某些变量,导致这些变量丢失,或者你已经禁用了“自动记录所有变量”的选项。

你也可以明确排除某些变量,不在日志文件中记录。这样做的主要原因是通过排除通常无用的变量,保持日志文件的清洁。

通常情况下,你应该只创建一个 logger 项目,并在实验的不同位置根据需要重复使用该 logger(即使用同一个 logger 项目的链接副本)。如果你创建了多个 logger(而不是多次使用单一的 logger),它们都将写入同一个日志文件,结果会是一团糟!

使用 Python 内联脚本

你可以使用 log 对象来写入日志:

log.write('这将被写到日志文件中!')

更多信息,请参见:

你通常不应该直接写入日志文件,并同时使用 logger 项目;这样会导致日志文件混乱。

数据文件的格式

如果你使用了标准的 logger 项目,则数据文件的格式如下(只是标准的 csv 格式):

  • 纯文本
  • 逗号分隔
  • 双引号包围(字面上的双引号用反斜杠转义)
  • Unix 风格的行尾
  • UTF-8 编码
  • 第一行为列名

记录哪些变量?

默认情况下,用户界面中定义的变量,如 loop 表中的列或响应变量总是会被记录。

默认情况下,inline_scriptinline_javascript 中定义的变量如果是数字(intfloat)、字符串(strbytes)或 None 值时,会被记录。这是为了避免因记录长列表和其他大值而导致日志文件过于庞大。 (截至 OpenSesame 4.0 版本,不再需要使用 var(Python)或 vars(JavaScript)对象。)

如果你想明确记录某个默认不会被记录的变量,可以在 logger 项目中使用“包括”字段。

读取和处理数据文件

在 Python 中使用 pandas 或 DataMatrix

在 Python 中,你可以使用 pandas 来读取 csv 文件。

import pandas
df = pandas.read_csv('subject-1.csv')
print(df)

或者使用 DataMatrix

from datamatrix import io
dm = io.readtxt('subject-1.csv')
print(dm)

在 R 中

在 R 中,你可以简单地使用 read.csv() 函数来读取单个数据文件。

df = read.csv('subject-1.csv', encoding = 'UTF-8')
head(df)

此外,你可以使用来自 readbulk 包的 read_opensesame() 函数,以方便地读取多个数据文件,并将它们合并成一个大的数据框。该包可在 CRAN 上安装,通过 install.packages('readbulk') 进行安装。

# 读取并合并存储在文件夹 'raw_data' 中的所有数据文件
library(readbulk)
df = read_opensesame('raw_data')

在 JASP 中

JASP,一款开源统计软件包,可以直接打开 csv 文件。

在 LibreOffice Calc 中

如果您在LibreOffice Calc中打开一个csv文件,您需要指明确切的数据格式,如Figure 2所示。(默认设置通常是正确的。)

/pages/zh/manual/img/logging/libreoffice.png

Figure 2.

在Microsoft Excel中

在Microsoft Excel中,您需要使用文本导入向导。

将多个数据文件合并成一个大文件

出于某些目的,例如使用数据透视表,将所有数据文件合并成一个大文件可能会比较方便。使用Python DataMatrix,您可以使用以下脚本来实现:

import os
from datamatrix import DataMatrix, io, operations as ops

# 将此处更改为包含.csv文件的文件夹
SRC_FOLDER = 'student_data'
# 更改为您想要保留的列名列表
COLUMNS_TO_KEEP = [
    'RT_search',
    'load',
    'memory_resp'
]

dm = DataMatrix()
for basename in os.listdir(SRC_FOLDER):
    path = os.path.join(SRC_FOLDER, basename)
    print('读取 {}'.format(path))
    dm <<= ops.keep_only(io.readtxt(path), *COLUMNS_TO_KEEP)
io.writetxt(dm, 'merged-data.csv')

在OSWeb中记录

当您在浏览器中用OSWeb运行实验时,记录的方式与在桌面上运行实验时不同。

具体来说,当您直接从OpenSesame中启动OSWeb实验时,日志文件会在实验结束时下载。这个日志文件是.json格式的。当您通过JATOS启动OSWeb实验时,没有实际的日志文件,而是所有数据都发送到JATOS,从那里可以下载。

另见:

Supported by