How to: CSV im Open-Data-Kontext
Allgemeines · · patagonaWie man CSV zur Veröffentlichung, also maschinenlesbar und verständlich, formatiert und erstellt.
Da wir im Vereinsumfeld immer wieder mit offenen Daten zu tun haben, sind wir schon an diversen Stellen auf ziemlich wilde Datensätze gestoßen, im Sinne der Lesbarkeit und Verwendbarkeit. Von größtenteils nicht maschinenlesbaren Formaten (z.B. PDF) abgesehen, sind auch Daten in geeigneteren Formaten wie CSV häufig nicht ohne manuelle Analyse und Bearbeitung maschinell nutzbar.
Für zukünftige Datensätze wollen wir hier ein paar Richtlinien für CSV-Dateien festlegen und anhand von (Positiv- und Negativ-)Beispielen erklären.
Encoding
Das Encoding einer Datei definiert, wie Zeichen (besonders Sonderzeichen wie Umlaute, hochgestellte Zahlen für m², m³ usw.) abgespeichert werden. Beispiele hierfür sind “ISO-8859-1” (Standard bei Excel), “Codepage 850” (Historisch bei MS-DOS verwendet) und “UTF-8” (Aktueller Standard - Kann alle definierten Zeichen darstellen, also z.B. auch kyrillische, chinesische und japanische Schriften).
Es ist nicht notwendig, auf Sonderzeichen zu verzichten - Man muss nur das richtige Encoding wählen.
Standard ist heutzutage fast überall UTF-8, zum Beispiel CKAN und DKAN erwarten beim Import von CSV-Dateien UTF-8.
Der Export als UTF-8-CSV bei Excel ist etwas umständlich, Anleitungen sind im Internet aber leicht zu finden. (Stand Excel 2019: im “Speichern unter”-Menü als Dateityp “CSV (Trennzeichen-getrennt) (*.csv)” auswählen und dann vorm Speichern auf “Tools” -> “Weboptionen…” -> “Codierung” -> “Dokument speichern als:” -> “Unicode (UTF-8)”)
Formatierung
Zur Formatierung gelten ein paar Grundsätze:
- Die erste Zeile (Header) einer CSV-Datei sollte nur die entsprechenden Feldnamen der Tabelle enthalten.
- Einheiten sollten im Header enthalten sein, nicht in den Daten
- Nach der ersten Zeile sollten die Daten direkt anfangen
- Nach den Daten sollten keine weiteren Informationen mehr kommen - Metadaten, Erklärungen zu den Feldern usw. sollten in der Beschreibung zum Datensatz stehen.
- Nach Möglichkeit sollten alle Felder befüllt sein - wenn sich bspw. mehrere Zeilen auf ein Jahr beziehen, sollte das Jahr auch in jeder Zeile stehen.
- Jede Datei sollte nur eine Tabelle enthalten
- Die Tabelle sollte so formatiert sein, dass neue Daten üblicherweise nicht als Spalte, sondern als Zeile angefügt werden (wenn es neue Kategorien gibt, ist es natürlich trotzdem korrekt, neue Spalten hinzuzufügen)
- Es sollten möglichst nicht mehrere Daten in einer Zelle stehen (z.B. bei von-bis-Werten u.Ä.)
Beispiele
Header, Daten
Negativbeispiel - Fußnoten, Referenzen
Jahr | Anzahl |
---|---|
2019 1) | 123456 |
2020 | 123456 |
2021 | 123456 |
1) Daten unvollständig weil XY |
Die Fußnoten und die Referenz darauf brechen die Struktur, darum sollten diese eher im Beschreibungstext stehen. Bei regelmäßig auftretenden Hinweisen und Besonderheiten sollte man hier zusätzliche Spalten vorsehen.
Negativbeispiel - Header hat mehrere Zeilen
Umweltdaten XY | |
---|---|
Stadtkreis XY | Alle Werte in m³ |
Jahr | Wert |
2022 | 123456 |
Auch hier sind die zusätzlichen Informationen im Beschreibungstext (bzw. die Einheit in der Spaltenüberschrift) besser aufgehoben.
Negativbeispiel - Felder ausgelassen
Jahr | Stadtteil | Wert |
---|---|---|
2021 | Böckingen | 123456 |
Biberach | 123456 | |
Frankenbach | 123456 | |
2022 | Böckingen | 123456 |
Biberach | 123456 | |
Frankenbach | 123456 |
Für manuelle Auswertung ist vermutlich klar, was hier gemeint ist, für maschinelle Auswertung sollte jedes Feld das sinnvoll befüllt werden kann auch befüllt werden:
Positivbeispiel
Jahr | Stadtteil | Wert |
---|---|---|
2021 | Böckingen | 123456 |
2021 | Biberach | 123456 |
2021 | Frankenbach | 123456 |
2022 | Böckingen | 123456 |
2022 | Biberach | 123456 |
2022 | Frankenbach | 123456 |
Definition der Spalten/Zeilen, Hinzufügen von Spalten
Negativbeispiel
Stadtteil | 2018 | 2019 | 2020 |
---|---|---|---|
Böckingen | 123456 | 123456 | 123456 |
Biberach | 123456 | 123456 | 123456 |
Hier sollten die Stadtteile eher die Spalten und die Jahreszahlen die Zeilen sein, da sich die Spalten selten ändern sollten:
Positivbeispiel
Jahr | Böckingen | Biberach |
---|---|---|
2018 | 123456 | 123456 |
2019 | 123456 | 123456 |
2020 | 123456 | 123456 |
Positivbeispiel
Jahr | Männlich | Weiblich | Divers |
---|---|---|---|
2016 | 123456 | 123456 | |
2017 | 123456 | 123456 | |
2018 | 123456 | 123456 | 123 |
Hier eine neue Spalte hinzuzufügen ist natürlich okay - Es gibt schließlich eine neue Kategorie. Auch die Felder ohne Daten sind hier okay. Eventuell wäre im Beschreibungstext ein Hinweis auf die geänderte Datenstruktur sinnvoll/hilfreich.
Einheiten, mehrere Daten pro Zeile
Negativbeispiel
Stadtteil | Wasserhärte |
---|---|
Böckingen | 14 - 15 ° DH |
Biberach | 11 ° DH |
Besser wären die Werte hier in seperaten Spalten aufgehoben mit der Einheit in der Spaltenüberschrift:
Positivbeispiel
Stadtteil | Min. Wasserhärte in ° DH | Max. Wasserhärte in ° DH |
---|---|---|
Böckingen | 14 | 15 |
Biberach | 11 | 11 |