Strategie zum Bearbeiten von CSV-Dateien (Comma Separated Value)


18

Wenn ich an Datenanalyseprojekten arbeite, speichere ich Daten häufig in durch Kommas oder Tabulatoren getrennten (CSV, TSV) Datendateien. Während Daten häufig in ein dediziertes Datenbankverwaltungssystem gehören. Für viele meiner Anwendungen wäre dies eine Übertreibung.

Ich kann CSV- und TSV-Dateien in Excel (oder vermutlich einem anderen Tabellenkalkulationsprogramm) bearbeiten. Das hat Vorteile:

  • Tabellenkalkulationen erleichtern die Eingabe von Daten

Es gibt auch mehrere Probleme:

  • Das Arbeiten mit CSV- und TSV-Dateien führt zu einer Vielzahl von Warnmeldungen über den Verlust verschiedener Funktionen und darüber, wie nur das aktive Blatt gespeichert wird und so weiter. Daher ist es ärgerlich, wenn Sie nur die Datei öffnen und ein wenig ändern möchten.
  • Es werden viele "vermeintlich intelligente" Konvertierungen durchgeführt. Wenn Sie zum Beispiel 12/3 eingeben, wird davon ausgegangen, dass Sie ein Datum eingeben möchten. UPDATE: Ich hätte erwähnen sollen, dass das Datumsbeispiel nur eines von vielen Beispielen ist. Die meisten Probleme scheinen mit einer unangemessenen Konvertierung zu zusammenhängen. Insbesondere Textfelder, die wie Zahlen oder Datumsangaben aussehen, verursachen Probleme.

Alternativ könnte ich direkt mit der Textdatei in einem Standard-Texteditor arbeiten. Dies stellt sicher, dass das, was ich eingebe, das ist, was aufgezeichnet wird. Es ist jedoch sehr umständlich, Daten einzugeben (Spalten nicht aneinanderreihen; es ist schwierig, Daten einfach in mehrere Zellen einzugeben usw.).

Frage

  • Was ist eine gute Strategie für die Arbeit mit CSV- oder TSV-Datendateien? Welche Strategie erleichtert die Eingabe und Bearbeitung der Daten und stellt gleichzeitig sicher, dass die von Ihnen eingegebenen Daten korrekt interpretiert werden?

1
Welche Art von Operationen führen Sie tatsächlich an den Dateien aus? In meinen Augen wirkt sich dies dramatisch auf die Auswahl akzeptabler Optionen aus. Außerdem scheint es mir, dass Sie TSV-Daten in einem Textverarbeitungsprogramm bearbeiten und Registerkarten anordnen können, um Spalten beizubehalten - solange Ihr Textverarbeitungsprogramm so eingestellt werden kann, dass es keine "intelligenten" Konvertierungen vornimmt und als Klartext speichert, was viele können .
Wayne

@ Wayne Guter Punkt. Da ich mit Tabellenkalkulationsprogrammen aufgewachsen bin, gibt es viele mir vertraute Verknüpfungen (Funktionen, Kopieren und Einfügen, Hinzufügen einer zusätzlichen Spalte und vieles mehr). Ich spreche hier nicht von Datenanalyse, sondern nur von der Erstellung einer einfachen tabellarischen Datendatei (z. B. einige Metainformationen, die zur Verarbeitung meines R-Codes benötigt werden). Obwohl ich all diese grundlegenden Tabellenmanipulationen in R ausführen konnte, ist dies für mich nicht ganz so intuitiv. Wahrscheinlich wird es im Laufe der Zeit meine bevorzugte Option sein, eine CSV-Datei in R zu öffnen, einige kleine Änderungen vorzunehmen und sie erneut zu speichern.
Jeromy Anglim

Antworten:


