Veri depolamak için basit, güvenilir, açık ve birlikte çalışabilir düz metin biçimi


17

Önceki bir soruda, CSV dosyalarını düzenleme araçlarını sordum .

Gavin , Duncan Murdoch'un R Help ile ilgili bir yorumuyla bağlantı kurdu .

Bazı uygulamalar için özel bir veritabanı yönetim sistemi gereklidir. Bununla birlikte, küçük ölçekli veri analizi projeleri için daha hafif bir şey daha uygun görünmektedir.

Bir dosya biçimini değerlendirmek için aşağıdaki ölçütleri göz önünde bulundurun:

  • güvenilir : girilen veriler girilen bilgilere sadık kalmalıdır; veriler farklı yazılımlarda sürekli olarak açılmalıdır;
  • basit : dosya biçiminin anlaşılması kolay ve basit bir metin editörü ile ideal olarak okunabilmesi güzel olurdu; formatı okumak ve yazmak için basit bir program yazmak kolay olmalıdır.
  • open : biçim açık olmalıdır
  • birlikte çalışabilir : dosya biçimi birçok sistem tarafından desteklenmelidir

Sekme ve virgülle ayrılmış değer biçimlerinin güvenilirlik ölçütünde başarısız olduğunu görüyorum. Her ne kadar dosya formatı yerine ithalat ve ihracat programları suçlayabilirim. Kendimi read.tablegarip bir karakterin veri çerçevesinin yüklenmesini kırmasını önlemek için genellikle seçenekler üzerinde küçük ayarlamalar yapmak zorunda kalıyorum .

Sorular

  • Hangi dosya formatı bu ihtiyaçları en iyi şekilde karşılıyor?
  • Veri Değişim Biçimi daha iyi bir alternatif mi? ya da kendi sorunları var mı?
  • Tercih edilebilir başka bir biçim var mı?
  • TSV ve CSV'yi haksız değerlendiriyor muyum? Dosya biçimini daha güvenilir hale getiren bu tür dosyalarla çalışmak için basit bir ipucu seti var mı?

2
Eklemeliyim, R'nin öyle olmadığı için write.DIF()korktuğum tek yönlü bir sokak.
Monica'yı eski durumuna getirin - G. Simpson

1
CSV ve güvenilirlik konusunu anlamıyorum. Yani csv yeterince katı değil mi? Katı, csv düzenlemeleri yeterince katı olursa, bu tanımları takip eden her aracın fazladan parametreye ihtiyaç duymadan bir dosya yükleyebileceği anlamına gelir.
steffen

@steffen Bazı şeyleri csv dosyası yüklemek ve kaydetmek csv dosyasını değiştirir; csv dosyalarının yüklenmesi, dikkatli olmadıkça uygun olmayan dönüşümle sonuçlanabilir; csv dosyaları bazen uygun kaçış olmadan garip karakter kombinasyonları eklendiğinde bozulur. İnsanların resmi bir standardın eksikliği hakkında yorum yaptıklarını duysam da, belki de csv kullanımını formatın kendisiyle karıştırıyorum. Tabii ki, birçok durumda bunun iyi çalıştığını anlıyorum.
Jeromy Anglim

5
@steffen: CSV, dosyada depolanan verilerin biçimi veya veri türleri hakkında hiçbir bilgi depolamaz. Bir CSV dosyasını iki farklı uygulamada iyi açabilir ve dosyadaki verileri iki farklı şekilde yorumlamasını sağlayabilirsiniz.
Monica'yı eski durumuna getirin - G. Simpson

1
@JeromyAnglim, csv dosyasının değiştirilmesinin csv biçimine değil, yazılımınıza bağlı olduğunu düşünüyorum.
Roman Luštrik

Yanıtlar:


9

Burada bir kriter çarpışması olup olmadığını merak ediyorum.

Excel, SQL, vb. hesaplamaya bağlı değildir).

