Skip to content
Snippets Groups Projects
Commit ab8e78de authored by Benedikt's avatar Benedikt
Browse files

mehr zur Tabellen Doku

parent 30dbe6a7
No related branches found
No related tags found
No related merge requests found
Pipeline #51100 passed
......@@ -3,7 +3,7 @@
<!-- Full and Sparse Wide Tables -->
<div style="display: flex; justify-content: center; align-items: flex-start; gap: 60px;">
<div>
<h3 style="text-align: center;">Full Wide Format</h3>
<h3 style="text-align: center;">Full Flatt Format</h3>
<table border="1" cellspacing="0" cellpadding="5" style="border-collapse: collapse; text-align: center; font-size: 36px;">
<thead>
<tr>
......@@ -61,7 +61,7 @@
</div>
<div>
<h3 style="text-align: center;">Sparse Wide Format</h3>
<h3 style="text-align: center;">Sparse Flatt Format</h3>
<table border="1" cellspacing="0" cellpadding="5" style="border-collapse: collapse; text-align: center; font-size: 36px;">
<thead>
<tr>
......
......@@ -7,45 +7,98 @@ Dieses Dokument bezieht sich auf die DCC-Schemaversion 3.3.0.
## Kurzfassung
Wir empfehlen die Umsetzung von Tabellenspalten bzw Quantities, die Listen enthalten, als Leerzeichen-separierte XML-Listen. Verschiedene Beispiele finden sich im Abschnitt [Repräsentation von Tabellenspalten als XML-Listen](#repräsentation-von-tabellenspalten-als-leerzeichen-separierte-xml-listen). Die Repräsentation als XML-Listen verringert die Dateigröße sowie die benötigten Rechnerressourcen beim maschinellen Auslesen. Ein Datenverlust sowie eine Fehlinterpretation der Daten (z.B. durch "Verrutschen" von Tabellenspalten) ist in keiner Umsetzungsvariante zu erwarten.
Bei der Repräsentation einer großen Tabelle als einzelne XML-Elemente wird der Ressourcenbedarf leicht so groß, dass die Tabelle nicht mehr effizient maschinell verarbeitet werden kann.
Wir empfehlen die Umsetzung von Tabellenspalten bzw Quantities, die Listen enthalten, als Leerzeichen-separierte XML-Listen.
Verschiedene Beispiele finden sich im Abschnitt [Repräsentation von Tabellenspalten als XML-Listen](#repräsentation-von-tabellenspalten-als-leerzeichen-separierte-xml-listen).
Die Repräsentation als XML-Listen verringert die Dateigröße sowie die benötigten Rechnerressourcen beim maschinellen Auslesen.
Ein Datenverlust sowie eine Fehlinterpretation der Daten (z.B. durch "Verrutschen" von Tabellenspalten) ist in keiner Umsetzungsvariante zu erwarten.
Bei der Repräsentation einer großen Tabelle mittels einzelner XML-Elemente für jeden Wert wird der Ressourcenbedarf leicht so groß, dass die Tabelle nicht mehr effizient maschinell verarbeitet werden kann.
## Abstraktion: Was sind Tabellen und Tabelierte Daten
Listen von Listen
Tabellen sind eine sehr effiziente Möglichkeit, zusammengehörige Daten zu speichern und mit ihnen zu arbeiten.
Abstrakt betrachtet, können Tabellen als Listen von Listen gleicher Länge[^1] beschrieben werden. Jede innere Liste repräsentiert eine Zeile der Tabelle, während die einzelnen Einträge der Listen den Zellen entsprechen. Die Zusammengehörigkeit der Zellen wird durch ihre Position innerhalb der Listen sichergestellt. Zum Beispiel gehören die fünften Einträge jeder inneren Liste zur fünften Zeile der Tabelle. Die inneren Listen müssen nicht zwingend numerische Daten enthalten die Einträge könnenten z.B. die Vornamen von Schülern sein. Oder selber wirder Listen, auf dies Art von höher Diemensionalen Tabellen wir später eingegangen.
Abstrakt betrachtet, können Tabellen als Listen von Listen gleicher Länge beschrieben werden.
Jede innere Liste repräsentiert eine Zeile der Tabelle, während die einzelnen Einträge der Listen den Zellen entsprechen.
Die Zusammengehörigkeit der Zellen wird durch ihre Position innerhalb der inneren Listen sichergestellt.
Zum Beispiel gehören die fünften Einträge jeder inneren Liste zur fünften Zeile der Tabelle.
Die inneren Listen müssen nicht zwingend numerische Daten enthalten die Einträge könnenten z.B. die Vornamen von Schülern sein.
### Indizierung
Eine typische Tabellenstruktur besitzt keine inhärente Hierarchie oder bevorzugte Spalte – alle Spalten sind gleichwertig.
Veranschaulichen lässt sich dies an der Schüler-Liste im Klassenbuch, es gibt keine "natürliche" Sortierung der Einträge und diese ist für die Tabellierung auch nicht nötig. In diesem Beispiel könnten jetzt die Einträge nach Vornamen, Nachnamen, Geburtsdatum oder anderen Eigenschaften sortiert bzw. durchsucht werden. Der zeilenweise Bezug der Daten bleibt immer bestehen.
Dies gilt auch für tabelierte Messdaten dennoch gibt es hier in der Regel abhänige und unabhänige Spalten.
Veranschaulichen lässt sich dies an der Schüler-Liste im Klassenbuch, es gibt keine "natürliche" Sortierung der Einträge und diese ist für die Tabellierung auch nicht nötig.
In diesem Beispiel könnten jetzt die Einträge nach Vornamen, Nachnamen, Geburtsdatum oder anderen Eigenschaften sortiert bzw. durchsucht werden.
Der zeilenweise Bezug der Daten bleibt immer bestehen.
**Dies gilt auch für tabelierte Messdaten** dennoch gibt es hier in der Regel abhänige und unabhänige Spalten.
### 1 dimensionell
Bei einem einfachen zur Wiederstands Messung werden Messwerte in Folge von einer veränderlichen Eingangs-Bedinungen erfasst. In diesem Fall also der Stromfluss durch den Wiederstand in folge der angelgten Spannung. Werden diese Messdaten in eine typische Tabelle eingetragen, würde die Spannung in erste Spalte eingetragen werden. Bei einer Auftragung würde die Spannung als X-Achse verwendet werden.
Bei einer einfachen Messung werden Messwerte in Folge von **einer veränderlichen** Eingangs-Bedinungen erfasst.
Zum Beispiel bei einer Messung des Stromes durch einen Widerstand in Abhängigkeit der angelegten Spannung.
Werden diese Messdaten in eine typische Tabelle eingetragen, würde die Spannung in erste Spalte eingetragen werden. Bei einer Auftragung würde die Spannung als X-Achse verwendet werden.
Diese Tabelle ist "1 dimensionell" da alle Spalten im Bezug zur Spannungsspalte stehen.
```plaintext
Exkurs: Dimensionelle Klassifizierung von Tabellen
Die hier druchgeüfhrte dimensionelle Klassifizierung bezieht sich auf die Anzahl der tatsächlich unabhängigen Variablen.
So ist im Beispiel weiter unten die nominelle Spannung und die tatsächliche Spannung angegeben, die Tabelle ist dennoch 1 dimensionell da die tatsächle Spannung auch von der nominal Spannung abhängt.
Um einen Messwert "wieder zufinden" also zu *indizeiren* reicht entweder die Kenntniss der nominalen Spannung oder der tatsächlicehn Spannung aus.
### 2/N dimensionell
Wird statt des Wiederstandes nun Wechselstromimpedanz gemessen, hängt der Stromfluss nun auch von der Frequenz ab. In einer Tabelle würden jetzt die Spannung und die Frequenz als Indexspalten bezeichnet werden und Links abgedruckt werden. Ein Auftragung würde als 2D Plot mit Frequenz und Spannung als X und Y Achsen erfolgen. Ob Frequenz oder Spannung die X-Achse ist ist für die Darstellung der Daten irrelvant.
Für die Darstellung von 2 dimennsionlennen Daten gibt es grundsätzlich [zwei Möglichkeiten](https://de.wikipedia.org/wiki/Wide-Format_und_Long-Format), die wir als Long-Format und Wide-Format bezeichnen wollen.
```
##### Long-format
Das Long-format arbeitet mit Listen von Werten, wie eine 1 dimensionelle Tabelle auch [siehe](#numerisch-indizierte-tabelle-mit-mehreren-indexspalten) das Long-Format ist eine sehr simple Möglichkeit N dimensionelle Daten zu speichern. Ein spezieller Wert wird dadurch "gefunden", dass überprüft wird in welcher Zeile all N Index Werte den Suchkriterien entsprechen. Wenn Werte entsprechend den Index-Dimensionen sortiert sind kann diese Suche sehr schnell erfolgen.
Das Long-Format ist von großem Vorteil wenn die Tabelle spärlich bestzt ist, oder die Unabhänigen Größen keinem strikten Schema folgen.
Für "kruze" Tabellen empfelen wir auf Gurnd der einfachren Implementierung grundsätzlich das Long-Format wie im [Beispil](#numerisch-indizierte-tabelle-mit-zwei-indexvektoren) gezeigt.
##### Wiede-Format
Werden die Höherdimensionellen Daten "rasterartig" erfasst, wie z.B. Mikroskopbilder die die Lichtintesität bezogen auf ein Gitter aus 1024 X und 500 Y Position können diese Daten effizent in einer Wiede-Tabelle erffasst werden.
In disem Fall würde die Tabelle nun Listen von Listen so wie die Indexdimensions-Vektroen enthalten.
TODO Beispiel bauen um einen Daten Punkt zu finden muss jetzt in den X und Y Indexdimensions-Vaktoren die position des Wertes gesucht werden, dabei ist die X-Dimension die Position in der Äußeren Liste und die Y-Dimension durch die Position in der inneren Liste kodiert. Wurden bestimmte Werte nicht erfasst müssen diese durch ein `NaN` oder ein leeres `dcc:content` Eleemnt gekennzeichnet werden da die Wide-Tabelle immer alle möglichen Index-Kombinationen abdeckt.
Nach dieser Logik lassen sich auch höher Diemnesinelle Tabellen Effizent ablegen.
Ebenso wie bei der Long-Table lassen sich auch inder Wide-Table darstellung belibig viele abhänige Daten zusammen ablegen.
### 2 oder N dimensionell
Wird statt des Wiederstandes nun Wechselstromimpedanz gemessen, hängt der Stromfluss nun auch von der Frequenz ab.
In einer Tabelle würden jetzt die Spannung und die Frequenz als Indexspalten bezeichnet werden und Links abgedruckt werden.
Ein Auftragung würde als 2D Plot mit Frequenz und Spannung als X und Y Achsen erfolgen.
Ob Frequenz oder Spannung die X-Achse ist ist für die Darstellung der Daten irrelvant.
Für die Darstellung von 2 dimennsionlennen Daten gibt es grundsätzlich [zwei Möglichkeiten](https://de.wikipedia.org/wiki/Wide-Format_und_Long-Format), die wir als Long-Format und Flatt-Format bezeichnen wollen.
```plaintext
Es gibt keine inheränte Hierarchie in den Indexspalten, die Wahl der X und Y Achse ist rein konventionell und hat keinen Einfluss auf die Daten.
Bei Flatt-Tabellen ist es jedoch wichtig die Indexspalten korekt hirachisch zu ordnen, da die Daten sonst nicht eindeutig zugeordnet werden können. Beid er hier vorgestellten Row-Major Repräsentation sind die Daten entlang der Letzten Dimension "blockweise" abgelegt und können am Stück ausgelesen werden.
```
##### Long-format
Das Long-format arbeitet mit Listen von Werten, wie eine 1 dimensionelle Tabelle auch [siehe](#numerisch-indizierte-tabelle-mit-mehreren-indexspalten) das Long-Format ist eine sehr simple Möglichkeit N dimensionelle Daten zu speichern.
Ein spezieller Wert wird dadurch "gefunden", dass überprüft wird in welcher Zeile all N Index Werte den Suchkriterien entsprechen.
Wenn Werte entsprechend den Index-Dimensionen sortiert sind, kann diese Suche sehr schnell erfolgen.
Das Long-Format ist von großem Vorteil, wenn die Tabelle spärlich bestzt ist, oder die Unabhängigen Größen keinem strikten Schema (Gitter/Raster) folgen.
Für "kurze" (<100 Elemente) Tabellen empfelen wir auf Gurnd der einfacheren Implementierung grundsätzlich das Long-Format wie im [Beispil](#numerisch-indizierte-tabelle-mit-zwei-indexvektoren) gezeigt.
##### Flatt-Format
Werden die Höherdimensionellen Daten "rasterartig" erfasst, wie z.B. Mikroskopbilder bei denen die Lichtintesität bezogen auf ein Gitter aus 500 X und 1024 Y Position erfasst wird.
können diese Daten effizent in einer Flatt-Tabelle erfasst werden.
In diesem Fall würde die Tabellen daten nun in einer Langen List mit M*N=1024*500 = 512000 Elementen abgelegt werden.
Um die Position in der "flachen"-Liste des Wertes an der Postion [X=100,Y=71] zu finden, wird die Formel `Position = X + Y * 1024=100+71*1024=72804` verwendet.
$$
\text{Index} = \sum_{k=0}^{N-1} \left( i_k \times \prod_{j=k+1}^{N-1} d_j \right)
$$
Dabei gilt:
- $N$ ist die Anzahl der Dimensionen.
- $i_k$ ist der Index in der $k$-ten Dimension (0-basiert).
- $d_j$ ist die Größe der $j$-ten Dimension.
---
```pseudo
function flat_index(indices, dims):
// indices: Liste von N Indizes [i0, i1, ..., i_{N-1}]
// dims: Liste von N Dimensionen [d0, d1, ..., d_{N-1}]
index = 0
factor = 1
// Iteriere von der letzten Dimension bis zur ersten
for k from N-1 downto 0:
index = index + indices[k] * factor
factor = factor * dims[k]
return index
```
<div style="text-align: center; margin-top: 20px;">
<h3>Comparison of Wide and Long Tables</h3>
<img src="https://gitlab1.ptb.de/digitaldynamicmeasurement/dccQuantities/-/raw/devel-class-restructuring/doc/tabellen/longAndWideComparison.PNG" alt="Long and Wide Comparison" style="width: 70%; max-width: 800px; height: auto; border: 1px solid #ccc; padding: 10px;">
</div>
[^1]: Genauer gesagt Listen von Objekten gleicher "Shape", da im wide Format for höher dimensionelle Daten Arrays als Elemente verwendet werden.
## Beispiele
Die folgenden Beispiele werden in den folgenden Abschnitten in unterschiedlichen Repräsentationen in DCC-Fragmenten umgesetzt, um die verschiedenen Formate zu illustrieren.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment