Qcon bigdata

Post on 26-Jun-2015

144 views 0 download

Transcript of Qcon bigdata

Fernando Meyer@fmeyer

Utilizando ferramentas open source para reorganizar seus dados em informações concretas

Friday, August 30, 13

No  caminho  dos  dados.

‣ Aquisição‣ Armazenamento‣ Vizualização ‣ Análise‣ Deployment

Friday, August 30, 13

Aquisição

Friday, August 30, 13

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

Facebook Scribe

Aquisição

Friday, August 30, 13

Aquisição

Alternativas ao Scribe

‣ FluentD‣ Apache Flume + continuo‣ Apache Chukwa

Friday, August 30, 13

De seu usuário (client-side):

‣ Browser Fingerprint‣ Referal‣ Cursor/Interação‣ Buscas/filtros/parâmetros‣ Saídas

Aquisição

Friday, August 30, 13

Pixel Server (JS)

Aquisição

<img  src="http://tr.pig.com/pixel?id=X&h={base64encoded(data)}"  width="1"  height="1"  />

user=byok9ruqi3qcy6dynew_to_site=1page_session=nhktmamsobk4ejroscroll_height=455inner_height=454interval=45idle=1timestamp=1377850220820

Friday, August 30, 13

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

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

#  cat  ~/dev/ds/crawler.pydef  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

Crawlers Completos

‣ Apache Nutch‣ Crawler4j‣ Scrapy (python)‣ Anemone (ruby)

Aquisição

Friday, August 30, 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

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

Hardware

‣ Sensores‣ Câmeras‣ Arduinos/RaspbPy

Aquisição

Friday, August 30, 13

Datasets pré-existentes

‣ WineDatabase‣ Freebase‣ LinkedData‣ Google Concept DS

Aquisição

Friday, August 30, 13

Armazenamento

Friday, August 30, 13

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

Seu BD principal NUNCA deve ser utilizado para guardar

informações de agregadores, pixeltrackers ou crawlers.

Armazenamento

Friday, August 30, 13

Sua arquitetura de armazenamento de informações nunca deve impactar o usuário enquanto interage com o site.

Armazenamento

Friday, August 30, 13

Armazenamento

Disponibilidade

Consistencia Particionamento

Friday, August 30, 13

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

Cassandra, Redis e Neo4j modelam aproximadamente 90% dos

problemas

Armazenamento

Friday, August 30, 13

Análise

Friday, August 30, 13

Agora que os dados existem, temos que transformá-los em algo

palpavel.

Análise

Friday, August 30, 13

Análise

Aplicações

‣ Segmentação‣ Análise de comportamento‣ Engine de Recomendação‣ Detecção de fraude‣ NLP

Friday, August 30, 13

Análise

Identifique seu problema

‣ Categorização‣ Classificação‣ Filtragem Colaborativa

Friday, August 30, 13

Análise

Leve uma amostra de seus dados para a prototipação

‣ RStudio‣ Matlab‣ IPython com scipy e numpy‣ Julia*

Friday, August 30, 13

Análise

Leve uma amostra de seus dados para a prototipação

awk  'NR  %  2  ==  0'  filename  |  head  -­‐n  1000

Friday, August 30, 13

Análise

RStudio

Friday, August 30, 13

Análise

Julia

Friday, August 30, 13

Análise

Julia Benchmarks

Friday, August 30, 13

Análise

Escolha o melhor método

‣ Aprend. Supervisionado‣ Aprend. Não Supervisionado

Friday, August 30, 13

Análise

Aprendizado Supervisionado - Classifica informações a partir de um modelo de treino

‣ SVM ‣ Regressão Linear‣ Kernels‣ Random Forest (decision tree)

Friday, August 30, 13

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

AnáliseMachine learning - 3D plot de uma

distribuição

Friday, August 30, 13

Análise

Time series

Friday, August 30, 13

Análise

NLP

João comprou 300 ações da OGX em Agosto de 2013

Friday, August 30, 13

Análise

NLP

<ENAMEX TYPE="PERSON">João</ENAMEX>comprou<NUMEX TYPE="QUANTITY">300</NUMEX>ações da <ENAMEX TYPE="ORGANIZATION">OGX</ENAMEX> em <TIMEX TYPE="DATE">Agosto de 2013</TIMEX>.

Friday, August 30, 13

Análise

NLP

‣ Apache OpenNLP‣ Stanford CoreNLP‣ Python NLTK

Friday, August 30, 13

Análise

NLP

Dificuldades: Corpus em PT-BR são raros e evoluem a passos lentos.

Alternativa: Crawling

Friday, August 30, 13

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

Best Case: Matéria do EstadãoWorst Case: Twitter

Análise

Friday, August 30, 13

Análise

Friday, August 30, 13

Análise

Friday, August 30, 13

Análise

Friday, August 30, 13

Análise

Não subestime a matemática.

‣ Probabilidade‣ Estatística‣ Algebra Linear‣ Matemática Discreta

Friday, August 30, 13

Visualização

Friday, August 30, 13

O que você gostaria de mostrar?

‣ Comparação‣ Distribuição‣ Composição‣ Relação

Visualização

Friday, August 30, 13

Analise

Friday, August 30, 13

Analise

Friday, August 30, 13

Deployment

Friday, August 30, 13

Quando você tiver a primeira versão do seu modelo, está na hora

de colocá-lo em produção.

Deployment

Friday, August 30, 13

Transformar o código do protótipo em codigo de produção às vezes

envolve trocar de linguagem/contexto/plataforma

Deployment

Friday, August 30, 13

Env

‣ Linux - max open files, sockets‣ Hadoop - max M/R jobs ‣ Solr - merge factor, memoria‣ Teste de carga

Deployment

Friday, August 30, 13

Monitore tudo

‣ Conversão‣ Usuários que estão sob

influencia do algoritmo‣ Cache

Deployment

Friday, August 30, 13

N versões de um mesmo algoritmo podem coexistir e

competir pela melhor resposta/conversão

Deployment

Friday, August 30, 13

Avaliação

Mean Absolute ErrorRoot Mean Squared Error (RMSE)

Deployment

Friday, August 30, 13

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

Mahout - Hadoop: funcionam muito bem para batch data. Não aplicáveis para processamento em tempo real.

Deployment

Friday, August 30, 13

Storm - Processamento em Tempo real

‣ Spout‣ Bolt‣ Mágica

Deployment

Friday, August 30, 13

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

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

Topologia

Deployment

Friday, August 30, 13

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

Analise

Friday, August 30, 13

Fernando Meyer@fmeyer

The end!

Friday, August 30, 13