Visualizando Dados

Propaganda
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
Download