"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 SchmidtDatatable é 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:
 
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 .
 
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)        
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 dadosAs 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 colchetesEm 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_amntVeja como selecionar as primeiras 5 linhas e 3 colunas:
 datatable_df[:5,:3] 
Seleção das 5 primeiras linhas e 3 colunasClassificando 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?

