- Great Tables ist ein Paket zur Erstellung von Tabellen, das den Datenanalyse-Workflow in Python-Code hält und zugleich die ausgefeilte Ausdruckskraft von gedruckten Tabellen der Mitte des 20. Jahrhunderts wiederbeleben soll
- Tabellen sind nicht einfach nur Raster aus Zeilen und Spalten, sondern ein Format zur Informationsdarstellung, das durch Spaltenreihenfolge, Beschriftungen und Trennlinien das Auffinden und Vergleichen von Werten erleichtert
- Von alt-sumerischen Tontafeln bis zum Manual of Tabular Presentation haben sich Tabellen gemeinsam mit Informationsdichte und Form weiterentwickelt, doch frühe Spreadsheets boten im Vergleich zu ihrer Rechenbequemlichkeit nur geringe Ausdruckskraft
- Great Tables zerlegt Tabellen in 6 Bestandteile und trennt Struktur, Formatierung und Styling über APIs der Familien
tab_*,fmt_*undopt_*() - Das Paket konzentriert sich nicht auf groß angelegte interaktive Exploration, sondern auf die Verbesserung der Veröffentlichungs- und Präsentationsqualität von statischen Übersichtstabellen für Artikel, Bücher und Berichte
Das Tabellen-Dilemma, das Great Tables lösen will
- Tabellen sind wie Plots in der letzten Phase der Informationspräsentation wichtig, und wirksames Tabellendesign enthält mehr Feinheit und Nuancen, als man zunächst erwartet
- Wer heute mit Daten arbeitet, muss meist zwischen zwei Optionen Kompromisse eingehen
- Daten in ein Tool wie Excel kopieren und die Tabelle dort neu bauen
- Eine wenig ausgearbeitete Tabelle unverändert anzeigen
- Great Tables ist ein Paket, das dieses Dilemma mit einer Python-codebasierten Oberfläche lösen will
- Ziel ist es, Datenerfassung, Analyse und die Erzeugung von Übersichtstabellen in Python zu erledigen und dabei dennoch ausdrucksstarke Tabellen zu erstellen
Grunddefinition von Tabellen und Lesbarkeitsfaktoren
- Tabellen lassen sich auf zwei grundlegende Regeln reduzieren
- Daten werden in Spalten und Zeilen dargestellt
- Daten werden überwiegend als Text dargestellt
- In der Beispieltabelle stehen Personen in den Zeilen, während Eigenschaften wie Name, Adresse, Stadt, Postleitzahl, Geburtsdatum, Größe und Gewicht in Spalten angeordnet sind
- Diese Anordnung erleichtert es, einzelne Werte zu finden oder beim Vergleichen zwischen Zeilen und Spalten zu wechseln
- Horizontale Linien zwischen den Zeilen sind keine zwingende Voraussetzung, helfen aber zusätzlich dabei, einzelne Zeilen visuell zu trennen
- Auch die Reihenfolge der Spalten beeinflusst die Lesbarkeit direkt
- Wenn die Spalte
Nameganz rechts steht, ist das Subjekt jedes Datensatzes nicht sofort sichtbar, was Leser stärker verwirren kann - Spaltenbeschriftungen zeigen an, welche Daten in jeder Spalte enthalten sind, und verringern in den meisten Fällen das Rätselraten
- Wenn die Spalte
Die Geschichte antiker Tabellen
- Tabellen begannen mit dem quadratischen Raster als Container für Informationen
- An den Höhlenwänden von Lascaux und Niaux in Frankreich finden sich Rasterdarstellungen von vor etwa 25.000 Jahren
- Im 2. Jahrhundert v. Chr. stellte Hipparchus Himmels- und Erdpositionen mit Breiten- und Längengraden dar, und Ptolemaios’ Geographia um 150 n. Chr. enthielt Methoden zur Kartenerstellung mit Rastern
- Die römische Centuriation war ein Landvermessungssystem, das durch Straßen, Kanäle und Agrarland quadratische Raster bildete
- Seit sich die Landwirtschaft vor etwa 10.000 Jahren breit durchgesetzt hatte, wuchs der Bedarf, wirtschaftliche Transaktionen rund um Ackerbau, Viehhaltung und Arbeitsteilung aufzuzeichnen und zu verwalten
Tabellenstrukturen in Sumer und Mesopotamien
- Städte in Mesopotamien im 4. Jahrtausend v. Chr. handelten mit fernen Königreichen und mussten Aufzeichnungen verwahren; auf in Uruk gefundenen Tontafeln sind frühe, aber bereits ausgefeilte Tabellen erhalten
- Tontafeln aus Uruk um 3200–3000 v. Chr. verzeichnen Liefermengen von Gerste und Malz für die Bierproduktion
- Die Struktur wird von rechts nach links gelesen
- Jede Zelle enthält Piktogramme für Wörter oder Konzepte und Zahlen für Mengen
- Etwa zwei Zeilen entsprechen jeweils einer Person
- Die beiden rechten Spalten enthalten die Mengen von Malz und Gerste
- Die dritte Spalte zeigt Zwischensummen je Person, die ganz linke Spalte die Gesamtsumme
- In der untersten Zeile steht der Name des zuständigen Verwalters, der wie ein Footer funktioniert
- Eine Tontafel aus dem Enlil-Tempel in Nippur etwa tausend Jahre später enthält Einnahmequellen und monatliche Ausgaben für 50 Tempelbeschäftigte
- Ein regelmäßigeres Raster ist erkennbar
- Es gibt Spaltenüberschriften in Form von Monatsnamen und Zeilenüberschriften in Form von Personennamen und Berufen
- Enthalten sind leere Zellen ohne Informationen, Zahlenwerte, Zwischensummen in Sechsmonatsintervallen, Gesamtsummen und erläuternde Anmerkungen
- Später wechselte das Medium von Tontafeln zu Wachstafeln, Papyrus und Papier, und mit ihm veränderten sich auch Schreibtechnik und Tabellendesign
Der Höhepunkt des Tabellendesigns in der Mitte des 20. Jahrhunderts
- Die Mitte des 20. Jahrhunderts wird als eine Zeit behandelt, in der Tabellendesign besonders stark war
- Dokumententechnologien wie Offsetdruck, Schreibmaschinen und varitype waren so weit entwickelt, dass sich Tabellenelemente präzise setzen ließen
- Es gab zwar Beschränkungen beim Seitenraum, aber auch verschiedene Lösungen, um Tabellen auf eine Seite einzupassen oder über mehrere Seiten zu verteilen
- Die Verbindung aus fortgeschrittener Drucktechnik und Wissen über Tabellendesign machte schöne Tabellen möglich
- Das Manual of Tabular Presentation des US Census Bureau behandelt die ideale Gestaltung informationsdichter Tabellen im Detail
- Es benennt die verschiedenen Teile einer Tabelle und beschreibt sie streng und präzise
- Es gibt deutliche Empfehlungen dazu, was man in verschiedenen Situationen beim Erstellen von Tabellen tun und lassen sollte
- Es zeigt, dass Tabellen gut aussehen und zugleich viele Informationen enthalten können
- Great Tables übernimmt viele Prinzipien des Tabellendesigns aus diesem Dokument und geht von der Annahme aus, dass sie bis heute gültig sind
Rückschritt und Grenzen nach dem Aufkommen von Spreadsheets
- Als Computertechnik in den 1970er- und 1980er-Jahren zugänglicher wurde, konnten Menschen Tabellen in elektronischer und gedruckter Form erstellen
- Die Verbreitung berechenbarer Tabellen begann wohl 1979 mit VisiCalc
- VisiCalc konnte Werte schnell berechnen, war aber in seiner Ausdruckskraft für präsentationsfähige Tabellen begrenzt
- Rasterzellen konnten keine präsentationstauglichen Rahmenstile erhalten
- Werte ließen sich nicht formatieren
- Tabellen konnten nicht gedruckt werden
- In den folgenden 10 bis 15 Jahren wurden Spreadsheet-Tabellen ansehnlicher
- Anfang der 1990er konnte Excel Tabellenrahmen zeichnen
- Die typografische Unterstützung wurde besser
- Auch die Funktionen zur Werteformatierung wurden umfangreicher
- Trotzdem wird eingeschätzt, dass Excel-Tabellen der letzten 30 Jahre nur schwer das Niveau des Manual of Tabular Presentation erreichen konnten
- Da Datenanalyse auch außerhalb von Excel stattfand, entstanden drei ineffiziente Szenarien
- Analyse und Tabellenerstellung laufen vollständig in Python, aber die Tabellenqualität ist niedrig
- Analyse und Tabellenerstellung laufen vollständig in Excel, aber die Analyseflexibilität ist gering
- Die Analyse erfolgt in Python und die Tabelle wird in Excel gebaut, indem Daten dorthin kopiert werden, aber das ist nicht reproduzierbar
Das Tabellenmodell von Great Tables
- Great Tables ist ein Python-Paket, das die Eleganz von Tabellen aus der Mitte des 20. Jahrhunderts mit der Stärke einer Code-Oberfläche verbinden will
- Es stellt Tabellen als Kombination aus 6 unabhängigen Bestandteilen dar
- Table Header: Bereich für Titel und Untertitel, der den Inhalt der Tabelle knapp beschreibt
- Column Labels: definieren den Inhalt jeder Spalte; ein Spanner ist eine Überschrift über einer Gruppe mehrerer Spalten
- Stub Head: der Bereich oben links, in dem verschiedene Arten von Beschriftungen stehen können
- Row Stub: Bereich für Zeileninformationen und Beschriftungen von Zeilengruppen
- Table Body: der Bereich mit den Zellen, in dem sich die Daten befinden
- Table Footer: Bereich für zusätzliche Informationen zum Tabelleninhalt
- Great Tables wird so verwendet, dass zunächst der Tabellenkörper im Code erstellt und danach iterativ Styling, Formatierung und weitere Bestandteile ergänzt werden
- Der Beispielcode beginnt mit
GT(simple_table, rowname_col="Name")und ergänzt dann Titel, Stub Head, Column Spanner, Source Note, Datums- und Ganzzahlformatierung sowie Stiloptionen - In der Beispieltabelle trennt ein blauer Row Stub die Zeilenbeschriftungen vom Tabellenkörper
- Da jede Person eine eigene Beobachtung darstellt, wird das Subjekt der Zeile hervorgehoben
- Der Titel erklärt, was in der Tabelle enthalten ist
- Die Spanner
LocationundPersonal Characteristicsgruppieren Spalten sinnvoll - Die konsistente Nutzung blauer Linien und von Zellhintergründen erzeugt ein professionelles Erscheinungsbild
- Methoden zum Hinzufügen von Tabellenbestandteilen beginnen mit
tab_- Beispiel:
tab_header()erstellt einen Table Header
- Beispiel:
Formatierung und Nanoplots
- Tabellen nur zu strukturieren reicht nicht aus; je nach Fachgebiet unterscheiden sich die Anforderungen an die Darstellung von Werten
- Schon eine einzelne Zahl kann je nach Normen und Erwartungen einer Community auf verschiedene Arten dargestellt werden
- Mit Datum, Uhrzeit und Währung erweitert sich der Bereich der Formatierung noch weiter
- Der Rohwert
134,000kann je nach Anforderung unterschiedlich dargestellt werdenfmt_scientific(): wissenschaftliche Notation1.34 × 10^5fmt_number(): Zahl im deutschen Locale134.000,00fmt_integer(): kompakte Ganzzahl134K
- Wenn Werte als Bild oder Plot vermittelt werden sollen, wird die Formatierungsfrage noch größer
- Wenn etwa ein medizinischer Analyst Verbesserungs- oder Verschlechterungstrends in Untersuchungsergebnissen von Patienten vermitteln muss, kann das Lesen einer ganzen Zahlenfolge über die Zeile hinweg die Interpretation verlangsamen
fmt_nanoplot()bietet mit Nanoplots kleine Trendvisualisierungen innerhalb der Tabelle- Fährt man mit der Maus über Datenpunkte, lassen sich die Werte für jedes Datum anzeigen
- Nanoplots zielen auf ein Gleichgewicht zwischen der schnellen visuellen Interpretierbarkeit von Plots und der Kompaktheit von Tabellen
- Formatierungsmethoden in Great Tables beginnen mit
fmt_- Beispiele:
fmt_date(),fmt_integer(),fmt_nanoplot()
- Beispiele:
- Das Paket will viele Formatierungsmethoden und nützliche Optionen bereitstellen, um den Anforderungen verschiedener Nutzer gerecht zu werden
Fokus auf statische Übersichtstabellen für Veröffentlichung und Präsentation
- Great Tables fokussiert sich unter den vielen Arten der Tabelleninteraktion auf die Darstellung für Veröffentlichung und Präsentation
- In der Datenbankanalyse kann eine einfache Tabellenansicht passend sein, um Hunderte, Tausende oder mehr Datensätze zu durchsuchen und zu filtern
- Die Veröffentlichung von Ergebnissen ist eine andere Aufgabe; hier stehen Strukturierung, Formatierung und Styling im Zentrum
- Eine schöne Tabellendarstellung sollte Folgendes leisten
- Informationen leichter verdaulich machen
- dort zusätzlichen Kontext liefern, wo er nötig ist
- dem Stil eines Dokuments oder einer Organisation folgen
- Die anvisierten Anwendungsfälle entsprechen der Art der Datenpräsentation, wie man sie in Journalartikeln, Büchern und Berichten sieht
- Great Tables sieht statische Übersichtstabellen als einen Bereich, der einen eigenen Fokus verdient, und will es mit
opt_*()-Methoden einfacher machen, Lesern bessere Tabellen zu bieten - Der Maßstab für den Erfolg des Pakets ist die Qualität der Tabellen, die sich damit erzeugen lassen, und an Verbesserungen der API soll weiter gearbeitet werden
- Für Feedback aus der Community steht ein Discord Server offen
1 Kommentare
Hacker-News-Meinungen
Es wäre schön, wenn mehr Projekte auf diese Weise ihre Philosophie und Ziele erklären würden
Ich habe eine andere Tabellenbibliothek für Jupyter namens Buckaroo gebaut, der Ansatz ist aber ein anderer
Buckaroo zielt darauf ab, bei interaktiver Arbeit schnell verschiedene Formate und Nachbearbeitungsfunktionen auszuprobieren, um wichtige Erkenntnisse aus Tabellen zu gewinnen
Bei grundlegender explorativer Datenanalyse tippt man immer wieder dieselben Befehle ein; deshalb dachte ich, dass solche Befehle und Erkenntnisse in die Tabelle gehören
Great Tables wirkt eher so, als sei es dafür gemacht, Präsentationstabellen manuell zu formatieren
https://github.com/paddymul/buckaroo
https://youtu.be/GPl6_9n31NE
print()und IPythonsdisplay()haben die Einschränkung, tote statische Ausgaben zu sein, und fühlen sich an wie früheresprintf-Debugging; soweit ich weiß, wurde Buckaroo entwickelt, um das zu lösenMich würde interessieren, wie du die Tastenkürzel und Bedienweise von Visidata siehst
Ich habe Visidata früher benutzt und mich immer gefragt, warum so etwas zur Dataframe-Erkundung nicht letztlich in Jupyter landen kann
Ich stimme zu, dass Great Tables wie ein weiterer Versuch wirkt, eine Grammatik der Tabellen zu formalisieren; angesichts der Stärke tabellarischer Darstellungen und der Verbreitung des Dataframe-Konzepts über die Ökosysteme von R/pandas/Arrow/polars ist ein solcher Ansatz willkommen
Soweit ich weiß, wurde dieser Begriff allerdings ursprünglich in den 90ern in der Statistiksprache S verwendet
[1] https://towardsdatascience.com/preventing-the-death-of-the-d...
Mit etwas Abstand nach unten und fetter Schrift ließe sich eine visuelle Hierarchie ohne Rauschen erzeugen
Der Hintergrund der Zeilenbeschriftungen ist zu dunkel und wegen der Schriftstärke schwer zu lesen; ein sehr helles Blau wäre besser
Dass die Zeilengruppenbeschriftung „Name“ kursiv gesetzt ist, gefällt mir ebenfalls nicht
Die mittig schwebenden übergeordneten Spaltenbeschriftungen erschweren das Überfliegen der Tabelle; linksbündig wäre meiner Meinung nach deutlich besser
Schließlich gefällt mir auch die Schrift wirklich nicht, wobei das am Browser liegen könnte
Ich habe ein Mockup mit einigen Änderungen erstellt und halte diese Version für eine deutlich besser lesbare Tabelle
https://i.imgur.com/iMMf5vo.png
Es behandelt genau die Dinge, die du gerade angesprochen hast: Lesbarkeit und Elemente, die von der Botschaft oder dem Kern der Daten ablenken
Falls du schon einmal Sparklines gesehen hast: Tufte hat auch diesen Begriff geprägt
Jedes Mal, wenn wir ein UI-Review machen, blättere ich in diesem Buch, um zu sehen, ob wir etwas übersehen haben; es ist ein Buch, bei dem man auf jeder beliebigen Seite aufschlagen kann und etwas Interessantes findet
Außerdem enthält es eine lange Abhandlung darüber, warum PowerPoint so schlecht ist
[1] https://www.edwardtufte.com/tufte/books_be
[2] https://en.wikipedia.org/wiki/Sparkline
Wenn man ihn linksbündig über irgendeiner Spalte platziert, wirkt dieser Titel meist so, als stünde er auf der obersten Ebene der Informationshierarchie der Tabelle — was in der Regel nicht stimmt oder nicht beabsichtigt ist
Bei der modernistischen Überarbeitung oben hat es mich sofort gestört, dass der Titel „names, addresses, characteristics“ lautet, durch die Ausrichtung aber so wirkt, als würden Namen ausgeschlossen
Dagegen zentriert das Census Manual fast alle Beschriftungen innerhalb ihres jeweiligen Kastens, und wenn nicht, dann meist wegen Einrückungen
Außerdem werden Spaltenbreiten nach den Daten und nicht nach den Beschriftungen festgelegt, und es scheut sich nicht, Einrückungen und Silbentrennung entsprechend anzupassen
Das Ergebnis ist horizontal kompakt und trotzdem intuitiv verständlich
Wenn ich weiter darüber nachdenke, ist auch der Titel selbst nicht besonders gut
Titel und Beschriftungen sollten Kontext, Umfang und Zweck vermitteln; wenn sie das nicht tun, kann man sie wegen des redaktionellen Fehlers, ihre eigene Existenz nicht zu rechtfertigen, auch ganz weglassen
Der aktuelle Titel ließe sich ohne Informations- oder Allgemeinheitsverlust durch „Table 1“ ersetzen
Für einen Text, der Tabellendarstellung von Grundprinzipien aus diskutieren und neu aufbauen will, ist das etwas enttäuschend
Da Tabellentitel eine wichtige Ebene eines Informationskatalogs bilden, überrascht es nicht, dass das Census Manual dem Aufbau von Titeln ein ganzes Kapitel widmet
Es ist zwar recht domänenspezifisch und im Stil etwas altmodisch, aber sehr lesenswert
Die blaue Hervorhebung ist nun ebenfalls redundant zum Titel, also alles raus damit; auch die Trennung zwischen „personal characteristics“ und „location“ hilft der Organisation nicht sinnvoll, daher sollte man sie besser entfernen
Aus der jüngeren Geschichte gibt es die Entwicklung von CALS-Tabellen: https://en.wikipedia.org/wiki/CALS_Table_Model
Datalogics https://en.wikipedia.org/wiki/Datalogics war stark an der Konzeption von CALS-Tabellen beteiligt
Mitarbeitende von Datalogics waren im ISO-Komitee beteiligt, das SGML entwickelte, und schulten viele Leute in SGML, darunter Mitarbeitende des US-Verteidigungsministeriums und Auftragnehmer, die mit Dokumentation zu tun hatten.
Ich war in einem Team, das einen SGML-basierten Dokumenteneditor entwickelte; eine seiner Funktionen war, Elemente je nach SGML-Kontext des jeweiligen Elements zu formatieren.
Das war noch vor XSLT und seinen Verwandten.
Ehemalige Datalogics-Leute halfen Microsoft dabei, XML zu verstehen. Etwa: „Nein, Sie können die Groß- und Kleinschreibung von XML-Element-Tags nicht beliebig ändern.“
Auch TeX-Nutzer haben ziemlich ausgefeilte Vorstellungen zur Tabellenformatierung.
Als ungewöhnlichen Nebenpfad lernte ich damals, dass der vollständige Ausdruck der Dokumentation eines bestimmten Kampfjets schwerer gewesen wäre als das Flugzeug selbst und eine Reihe von Aktenschränken in der Größe eines Fußballfelds gefüllt hätte.
Und auch wenn heute viele XML nicht mögen: Aus Sicht der SGML-Welt war XML ein großer Segen.
Soweit ich mich erinnere, gab es schon in der ersten Version eine begrenzte Formatierungsunterstützung.
Laut http://www.bricklin.com/history/refcard3.htm konnte man mit dem Befehl
/Fdie Ausrichtung festlegen und Zahlenformate zum Beispiel auf Dollar und Cent setzen.Dieses Dokument bezieht sich zwar auf Version 1.35, aber ich glaube, auch die erste veröffentlichte Version unterstützte zumindest die Anzeige von Dollar und Cent.
Wenn die Kosten zum Beispiel $1500, $130, $110 und $210 betragen, wirkt der Text in den letzten drei Zeilen etwa 4/5 so groß wie der Text in der ersten Zeile.
Zusammengenommen machen die drei aber nur ein Drittel des obersten Betrags aus.
Menschen sehen visuell die Anzahl der Ziffern einer Zahl, was grob log10 entspricht.
Dieses Problem tritt so häufig auf, dass ich in Finanz-Tabellenkalkulationen irgendwann jedes Mal Balkendiagramme in Zellen eingebaut habe.
Andernfalls entgleist ein Meeting in Diskussionen über völlig nebensächliche Posten im Vergleich zu den absolut größten Kosten.
Tatsächlich habe ich einmal mehrere Meetings mit Diskussionen über 15 Dollar monatliche Kosten für das Sammeln von Cloud-Server-Logs verbracht – auf einer VM, auf der eine Datenbank-Engine lief, deren Lizenz allein $15K pro Monat kostete.
Ich betreue es zusammen mit Rich Iannone.
Rich ist der einzige Softwareentwickler, den ich kenne, der auf die Bitte, die Philosophie eines Pakets zu erklären, mit 5.000 Jahren Geschichte der Tabellendarstellung antwortet.
Es ist erstaunlich, dass wir die immer schlechter werdende Darstellung von Datentabellen so lange haben liegen lassen.
Die im Artikel genannten modernen Tabellen aus der Mitte des 20. Jahrhunderts wirken wirklich wie glänzende Beispiele.
Ich habe wieder Lust bekommen, Datenanalyse mit Python auszuprobieren, und mir sind ein paar API-Verbesserungen und Erweiterungen eingefallen, die ich gern bauen würde.
Für HTML-Tabellen ist es hervorragend, aber die PDF- und DOCX-Ausgabe ist etwas weniger ausgereift.
Ich mache mir ein wenig Sorgen, dass sich die Richtung zuletzt darauf verlagert hat, die Python-Version auf das Niveau der R-Version zu bringen, wodurch die R-Entwicklung offenbar langsamer geworden ist.
Trotzdem ist es einen Blick wert, egal welche Sprache man verwendet.
Neben SAS war unser Hauptwerkzeug eine alte Sprache namens Table Producing Language, kurz TPL.
Sie reicht bis in die 1970er zurück, aber sobald man die Syntax verstanden hatte, war TPL unglaublich flexibel, ausdrucksstark und effizient.
Die Designer von Great Tables sollten sich TPL einmal ansehen.
Es deckt alles ab, worauf Great Tables abzielt, und kann vielleicht noch ein paar Tricks mehr.
https://www.ojp.gov/pdffiles1/Digitization/68013NCJRS.pdf
Jedenfalls danke, dass ihr Great Tables gebaut habt.
Es hilft sehr dabei, die Qualität der Tabellenerzeugung in Python deutlich zu verbessern.
Leute, die bei Show HN posten, sollten sich das ansehen und davon lernen.
Ein interessanter Seitenaspekt: Ein auf Tabellenkalkulationen trainiertes KI-Modell braucht „gute Tabellen“ mit Spaltennamen, Headern usw., um den Kontext zu verstehen.
Fortap ist ein Beispiel dafür: https://arxiv.org/abs/2109.07323