Ähnlichkeit von CSV-Dateien
Dieses Projekt wird seit SS 2024 im Rahmen eines Studienprojektes bearbeitet. Diese Seite hier: Kontext-Informationen zum Studienprojekt für interessierte Beobachter aus der Linked Open Government Data-Szene.
Usecase: Uns interessieren Daten über die Belegung von Parkhäusern, z.B. Parkhausbelegungsstände in Heidelberg. Suche auf https://
- Welche Parkhäuser gibt es in HD? https://
www .govdata .de /web /guest /suchen / - /searchresult /q /Parkhaus+metadaten+heidelberg /s /relevance _desc - Wie viele freie Plätze gibt es in den einzelnen Parkhäusern? https://
www .govdata .de /web /guest /suchen / - /searchresult /q /Parkhausbelegung+heidelberg /s /relevance _desc
Suchraum: Auf https://
- Welche anderen Datensätze auf govdata.de enthalten ebenfalls Parkhausdaten?
Lösungsansätze:
- Suche auf GOVDATA über Metadaten, d.h. Recherche über die Verschlagwortung von Datensätzen. Leider zeigt die Erfahrung, dass die Verschlagwortung subjektiv und nicht treffgenau ist, und nicht alle interessanten Datensätze zurückgibt.
- interessantes Projekt: https://
www .bertelsmann -stiftung .de /de /unsere -projekte /smart -country /musterdatenkatalog. Einschränkung: Die Suche nach ähnlichen Datensätzen wird hier ausschließlich auf den Metadaten durchgeführt. - Idee für einen ergänzenden Ansatz: Wir suchen nach ähnlichen (CSV-) Dateien, indem wir direkt die Spalten der Dateien miteinander vergleichen:
- Welche Spalten haben ähnliche Inhalte?
- können aus den Inhalten einer Spalte ihren Typ erschließen? z.B. Adresse, Geburtsdatum, Ort, Kontonummer, Uhrzeit etc.
Aufgabe im Studienprojekt:
- Entwickle ein Konzept und ein Demo-Beispiel, wie man die Ähnlichkeit von CSV-Dateien feststellen kann.
Die Ähnlichkeit kann man dann nutzen, um
- zu einer gegebenen CSV-Datei eine andere ähnliche zu finden (obige Aufgabe)
- eine größere Menge von CSV-Dateien zu clustern (allgemeine Anwendung)
- ggf. Nebenprojekt: Lassen sich ggf. sogar Spaltenüberschriften aus den Spalteninhalten erschließen? Wie genau der Datentyp?
Wenn die Spaltenüberschriften ähnlich sind, ist die Sache einfach. Wir gehen jedoch davon aus, dass die Spaltenüberschriften (Metadaten) nicht gegeben sind, oder jedenfalls zu wenig normiert sind, um ausreichend relevant zu sein. Hypothese deshalb:
- Je mehr ähnliche Spalten zwei CSV-Dateien haben, desto ähnlicher dürften sie auch insgesamt sein.
Also Lösungsansatz:
- Bestimme die Ahnlichkeit einzelner Spalten in verschiedenen CSV-Dateien
- Die Ähnlichkeit von zwei Dateien ergibt sich dann als Funktion der Ähnlichkeit ihrer einzelnen Spalten.
Vorgehen:
- Synthetische Konstruktion einiger dutzend CSV-Dateien von unterschiedlichem Typ, z.B.
- Adressen: Name, Vorname, Straße, PLZ, Ort
- Produkte: Produkt-Name, EAN-Nummer, Einkaufspreis, Verkaufspreis, Datum, Menge
- Klausuren: Name, Vorname, MatNr, ModulNr, Datum, Note
- Blitzer: PLZ, Ort, Straße, Datum, Zeit, Kennzeichen, Geschwindigkeit
- Realexperiment: Übertragung der Ergebnisse auf Datensätze aus govdata
- Evaluation: noch unklar, TBD
- eigene manuelle Recherche und Suche nach ähnlichen Dateien bei govdata (Goldstandard, aber aufwändig)
- Vergleich der eigenen Ergebnisse mit den Clustern aus dem Musterdatenkatalog?
- andere?
Literatur:
- Eine ähnliche Aufgabenstellung ist beschrieben unter https://
scicomp .stackexchange .com /questions /23455 /similarity -of -two -csv -files -or -more - interessantes Projekt: https://
pypi .org /project /schema -matching / - das Vorgehen im Musterdatenkatalog ist beschrieben in https://
github .com /bertelsmannstift /Musterdatenkatalog -V4 /tree /main
Teilaufgaben¶
Typ der Daten in einer Zelle feststellen¶
gegeben:
- eine einzelne Zelle einer CSV-Datei als String
- Bsp.: ein (Geburts-) Datum in ganz unterschiedlichen Darstellungen; TelNr; ISBN, DOI; URI; Name in der Form Nachname, Vorname;
gesucht:
- der wahrscheinlichste Typ der Daten in der Zelle
- alternativ eine Liste von möglichen Typen zusammen mit einer Wahrscheinlichkeit zwischen 0 und 1
Idee: Stelle eine ganze Batterie von kleinen, leichtgewichtigen Test zur Verfügung, die man auf einen einzelnen Zelleninhalt loslassen kann ... mögliche Technologien: regex; ein konventioneller Klassifikator (aus Textmining bekannt: logistische Regression; andere?); ein Perzeptron; ein komplexres modernes NN? ... wenn man mit regex arbeitet, dann kann man alle Tests gleichzeitig (!) durchführen ... im Ergebnis wird der Typ einer Zelle durch einen Vektor dargestellt; Zellähnlichkeit dann wieder Cosinus-Ähnlichkeit?
Eine Spalte lässt sich dann beschreiben als eine Liste von Typ-Vektoren; wenn die meisten Zellen den gleichen Typ haben, vermuten wir auch für die Spalte einen Typ ... einzelne Zellen mit einem anderen Typ sind dann Ausreißer? Oder besonders signifikante Exemplare?
recherchieren: Wie wird das bei den Standard-Technolgien beim Schema-Matching gemacht?
Govdata Bsp Parkhausdaten¶
2024-04-19: hier wegen der Zugänglichkeit angelegt auf der Seite aehnlichkeit-von-csv-dateien.md
, wird später verschoben nach LOVS
Was kann man an diesem Beispiel diskutieren?
- eigentliches Interesse JB: Die Parkhausdaten in HD sind auf Govdata in der Terminologie von DCAT in ganz unterschiedlichen “Distributionen” vorhanden ... wir versuchen, den Begriff der dcat:distribution mit den FRBR-Begriffen zu verstehen; Vermutung: dcat:distribution entspricht frbr:manifestation: Was spricht dafür, was dagegen?
- Studienprojekt Ähnlichkeit von CSV-Dateien: die vorliegenden Parkhaus-Belegungsdaten sind vielleicht weniger geeignet; aber wir lernen hier die Struktur von govdata; besser geeignet möglicherweise die Parkhaus-Metadaten in Heidelberg?
Wir wollen über die Parkhausbelegung von Parkhäusern in Heidelberg Auskunft geben ... z.B. https://
Für diese Daten gibt es auch andere Seiten, in denen die Daten mehrer Tage minutengenau verzeichnet sind, z.B.
Diskussion: Teil-Werke, -Expressionen, -Manifestationen¶
In diesem Beispiel drückt sich das spezifische Werk “Parkhausbelegung in Heidelberg” des großen Weltgeistes in verschiedenen “Distributionen” aus (wir haben hier 3 explizit genannt), die sich in der URI unterscheiden ... modellieren jeweils nur einen Teil des Werkes; verschiedene Modelle, Messreihen verschiedener Zustände ... das gleiche Werk, verschiedene Expressionen? oder verschiedene Teile des Werkes, jeder Teil eine eigene Expression? ... Interpretation : Eines von vielen Werken des Weltgeistes ist die Parkhausbelegung in der BRD insgesamt ... dieses Werk hat viele Teile: Parkhausbelegung in unterschiedlichen Städten, in verschiedenen Parkhäusern einer Stadt; dokumentierte Messdaten in unterschiedlichen Zeitintervallen, etc. ... wir können dieses große Werk und seine viele Teilen in vielfacher Weise beschreiben, modellieren. Wir systematisieren das etwas:
Parkhaus-Metadaten in Heidelberg¶
govdata.de, Suche nach “parkhaus heidelberg”, ergibt auch “Parkhausmetadaten in Heidelberg” https://
geeignet für die Suche nach ähnlichen Datensätzen?