Como transformar um csv para combinar linhas correspondentes?

0

Eu tenho um arquivo CSV com alguns dados de transação. Vamos dizer data, volume, preço e direção (vender / comprar). Além disso, há um ID para cada transação e, em cada transação de fechamento (a mais recente), há uma referência à transação correspondente. Referência de banco de dados clássico.

Agora quero fazer algumas estatísticas e desenhar alguns gráficos. Isso pode ser feito via Octave, LaTeX / TikZ, Gnuplot ou qualquer outra coisa. Para fazer isso eu preciso comprar e vender o preço em uma linha. Meu pensamento foi pré-processar o CSV para obter outro CSV contendo as informações necessárias e, em seguida, fazer as estatísticas. No final, gostaria de ter uma solução baseada em scripts e não em uma planilha eletrônica, pois os dados podem ser alterados com frequência (exportados do banco de dados on-line).

Minha solução atual (veja link ) é um script bash que analisa o CSV linha por linha e verifica se existe um transação correspondente. Se encontrado, uma nova linha é gravada no CSV de destino. Se não é impresso um aviso.

A má notícia: para cada linha no arquivo de origem, eu tenho que ler o arquivo inteiro algumas vezes. Isso causa longos tempos de execução de 10 segundos para 300 linhas. Como o número da linha pode subir em breve (> 10k linhas), isso não é perfeito. Estou ciente de que há muitos shells a serem abertos no script que podem causar problemas de desempenho.

Agora, minhas perguntas:

  • O bash / awk / sed / .... é uma boa maneira de fazer as coisas?
  • Devo importar primeiro todos os dados para um banco de dados local "real" para usar o SQL?
  • Existe uma maneira fácil de alcançar os resultados desejados?
por Christian Wolf 19.10.2013 / 12:24

1 resposta

0

Na verdade, resolvi o problema usando o PostgreSQL (já estava disponível no laptop). Eu adicionei os dados via \copy a uma tabela temporária e fiz algumas visualizações, seleções etc. No final tudo (carregando dados, criando vários arquivos de saída e tabelas dinâmicas) leva menos de meio segundo. Perfeito.

Obrigado.

    
por 02.11.2013 / 09:50

Tags