Visão geral do pacote Python datável

"Cinco exabytes de informação foram criados pela humanidade desde o momento do nascimento da civilização até 2003, mas a mesma quantidade está sendo criada a cada dois dias." Eric Schmidt


Datatable é uma biblioteca Python para executar um processamento de dados multiencadeado eficiente. Datatable suporta conjuntos de dados que não cabem na memória.

Se você escreve em R, provavelmente já está usando o pacote data.table . Data.table é uma extensão do pacote data.frame R. Além disso, aqueles que usam R para agregar rapidamente grandes conjuntos de dados não podem ficar sem esse pacote (estamos falando, em particular, de cerca de 100 GB de dados na RAM).

O pacote data.table para R é muito flexível e poderoso. Utilizá-lo é fácil e conveniente, os programas em que é usado são gravados rapidamente. Este pacote é amplamente conhecido entre os programadores-R. É baixado mais de 400 mil vezes por mês, é usado em quase 650 pacotes de CRAN e Biocondutor ( fonte ).

Qual é a utilidade da mineração de dados para Python? O fato é que existe um pacote de datatable Python que é análogo ao data.table do mundo R. O pacote de datatable claramente focado no processamento de grandes conjuntos de dados. É caracterizada pelo alto desempenho - tanto ao trabalhar com dados totalmente colocados na RAM quanto ao trabalhar com dados cujo tamanho excede a quantidade de RAM disponível. Ele suporta processamento de dados multithread. Em geral, o pacote de dados pode ser chamado de irmão mais novo de data.table .

Datatable



Os sistemas modernos de aprendizado de máquina precisam processar quantidades monstruosas de dados e gerar muitos recursos. Isso é necessário para criar modelos tão precisos quanto possível. O módulo Python da datatable foi criado para resolver esse problema. Este é um conjunto de ferramentas para executar operações com grandes volumes de dados (até 100 GB) em um único computador na velocidade mais alta possível. O patrocinador do desenvolvimento da datatable de datatable é o H2O.ai , e o primeiro usuário do pacote é o Driverless.ai .

Este kit de ferramentas é muito semelhante aos pandas , mas é mais focado em fornecer processamento de dados em alta velocidade e oferecer suporte a grandes conjuntos de dados. Os desenvolvedores do pacote de datatable também se esforçam para facilitar o trabalho dos usuários. É, em particular, uma API poderosa e mensagens de erro bem pensadas. Neste artigo, falaremos sobre como usar a datatable e como ela se compara aos pandas ao processar grandes conjuntos de dados.

Instalação


No macOS, a datatable pode ser facilmente instalada usando o pip :

 pip install datatable 

No Linux, a instalação é feita a partir de distribuições binárias:

 #  Python 3.5 pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp35-cp35m-linux_x86_64.whl #  Python 3.6 pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp36-cp36m-linux_x86_64.whl 

Atualmente, a datatable não funciona no Windows, mas o trabalho está em andamento nessa direção; portanto, o suporte ao Windows é apenas uma questão de tempo.

Detalhes sobre a instalação da datatable podem ser encontrados aqui .

O código que será usado neste artigo pode ser encontrado neste repositório do GitHub ou aqui em mybinder.org.

Lendo dados


O conjunto de dados com o qual experimentaremos aqui é extraído do Kaggle ( conjunto de dados de empréstimos para clubes de empréstimos ). Este conjunto consiste em dados completos sobre todos os empréstimos emitidos em 2007-2015, incluindo o status atual do empréstimo (Atual, Atrasado, Totalmente Pago etc.) e as informações mais recentes sobre pagamento. O arquivo consiste em 2,26 milhões de linhas e 145 colunas. O tamanho desse conjunto de dados é ideal para demonstrar os recursos da biblioteca de datatable .

 #    import numpy as np import pandas as pd import datatable as dt 

Vamos carregar os dados em um objeto Frame . A unidade básica de análise em uma datatable é Frame . É o mesmo que um DataFrame de uma tabela pandas ou SQL. Ou seja, estamos falando de dados organizados como uma matriz bidimensional na qual linhas e colunas podem ser distinguidas.

