Este artigo é reproduzido a partir do investimento quantitativo No. público e Machine Learning
Se você 50GB ou até 500GB de conjuntos de dados, eles são muito difíceis de abrir, e muito menos analisadas.
Ao processar conjuntos de dados, geralmente usamos três métodos.
Em uma primeira amostra de dados: desvantagem óbvia aqui é, se os dados representativos dos dados de exemplo.
A segunda utilização de computação distribuída: Embora em alguns casos este é um método eficaz, mas traz enorme gestão e manutenção do aglomerado de sobrecarga. Imaginar, um pouco além da RAM deve ser uma série de conjuntos de dados para a criação de um cluster, como na faixa de 30-50GB. É um pouco demais.
O terceiro alugado um poderoso serviços de nuvem: por exemplo, a AWS fornece um exemplo de ter memória TB. Neste caso, você ainda precisa para gerenciar dados em nuvem, é preciso esperar por dados transferir cada vez que você iniciar. Inconveniência vai lidar com todas as questões de conformidade sobre os dados na nuvem traz, bem como o processamento em uma máquina remota traz. para não mencionar o custo, embora o custo é muito baixo no início, mas com o tempo, o custo é muitas vezes maior.
Neste artigo, vamos mostrar-lhe uma nova abordagem: um mais rápido, mais seguro e geralmente método mais conveniente, os dados de praticamente qualquer tamanho pode ser usado para dados de investigação e análise, contanto que ele pode ser aplicado a computadores portáteis, área de trabalho do disco rígido ou servidor.
Vaex trama de dados é uma biblioteca de código aberto que pode ser definido na visualização da tabela de dados, exploração, análise e aprendizagem de máquina mesmo, como grandes conjuntos de dados e seu disco rígido. Pode ser calculado de uma grelha n-dimensional, em média, mais do que 1 mil milhões por segundo (10 ^ 9) do objecto, e contam, estatísticas de desvio-padrão. histograma visualização, histograma, densidade e renderização 3D visualização estereoscópica. Para este fim, Vaex usando um mapa de memória, o conceito de método de contabilidade eficiente e cálculo atraso externo para obter o melhor desempenho (não perca de memória). Todos os que são encapsulados em um API Pandas similar.
GitHub: https://github.com/vaexio/vaex
Para ilustrar o desempenho Vaex, nós damos um exemplo para todos.
Preparação de dados
Nós usamos o conjunto de dados New York City Taxi, o conjunto de dados contém informações Taxi entre 2009 e 2015 mais de 1 bilhão de vezes por viagem de táxi. Os dados podem ser baixados no seguinte site e fornece em formato CSV:
https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page
limpeza de dados
O primeiro passo converte os dados para o formato de arquivo de memória mapeada, tais como Apache Arrow, Apache Parque ou HDF5. Uma vez que os dados a ser formato de memória mapeada, abri-lo usando Vaex é instantânea (tamanho do disco de dados superior a 100 GB). Como o bloco?
0,052 segundos!
Convertendo os dados do código CSV HDF5 segue:
Por que tão rápido?
Quando você usa o arquivo de memória mapeada aberta Vaex, nenhum dado é realmente ler. Vaex só ler metadados do arquivo, tais como dados de localização no disco, a estrutura de dados (o número de linhas, colunas, nomes de colunas e tipos), descrição de arquivo como. Então, se queremos verificar dados ou interagir com ele? Abra uma coleta de dados para obter uma trama de dados padrão:
Observe novamente que o tempo executa unidade é muito curto. Isso ocorre porque o show após os primeiros 5 linhas e colunas Vaex trama de dados ou ler a partir do disco apenas 5 linhas. Isto leva a uma outra questão importante: V AEX irá percorrer todo o conjunto de dados, se necessário, e será o mínimo possível através dos dados.
Agora começar a limpar os conjuntos de dados. Um bom começo é obter uma visão geral dos dados usando o método de descrever:
descrever métodos bem ilustrados desempenho Vaex e eficiência: todas estas estatísticas estão em MacBook Pro (15 polegadas 2018, 2.6GHz Intel Core i7,32GB RAM) com menos de 3 minutos calculado. Bibliotecas ou outros métodos requerem mais de 100GB de computação distribuída ou computação em nuvem, a fim de fazer avançar o mesmo. Com Vaex, você só precisa dos dados, e apenas alguns laptop GB de memória.
Veja a descrição da saída, é fácil perceber que os dados contêm alguns valores atípicos graves. Como estamos usando esse grande conjunto de dados, o histograma é o método de visualização mais eficaz. Com Vaex criar e exibir histogramas e mapa de calor é tão rápido, e ainda de tal gráfico é interativo!
df.plot_widget(df.pickup_longitude, df.pickup_latitude, shape=512, limits='minmax', f='log1p', colormap='plasma')
Uma vez que decidir qual área você quer se concentrar em New York, podemos simplesmente criar uma trama de dados filtrada:
Vantagem é que o bloco de código acima: ele precisa insignificante memória ! Em filtragem Vaex trama de dados, não gera uma cópia dos dados. Em vez disso, criar uma referência para somente o objeto original, e aplique uma máscara binária nele. Máscara selecionar qual linha e exibido para cálculos futuros. Isso nos poupa com 100GB de RAM, se você deseja copiar os dados, você precisa fazer isso, assim como muitos de análise de dados padrão tinha feito.
Agora, vamos examinar coluna passenger_count. Grave um único táxi é de 255 pessoas, o que parece um extremo pouco. Vamos contar o número de viagens de cada passageiro. Use value_counts método é muito fácil de fazer isso:
"Value_counts" Métodos 1 bilhão linha leva apenas 20 segundos!
Podemos ver na figura acima, os passageiros viajam mais de 6 pessoas são susceptíveis de ser discrepantes raros, ou erros de entrada de dados. Há também uma abundância de aparência, Não (0) passageiros. Agora que nós não sabemos a legalidade dessas viagens, nós deixá-los filtrar fora dele.
Vamos fazer uma operação semelhante na distância de viagem. Uma vez que esta é uma variável contínua, podemos tirar a distância distribuição de viagens. Dê uma olhada nas distâncias mínima e máxima, vamos usar uma gama mais razoável para desenhar um histograma.
Podemos ver na figura acima, o número de viagens é reduzida com o aumento da distância. A uma distância de cerca de 100 milhas, a distribuição de uma grande queda. Agora, usamos isso como um ponto de corte, para eliminar valores atípicos extremos com base na distância de viagem:
existem valores atípicos extremos em um curso a distância da coluna é investigar a causa de tempo de táxi viagem e velocidade média. Estas características do conjunto de dados não está prontamente disponível, mas o cálculo é muito simples:
O bloco de memória acima das necessidades de código para zero, o tempo necessário para executar! Isso ocorre porque o código cria uma coluna virtual. Essas colunas contêm apenas uma expressão matemática é calculada apenas quando eles são necessários. Caso contrário, a falsa declaração comporta o mesmo que quaisquer outras colunas regulares. Note-se que outra GB de memória biblioteca padrão requer 10s para completar a mesma operação.
Vamos desenhar um mapa do tempo de viagem:
Podemos ver no gráfico, 95% do táxi leva menos de 30 minutos para chegar ao destino, embora alguns gastos com viagens 4-5 horas. Você pode imaginar preso em um táxi em Nova York mais de três horas de Scene It? Considere tudo um total de não mais de três horas de AVC:
Agora vamos olhar para a velocidade média de um táxi, bem como dados limitar a escolha de um intervalo razoável:
De acordo com achatamento de distribuição local, podemos inferir trama de dados de táxi após uma velocidade média razoável entre 1-60 mph, para que possamos atualizar o filtro:
Vamos foco mudou para a tarifa de táxi. Desde a saída descrever o método, podemos ver que existem alguns valores atípicos em fare_amount, TOTAL_AMOUNT e coluna tip_amount. Para começar, qualquer valor nestas colunas não deve ser negativo. Vamos olhar estes distribuição de dados dentro de uma faixa relativamente razoável:
Vemos três distribuições acima têm uma longa cauda bastante. Parte do valor da cauda pode estar correto, mas outros valores podem ser a entrada de dados incorretos. Enfim, vamos ser conservadores e consideram apenas a tarifa é fare_amount, TOTAL_AMOUNT e tip_amount menos de US $ 200 por passageiro. Pedimos também fare_amount, maior valor TOTAL_AMOUNT que 0.
Finalmente, depois de toda a limpeza de dados inicial, vamos ver quantas vezes o táxi à esquerda para a nossa análise:
Mais de 1,1 bilhões de vezes viajar!
análise específica
Suponha que nós usar este conjunto de dados para aprender como maximizar os lucros e minimizar os custos .
Vamos descobrir a partir da média, o passageiro pode trazer um bom lugar para começar a renda. Nós só precisamos desenhar um calor local pick-up mapear os pontos quentes, as tarifas médias foram codificados por cores, em seguida, ver os pontos quentes. No entanto, os taxistas também têm o seu próprio custo. Por exemplo, os custos de combustível. Então traga passageiros para lugares distantes pode levar a tarifas mais elevadas, mas também significa maior consumo de combustível e perda de tempo. Além disso, a partir de uma área remota, onde os passageiros para o centro da cidade pode não ser tão fácil, por isso, em nenhuma circunstância conduzir os passageiros traseiros podem ser caros. Um método é explicado com a quantidade de tarifa e razão entre a distância de viagem médio para representar a cor da FIG calor. Vamos considerar estes dois métodos:
motorista de táxi é um trabalho muito flexível. Além de saber para onde ir, e se eles sabem quando a dirigir o mais rentável também é útil. Para responder a esta pergunta, vamos fazer um gráfico mostrando a relação entre a tarifa média de cada dia e cada hora da viagem:
Os valores acima são razoáveis, os melhores geradores de receita durante o horário de pico, especialmente ao meio-dia , em dias de semana. Como um motorista de táxi, uma parte da nossa renda para a empresa de táxi, de modo que poderia um dia, a maioria dos clientes estão interessados em que período de tempo até a ponta. Vamos fazer um diagrama semelhante, esta mostra a relação entre a ponta média:
A conclusão acima é muito interessante. Ela nos diz que os passageiros para os motoristas de táxi ponta até entre sete horas - dez horas , se você levar um passageiro em 3:00 ou 4:00, não espere que haverá grande dica.
Mais aprofundada análise
Pequena série de cartas privadas 01 para receber o código completo do projeto 1
Na primeira parte deste artigo, nós brevemente focado na coluna trip_distance após a remoção de outliers, mantemos todos os valores viagem de menos de 100 milhas. Mas isso ainda é um valor crítico considerável, especialmente considerando a empresa Táxi Amarelo operam principalmente em Manhattan. coluna trip_distance descreve um táxi de pontos fora do ponto de embarque para o próximo. No entanto, as pessoas costumam escolher diferentes rotas, distâncias diferentes entre os dois no ponto de desembarque exata, por exemplo, para evitar engarrafamentos ou obras rodoviárias. Portanto, como uma coluna item de trip_distance correspondente, vamos calcular a menor distância possível entre a posição de pick-up, que chamamos arc_distance:
Para expressões complexas com Numpy escrito, vaex pode usar instantâneas compiladas em Numba, Pythran mesmo com a ajuda de CUDA (se você tiver palavras NVIDIA GPU) para melhorar significativamente a sua velocidade de computação.
A fórmula arc_distance é muito complexo, ele contém uma grande quantidade de conhecimentos de funções aritméticas e trigonométricas, particularmente no caso de grandes conjuntos de dados, uma grande quantidade de cálculo. Se a expressão ou função escrito usando apenas as operações e métodos do pacote Python Numpy, Vaex core computador vai usar toda a sua computação paralela. Além disso, Vaex por Numba (usando LLVM) ou Pythran (acelerada por C ++) de suporte em tempo compilador para proporcionar um melhor desempenho. Se você tiver uma placa de vídeo NVIDIA, você pode obter um desempenho mais rápido usando o método jit_cuda CUDA.
Em qualquer caso, temos que desenhar sobre a distribuição de trip_distance e arc_distance:
Curiosamente, arc_distance nunca mais do que 21 milhas, mas a distância real percorrida pelo veículo poderia ser cinco vezes. Na verdade, os milhões de táxi de vezes, o ponto a partir do ponto pick-up drop-off é de 100 metros (0,06 milhas).
O julgamento dos nossos conjunto de dados abrange sete anos. Podemos olhar para este tempo, as pessoas estão interessados em como algo está evoluindo, que poderia ser divertido. Use Vaex, podemos ser out-of-core group-by operação e agregação. Vamos olhar a mudança de sete anos em tarifas e distância de viagem:
No processador de quatro núcleos, um computador portátil, um tem mais de um bilhão de amostras Vaex trama de dados é polimerizada durante 8 agrupamento de operação em menos de dois minutos.
Nos formatos de célula acima, foi realizada a operação groupby, a polimerização é então realizada oito, dois nas colunas virtuais. Célula acima executar em nossos laptops menos de 2 minutos. Considerando os dados que usamos amostras contendo mais de 1 bilhão, que é bastante impressionante. Enfim, vamos olhar para os resultados. O seguinte é uma custos de táxi ao longo dos anos é como a evolução:
Vemos, como o tempo passa, a tarifa de táxi e ponta estão subindo. Agora vamos olhar para trip_distance táxis e ano arc_distance como uma função de:
A figura mostra, trip_distance e arc_distance ter um pequeno crescimento, o que significa que, em média, as pessoas tendem a ir mais longe um pouco a cada ano.
Vamos analisar a forma como os passageiros pagam a sua tarifa: Coluna payment_type, Vamos olhar o valor que ela contém:
A partir do conjunto de dados, podemos ver que apenas seis entrada válida:
1 = pagamento com cartão de crédito
2 = dinheiro
3 = nenhuma carga
4 = disputa
5 = Desconhecido
6 = folga
Portanto, pode-se simplesmente payment_type entradas de uma coluna é mapeado para um número inteiro:
Agora podemos ser agrupados de acordo com os dados anuais para ver como as pessoas estão acostumadas em Nova York para táxi taxas de pagamento são alteradas:
Descobrimos que, ao longo do tempo, tornou-se gradualmente de pagamento de cartão de crédito mais frequente do que dinheiro. No bloco acima de código, os dados uma vez que a polimerização, pequena trama de dados Vaex pode ser facilmente convertido para pandas trama de dados, transmite-a para Seaborn.
Finalmente, vamos ver se o método de pagamento depende da hora do dia ou dia da semana traçando a relação entre pagamentos em dinheiro e cartão de crédito. Para este fim, vamos primeiro criar um filtro, só escolher a pagar em dinheiro ou cartão de crédito. A etapa seguinte é uma operação que tem as características Vaex: com polimerização seleccionado. Outras bibliotecas requerem a agregação para cada método de pagamento, então estes métodos de pagamento mais tarde se fundiu em um método de pagamento. Por outro lado, podemos fornecer os parâmetros em função de um agregado, esta operação de uma etapa. Isto é muito conveniente, só precisa passar dados uma vez, você pode obter um melhor desempenho. Então, podemos usar a forma padrão para mapear a trama de dados de final:
Como pode ser observado a partir do diagrama acima, a ponta pode ser exibida como uma percentagem como uma função de dias da semana ou uma vez de dias. A partir destes dois números indicam que os passageiros pagam com cartão de crédito tendem a ponta mais passageiros do que pagamentos em dinheiro. Distribuição Look:
Quanto tempo os passageiros pagam uma dica?
Mas Vamos olhar o _fareamount distribuição e _totalamount, dependendo do método de pagamento é o cartão de crédito ou dinheiro.
Com Vaex, você pode navegar em apenas alguns segundos mais de um bilhão de linhas de dados, calcular várias estatísticas, informações agregadas e gerar infográficos, e tudo isso é feito em seu próprio computador portátil. E é livre e open source!