14
  1. Wenn Sie mit R vertraut sind, können Sie Ihr Basisdatenframe erstellen und dann die fix () -Funktion verwenden, um Daten einzugeben. Analog zu # 5 können Sie nach dem Einrichten des data.frame eine Reihe von readLines (n = 1) (oder was auch immer) verwenden, um Ihre Daten einzulesen, zu validieren und die Möglichkeit zu bieten, die nächste hinzuzufügen Reihe. Lassen Sie dann die Fixierung zu fixieren (). Unten sehen Sie ein implementiertes Beispiel mit scan ().

  2. Eine andere Option in Excel wäre chaotisch, aber Sie könnten 12/9 eingeben und dann eine andere Spalte auswerten lassen = IFERROR (MONTH (DateEntryCell) / DAY (DataEntryCell), DataEntryCell). Aber dann müssen Sie das Excel-Blatt UND das CSV-Blatt beibehalten, und all die Beschwerden, die Sie beim Schreiben des CSV-Dokuments haben, bleiben bestehen.

  3. Solange Ihre Felder relativ kurz sind und eine konsistente Länge haben, sollte Ihnen ein regulärer Texteditor bei TSV gute Dienste leisten. Sie können es jederzeit in Excel laden, wenn Sie fertig sind, und sicherstellen, dass die Anzahl der Spalten für jede Zeile Ihren Erwartungen entspricht.
  4. Emacs ist auf einer Reihe von Plattformen verfügbar und hat wahrscheinlich genau dafür etwas, z . B. http://www.emacswiki.org/emacs/CsvMode .
  5. Wenn Sie eine herzhafte Seele sind, ist das Programmieren von etwas Schnellem in einer Programmiersprache für die Dateneingabe trivial, die Datenbearbeitung wird viel schwieriger.
  6. Eine schnelle Google-Suche zeigt Software mit genau diesem Zweck, aber keine freie Software schien etwas Gutes zu sein.
  7. Es klingt verrückt, aber jemand vom Superuser hat vorgeschlagen, Tabellen im Access zu bearbeiten und sie dann als CSV zu exportieren ... das ist einfach verrückt genug, um zu funktionieren.
  8. Es hört nicht auf, sich zu beschweren, wenn Sie als .csv speichern, aber Sie können vor Ihrem Dateneingabefeld ein einzelnes Apostroph eingeben, wodurch es in Bezug auf die automatische Formatierung in Ruhe gelassen wird. Dies belässt (zumindest in Office 2007) keine Apostrophe in der CSV-Datei.

Update: Ich habe viel über dieses Problem nachgedacht, weil es ein Problem ist, das ich auch habe. Bisher ist KillinkCSV die beste / einfachste Lösung für die Dateneingabe, die ich bisher gesehen habe . Es handelt sich nicht um "freie" Software, sondern um Shareware mit einer Testdauer von 30 Tagen und einem angemessenen Preis (~ 27 USD). Ich bin mir nicht sicher, wie sehr ich es für die Bearbeitung vorhandener CSVs vertraue - ich habe es einer wahnsinnig großen (und vermutlich gut formatierten) CSV übergeben und es konnten nicht alle Zeilen gelesen werden. Es schien jedoch gut für eine zu funktionieren, die ziemlich groß war (20 MB) und das Problem mit der größeren Datei könnte ein Benutzerfehler meinerseits sein.

R Beispiel:

#This function takes a what argument like in scan, 
#a list with the types to be used, see usage example 
#at the end of this code block
#dataEntry will keep reading in values until 
#the values it reads in matches what is in 
#"terminateon".
#limitations: Many
dataEntry <- function(what,terminateon)
{
  CONTINUE <- TRUE #Make sure we start the loop
  data <- NULL #Create empty data so that the data.frame can define itself
  ti <- NULL
  while(CONTINUE)
  {
    ti <- NULL    
    ti <- tryCatch(
      {as.data.frame(scan(what=what, nlines=1, multi.line=FALSE, comment.char="",quiet=TRUE))},
      error=function (e) {print("Error in data entry! Line not stored.")
                          return(NULL)},
      warning=function(w) {print("Error in data entry! Line not stored.")
                           return(NULL)},
      finally={ti <- NULL}
    ) #Try getting the data according to the parameters in 'what' one row at a time.
    if (!is.null(ti))
    {
      if ((ncol(ti)==length(what)) & (nrow(ti)==1)) {
        data <- rbind(data,ti) #If there wasn't an error, add ti to the previous value  
      } else {
        print("Too many or not enough values on previous entry.")
        print("Tail of current data:")
        print(tail(data))
      }
    }
    if (!is.null(ti) & all(ti == terminateon)) 
    {
      CONTINUE <- FALSE
      data <- data[-c(nrow(data)),]
    } #if we've recieved the final value we won't continue and the last row is invalid so we remove it
  }
  return(data)
}

