Visualizando Dados Ben Fry O’REILLY® Pequim • Cambridge • Farnham • Colônia • Paris • Sebastopol • Taipé • Tóquio Visualizando Dados Do original Visualizing Data Copyright © 2008 da Editora Alta Books Ltda. Authorized translation from English language edition, entitled Visualizing Data, by Ben Fry, published by O’Reilly Media, Inc. Copyright © 2008 by O’Reilly Media, Inc.. Portuguese language edition published by Editora Alta Books, Copyright © 2008 by Editora Alta Books. Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrônico, mecânico, fotográfico, gravação ou quaisquer outros. Todo o esforço foi feito para fornecer a mais completa e adequada informação, contudo a editora e o(s) autor(es) não assumem responsabilidade pelos resultados e usos da informação fornecida. Recomendamos aos leitores testar a informação, bem como tomar todos os cuidados necessários (como o backup), antes da efetiva utilização. Este livro não contém CD-ROM, disquete ou qualquer outra mídia. Erratas e atualizações: Sempre nos esforçamos para entregar a você, leitor, um livro livre de erros técnicos ou de conteúdo; porém, nem sempre isso é conseguido, seja por motivo de alteração de software, interpretação ou mesmo quando alguns deslizes constam na versão original de alguns livros que traduzimos. Sendo assim, criamos em nosso site, www.altabooks.com.br, a seção Erratas, onde relataremos, com a devida correção, qualquer erro encontrado em nossos livros. Avisos e Renúncia de Direitos: Este livro é vendido como está, sem garantia de qualquer tipo, seja expressa ou implícita. Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou comercial são de responsabilidade de seus proprietários. A Editora informa não estar associada a nenhum produto e/ou fornecedor apresentado no livro. No decorrer da obra, imagens, nomes de produtos e fabricantes podem ter sido utilizados, e desde já a Editora informa que o uso é apenas ilustrativo e/ou educativo, não visando ao lucro, favorecimento ou desmerecimento do produto/fabricante. Produção Editorial: Editora Alta Books Coordenação Editorial: Fernanda Silveira Tradução: Luciana Felisbino e Lucia Kinoshita Revisão: Karina Gercke Diagramação: Marcelo Saraiva Revisão Técnica: Eduardo Velasco Fechamento: Rafael Conde Impresso no Brasil O código de propriedade intelectual de 1º de Julho de 1992 proíbe expressamente o uso coletivo sem autorização dos detentores do direito autoral da obra, bem como a cópia ilegal do original. Esta prática generalizada nos estabelecimentos de ensino, provoca uma brutal baixa nas vendas dos livros a ponto de impossibilitar os autores de criarem novas obras. Rua Viúva Cláudio, 291 – Jacaré Rio de Janeiro – RJ. CEP: 20970-031 Tels: 21 3278-8069; 3278-8419; 3278-8159 Fax: 21 3277-1253 Atendimento Comercial São Paulo: 11 2626-5139; 2626-5095 www.altabooks.com.br e-mail: [email protected] Sumário Prefácio vi 1. Os Sete Estágios da Visualização de Dados Por que a Exibição de Dados Exige Planejamento Um Exemplo Repetição e Combinação Princípios Avante 1 1 5 12 13 15 2. Iniciando a lidar com o Processing Programando com Processing Exportando e Distribuindo o Seu Trabalho Exemplos e Referências Funções Esboço e Roteiros Pronto? 16 17 19 19 22 23 24 3. Mapeando Desenhando um Mapa Localizações em um Mapa Dados em um Mapa Usando Seu Próprio Dado Próximos Passos 25 25 26 27 41 42 4. Séries de Tempo Leite, Chá e Café (Obter e Analisar) Limpando a Tabela (Filtrar e Garimpar) Um Esquema Gráfico Simples (Representar e Refinar) Classificando o Conjunto Atual de Dados (Refinar e Interagir) Traçando Legendas de Eixos (Refinar) Selecionando uma Representação Apropriada (Representar e Refinar) Usando Rollovers para Destacar Pontos (Interagir) Formas de Conectar Pontos (Refinar) Legendas de Texto Como Painéis Tabulados (Interagir) Interpolação Entre Conjuntos de Dados (Interagir) Fim das Séries 43 43 44 45 47 49 57 60 61 65 68 72 iii iv 5. Conexões e Correlações Mudando as Fontes dos Dados Declaração do Problema Pré-Processando Usando os Dados Pré-processados (Obter, Analisar, Filtrar, Garimpar) Mostrando os Resultados (Representar) Retornando à Pergunta (Refinar) Classificação Sofisticada: Usando Salário como um Desempate (Garimpar) Movendo para Múltiplos Dias (Interagir) Polindo a Interação (Refinar) Considerações de Emprego (Obter, Analisar, Filtrar) 74 74 74 75 88 93 96 101 101 106 107 6. Mapas de Scatterplot Pré-processamento Carregando os Dados (Aquisição e Análise) Desenhando Gráficos de Dispersão de Códigos de Endereçamento Postal (Minerar e Representar) Realçar Pontos Durante a Digitação (Refinar e Interagir) Mostrar o Ponto Atualmente Selecionado (Refinar) Escurecendo e Iluminando Pontos Progressivamente (Refinar) Ampliando (Interagir) Modificando como os Pontos São Mostrados Quando Ampliados (Refinar) Problemas de Deployment (Aquisição e Refinamento) Próximos Passos 115 115 123 124 126 128 130 132 140 141 142 7. Árvores, Hierarquias e Recorrência Usando a Recorrência para Construir uma Árvore de Diretórios Usando um Fila para Carregar de modo Assíncrono (Interagir) Uma Introdução ao Treemaps Que Arquivos estão Usando Mais Espaço? Observando o Conteúdo das Pastas (Interagir) Melhorando a Visualização de Treemaps (Refinar) Voando Através dos Arquivos (Interagir) Próximos Passos 144 144 147 150 153 157 159 165 172 8. Redes e Gráficos Simples Demonstração de Gráfico Um Gráfico Mais Complexo Abordando Problemas de Rede Exemplo de Gráfico Avançado Garimpando Informação Adicional 173 173 181 190 192 207 9. Obtendo Dados Onde Encontrar Dados Ferramentas para Obtenção de Dados da Internet Localizando Arquivos para Uso com Processing Carregando Dados de Texto Lidando com Arquivos e Pastas Listando Arquivos numa Pasta Download de Assíncronos de Imagem 209 209 210 212 213 218 219 222 Visualizando Dados Usando o método opensStream( ) Como uma Ponte para Java Lidando com Arranjos de Bytes Técnicas Avançadas da Rede Usando um Banco de Dados Lidando com um Grande Número de Arquivos 224 224 225 228 233 10. Analisar dados Níveis de Esforço Ferramentas para Coletar Indícios Texto é Melhor Linguagens de Marcação de Textos Expressões Regulares (regexps) Gramáticas e Notação BNF Dados Compactados Vetores e Geometria Formatos de Dados Binários Trabalho Avançado de Detetive 234 234 235 236 239 249 250 250 252 256 259 11. Integrando Processing com Java Modos de Programação Arquivos Fonte Adicionais (Tabs) O Pré-processador Estrutura da API Embutindo PApplet nas Aplicações Java Usando Código de Java num Sketch de Processing Usando Bibliotecas Construindo com a Fonte para processing.core 262 262 264 265 266 267 271 271 272 Índice 273 Apêndice de Figuras 285 Prefácio v Prefácio Quando eu mostro projetos de visualização para um público, uma das perguntas mais comuns é “Como você faz isso?” Podem até existir outros livros sobre visualização de dados, mas os mais proeminentes são geralmente coleções de estudos acadêmicos; de qualquer forma, poucos explicam verdadeiramente como construir representações. Livros do campo de design que oferecem conselhos para criar visualizações vêem o campo apenas em termos de displays estáticos, ignorando a possibilidade de visualizações dinâmicas baseadas em software. Alguns gastam a maior parte do tempo dissecando o que está errado com determinadas visualizações - às vezes indicando soluções, mas na maioria das vezes, não. Nesse livro, eu quis oferecer algo para pessoas que desejam começar a construir suas próprias visualizações, algo que pudesse ser usado como ponto de partida para trabalhos mais complicados. Eu não abordo tudo, mas tentei oferecer uma base suficiente para que você saiba o que fazer posteriormente. Escrevi esse livro porque tive a vontade de encontrar um meio de tornar as idéias em Computational Information Design (Design de Informação Computacional) - minha dissertação de P.h.D. - mais acessíveis para um público mais amplo. Mais especificamente, eu queria ver essas idéias aplicadas, ao invés de estarem limitadas a um documento acadêmico numa estante. Minha dissertação compreendia todo o processo partindo dos dados até chegar ao entendimento; em outras palavras, desde a consideração de uma pilha de informações até apresentá-la de forma útil, numa forma de simples compreensão e com a qual se possa interagir com facilidade. Esse processo é abordado no Capítulo 1 e usado em todo o livro como uma estrutura para trabalhar com visualizações. A maioria dos exemplos nesse livro está escrita desde o seu início. Ao invés de confiar em “kits de ferramentas” ou bibliotecas que produzem tabelas ou gráficos, você aprende a criá-los usando um pouco de matemática, algumas linhas e retângulos e um bocado de texto. Muitos leitores podem ter experimentado alguns “kits de ferramentas” e os achado insuficientes, principalmente porque desejam personalizar a apresentação da sua informação. Uma ferramenta com usos genéricos produzirá apenas displays genéricos, o que pode ser frustrante se os displays não se ajustarem ao seu conjunto de dados. Dados podem tomar vários formatos interessantes que requerem tipos singulares de displays e interação; esse livro pretende abrir sua imaginação em maneiras que coleções de gráficos de barra ou de pizza não conseguem. Esse livro usa Processing (http://processing.org), um ambiente simples de programação e a API (Interface de Programação de Aplicativos) que eu co-desenvolvi com Casey Reas da UCLA. O ambiente de programação de Processing torna fácil sentar e esboçar código para produzir imagens visuais rapidamente. Uma vez que seu desenvolvimento supera o ambiente, é possível usar um IDE Java para criar código Processing porque a API é baseada em Java. Processing é grátis para baixar e abrir fontes.Vem sendo desenvolvido desde 2001 e já tivemos cerca de 100 mil pessoas testando-o no últimos 12 meses. Hoje, Processing é usado por dezenas de milhares de pessoas para todos os estilos de trabalho. Quando comecei a escrever este livro, me rebati sobre qual linguagem e API usar. Poderia ter sido baseado em Java, mas eu percebi que acabaria me vendo re-implementando a API de Processing para tornar as coisas simples. Poderia ter sido baseado em Actionscript e Flash, mas o preço para a compra de Flash é alto e ele tende a falhar ao lidar com conjuntos maiores de dados. Outras linguagens, como Python e Ruby, são úteis, mas a sua velocidade de execução não acompanha a de Java. No fim das contas, Processing era a melhor combinação de custo, facilidade de uso e velocidade de execução. vii O Público Para Esse Livro Na primavera de 2007, eu fui co-professor de um curso de visualização de informação (Information Visualization) em Carnegie Mellon. Nossos trinta alunos variavam de um calouro da escola de artes a um candidato a Ph.D. em ciência da computação. No meio estavam alunos de pós-graduação da Escola de Design e vários outros graduandos. Seus níveis de habilidade variavam bastante, mas não era tão importante quanto seu nível de curiosidade e alunos que estavam curiosos e dispostos a fazer um esforço maior conseguiram ultrapassar as dificuldades técnicas (para os alunos de arte e design) ou as exigências visuais (para os da área de engenharia). Este livro tem como alvo uma extensão semelhante de áreas, talvez menos acadêmica. Minha intenção é dirigir-me às pessoas que querem fazer perguntas, manipular dados e obter um entendimento de como transmitir informação para outros. Por exemplo, o livro é para web designers que queiram criar visualizações mais complexas do que as que suas ferramentas permitem. É também para engenheiros de software que querem se tornar adeptos a criar software que represente dados – o que exige o desenvolvimento de novas habilidades, mesmo que tenham alguma base em construção de UIs (Interfaces de Usuário). Nada disso é muito complicado, mas nem sempre é óbvio por onde começar. Fundamentalmente, este livro é para pessoas que têm um conjunto de dados, uma curiosidade para explorá-lo e uma idéia do que querem comunicar sobre ele. O grupo de pessoas que visualizam dados está crescendo muito rapidamente, à medida que lidamos com cada vez mais informações. Ainda mais importante, o público aumentou para além dos experts em visualização. Tornando essas idéias acessíveis para um grande número de pessoas, é provável que vejamos coisas extraordinárias na próxima década. Informação Base Devido ao fato de o público para esse livro incluir tanto programadores quanto não-programadores, o material varia em complexidade. Iniciantes serão capazes de compreender e passar os primeiros capítulos, mas podem se perder ao adentrarmos tópicos de programação mais complicados. Se você procura por uma introdução mais branda à programação com Processing, há outros livros disponíveis (incluindo um escrito por Casey Reas e eu) que são mais adequados a aprender os conceitos desde os fundamentos, apesar de não abordarem especificamente visualização de dados. Os capítulos de 1 a 4 podem ser entendidos por alguém sem qualquer conhecimento de programação, mas os capítulos seguintes ficam rapidamente mais difíceis. Você será mais bem-sucedido com esse livro se tiver alguma familiaridade com códigos de criação – quer seja Java, C++, ou Actionscript. Esse não é, de forma alguma, um texto avançado, mas uma pequena base em códigos de criação ajudará bastante na compreensão dos conceitos. Visão Geral Do Livro Capítulo 1, Os sete estágios da visualização de dados, aborda o processo do desenvolvimento de uma visualização útil, desde a obtenção de dados até a interação com eles. Essa é a estrutura que usaremos ao enfrentar problemas em capítulos posteriores. Capítulo 2, Começando a lidar com o Processing, é uma introdução básica ao ambiente e sintaxe de Processing. Oferece uma pequena base na estrutura da API e a filosofia por trás do desenvolvimento do projeto. Capítulos 3 a 8 abordam exemplos de projetos que ficam progressivamente mais complicados. Capítulo 3, Mapeamento, traça pontos de dados num mapa, nossa primeira introdução à leitura de dados do disco e sua representação na tela. Capítulo 4, Time series, aborda vários métodos para traçar gráficos que representem como os dados mudam ao longo do tempo. viii Visualizando Dados Capítulo 5, Conexões e Correlações, é o primeiro capítulo a realmente aprofundar-se em como adquirimos e analisamos um conjunto de dados. O exemplo nesse capítulo lê dados do site MLB.com e produz uma imagem correlacionando salários de jogadores e desempenho do time ao longo do curso de uma temporada de baseball. É um exemplo detalhado ilustrando como retirar dados de uma website que não contém uma API oficial. Essas técnicas podem ser aplicadas a muitos outros projetos, mesmo que você não tenha interesse por baseball. Capítulo 6, Mapas de Gráficos de Dispersão, responde à pergunta, “Como os códigos postais se relacionam à geografia?”, desenvolvendo um projeto que permite aos usuários refinar progressivamente um mapa do país ao digitarem um código postal. Capítulo 7, Árvores, Hierarquias e Recursão, discute árvores e hierarquias. Aborda também a recursão, um importante tópico ao lidar com estruturas e mapas de árvore, uma representação bastante útil para certos tipos de dados de árvore. Capítulo 8, Redes e Gráficos, sobre redes de informação, também chamadas gráficos. A primeira metade discute modos para produzir uma representação de conexões entre muitos nós de uma rede e a segunda metade mostra um exemplo para fazer o mesmo com dados de tráfego de website, para ver como um site é usado ao longo do tempo. O projeto seguinte também trata de como integrar Processing com Eclipse, um IDE (Integrated Drive Electronics) Java. Os três últimos capítulos contêm material de referência, incluindo mais informação de base e técnicas para adquirir e analisar dados. Capítulo 9, Adquirindo Dados, é um tipo de livro de receitas que abrange todos os tipos de técnicas práticas, desde ler dados de arquivos, a mascarar um navegador da web, até armazenar dados em bancos de dados. Capítulo 10, Analisando Dados, também é escrito no estilo “livro de receitas”, com exemplos que ilustram o trabalho investigativo envolvido na análise de dados. Os exemplos incluem análises de tabelas HTML, XML, dados comprimidos e formas SVG. Esse capítulo inclui ainda um exemplo básico de observar uma conexão de rede para entender como funciona um protocolo de dados não-documentado. Capítulo 11, Integrando Processing com Java, compreende as especificidades de como a API de Processing se integra com Java. Na verdade, é mais um apêndice voltado para programadores avançados de Java que querem utilizar a API com seus próprios projetos. Safari Livros Online Quando você vê o ícone “Safari Books Online” na capa do seu livro de tecnologia favorito, significa que o livro está disponível online pela O’Reilly Network Safari Bookshelf. A Safari oferece uma solução que é melhor do que e-books. É uma biblioteca virtual que lhe permite procurar facilmente milhares de livros de tecnologias avançadas, recortar e colar modelos de códigos, baixar capítulos e encontrar respostas rápidas quando precisa da informação mais precisa e atual. Experimente grátis em http://safari.oreilly.com. Agradecimentos Primeiramente, eu gostaria de agradecer a O’Reilly Media por assumir o projeto deste livro. Fui colocado em contato inicialmente com Steve Weiss, com quem me encontrei para discutir o livro na primavera de 2006. Steve mais tarde me colocou em contato com o escritório em Cambridge, onde Mike Hendrickson começou a lutar pelo livro e trabalhou para garantir que o contrato acontecesse. O entusiasmo de Tim O’Reilly durante o percurso ajudou a confirmar o projeto. Prefácio ix Devo muito também ao meu editor, Andy Oram e editora assistente, Isabel Kunkle. Sem o trabalho pesado de Andy e suas úteis sugestões, ou a atenção de Isabel em nosso programa, eu talvez ainda estivesse trabalhando no esboço do Capítulo 4. Agradeço também àqueles que revisaram o manuscrito de rascunho: Brian DeLacey, Aidan Delaney, e Harry Hochheiser. Esse livro é baseado em idéias desenvolvidas inicialmente como parte do meu trabalho de doutorado no MIT Media Laboratory. Devo isso ao meu consultor durante seis anos, John Maeda e aos membros do meu comitê, David Altshuler e Chris Pullman. Chris também deu o impulso para que as idéias fossem publicadas corretamente, o que foi um grande encorajamento. Eu também gostaria de agradecer a Casey Reas, meu amigo, inspiração e colaborador de Processing, quem tem garantido que o projeto continue muitos anos depois de seu início. O conteúdo dos exemplos foi influenciado por muitos cursos que ministrei em workshops ou em salas de aula nos últimos anos – particularmente, meus cursos de visualização na Universidade de Harvard e Carnegie Mellon (ministrado em conjunto com Golan Levin) e workshops no Anderson Ranch em Colorado e no Hangar em Barcelona. Devo muito a esses “alunos-cobaia” que me ensinaram a melhor forma de ensinar este trabalho. Finalmente, agradeço a minha família e sou imensamente grato a Shannon Hunt por sua edição, estímulo e apoio moral. Seus passos serão difíceis de seguir, ao tentar retribuir o favor enquanto ela escreve o seu livro nos meses seguintes. Convenções Usadas Neste Livro As seguintes convenções tipográficas são usadas nesse livro: Texto simples: Indica títulos de menu, opções de menu, botões de menu e atalhos do teclado (como Alt e Ctrl). Itálico Indica novos termos, URLs, endereços de e-mail, nomes de arquivos, extensões de arquivos, nomes de caminhos, diretórios e utilidades Unix. Largura Constante Indica comandos, opções, variáveis, funções, tipos, classes, métodos, marcadores HTML e XML, o conteúdo de arquivos e output de comandos. Largura constante em negrito Demonstra comandos ou outro texto que deve ser digitado literalmente pelo usuário. Largura Constante com Itálico Mostra texto que deve ser substituído com valores fornecidos pelo usuário. Esse ícone significa uma dica, sugestão ou nota geral. Esse ícone indica um aviso ou advertência. x Visualizando Dados Usando exemplos de código Esse livro está aqui para ajudar a concluir o seu trabalho. Em geral, você pode usar o código nesse livro em seus programas e documentação. Você não precisa nos contatar para permissão, a menos que esteja reproduzindo uma porção significativa do código. Por exemplo, criar um programa que usa vários pedaços do código desse livro não requer permissão. Vender ou distribuir um CD-ROM com exemplos de livros O’Reilly requer permissão. Responder uma pergunta mencionando esse livro e citando códigos de exemplo não requer permissão. Incorporar uma quantidade significativa de código de exemplo desse livro à documentação do seu produto requer permissão. Nós apreciamos, mas não exigimos citação. Uma citação normalmente inclui o título, autor, editora e ISBN. Por exemplo: “Visualizando dados” por Ben Fry. Copyright © 2008 Alta Books, 978-85-7608-224-8. Se você acredita que seu uso dos exemplos de códigos não se encaixa na utilização regular ou na permissão dada aqui, sinta-se à vontade para entrar em contato conosco no endereço [email protected] Prefácio xi