Está en la página 1de 4

Archivos ARFF (Weka)

Weka admite varios tipos de archivos, pero el formato propio de la aplicación (y con el que mejor se entiende)
es .arff (Attribute-Relation File Format).

Los archivos ARFF tienen formato de texto plano en ASCII, por lo que pueden ser visualizados y modificados
desde cualquier editor de texto, siguiendo unas normas básicas:

• Para escribir comentarios en ellos, deberemos empezar la línea con %.


• Para las declaraciones de relación, atributos y datos, usaremos @ al comienzo.
• Todo texto que incluya espacios debe ir entrecomillado (excepto en los comentarios). Esto se aplica a
toda información de tipo String, tanto datos como nombres para las declaraciones que veremos a
continuación.

En un archivo ARFF se diferencian dos partes: la cabecera y los datos. Con la instalación de Weka también se
nos guardarán algunos archivos .arff en la carpeta data dentro del directorio de instalación.

La cabecera incluye la definición del nombre de la relación y la declaración de los atributos y su tipo.

Definición de relación

En este punto, se define el nombre de la relación de datos que contiene el archivo. Su formato es:

@relation <nombre_de_la_relacion> <tipo_de_dato>

El nombre de la relación debe ser de tipo String.


Declaración de atributos

Después de definir la relación, se deben declarar los atributos de los datos y el tipo de valor que admite cada
uno. La elección de los atributos que deben aparecer en la tabla se toma en un proceso previo de selección de
datos. El formato de declaración de un atributo depende del tipo de dato, pero en general:

@attribute <nombre_del_atributo> <tipo_de_dato>

Veamos los tipos de datos que aceptan estos archivos y algunos ejemplos:

• Numéricos: se definen como NUMERIC. Weka también entenderá los términos REAL o INTEGER
para números, pero los tratará como NUMERIC, es decir, no nos dará error si, por ejemplo, ponemos un
dato real para un atributo entero. Es por ello que REAL e INTEGER sirven más como información para
el usuario que como discriminador real.

@attribute numero NUMERIC


@attribute numero_real REAL
@attribute numero_entero INTEGER

• Fechas: para este tipo de dato, seguido de DATE se debe definir el formato deseado para la fecha. Por
ejemplo, una fecha completa con hora completa debería ser:

@attribute fecha_completa DATE 'dd-MM-yyyy HH:mm:ss'

Pero también se pueden hacer combinaciones con las distintas unidades de tiempo:

@attribute hora DATE HH:mm


@attribute anyo DATE yyyy
@attribute fichaje DATE 'dd-MM HH:mm'

• Cadenas de caracteres: se declaran como STRING y deben seguir las normas básicas comentadas al
principio sobre las separaciones de espacios.

@attribute 'cadena de caracteres' STRING


@attribute cadena_de_caracteres STRING

• Enumerados: también podemos definir atributos y dar una lista de los posibles valores que puede tomar
en nuestra relación. Estos valores se deben expresar entre corchetes y separados entre sí por comas. Un
ejemplo:

@attribute naipe {As, 2, 3, 4, 5, 6, 7, Sota, Caballo, Rey}


@attribute 'Sistema operativo' {Windows, 'Distro Linux', 'Mac OS'}

Otro ejemplo práctico es usar una declaración enumerado para suplir la falta del tipo boolean:

@attribute boolean {TRUE, FALSE}

La sección de los datos comienza con la declaración, que es una simple línea que denota el comienzo:

Seguida de esta declaración, se encuentran los datos. Cada línea representa una instancia. Dentro de cada
instancia, los atributos se separan con comas. Estos atributos deben aparecer en el orden en que se declaran en
la sección de la cabecera.

Si algún valor no está definido, se representan con ?.


Supongamos una tabla con los datos de los participantes de un concurso que realiza una compañía de
videojuegos para hacer un estudio de mercado. Al adquirir uno de sus productos en promoción, el comprador
podrá rellenar una pequeña encuesta con sus datos para participar en el sorteo de un lote de productos. Nos
interesará guardar la información sobre qué producto ha comprado, la edad de cada uno, si es hombre o mujer,
en qué tipo de plataforma juegan más asiduamente, si son consumidores habituales de videojuegos y el
presupuesto aproximado que destinan a lo largo del año a comprar este tipo de productos. Todos esos datos
serán los atributos.

En caso de que algún participante olvide rellenar algún campo de la encuesta, encontraremos un símbolo de
interrogación, como bien hemos establecido antes.

%SORTEO
@relation 'Sorteo videojuegos'

%ATRIBUTOS POR ORDEN DE APARICIÓN EN LA DESCRIPCIÓN


@attribute 'Producto Adquirido' {'Mass Effect 3', 'Crysis 3', 'Dead Space 3', 'Fifa 13',
'F1 2012', 'Battlefield 3', 'KOA: Reckoning', 'Sim City'}
@attribute Edad INTEGER
@attribute Sexo {Hombre, Mujer}
@attribute Plataforma {PC, 'Xbox 360', PS3, Otros}
@attribute 'Consumidor habitual' {TRUE, FALSE}
@attribute Presupuesto NUMERIC