dataEntry(list(x=integer(), y=numeric(), z=character()),terminateon=c(999,999,"Z"))

Ja, und es stellt sich heraus, dass ich csv-mode.eldank des emacs-goodies-elPakets in Debian / Ubuntu bereits installiert habe - ordentlich.
Dirk Eddelbuettel

1
+1, Für Punkt 1 bietet jede Statistiksoftware, mit der ich jemals gearbeitet habe (außer R, Stata, SPSS und SAS), diese Art von Funktionalität. Ihr Rat gilt also für jede Software, mit der jemand arbeiten möchte.
Andy W

5

Update: [Nachdem ich einen großen Rückstand an E-Mails von R-Help durchlaufen habe] Ich werde an den Thread zu " Das Verhalten vonread.csv() " erinnert. In diesem Artikel erwähnt Duncan Murdoch, dass er aus einem der Gründe, die Jeromy erwähnt , lieber DIF- Dateien (Data Interchange Format) als CSV-Dateien verwendet. Ich habe es gerade versucht und Gnumeric hat es falsch verstanden (Laden von 12/3 als Datum), aber OpenOffice.org liest dies korrekt und behält die 12/3-Informationen intakt bei. (Möchte jemand dies in MS Excel überprüfen?)

DIF-Dateien sind Klartextdateien und können von Tabellenkalkulationen gelesen werden. R (sofern Sie eine aktuelle R-Revision (SVN-Revision> = r53778) verwenden) liest die Daten im richtigen Format ein.


Original : Ich würde versuchen, die Verwendung einer Tabellenkalkulation zum Bearbeiten / Manipulieren von Daten zu vermeiden, wann immer dies möglich ist. Es ist unglaublich schwierig, wenn nicht unmöglich, Änderungen, die Sie an einem vorhandenen Datensatz vornehmen, zu dokumentieren, so dass dies aus Sicht der reproduzierbaren Forschung so gut wie ausgeschlossen ist. Ich verwende höchstens eine Tabelle, um vorhandene Daten schnell anzuzeigen.

Für die Datenverarbeitung neige ich dazu, ein R-Skript zu schreiben, das die rohe CSV-Datei verwendet und alle erforderlichen Verarbeitungsschritte anwendet. Ich kommentiere dieses Skript stark, um genau zu erklären, was ich in jeder Phase mache und warum. Mein Datenanalyseskript würde dann das Datenverarbeitungsskript aufrufen, das die Daten lädt und verarbeitet.

Ist es für die Dateneingabe umständlicher, die Daten in einem Texteditor oder in einer Kalkulationstabelle einzugeben? Ich vermute, dass die Probleme, die Sie bei letzteren ansprechen, nicht die bei der Eingabe von CSV-Daten in einen Texteditor überwiegen.

Sie könnten eine bessere Tabelle ausprobieren. OpenOffice.org lehnt es ab, 12/3 als Datum zu formatieren (oder es konvertiert es in die numerische Darstellung), selbst wenn die Spalte zuerst als "numerisch" formatiert wird. Gnumeric hingegen belässt 12/3 wie es ist, wenn Sie die Spalte zuerst als "numerisch" formatieren.

Sie können OpenOffice.org zwingen, 12/3 nicht als Datum neu zu formatieren, indem Sie 'den Einträgen ein vorangestelltes a voranstellen. Dies bedeutet , '12/3dass es im Arbeitsblatt als 12/3 angezeigt und als Text gespeichert wird. Dies ist wahrscheinlich ziemlich sicher zu bedienen.

Sie sind sich nicht sicher, warum Sie möchten, dass 12/3 numerisch als 12/3 in der Textdatei gespeichert wird - wie sollte so etwas wie R dies lesen?

Ihr Kommentar zu Warnungen über den Verlust von Funktionen oder das Speichern des aktiven Arbeitsblatts ist kein wirkliches Problem, oder? (Wenn ja, dann möchte ich deine Probleme in meinem Leben haben ;-)


