Algoritmo de Data Mining para PostgreSQL Milton Roberto y Goya Banco de Dados - Introdução Desde que o homem começou a usar computadores para armazenar e recuperar dados tem-se procurado processos para tornar essas operações mais eficientes. Uma das tentativas nesse processo foi o uso de fitas magnéticas em uma operação similar a que usamos para gravar filmes da televisão em uma fita de videocassete. Essa técnica ficou conhecida como gravação seqüencial em fita magnética. O problema da gravação seqüencial em fita magnética é justamente o que o nome indica: os dados são gravados sequencialmente e para chegarmos a um dado específico temos que ler todos os que o precede. Isso não chega a ser um problema caso precisemos acessar, realmente, todos nossos dados, mas, se precisarmos recuperar um dado único então essa técnica mostra-se muito pouco eficiente. A criação de circuitos integrados na década de 60 permitiu que a fita magnética fosse sendo substituída por unidades de disco que, hoje em dia, são conhecidas como disco rígido, winchester ou meramente HD. A vantagem destas unidades de disco é que elas permitem tanto a leitura/gravação de dados de modo sequencial – da mesma forma que era feito nas fitas magnéticas – quanto à leitura/gravação de um dado específico em qualquer ponto do disco rígido. Esta última técnica ficou conhecida como leitura/gravação aleatória ou, em jargão técnico, leitura/gravação randômica. O uso da técnica de leitura aleatória é um dos fatores que permitiu que pessoas não especializadas pudessem acessar os dados armazenados nos computadores. Essas pessoas passaram a exigir maior acesso as informações e fizeram brotar a necessidade de melhorar a organização dos mesmos e dessa necessidade surgiram os primeiros bancos de dados. Existem vários modelos de banco de dados, entre eles estão os modelos de dados relacional, hierárquico, em redes e orientado a objeto. A principal diferença entre eles está na maneira como os dados são vistos. Banco de Dados Hierárquico O primeiro modelo de banco de dados comercialmente viável foi o banco de dados hierárquico. Foi muito popular comercialmente nas décadas de 60 e 70 e ainda é possível encontrar sistemas utilizando este banco de dados em equipamento de grande porte, também conhecidos como mainframe. Este modelo é baseado em uma estrutura hierárquica similar a estrutura de um organograma de uma empresa. No organograma existe um presidente e abaixo dele seus subordinados e os subordinados a estes, lembrando a figura de uma árvore. Do mesmo modo, em um banco de dados hierárquico existe uma raiz e galhos ligados a eles, como se a estrutura toda fosse uma árvore invertida. A raiz possui os dados principais e os galhos possuem informações adicionais sobre os dados. Estes galhos, por sua vez, podem possuir seus próprios galhos com mais informações adicionais. Um dos problemas apresentado por esta arquitetura é a dificuldade em chegar a informação desejada, exigindo um especialista no assunto para localizar um dado específico. Para se acessar um dado que estivesse no terceiro nível das ramificações é necessário começar da raiz, passar para o primeiro nível das ramificações, deste para o segundo nível para, por fim, chegarmos ao terceiro nível das ramificações. Banco de Dados em Redes Na tentativa de solucionar o problema de localizar os dados no banco de dados hierárquico foi proposto – ainda na década de 60 – o banco de dados em redes. Nesse modelo aproveitou-se a estrutura do banco de dados hierárquico mas possibilitou a disponibilidade de acesso direto a um só galho e a partir deste encontrar os demais galhos que estivem correlacionados a ele. No entanto, para que esta estrutura funcione corretamente, o mesmo dado deve estar gravado em mais de um lugar ao mesmo tempo. Chamamos de redundância a este tipo de ocorrência. Este modelo não teve tanta popularidade quanto o modelo hierárquico e acabou caindo em desuso. Banco de Dados Relacionais No final dos anos 60, Codd – um pesquisador da IBM – e sua equipe, estavam procurando novas maneiras de resolver os problemas apresentados pelos modelos Hierárquico e em Rede quando trabalhavam com um volume maciço de dados. Sendo um matemático, postulou que seria possível usar estruturas matemáticas para resolverem muitos dos problemas apresentados pelos dois modelos citados. Em 1970, Codd apresentou o seu trabalho: “Um Modelo Relacional de Dados para Grandes Banco de Dados Compartilhados”. Neste trabalho ele apresenta o modelo relacional de banco de dados. Este modelo se baseou em duas vertentes da matemática – teoria dos conjuntos e lógica de predicado de primeira ordem. O modelo relacional deriva seu nome do termo “relação”, que é uma parte da teoria dos conjuntos. Em um modelo relacional, os dados são armazenados em relações, que são percebidas pelo usuário como tabelas. Cada relação é composta de tuplas, também conhecidas como registros ou linhas, e atributos, também conhecidos como campos. A ordem física em que os registros encontram-se numa tabela é totalmente arbitrária. Cada registro de uma tabela é identificado por um campo que contém valores únicos. Essas duas características do modelo relacional permitem que os dados existam independentes da forma como eles foram fisicamente armazenados. Então, o usuário não precisa saber o local físico de um registro para poder trabalhar com ele. Por este lado, o modelo relacional é diferente do modelo hierárquico e do de rede, pois nestes modelos era imprescindível que o usuário conhecesse o desenho da estrutura para que pudesse usar os seus dados. Esse modelo é muito usado até hoje e encontra-se em bancos de dados como Oracle, DB2, Access e PostgreSQL, entre outros. Banco de Dados Orientado a Objeto Os sistemas de gerenciamento de bancos de dados relacionais foram projetados para armazenar dados segundo a teoria dos conjuntos. Entretanto, muitas vezes, o método mais eficiente de catalogar dados não é o método mais eficiente de armazenar e recuperar esses dados. A técnica de modelagem orientada a objetos normalmente é empregada nos casos onde os dados envolvidos na aplicação apresentam uma estrutura complexa. Os bancos de dados relacionais funcionam bem e os dados são adequadamente administrados como se fossem partes de uma tabela, com tipos simples de dados, envolvendo poucas associações com dados de outras listas. Ao lidar com dados que devem ser mantidos em estruturas complexas interdependentes, ou quando os dados devem ser rapidamente recuperados percorrendo caminhos de associações em vez de simplesmente procurar em listas simples, a base de dados relacional começa a requerer características como gerenciamento de múltiplos índices e esquemas que empregam estruturas transversais e normalizações complexas. A meta dos bancos de dados orientados a objetos é manter a correspondência direta entre os objetos do mundo real e os do banco de dados, no que implica que podemos identificar e manipular os objetos como um todo. Representar um objeto complexo no modelo relacional significa que o objeto tem que ser subdividido em um grande número de linhas ou tuplas, o que leva à necessidade de realizar um considerável número de operações de junção para recuperar o objeto. Nos modelos de dados tradicionais os dados são vistos como uma coleção de tipos de registros ou de relações, cada qual tendo uma coleção de linhas armazenadas em um banco de dados. Em um modelo de dados orientado a objetos um banco de dados é considerado como uma coleção de objetos do mundo real. Os bancos de dados orientados a objetos foram propostos para dar suporte às necessidades de aplicações mais complexas, como aquelas que exigem transações mais longas, textos longos e armazenamento de imagens. SGBD Um Sistema de Gerenciamento de Banco de Dados ou SGBD ou RDBMS, na sigla em inglês, é uma coleção de programas que permitem ao usuário definir, construir e manipular Bases de Dados para as mais diversas finalidades. Ou seja, SGBD é uma ferramenta que permite administrar nossas bases de dados com mais facilidade. Para que o conjunto de programas seja considerado um SGBD ele deve atender integralmente a seis regras: Regra 1: Auto-Contenção - Um SGBD não contém apenas os dados em si, mas armazena completamente toda a descrição dos dados, seus relacionamentos e formas de acesso. Normalmente esta regra é chamada de meta-base de dados ou dicionário de dados. Regra 2: Independência dos Dados - Quando as aplicações estiverem realmente imunes a mudanças na estrutura de armazenamento ou na estratégia de acesso aos dados, podemos dizer que esta regra foi atingida. Regra 3: Abstração dos Dados - É fornecida ao usuário somente uma representação conceitual dos dados, o que não inclui maiores detalhes sobre sua forma de armazenamento real. O chamado Modelo de Dados é um tipo de abstração utilizada para fornecer esta representação conceitual. Neste modelo, um esquema das tabelas, seus relacionamentos e suas chaves de acesso são exibidas ao usuário, porém nada é afirmado sobre a criação dos índices, ou como serão mantidos, ou qual a relação existente entre as tabelas que deverá ser mantida íntegra. Regra 4: Visões - Cada usuário pode vir a visualizar os dados de forma diferente daquela existente previamente no Banco de Dados. Uma visão consiste de um subconjunto de dados do Banco de Dados, necessariamente derivados dos existentes no Banco de Dados, porém estes não deverão estar explicitamente armazenados. Regra 5: Transações - Deve gerenciar completamente a integridade referencial definida em seu esquema, sem precisar em tempo algum, do auxílio do programa aplicativo. Desta forma exige-se que o banco de dados tenha ao menos uma instrução que permita a gravação de uma série modificações simultâneas e uma instrução capaz de cancelar uma série modificações. Por exemplo, imaginemos que estejamos cadastrando um pedido para um cliente, que este deseje reservar 5 itens de nosso estoque, que estão disponíveis e, portanto são reservados, porém existe um bloqueio financeiro (duplicatas em atraso) que impede a venda. A transação deverá ser desfeita com apenas uma instrução ao Banco de Dados, sem quaisquer modificações suplementares nos dados. Regra 6: Acesso Automático – Deve resolver automaticamente as situações onde um usuário bloqueie o recurso que outro usuário deseja utilizar. Os SGBD tem, ainda, sete características operacionais elementares sempre observadas: Característica 1: Controle de Redundâncias - A redundância consiste no armazenamento de uma mesma informação em locais diferentes, provocando inconsistências. Em um Banco de Dados as informações só se encontram armazenadas em um único local, não existindo duplicação descontrolada dos dados. Quando existem replicações dos dados, estas são decorrentes do processo de armazenagem típica do ambiente Cliente-Servidor, totalmente sob controle do Banco de Dados. Característica 2: Compartilhamento dos Dados - Deve incluir software de controle de concorrência ao acesso dos dados, garantindo em qualquer tipo de situação a escrita/leitura de dados sem erros. Característica 3: Controle de Acesso - Deve dispor de recursos que possibilitem selecionar a autoridade de cada usuário. Assim um usuário poderá realizar qualquer tipo de acesso, outros poderão ler alguns dados e atualizar outros e outros ainda poderão somente acessar um conjunto restrito de dados para escrita e leitura. Característica 4: Interfaceamento - Deve disponibilizar formas de acesso gráfico, em linguagem natural, em SQL ou ainda via menus de acesso, não sendo uma "caixa-preta" somente sendo passível de ser acessada por aplicações. Característica 5: Esquematização - Deve fornecer mecanismos que possibilitem a compreensão dos relacionamentos existentes entre as tabelas e de sua eventual manutenção. Característica 6: Controle de Integridade - Deve impedir que aplicações ou acessos pelas interfaces possam comprometer a integridade dos dados. Característica 7: Backup - O SGBD deverá apresentar facilidade para recuperar falha de hardware e software, através da existência de arquivos de pré-imagem ou de outros recursos automáticos, exigindo minimamente a intervenção de pessoal técnico. Software Livre Em 1984, o idealizador do software livre, Richard Stallman, definiu software livre como sendo “liberdade dos usuários executarem, copiarem, distribuírem, estudarem, modificarem e aperfeiçoarem o software”. Mais precisamente, ele se refere a quatro tipos de liberdade, para os usuários do software: “Liberdade de executar o programa, para qualquer propósito. Liberdade de estudar como o programa funciona, e adaptá-lo para as suas necessidades. Aceso ao código-fonte é um pré-requisito para esta liberdade. Liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo. Liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie. Acesso ao código-fonte é um pré-requisito para esta liberdade.” SQL Em 1974 dois pesquisadores da IBM, Chamberlim e Boyce, publicaram um artigo intitulado “SEQUEL: A Structured English Query Language”. Nesse artigo propunham uma forma de acessar os dados na estrutura relacional proposta por Codd usando uma seqüência de comando o mais próximo possível da linguagem natural do usuário. Junto com o artigo apresentaram um protótipo da IBM chamado SEQUEL-XRM. Por motivos jurídicos o SEQUEL-XRM mudou de nome para SQL no início da década de 80. O equilíbrio entre a facilidade de uso e o poder de seus recursos fez com que o SQL atingisse enorme popularidade entre seus usuários vindo a tornar-se, em 1987, padrão para todos os SGBD relacionais. O que é o PostgreeSQL? O PostgreSQL é um sistema de gerenciamento de banco de dados relacional e orientado a objetos (SGBD) em código livre. Permite executar várias operações do SQL (Linguagem de Pesquisa Estruturada - Strutured Query Language), incluindo subquerys, transações, funções, tipos definidos pelo usuário (UDT – User Defined Type) e funções definidas pelo usuário (UDF – User Defined Function). Ele é o mais avançado banco de dados de código livre disponível. Seu código-fonte e binários pré-compilados estão disponíveis para diversas plataformas. Optei trabalhar com a versão 7.4 por ser a versão mais recente do software em plataforma Windows XP. Esta plataforma foi escolhida devido a sua facilidade de uso. O PostgreSQL - conhecido anteriormente como Postgres95 - derivou do projeto POSTGRES da universidade de Berkley, cuja última versão foi a 4.2. O POSTGRES foi originalmente patrocinado pelo DARPA (Agência de Projetos de Pesquisa Avançada para Defesa), ARO (Departamento de Pesquisa Militar), NSF (Fundação Cientifica Nacional) e ESL Inc. Monjian (2004) conta que a implementação do projeto POSTGRES iniciou em 1986, já em 87 tornou-se operacional. A primeira versão lançada para o público externo foi em 1989. Devido a uma crítica feita ao seu sistema de regras, o POSTGRES teve essa parte re-implementada e lançada em uma segunda versão em 1990. Em 1991 foi lançada a versão 3, com melhorias no executor de consultas e algumas partes do código foram re-escritas. As versões subseqüentes, até o Postgres95, foram focadas em confiabilidade e portabilidade. Segundo Lane (2004), o POSTGRES foi utilizado para diversos sistemas de pesquisa e de produção, entre eles, um banco de dados com rotas de asteróides e diversos sistemas de informações geográficas. O código do POSTGRES foi aproveitado em um produto comercializado pela Illustra Information Technologies (posteriormente incorporada à Informix, que agora pertence à IBM). A versão seguinte, o Postgres95, teve mudanças radicais em relação ao projeto original. O seu código foi totalmente revisado, o tamanho dos fontes foi reduzido em 25%, e a linguagem SQL foi implementada como interface padrão. A performance foi consideravelmente melhorada e vários recursos foram adicionados. Em 1996 o nome Postgres95 tornou-se inadequado, o projeto foi rebatizado "PostgreSQL", para enfatizar a relação do POSTGRES original com a linguagem SQL. A numeração da versão voltou a seguir o padrão anterior ao Postgres95 (considerada a 5.0), e a primeira versão do PostgreSQL foi a 6.0. Enquanto a ênfase do Postgres95 tinha sido a correção de falhas e otimização do código, o desenvolvimento das primeiras versões do PostgreSQL foi orientada à melhoria de recursos e implementação de novos recursos, sempre seguindo os padrões de SQL anteriormente estabelecidos. “O Grupo Global de Desenvolvimento do PostgreSQL tem membros nos Estados Unidos, Brasil, Canadá, Japão, Rússia, Portugal, Alemanha, Suécia, Suíça, Hungria, Polônia, Turquia entre outros. Esse grupo é formado essencialmente por empresas especializadas em PostgreSQL, empresas usuárias do sistema, além dos pesquisadores acadêmicos e programadores independentes. Além da programação, essa comunidade é responsável pela documentação, tradução, criação de ferramentas de modelagem e gerenciamento, e elaboração de extensões e acessórios. Pela riqueza de recursos e conformidade com os padrões, ele é um SGBD muito adequado para o estudo universitário do modelo relacional, além de ser uma ótima opção para empresas implementarem soluções de alta confiabilidade sem altos custos de licenciamento. É um programa distribuído sob a licença BSD, o que torna o seu código fonte disponível e o seu uso livre para aplicações comerciais ou não.“ (PostgreSQL, 2003, 12 p. - Tradução livre, minha) O que é Data Mining? “Data Mining é um processo analítico projetado para explorar grandes quantidades de dados (tipicamente relacionados a negócios, mercado ou pesquisas científicas), na busca de padrões consistentes e/ou relacionamentos sistemáticos entre variáveis e, então, validá-los aplicando os padrões detectados a novos subconjuntos de dados.” (Werneck, 2003) Usama Fayyad (Fayyad et al. 1996) define como sendo: "...o processo não-trivial de identificar, em dados, padrões válidos, novos, potencialmente úteis e ultimamente compreensíveis" Esse processo vale-se de diversos algoritmos que processam os dados e encontram esses padrões. É preciso ressaltar que embora os algoritmos atuais sejam capazes de descobrir padrões, ainda não temos uma solução eficaz para determinar padrões valiosos. Por essa razão, Data Mining ainda requer uma interação muito forte com analistas humanos, que são, em última instância, os principais responsáveis pela determinação do valor dos padrões encontrados. O mesmo é feito na condução (direcionamento) da exploração de dados e, este aspecto, não pode ser desprezado em nenhum projeto que queira ser bem sucedido. Han (1996) ainda nos diz: “Data Mining é parte de um processo maior de conhecimento denominado Knowledge Discovery in Database (KDD). KDD consiste, fundamentalmente, na estruturação do banco de dados; na seleção, preparação e pré-processamento dos dados; na transformação, adequação e redução da dimensionalidade dos dados; no processo de Data Mining; e nas análises, assimilações, interpretações e uso do conhecimento extraído do banco de dados, através do processo de Data Mining.” (tradução livre minha). Bibliografia Codd, E.F.. A Relational Model of Data for Large Shared Data Banks. In: Communications of the ACM, Vol. 13, No. 6, June 1970, pp. 377-387. Disponível em: < http://www.acm.org/classics/nov95/toc.html >, Acesso em 01 ago 2004, 12:13:00 Chamberlin, D.; Boyce, R.. SEQUEL: A Structured English Query Language. IBM Research Laboratory, 1975. Disponível em: < http://www.cs.uml.edu/~cchen/574-F03/reading/cb74.pdf >, Acesso em 01 ago 2004, 16:47 Fayyad, Usama; Piatetski-Shapiro, Gregory; Smyth, Padhraic. The KDD Process for Extracting Useful Knowledge from Volumes of Data. In: Communications of the ACM, pp.27-34, Nov.1996 Groth, R. Data Mining, A Hands-on Approach for Business Professionals. Prentice-Hall PTR. 1998 Han, Jiawei; Fu, Yongjian. Discovery of Multiple-Level Association Rules From Large Databases. Proceedings of 21st VLDB Conference. 1995 JOHNSON, Deborah G., NISSENBAUM, Helen. Computers, Ethics & Social Values. USA, Prentice HallInc. 1995. LANE, Tom. A Tour of PostgreSQL Internals. Great Brigde. Disponível em: < http://developer.postgresql.org/pdf/tour.pdf>, Acesso em 10 abr 2004, 22:50:00. MEDEIROS, Rosalvo. O Impacto dos Requisitos Fixados pelo Cliente na Produção de Software. Dissertação apresentada ao Programa de Pós-Graduação em Engenharia de Produção da Universidade Federal de Santa Catarina como requisito parcial para obtenção do título de Mestre em Engenharia de Produção. Florianópolis, 2000. MOMJIAN, Bruce. Mastering PostgreSQL Administration, Software Research Associates. Disponível em <http://candle.pha.pa.us/main/writings/pgsql/admin.pdf>, Acesso em 10 abr 2004, 22:15:00 Navega, Sérgio. Princípios Essenciais do Data Mining. Anais da Infoimagem 2002. Cenadem 2002. L. Rowe; M. Stonebraker, The Postgres data model, Proc. VLDB Conference, Sept. 1987. Disponível em <http://db.cs.berkeley.edu//papers/ERL-M87-13.pdf >. Acesso em 12 abr 2004, 21:30:00 M. Stonebraker; L. Rowe, The design of Postgres, Proc. ACM-SIGMOD Conference on Management of Data, May 1986. Disponível em < http://s2kftp.cs.berkeley.edu:8000/postgres/papers/ERL-M85-95.pdf >. Acesso em 12 abr 2004, 21:42:00 M. Stonebraker, The design of the Postgres storage system, Proc. VLDB Conference, Sept. 1987. Disponível em <http://db.cs.berkeley.edu//papers/ERLM87-06.pdf>. Acesso em 12 abr 2004, 21:42:00 M. Stonebraker; M. Hearst; S. Potamianos, A commentary on the POSTGRES rules system, SIGMOD Record 18(3), Sept. 1989. Disponível em <http://db.cs.berkeley.edu//papers/ERL-M89-82.pdf >. Acesso em 12 abr 2004, 21:53:00 M. Stonebraker, The case for partial indexes, SIGMOD Record 18(4), Dec. 1989, 4-11. Disponível em < http://db.cs.berkeley.edu//papers/ERL-M89-17.pdf >. Acesso em 13 abr 2004, 14:12:00 M. Stonebraker; L. A. Rowe; M. Hirohama, The implementation of Postgres, Transactions on Knowledge and Data Engineering 2(1), IEEE, March 1990. Disponível em <http://db.cs.berkeley.edu//papers/ERL-M90-34.pdf>. Acesso em 13 abr 2004, 14:52:00 M. Stonebraker; A. Jhingran; J. Goh; S. Potamianos, On Rules, Procedures, Caching and Views in Database Systems, Proc. ACM-SIGMOD Conference on Management of Data, June 1990. Disponível em <http://db.cs.berkeley.edu//papers/ERL-M90-36.pdf>. Acesso em 13 abr 2004, 15:02:00 POSTGRESQL. PostgreSQL 7.3.2 Documentation, USA, 2003 Werneck, Paul. Data Warehouse and Data Mining. IBM. USA. 2003