Tive uma conversa interessante com um colega de trabalho na semana passada. Falávamos sobre como era impressionante a relutância de alguns profisssionais de BI em se adaptar à realidade do Big Data. O alvo do nosso veneno era um cara do departamento de IT, um puta ninja de RDBMS em geral, que não conseguia entender o porquê de alguém querer usar um cluster Hadoop ou bancos de dados NoSQL como plataforma padrão de armazenamento e análise de dados – afinal existiam caras como ele que, com técnicas arcanas de indexação e a moderação de três fóruns de Oracle 11g no currículo, são capazes de otimizar qualquer query. Basta plugar o Microstrategy e voilà, você pode analisar tudo à vontade. Segundo ele, essas tecnologias de Big Data, deviam ser usadas pra tratar de quantidades massivas de dados, afinal o nome não é Big Data? Pra quê mexer em time que está ganhando?
Certo e errado. Um cluster Hadoop, por exemplo, serve sim para processar quantidades massivas de dados, mas essa passa longe de ser a única serventia dessa e de outras plataformas de Big Data. Além disso, Bancos Relacionais e ferramentas de BI convencionais estão LONGE de ser o time que está ganhando. E é esse o assunto do post de hoje.
Mas primeiro, antes de falar das ferramentas de Big Data em si, deixa eu falar sobre Redes Sociais, Mobile e Cloud e mostrar pro meu colega por quê a transição em direção a essas ferramentas de Big Data é não só uma boa idéia, mas importante pra sobrevivência de qualquer um que queira fazer negócios na Era da Informação.
A Terceira Plataforma e a Nova Revolução da Computação
No início eram os Mainframes.
Nos anos 70 e 80, gigantes como a IBM dominavam um mercado onde o principal propósito da computação comercial era fornecer, à quem pudesse pagar, poder analítico para realizar digitalmente e eficientemente atividades comuns no mundo empresarial, tais como organizar e classificar arquivos, manter e acessar históricos de transações, verificar contas e produzir relatórios contábeis complexos, realizar projeções financeiras… enfim. Coisas importantes para o bom funcionamento de qualquer empresa e que costumavam ser feitas por múltiplos times, muitas vezes enormes, de funcionários. Com a tecnologia dos Mainframes, era possível reduzir drásticamente esse número de recursos humanos, reduzindo também custos, chateação com sindicatos e ainda por cima realizar as tarefas destes funcionários em menos tempo! Quem não iria querer? E assim, os gigantes da chamada Primeira Plataforma ganharam rios de dinheiro e ditaram o ritmo da inovação tecnológica nas décadas à seguir… a redução exponencial do tamanho dos componentes, aliada ao aumento também exponencial do poder de processamento, logo despertou em mentes inovadoras a idéia do computador de mesa – o Desktop.
E aí vieram os Profetas.
Todo mundo já está cansado de ouvir a história de como os ‘Steves’ Jobs e Wozniack criaram computadores na garagem da casa dos pais, fundaram a Apple e aí o Bill Gates e o Paul Allen vieram com a idéia do sistema operacional com interface gráfica amigável e todo o resto da lenda. O fato é que nasceu o PC e, muito a contra-gosto dos gigantes da época, como a IBM, o sonho de Bill Gates se tronou realidade e hoje podemos dizer que há um computador para cada mesa de escritório no mundo (Tá. Tô exagerando. Não venha me falar das criancinhas na África, você entendeu o ponto). O que talvez os pioneiros do Computador Pessoal não esperassem na época, é que esse novo conceito de computação descentralizada – o oposto do Mainframe – faria muito mais do que simplesmente jogar tarefas diárias do mundo corporativo de volta nas mãos de funcionários, com ferramentas como o Microsoft Office, a um custo e complexidade muito menor do que o de manter um Mainframe. Com o advento de tecnologias de vídeo, conectividade e de novas linguagens de programação cada vez mais simples de usar, surgiram aplicações da computação como os Jogos, a Internet, aplicações científicas utilizáveis por nós mortais fora da elite universitária, pessoas passaram a ter impressoras em casa… uma verdadeira revolução em vários níveis da sociedade, que agora passava a ter acesso à computação e à teconologia de ponta diretamente nas mesas de pessoas comuns. Mais ainda, o surgimento da arquitetura Cliente-Servidor, possibilitou o advento da Internet, mudando a forma como interagimos uns com os outros e com o mundo, além de mudar radicalmente a forma como as atividades do dia-a-dia corporativo eram feitas, através de, vejam só, Bancos de Dados Relacionais e Data Warehouses em servidores remotos, aliados à novas ferramentas de análise voltadas a este tipo de tecnologia, muito embora os Mainframes tenham utilidade até hoje e sejam muito usados principalmente no ramo bancário-financeiro. Em suma, a Segunda Plataforma, não matou o Mainframe. Mas mudou completamente a cara do Mercado, onde os gigantes eram aqueles que forneciam Hardware, Software e Inovação voltados ao Desktop ou a Servidores. Empresas como Microsoft, Oracle, Dell e HP foram os reis desta plataforma. Perceba que, embora as tecnologias da Segunda Plataforma ainda sejam muito relevantes, me refiro a este período do passado por causa da….
Terceira Plataforma – Facebook. Twitter. Smartphones. WhatsApp. Apps. Google Drive. Amazon. Yelp. Airbnb. Uber. Candy Crush. Youtube. World of Warcraft. Coursera. Pra citar alguns poucos exmplos de nomes de coisas que você com certeza usou ou já ouviu falar.
São nomes que provavelmente evocam idéias muito diferentes em nossas cabeças, mas qual é a coisa que todos estes nomes tem em comum?
Perceba que utilizei o verbo “usar” e não “acessar” ou “visualizar”. Todos eles são serviços.
Isso é a terceira plataforma. É a computação e a arquitetura digital orientada à Serviços. Com base na revolução em conectividade possibilitada pela arquitetura Cliente-Servidor da Segunda Plataforma, a nova revolução começou há apenas alguns anos atrás quando começamos a falar em Cloud Computing e Software as a Service. Paralelamente, fora do mundo corporativo, surgiam Redes Sociais cada vez mais bem-estruturadas e com um número cada vez maior de adeptos. Junte a isso o advento dos Smartphones e o conceito dos Apps, seguido pelos Tablets e dispositivos móveis em geral e o que temos é um paradigma onde o Usuário é o centro das atenções e não mais seu Desktop – queremos ter acesso à Serviços on-line não importa onde estivermos. Programas são cada vez menos desenvolvidos com uma plataforma específica em mente à qual o usuário deverá ter acesso se quiser utilizá-lo. Um exemplo é o próprio Microsoft Office, que se antes era vendido como um programa para ser instalado no seu computador e possibilitar que você execute tarefas de escritório em seu computador quando quisesse, desde que tenha acesso a seu PC, agora é vendido como a assinatura de um serviço – pouco importa onde – e por “onde” aqui quero dizer localização geográfica – o programa em si está rodando, tudo que o usuário precisa fazer é se logar ao serviço e ele poderá usar a suite Office de qualquer plataforma que quiser: seja ela um celular, um laptop ou um tablet.
Trazendo a discussão de volta para o mundo da análise de dados, o que importa para o Data Scientist nessa revolução são o volume e a variedade de dados que essa mudança de paradigma está gerando. Se antes entravamos em um portal de notícias onde a única interação entre usuário e página era a leitura do conteúdo por parte do usuário, com no máximo este deixando um comentário, agora nós geramos volumes monstruosos de conteúdo a cada vez que utilizamos um serviço como o Facebook ou o Instagram – fazemos upload de inúmeras imagens, comentamos conteúdo, debatemos notícias, distribuimos likes e postamos artigos, as vezes várias vezes por dia. E queremos interagir com tudo isso em tempo-real… temos cada vez menos paciência com telas de “loading” e demora na resposta de um comando qualquer. Por trás de todas essas ações, além de existir uma infra-estrutura de armazenamento e recuperação de dados completamente nova, existe uma mina de ouro do ponto de vista comercial – pessoas estão dizendo aos provedores de serviço, como o Google e o Twitter, com uma riqueza enorme de detahes, quem elas são, de onde vêm, do que gostam e do que não gostam, quais são seus hábitos de consumo e seus desejos materiais. Pare pra pensar… quantas vezes o Google, o Facebook ou a Amazon não “adivinharam” algo sobre você? Seja o seu novo emprego, a mudança de curso na universidade que você está pensando em fazer ou mesmo a gravidez da sua esposa, quantas vezes estes serviços já não te recomendaram produtos ou conteúdo relacionados a fatos sobre os quais você tem certeza que nunca postou na internet? Por trás dessa “mágica”, há um algoritmo estatístico e, por trás desse algoritmo, há um Data Scientist.
Mas antes de entrar de vez no papel do Data Scientist nesta revolução, é preciso falar da forma como os dados são armazenados e finalmente mostrar pro meu colega porque ele deveria estar aprendendo NoSQL e Hadoop pra ontem.
Na segunda plataforma, os Bancos de Dados Relacionais revolucionaram a forma de armazenar dados, no ínicio facilitando a organização e o armazenamento de transações no mundo corporativo e, mais tarde, se tornando a forma padrão de disponibilzar conteúdo dinâmicamente em páginas da web. A idéia é simples – para cada transação, por exemplo, uma venda ou um pagamento realizados, adiciona-se uma linha à uma tabela bi-dimensional, onde as colunas são as propriedades de interesse da transação, por exemplo “Quem realizou a venda” e “Qual o valor” ou “Quem recebeu o pagamento” e “Quando o pagamento foi realizado”. Tomando este conceito simples como base, durante os últimos 20 anos foram desenvolvidas várias técnicas e paradigmas para se armazenar e relacionar dados de maneira mais complexa. Por exemplo, porque manteríamos uma tabela de vendas e uma de pagamentos, sendo que os pagadores e vendedores estão necessariamente relacionados pois um vende e o outro compra? Não poderíamos de alguma forma juntar estas duas tabelas? Ou ainda, vendas e pagamentos ocorrem todos em endereços que já conhecemos bem, não poderíamos criar uma tabela só com dados geográficos e elminar essas colunas das tabelas de vendas e pagamentos? Enfim, técnicas como a separação em tabelas dimensionais e tabelas fato, OLAP, OLTP foram criadas para facilitar e otimizar o que realmente interessa em um banco de dados: a busca e a recuperação de dados. Com modelos complexos, onde várias tabelas estão interligadas entre si através de campos chamados “chaves”, é possível buscar e retornar quase qualquer conjunto de Colunas que desejarmos, desde que as relações entre tabelas sejam respeitadas. Estas buscas são feitas através da linguagem SQL e a complexidade de um comando nesta linguagem depende do conjunto de Colunas que desejamos retornar. De posse de um dado conjunto de Colunas, que formam efetivamente uma nova tabela, um analista pode então aplicar técnicas estatísticas, gerar relatórios, gráficos e tudo mais.
Mas e no caso de um Serviço como o Facebook, por exemplo?
O número de combinações possíveis de tipos de entradas que você pode causar num banco de dados com um simples update de status no Facebook é enorme! Por exemplo, você pode postar um texto, com uma foto, que pode ou não ser um gif animado, marcar ou não uma ou várias pessoas, pode postar um vídeo ao invés de uma foto, ou os dois, e seus amigos podem postar fotos ou vídeos nos comentários, marcando uma ou nenhuma ou várias pessoas no texto, as fotos e os vídeos podem ou não serem links externos, você pode postar no seu mural, no mural de um amigo, o post pode ser visto por todos, ou por amigos, ou por ninguém, o post pode ser em um grupo, que pode ser aberto ao público ou fechado para um certo número de usuários. Fora metadados, como localização geográfica, tempo, fuso-horário e sabe-se lá mais o quê o Facebook registra sobre seus posts… enfim. O fato é que um modelo relacional para abrigar o tipo dinâmico de interações a que estamos acostumados no Facebook seria Ultra-Complicado e, quanto mais complicado é o modelo, mais difícil fica de realizar uma pesquisa no banco de dados, ou seja, demora mais tempo para um conjunto de Colunas específico ser retornado. Em outras palavras, a deslizada na tela do iPhone com o App do Facebook aberto, ia demorar uma eternidade até que você pudesse ver algum conteúdo. Além disso, na direção oposta, esse tipo de post simples é realizado milhões de vezes por minuto ao redor do mundo, fora de questão tentar parsear e adequar estes dados a um modelo relacional antes de torná-los disponíveis de volta para o usuário – eles querem tudo em tempo-real! Como então lidar com esse volume massivo de dados desorganizados chegando a todo instante e sendo requisitado pelos usuários na mesma velocidade?
E é aí que entram o Hadoop e os Bancos NoSQL.
Ao invés de criar um modelo relacional ultra-complexo, abolimos o conceito de “esquema” (que são as colunas que uma linha numa certa tabela deve ter) e enfiamos uma nova entrada no banco de dados do jeito que ela vier. Se ela tem o mesmo número de propriedades que a entrada anterior, ou se são as mesmas propriedades, pouco importa – as buscas no banco de dados serão feitas apenas pela Chave de uma determinada entrada, que irá conter todas as propriedades relacionadas a ela em uma única entidade, sem a necessidade de escanear múltiplas tabelas para retornar o conjunto desejado de Colunas. Isto abre a possibilidade de armazenarmos dados não-estruturados, ou seja, com “esquemas” dinâmicos – algo complicadíssimo de se fazer com bancos relacionais – e abre as portas para Data Scientists buscarem valor nos dados de uma forma nunca antes vista. Ferramentas como o HBase (baseado no Hadoop), Cassandra, MongoDB, outros bancos NoSQL, bancos baseados em Grafos como o Neo4j e até mesmo o próprio HDFS do Hadoop são os carros-chefe dessa nova era do armazenamento e análise de dados.
Tá, mas e na hora de analisar estes dados? Aí precisa de um “esquema”, certo? Como eu vou ajustar um modelo de regressão sem saber quais são as variáveis?
Deixa eu começar a responder essa descendo a lenha nos Bancos Relacionais de novo.
Profissionais da área de estatística, e mais recentemente de Data Science, gostam de ter flexibilidade quando fazem seu trabalho, no sentido de poder manipular bases de dados com o mínimo possível de limitações. Profissionais assim querem testar diferentes transformações das variáveis de interesse, incluir e excluir colunas em uma tabela, cruzar dados de outras tantas tabelas, testar um modelo e tunar seus parâmetros, jogar tudo fora e recomeçar do início várias vezes… enfim – querem ter flexibilidade total para fazer o que quiserem com seus dados, desde a fase de análise exploratória, passando pelo ajuste de modelos estatísticos até a visualização dos resultados. E isso é complicado no modelo relacional.
Quem trabalha na área, sabe que tem toda uma arte, além da estatística que já é difícil, em pegar um banco relacional e criar as Queries em SQL certas pra retornar o conjunto de colunas que você quer para ajustar um modelo.
Seria uma maravilha se você, ao invés de ficar lutando uma tarde inteira com SQL, pudesse simplesmente arrancar do banco uma tabela só com as colunas que você precisa, tudo já filtrado pelos critérios que você quer, não é? E se você quiser testar outro modelo com uma variável a mais, seria legal poder simplesmente adicionar mais uma coluna na sua tabela, certo? Tipo no Excel… corta aqui e cola ali. Ah… seria bom mesmo.
E esse é o problema com os bancos de dados relacionais tradicionais. Eles não foram feitos para o Data Scientist ir lá e se divertir quando e como quiser. Foram feitos para armazenar dados transacionais. Ponto.
Com o Hadoop, o negócio é diferente. O Hadoop é um grande Lixão de dados. Ele é completamente agnóstico ao que você está colocando no HDFS – podem ser arquivos XML, arquivos texto, logs, aquivos CSV, arquivos binários… não importa. O analista pode escrever código, usando ferramentas como o Pig, o Hive ou mesmo linguagens como Java e Python, para extrair informação de qualquer tipo de arquivo e ainda com a vantagem de o fazer em sistema distribuído, capaz de processar quantidades massivas destes arquivos! Com esta informação extraída de todas estas diversas fontes ao mesmo tempo, podemos criar uma tabela no sentido tradicional – linhas e colunas e ajustar nossos modelos estatísticos. Quero mais variáveis? Retorne ao código que escreveu para extrair as informações das fontes e coloque mais colunas no output. Simples assim.
Não estou dizendo que bancos relacionais são inúteis ou que eles já eram agora que o Big Data chegou pra ficar. Bancos SQL tradicionais podem – e frequentemente são – fontes de dados que cruzaremos com fontes não-estruturadas para ajustar modelos estatísticos! Ninguém vai se livrar daquele banco Oracle que tá há mais de 10 anos armazenando dados preciosos sobre sua empresa. O que faremos é utilizar esses dados numa perspectiva mais ampla! Ao invés de tentar adequar tudo ao banco Oracle em questão.
Na verdade, estes bancos são muito úteis em data science – o grande poder deles está na agregação dos dados. Ou seja, usar o banco de dados como uma base para construir coisas como modelos dimensionais e os chamados cubos, que são representações dos dados com as quais é possível observá-los por diferentes perspectivas, realizar drill-donws em hierarquias de medidas e ter insights. Daí podemos utilizar estes resultados para enriquecer um modelo ajustado em outras fontes externas ao banco, ou podemos visualizar estes insights em gráficos e Dashboards dentro dos limites do BI tradicional – isto é, um cliente tem algum requisito sobre coisas que ele gostaria de ver em um Dashboard e o analista de BI agrega o conteúdo do banco de dados da melhor maneira possível para entregar o que foi pedido.
Não há nada de errado com isso. Existem inúmeros programas fantásticos para esse tipo de tarefa, como o Microstrategy, o SQL Server Analysis Services e o OBIEE; e o BI tradicional é uma ótima forma de controlar transações, identificar ralos financeiros e identificar possíveis oportunidades de negócios, entre outras inúmeras aplicações.
Mas tudo isso é olhar pelo retrovisor.
O Data Scientist não está interessado apenas no que os dados podem dizer sobre a situação hoje, ou melhor, como agir hoje dado o que observamos ontem. Ele está interessado em predições – o que a série de dados passada pode nos dizer sobre o que vai acontecer amanhã. Ele não está interessado apenas em encontrar oportunidades de negócios, indentificando potenciais clientes com um problema que sua empresa pode resolver – ele quer saber quais serão as condições do possível cliente amanhã, para oferecer hoje a solução do problema antes que ele aconteça. Data Science é proatividade. BI é reatividade.
Voltando à conversa que tive com meu colega – você pode até argumentar “Mas o cara do IT até que tem razão, se o banco de dados tiver as queries certas otimizadas e a quantidade de dados não for muito monstruosa, dá pra conectar com o SAS ou com o R e analisar os dados lá.”.
Sim, é verdade. Mas e se você pudesse controlar o fluxo de dados inteiro, sem depender de um DBA otimizando certas queries? E se você pudesse usar as tabelas que quiser sem ninguém te vetar pra não afetar a performance do banco? E se você pudesse inserir colunas na suas tabelas “on the fly” sem precisar desmontar o modelo inteiro pra inserir as colunas nas tabelas fato? Aliás, pra que esse negócio de modelo semântico, dimensões e tabelas fato? E se você pudesse fazer um ETL em algumas horas, puxando dados de fontes como arquivos texto, bancos relacionais e tabelas do excel, tudo ao mesmo tempo, criar quantas tabelas quiser, usar, mudar tudo ou jogar tudo fora quando quiser? Tudo isso independentemente de ter muitos ou poucos dados?
Então, por hoje é isso aí.