Usando dados abertos "100GB + 's Python

 

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.

Usando dados abertos "100GB + 's Python

 

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

Usando dados abertos "100GB + 's Python

 

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

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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')

Usando dados abertos "100GB + 's Python

 

Uma vez que decidir qual área você quer se concentrar em New York, podemos simplesmente criar uma trama de dados filtrada:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

Usando dados abertos "100GB + 's Python

 

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:

Usando dados abertos "100GB + 's Python

 

Quanto tempo os passageiros pagam uma dica?

Usando dados abertos "100GB + 's Python

 

Mas Vamos olhar o _fareamount distribuição e _totalamount, dependendo do método de pagamento é o cartão de crédito ou dinheiro.

Usando dados abertos "100GB + 's Python

 

Usando dados abertos "100GB + 's Python

 

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!

Publicado 86 artigos originais · Louvor obteve 267 · Visualizações 1,77 milhão +

Acho que você gosta

Origin blog.csdn.net/javastart/article/details/104839358
Recomendado
Clasificación