O documento discute as principais etapas de um projeto de análise de dados, incluindo aquisição, armazenamento, análise, visualização e implantação de dados. Começa discutindo fontes e métodos para adquirir dados, como logs, sensores e crawlers. Em seguida, aborda opções para armazenar dados, como bancos de dados chave-valor, documentos e grafos. Por fim, discute técnicas de análise como aprendizado supervisionado e não supervisionado, processamento de linguagem natural e visualização.
4. De seus próprios servidores:
‣ Logs de Acesso
‣ Logs de Busca
‣ Vizualizações de Páginas.
‣ Histórico de Compra
‣ Favoritos
Aquisição
Friday, August 30, 13
9. Pré-existente em alguma API
‣ Facebook Likes*
‣ Tweets
‣ Foursquare
‣ Google Analytics
Aquisição
* Facebook tende a dificultar as coisas de tempos em tempos. Então temos que tomar cuidado com features cruciais
dependentes do facebook.
Friday, August 30, 13
10. Web crawling
‣ Comentários em sites/portais
‣ Blogs com conteúdo relevante
‣ Outros serviços onde pessoas
expressam opiniões mas não
existem APIs
Aquisição
Friday, August 30, 13
11. #
cat
~/dev/ds/crawler.py
def
crawler(queue):
url
=
queue.pop()
fd
=
urlib.urlopen(url)
content
=
fd.read()
links
=
parse_links(content)
for
link
in
links:
queue.put(link)
crawler(queue)
Aquisição
Um crawler minimalista
Friday, August 30, 13
13. Seja ético ao usar dados
crawleados. Muitos sites não
permitem essa prática, se fizer isso
que seja para estudar um modelo,
nunca para redistribuir os dados
de outra empresa.
Aquisição
Friday, August 30, 13
14. A próxima menina dos olhos
quando falamos em análise de
dados são dados vindos do mundo
físico. SCADA systems existem a
décadas em Usinas, Petroliferas ...
Aquisição
Friday, August 30, 13
18. Storage não é tão barato quando
falamos de BigData
‣ RAW [ d - 30 ]
‣ N dimensões [ d - 365* 1/N ]
‣ Backup
‣ Backup do Backup
Armazenamento
Friday, August 30, 13
19. Seu BD principal NUNCA deve ser
utilizado para guardar
informações de agregadores,
pixeltrackers ou crawlers.
Armazenamento
Friday, August 30, 13
20. Sua arquitetura de
armazenamento de informações
nunca deve impactar o usuário
enquanto interage com o site.
Armazenamento
Friday, August 30, 13
22. Engines
Onde cada uma se
encaixa
Examples
WideColumn sparsely distributed multi-
dimensional data
BigTable, Cassandra,
HBase, Hipertable
Document
KeyValue com dados
estruturados
MongoDB, CouchDB,
Terrastore, Lucene
Key Value/Tuple Hash Table
Memcached, Redis,Voldemort,
Couchbase, LevelDB
Graph DB Graph Node4j
Multivalue/RDF
Conceptual description or
modeling
Virtuoso
DB
Toolset
Friday, August 30, 13
23. Cassandra, Redis e Neo4j modelam
aproximadamente 90% dos
problemas
Armazenamento
Friday, August 30, 13
35. Análise
Aprendizado Não Supervisionado -
Agrupa informações ou Reduz
dimensões de uma fonte de dados.
‣ Redes Neurais
‣ Max de Expectativas (distrib)
‣ K-means (centroides)
‣ DBSCAN (densidade)
‣ Graph Based Models
Friday, August 30, 13
42. Trabalhar com processamento de
linguagem natural em português
não é tão simples quanto parece.
Portanto uma simples análise de
sentimento pode custar meses de
trabalho.
Análise
Friday, August 30, 13
43. Best Case: Matéria do Estadão
Worst Case: Twitter
Análise
Friday, August 30, 13
59. Ferramentas Onde aplicar
Hadoop
Framework para processar uma grande
quantidade de dados
Mahout Machine Learning
Twitter Storm
Processamento distribuido e tolerante a
falhas
Toolset
Deployment
Friday, August 30, 13
60. Mahout - Hadoop: funcionam
muito bem para batch data. Não
aplicáveis para processamento em
tempo real.
Deployment
Friday, August 30, 13
61. Storm - Processamento em Tempo
real
‣ Spout
‣ Bolt
‣ Mágica
Deployment
Friday, August 30, 13
62. Spout (Data Source)
public
class
DataSpout
extends
BaseRichSpout
{
public
void
open
public
void
nextTuple()
public
void
ack(Object
id)
public
void
fail(Object
id)
public
void
declareOutputFields(OutputFieldsDeclarer
d)
}
Deployment
Friday, August 30, 13
63. Bolt (Processing Unit)
public
static
class
WordCount
extends
BaseBasicBolt
{
public
void
execute(Tuple
tuple,
BasicOutputCollector
collector)
public
void
declareOutputFields(OutputFieldsDeclarer
declarer)
}
Deployment
Friday, August 30, 13
65. Dicas
e
considerações
‣ Comunicação
‣ Demonstre sua hipotese/Teoria
‣ Tente várias abordagens
‣ Converse com outras pessoas sobre
seus dados/técnicas
‣ Veja como problemas similares foram
modelados ( kaggle.com)
Friday, August 30, 13