in Uncategorized

Preparando Arquivos para o WEKA

Um dos maiores problemas (ainda) no WEKA sem sombra de dúvidas é a criação dos arquivos para o minerador.

Em geral os datasets em ARFF não possuem nenhum tipo de relacionamento referencial, ou mesmo relacionamento entre suas instâncias; porém, isso não é impeditivo para realização de determinadas análises no minerador. A Microsoft com o SQL Server Analysis Services em sua suíte de mineração de dados contém uma feature que comtempla esse tipo de situação chamado “Nested” que é utilizado no momento de construção do modelo de mineração. Ademais, ainda é pendente de contextos de atualização esse tipo de feature.

O WEKA utiliza como arquivo padrão para as tarefas de mineração o formato ARFF, porém o minerador pode aceitar também arquivos CSV para realização das tarefas; porém, é preciso inserir os atributos de cada instância.

Com a utilização de algumas ferramentas como ExcelToARFF ou mesmo com o próprio Excel através da conversão para ARFF e após isso inserção dos atributos.

O ARFF aceita basicamente dois tipos de datatypes que são String (Nominal) e Numeric. Geralmente o minerador trabalha com Nominal Values em tarefas de associação e classificação; e com atributos numéricos em tarefas de agrupamento; contudo isso não é obrigatório.

% Arquivo ARFF utilizado com template para o blog mineracaodedados.wordpress.com %
@relation Escola
@attribute StatusAluno { Passou, Recuperacao, Reprovado }
@attribute NotaGeral numeric
@attribute Aproveitamento numeric
@attribute BomComportamento { true, false }
@attribute ReuniaoPais { yes, no }
@data
%
% 14 Instancias
%

Passou, 85, 85, false, no
Passou, 80, 90, true, no
Recuperacao, 83, 86, false, yes
Reprovado, 70, 96, false, yes
Reprovado, 68, 80, false, yes
Reprovado, 65, 70, true, no
Recuperacao, 64, 65, true, yes
Passou, 72, 95, false, no
Passou, 69, 70, false, yes
Reprovado, 75, 80, false, yes
Passou, 75, 70, true, yes
Recuperacao, 72, 90, true, yes
Recuperacao, 81, 75, false, yes
Reprovado, 71, 91, true, no
Adaptado de Witten,I.H.(Ian H.), Data mining : practical machine learning tools and techniques – 2nd ed. Pg. 54

Para criar arquivos no excel.

Digamos que iremos criar um dataset chamado CreditRating com 6 atributos para avaliar uma carteira de crédito para mapeamento de futuros empréstimos.

Tempo no Emprego (Numérico), Ocupação (String), Tempo de Residencia(Numérico), Status de Residencia(String), Saldo Devedor(Numérico) e Informacao se o devedor pagou ou não (String)

Foi criado um dataset simples com 20 instâncias, com a seguinte distribuição:

TempoEmpregoOcupacaoTempoResidenciaStatusResidenciaSaldoDevedorPagou
1ProfissionalLiberal3Propria1000Yes
2Vendas4Propria3234No
3Autonomo2Propria233No
12ProfissionalLiberal5Financiada9283Yes
23Autonomo8Financiada342No
12Vendas7Propria367Yes
2FuncionarioPublico8Propria2109No
6ProfissionalLiberal4Financiada245Yes
7Profissional5Aluguel5687Yes
9Profissional9Financiada871Yes
8Autonomo10Financiada906Yes
12ProfissionalLiberal12Aluguel9842No
16Vendas15Aluguel1209Yes
12FuncionarioPublico2Financiada934Yes
10FuncionarioPublico4Financiada213Yes
2Vendas1Financiada4519No
7ProfissionalLiberal1Aluguel7239Yes
22FuncionarioPublico18Propria1010No
21Vendas15Propria8214No
6FuncionarioPublico14Propria6321No

Com essa distribuição realizada, salve o arquivo em CSV separado por vírgulas com a opção salvar como…, e após isso abra o arquivo no bloco de notas que o mesmo será aberto com o seguinte formato:

