Data-Science unserer Standesamtsdaten als interaktive Karten

02.03.2025, Clemens Draschba
Bereich: Wissenswertes für die Familienforschung

Mit einem neuen kleinen Data-Science-Projekt erstellen wir mit einfachen Bordmitteln Karten unserer indexierten Daten als interaktive Webseite.


Data-Science unserer Standesamtsdaten als interaktive Karten

Im meinem letzten Data-Mining Beitrag vom 10. Dezember 2023 habe ich bereits die faszinierenden Möglichkeiten der Python Bibliothek Pandas vorgestellt. Für ein aktuelles Projekt habe ich mich intensiver mit Geopandas und Folium beschäftigt. Beides sind Frameworks zur Erstellung von interaktiven Karten auf der Basis geospatialer Daten. Was liegt also näher, als damit auch zwei neue Karten unseres Indexierungsprojektes zu erstellen? Das möchte ich mit zwei Beispielen erklären.

Da alle unsere 1.3 Millionen Personendaten polnischen Archivbeständen zugeordnet sind und diese wiederum geographischen Orten zugeordnet sind, für die wir schon vor Jahren die geographischen Koordinaten (Längen- und Breitengrad) in unserer Datenbank hinterlegt haben, waren die Daten schnell mit einer SQL-Abfrage aus unserer Datenbank zusammengetragen und in einen Pandas-Dataframe eingelesen.

Diese Abfrage summiert die Anzahl der indexierten Personenstandsfälle auf, ordnet die Daten dem Ort des Standesamtes zu und selektiert für diesen Ort den Längen- und Breitengrad. Das Ergebnis ist eine Tabelle in der unten abgebildeten Form. Dargestellt sind die Top 10 der Standesamtsorte:

Standesamtsort Anzahl Breitengrad Längengrad
Allenstein 50209 20.480 53.778
Sensburg 28670 21.304 53.870
Pillau 25776 19.905 54.651
Neidenburg 25067 20.426 53.359
Wartenburg 22204 20.690 53.827
Passenheim 21004 20.792 53.652
Willenberg 20512 20.944 53.399
Nikolaiken 19882 21.572 53.800
Beutnerdorf 17924 20.992 53.570
Hohenstein (Land) 16877 20.284 53.584

Eine erste Karte mit Markern

Eine erste Karte wird ähnlich unserer bekannten Karte erstellt, indem ein neues Kartenobjekt mit Folium erstellt wird und dann für alle Standesämter ein neuer Marker in die Karte eingefügt wird. Der Marker erhält neben den geografischen Positionskoordinaten auch den Ortsnamen und die Farbe darkblue als Attribute.

map = folium.Map(location=[center.x, center.y], zoom_start=7)
for x in data.itertuples() :
    ptext = x.ort_name + " (" + str(x.anzahl) + ")"
    ppos  = [ x.latitude, x.longitude ]
    folium.Marker(ppos, popup=ptext, icon=folium.Icon(color='darkblue')).add_to(map)

map.save( 'namensindex_karte.html')

Diese Karte wird dann einfach als interaktive HTML-Seite gespeichert und lässt sich lokal mit jedem Webbrowser bedienen. Für euch haben wir eine Kopie auf unseren Webserver hochgeladen. In der Karte kann man mit der Maus die Marker anklicken. Es erscheint dann der Ortsnamen und die Anzahl der erfassten Personen aus diesem Standesamt. Außerdem lässt sich mit dem Mausrad in der Karte zoomen oder ihr Zentrum verschieben.


Eine zweite Karte als Heatmap

Es wäre wirklich cool, auf den ersten Blick zu sehen, wie viele Personen aus den verschiedenen Orten erfasst wurden und in welchen Regionen diese Orte liegen. Dazu erstellen wir eine zweite Karte, in der anstelle der anklickbaren Markierungen eine farbige Wolke die Personenzahl durch einen Farbverlauf repräsentiert. Je höher die Zahl, desto "heißer" (roter) wird das Gebiet um diesen Punkt dargestellt - ganz ähnlich einer "Wetterkarte".

Dafür bietet Folium eine Reihe sehr mächtiger Werkzeuge für Karten als Plugins an, die ohne großen Aufwand eingesetzt werden können. So kann z.B. aus den Daten der geographischen Position und der Anzahl der indexierten Personen eine sogenannte Heatmap (Dichteverteilung) erstellt werden, die „geographisch heiße“ Regionen (also Regionen mit einer hohen Anzahl indexierter Personen) visualisiert.

heatmap = folium.Map(location=[center.y, center.x], zoom_start=7)
plugins.HeatMap(heatmapdata).add_to(heatmap)
heatmap.save('namensindex_heatmap.html')

Auch hierfür wird ein neues Folium-Objekt für eine Karte erstellt. Diesem Objekt kann dann ganz einfach über das Plugin die Dichteverteilung hinzugefügt werden. Das Ergebnis wird wieder als neue interaktive Webseite gespeichert.

Um die Thematik korrekt zu behandeln, sei darauf hingewiesen, dass die Farbdaten von mir einer logarithmischen Skalierung unterzogen wurden. Es ist wirklich faszinierend, welche mächtigen Werkzeuge sich im Bereich der Data Science in den letzten Jahren entwickelt haben, um große Mengen an geografischen Daten anschaulich visuell darzustellen. Selbstverständlich könnten solche Karten mit Pandas auch aus einem Excel-Sheet als Datenquelle erzeugt werden. Aber das wäre echt "Old-School".

So könnt ihr auf einen Blick erkennen, in welchen Regionen Ost- und Westpreußens eine Suche im NamensIndex am erfolgversprechendsten ist und wo die Lücken in der Quellenlage größer sind.

Bild: Interaktive Heatmap


©02.03.2025 Clemens Draschba Abrufe Blogartikel: 883492