Formato de texto simples, confiável, aberto e interoperável para armazenar dados

17

Em uma pergunta anterior, perguntei sobre ferramentas para editar arquivos CSV .

Gavin vinculou a um comentário no R Help de Duncan Murdoch, sugerindo que o Data Interchange Format é uma maneira mais confiável de armazenar dados que o CSV.

Para algumas aplicações, é necessário um sistema de gerenciamento de banco de dados dedicado. No entanto, para projetos de análise de dados em pequena escala, algo mais leve parece mais adequado.

Considere os seguintes critérios para avaliar um formato de arquivo:

  • confiável : os dados inseridos devem permanecer fiéis ao que foi digitado; os dados devem abrir consistentemente em diferentes softwares;
  • simples : seria bom se o formato do arquivo fosse fácil de entender e idealmente legível com um editor de texto simples; deve ser fácil escrever um programa simples para ler e escrever o formato.
  • aberto : o formato deve estar aberto
  • interoperável : o formato do arquivo deve ser suportado por muitos sistemas

Acho que os formatos de valores separados por tabulação e vírgula falham no critério de confiabilidade. Embora eu suponha que possa culpar os programas de importação e exportação em vez do formato de arquivo. Costumo me fazer pequenos ajustes nas opções read.tablepara impedir que algum caractere estranho interrompa o carregamento do quadro de dados.

Questões

  • Qual formato de arquivo melhor atende a essas necessidades?
  • O Data Interchange Format é uma alternativa melhor? ou tem seus próprios problemas?
  • Existe algum outro formato preferível?
  • Estou avaliando injustamente TSV e CSV? Existe um conjunto simples de dicas para trabalhar com esses arquivos que tornam o formato do arquivo mais confiável?
Jeromy Anglim
fonte
2
Devo acrescentar que R não tem uma, write.DIF()por isso é um pouco de rua de mão única, eu tenho medo.
Reinstate Monica - G. Simpson
1
Eu não entendo a questão do CSV e confiabilidade. Você quer dizer que csv não é estrito o suficiente? Estrito significa que, se os regulamentos para csv fossem rigorosos o suficiente, todas as ferramentas que seguem essas definições poderiam carregar um arquivo sem a necessidade de parâmetros extras.
10238 steffen
@ steffen Quero dizer coisas como: carregar e salvar um arquivo csv em alguns programas altera o arquivo csv; carregar arquivos csv pode resultar em conversão inadequada, a menos que você seja cuidadoso; Às vezes, os arquivos csv são interrompidos quando combinações estranhas de caracteres são adicionadas sem escape apropriado. Talvez eu esteja confundindo o uso do csv com o próprio formato, embora tenha ouvido pessoas comentarem sobre a falta de um padrão oficial. Obviamente, percebo que, em muitos casos, funciona muito bem.
precisa saber é o seguinte
5
@steffen: CSV não armazena nenhuma informação sobre o formato ou os tipos de dados dos dados armazenados no arquivo. É possível abrir um arquivo CSV em dois aplicativos diferentes e interpretar os dados no arquivo de duas maneiras diferentes.
Reinstate Monica - G. Simpson
1
@ JeremyAnglim, acho que a alteração do arquivo csv depende do seu software, não do formato csv em si.
Roman Luštrik

Respostas:

9

Gostaria de saber se existe uma colisão de critérios aqui.

Uma reclamação sobre formatos de arquivo como Excel, SQL, etc. é que você precisa definir os tipos de dados com antecedência para que eles se comportem bem, o que é contrário ao critério "algo mais leve" (como eu entendo que sua restrição é mais demorada) relacionados do que computacionalmente).

Por outro lado, os critérios de que ele não estraga os dados ou permite que os dados sejam removidos exigem uma verificação de erro. A menos que você permita que o sistema decida automaticamente os tipos de dados (que é essencialmente onde o Excel está falhando com você), não há como comer e comer seu bolo.

OMI, dos dois, o segundo critério é mais importante. A integridade dos dados, uma vez violada, torna a análise difícil ou impossível. Observações perdidas ou valores inválidos (se não forem verificados corretamente) podem atrapalhar tudo.