Im Hinblick auf reproduzierbare Recherchen kann die CSV-Datei, wenn das Dateiformat CSV ist, leicht mit Commits unter Versionskontrolle gestellt werden, wenn Änderungen vorgenommen werden. Würde dies für eine reproduzierbare Forschung ausreichen? In Bezug auf die Dateneingabe lasse ich oft andere Rohdaten im Format mit fester Breite eingeben, um die Effizienz zu maximieren. Ich bevorzuge es jedoch, Daten in CSV oder TSV zu speichern (ich finde es transparenter). im Hinblick auf die Formatierung einer Spalte als numerisch. Diese Informationen würden vermutlich beim Speichern verloren gehen.
Jeromy Anglim

In Bezug auf 12/3 hatte ich ein Beispiel für einen Multiple-Choice-Test, bei dem die 12 durch 3 geteilt wurde. Ich verwende ihn jedoch eher als veranschaulichendes Beispiel. Wenn ich eine große CSV-Datei habe, möchte ich nicht einmal eine unangemessene Konvertierung. In Bezug auf Warnungen: Wenn ich 10 Mal am Tag CSV-Dateien öffne, werden die Warnungen langweilig. Sie machen auch weniger klar, ob ich die CSV-Datei tatsächlich gespeichert habe oder nicht. Entschuldigung für die Schimpfe.
Jeromy Anglim

@Jeromy ja, es wäre, wenn Sie streng darauf bedacht wären, eine einzelne Änderung (oder einen einzelnen Datenverarbeitungsschritt) vorzunehmen, die Sie sofort speichern und festschreiben. Ich möchte keinen Hinweis zur Ausführung der Verarbeitung in R (da es meine bevorzugte Sprache ist) mithilfe eines Skripts einfügen. So arbeite ich mit Daten, die mir Kollegen schicken. Ich könnte einen kurzen Blick in eine Tabelle werfen, dann die CSV in R einlesen und ein Skript schreiben, das alle Datenverarbeitungsschritte enthält, die ich anwenden muss. Ich kommentiere dieses Skript dann, damit ich eine Aufzeichnung darüber habe, was ich getan habe und warum ich es getan habe, und ich habe die ursprüngliche Datendatei überhaupt nicht geändert.
Setzen Sie Monica - G. Simpson

@ Jeromy: fairer Punkt zu den Warnungen. Ich habe sie längst als Lärm herausgefiltert, damit sie mich nicht stören. Ich habe gerade Gnumeric und OpenOffice.org getestet und sie konvertieren eine CSV mit 12/3 automatisch in Datumsangaben - das ist Quatsch! Also verstehe ich was du meinst. Die einzige Möglichkeit, dies zu stoppen, besteht darin, diese Daten als Text zu speichern und diesen Datentyp beim Laden / Importieren zu erzwingen.
Setzen Sie Monica - G. Simpson

@Jeromy: re: numerische Formatierung verlieren - ja, es sei denn, Sie geben den Spaltentyp beim Importieren in (OpenOffice.org) als "numerisch" (Gnumerisch) oder "Text" an. Vielleicht ist es besser, es als Text zu speichern (siehe meine bearbeitete Antwort), um die Konvertierung zu vermeiden - Sie müssen den Datentyp beim Importieren immer noch angeben ...
Reinstate Monica - G. Simpson

3

