Upgrade to Pro — share decks privately, control downloads, hide ads and more …

QCon Bigdata

Fernando Meyer
August 30, 2013
42

QCon Bigdata

Fernando Meyer

August 30, 2013
Tweet

Transcript

  1. Fernando Meyer @fmeyer Utilizando ferramentas open source para reorganizar seus

    dados em informações concretas Friday, August 30, 13
  2. 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
  3. Aquisição Alternativas ao Scribe ‣ FluentD ‣ Apache Flume +

    continuo ‣ Apache Chukwa Friday, August 30, 13
  4. De seu usuário (client-side): ‣ Browser Fingerprint ‣ Referal ‣

    Cursor/Interação ‣ Buscas/filtros/parâmetros ‣ Saídas Aquisição Friday, August 30, 13
  5. Pixel Server (JS) Aquisição <img  src="http://tr.pig.com/pixel? id=X&h={base64encoded(data)}"  width="1"   height="1"

     /> user=byok9ruqi3qcy6dy new_to_site=1 page_session=nhktmamsobk4ejro scroll_height=455 inner_height=454 interval=45 idle=1 timestamp=1377850220820 Friday, August 30, 13
  6. 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
  7. 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
  8. #  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
  9. Crawlers Completos ‣ Apache Nutch ‣ Crawler4j ‣ Scrapy (python)

    ‣ Anemone (ruby) Aquisição Friday, August 30, 13
  10. 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
  11. 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
  12. 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
  13. Seu BD principal NUNCA deve ser utilizado para guardar informações

    de agregadores, pixeltrackers ou crawlers. Armazenamento Friday, August 30, 13
  14. Sua arquitetura de armazenamento de informações nunca deve impactar o

    usuário enquanto interage com o site. Armazenamento Friday, August 30, 13
  15. 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
  16. Agora que os dados existem, temos que transformá-los em algo

    palpavel. Análise Friday, August 30, 13
  17. Análise Aplicações ‣ Segmentação ‣ Análise de comportamento ‣ Engine

    de Recomendação ‣ Detecção de fraude ‣ NLP Friday, August 30, 13
  18. Análise Leve uma amostra de seus dados para a prototipação

    ‣ RStudio ‣ Matlab ‣ IPython com scipy e numpy ‣ Julia* Friday, August 30, 13
  19. Análise Leve uma amostra de seus dados para a prototipação

    awk  'NR  %  2  ==  0'  filename  |  head  -­‐n  1000 Friday, August 30, 13
  20. 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
  21. 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
  22. Análise NLP Dificuldades: Corpus em PT-BR são raros e evoluem

    a passos lentos. Alternativa: Crawling Friday, August 30, 13
  23. 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
  24. Análise Não subestime a matemática. ‣ Probabilidade ‣ Estatística ‣

    Algebra Linear ‣ Matemática Discreta Friday, August 30, 13
  25. O que você gostaria de mostrar? ‣ Comparação ‣ Distribuição

    ‣ Composição ‣ Relação Visualização Friday, August 30, 13
  26. Quando você tiver a primeira versão do seu modelo, está

    na hora de colocá-lo em produção. Deployment Friday, August 30, 13
  27. 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
  28. Env ‣ Linux - max open files, sockets ‣ Hadoop

    - max M/R jobs ‣ Solr - merge factor, memoria ‣ Teste de carga Deployment Friday, August 30, 13
  29. Monitore tudo ‣ Conversão ‣ Usuários que estão sob influencia

    do algoritmo ‣ Cache Deployment Friday, August 30, 13
  30. N versões de um mesmo algoritmo podem coexistir e competir

    pela melhor resposta/ conversão Deployment Friday, August 30, 13
  31. 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
  32. Mahout - Hadoop: funcionam muito bem para batch data. Não

    aplicáveis para processamento em tempo real. Deployment Friday, August 30, 13
  33. Storm - Processamento em Tempo real ‣ Spout ‣ Bolt

    ‣ Mágica Deployment Friday, August 30, 13
  34. 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
  35. 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
  36. 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