No que diz respeito à DIF, o texto bruto real não é legível por humanos e seria difícil (IMO) para humanos inserir a entrada de dados.

Na IMO, você deve agitar os arquivos delimitados. Como mencionado acima nos comentários, a 'manipulação de dados' é principalmente a falha de um subconjunto de ferramentas que você está usando. Programas bem comportados não devem alterar arquivos delimitados. A maior fonte de distorção é um delimitador mal especificado. Por exemplo, se seus dados podem ter vírgulas, um CSV é inapropriado. Se houver guias, o TSV é inadequado. Para muitos programas (mas não todos), você pode especificar um delimitador alternativo. Por exemplo, eu usei o til (~) em alguns casos difíceis.

russellpierce
fonte
Obrigado. Parece que usar um formato de arquivo delimitado com os devidos cuidados pode ser a melhor opção.
Jeromy Anglim
6

Com toda a seriedade, eu consideraria os arquivos RData criados pelo próprio R como ele se encaixa

  • confiável (cheque)
  • simples (chame de empate - o formato é binário)
  • aberto (marque: não fica mais aberto que o código-fonte R)
  • interoperável (verifique: funciona em qualquer lugar que R funcione)

Perto o suficiente para mim. Se por sistemas você quer dizer aplicativos em vez de sistema operacional, o último ponto é uma falha.

Ah, e o RData é eficiente, pois os arquivos agora são compactados por padrão (que costumava ser uma opção desativada por padrão).

Dirk Eddelbuettel
fonte
2
RData certamente funciona bem com R. Pode ser problemático com relação ao controle de versão. Suponho que a função R dput()fornece uma alternativa em texto sem formatação que funcionaria com o controle de versão. No entanto, um dos apelos do csv / tsv é que, quando eu compartilho um repositório com dados (digamos, para um artigo de jornal), as pessoas podem pegar os dados e analisá-los facilmente usando o software que quiserem.
Jeromy Anglim
1
Sim, é uma questão extremamente complicada. Acho que as pessoas discutem isso desde o início da computação. Eu tinha mais duas idéias (e eu poderia expandir minha resposta): ProtocolBuffers são bons para compartilhar eficientemente com Python, Java, C ++, ... e várias outras linguagens; Romain e eu cobrimos R. O site novo-ish mldata.org cobre isso para pesquisa em Machine Learning - eles ainda têm ferramentas que disponibilizam para converter. Vale a pena dar uma olhada.
Dirk Eddelbuettel
1
Na verdade, o SVN usa blobs binários, como arquivos pdf, etc. sem problemas. Eu suspeito que o Git também.
Dirk Eddelbuettel
É bom saber sobre blobs binários. Ainda seria bom poder executar o diff em arquivos de texto e obter informações significativas sobre alterações. Obrigado também pelo link para mldata.org. Isso parece interessante.
perfil completo de Jeromy Anglim
Prazer. O site irmão mloss.org é simplesmente ótimo, se espero que eles atraiam o mldata.org. A hora é certa para isso.
precisa saber é o seguinte
4

Em resposta à resposta de Dirk Eddelbuettel, sugiro usar o formato de arquivo HDF5 . É menos simples que o formato RData, ou você pode dizer, 'mais rico', mas certamente mais interoperável (pode ser usado em C, Java, Matlab, etc). Eu descobri que a E / S envolvendo arquivos HDF5 grandes é muito rápida.

shabbychef
fonte
(+1) Alguma opinião sobre seu desempenho em comparação com o NetCDF ?
chl
IIRC, que também é o formato interno escolhido no mldata.org - com um conjunto de ferramentas que se convertem. Os conversores podem valer uma olhada. Eu sempre tive a sensação de que o suporte ao R para HDF5 era menos que perfeito.
Dirk Eddelbuettel
@chl Eu tinha pensado vagamente que o NetCDF usava o HDF5 internamente, mas isso parece não ser muito preciso.
precisa
2

