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