Loading Carregamento de dados usando dados


 %%time datatable_df = dt.fread("data.csv") ____________________________________________________________________ CPU times: user 30 s, sys: 3.39 s, total: 33.4 s           Wall time: 23.6 s 

A função fread() acima é um mecanismo poderoso e muito rápido. Ele pode detectar e processar automaticamente parâmetros para a grande maioria dos arquivos de texto, baixar dados de arquivos .ZIP e arquivos do Excel, recuperar dados por URL e muito mais.

Além disso, o analisador de datatable possui os seguintes recursos:

  • Ele pode detectar automaticamente delimitadores, títulos, tipos de coluna, regras de escape de caracteres e assim por diante.
  • Ele pode ler dados de várias fontes. Entre eles estão o sistema de arquivos, URL, shell de comando, texto bruto, arquivos.
  • Ele é capaz de executar leitura de dados multithread para obter o máximo desempenho.
  • Ele exibe um indicador de progresso ao ler arquivos grandes.
  • Ele pode ler arquivos compatíveis e não compatíveis com o RFC4180 .

OwnloadBaixando dados usando pandas


Agora vamos ver quanto tempo os pandas precisam ler o mesmo arquivo.

 %%time pandas_df= pd.read_csv("data.csv") ___________________________________________________________ CPU times: user 47.5 s, sys: 12.1 s, total: 59.6 s Wall time: 1min 4s 

Você pode ver que a datatable claramente mais rápida que os pandas ao ler grandes conjuntos de dados. Pandas em nosso experimento levam mais de um minuto e o tempo exigido pela datatable de datatable é medido em segundos.

Conversão de objeto de quadro


Um objeto Frame pacote de datatable existente pode ser convertido em um objeto DataFrame numpy ou pandas . É feito assim:

 numpy_df = datatable_df.to_numpy() pandas_df = datatable_df.to_pandas() 

Vamos tentar converter uma datatable de datatable Frame existente em pandas DataFrame e ver quanto tempo leva.

 %%time datatable_pandas = datatable_df.to_pandas() ___________________________________________________________________ CPU times: user 17.1 s, sys: 4 s, total: 21.1 s Wall time: 21.4 s 

Parece que ler um arquivo em uma datatable Frame e depois convertê-lo em um objeto DataFrame pandas leva menos tempo do que carregar dados em um DataFrame usando pandas . Portanto, talvez, se você planeja processar grandes quantidades de dados usando pandas , seria melhor carregá-los usando a datatable e depois convertê-los em um DataFrame .

 type(datatable_pandas) ___________________________________________________________________ pandas.core.frame.DataFrame 

Propriedades básicas do objeto Frame


Considere as propriedades básicas de um objeto Frame partir de uma datatable . Eles são muito semelhantes às propriedades semelhantes do objeto DataFrame dos pandas :

 print(datatable_df.shape)       # ( ,  ) print(datatable_df.names[:5])   #   5  print(datatable_df.stypes[:5])  #   5  ______________________________________________________________ (2260668, 145) ('id', 'member_id', 'loan_amnt', 'funded_amnt', 'funded_amnt_inv') (stype.bool8, stype.bool8, stype.int32, stype.int32, stype.float64) 

Aqui podemos usar o método head() , que exibe as n primeiras linhas:

 datatable_df.head(10) 


As primeiras 10 linhas de um objeto Frame de uma tabela de dados

As cores do cabeçalho indicam o tipo de dados. Vermelho indica linhas, verde indica números inteiros, azul indica números de ponto flutuante.

Resumo Estatísticas


O cálculo de estatísticas resumidas nos pandas é uma operação que requer muita memória para ser concluída. No caso da datatable de datatable não é assim. Aqui estão os comandos que você pode usar para calcular várias métricas em uma datatable :

 datatable_df.sum()      datatable_df.nunique() datatable_df.sd()       datatable_df.max() datatable_df.mode()     datatable_df.min() datatable_df.nmodal()   datatable_df.mean() 

Calculamos o valor médio das colunas usando datatable e pandas e analisamos o tempo necessário para concluir esta operação.

Average Encontrar média usando dados


 %%time datatable_df.mean() _______________________________________________________________ CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 s Wall time: 1.43 s 

