Qcon bigdata

67
Fernando Meyer @fmeyer Utilizando ferramentas open source para reorganizar seus dados em informações concretas Friday, August 30, 13

Transcript of Qcon bigdata

Page 1: Qcon bigdata

Fernando Meyer@fmeyer

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

Friday, August 30, 13

Page 2: Qcon bigdata

No  caminho  dos  dados.

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

Friday, August 30, 13

Page 3: Qcon bigdata

Aquisição

Friday, August 30, 13

Page 4: Qcon bigdata

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

Page 5: Qcon bigdata

Facebook Scribe

Aquisição

Friday, August 30, 13

Page 6: Qcon bigdata

Aquisição

Alternativas ao Scribe

‣ FluentD‣ Apache Flume + continuo‣ Apache Chukwa

Friday, August 30, 13

Page 7: Qcon bigdata

De seu usuário (client-side):

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

Aquisição

Friday, August 30, 13

Page 8: Qcon bigdata

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

Page 9: Qcon bigdata

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

Page 10: Qcon bigdata

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

Page 11: Qcon bigdata

#  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

Page 12: Qcon bigdata

Crawlers Completos

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

Aquisição

Friday, August 30, 13

Page 13: Qcon bigdata

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

Page 14: Qcon bigdata

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

Page 15: Qcon bigdata

Hardware

‣ Sensores‣ Câmeras‣ Arduinos/RaspbPy

Aquisição

Friday, August 30, 13

Page 16: Qcon bigdata

Datasets pré-existentes

‣ WineDatabase‣ Freebase‣ LinkedData‣ Google Concept DS

Aquisição

Friday, August 30, 13

Page 17: Qcon bigdata

Armazenamento

Friday, August 30, 13

Page 18: Qcon bigdata

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

Page 19: Qcon bigdata

Seu BD principal NUNCA deve ser utilizado para guardar

informações de agregadores, pixeltrackers ou crawlers.

Armazenamento

Friday, August 30, 13

Page 20: Qcon bigdata

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

Armazenamento

Friday, August 30, 13

Page 21: Qcon bigdata

Armazenamento

Disponibilidade

Consistencia Particionamento

Friday, August 30, 13

Page 22: Qcon bigdata

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

Page 23: Qcon bigdata

Cassandra, Redis e Neo4j modelam aproximadamente 90% dos

problemas

Armazenamento

Friday, August 30, 13

Page 24: Qcon bigdata

Análise

Friday, August 30, 13

Page 25: Qcon bigdata

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

palpavel.

Análise

Friday, August 30, 13

Page 26: Qcon bigdata

Análise

Aplicações

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

Friday, August 30, 13

Page 27: Qcon bigdata

Análise

Identifique seu problema

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

Friday, August 30, 13

Page 28: Qcon bigdata

Análise

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

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

Friday, August 30, 13

Page 29: Qcon bigdata

Análise

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

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

Friday, August 30, 13

Page 30: Qcon bigdata

Análise

RStudio

Friday, August 30, 13

Page 31: Qcon bigdata

Análise

Julia

Friday, August 30, 13

Page 32: Qcon bigdata

Análise

Julia Benchmarks

Friday, August 30, 13

Page 33: Qcon bigdata

Análise

Escolha o melhor método

‣ Aprend. Supervisionado‣ Aprend. Não Supervisionado

Friday, August 30, 13

Page 34: Qcon bigdata

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

Page 35: Qcon bigdata

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

Page 36: Qcon bigdata

AnáliseMachine learning - 3D plot de uma

distribuição

Friday, August 30, 13

Page 37: Qcon bigdata

Análise

Time series

Friday, August 30, 13

Page 38: Qcon bigdata

Análise

NLP

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

Friday, August 30, 13

Page 39: Qcon bigdata

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

Page 40: Qcon bigdata

Análise

NLP

‣ Apache OpenNLP‣ Stanford CoreNLP‣ Python NLTK

Friday, August 30, 13

Page 41: Qcon bigdata

Análise

NLP

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

Alternativa: Crawling

Friday, August 30, 13

Page 42: Qcon bigdata

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

Page 43: Qcon bigdata

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

Análise

Friday, August 30, 13

Page 44: Qcon bigdata

Análise

Friday, August 30, 13

Page 45: Qcon bigdata

Análise

Friday, August 30, 13

Page 46: Qcon bigdata

Análise

Friday, August 30, 13

Page 47: Qcon bigdata

Análise

Não subestime a matemática.

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

Friday, August 30, 13

Page 48: Qcon bigdata

Visualização

Friday, August 30, 13

Page 49: Qcon bigdata

O que você gostaria de mostrar?

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

Visualização

Friday, August 30, 13

Page 50: Qcon bigdata

Analise

Friday, August 30, 13

Page 51: Qcon bigdata

Analise

Friday, August 30, 13

Page 52: Qcon bigdata

Deployment

Friday, August 30, 13

Page 53: Qcon bigdata

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

de colocá-lo em produção.

Deployment

Friday, August 30, 13

Page 54: Qcon bigdata

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

Page 55: Qcon bigdata

Env

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

Deployment

Friday, August 30, 13

Page 56: Qcon bigdata

Monitore tudo

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

influencia do algoritmo‣ Cache

Deployment

Friday, August 30, 13

Page 57: Qcon bigdata

N versões de um mesmo algoritmo podem coexistir e

competir pela melhor resposta/conversão

Deployment

Friday, August 30, 13

Page 58: Qcon bigdata

Avaliação

Mean Absolute ErrorRoot Mean Squared Error (RMSE)

Deployment

Friday, August 30, 13

Page 59: Qcon bigdata

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

Page 60: Qcon bigdata

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

Deployment

Friday, August 30, 13

Page 61: Qcon bigdata

Storm - Processamento em Tempo real

‣ Spout‣ Bolt‣ Mágica

Deployment

Friday, August 30, 13

Page 62: Qcon bigdata

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

Page 63: Qcon bigdata

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

Page 64: Qcon bigdata

Topologia

Deployment

Friday, August 30, 13

Page 65: Qcon bigdata

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

Page 66: Qcon bigdata

Analise

Friday, August 30, 13

Page 67: Qcon bigdata

Fernando Meyer@fmeyer

The end!

Friday, August 30, 13