%DATOS DE LOS PARTICIPANTES


@data
'Mass Effect 3', 29, Mujer, PC, TRUE, 200
'Sim City', ?, Mujer, Otros, TRUE, 600
'Dead Space 3', 22, Hombre, 'Xbox 360', FALSE, 200
'Battlefield 3', 28, Mujer, 'Xbox 360', TRUE, 370
'KOA: Reckoning', 30, Mujer, PC, ?, 100
'Crysis 3', 17, Hombre, PS3, FALSE, 300
'Mass Effect 3', 33, Hombre, Otros, FALSE, 20
'Battlefield 3', 52, Hombre, PC, TRUE, 900
'Mass Effect 3', 21, Hombre, PS3, TRUE, 500
'Fifa 13', 14, Hombre, PS3, TRUE, 175
'F1 2012', 34, Hombre, PS3, TRUE, 1200
'Crysis 3', 30, Hombre, PC, FALSE, 60
'Dead Space 3', 31, Hombre, PS3, TRUE, 0
'Sim City', 37, Mujer, PC, FALSE, 100
'Fifa 13', 25, Hombre, PS3, TRUE, ?
'Mass Effect 3', 24, Mujer, 'Xbox 360', TRUE, 900
'Fifa 13', 16, Mujer, PC, TRUE, 250
'Mass Effect 3', 15, Hombre, PS3, TRUE, 150
'Crysis 3', 16, Mujer, 'Xbox 360', TRUE, 340
'KOA: Reckoning', 25, Hombre, PS3, TRUE, 100
'Battlefield 3', 26, Hombre, ?, FALSE, 70
'Mass Effect 3', 26, Hombre, PS3, FALSE, 50
'Sim City', 44, Hombre, PS3, TRUE, 230
'Battlefield 3', 39, Hombre, PS3, TRUE, 750
'KOA: Reckoning', 17, Mujer, PS3, TRUE, 150
'Fifa 13', 37, Hombre, 'Xbox 360', FALSE, 30
'F1 2012', 19, Hombre, PC, FALSE, 0
'KOA: Reckoning', 22, Mujer, PC, FALSE, 0
'Mass Effect 3', 19, Hombre, ?, FALSE, 0
'Dead Space 3', 18, Mujer, PS3, TRUE, 420
'Mass Effect 3', 24, Hombre, PC, TRUE, 300
'KOA: Reckoning', 33, Hombre, 'Xbox 360', TRUE, 400
'Crysis 3', 21, Hombre, Otros, TRUE, 100
'F1 2012', 21, Mujer, PS3, TRUE, 500
'KOA: Reckoning', 33, Hombre, PC, FALSE, 100
'Sim City', 26, Mujer, 'Xbox 360', TRUE, 400
'Fifa 13', 15, Hombre, PC, FALSE, 100
'Fifa 13', 19, Hombre, Otros, TRUE, 400
'Mass Effect 3', 48, Hombre, PS3, TRUE, 950
'Mass Effect 3', 35, Mujer, 'Xbox 360', TRUE, 800
'Crysis 3', 36, Hombre, 'Xbox 360', TRUE, 320
'Dead Space 3', 51, Hombre, 'Xbox 360', TRUE, 200

En el ejemplo podemos ver que los datos de cada concursante se expresan en una línea, teniendo en cuenta el
orden de declaración de los atributos. Así, sabemos que nuestro primer concursante compró el Mass Effect 3,
tiene 29 años, es mujer, jugadora asidua, y gasta aproximadamente unos 200 euros al año en videojuegos.

Uno de los archivos con los que trabajaremos a lo largo del manual es iris.arff, que viene junto con Weka. Se
trata de poder clasificar las flores de las plantas Iris (setosa, versicolor o virgínica) según la longitud y anchura
de los sépalos y de los pétalos. Consta de 4 atributos numéricos y un quinto nominal que es la clase. Tiene 150
instancias y trae un gran encabezamiento comentado donde explica el propósito, el origen de los datos y su
formato, y algunas estadísticas. El archivo completo podemos descargarlo aquí: iris (para usar en Weka,
cambiar la extensión de .doc a .arff directamente).

La etiqueta de clase se asigna de manera simbólica a uno de los atributos de la relación (por defecto, será el
último de la declaración de atributos). El atributo clase o de referencia se convierte así en la variable que
deseamos predecir, pero no se distinguirá de los demás en el archivo .arff. Así, podremos cambiar la etiqueta de
clase cuantas veces deseemos (como ya veremos más adelante), y confirmar, aplicando distintos algoritmos de
minería de datos, cómo de bueno es cada atributo para predecir los demás.

La importancia de esta etiqueta se verá más claramente en los procesos de clasificación, ya que son interesantes
para construir los modelos (llamados también clasificadores).