TempoEmprego ;Ocupacao ;TempoResidencia;StatusResidencia;SaldoDevedor;Pagou
1;ProfissionalLiberal;3;Propria;1000;Yes
2;Vendas;4;Propria;3234;No
3;Autonomo;2;Propria;233;No
12;ProfissionalLiberal;5;Financiada;9283;Yes
23;Autonomo;8;Financiada;342;No
12;Vendas;7;Propria;367;Yes
2;FuncionarioPublico;8;Propria;2109;No
6;ProfissionalLiberal;4;Financiada;245;Yes
7;Profissional;5;Aluguel;5687;Yes
9;Profissional;9;Financiada;871;Yes
8;Autonomo;10;Financiada;906;Yes
12;ProfissionalLiberal;12;Aluguel;9842;No
16;Vendas;15;Aluguel;1209;Yes
12;FuncionarioPublico;2;Financiada;934;Yes
10;FuncionarioPublico;4;Financiada;213;Yes
2;Vendas;1;Financiada;4519;No
7;ProfissionalLiberal;1;Aluguel;7239;Yes
22;FuncionarioPublico;18;Propria;1010;No
21;Vendas;15;Propria;8214;No
6;FuncionarioPublico;14;Propria;6321;No

Após isso, no próprio bloco de notas, substitua o ponto e virgula por somente virgula para o delimitador do preprocessador conseguir enxergar os dados.

Com isso basta inserir os atributos com as seguintes descrições, e abaixo inserir a base de dados já inserida tendo o seguinte resultado.

@relation CreditRating.symbolic
@attribute TempoEmprego numeric
@attribute Ocupacao {Autonomo, FuncionarioPublico, ProfissionalLiberal, Vendas, Profissional}
@attribute TempoResidencia numeric
@attribute StatusResidencia {Financiada, Alugada, Propria}
@attribute SaldoDevedor numeric
@attribute Pagou {yes, no}
@data

1,ProfissionalLiberal,3,Propria,1000,Yes
2,Vendas,4,Propria,3234,No
3,Autonomo,2,Propria,233,No
12,ProfissionalLiberal,5,Financiada,9283,Yes
23,Autonomo,8,Financiada,342,No
12,Vendas,7,Propria,367,Yes
2,FuncionarioPublico,8,Propria,2109,No
6,ProfissionalLiberal,4,Financiada,245,Yes
7,Profissional,5,Aluguel,5687,Yes
9,Profissional,9,Financiada,871,Yes
8,Autonomo,10,Financiada,906,Yes
12,ProfissionalLiberal,12,Aluguel,9842,No
16,Vendas,15,Aluguel,1209,Yes
12,FuncionarioPublico,2,Financiada,934,Yes
10,FuncionarioPublico,4,Financiada,213,Yes
2,Vendas,1,Financiada,4519,No
7,ProfissionalLiberal,1,Aluguel,7239,Yes
22,FuncionarioPublico,18,Propria,1010,No
21,Vendas,15,Propria,8214,No
6,FuncionarioPublico,14,Propria,6321,No
That’s all folks!

Write a Comment

Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  1. hi, i really do that but when i open the file with weka they just consider one atribute nominal and its the first line, in case @relation. What it´s the problem?

      • Olá Flávio!
        Por favor, na montagem dos dados como no seu exemplo, temos as seguintes estruturas;
        @attribute StatusAluno { Passou, Recuperacao, Reprovado }
        @attribute NotaGeral numeric
        @attribute Aproveitamento numeric
        @attribute BomComportamento { true, false }
        @attribute ReuniaoPais { yes, no }
        Caso eu precise por exemplo trabalhar com os tipo de informação como abaixo, como eu posso defini-los no Weka ?
        A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,X
        Eu tenho tipos como os da lista acima e tipos como A1,A2, como associar um atributo corretamente que seja entendido pelo WEKA?
        Qual dos tipos usar?
        Flávio, por favor você poderia me indicar um livro em português sobre o Weka, já existe?
        Obrigado por sua atenção!
        Att,