Não sei ao certo por que o formato de texto fixo com os metadados apropriados não atende aos seus critérios. Não é tão simples de ler como um delimitador, mas você precisa de metadados para usar as informações de qualquer maneira. A tarefa de escrever a sintaxe para ler o programa depende simplesmente de quão grande e complicada é a estrutura do conjunto de dados. O SPSS e o Excel têm uma GUI para ajudar nessas tarefas.

Existem apenas dois erros nos arquivos CSV que encontrei:

  1. Campos ausentes sem delimitadores (para que todos os outros campos desse registro sejam extraviados, eu também tive esse problema com tags ausentes no XML)
  2. Uma vírgula dentro de uma sequência de texto

(se você encontrou outros problemas, sinta-se à vontade para dar exemplos)

O Two é resolvido com um delimitador mais irregular, como sugerido pelo drnexus (um pipe (|) é um que eu já encontrei antes, mas um til (~) funciona tão bem quanto nenhum dos dois provavelmente será incluído nos campos de string.) O problema não é facilmente resolvido pelo software que você está usando, e ambos são problemas com a maneira como as pessoas escreveram os arquivos, não o software usado para ler os arquivos.

Também gostaria de dizer que concordo com o drnexus neste tópico e na resposta dele em seu outro tópico recente sobre a edição desses arquivos. Você parece estar reclamando do software usado (principalmente o Excel) e pedindo para armazenar dados em um formato compatível com o seu software mal comportado. Talvez a pergunta deva ser como fazer com que o Excel pare de formatar automaticamente os arquivos de texto sem formatação. Seus critérios confiáveis, como me parece, são um problema de software na leitura de arquivos de texto sem formatação. Não uso o R para gerenciamento de dados, mas não tive tempo de ler arquivos delimitados no SPSS, como você sugere.

Se os arquivos originais não foram gravados corretamente, o que faz com que você espere que algum software leia o arquivo com confiabilidade? E um formato de arquivo específico certamente não impedirá a gravação incorreta dos dados em qualquer tipo de arquivo que você escolher.

Andy W
fonte
(1) Gostaria de poder abrir e fechar o arquivo de dados com a maior facilidade possível para abrir um arquivo de dados Rdata, Excel ou SPSS. Passar um tempo percorrendo um assistente funciona, mas não é exatamente o fluxo de trabalho simples e confiável que eu gostaria idealmente. (2) Sim, concordo em usar um delimitador irregular. Em geral, o Tab é suficiente para mim na maioria das vezes; (3) Não tenho grandes problemas com CSV / TSV. Tenho problemas ocasionais que são facilmente resolvidos. No entanto, eu gostaria de não ter que pensar nos problemas dos delimitadores e da conversão de formatos.
Jeromy Anglim
@ Jeremy Anglim, para o ponto 1, eu acho que você normalmente só precisa fazer isso uma vez (a menos que você migre entre dois ambientes diferentes com frequência que não consegue ler ou gerar os outros arquivos). Para o ponto 3, os arquivos de texto corrigidos corrigem esse problema. Nunca me deparei com uma situação em que o SPSS formatou um tipo de arquivo diferente incorretamente. Se você não precisar disseminar os arquivos, toda essa questão é muda; se você conseguir salvar o arquivo corretamente em qualquer ambiente em que estiver trabalhando, não haverá mais necessidade de conversão / armazenamento.
Andy W
1

O problema comum com o formato de texto sem formatação é que ele não pode armazenar metadados. Como você define os dados ausentes? Como você define 1 = discordo totalmente, 2 = discordo, ... tipos de coisas no formato de texto sem formatação? Com o formato de texto sem formatação, você precisa usar outro documento para definir esses metadados. E não é fácil fazer isso em XML.

Às vezes, esse problema pode ser muito perturbador.

Minha solução é usar o formato de dados SPSS, que é independente e fácil de editar no SPSS. Sei que essa não é a resposta certa para sua pergunta, mas estou com o mesmo problema há muito tempo e essa é a minha solução atual.

Jfly
fonte