Python, BigData e Automação

29/12/2014 20:20

Inteligência de Negócios (Bussines Intelligence) e BigData estão intimamente relacionados. São os dados que possibilitam alguma avaliação dos negócios e através das análises dos dados, pode-se fazer Análise de Riscos, Predições, Segmentação de Clientes, Detecção de Fraudes em Operações de Compras Online dentre muitas outras possibilidades. Neste Blog, pretendo mostrar algumas possibilidades para se tratar os dados através da utilização de ferramentas Open Source tais como Python e suas incríveis bibliotecas.

Alguns podem dizer: “... mas Python não é lento para processamentos maciços de dados?”

Por incrível que parece, em 2014, Python é uma das linguagens mais utilizadas em Computação Científica justamente pela sua produtividade, flexibilidade, custo e performance!

Há duas empresas especializadas na utilização de Python (duas distribuições específicas) para aplicações científicas. São elas: Continuum Analytics (https://store.continuum.io/cshop/anaconda/) e Enthought (https://www.enthought.com/products/canopy/) (Acessados em Maio de 2014).

Pode não parecer mas a Análise de Dados do BIGDATA é uma tarefa extremamente científica que exige profissionais especializados. Para se ter uma ideia, algunas das tecnologias envolvidas na análise de dados são:

·        Redes Neurais Artificiais;

·        Cluster Algorithms;

·        Análise Estatística;

·        Lógica Nebulosa ou Fuzzy;

·        Máquinas de Vetor de Suporte ou Support Vector Machines;

·        Algoritmos Evolutivos;

·        Sistemas Híbridos (mistura de técnicas) dentre outras.

 

As empresas fornecedoras de banco de dados estão fornecendo algumas ferramentas embutidas para esta análise mas, só a ferramenta não ajuda em muita coisa pois há de se saber como utilizá-la e, mais importante, saber dar significado aos dados de entrada e de saída. A escolha dos dados de entrada consiste no passo mais importante do processo de análise. Já dizia um antigo professor: “Shit In – Shit Out”.

 

Para demonstrar a velocidade de um código Python, mostro abaixo um pequeno experimento. Os resultados podem variar de máquina para máquina, de distribuições do Python e dos algoritmos utilizados mas, de forma grosseira, há um ganho fantástico de velocidade com a utilização de um pacote chamado NUMBA que nada mais é que uma Máquina Virtual de Baixo Nível, ou, em Inglês, LLVM.

NUMBA TURBINA CÓDIGO PYTHON

Pode-se atingir com Python + NUMBA a velocidade de execução de códigos C/C++ e com a produtividade de se programar em Python. Achei um exemplo na internet e fiz algumas modificações. Vejamos os resultados:

Código sem NUMBA

import numpy as np

import time

def matrix_sum(arr):                                                           

    M, N = arr.shape                                                           

    result = 0.0                                                               

    for i in range(M):                                                         

        for j in range(N):                                                     

            result += arr[i,j]                                                 

    return result

D = np.random.randn(5000, 5000)

start = time.time()                                                            

matrix_sum(D)

print('time to use matrix_sum %s' % (time.time()-start))

O tempo de execução foi:

time to use matrix_sum 7.547480344772339 segundos

 

Código com NUMBA

import numpy as np
import time
from numba import autojit
@autojit
def matrix_sum(arr):                                                            
    M, N = arr.shape                                                            
    result = 0.0                                                                
    for i in range(M):                                                          
        for j in range(N):                                                      
            result += arr[i,j]                                                  
    return result
D = np.random.randn(5000, 5000)
start = time.time()                                                             
matrix_sum(D)
print('time to use matrix_sum %s' % (time.time()-start))

O tempo de execução foi:

time to use matrix_sum 0.1014864444732666 segundos.

Gostei muito do resultado apresentado

Sem NUMBA 7.547480344772339

Com NUMBA 0.1014864444732666

 

Ferramentas Open Source Disponíveis (Windows e LINUX)

 

1.       https://store.continuum.io/cshop/anaconda/ (Anaconda)

  1. https://www.enthought.com/products/canopy/ (Enthought)

3.       https://www.python.org/ (Site oficial da linguagem Python)

4.       https://www.scipy.org/ (SciPy, biblioteca científica)

5.       https://www.numpy.org/ (NumPy, biblioteca matricial)

6.       https://matplotlib.org/ (Matplotlib, biblioteca para a geração de gráficos)

7.       https://sympy.org/en/index.html (SymPy, biblioteca de Matemática Simbólica)

8.       https://pandas.pydata.org/ (Pandas, biblioteca para Análise de Dados)

9.       https://scikit-learn.org/stable/ (Scikit, biblioteca para Aprendizado de Máquina ou Machine Learning)

10.   https://pybrain.org/ (PyBrain, outra biblioteca para Machine Learning)

11.   https://statsmodels.sourceforge.net/ (Statsmodels, biblioteca para Análise Estatística)

  1. https://pymc-devs.github.io/pymc/README.html#purpose (PyMC, Bayesian e Markov Chain Monte Carlo)
  2. https://www.shogun-toolbox.org/page/home/ (Shogun, Machine Learing)

14.   https://radimrehurek.com/gensim/ (Gensim, Análise Estatística)

15.   https://orange.biolab.si/ (Orange, Data Mining e outras funcionalidades)

  1. https://www.pymvpa.org/index.html (PyMVPA, Statistical Learning)
  2. https://deeplearning.net/software/theano/ (Theano)

18.   https://caffe.berkeleyvision.org/ (Caffe, Redes Neurais)

19.   https://www.cbinsights.com/blog/python-tools-machine-learning (Artigo que cita a maioria das ferramentas apresentadas acima)

Para utilizar estas ferramentas, pode-se desenvolver no IDE Eclipse ou no IDE Visual Studio. No Eclipse, baixe o pacote Pydev e para o Visual Studio, baixe o pacote PTVS.

DATA MINING – Pequena Introdução

 

Data Mining pode significar “Descoberta do conhecimento a partir dos dados”. Há outros nomes utilizados tais como KDD (Knowledge Discovery in Databases) dentre outros mas, o que importa, é a idéia de que as empresas e as pessoas podem extrair conhecimento dos dados armazenados.

As principais etapas para o desenvolvimento de um sistema de BI são as seguintes:

·         Acumulo de Dados (BigData)

·         Extração de Dados

·         Purificação dos Dados

·         Organização dos Dados

·         Significância dos Dados

·         Seleção dos Dados

·         Data Mining

·         Avaliação dos dados de saída

·         Extração do Conhecimento

Estes passos podem variar um pouco de acordo com o autor e as aplicações / simplificações mas, para nossos fins, vamos adotar estes passos.

Principais Aplicações

·         Análise de Dados e Apoio à Decisão

·         Análise e Gestão de Mercado

·         Gestão de Relacionamento com o Cliente (CRM)

·         Segmentação de Mercado

·         Análise e Gestão de Riscos

·         Retenção de Clientes

·         Previsão de consumo de água, energia elétrica, vendas, desastres naturais, etc

·         Detecção de Fraudes

·         Análise de Textos e de páginas WEB

·         Bioinformática

·         Classificação de Padrões

·         Predição de Séries Temporais

·         Análise e Predição de Fluxo de Caixa

·         Outras áreas

OTIMIZANDO CÓDIGO PYTHON

 

Segundo Donald Knuth: “Premature optimization is the root of all evil. ” ou, entre outras palavras, começar a desenvolver um software pensando em otimização não é uma boa coisa! Portanto, a estratégia certa a ser adotada é:

1.       Escreva a aplicação;

2.       Faça a aplicação funcionar;

3.       Verifique se a aplicação faz o que tem de ser feito corretamente;

4.       Analise sua eficiência com uma ferramenta PROFILER;

5.       Reescreva a parte lenta do código.

Com esta abordagem, só se fará otimização da parte do código realmente necessária e não se perderá tempo com micro otimização.

FERRAMENTAS PROFILER

·         cProfile

·         line_profiler

·         memory_profiler

·         Kcachegrind

·         Qcachegrind (https://kcachegrind.sourceforge.net/html/Download.html)