1. Introdução
Weka é um software livre para mineração de dados, do tipo open source, desenvolvido em Java dentro das especificações da GPL (General Public License) que se consolidou como a ferramenta de mineração de dados mais utilizada por estudantes e professores de universidades. A ferramenta também é muito utilizada por profissionais que desejam aprender os conceitos básicos sobre mineração de dados. Através de sua interface gráfica (conhecida como Weka Explorer) é possível conduzir processos de mineração de dados de forma simples, realizando a avaliação dos resultados obtidos e a comparação de algoritmos. Além disso, a ferramenta oferece recursos para a execução de tarefas relacionadas ao pré-processamento de dados como, por exemplo, a seleção e a transformação de atributos.
A ferramenta Weka trabalha preferencialmente com bases de dados no formato texto. Por esta razão, quase todos os tutoriais e apostilas sobre a ferramenta disponibilizados na Internet mostram como utilizar a Weka para minerar bases de dados estruturadas nos formatos ARFF ou CSV. No entanto, o que um número reduzido de usuários da ferramenta sabe é que também é possível utilizar a Weka para minerar diretamente tabelas de SGBD’s relacionais. Esta forma de utilização da Weka é bastante interessante já que, na maior parte das aplicações práticas, os dados a serem minerados se encontram originalmente armazenados em algum banco relacional (MySQL, Oracle, PostgreSQL, SQL Server, etc.). Desta forma, quando efetua-se a conexão da Weka com um SGBD, deixa de existir a necessidade de exportar os dados do banco para texto e posteriormente formatá-los como ARFF (ou CSV) - atividades que, em geral, consomem um tempo considerável.
Este artigo descreve os passos exigidos para a configuração de uma conexão da Weka com o SGBD MySQL. O artigo é direcionado para usuários que já possuem alguma experiência com a ferramenta e que possuam a mesma instalada em suas máquinas. Para muitos desses usuários, especialmente os que não estão acostumados com conceitos do universo Java - como o padrão JDBC e o formato JAR - a forma de realizar a configuração poderá parecer um pouco “intimidadora” (de fato, os passos necessários são um pouquinho trabalhosos). Apesar disso, as vantagens minerar diretamente SGBD’s relacionais compensam o trabalho. O roteiro será explicado passo-a-passo, então mesmo aqueles que não possuem experiência em Java conseguirão executá-lo.
O restante do artigo está dividido da seguinte forma. A Seção 2 apresenta um script para criar e popular uma tabela-exemplo no MySQL (tabela “weather”). A Seção 3 contém o roteiro para configurar a conexão da Weka com o MySQL. Embora o exemplo envolva o MySQL, os passos podem ser facilmente adaptados para outro SGBD. Por fim, na Seção 4 do artigo, apresenta-se um exemplo que mostra como minerar uma tabela relacional (ou seja, que faz uso da conexão criada). O exemplo em questão envolve a mineração da tabela “weather” no MySQL.
2. Criando a Tabela Exemplo
Esta seção apresenta os scripts para a criação de uma tabela exemplo no MySQL. Esta tabela poderá ser diretamente acessada e minerada pela Weka após a configuração da conexão com o SGBD.
A tabela-exemplo se chama “weather” e contém os mesmos dados da base “weather.arff” que é disponibilizada junto com a ferramenta Weka (localizada na pasta “data” dentro do diretório de instalação da Weka). As Listagens 1 e 2 contêm, respectivamente, os scripts para criar e popular a tabela. Para os exemplos apresentados no artigo, a tabela “weather” foi criada em um banco MySQL chamado “devmedia”. No entanto, você poderá criá-la em qualquer banco.
CREATE TABLE weather( outlook VARCHAR( 8 ) NOT NULL , temperature float NOT NULL , humidity float NOT NULL , windy VARCHAR( 5 ) NOT NULL , play CHAR( 3 ) NOT NULL )
INSERT INTO weather values('sunny',85,85,'FALSE','No'); INSERT INTO weather values('sunny',80,90,'TRUE','No'); INSERT INTO weather values('overcast',83,86,'FALSE','Yes'); INSERT INTO weather values('rainy',70,96,'FALSE','Yes'); INSERT INTO weather values('rainy',68,80,'FALSE','Yes'); INSERT INTO weather values('rainy',65,70,'TRUE','No'); INSERT INTO weather values('overcast',64,65,'TRUE','Yes'); INSERT INTO weather values('sunny',72,95,'FALSE','No'); INSERT INTO weather values('sunny',69,70,'FALSE','Yes'); INSERT INTO weather values('rainy',75,80,'FALSE','Yes'); INSERT INTO weather values('sunny',75,70,'TRUE','Yes'); INSERT INTO weather values('overcast',72,90,'TRUE','Yes'); INSERT INTO weather values('overcast',81,75,'FALSE','Yes'); INSERT INTO weather values('rainy',71,91,'TRUE','No');
3. Configurando a Conexão da Weka com o MySQL
O texto a seguir apresenta o roteiro passo-a-passo para a configuração da conexão da Weka com o MySQL. Pelo fato de a Weka ser um software desenvolvido em Java, esta conexão é realizada através do padrão JDBC (mais especificamente, com o uso do driver JDBC do MySQL). Caso você seja um usuário da Weka, mas não conheça muito sobre Java, não fique preocupado: simplesmente execute os passos apresentados no roteiro a seguir. Eles mostram como criar um ambiente exemplo contendo todos os arquivos de configuração necessários para realizar a conexão Weka-MySQL.
Passo 1: Vá até a pasta de instalação da Weka (ex: C:\Arquivos de Programas\Weka-3-6-6) ou crie uma pasta em seu computador (ex: “C:\mining”) e copie o arquivo “weka.jar” para dentro desta pasta. O arquivo “weka.jar” é o principal da ferramenta Weka, correspondendo à biblioteca que contém os “executáveis” da ferramenta (arquivos “.class”).
Passo 2: Baixe o driver JDBC do MySQL e coloque na mesma pasta do arquivo “weka.jar”. Trata-se de um arquivo “.jar” que poderá ser obtido no próprio site do MySQL (ou em outros sites). Ele é conhecido como mysql connector (ou Connector/J). Para o teste descrito neste artigo, foi baixado o driver com o seguinte nome: mysql-connector-java-5.1.22-bin.jar.
Passo 3: Para realizar a conexão da Weka com o MySQL ou qualquer outro SGBD, é preciso especificar um arquivo de configuração chamado “DatabaseUtils.props”. Este arquivo deve ser colocado na mesma pasta dos arquivos “weka.arff” e “mysql-connector-java-5.1.22-bin.jar” (OBS: alternativamente, os três arquivos poderão estar em caminhos especificados no CLASSPATH, mas essa configuração é um pouco mais complicada para quem não está acostumado com o “mundo Java”).
É no arquivo de configuração “DatabaseUtils.props” que você irá especificar o endereço do servidor, o banco de dados a ser acessado, as informações de login e outros parâmetros. Felizmente, a Weka fornece diversos arquivos exemplo, um para cada diferente SGBD. Estes arquivos exemplo, se localizam dentro do package “weka.experiment”, dentro da biblioteca “weka.jar”. Os passos 4, 5 e 6 descrevem como obter e editar o “DatabaseUtils.props”.
Passo 4: Um jeito fácil de obter o “DatabaseUtils.props” é o seguinte: renomeie o temporariamente o arquivo “weka.jar” para “weka.zip”. Abra-o com algum descompactador e extraia somente o arquivo “weka\experiment\DatabaseUtils.props.mysql”. Ele deve ser extraído para a mesma sua pasta de trabalho, ou seja, para o mesmo local onde encontram-se “weka.jar” e “mysql-connector-java-5.1.22-bin.jar”. Depois de realizar essa operação, renomeie de volta “weka.zip” para “weka.jar”.
Passo 5: Agora renomeie o arquivo “DatabaseUtils.props.mysql” para “DatabaseUtils.props” (NÃO ESQUEÇA DE FAZER ISSO OU A CONEXÃO NÃO IRÁ FUNCIONAR).
Passo 6: Abra o arquivo “DatabaseUtils.props” e modifique-o de maneira que ele passe a conter as informações de conexão para a base de dados MySQL que você deseja minerar. O arquivo possui diversas linhas, mas normalmente você precisará alterar apenas duas delas, exatamente as que estão indicadas na Listagem 3. O parâmetro “jdbcDriver” serve para especificar que você deseja realizar a conexão com o banco MySQL, através do driver JDBC do MySQL (a classe deste driver é “org.gjt.mm.mysql.Driver”). Já o parâmetro “jdbcURL” é onde devemos indicar o endereço e porta do servidor MySQL (no exemplo, “localhost:3306”) e o nome do banco de dados que desejamos acessar (no exemplo, “devmedia”). Modifique esse parâmetro para que ele reflita os dados de conexão de seu banco MySQL. Salve as suas modificações.
... # JDBC driver (comma-separated list) jdbcDriver=org.gjt.mm.mysql.Driver # database URL jdbcURL=jdbc:mysql://localhost:3306/devmedia ...
Passo 7: Configuração completa! Agora é possível executar a Weka permitindo a opção de conexão com o banco MySQL especificado em “DatabaseUtils.props”. Para que isso seja possível, você deve executar a Weka a partir de uma janela de prompt, utilizando a linha de comando mostrada na listagem 4. Para facilitar, você pode criar um arquivo “.bat” com essa linha e gravá-lo na mesma pasta onde está a “weka.jar” e os demais arquivos.
java -cp mysql-connector-java-5.1.22-bin.jar;weka.jar weka.gui.GUIChooser
No exemplo apresentado, o parâmetro –cp (ou –classpath) serve para indicar ao Java quais são as pastas onde ele deve procurar pelas bibliotecas necessárias para a execução do programa. Após o –cp você deve especificar uma lista de diretórios ou de arquivos JAR separados pelo caractere “ ; ” (ponto-e-vírgula) caso o seu sistema seja Windows ou “ : ” (dois pontos) no ambiente Linux).
Observe com calma a linha de comando mostrada na Listagem 4. Veja que o primeiro item após o –cp é “mysql-connector-java-5.1.22-bin.jar”, enquanto que o segundo é “weka.jar”. Esses itens correspondem, respectivamente, ao arquivo JAR do driver JDBC do MySQL e o arquivo JAR da ferramenta Weka. No final da linha, após um espaço em branco, está especificado “weka.gui.GUIChooser” que é o nome do programa que desejamos rodar dentro da “weka.jar” (GUI Chooser da Weka).
Como resultado da execução do programa, será exibida a conhecida “tela inicial” da ferramenta Weka, apresentada na Figura 1.
4. Minerando uma Tabela MySQL com a Ferramenta Weka
Esta seção apresenta um exemplo que descreve a “receita básica” para minerar uma tabela armazenada no MySQL com o uso da Weka. O exemplo utiliza a tabela “weather” criada na Seção 2 e a conexão com o banco “devmedia”, descrita na Seção 3.
Passo 1: Após rodar a “Weka GUI Chooser”, clique no botão “Explorer”. Isto disparará a execução do aplicativo “Weka Explorer” - a interface interativa de mineração de dados da Weka. Clique no botão (destacado na Figura 2).
Passo 2: Você poderá observar que os parâmetros de conexão que foram especificados no arquivo “DatabaseUtils.props” estarão sendo apresentado na caixa de texto “URL” (Figura 3). No caso da minha configuração, a string de configuração é “jdbc:mysql://localhost:3306/devmedia”.
Passo 3: Clique no botão “User...” (destacado na Figura 3) e entre com o usuário e senha para conexão com o banco de dados. No caso do meu banco, o usuário é “root” com a senha em branco (Figura 4). Após especificar essas informações de login, clique no botão “OK”.
Passo 4: Clique no botão “Connect”. Se a conexão for bem-sucedida, uma exibida informativa será apresentada na última caixa de texto do formulário (Figura 5).
Passo 5: Estando efetuada a conexão com o banco MySQL, os dados a serem minerados deverão ser obtidos a partir de uma consulta SQL sobre uma ou mais tabelas e views do banco. Em nosso exemplo, desejamos minerar a tabela “weather”. Desta forma, basta apenas especificar o comando “SELECT * FROM weather” dentro do campo “Query”, conforme mostra a Figura 6. A seguir, clique no botão “Execute”.
Passo 6: Se a consulta estiver corretamente especificada, os dados retornados serão exibidos no campo “Result” (Figura 7).
Passo 7: Agora basta clicar no botão “OK” (embaixo do formulário). Pronto, você poderá usar os dados do MySQL à vontade, da mesma forma que utiliza dados de arquivos ARFF. O formulário principal do aplicativo “Weka Explorer” será exibido com os dados da tabela do MySQL devidamente importados e estes dados poderão ser normalmente utilizados pelos algoritmos de mineração disponíveis na ferramenta (Figura 8).
5. Conclusões
Este artigo apresentou uma receita para permitir a conexão da ferramenta de data mining Weka com o SGBD MySQL. Apesar de um pouco trabalhosa, a “receita” foi elaborada de forma a permitir que mesmo os usuários com pouco conhecimento no ambiente Java consigam configurar a conexão. Embora o exemplo envolva o MySQL, a forma de conectar outros SGBD’s, como Oracle, PostgreSQL, SQLite e SQL Server é bem parecida, sempre sendo efetuada via JDBC e com o uso do arquivo de configuração “DatabaseUtils.props”.