"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?