▍ Encontrar a média usando pandas


 pandas_df.mean() __________________________________________________________________ Throws memory error. 

Como você pode ver, nos pandas não conseguimos obter o resultado - um erro relacionado à memória foi emitido.

Manipulação de dados


Frame e DataFrame são estruturas de dados que são tabelas. Na datatable , colchetes são usados ​​para manipular dados. É semelhante à maneira como eles trabalham com matrizes convencionais, mas aqui, ao usar colchetes, você pode usar recursos adicionais.


Trabalhando com dados de dados usando colchetes

Em matemática, ao trabalhar com matrizes, construções da forma DT[i, j] também DT[i, j] usadas. Estruturas semelhantes podem ser encontradas em C, C ++ e R, em pacotes de pandas e numpy , assim como em muitas outras tecnologias. Considere executar manipulações de dados comuns em uma datatable .

▍ Formação de amostras de linha ou coluna


O código a seguir seleciona todas as linhas da coluna funded_amnt :

 datatable_df[:,'funded_amnt'] 


Selecione todas as linhas da coluna funded_amnt

Veja como selecionar as primeiras 5 linhas e 3 colunas:

 datatable_df[:5,:3] 


Seleção das 5 primeiras linhas e 3 colunas

Classificando dados usando dados


Classifique o conjunto de dados pela coluna selecionada:

 %%time datatable_df.sort('funded_amnt_inv') _________________________________________________________________ CPU times: user 534 ms, sys: 67.9 ms, total: 602 ms Wall time: 179 ms 

Ort Classificando dados usando pandas


 %%time pandas_df.sort_values(by = 'funded_amnt_inv') ___________________________________________________________________ CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 s Wall time: 12.4 s 

Observe a diferença significativa no tempo necessário para classificar datatable e pandas .

ElExcluir linhas e colunas


Veja como remover uma coluna chamada member_id :

 del datatable_df[:, 'member_id'] 

Agrupamento


Datatable, como pandas , suporta recursos de agrupamento de dados. Vejamos como obter a média da coluna funded_amound , funded_amound dados são agrupados pela coluna de grade .

Agrupando dados usando tabela de dados


 %%time for i in range(100):   datatable_df[:, dt.sum(dt.f.funded_amnt), dt.by(dt.f.grade)] ____________________________________________________________________ CPU times: user 6.41 s, sys: 1.34 s, total: 7.76 s Wall time: 2.42 s 

Aqui você pode ver o uso da construção .f . Esse é o chamado proxy de quadro - um mecanismo simples que permite consultar o objeto Frame com o qual algumas ações estão sendo executadas no momento. No nosso caso, dt.f é o mesmo que datatable_df .

Agrupando dados usando pandas


 %%time for i in range(100):   pandas_df.groupby("grade")["funded_amnt"].sum() ____________________________________________________________________ CPU times: user 12.9 s, sys: 859 ms, total: 13.7 s Wall time: 13.9 s 

Filtragem de linha


A sintaxe de filtragem é semelhante à sintaxe de agrupamento. loan_amnt linhas loan_amnt para as quais o valor de loan_amnt maior que funded_amnt .

 datatable_df[dt.f.loan_amnt>dt.f.funded_amnt,"loan_amnt"] 

Salvando um objeto de quadro


O conteúdo do objeto Frame pode ser gravado em um arquivo CSV, o que permite o uso de dados no futuro. É feito assim:

 datatable_df.to_csv('output.csv') 

Você pode ler sobre outros métodos de datatable para trabalhar com dados aqui .

Sumário


O módulo Python da datatable é definitivamente mais rápido que os pandas comuns. Também é um benefício para aqueles que precisam processar conjuntos de dados muito grandes. Até agora, a única datatable menos datatable em comparação com os pandas é a quantidade de funcionalidades. No entanto, o trabalho ativo está em andamento na datatable de datatable , portanto, é bem possível que, no futuro, a datatable ultrapasse os pandas em todas as direções.

Caros leitores! Você planeja usar o pacote de datatable em seus projetos?



Source: https://habr.com/ru/post/pt455507/


All Articles