Ich schlage vor, dass Sie sich Google Refine (http://code.google.com/p/google-refine/) ansehen. Ich denke, es ist ein sehr gutes Werkzeug zum Bearbeiten von CSV-Dateien


Können Sie bitte erläutern, wie dies auf die Anfrage nach einer Strategie in der Frage reagiert ?
whuber

3

Ich würde es vermeiden, mit den CSV- und TSV-Dateien zusammenzuarbeiten. Lernen Sie stattdessen, SQL zu verwenden und arbeiten Sie nur mit einem Datamart oder einer Datenbankkopie Ihrer Daten. Sie können auch SAS oder R mit einer Durchgangsverbindung zu Ihrer Datenbank verwenden. Auf diese Weise können Sie Massenaktualisierungen an Ihren Daten vornehmen, anstatt das gefürchtete Suchen und Ersetzen in Excel (oder einem anderen von Ihnen verwendeten Tabellenkalkulationsprogramm) oder das Kopieren und Einfügen durchzuführen, was zu Fehlern führen kann. Der Vorteil der Verwendung eines DB-Systems besteht auch darin, dass Sie die Protokollierung aktivieren und Änderungen, die Sie irrtümlich vorgenommen haben, schnell rückgängig machen können und alle Änderungen überwacht werden können. Darüber hinaus können Integritätsbeschränkungen für Ihre DB-Tabellen festgelegt werden, um sicherzustellen, dass Sie Variablen / Spalten nicht versehentlich auf eine Weise aktualisieren oder ändern, die Sie für unangemessen halten (z. B. bleiben Datumsangaben erhalten, und andere Informationen werden entsprechend typisiert). Ich habe gewonnen'

Wenn Sie Tabellenkalkulationen mögen, weil sie Ihre Dateneingabe irgendwie erleichtern, können Sie diese in jeder Datenbank, die ich jemals verwendet habe, überwinden, indem Sie die Tools / IDEs der grafischen Benutzeroberfläche verwenden, die mit Datenbanken geliefert werden (z. B. Management Studio von Microsoft), oder indem Sie eine verknüpfte Version einlesen von Ihrer Datenbank in ein System, das speziell für die Eingabe Ihrer Daten und die Durchsetzung von Dateneinschränkungen (z. B. verknüpfte Tabellenformulare in Access oder eine benutzerdefinierte Webschnittstelle) entwickelt wurde. Sie können auch andere Programme verwenden, mit denen Sie das Beste aus beiden Welten herausholen und Daten in Excel aktualisieren und diese Änderungen in Ihre Datenbank übertragen können (siehe beispielsweise https://www.youtube.com/watch?v=5iyuF_mDSac ). .


2

Nachdem ich diese Frage gestellt hatte, fing ich an, mir CSVed anzuschauen .

Von der Website:

CSVed ist ein einfacher und leistungsfähiger CSV-Datei-Editor, mit dem Sie jede CSV-Datei bearbeiten können, die durch ein Trennzeichen voneinander getrennt ist.

Ich bin mir nicht sicher, ob jemand Erfahrung damit hat.


Ich habe versucht, es zu installieren. Nach einem kurzen Versuch schien es Müll für die Dateneingabe zu sein; Wenn ich es länger versuchen würde, könnte ich vielleicht herausfinden, wie ich es effektiv nutzen kann, aber ich vermute nicht.
Russellpierce

Können Sie bitte erläutern, wie dies auf die Anfrage nach einer Strategie in der Frage reagiert ?
whuber

2

Excel ist nicht sehr CSV-freundlich. Wenn Sie beispielsweise "1,300" in Excel eingeben und als durch Kommas getrennten Wert speichern, können Sie das! Dies kann ein großes Problem sein (ich stoße regelmäßig darauf, wenn ich Dateien von anderen empfange).

Ich persönlich verwende OpenOffice.org Calc. Ich verwende auch viele der oben aufgeführten Lösungen, jedoch verfügen viele davon nicht über die Funktionalität und Benutzerfreundlichkeit, die für die reguläre Bearbeitung erforderlich sind. OOO Calc ist viel intelligenter als Excel, obwohl Sie ein Tabellenkalkulationsprogramm sind, müssen Sie immer noch "= 12/3" anstelle von "12/3" eingeben, sonst geben Sie einen Wert anstelle einer Berechnung ein.

Probieren Sie es aus, Sie werden nicht enttäuscht sein.


1

Ich mag Gnumeric, weil es nicht so idiotensicher ist wie andere (es schreit nicht nach verlorener Funktionalität) und mit großen Datenmengen arbeitet ... aber ich denke, es ist nur Linux.


1
Nach dieser Frage habe ich gesucht: Es gibt eine Windows-Version projects.gnome.org/gnumeric/downloads.shtml
Jeromy Anglim

1
Es warnt jedoch davor, nur das aktuelle Blatt zu speichern (was einer von Jeromys Bären war), und es hat die ärgerliche Funktion, ordnungsgemäß gespeicherte 12/3-Zahlen in Datumsangaben umzuwandeln, es sei denn, Sie geben manuell an, dass sie beim Import numerisch sind (Daten> Abrufen) Externe Daten> Textdatei importieren ...) nicht laden.
Setzen Sie Monica - G. Simpson

Können Sie bitte erläutern, wie dies auf die Anfrage nach einer Strategie in der Frage reagiert ?
whuber

1

Benutze einfach Rons Editor . Es ist wie Excel ohne die "Hilfe".

Von der Website:

Rons Editor ist ein leistungsstarker Tabellen- oder CSV-Editor. Es kann jedes Format von getrenntem Text öffnen, einschließlich der durch Kommas und Tabulatoren getrennten Standarddateien (CSV und TSV), und ermöglicht die vollständige Kontrolle über deren Inhalt und Struktur.

Sie können nicht nur tabellarische Textdateien bearbeiten, sondern sie können auch problemlos gefiltert und in beliebig vielen zusätzlichen Ansichten zusammengefasst werden, wodurch eine leistungsstarke Analysefunktion hinzugefügt wird.

  • Lizenz: Kostenlos für den persönlichen Gebrauch
  • Läuft unter: Windows 32/64-Bit 2000 / XP / 2003 / Vista /

Können Sie bitte erläutern, wie dies auf die Anfrage nach einer Strategie in der Frage reagiert ?
whuber

1

Ich persönlich verwende gerne die Idee der "relationalen Datenbank", um CSV-Dateien zu verwalten. CSV-Dateien eignen sich für den Datenaustausch, enthalten jedoch keine Geschäftslogik. Meine Erfahrung in der Arbeit mit CSV lautet: "Es gibt viele geschäftliche Iterationen, um die Analyse zu verfeinern." Das Arbeiten nur mit Nur-Text-Dateien (CSV) ist mit vielen Herausforderungen verbunden. Zum Beispiel zeigt die CSV-Datei nicht an, "was Daten einzigartig macht", dh was der "Primärschlüssel für jede Zeile" ist. Dies wird später zu großen Problemen führen, wenn andere Datenquellen verbunden werden müssen.

SQLite ist ein gutes Werkzeug, um CSV in eine relationale Datenbank umzuwandeln. Ähnlich wie CSV ist es einfach auszutauschen und es sind keine Servereinstellungen erforderlich. Noch wichtiger ist, dass es in Rund anderer Statistiksoftware sehr gut unterstützt wird .

Meine Strategie besteht immer darin, "bereinigte Daten" in relationalen Datenbanken zu speichern. Und halten Sie es auf dem Primärschlüssel jeder Tabelle frei.

Hier ist ein Beispiel dafür, was in Wirklichkeit passieren kann (angenommen, wir verkaufen Bücher):

  • Tag 1, ich erhielt eine CSV-Datei mit allen Kundeninformationen.
  • Am zweiten Tag erhielt ich eine weitere CSV-Datei mit allen Produkt- (Buch-) Informationen. Aus irgendeinem Grund gab das Unternehmen an, dass keine ISBN verfügbar ist und die Kombination aus Buchname und Autorenname der Primärschlüssel ist.
  • Tag 3, Business Found Book Edition muss berücksichtigt werden. Sie senden eine weitere CSV, um die CSV von Tag 2 zu "überschreiben".
  • Tag 4, Business Found-Kundeninformationen können aktualisiert werden (z. B. Adressänderung). Sie senden eine aktualisierte Version der Kundeninformationen.

Jetzt können Sie den Vorteil sauberer Daten erkennen und diese in einer relationalen Datenbank aufbewahren. Mit der Kunden-ID say als Primärschlüssel und dem Namen des Buches, dem Autor und der Ausgabe als Primärschlüssel. Es ist sehr einfach, Datenaktualisierungen vorzunehmen und Änderungen nach Bedarf zu übernehmen. Der Primärschlüssel gibt auch "Einschränkungen" und "Plausibilitätsprüfung" für neue kommende Daten an.


0

Wenn Sie die Excel-Funktion "Daten importieren" verwenden, können Sie den Datentyp für jede Spalte auswählen. Sie können alle Spalten auswählen und den Datentyp "Text" verwenden.


Können Sie bitte erläutern, wie dies auf die Anfrage nach einer Strategie in der Frage reagiert ?
whuber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.