Buna karşılık, verileri emmediği ya da verilerin çekilmesine izin vermediği kriterleri bir miktar hata kontrolü gerektirir. Sistemin veri türlerini (Excel'in sizi başarısız olduğu yerde) otomatik olarak sihirli bir şekilde belirlemesine izin vermedikçe, pastanızı almanın ve yemenin hiçbir yolu yoktur.

İMO, ikisinden ikinci kriter daha önemlidir. Veri bütünlüğü, bir kez ihlal edildiğinde, analizi zorlaştırır veya imkansız hale getirir. Kayıp gözlemler veya geçersiz değerler (düzgün bir şekilde kontrol edilmezse) her şeyi dağıtabilir.

DIF ile ilgili olarak, gerçek ham metin insan tarafından okunabilir değildir ve insanların veri girişi yapması zor olacaktır (IMO).

IMO, sınırlandırılmış dosyalara adil bir sarsıntı vermelisiniz. Yukarıda yorumlarda belirtildiği gibi, 'veri yönetimi' çoğunlukla kullandığınız araçların bir alt kümesinin hatasıdır. İyi davranılmış programlar sınırlandırılmış dosyaları değiştirmemelidir. Mangling'in en büyük kaynağı, kötü tanımlanmış bir sınırlayıcıdır. Örneğin, verilerinizde virgül olabilirse, CSV uygun değildir. Sekmeler olabilirse TSV uygun değildir. Pek çok (ancak hepsi değil) program için alternatif bir sınırlayıcı belirleyebilirsiniz. Örneğin, tilde (~) birkaç zor durumda kullandım.


Teşekkürler. Sınırlı bir dosya formatını uygun bir özenle kullanmak en iyi seçenek olabilir gibi görünüyor.
Jeromy Anglim

6

Tüm ciddiyetle, R kendisi tarafından oluşturulan RData dosyalarını uygun olarak düşünürdüm

  • güvenilir
  • basit (beraberlik olarak adlandırın - biçim ikili)
  • open (kontrol: R kaynak kodundan daha açık olamaz)
  • birlikte çalışabilir (kontrol: R'nin çalıştığı her yerde çalışır)

Benim için yeterince yakın. Sistemler tarafından işletim sistemi yerine uygulamalardan bahsediyorsanız, son nokta başarısız olur.

Oh, ve RData artık dosyalar varsayılan olarak sıkıştırılmış olduğu için etkilidir (varsayılan olarak kapalı olan bir seçenektir).


2
RData kesinlikle R ile iyi çalışır. Sürüm kontrolü açısından sorunlu olabilir. Ben R fonksiyonu dput()sürüm kontrolü ile çalışacak düz metin alternatifi sağlar varsayalım . Bununla birlikte, csv / tsv'nin cazibelerinden biri, veri havuzunu veriyle paylaştığımda (dergi makalesi için), insanların verileri alabilir ve istedikleri herhangi bir yazılımı kullanarak kolayca yeniden analiz edebilmesidir.
Jeromy Anglim

1
Evet, bu çok karmaşık bir konudur. Bence insanlar bunu bilişimin başlangıcından beri tartıştılar. İki düşüncem daha vardı (ve cevabımı genişletebilirim): ProtocolBuffers, Python, Java, C ++, ... ve diğer birçok dille verimli bir şekilde paylaşmak için iyidir ; Romain ve ben R'yi ele alıyoruz . Yeni- ml sitesi mldata.org , Machine Learning'deki araştırmalar için bunu kapsıyor; hatta dönüştürmek için hazırladıkları araçlar da var. Bu bir göz atmaya değer olabilir.
Dirk Eddelbuettel

1
Aslında, SVN pdf dosyaları gibi ikili blobları sorunsuz alır. Git'in de olduğundan şüphelenirim.
Dirk Eddelbuettel

İkili lekeler hakkında bilmek güzel. Metin dosyalarında diff çalıştırmak ve değişiklikler hakkında anlamlı bilgi almak yine de güzel olurdu. Mldata.org adresine bağlantı için de teşekkürler. İlginç görünüyor.
Jeromy Anglim

Zevk. Kardeş sitesi mloss.org sadece harika, umarım mldata.org için çekiş alırlarsa. Bunun için doğru zaman.
Dirk Eddelbuettel

4

Dirk Eddelbuettel'in cevabına yanıt olarak, HDF5 dosya biçimini kullanmanızı öneririm . RData formatından daha az basittir veya 'daha zengin' diyebilirsiniz, ancak kesinlikle daha birlikte çalışabilir (C, Java, Matlab, vb. Büyük HDF5 dosyaları içeren G / Ç'nin çok hızlı olduğunu gördüm.


(+1) NetCDF'ye kıyasla performansı hakkında düşünceleriniz var mı?
chl

Ayrıca, mldata.org'da seçilen dahili biçim olan IIRC - dönüştüren bir araç takımı ile. Dönüştürücüler bir göz atmaya değer olabilir. Her zaman HDF5 için R desteğinin daha az mükemmel olduğunu hissettim.
Dirk Eddelbuettel

@chl NetCDF'nin HDF5'i dahili olarak kullandığını belirsiz bir şekilde düşünmüştüm, ancak bu oldukça doğru görünmüyor.
shabbychef

2

Uygun meta verilerle sabit metin biçiminin neden ölçütlerinizi karşılamadığından emin değilim. Sınırlayıcı olarak okumak o kadar kolay değildir, ancak yine de bilgileri kullanmak için meta verilere ihtiyacınız vardır. Programı okumak için sözdizimi yazma görevi, veri kümesinin yapısının ne kadar büyük ve karmaşık olduğuna bağlıdır. SPSS ve Excel'in bu görevlere yardımcı olacak bir GUI'si vardır.

Karşılaştığım CSV dosyalarıyla ilgili yalnızca iki hata var:

  1. Sınırlayıcı olmayan eksik alanlar (bu kayıttaki diğer tüm alanlar yanlış yerleştirilmiş, XML'de eksik etiketlerle de bu sorunu yaşadım)
  2. Metin dizesindeki virgül

(başka sorunlarla karşılaşırsanız örnek vermekten çekinmeyin)

İki, drnexus'un önerdiği gibi daha düzensiz bir sınırlayıcı ile çözülür (bir boru (|), daha önce karşılaştığım bir borudır, ancak bir tilde (~), dize alanlarına dahil edilmemesinin mümkün olmadığı kadar iyi çalışır.) sorun, hangi yazılımı kullanırsanız kullanın kolayca çözülemez ve her ikisi de, insanların dosyaları okumak için kullandıkları yazılımı değil, başlangıçta dosyaları yazma biçimiyle ilgili sorunlardır.

Ayrıca, hem bu iş parçacığında hem de bu dosyaları düzenlemekle ilgili diğer son iş parçacığındaki yanıtında drnexus ile hemfikir olduğumu söylemek isterim . Kullandığınız yazılımdan (özellikle Excel'den) şikayet ediyor ve verileri kötü niyetli yazılımınıza uygun bir formatta saklamak istiyor gibisiniz. Belki de soru, Excel'in düz metin dosyalarını otomatik olarak biçimlendirmeyi durdurmasını nasıl sağlayacağınız olmalıdır. Bana göründüğü gibi güvenilir kriterleriniz, düz metin dosyalarını okumakla ilgili bir yazılım sorunudur. Veri yönetimi için R kullanmıyorum, ancak SPSS'de sınırlandırılmış dosyaları okumakta zorlandığınız gibi bir zaman geçirdim.

If the original files are not written properly what makes you expect any software to reliably read the file? And a specific file format will certainly not prevent you from incorrectly writing the data to whatever file type you choose to begin with.


(1) I would like to be able to open and close the data file as easily as I can open an Rdata, Excel, or SPSS data file. Spending time walking through a wizard works, but it's not quite the simple and reliable workflow that I'd ideally like. (2) Yep, I agree about using an irregular delimiter. In general Tab is sufficient for me most of the time; (3) I don't have huge problems with CSV/TSV. I have occasional problems that are easily resolved. However, I'd like not to have to think about the issues of delimiters and format conversion.
Jeromy Anglim

@Jeromy Anglim, nokta # 1 için, normalde bunu sadece bir kez yapmanız gerektiğini tahmin ediyorum (diğer dosyaları okuyamayan veya çıktılayamayan sık sık iki farklı ortam arasında geçiş yapmadıkça). 3. nokta için, sabit metin dosyaları bu sorunu giderir. SPSS'nin farklı bir dosya türünü yanlış biçimlendirdiği bir durumla hiç karşılaşmadım. Dosyaları dağıtmanız gerekmiyorsa, bu sorunun tamamı sessizdir, eğer çalışacağınız ortamda doğru şekilde kaydetmek için dosyayı edinebilirseniz, dönüşüm / depolamaya gerek kalmaz.
Andy W

1

The common problem with plain text format is that it cannot store metadata. How do you define missing data? How do you define 1=strongly disagree, 2=disagree, ... kinds of stuff in plain text format? With plain text format, you have to use another document to define those metadata. And it is not easy to do in XML.

Sometimes this issue can be very disturbing.

My solution is to use SPSS data format, which is self-contained and easy to edit in SPSS. I know this is not a right answer to your question, but I have been struggled on the same problem for a very long time and this is my current solution.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.