Feature/datenspeicherung (#30)

* Added Seminararbeit Datenspeicherung
This commit is contained in:
Sebastian authored and GitHub committed 2023-06-29 17:39:38 +02:00
1 parent a9304201af
commit 91cfa28d7f
44 files changed
+11644 -68

No files matched your search

+1
View File
@@ -32,6 +32,7 @@ This is the documentation for the AKI project group on the german transparenzreg
:caption: Seminararbeiten
seminararbeiten/DevOps/Seminarpräsentation.ipynb
seminararbeiten/Datenspeicherung/00_Datenspeicherung.md
.. toctree::
:glob:
@@ -1,68 +0,0 @@
# Aufgabe: Inhaltliche Skizze für die Seminararbeit zur Thematik Datenspeicherung
# 1. Allgemeine Anforderungen an Datenbank
- **Speicherung** von strukturierten Daten, wie Kennzahlen, Stammdaten
- **Skalierbarkeit:** Datenbank sollte skalierbar sein, um zukünftige Daten weiterhin zu speichern und weitere Unternehmen hinzuzufügen
- **Sicherheit:** Die Datenbank muss Funktionen unterstützen, um die Datenvor unbefugtem Zugriff zu schützen.
- **Datensicherung- und Wiederherstellung: ** Die Datenbank muss Funktionen zur Sicherung und Wiederherstellung unterstützen.
- **Leistung:** Die Performance der Datenbank ist eher zweitrangig, da die Abfrage nicht hochdynamisch sein muss. Ausserdem werden nicht viele Anfragen erwartet.
- **Integration:** Die Datenbank muss sich in ein Python Framework einbinden lassen und mit dem bevorzugten Frontend Daten austauschen können.
# 2. Datenarten
Welche Daten erwarten wir im Projekt? \
Cluster, wie z.B. Stammdaten, Stimmungsdaten, Social Graph, Zeitseriendaten/Historien
> Abstimmung mit den Bereichen Textmining und Datenbeschaffung über verwendete Daten und Formulierung von Anforderungen an Daten.
## 2.1 strukturierte Daten
Was sind strukturierte Daten?
## 2.2 unstrukturierte Daten
Was sind unstrukturierte Daten?
> Definiere eine Anforderung an die Struktur der Daten.
# 3. Arten von Datenbanken
## 3.1 Relational
Was ist eine reltionale Datenbank?
Wie werden Daten gespeichert?
Beispiel für relationale Datenbank
## 3.2 Graph
Was ist eine Graph Datenbank?
Wie werden Daten gespeichert?
Beispiel für Graph Datenbank
## 3.3 Zeitserien
Was ist eine Zeitserien Datenbank?
Wie werden Daten gespeichert?
Beispiel für Zeitserien Datenbank
> Kurzvorstellung von Datenbanksystemen
# 4. DBS Transparenzregister
## 4.1 relationales Datenbankmodell
> Modell zur Abbildung der Relationen im Projekt Transparenzregister
## 4.2 verteilte Datenbank oder ein System
Ein DBS: Wenn nur ein Datenbanksystem verwendet wird, muss nur ein System gepflegt und integriert werden.
- Vorteil: einfache Verwaltung und schnelle Abfrage von Datenbeziehungen
verteiltes System: spezialisierte Datenbank für jeden Datenytp, wie z.B. Zeitseriendaten oder Graph Daten
> Definiere eine Empfehlung/Anforderung für das Projekt Transparenzregister.
## 4.3 Analyse zur Auswahl eines Datenbanksystems
Was sollte bei der Auswahl eines Datenbanksystems beachtet werden?
> Empfehlungen für DBS-Auswahl
## 4.4 Anbindung an Front- und Backend
Wie kann das DBS an das Front- und Backend angebunden werden?
> Jupyter Notebook mit Beispiel
## 4.5 Abfragen in der Datenbank
Wie können Unternehmensdaten abgefragt werden?
Wie können Verflechtungen abgefragt werden?
> Jupyter Notebook mit Beispiel
@@ -0,0 +1,748 @@
![Front](images/Front.PNG)
<div style="page-break-after: always;"></div>
# Datenspeicherung
## Inhaltsverzeichnis
- [Datenspeicherung](#datenspeicherung)
- [Inhaltsverzeichnis](#inhaltsverzeichnis)
- [Motivation: Warum speichern wird Daten?](#motivation-warum-speichern-wird-daten)
- [1. Allgemeine Anforderungen an Datenbank](#1-allgemeine-anforderungen-an-datenbank)
- [2. Datenarten](#2-datenarten)
- [2.1 Welche Daten erwarten wir im Projekt?](#21-welche-daten-erwarten-wir-im-projekt)
- [2.2 strukturierte Daten](#22-strukturierte-daten)
- [2.3 unstrukturierte Daten](#23-unstrukturierte-daten)
- [3. Arten von Datenbanken](#3-arten-von-datenbanken)
- [3.1 Relationale Datenbank](#31-relationale-datenbank)
- [3.1.1 Anlegen von Tabellen](#311-anlegen-von-tabellen)
- [3.1.2 SQL - Abfrage von relationalen Datenbanken](#312-sql---abfrage-von-relationalen-datenbanken)
- [3.2 Graphdatenbank](#32-graphdatenbank)
- [3.2.1 Erstellung eines Datensatzes](#321-erstellung-eines-datensatzes)
- [3.2.2 Cypher - Abfrage von Graphdatenbanken](#322-cypher---abfrage-von-graphdatenbanken)
- [3.3 Zeitseriendatenbank](#33-zeitseriendatenbank)
- [3.3.1 Erstellung eines Datensatzes](#331-erstellung-eines-datensatzes)
- [3.3.2 FluxQuery](#332-fluxquery)
- [3.4 Dokumenten Datenbank ](#34-dokumenten-datenbank-)
- [3.4.1 Erstellen einer Collection / Ablegen von Dokumenten](#341-erstellen-einer-collection--ablegen-von-dokumenten)
- [3.5 Aufbau einer Datenbank](#35-aufbau-einer-datenbank)
- [4. Datenbanken Transparenzregister](#4-datenbanken-transparenzregister)
- [4.1 Production DB - relationales Datenbankmodell](#41-production-db---relationales-datenbankmodell)
- [4.2 Staging DB](#42-staging-db)
- [4.3 SQL Alchemy](#43-sql-alchemy)
- [5. Proof of Concept](#5-proof-of-concept)
- [5.1 Docker](#51-docker)
- [5.2 PG Admin](#52-pg-admin)
- [5.3 Erstellen von Mock Daten](#53-erstellen-von-mock-daten)
- [5.4 Anlegen der relationalen Tabellen](#54-anlegen-der-relationalen-tabellen)
- [5.5 Abfragen der Datenbank](#55-abfragen-der-datenbank)
- [6. Zusammenfassung](#6-zusammenfassung)
- [Quellen](#quellen)
<div style="page-break-after: always;"></div>
## Motivation: Warum speichern wird Daten?
Für die Speicherung von Daten gibt es verschiedene Motivationen:
- **Sammlung:** Zur Aufbewahrung von Wissen und Informationen über Objekte, Ereignisse oder Prozesse werden Daten gespeichert.
- **Historisierung:** Durch die Speicherung von Daten in einem zeitlichen Zusammenhang, wird eine Historie erstellt, mit welcher Muster, Trends oder Zusammenhänge erkannt werden können. Historische Daten helfen ausserdem bei der Entscheidungsfindung.
- **Bewertung:** Mit gespeicherten Daten können Systeme, Produkte und Prozesse nachvollzogen, bewertet und verbessert werden.
Im Projekt Transparenzregister ist die Datenspeicherung eine Kernkomponente, da die gesammelten Informationen die Grundlage für Analysen darstellen. \
Mit geeigneten Pipelines werden aus diesen Daten Erkenntnisse extrahiert, um z.B. Verflechtungen zwischen Personen und Unternehmen oder den wirtschaftlichen Trend eines Unternehmens visualisieren und bewerten zu können.
## 1. Allgemeine Anforderungen an Datenbank
- **1.1 Speicherung/Integrität**: Das verwendete System muss Daten, wie Unternehmenskennzahlen, Stammdaten und Verflechtungen speichern. Die Daten müssen korrekt und konsistent gespeichert werden. Konsistent bedeutet in einem gültigen und widerspruchsfreien Zustand und die Transaktionen sollen den ACID-Eigenschaften entsprechen.
- **Atomarity:** Eine Transaktion wird atomar betrachte, d.h. es ist die kleinste unteilbare Einheit, wodurch eine Transaktion entweder vollständig durchgeführt und übernommen wird (Commit) oder bei einem Fehler rückgängig gemacht wird (Rollback).
- **Consistency:** Konsistenz bedeutet, dass eine Transaktion den Datenbankzustand von einem gültigen in einen anderen gültihgen Zustand überführt. Sollte eine Transaktion eine Konsitenzverletzung verursachen, wird diese abgebrochen und die Änderungen zurückgesetzt.
- **Isolation:** Isolation sorgt dafür, dass alle Transaktion unabhängig voneinander ausgeführt werden, damit sich diese bei der Ausführung nicht gegenseitig beeinflussen.
- **Durability:** Dauerhaftigkeit bedeutet, dass die Ergebnisse einer Transaktion dauerhaft in der Datenbank gespeichert werden und auch nach einem Systemneustart oder Systemfehler erhalten bleiben.
- **1.2 Skalierbarkeit:** Das System soll skalierbar sein, um zukünftige Daten weiterhin zu speichern und weitere Unternehmen hinzuzufügen. Durch Hinzufügen von Ressourcen kann das System an steigende Datenmengen und Benutzeranforderungen angepasst werden. Man spricht von horizontaler Skalierung, da die Last auf mehrere Datenbankserver verteilt wird.
- **1.3 Sicherheit:** Die Datenbank muss Mechanismen bereitstellen, um die Daten vor unbefugtem Zugriff zu schützen.
- **Authentifizierung:** Überprüfung der Identität eines Benutzers, durch Benutzername und Passwort. Meist wird eine Zwei-Faktor-Authentifizierung verwendet, um das Sicherheitslevel zu erhöhen.
- **Autorisierung:** Der authentifizierte Benutzer erhält bei der Autorisierung Zugriffsrechte und Ressourcen, welche auf seiner Benutzerrolle basieren. Ein Benutzer mit Administratorrechten, erhält Zugriff auf alle Systemressourcen, wohingegen ein normaler Benutzer nur beschränkten Zugriff erhält.
- **Verschlüsselung:** Durch Verschlüsselung werden Daten in ein nicht interpretierbaren Code umgewandelt, um den Inhalt vor unbefugtem Zugriff zu schützen. Dafür wird ein Algorithmus verwendet, welcher einen Schlüssel generiert und die Daten mit diesem verschlüsselt. Um die Daten wieder lesen zu können, müssen diese mit dem Schlüssel dechiffriert werden.
- **1.4 Datensicherung- und Wiederherstellung:** Die Datenbank muss Funktionen zur Sicherung und Wiederherstellung unterstützen. Im Falle eines Ausfalls oder Fehlers muss sichergestellt sein, dass Mechanismen die Daten schützen und wiederherstellen.
Die meisten Daten in einer Datenbank ändern sich nur langsam, manche allerdings schnell. Je nach Anwendungsfall muss eine geeignete Sicherungsstrategie ausgewählt werden, um nur die Daten zu sichern, die sich tatsächlich ändern.
Jedes Datenbankmanagementsystem bietet unterschiedliche Mechanismen zur Datensicherung und Wiederherstellung, dessen Möglichkeiten nach Auswahl eines Systems
- **vollständiges Backup:** Das vollständige Backup ist eine komplette Kopie der Datenbank inkl. aller Daten, Indizes, Tabellen und Metadaten. Es benötigt viel Speicherplatz und Zeit zur Erzeugung der Sicherung und auch zur Wiederherstellung.
- **inkrementelles Backup:** Ein inkrementelles Backup sichert nur die Änderungen seit dem letzten vollständigem bzw. inkrementellen Backup. Durch den verringerten Datenbestand ist es deutlich schneller und datensparsamer, als das vollständige Backup. Zur Wiederherstellung wird das letzte vollständige und alle inkrementellen Backups benötigt. Allerdings entsteht eine Abhängigkeitskette, da jedes Backup seine Vorgänger zur Wiederherstellung benötigt.
- **differentielles Backup:** Beim differentiellen Backup werden alle Änderungen seit dem letzten vollständigem Backup gesichert. D.h. je weiter die letzte vollständige Sicherung zurückliegt, desto größer und langsamer wird das Backup. Zur Wiederherstellung werden das letzte vollständige und differentielle Backup benötigt.
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({ tex2jax: {inlineMath: [['$', '$']]}, messageStyle: "none" });
</script>
**Backuphäufigkeit:**
Die Backuphäufigkeit ist eine Abwägung aus Risiken, Kosten und Arbeitsaufwand. Dieses muss individuell abgeschätzt werden aufgrund des Datenbankumfangs und der Änderungshäufigkeit der Daten, um eine geeignete Backup-Strategie zu entwerfen. \
*Beispiel:*
- Vorgabe: Datenbank mit 500GB Größe
- Anforderungen
- min. vierfache Backupkapazität --> 2 TB
- Backupdauer vollständig: \
USB 2.0:$\frac {500GB}{\frac{60MB/s}{1024}} = 8533 sec. \approx 142Min. \approx 2,37 Std.$ \
USB 3.0:$\frac {500GB}{\frac{625MB/s}{1024}} = 820 sec. \approx 13,6Min. \approx 0,23 Std.$ \
VDSL 100:$\frac {500GB}{\frac{5MB/s}{1024}} = 102400 sec. \approx 1706Min. \approx 28,4 Std.$ \
Glasfaser:$\frac {500GB}{\frac{62,5MB/s}{1024}} = 8192 sec. \approx 136,5Min. \approx 2,3 Std.$
- **1.5 Leistung:** Die Performanceanforderungen an die Datenbank ergibt sich aus verschiedenen Merkmalen. Diese können kombiniert gestellt werden und sind abhängig von den Anforderungen an das System. Eine Analyse der Anwendungsfälle ist notwendig, um die Anforderungen zu spezifizieren.
- **Latenz:** Die Datenbank soll Anfragen effizient und in einer akzeptablen Antwortzeit verarbeiten. Typische Datenbankapplikationen, wie z.B. ein Webshop benötigen viele einzelne Zugriffe, wofür jedes Mal ein Kommunikationsprotokoll angewendet wird. Durch viele kleine Datenbankzugriffe wird die Applikation verlangsamt, da auf die Netzwerkkommunikation gewartet wird. Für das Benutzererlebnis eines Webshops ist die Latenz ein wichtiges Merkmal.
- **Durchsatz:** Ist eine Metrik für die Anzahl an Transaktionen pro Zeiteinheit. Der Durchsatz ist wichtig bei großen Benutzeraufkommen in einem Webshop.
- **Verfügbarkeit:** Eine hohe Verfügbarkeit, also Erreichbarkeit der Datenbank, wird durch Redundanz (mehrfaches Vorhandensein) und Wiederherstellungsmechanismen gewährleistet, damit Daten koninuierlich verfügbar sind.
- **Wartbarkeit:** Eine einfach zu wartende Datenbank muss Funktionen zur Überwachung, Diagnose, Wartung, Datensicherung und Wiederherstellung bereitstellen. Durch diese automatisierten Pipelines können andere Eigenschaften, wie z.B. die Verfügbarkeit negativ beeinflusst werden, weil Prozesse die Datenbank blockieren.
- **1.6 Integration:** Die Datenbank muss Schnittstellen bereitstellen, um die gespeicherten Daten für eine Anwendung bzw. Systeme zur Verfügung zu stellen.
- **API:** Das *Application Programming Interface* ist eine definierte Schnittstelle, welche Methoden und Funktionen bereit stellt, um auf die Datenbank zuzugreifen bzw. um diese zu verwalten.
- **REST:** REpresential State Transfer beschreibt eine Schnittstelle, die das http-Protokoll verwendet, wo mit den Methoden GET, POST, PUT, DELETE die Kommunikation realisiert wird.
- **SOAP:** Simple Object Access Protocol ist eine Schnittstelle, welche auf XML basiert.
- **ODBC:** Open Database Connectivity ist eine standardisierte Schnittstelle zum Austausch zwischen Anwendungen und Datenbanken.
- **JDBC:** Java Database Connectivity
## 2. Datenarten
Zur Beschreibung von Unternehmen, werden verschiedene Datenarten verwendet.
Die folgenden Datenarten sind eine allgemeine Zusammenfassung und sollen das Brainstorming für die projektspezifischen Daten unterstützen.
- **Stammdaten:** Stammdaten beinhalten die grundsätzlichen Eigenschaften und
Informationen von realen Objekten, welche für die periodische Verarbeitung notwendig sind. Ein Stammsatz für Personal besteht z.B. aus einer Personalnummer, dem Mitarbeiternamen, Anschrift und Bankverbindung. \
Je nach Anwendungsfall bzw. Geschäftsprozess muss der Inhalt definiert werden, wie z.B. bei Unternehmens-, Kunden-, Material- oder Patientenstammdaten.
- **Metadaten:** Mit Metadaten werden weitere Daten beschrieben und vereinfachen das Auffinden und Arbeiten mit diesen. Metadaten beinhalten beispielsweise den Verfasser, das Erstellungs- oder Änderungsdatum, die Dateigröße oder den Ablageort. \
Mit Metadaten können Datenbestände einfacher und effizienter verwaltet und abgefragt werden.
- **Transaktionsdaten:** Transaktionsdaten beschreiben eine Veränderung des Zustands, wie z.B. eine Kapitalbewegung oder eine Ein-/Auslieferung aus einem Lager.
- **Referenzdaten:** Referenzdaten sind eine Teilmenge von Stammdaten und beschreiben die zulässigen Daten. Diese werden nur selten geändert oder angepasst und gelten als konstant. Beispiele für Referenzdaten sind: Postleitzahlen, Kostenstellen, Währungen oder Finanzhierarchien.
- **Bestandsdaten:** Bestandsdaten sind dauerhafter Veränderung ausgesetzt, da diese z.B. die Artikelmenge in einem Lager oder das Guthaben auf einem Konto beschreiben. Diese korrelieren mit den Transaktionsdaten.
Diese Datenarten müssen im Kontext des Projektes betrachtet werden und sollen das Brainstorming unterstützen. \
*Stammdaten:* Unternehmensname, Anschrift, Branche \
*Metadaten:* Verfasser einer Nachricht - Veröffentlichungsdatum; Prüfungsunternehmen - Prüfdatum \
*Transaktionsdaten:* Wer hat wann wo gearbeitet? \
*Referenzdaten:* Einheit von Metriken (Umsatz, EBIT usw.) \
*Bestandsdaten:* Vorstand, Geschäftsführer, Aufsichtsrat
### 2.1 Welche Daten erwarten wir im Projekt?
Aus den vorangehenden, allgemeinen Datenarten haben wir Cluster identifiziert, welche im Projekt benötigt werden.
Die Kombination aus den folgend aufgeführten Datenclustern ermöglicht eine ganzheitliche Betrachtung und Bewertung der Unternehmen.
- **Unternehmensstammdaten:** Die Stammdaten beinhalten grundlegende Informationen zu einem Unternehmen, wie z.B. Name, Anschrift, Gesellschaftsform und Branche.
- **Sentimentdaten:** Die Sentiment- oder Stimmungsdaten beschreiben die Aussenwahrnehmung des Unternehmens hinsichtlich der Mitarbeiterzufriedenheit, Nachhaltigkeit und Umweltfreundlichkeit.
> Mit Sentimentdaten können folgende Fragen beantwortet werden:
>- Welchen Ruf hat das Unternehmen?
>- Wie ist die Aussenwahrnehmung?
>- Wie ist die Kundenbindung?
- **Finanzdaten:** Die Finanzdaten sind Metriken bzw, Indikatoren, um den wirtschaftlichen Erfolg des Unternehmens zu bewerten. Hierzu zählen z.B. Umsatz, EBIT, EBIT Marge, Bilanzsumme, Eigenkapitalanteil, Fremdkapitalanteil, Verschuldungsgrad, Eigenkapitalrentabilität, Umschlaghäufigkeit des Eigenkapitals.
> Mit Finanzdaten können folgende Fragen beantwortet werden:
>- Wie rentabel wirtschaftet das Unternehmen?
>- Wie ist der wirtschaftliche Trend?
>- Bewerten anhand verschiedender Metriken.
- **Verflechtungsdaten/Social Graph:** Die Verbindungen bzw. Beziehungen zu Personen oder Unternehmen wird in den Verflechtungsdaten abgelegt. Beziehungen entstehen, wenn eine Person Geschäftsführer, Vorstand, Aufsichtsratmitglied, Prokurist oder Auditor ist und Unternehmen z.B. gemeinsam arbeiten, beliefert wird oder Anteile an einem anderen Unternehmen besitzt.
> Mit Verflechtungsdaten können folgende Fragen beantwortet werden:
>- Gibt es strategische Partnerschaften?
>- Wie sind die Lieferketten aufgebaut?
>- Wie ist die Qualität der Geschäftsbeziehungen?
>- Ist das Unternehmen widerstandsfähig aufgestellt?
>- Gibt es Zusammenhänge zu Personen?
Die abgebildete Mind Map ist nicht vollständig und bildet nicht den finalen Datenumfang des Projekts ab. Es ist eine Momentaufnahme, bevor das relationale Schema entwickelt und die Implementierung begonnen wurde.
![Data_Clusters](/documentations/seminararbeiten/Datenspeicherung/images/Data_Cluster.PNG)
### 2.2 strukturierte Daten
Strukturierte Daten liegen in einem definierten Format. Vorab wird ein Schema definiert, um Felder, Datentypen und Reihenfolgen festzulegen und die Daten entsprechend abzulegen.
Diese Art von Daten wird z.B. in relationalen Datenbanken verwendet, wobei jede Zeile einer Tabelle einen Datensatz repräsentiert. Die Beziehungen untereinander sind über die Entitäten definiert.
Das Beispiel unten zeigt ein einfaches Beispiel, wie die Daten für die Klasse *Company* definiert sind. Mit diesem Schema kann die Datenaufbereitung umgesetzt werden.
```mermaid
---
title: Structured Data
---
classDiagram
class Company:::styleClass {
int ID
string Name
string Street
int ZipCode
}
```
|Vorteile|Nachteile|
|:-----:|:------:|
|einfach nutzbar, da organisiert |Einschränkung der Verwendungsmöglichkeit durch Schema |
| bei bekannten Schema sind Werkzeuge vorhanden|begrenze Speichermöglichkeit, da starre Schemata vorgegeben sind |
|gut automatisierbar | |
### 2.3 unstrukturierte Daten
Unstrukturierte Daten unterliegen keinem Schema, wie z.B. E-Mails, Textdokumente, Blogs, Chats, Bilder, Videos oder Audiodateien.
- **Textanalyse:** Aus unstrukturierten Texten werden z.B. durch Analyse und Mining Informationen gewonnen, um diese zu extrahieren. Es wird das Vorkommen von bestimmten Wörtern mittels Named Entity Recognition ermittelt oder die Stimmung bzw. das Thema in einem Artikel.
- **Audio-/Videoanalyse:** Bei der Verarbeitung unstrukturierter Audio- oder Videodateien werden Objekte, Gesichter, Stimmen oder Muster erkannt, um diese für Sprachassistenten oder autonome Fahrzeuge nutzbar zu machen.
Eine wichtige Informationsquelle sind unstrukturierte Daten für Explorations- und Analyseaufgaben. Dabei werden Datenquellen wie z.B. E-Mails, RSS-Feeds, Blogs durchsucht, um bestimmte Informationen zu finden oder Zusammenhänge zwischen verschiedenen Quellen hherzustellen. Dies ermöglicht tiefe Einsicht in die Daten zu erhalten und unterstützt die Entscheidungsfindung bei unklaren Sachverhalten und die Entdeckung neuer Erkenntnisse.
|Vorteile|Nachteile|
|:-----:|:------:|
|großes Potenzial Erkenntnisse zu erlangen |aufwändige Bearbeitung notwendig, um Daten nutzbar zu machen|
|unbegrenzte Anwendungsmöglichkeiten, da kein Schema vorhanden ist|spezielle Tools zur Aufbereitung notwendig|
| |Expertenwissen über die Daten und Datenaufbereitung notwendig |
## 3. Arten von Datenbanken
### 3.1 Relationale Datenbank
Eine relationale Datenbank speichert und verwaltet strukturierte Daten. Dabei werden die Daten in Tabellen organisiert, welche aus Zeilen und Spalten bestehen. \
In den Zeilen der Tabellen sind die Datensätze gespeichert, d.h. jede Zeile repräsentiert einen Datensatz. Durch logisches Verbinden der Tabellen können die Beziehungen zwischen den Daten abgebildet werden. \
Die wichtigsten Elemente einer relationalen Datenbank werden folgend erklärt:
**Tabelle:** Eine Tabelle repräsentiert eine Entität bzw. Objekt , wie z.B. Unternehmen, Kunde oder Bestellung. Die Tabelle besteht aus Spalten, welche die Attribute der Entität speichern. \
Jede Zeile ist eine Instanz des Objekts und enthält konkrete Werte.
**Table_Person**
|**ID**|**Name**|**Age**|**Salary**|**Height**|
|---|---|---|---|---|
|1|Tim|31|300.00|191.20|
|2|Tom|21|400.00|181.87|
|3|Tam|51|500.00|176.54|
https://www.sqlservercentral.com/articles/creating-markdown-formatted-text-for-results-from-sql-server-tables
**Primärschlüssel:** Der Primärschlüssel ist ein eindeutiger Bezeichner für jede einzelne Zeile einer Tabelle und wird zur Identifikation einer einzelnen Zeile benötigt. Im oberen Beispiel ist die Spalte *ID* der Primärschlüssel.
**Fremdschlüssel:** Ein Fremdschlüssel verweist auf einen Primärschlüssel einer anderen Tabelle, um eine Beziehung zwischen den Tabellen herzustellen. \
Im Beispiel ist bezieht sich die Spalte *customer_id* auf den Primärschlüssel der Tabelle *Table_Person*.
**Table_Orders**
|**ID**|**Product**|**total**|**customer_id**|
|---|---|---|---|
|1|Paper|12|2|
|2|Book|3|2|
|3|Marker|5|3|
**Beziehungen:** Wie bereits beschrieben, können mit der Verwendung von Fremdschlüsseln Beziehungen zwischen den Tabellen hergestellt werden. \
Es gibt verschiedene Beziehungstypen:
|**Typ**|**Beschreibung**|
|---|---|
|1:1|Jeder Primärschlüsselwert bezieht sich auf nur einen Datensatz. **Beispiel:** Jede Person hat genau eine Bestellung. |
|1:n|Der Primärschlüssel ist eindeutig, tritt in der bezogenen Tabelle 0..n mal auf. **Beispiel:** Jede Person kann keine, eine oder mehrere Bestellungen haben. |
|n:n|Jeder Datensatz von beiden Tabellen kann zu beliebig vielen Datensätzen (oder auch zu keinem Datensatz) stehen. Meist wird für diesen Typ eine dritte Tabelle verwendet, welche als Zuordnungs- bzw. Verknüpfungstabelle angelegt wird, da andernfalls keine direkte Verbindung hergestellt werden kann. |
https://www.ibm.com/docs/de/control-desk/7.6.1.2?topic=structure-database-relationships
#### 3.1.1 Anlegen von Tabellen
Der Umgang von relationalen Datenbanken erfolgt mittels SQL. Folgend ein Beispiel zum Anlegen einer Tabelle mit Attributen.
```
CREATE TABLE Bildungsstaette (
ID INT PRIMARY KEY NOT NULL,
Name VARCHAR(255) NOT NULL,
Anschrift VARCHAR(255),
Art VARCHAR(100)
);
```
#### 3.1.2 SQL - Abfrage von relationalen Datenbanken
Für die Verwaltung und Abfrage wird SQL (Structured Query Language) verwendet.
Mit dieser Syntax können Tabellen erstellt, Daten eingefügt, aktualisiert und gelöscht und Daten abgefragt werden.
**Anzeige aller Attribute einer Tabelle:**
```
SELECT * FROM table_name;
```
**Anzeige definierter Attribute einer Tabelle:**
```
SELECT column1, column2 FROM table_name;
```
**Gefilterte Anzeige einer Tabelle:**
```
SELECT * FROM table_name WHERE condition;
```
**Daten aus mehreren Tabellen abrufen (Join):**
```
SELECT t1.column1, t2.column2
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id;
```
### 3.2 Graphdatenbank
Eine Graphdatenbank basiert auf dem Graphenkonzept. \
Ein Graph besteht aus Knoten und Kanten (Beziehungen), welche die Verbindungen zwischen den Knoten darstellen. \
Die Stärke der Graphdatenbank liegt in der Darstellung von komplexen Beziehungen.
**Knoten:** Jeder Knoten repräsentiert eine Entität bzw. Objekt. Jeder Knoten hat eine eindeutige ID oder Bezeichner, um auf diesen zugreifen zu können. Es können auch Attribute hinterlegt werden, um zusätzliche Informationen zu speichern, wie z.B. Geburtsjahr, Wohnort einer Person.
**Kanten:** Die Kanten verbinden die Knoten und repräsentieren damit die Beziehungen unter den Objekten. Die Kanten können gerichtet und ungerichtet sein. Bei einer gerichteten Beziehung muss die Richtung vom Quell- zum Zielknoten beachtet werden, wohingegen eine ungerichtete Kante eine symmetrische Beziehung darstellt. \
*gerichtete Beziehung:* Ein Unternehmen ist abhängig vom Bericht des Wirtschaftsprüfers. \
*ungerichtete Beziehung:** Unternehmen A arbeitet gemeinsam mit Unternehmen B an einem Projekt.
**Label:** Label werden verwendet, um die Knoten zu kategorisieren/gruppieren. Ein Knoten kann auch mehrere Label besitzen, um die Zugehörigkeit an verschiedenen Kategorien darzustellen (z.B. Unternehmensbranche).
#### 3.2.1 Erstellung eines Datensatzes
1. Knotenerstellung: Es wird zuerst ein Knoten erstellt, der die Entität repräsentiert.
2. ID: Der Knoten benötigt eine eindeutige Identifikationsnummer, welche automatisch erzeugt oder manuell festgelegt werden kann.
3. Knoten einfügen: Wenn die beiden notwendigen Elemente (Knoten und ID) festgelegt sind, kann der Knoten eingefügt werden.
4. Beziehungen/Kanten festlegen: Wenn der Knoten Beziehungen zu anderen Knoten hat, können diese hinzugefügt werden.
**Beispiel:**
Folgender Code legt in neo4j zwei Knoten und die entsprechenden Beziehungen an.
```
CREATE (:University {id: 4711, name: 'FH SWF - Iserlohn'}),
(:University {id: 1234, name: 'FH SWF - Meschede'})
WITH *
MATCH (u1:University {id: 4711}), (u2:University {id: 1234})
CREATE (u1)-[:cooparates_with]->(u2),
(u2)-[:cooparates_with]->(u1)
```
![Graph_example](images/Graph.png)
#### 3.2.2 Cypher - Abfrage von Graphdatenbanken
Um Daten abzufragen wird die Abfragesprache Cypher verwendet.\
Es werden folgend nur einige grundlegende Befehle gezeigt.\
**Abfrage aller Knoten**
```
MATCH (n)
RETURN n
```
**Abfrage aller Kanten/Beziehungen**
```
MATCH ()-[r]-()
RETURN r
```
**Abfrage von Knoten mit definierten Eigenschaften**
```
MATCH (n:Label)
WHERE n.property = value
RETURN n
```
**Beziehung zwischen zwei Knoten abfragen**
```
MATCH (n1)-[r]->(n2)
WHERE n1.property = value1 AND n2.property = value2
RETURN r
```
### 3.3 Zeitseriendatenbank
Zeitserien fallen überall dort an, wo eine Metrik zeitlich betrachtet wird, wie z.B. Umsatz oder EBIT.
D.h. zu jedem Messwert gibt es einen zeitlich zugeordneten Zeitstempel, wobei die einzelnen Zeitpunkte zu einer Serie zusammengefasst werden, um den Zusammenhang zu betrachten. \
Diese Datenbanken sind spezialisiert auf die Speicherung, Verwaltung und Abfrage von Zeitserien. \
Die folgenden Erklärungen beziehen sich auf die InfluxDB.
**Bucket:** Der Bucket separiert Daten in verschiedene Speicher und ist mit der Datenbank bei relationalen Datenbanken vergleichbar.
**Datapoint:** Unter dem Bucket werden die Datenpunkte gespeichert. Ein Datapoint setzt sich aus mehreren Elementen zusammen, welche erorderlihc oder optional sind:
|**Element**|**Eigenschaft**|
|---|---|
|Measurement |Datentyp: String<br>Leerzeichen sind verboten<br>Max. 64kB|
|Tags| Sind optional<br> Bestehen aus einem Key/Value-Paar <br> Datentyp: String <br>Leerzeichen sind verboten <br> Max. 64 kB|
|Fields| Min. 1 Field=value Paar wird benötigt <br> Nicht alle Felder müssen in jedem Punkt vorhanden sein <br> Datentypen: Float, String, Integer, Boolean|
|Timestamp| Sind optional <br>Influx schreibt standardmäßig die Systemzeit als Zeitstempel <br>Genauigkeit kann eingestellt werden (Default: Nanosekunden)|
#### 3.3.1 Erstellung eines Datensatzes
Die Einrichtung von Zeitseriendatenbanken erfolgt mit der CLI von Influx.
**Anlegen eines Buckets:**
```
CREATE DATABASE finance
```
#### 3.3.2 FluxQuery
Zur Abfrage von Datenpunkten gibt es FluxQuery, welche sich stark an SQL orientiert. \
**Abrufen aller Daten aus Bucket:**
```
from(bucket: "my-bucket")
```
**Festlegen des Zeitbereich:**
```
range(start: -1h, stop: now())
```
**Filtern nach Bedingungen:**
```
filter(fn: (r) => r._measurement == "temperature")
```
**Transformieren von Datenpunkten:**
```
map(fn: (r) => ({r with temperatureF: r.temperature * 2.34 + 123}))
```
### 3.4 Dokumenten Datenbank <a name="3.4"></a>
Eine Dokumentendatenbank ist ein System, welches für das Speichern von Dokumenten entwicklet wurde. Es gibt verschiedene Arten von Dokumenten, wie z.B. Textdateien (JSON, HTML, XML) oder PDF.
Es muss kein Schema für die Dokumente festgelegt werden, dadurch ist es möglich Dokumente mit verschiedenen Datenfeldern zu speichern.
Gleiche oder ähnliche Dokumente werden gemeinsam in *Collections* gespeichert.
Die wichtigsten Elemente einer Dokumenten-Datenbank sind:
**Database:** Unter Database versteht man einen Container, unter welchem Dokumente gespeichert werden. Dies dient der Isolierung bzw. logischen Trennung von Daten.
**Collection:** Collections werden verwendet, um Dokumente mit ähnlichen Eigenschaften zusammenzufassen. Da Dokumenten-Datenbanken schemenlos sind, dienen die Collections der Organisation.
**Document:** Das Dokument ist ein einzelnes Datenobjekt und die kleinste Einheit in einer Dokumenten-DB. Ein Dokument kann z.B. ein JSON mit einer eigenen internen Struktur.
![Document_DB](images/Document_DB.PNG)
#### 3.4.1 Erstellen einer Collection / Ablegen von Dokumenten
Folgend ein Code-Snippet zum Verbinden mit der Datenbank, Anlegen einer Collection und ablegen von Dokumenten.
``` python
from pymongo import MongoClient
# Verbindung zur MongoDB-Datenbank herstellen
client = MongoClient('mongodb://localhost:27017')
# erstelle ein Cleint-Objekt zur Datenbank
db = client['transparenz']
# Collection erstellen
collection = db['Tagesschau_API']
# Beispiel-Dokumente einfügen
doc1 = {
'title': 'BASF wird verkauft!',
'content': 'BASF wird an Bayer AG verkauft',
'date': '2023-06-22'
}
doc2 = {
'title': 'Bayer Aktie erreicht Rekordniveau',
'content': 'Aufgrund des Zukaufs von BASF.....',
'date': '2023-06-23'
}
# Dokumente in die Collection einfügen
collection.insert_one(doc1)
collection.insert_one(doc2)
# Verbindung zur Datenbank schließen
client.close()
```
### 3.5 Aufbau einer Datenbank
Vor dem Aufbau einer relationalen Datenbank sollten planerische Schritte durchgeführt werden, um ein System zu entwerfen, dass den Anforderungen gerecht wird. \
Die wichtigsten Schritte sind:
**Anforderungsanalyse:** Identifikation und Definition von Anforderungen an die Datenbank durch Betrachtung des Anwendungsfalls.
**Datenmodell:** Analysieren der Strukturen und Beziehungen, die sich aus der Anforderungsanalyse ergeben. Auswahl eines Datenbankmodells, welches am besten geeignet ist.
**Tabellenentwurf:** Basierend auf den identifizierten Anforderungen wird die Tabellenstruktur der Datenbank entworfen. Für jede Tabelle werden Spaltennamen, Datentyp und mögliche Einschränkungen wie Primärschlüssel und Fremdschlüssel definiert.
**Erstellung der Tabellen:** Wenn der Tabellenentwurf schlüssig ist und bereits diskutiert wurde, können die Tabellen erstellt werden. Es werden die zuvor festgelegten Bezeichner, Datenytpen und Constraints hinzugefügt.
**Beziehungen festlegen:** Um die Beziehungen zwischen Tabellen festzulegen, werden Fremdschlüssel verwendet. Mit Fremdschlüsseln verknüpft man Tabellen mit den Primärschlüsseln anderer, abhängiger Tabellen.
## 4. Datenbanken Transparenzregister
Nachdem die Datencluster identifiziert wurden, welche für das Transparenzregister notwendig sind, wurde Rechereche zu den benötigten Datenquellen betrieben. \
Es gibt verschiedene Quellen, mit unterschiedlichen Schnittstellen bzw. Zugriff auf die Daten, z.B. mit API´s oder über Web Scrapping.
Es wurde eine Architektur definiert, welche den Aufbau der späteren Software skizziert:
![High_level_design](images/HLD.png)
Mittels geeigneter Techniken werden Daten aus diversen Quellen extrahiert (Data Extraction) und in der Staging DB gespeichert.
Mit unterschiedlichen Daten-Extraktionspipelines (Dazta Loader, Sentiment Analysis, Graph Analysis) werden die Daten aus der Staging DB verarbeitet und die strukturierten und aufbereiteten Daten in der Production DB abgelegt. \
Das Frontend kann auf diese strukturierten Daten zugreifen, um diese zu visualisieren.
### 4.1 Production DB - relationales Datenbankmodell
Für die Production DB ist eine relationale Datenbank vorgesehen, da diese die Daten organisiert und durch Verwendung von definierten Schemata strukturiert. \
Diese Strukturen erleichtern die Wartung und Integration zwischen Back- und Frontend.
![Relationales Modell](images/DB_Schema.png)
Zentrales Element ist die Stammdatentabelle **company**, welche einen zusammengesetzten Primärschlüssel aus der Nummer des Handelsregister und dem zuständigen Amtsgericht bildet. \
Die Handelsregisternummer ist nicht eindeutig und wird deutschlandweit mehrfach vergeben, allerdings nur einfach unter einem Amtsgericht.
Es schließt sich die Tabelle **finance** an, in welcher die Finanzdaten persisitiert werden. Diese steht in einer 1:n Beziehung zur Unternehmenstabelle, da ein Unternehmen viele Finanzdaten haben kann und jeder Datensatz genau einem Unternehmen zugewiesen ist. \
Die einzelnen Metriken wurden als Attribute definiert, wodurch es viele NULL-Werte in jeder Zeile gibt. Vorteilhaft bei dieser Notation ist allerdings, dass die Metriken durch den Spalztenbezeichner eindeutig sind.
Die Tabelle **Sentiment** speichert die Stimmungsdaten zu einem Unternehmen. Auch hier besteht eine 1:n Beziehung zu der Unternehmenstabelle. Es gibt einen eigenen Enumeration-Typ, der die Art der Stimmungsdaten festlegt.
Die Tabelle **district_court** speichert die Amtsgericht, unter welchen die Unternehmen registriert sind. Diese Information ist wichtig, um mit der Handelsregisternummer und dem Amtsgericht ein Unternehmen eindeutig zu identifizieren.
Die Tabelle **person** speichert Personen, welche unterschiedliche Beziehungen zu Unternehmen haben können. Daraus ergibt sich eine n:m Beziehung (many-to-many), da jede Person mehrere Beziehungen zu einem Unternehmen haben kann bz. jedes Unternehmen mehrfach mit einer Person in Verbindung steht. \
Um diese Relation aufzulösen, wird eine Beziehungstabelle **person_relation** benötigt, um die n:m Beziehung auf zwei 1:n Beziehungen zu reduzieren. Diese enthält die Fremdschlüssel der bezogenen Tabellen, um die Beziehung zu modellieren.
Abschließend gibt es noch die Tabelle **company_relation**, welche die Verbindung zwischen Unternehmen modelliert. Hierfür wurde ein Enumaration-Typ erzeugt, welcher die Art der Beziehung angibt (wird_beliefert_von, arbeitet_mit, ist_beteiligt_an, hat_Anteile_an).
### 4.2 Staging DB
Die Staging DB ist eine dokumentbasierte Datenbank zu Speicherung von unstrukturierten und semi-strukturierten Daten. Sie dient als Zwischenspeicher oder "Rohdatenbank" für die Extraktions-Pipelines. \
Aufgaben der Staging-DB:\
**1. Datenvorbereitung:** Sammlung und Speicherung von Rohdaten aus verschiedenen Quellen\
**2. Überprüfung:** Entsprechen die Daten den Anforderungen ggfs. Ermittlung von Fehlern oder Inkonsistenzen\
**3. Testumgebung:** Die Rohdaten aus der Staging DB können mehrfach verwendet werden, um verschiedene Szenarien und Funktionalitäten der Extraktionspipelines zu erproben\
**4. Backup:** Wenn sich im Laufe des Projekts eine Datenquelle ändert (z.B. Struktur oder Zugang zum Bundesanzeiger) sind die Daten weiterhin verfügbar oder wenn es Änderungen am Schema der Production DB gibt, kann durch eine Änderung am Data Loader das neue Tabellenschema implementiert werden
Die Staging DB erhält Collections der unterschiedlichen Quellen, unter welchen die Dokumente gespeichert werden.
![Staging_DB](images/Staging_DB.PNG)
### 4.3 SQL Alchemy
SQL Alchemy ist eine Python Bibliothek, um mit relationalen Datenbanken zu kommunizieren.
Dieses ORM (Object-Relational-Mapping) Framework bildet die Datenbanktabellen als Pythonklassen an und vereinfacht damit das Erstellen, Lesen, Aktualsieren und Löschen von Daten aus Pythonanwendungen.\
Wichtige Eigenschaften:
- erleichterte Entwicklung: durch die Abbildung von Datenbanktabellen als Pythonklassen wird durchgängig Pythoncode verwendet
- Flexibilität: Durch Verwendung eines Backend-Treibers für die unterschiedlichen Datenbanken, muss der Code nicht geändert werden. Wenn eine andere Datenbank zum Einsatz kommt, muss nur der Treiber ausgetauscht werden (Plattformunabhängigkeit)
- Erhöhung der Produktivität: Es werden keine Kompetenzen für SQL Programierung und Wartung benötigt.
## 5. Proof of Concept
### 5.1 Docker
Für die Umsetzung der bisher vorgestellten theoretischen Betrachtungen wird ein Docker Container verwendet. Dieser Container beinhaltet eine relationale und eine dokumentbasierte Datenbank. \
Mit Jupyter Notebooks soll die Implementierung und Befüllung der Datenbank erprobt werden, um als Startpunkt für die anstehende Softwareentwicklung zu dienen.
```yaml
version: "3.8"
services:
db:
image: postgres:14.1-alpine
container_name: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- ./PostgreSQL:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4:7.2
container_name: pgadmin4_container
restart: always
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: admin@fh-swf.de
PGADMIN_DEFAULT_PASSWORD: admin
volumes:
- ./pgadmin:/var/lib/pgadmin
mongodb:
image: mongo:7.0.0-rc4
ports:
- '27017:27017'
volumes:
- ./mongo:/data/db
```
|Eintrag|Beschreibung|
|---|---|
|version|Version von docker-compose|
|services|Definition der Services, welche gestartet werden|
|Option|Beschreibung|
|---|---|
|image|Angabe des zu verwendenden Image|
|restart|Option, um Container erneut zu starten, falls dieser gestoppt wurde|
|environment|Umgebungsvariablen, wie z.B. Username und Passwort|
|Ports|Mapping des Containerports zum Port der Hostmaschine|
|volumes|Angabe eines Volumes zum Persistieren der Containerdaten|
Beim Ausführen der docker-compose werden in diesem Verzeichnis Ordner für die Datenablage angelegt. Da zum Verfassungszeitpunkt noch nicht feststeht, wie im Projekt der Datenaustausch stattfindet, könnten diese Ordner bzw. die Volumes einfach untereinander ausgetauscht werden.
Zum Starten des Containers den folgenden Befehl ausführen:
```
docker-compose -f docker-compose.yml up
```
### 5.2 PG Admin
PG Admin ist ein grafisches Administartionstool für Postgres. Wenn der Container gestartet ist, kann man sich über http://localhost:5050/browser/ mit dem Web-UI verbinden. \
Dieses Tool dient lediglich der Überprüfung von Commits der Tabellen und daten.
Die Anmeldedaten lauten:
>User: admin@fh-swf.de \
>Passwort: admin
![PGAdmin_landing](images/PG_Admin_Board.PNG)
Zuerst muss der Server angelegt werden, dafür einen Rechtsklick auf Server und den Button „Register“ auswählen. Im geöffneten Dialog muss die Konfiguration festgelegt werden.
|Reiter|Parameter|Wert|
|---|---|---|
|General|Name|postgres|
|Connection|Host name/address|postgres (siehe docker-compose)|
|Connection|Username|postgres (siehe docker-compose)|
|Connection|Password|postgres (siehe docker-compose)|
![PGAdmin_Conf](images/PG_Admin_Conf.PNG)
### 5.3 Erstellen von Mock Daten
**Unternehmensstammdaten:**\
Um das Konzept und den Umgang mit den ausgewählten Datenbanken zu überprüfen, sollen Daten in die Datenbank geschrieben werden. Hier für wurde auf Statista recherchiert, welches die größten deutschen Unternehmen sind, um einen kleinen Stamm an Unternehmensdaten zu generieren (01_Stammdaten_Unternehmen_HR.csv). /
Die Relation zu den Amtsgerichten ist frei erfunden und wurde nicht recherchiert.
![biggest_companies](images/Statista_Companies.png)
**Amtsgerichte:**
Die Amtsgerichte sind aus https://www.gerichtsverzeichnis.de/ extrahiert, wobei lediglich 12 Amstgerichte eingefügt wurden (Amtsgerichte.csv).
**Finanzdaten:** Es wurden für drei Unternehmen (EON, Telekom, BASF) die Finanzdaten bezüglich Umsatz, Ebit und Ebitda auf Statista ermittelt und als separate Dateien gespeichert (BASF_data.csv, Telekom_data.csv, EON_data.csv).
**Personen:** Die Personentabelle ist frei erfunden. Mit einer Onlinebibliothek wurde 1000 Vor- und Nachnamen erzeugt und gespeichert (Person1000.csv).
**Personen-Unternehmens-Beziehung:** Diese Tabelle ist zufällig erzeugt und dient lediglich für weitere Experimente. Hierfür wurde ein Python-Skript erstellt, welches mit der mehreren Random-Funktionen die Beziehungen zufälloig generiert.
**Sentiment:** keine Mock-Daten vorhanden
**Unternehmens-Unternehmens-Beziehung:** keine Mock-Daten vorhanden
### 5.4 Anlegen der relationalen Tabellen
Für das Verbinden zu der Postgre Datenbank und das Anlegen der Tabellen wird ein Jupyter Notebooks verwendet (11_Create_Tables_with_SQL-Alchemy.ipynb). \
Die benötigten Bibliotheken werden importiert und das Erstellen von Tabellen als Python-Objekte beschrieben. \
Nach dem Anlegen der Tabellen werden die Mock-Daten in die Datenbank geschrieben. \
Eine Überprüfung, ob die Daten abgelegt wurden ist sehr einfach mit PGAdmin möglich.
![finance_data](images/finance_data.PNG)
Das grundsätzliche Vorgehen bei der Verwendung von SQLAlchemy ist:
1. Verbindung zur Datenbank herstellen
```python
from sqlalchemy import create_engine
# Connection URL für postgres
url = URL.create(
drivername="postgresql",
username="postgres",
password="postgres",
host="localhost",
database="postgres")
#Verbindung zur Datenbank
engine = create_engine(database_url)
```
2. Erstellen einer Klasse als Repräsentation der Tabelle.
> Es ist üblich und empfehlenswert die Klassendefinitionen in einer separaten Datei vorzunehmen (model.py), damit diese auch in andere Modulen importiert und verwendet werden können
```python
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class MyClass(Base):
__tablename__ = 'company'
id = Column(Integer, primary_key=True)
name = Column(String)
city = Column(String)
```
3. Starten einer Session/Verbindung, um Daten lesen und schreiben zu können
```python
from sqlalchemy.orm import sessionmaker
#starte die Verbindung
Session = sessionmaker(bind=engine)
session = Session()
```
4. Daten abfragen
```python
# Alle Daten der Klasse/Tabelle abrufen
data = session.query(MyClass).all()
```
5. Daten speichern, wenn z.B. Datensätze in die Datenbank geschrieben werden, muss dies mit der **commit()**-Funktion ausgeführt werden. Das folgende Snippet iteriert durch einen Dataframe, um jede Zeile in die Datenbank zu schreiben.
```python
for i in range(len(df)):
#get data from dataframe
myNewData=MyClass(
name = str(df['Name'].iloc[i]),
city = str(df['Surname'].iloc[i])
)
session.add(myNewData)
session.commit()
```
### 5.5 Abfragen der Datenbank
Der folgende Code-Snippet zeigt, wie man eine Abfrage gestaltet.
```python
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
# Erstelle eine SQLite-Datenbankdatei oder gib den Pfad zur vorhandenen Datei an
url = URL.create(
drivername="postgresql",
username="postgres",
password="postgres",
host="localhost",
database="postgres"
)
#Erstelle eine Engine zur Verbindung mit der Datenbank
engine = create_engine(url)
#Erstelle eine Klasse, die eine Tabelle repräsentiert
Base = declarative_base()
class Company(Base):
__tablename__ = 'company'
hr = Column(Integer(), nullable=False, primary_key=True)
court_id = Column(Integer, ForeignKey("district_court.id"), nullable=False, primary_key=True)
name = Column(String(100), nullable=False)
street = Column(String(100), nullable=False)
zip = Column(Integer(), nullable=False)
city = Column(String(100), nullable=False)
sector = Column(String(100), nullable=False)
__table_args__ = (
PrimaryKeyConstraint('hr', 'court_id', name='pk_company_hr_court'),
)
#starte die Verbindung zur Datenbank
Session = sessionmaker(bind=engine)
session = Session()
#Abfrage aller Spalten der Tabelle/Klasse Company
Comps = session.query(Company).all()
#Gebe die Spalten name, hr und court_id der Tabelle company aus
for comp in Comps:
print(comp.name, comp.hr, comp.court_id)
```
<div style="page-break-after: always;"></div>
## 6. Zusammenfassung
Die vorliegende Seminararbeit behandelt das Thema der Datenspeicherung mit Fokus auf dem Projekt Transparenzregister. Es wurde erläutert, warum Daten gespeichert werden und welche Art von Daten es gibt.\
Für das Projekt sind Daten und die Speicherung eine Kernkomponente, um die geforderten Analysen bezüglich Verflechtungen, unternehmerischen Erfolgs und Aussenwahrnehmung zu ermöglichen.
Es wurden Datencluster definiert und entsprechende Quellen gefunden, welche über geeignete Extraktionspipelines die erforderlichen Informationen extrahieren. Zum Speichern dieser extrahierten Daten wurde ein relationales Modell erarbeitet, um ein Konzept für die folgende Implementierung zu haben.
Um das Konzept zu überprüfen, wurde ein Proof of Concept durchgeführt, um geeignete Werkzeuge zu erproben und das Modell auf seine Tauglichkeit zu überprüfen. \
Hierbei wurde ein Dockercontainer eingesetzt, um die Datenbankumgebung bereitzustellen. Mithilfe der SQL-Alchemy-Bibliothek, wurden die Tabellen innerhalb der Datenbank erstellt.\
Anschließend wurden die Tabellen mit eigenen Mock-Daten befüllt, um die Funktionalität der Datenbank zu testen.
Insgesamt bietet die Seminararbeit einen umfassenden Überblick über die Bedeutung der Datenspeicherung und die verschiedenen Arten von Datenbanken.
Es wurde ein erstes relationales Modell und ein High level design für die Softwarearchitektur erarbeitet.
Diese Arbeit hat grundsätzliche Fragen geklärt und Verständnis für die Datenspeicherung im Zusammenhang mit dem Projekt Transparenzregister geschaffen und unterstützt die weitere Entwicklung.
<div style="page-break-after: always;"></div>
## Quellen
Klug, Uwe: SQL-Der Einstieg in die deklarative Programmierung, 2. Auflage, Dortmund, Springer, 2017\
Steiner, Rene: Grundkurs relationale Datenbanken, 10. Auflage, Wiesbaden, Springer, 2021\
https://backupchain.de/daten-backup-tipps-3-wie-oft-daten-sichern/ \
https://www.talend.com/de/resources/strukturierte-vs-unstrukturierte-daten/ \
https://www.sqlservercentral.com/articles/creating-markdown-formatted-text-for-results-from-sql-server-tables \
https://www.sqlalchemy.org/ \
https://medium.com/@arthurapp98/using-sqlalchemy-to-create-and-populate-a-postgresql-database-with-excel-data-eb6049d93402
@@ -0,0 +1,18 @@
### Action List "Datenspeicherung
- [x] Erstelle ein relationales Schema für Unternehmens- und Finanzdaten, bei welchem die Jahre berücksichtigt werden
- [x] Erstelle docker-compose für postgresgl, pgadmin, neo4j
- [x] Erstelle eine Kurzanleitung für die Handhabung von Docker
- [x] erstelle Jupyter Notebook zum Verbinden mit Datenbank und Anlegen von Tabellen
- [x] Recherchiere nach den 10 größten deutschen Unternehmen und ermittel Finanzdaten (Umsatz, Ebit, Ebitda)
- [x] Erstelle ein Jupyter Notebook um diese Daten in die Datenbank zu übertragen
- [x] Erstelle ein Jupyter Notebook, um die Daten abzufragen
- [x] Erstelle ein Schema für Stimmungsdaten
- [x] Erstelle ein Schema für Verflechtungen
- [ ] Erzeuge Beispieldaten für Stimmung
- [x] Erzeuge Beispieldaten für Verflechtung
- [ ] Erstelle eine Prototypen GUI in Mercury zur einfachen Abfrage von Daten
- [ ] Verwende SQLalchemy, um eine Verbindung zur Datenbank aufzubauen, Tabellen anzulegen und Daten zu schreiben -->
- [x] Ersetze den enumeration type in den Finanzdaten gegen einzelne (eindeutig bezeichnete) Spalten
- [x] Lade das DB Schema hoch, um es den anderen Teammitgliedern bereitzustellen
- [ ]
@@ -0,0 +1 @@
<mxfile host="Electron" modified="2023-06-24T09:49:24.003Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/19.0.3 Chrome/102.0.5005.63 Electron/19.0.3 Safari/537.36" etag="fJkkMo-DELtB61nQZ3iU" version="19.0.3" type="device"><diagram id="R2lEEEUBdFMjLlhIrx00" name="Page-1">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 truncated
@@ -0,0 +1 @@
<mxfile host="Electron" modified="2023-06-09T06:52:32.151Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/19.0.3 Chrome/102.0.5005.63 Electron/19.0.3 Safari/537.36" etag="YzJ30O3iCiKXb3qmuW1k" version="19.0.3" type="device"><diagram id="M31xxMy7zny7NdG5GnKM" name="Seite-1">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</diagram></mxfile>
@@ -0,0 +1,70 @@
https://geshan.com.np/blog/2021/12/docker-postgres/
https://belowthemalt.com/2021/06/09/run-postgresql-and-pgadmin-in-docker-for-local-development-using-docker-compose/
https://thibaut-deveraux.medium.com/how-to-install-neo4j-with-docker-compose-36e3ba939af0
https://towardsdatascience.com/how-to-run-postgresql-and-pgadmin-using-docker-3a6a8ae918b5
# Installation Docker Desktop
## Starten eines Containers:
> docker run --name basic-postgres --rm -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=4y7sV96vA9wv46VR -e PGDATA=/var/lib/postgresql/data/pgdata -v /tmp:/var/lib/postgresql/data -p 5432:5432 -it postgres:14.1-alpine
Dieser Befehl startet einen Container mit dem Postgres14.1-alpine Image, welches von Dockerhub geladen wird. Der Container läuft unter dem Namen basic-postgres
| Syntax | Attribut | Beschreibung |
| ----------- | ----------- | ----------- |
| basic-postgres | --name | Angabe des Containernamens|
| | --rm | Bei Beendigung des Containers wird das erstellte Dateisystem entfernt|
| |-e| Verwende Umgebungsvariablen |
| POSTGRES_USER | | Umgebungsvariable für den anzulegenden Benutzer: postgres|
|POSTGRES_PASSWORD| | Umgebungsvariable für das anzulegende Passwort: 4y7sV96vA9wv46VR |
| PGDATA | | Umgebungsvariable für den Ort der Datenbank|
| | -v | Einzubindendes Volumen: /tmp:/var/lib/postgresql/data |
| |-p | Angabe des Containerports und des öffentlich zugänglichen Ports |
| | -it | Interactive: der Container bleibt aktiv, damit mit diesem interagiert werden kann |
Mit einem zweiten Terminalfenster kann man auf die Bash des Containers öffnen und auf die Datenbank zugreifen.
> docker exec -it basic-postgres /bin/sh
Die folgenden Befehle starten die Postgres CLI, Ausgabe aller Datenbanken und beendet die CLI.
> Psql –username postgres \
> \l \
Exit
Der Container kann durch Betätigung von STRG + C beendet werden.
## Docker Compose
Das oben erklärte Vorgehen zum Starten eines Containers, festlegen der Umgebungsvariablen und zusätzliche verlinken zu einer Anwendung wird nun in einer yml-Datei beschrieben, um die Verwaltung und das Erstellen zu vereinfachen.
| | | Beschreibung |
| ----------- | ----------- | ----------- |
|Version | | Version von docker-compose |
|Services| |Definition der Services, wobei jeder ein eigenen docker-run Befehl ausführt.|
| | image | Angabe des zu verwendenden Images |
| | restart | Option um Container erneut zu starten, falls dieser gestoppt wird |
| | Environment | Umgebungsvariablen: Username und Passwort |
| | Ports | Mapping des Containerports zum Port der Hostmaschine |
| | Volumes | Angabe eines Volumes zum Persistieren der Containerdaten, damit nach einem Neustart die Daten wieder verfügbar sind |
Nun kann der Container mittels Docker-Compose gestartet werden.
> docker-compose -f /.../docker-compose-postgres.yml up
## pgAdmin
pgAdmin ist ein grafisches Administrationswerkezug für postgreSQL und macht die oben gezeigte Administration komfortabler. \
Erreichbar ist das Interface über: http://localhost:5050 \
Als Login werden die Daten aus der docker-compose verwendet:
>User: admin@fh-swf.de
>Passwort: admin
### Anlegen eines Servers
Zuerst muss der Server angelegt werden, dafür einen Rechtsklick auf Server und den Button „Register“ auswählen. \
Im geöffneten Dialog muss die Konfiguration festgelegt werden.
| Reiter | Parameter | Wert |
| ----------- | ----------- | ----------- |
| General| Name | postgres_docker |
| Connection | Host name/address | local_pgdb (siehe docker-compose) |
| Connection | Username | postgres (siehe docker-compose) |
| Connection | Password | postgres (siehe docker-compose) |
@@ -0,0 +1,13 @@
HR;Amtsgericht;Name;Strasse;PLZ;Stadt;Branche
12334;2;Volkswagen;Berliner Ring 2;38440;Wolfsburg;Automobil
64566;2;Mercedes-Benz Group;Mercedesstraße 120;70372;Stuttgart;Automobil
5433;3;Allianz;Reinsburgstraße 19;70178;Stuttgart;Versicherung, Finanzdienstleistung
12435;4;BMW Group;Petuelring 130;80809;München;Automobil
12336;5;Deutsche Telekom;Landgrabenweg 151;53227;Bonn;Telekommunikation, Informationstechnologie
559;6;Deutsche Post DHL Group;Charles-de-Gaulle-Str. 20;53113;Bonn;Logistik
555;7;Bosch Group;Robert-Bosch-Platz 1;70839;Gerlingen-Schillerhöhe;Kraftfahrzeugtechnik, Industrietechnik, Gebrauchsgüter, Energie- und Gebäudetechnik
12384;8;BASF;Carl-Bosch-Straße 38;67056;Ludwigshafen;Chemie
64345;9;E.ON;Arnulfstraße 203;80634;München;Energie
4344;10;Munich Re Group;Königinstr. 107;80802;München;Versicherung
866;11;Siemens;Werner-von-Siemens-Straße 1;80333;München;Automatisierung, Digitalisierung
9875;12;Deutsche Bahn;Potsdamer Platz 2;10785;Berlin;Transport, Logistik
1 HR Amtsgericht Name Strasse PLZ Stadt Branche
2 12334 2 Volkswagen Berliner Ring 2 38440 Wolfsburg Automobil
3 64566 2 Mercedes-Benz Group Mercedesstraße 120 70372 Stuttgart Automobil
4 5433 3 Allianz Reinsburgstraße 19 70178 Stuttgart Versicherung, Finanzdienstleistung
5 12435 4 BMW Group Petuelring 130 80809 München Automobil
6 12336 5 Deutsche Telekom Landgrabenweg 151 53227 Bonn Telekommunikation, Informationstechnologie
7 559 6 Deutsche Post DHL Group Charles-de-Gaulle-Str. 20 53113 Bonn Logistik
8 555 7 Bosch Group Robert-Bosch-Platz 1 70839 Gerlingen-Schillerhöhe Kraftfahrzeugtechnik, Industrietechnik, Gebrauchsgüter, Energie- und Gebäudetechnik
9 12384 8 BASF Carl-Bosch-Straße 38 67056 Ludwigshafen Chemie
10 64345 9 E.ON Arnulfstraße 203 80634 München Energie
11 4344 10 Munich Re Group Königinstr. 107 80802 München Versicherung
12 866 11 Siemens Werner-von-Siemens-Straße 1 80333 München Automatisierung, Digitalisierung
13 9875 12 Deutsche Bahn Potsdamer Platz 2 10785 Berlin Transport, Logistik
@@ -0,0 +1,13 @@
HR;Amtsgericht;Name;Strasse;PLZ;Stadt;Branche
12334;2;Volkswagen;Berliner Ring 2;38440;Wolfsburg;Automobil
64566;2;Mercedes-Benz Group;Mercedesstraße 120;70372;Stuttgart;Automobil
5433;3;Allianz;Reinsburgstraße 19;70178;Stuttgart;Versicherung, Finanzdienstleistung
12334;4;BMW Group;Petuelring 130;80809;München;Automobil
12336;5;Deutsche Telekom;Landgrabenweg 151;53227;Bonn;Telekommunikation, Informationstechnologie
555;6;Deutsche Post DHL Group;Charles-de-Gaulle-Str. 20;53113;Bonn;Logistik
555;7;Bosch Group;Robert-Bosch-Platz 1;70839;Gerlingen-Schillerhöhe;Kraftfahrzeugtechnik, Industrietechnik, Gebrauchsgüter, Energie- und Gebäudetechnik
12384;8;BASF;Carl-Bosch-Straße 38;67056;Ludwigshafen;Chemie
64345;9;E.ON;Arnulfstraße 203;80634;München;Energie
4344;1;Munich Re Group;Königinstr. 107;80802;München;Versicherung
866;1;Siemens;Werner-von-Siemens-Straße 1;80333;München;Automatisierung, Digitalisierung
9875;1;Deutsche Bahn;Potsdamer Platz 2;10785;Berlin;Transport, Logistik
1 HR Amtsgericht Name Strasse PLZ Stadt Branche
2 12334 2 Volkswagen Berliner Ring 2 38440 Wolfsburg Automobil
3 64566 2 Mercedes-Benz Group Mercedesstraße 120 70372 Stuttgart Automobil
4 5433 3 Allianz Reinsburgstraße 19 70178 Stuttgart Versicherung, Finanzdienstleistung
5 12334 4 BMW Group Petuelring 130 80809 München Automobil
6 12336 5 Deutsche Telekom Landgrabenweg 151 53227 Bonn Telekommunikation, Informationstechnologie
7 555 6 Deutsche Post DHL Group Charles-de-Gaulle-Str. 20 53113 Bonn Logistik
8 555 7 Bosch Group Robert-Bosch-Platz 1 70839 Gerlingen-Schillerhöhe Kraftfahrzeugtechnik, Industrietechnik, Gebrauchsgüter, Energie- und Gebäudetechnik
9 12384 8 BASF Carl-Bosch-Straße 38 67056 Ludwigshafen Chemie
10 64345 9 E.ON Arnulfstraße 203 80634 München Energie
11 4344 1 Munich Re Group Königinstr. 107 80802 München Versicherung
12 866 1 Siemens Werner-von-Siemens-Straße 1 80333 München Automatisierung, Digitalisierung
13 9875 1 Deutsche Bahn Potsdamer Platz 2 10785 Berlin Transport, Logistik
@@ -0,0 +1,15 @@
Stadt;Name
Aschaffenburg;Amtsgericht Aschaffenburg
Bamberg;Amtsgericht Bamberg
Bayreuth;Amtsgericht Bayreuth
Duesseldorf;Amtsgericht Duesseldorf
Duisburg;Amtsgericht Duisburg
Duisburg;Amtsgericht Duisburg-Hamborn
Duisburg;Amtsgericht Duisburg-Ruhrort
Oberhausen;Amtsgericht Oberhausen
Wuppertal;Amtsgericht Wuppertal
Berlin;Amtsgericht Mitte
Berlin;Amtsgericht Ost
Berlin;Amtsgericht West
Berlin;Amtsgericht Nord
Berlin;Amtsgericht Sued
1 Stadt Name
2 Aschaffenburg Amtsgericht Aschaffenburg
3 Bamberg Amtsgericht Bamberg
4 Bayreuth Amtsgericht Bayreuth
5 Duesseldorf Amtsgericht Duesseldorf
6 Duisburg Amtsgericht Duisburg
7 Duisburg Amtsgericht Duisburg-Hamborn
8 Duisburg Amtsgericht Duisburg-Ruhrort
9 Oberhausen Amtsgericht Oberhausen
10 Wuppertal Amtsgericht Wuppertal
11 Berlin Amtsgericht Mitte
12 Berlin Amtsgericht Ost
13 Berlin Amtsgericht West
14 Berlin Amtsgericht Nord
15 Berlin Amtsgericht Sued
@@ -0,0 +1,25 @@
Company_HR;Company_Court;Jahr;Umsatz;Ebit;EBITDA
;12384;8;1999;29473;;
;12384;8;2000;35946;;
;12384;8;2001;32500;;
;12384;8;2002;32216;;
;12384;8;2003;33361;;
;12384;8;2004;37537;;
;12384;8;2005;42745;5830;
;12384;8;2006;52610;6750;
;12384;8;2007;57951;7316;
;12384;8;2008;62304;6463;9562
;12384;8;2009;50693;3677;7388
;12384;8;2010;63873;7761;11131
;12384;8;2011;73497;8586;11993
;12384;8;2012;72129;6742;10009
;12384;8;2013;73973;7160;10432
;12384;8;2014;74326;7626;11043
;12384;8;2015;70449;6248;10649
;12384;8;2016;57550;6275;10526
;12384;8;2017;61223;7587;10765
;12384;8;2018;60220;5974;8970
;12384;8;2019;59316;4201;8185
;12384;8;2020;59149;-191;6494
;12384;8;2021;78598;7677;11355
;12384;8;2022;87327;6548;10748
1 Company_HR;Company_Court;Jahr;Umsatz;Ebit;EBITDA
2 ;12384;8;1999;29473;;
3 ;12384;8;2000;35946;;
4 ;12384;8;2001;32500;;
5 ;12384;8;2002;32216;;
6 ;12384;8;2003;33361;;
7 ;12384;8;2004;37537;;
8 ;12384;8;2005;42745;5830;
9 ;12384;8;2006;52610;6750;
10 ;12384;8;2007;57951;7316;
11 ;12384;8;2008;62304;6463;9562
12 ;12384;8;2009;50693;3677;7388
13 ;12384;8;2010;63873;7761;11131
14 ;12384;8;2011;73497;8586;11993
15 ;12384;8;2012;72129;6742;10009
16 ;12384;8;2013;73973;7160;10432
17 ;12384;8;2014;74326;7626;11043
18 ;12384;8;2015;70449;6248;10649
19 ;12384;8;2016;57550;6275;10526
20 ;12384;8;2017;61223;7587;10765
21 ;12384;8;2018;60220;5974;8970
22 ;12384;8;2019;59316;4201;8185
23 ;12384;8;2020;59149;-191;6494
24 ;12384;8;2021;78598;7677;11355
25 ;12384;8;2022;87327;6548;10748
@@ -0,0 +1,17 @@
Company_HR;Company_Court;Jahr;Umsatz;Ebit;EBITDA
;64345;9;2007;66912;;
;64345;9;2008;84873;;
;64345;9;2009;79974;;
;64345;9;2010;92863;;
;64345;9;2011;112954;;
;64345;9;2012;132093;7010;
;64345;9;2013;119615;5640;
;64345;9;2014;113095;4700;
;64345;9;2015;42656;3600;
;64345;9;2016;38173;3100;
;64345;9;2017;37965;3100;
;64345;9;2018;30084;2990;4840
;64345;9;2019;41284;3220;5558
;64345;9;2020;60944;3780;6905
;64345;9;2021;77358;4720;7889
;64345;9;2022;115660;5200;8059
1 Company_HR;Company_Court;Jahr;Umsatz;Ebit;EBITDA
2 ;64345;9;2007;66912;;
3 ;64345;9;2008;84873;;
4 ;64345;9;2009;79974;;
5 ;64345;9;2010;92863;;
6 ;64345;9;2011;112954;;
7 ;64345;9;2012;132093;7010;
8 ;64345;9;2013;119615;5640;
9 ;64345;9;2014;113095;4700;
10 ;64345;9;2015;42656;3600;
11 ;64345;9;2016;38173;3100;
12 ;64345;9;2017;37965;3100;
13 ;64345;9;2018;30084;2990;4840
14 ;64345;9;2019;41284;3220;5558
15 ;64345;9;2020;60944;3780;6905
16 ;64345;9;2021;77358;4720;7889
17 ;64345;9;2022;115660;5200;8059
@@ -0,0 +1,203 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "68f82dc2",
"metadata": {},
"outputs": [],
"source": [
"#pip install psycopg2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "db00bbea",
"metadata": {},
"outputs": [],
"source": [
"#pip install --user ipython-sql"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "74ae19d0",
"metadata": {},
"outputs": [],
"source": [
"import psycopg2\n",
"import sql"
]
},
{
"cell_type": "markdown",
"id": "29fdd335",
"metadata": {},
"source": [
"## Verbinde zur Postgre Datenbank im Docker"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "183d5c5f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Database connected successfully\n"
]
}
],
"source": [
"conn = psycopg2.connect(\n",
" host=\"localhost\",\n",
" database=\"transparenz\",\n",
" user=\"postgres\",\n",
" password=\"postgres\")\n",
"\n",
"print(\"Database connected successfully\")"
]
},
{
"cell_type": "markdown",
"id": "e299175a",
"metadata": {},
"source": [
"## Anlegen der Tabelle **Company**\n",
"- Erstellen eines Cursors\n",
"- für einen Primary key benötigt man den Typ \"Serial\""
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "4ae6b45d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Table Created successfully\n"
]
}
],
"source": [
"conn.autocommit = True\n",
"#create a table\n",
"cur = conn.cursor() # creating a cursor\n",
" \n",
"# executing queries to create table\n",
"cur.execute(\"\"\"\n",
"CREATE TABLE company\n",
"(\n",
" ID SERIAL PRIMARY KEY NOT NULL,\n",
" NAME TEXT NOT NULL,\n",
" STREET TEXT NOT NULL,\n",
" ZIP INT NOT NULL,\n",
" CITY VARCHAR(100) NOT NULL,\n",
" SECTOR VARCHAR(200) NOT NULL)\n",
"\"\"\")\n",
" \n",
"# commit the changes\n",
"conn.commit() # <--- makes sure the change is shown in the database\n",
"#conn.close()\n",
"#cur.close()\n",
"print(\"Table Created successfully\")"
]
},
{
"cell_type": "markdown",
"id": "0d59c0e9",
"metadata": {},
"source": [
"## Anlegen der Tabelle **finance**"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "32e46d88",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Table Created successfully\n"
]
}
],
"source": [
"conn.autocommit = True\n",
"#create a table\n",
"cur = conn.cursor() # creating a cursor\n",
" \n",
"# executing queries to create table\n",
"cur.execute(\"\"\"\n",
"CREATE TABLE finance\n",
"(\n",
" FINANCE_ID SERIAL PRIMARY KEY NOT NULL,\n",
" COMPANY_ID INT NOT NULL,\n",
" KIND_OF VARCHAR(50) NOT NULL,\n",
" DATE DATE NOT NULL,\n",
" SUM FLOAT NOT NULL)\n",
"\"\"\")\n",
" \n",
"# commit the changes\n",
"conn.commit() # <--- makes sure the change is shown in the database\n",
"#conn.close()\n",
"#cur.close()\n",
"print(\"Table Created successfully\")"
]
},
{
"attachments": {
"grafik.png": {
"image/png": "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 truncated
}
},
"cell_type": "markdown",
"id": "f910589e",
"metadata": {},
"source": [
"Nach erfolgreichem Anlegen der Tabellen kann dies über pgAdmin kontrolliert werden.\n",
"![grafik.png](attachment:grafik.png)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8b96412a",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,13 @@
Name;Straße;PLZ;Stadt;Branche
Volkswagen;Berliner Ring 2;38440;Wolfsburg;Automobil
Mercedes-Benz Group;Mercedesstraße 120;70372;Stuttgart;Automobil
Allianz;Reinsburgstraße 19;70178;Stuttgart;Versicherung, Finanzdienstleistung
BMW Group;Petuelring 130;80809;München;Automobil
Deutsche Telekom;Landgrabenweg 151;53227;Bonn;Telekommunikation, Informationstechnologie
Deutsche Post DHL Group;Charles-de-Gaulle-Str. 20;53113;Bonn;Logistik
Bosch Group;Robert-Bosch-Platz 1;70839;Gerlingen-Schillerhöhe;Kraftfahrzeugtechnik, Industrietechnik, Gebrauchsgüter, Energie- und Gebäudetechnik
BASF;Carl-Bosch-Straße 38;67056;Ludwigshafen;Chemie
E.ON;Arnulfstraße 203;80634;München;Energie
Munich Re Group;Königinstr. 107;80802;München;Versicherung
Siemens;Werner-von-Siemens-Straße 1;80333;München;Automatisierung, Digitalisierung
Deutsche Bahn;Potsdamer Platz 2;10785;Berlin;Transport, Logistik
1 Name Straße PLZ Stadt Branche
2 Volkswagen Berliner Ring 2 38440 Wolfsburg Automobil
3 Mercedes-Benz Group Mercedesstraße 120 70372 Stuttgart Automobil
4 Allianz Reinsburgstraße 19 70178 Stuttgart Versicherung, Finanzdienstleistung
5 BMW Group Petuelring 130 80809 München Automobil
6 Deutsche Telekom Landgrabenweg 151 53227 Bonn Telekommunikation, Informationstechnologie
7 Deutsche Post DHL Group Charles-de-Gaulle-Str. 20 53113 Bonn Logistik
8 Bosch Group Robert-Bosch-Platz 1 70839 Gerlingen-Schillerhöhe Kraftfahrzeugtechnik, Industrietechnik, Gebrauchsgüter, Energie- und Gebäudetechnik
9 BASF Carl-Bosch-Straße 38 67056 Ludwigshafen Chemie
10 E.ON Arnulfstraße 203 80634 München Energie
11 Munich Re Group Königinstr. 107 80802 München Versicherung
12 Siemens Werner-von-Siemens-Straße 1 80333 München Automatisierung, Digitalisierung
13 Deutsche Bahn Potsdamer Platz 2 10785 Berlin Transport, Logistik
@@ -0,0 +1,330 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "dbd6eae9",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import ipywidgets as widgets\n",
"pd.options.plotting.backend = \"plotly\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8b447b09",
"metadata": {},
"outputs": [],
"source": [
"df=pd.read_csv('01_Stammdaten_Unternehmen.csv', sep=';') "
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5fc7b7d2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>Straße</th>\n",
" <th>PLZ</th>\n",
" <th>Stadt</th>\n",
" <th>Branche</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Volkswagen</td>\n",
" <td>Berliner Ring 2</td>\n",
" <td>38440</td>\n",
" <td>Wolfsburg</td>\n",
" <td>Automobil</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Mercedes-Benz Group</td>\n",
" <td>Mercedesstraße 120</td>\n",
" <td>70372</td>\n",
" <td>Stuttgart</td>\n",
" <td>Automobil</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Allianz</td>\n",
" <td>Reinsburgstraße 19</td>\n",
" <td>70178</td>\n",
" <td>Stuttgart</td>\n",
" <td>Versicherung, Finanzdienstleistung</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>BMW Group</td>\n",
" <td>Petuelring 130</td>\n",
" <td>80809</td>\n",
" <td>München</td>\n",
" <td>Automobil</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Deutsche Telekom</td>\n",
" <td>Landgrabenweg 151</td>\n",
" <td>53227</td>\n",
" <td>Bonn</td>\n",
" <td>Telekommunikation, Informationstechnologie</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Deutsche Post DHL Group</td>\n",
" <td>Charles-de-Gaulle-Str. 20</td>\n",
" <td>53113</td>\n",
" <td>Bonn</td>\n",
" <td>Logistik</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Bosch Group</td>\n",
" <td>Robert-Bosch-Platz 1</td>\n",
" <td>70839</td>\n",
" <td>Gerlingen-Schillerhöhe</td>\n",
" <td>Kraftfahrzeugtechnik, Industrietechnik, Gebrau...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>BASF</td>\n",
" <td>Carl-Bosch-Straße 38</td>\n",
" <td>67056</td>\n",
" <td>Ludwigshafen</td>\n",
" <td>Chemie</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>E.ON</td>\n",
" <td>Arnulfstraße 203</td>\n",
" <td>80634</td>\n",
" <td>München</td>\n",
" <td>Energie</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Munich Re Group</td>\n",
" <td>Königinstr. 107</td>\n",
" <td>80802</td>\n",
" <td>München</td>\n",
" <td>Versicherung</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Siemens</td>\n",
" <td>Werner-von-Siemens-Straße 1</td>\n",
" <td>80333</td>\n",
" <td>München</td>\n",
" <td>Automatisierung, Digitalisierung</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Deutsche Bahn</td>\n",
" <td>Potsdamer Platz 2</td>\n",
" <td>10785</td>\n",
" <td>Berlin</td>\n",
" <td>Transport, Logistik</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Name Straße PLZ \\\n",
"0 Volkswagen Berliner Ring 2 38440 \n",
"1 Mercedes-Benz Group Mercedesstraße 120 70372 \n",
"2 Allianz Reinsburgstraße 19 70178 \n",
"3 BMW Group Petuelring 130 80809 \n",
"4 Deutsche Telekom Landgrabenweg 151 53227 \n",
"5 Deutsche Post DHL Group Charles-de-Gaulle-Str. 20 53113 \n",
"6 Bosch Group Robert-Bosch-Platz 1 70839 \n",
"7 BASF Carl-Bosch-Straße 38 67056 \n",
"8 E.ON Arnulfstraße 203 80634 \n",
"9 Munich Re Group Königinstr. 107 80802 \n",
"10 Siemens Werner-von-Siemens-Straße 1 80333 \n",
"11 Deutsche Bahn Potsdamer Platz 2 10785 \n",
"\n",
" Stadt Branche \n",
"0 Wolfsburg Automobil \n",
"1 Stuttgart Automobil \n",
"2 Stuttgart Versicherung, Finanzdienstleistung \n",
"3 München Automobil \n",
"4 Bonn Telekommunikation, Informationstechnologie \n",
"5 Bonn Logistik \n",
"6 Gerlingen-Schillerhöhe Kraftfahrzeugtechnik, Industrietechnik, Gebrau... \n",
"7 Ludwigshafen Chemie \n",
"8 München Energie \n",
"9 München Versicherung \n",
"10 München Automatisierung, Digitalisierung \n",
"11 Berlin Transport, Logistik "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"id": "d5c6c68d",
"metadata": {},
"source": [
"---------------------------------\n",
"# Schreibe Unternehmensdaten in PostgreSQL"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "6c09bdca",
"metadata": {},
"outputs": [],
"source": [
"import psycopg2"
]
},
{
"cell_type": "markdown",
"id": "383fb9a9",
"metadata": {},
"source": [
"### Verbinde zur Datenbank"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8675c8bd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Database connected successfully\n"
]
}
],
"source": [
"conn = psycopg2.connect(\n",
" host=\"localhost\",\n",
" database=\"transparenz\",\n",
" user=\"postgres\",\n",
" password=\"postgres\")\n",
"\n",
"print(\"Database connected successfully\")"
]
},
{
"cell_type": "markdown",
"id": "22b9ab1d",
"metadata": {},
"source": [
"## Iteriere durch Dataframe und schreibe Datensätze in Tabelle *Company*"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "961ac836",
"metadata": {},
"outputs": [],
"source": [
"cur = conn.cursor()\n",
"\n",
"\n",
"for i in range(len(df)):\n",
" #get data from dataframe\n",
" name=str(df['Name'].iloc[i])\n",
" street=str(df['Straße'].iloc[i])\n",
" zipcode=int(df['PLZ'].iloc[i])\n",
" city=str(df['Stadt'].iloc[i])\n",
" sector=str(df['Branche'].iloc[i])\n",
" \n",
" postgres_insert_query = \"\"\" INSERT INTO company (NAME,STREET, ZIP, CITY,SECTOR) VALUES (%s,%s,%s,%s,%s)\"\"\" \n",
" \n",
" record_to_insert = (name,street,zipcode,city,sector)\n",
" cur.execute(postgres_insert_query, record_to_insert) \n",
" \n",
"conn.commit()\n",
"conn.close()"
]
},
{
"attachments": {
"grafik.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABeEAAAOoCAYAAABWWz8BAAAgAElEQVR4XuydB3gVRReGP2kSepMiIL1LCyBIkUgvCU1EOgQJHYIkSJEuVQISOgnSDUjHgID03ptUKQGklwSpAQL+/5zZuzd7b27Zm9w0OPM8Poa7u1PemZ3d/ebMOR+8ehXxP3BiAkwgQRH477//4dWr1wmqTlwZJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwAQcJ/ABi/COQ+MrmEBcECAh/s2bN3j79r+4KI7LYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkwgFgiwCB8LUDlLJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwASYABNgAkSARXgeB0yACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwARiiQCL8LEElrNlAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmwCI8jwEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACsUTgg6NHj/4vlvLmbJkAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAm81wQ+cO0yhUX492EIUC9/8I431JE2OnLuO45NV/Mc4eXIuboKfwdOcoSJI+e+A2hMmvA+t/1d60tuDxNgAkyACTABJsAEmAATYAJMgAkwASZgJMAi/Ls+GN5HUctWm99HHs4c48w2ZjSZnz5+fJ/q48RnMQEmwASYABNgAkyACTABJsAEmAATYAKJggCL8Imim7iSTIAJMAEmwASYABNgAkyACTABJsAEmAATYAJMgAkwASaQGAmwCJ8Ye01vnd9na1JLbX+feegdM3rOY7Z6KFk/h/np48f3qz5OfBYTYAJMgAkwASbABJgAE2ACTIAJMAEmkOAJ2BXh06b6ECM61IZbmQKx3pijF29i8vLd+PvGg1gviwtgAkyACTABJsAEmAATYAJMgAkwASbABJgAE2ACTIAJMAEmENsE7IrwAT7NUa5wztiuhzH/26FP4DF4fpyVxwUxASbABJgAE2ACTIAJMAEmwASYABNgAkyACTABJsAEmAATiC0CNkV4soLf+XO32Crbar5dJq3CMWEVn1hTucK54PF5MTwNf4Wl206CFhY4MQEmwASYABNgAkyACTABJsAEmAATYAJM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 truncated
}
},
"cell_type": "markdown",
"id": "6fb1ec01",
"metadata": {},
"source": [
"Überprüfe mittels pgAdmin, ob die Datensätze vollständig geschrieben wurden:\n",
"![grafik.png](attachment:grafik.png)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b80e0fc8",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,604 @@
{
"cells": [
{
"attachments": {
"grafik.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABTQAAAHiCAYAAADWP0MvAAAgAElEQVR4XuydCZxO1RvHf4xh7GNPJRJZkpJsUVJZCqVFUqmILCUqpRQVf0UblZLsqaQNpUXaSIlISVGWSJZsw2CMWfifc9/3vnPunbu973vf2fzez6dP5n3vPfec73nO9rvPeU6hAwcOnwA/JEACJEACJEACJEACJEACJEACJEACJEACJEACJJAPCBSioJkPaolZJAESIAESIAESIAESIAESIAESIAESIAESIAES0AjYCpp79uzFO7PfwT///KNdeMYZZ+Cm7jehUqWKREcCJEACJEACJEACJEACJEACJEACJEACJEACJEACuULAUtCUYuaTTzyBatXOQMtWLbWMfb/0e2zb9g8eF99T1MyVuuJDSYAESIAESIAESIAESIAESIAESIAESIAESCBPEFi/fj2mTpmGffv2OeanQoUKuLN3L9StW9e3fFsKmi+/NAEpKSkY+vBDhgeNHfMMSpQogYH33uNbBpgQCZAACZAACZAACZAACZAACZAACZAACZAACZBA/iLw4JCHhEhZJ+QMaZd76SS5fv2fePa5Z3wroKWgefeAe9Drzl5o3PgCw4OWigzMnzff1wz4VhImRAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkCMEevW8Ew8NfdDV81J6cj4z9llMmz7Vt3xZCpp2GfIjA+/Mno127dujfPnyvhXCj4QWfv45zqpVC7XEf/rH6jv52/79+/HFwoUipmh3Px4ddRqLFy9G7zv74MuvvkT16mdEnV5eScCOv1/527hxIxZ98QW63XRTWPZovs+rTed1e4o1b3PbiZS/VT5lHZjbo56+bi81a9ZE+w4dDOYj70tKStK+s/pdv9icvjltNdH+AwZkM9FYstXLcOGFF6JJ06Z+NY+w0oll+ZwyMvHVVyF5R2pLYRXS4eJYjQlWdmauZ8l+8+bNtjbs9rtfDJhO3iPgdWzKSzmPVVuKtIxuDPU+KNL07e6LhENu9cN+l53pkQAJkAAJkAAJ5C8Cqn4od3uvXr3aUIBGjRppu7z90BP1hGWYzH379lofCpSbgqZcwG0S/6nCg9V3flaxnDjOeecdbWGsf6y+U3/zU9CUguSXi77CqP+N9FSscK/XE430Pk+Z8vkiJ/76o8K1i3Cv9/octwWPTMcve4q0DG7VEwveVs+MZJGmpmPOpyr4mIVEswgp/76wSZPQSwv591lnnRUSAeViUH7MfY8UveXHSqhU8ybvly9qzKKiF7Zu9WP3+08rVmi2ZRZqI00vkvtiWT63/IQrJsSy/fg5JujllvUrP3ZCtbn+zTbo9rsb37z6e6zq0e/y5nY+vYxNfpc52vSiHSPU5/vB341huH2QVz7hcsjNfthrmXgdCZAACZAACZBAwSSg6oe60KiWtEKFito5PNEKmqtW/Yzp06aJ8JhHQ8nnOQ/N3BA0rRaNTgvJcCeabmYbrtAY7vX68yO9zy3/sfjdbSEvnxnuYiXc6/Vyud3ntuCR6fhlT255ibQuYsHbKi/Rth01n/oCTnrYml9IWD1bZeflJUY46TstJr2wjWW9RZq21/tiWT63PIQrJsSq/URr13bldGNrLr/ZDt1+d+ObV3+PVT36Xd7czqeXscnvMkebnp9tyQ/+bgzD7YO88gmXg1tf4fW5vI4ESIAESIAESIAEwiWQU1vO5Zk+FStW0GJ16iKpQdDMidOJ9MmhFCD0j+75JCdkK1euDH3ftl07JAnvI/N3clu4PomU/9c/6tZhc1ryGapAoW55t5qwmr9TnyO3/G3atMmwxVX9XeZb3bqu52/GjBkY/b+nQvndsPEvmL+bMnUyWrduDX0buX6xvp3c7vratc6GTE9+/HiOlRHfeGM3rP45y31Yf576faMLGuHdd+eEbpe/3X33AG1LvPzcJMQn6Ykq86t/9HTUZ6r8rerSylYkc/MWTd0m7K5XFyPhPEe9T82r/nzzttBw7CncMkhudvbn1N784G1ezFktIJ3ajvl+t3Zkt7j0sqhUF3w6Y7PXpUzHKgSBW/p23pmSsZpnN166F6nuFapvg1e56HlWt8vL58h+Z+VPP2leqKpXqZ096fUfbd+mls+cf3U7uFU/7cU+vdpPpG3Zqf04DeaRcrNiZPccabPlhNev1XhiJ3joTGWaVl6jbgKNF7uwK4Nqk+XKlcsWBsKufVv1vTIf4fTJfvSD5nrw0l5lCB2v8xm9Hp36a3P7DbeNqPMPt3vD6W+s7CKcZ8WiLTnVj92Yb2drel+thyCRf8v+y42hmgenvtYtHbP9mueZTvk2jzNOrPkbCZAACZAACZAACfhNIKe2nH8hdk5+NP8jbY3RSoia8mMQNHPidCJ9waMvys3bPL16aOoLAj0dVaCw2pYqFxJWgqa8T4oAavw983dWW1PlpFe/x/y7lSiydes/uOLyK0KioxQspXApP1aek1KUvOOOO0K/v/LKqyGh0Op6XdD08zmqoUthss7ZdULb4vX8WX3/6aefhfIqf5cfXeTUhUxVoN20cbNhu73K364uZZpWtiIn/fr2THM92oltqtit2pO++HS6T11IyH/Lha1ZEAvXnsItg5P9ubU3naPeBsLl7WXBb97WrbYdszCsXmtuR1ZtVbdRN8FRXyyqdSPvUYVnPdZguIKmk3emOc9eeMm86n2L3s+pwry6xdzslSPrW71f/tvJnsy2Y77frW+zsu1wny/twW48cMufylP/d7g27FZGqwE/mjHBqo7sJhVq/Et5jRrn1c77TBdOJAdz+Ba1v3KKY+3G3aoM8jspYurhD6TdqS/+7Djr/aa57/WzHr30g1Z14KW9OtmvVR259dfm9uOWd7f03NpXOP1NNM+ys/Fo2pJb/Zj5O9mUlf3KuYQbf/OLFLv5h1s6Thyc8m0ew+0483sSIAESIAESIAESiBWBnNpyLvMvRc13Zs/B1ddcjS5drjEKmjnhKqovtvTFlNnLJBxB0yw86N4GMm0rYcmqAt0OA7Lbmqp7vliJLFbeWrrQaHVwj5et4KoHphdB04/n6Lx0b1GzJ6VZPNWvlyLms88+qx1QpP5b/i6FUPnRxVqZxoMPPmjw6lTrxM6rVp/EWy3Y1Xo2e0+YrzeLIFZilhdBU/eqsbrfqjzmeK1O8fecyuBmf27tTbKKhrfTgtKt7chn6/e7lcOcT3NbdhI09XxYeU6bveykN3i4gqbTVj9z/+K2ADfXlzltc39pJWiqcUKt+jw74U9eq6YfSZ3ofbCVR6GeF7OIrR4Spz4/HPtRbSmcPsNLGc0M3fLllqYXRnaTDVV0iZWg6VY+mTdzGexEfVVcNb841MdJeRif1XjtZz166Qed2or+m5m5W7rm6yOxDadneEnPrn3p9aj+7tTfRPssK75utub2TLf+1E7QtHrpKL3areIku9Wx09jjV1/n1Bbcxka7voTfkwAJkAAJkAAJkIBfBHJCR1TzKmNpTps6DS1btszfgqZ58qkKifoEUBbcbgu4ughWAZkFJPNCzLzo17d3qmlYnTisC4DyOn1rufy3lUCpXqunqwuKToKmvNav5+jPlc9TPUTdvo9W0DQvEOzq0mpBr16r51P1/LETNOW14TzHvFCRXjB2p0yHY0/mfLiVQfdMNndGel7cFmNWbSBSDjIttU6sFqNmQU4VNN3akdeFo8pC36bndqCPyt3qWqdnmxnb9SVWrN0EkkgETVWgcLInt/pxsy2r8lixcGqT4Yo1dvZjzotXG3Yroyp461uoo+VmxcjqOVYTDD2/ule505Zyeb/blvNIyifTNZfBzntaFTSd2rddfflVj279oB1/N8HMLV0rQdOJg5VtuLWRcNIzt59wXqC4tRU3FpHYmtsz3erHbY6gzw3t7NfK1p36oFj2dU5zWqfxyaof4XckQAIkQAIkQAIk4CcBuy3n+unm+rOiPRRIzfPUKVO1Pw1bznNCWXWb9PrhoWn2DpKTPStRU4oFcpKonhBs/k5dQOoA1cmv00TYyUikx6UaL1M95dzKI9Krh6b5mdE8R0/LSdCUsTHNnpvRCJpWdWIWiNRFiCpQWtWVVw9NMzfVZqxs0srzQnoZmUXNSOzJ7CkSroemWha39hYNbzeBzq3tqPe7tSMv+TQLkW73mOvc6Xq7BaN5caumaZWe2wI8HIFBPsvKQ1MVNJ3ahBXzcPo2q/JZCV1O9uwm1riFA1F52tWRU1t2szurPtzNrt3SdBLA3SYW5mdbvfxRRUy33+3K58bdSz2rYpBsJ+Y07cpqN15HU49u/aBTXtR+xe0FhLk/sBI0nThEImiGk160gmY0z4pFW3LrT63Gbqv5hPzOrmxutmN+Kafai1cPTbc+xWl+Eu4459bH8HcSIAESIAESIAESCJeA3ZZz/eAePT0/BU0ZLvOa/L7lXI0npsbrkpND+dGFTX17nHkrupfFgy66qEKVvE9+1Dh3Vt556jah3377TbtHj5upH5ajHwBkFjRVj0j9kB8vHppSfPTjOeYt8lIYffSxYaGt4k4xNNWYmOFuObdaKFvVpX4AkFnQVBclZu88J2HSzmasnqPbhHo4iy4iyQWM2VbMHnNW1+j2ZBZDvJbBzjvUbTEWDW+ZZ3m/GvdS/q3G0XMqq5mj+Vq1I3UTgazErHC8VvQFpdV2c3M+1Xw5LSbt+hcnXrEQNJ3ahJf68Wpbuj2YBVWn57vZp5f86e1QFRa89hlW/buXAdxLvsLhZvdMuetAfeFmfq45BrU53Inb73bPdSufnW2bY2iqLwzt2rdd36vnzTyOO/XJXpk7vYgw9zvhtFc3QdPN3rzMSaw8BCMtd7j9TTh9tFfGbrbm9kyn+rESlO36BvNz9NjDXvoo/fCzWPV1TvMTt7HRS3/Ga0iABEiABEiABEggGgI54Rip5m/Pnr0Y+tBQjH1mbN7z0NQn/PL/qlelnGyq3+neGup2K31ha972owufLine truncated
}
},
"cell_type": "markdown",
"id": "30df80ed",
"metadata": {},
"source": [
"![grafik.png](attachment:grafik.png)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "dbd6eae9",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import ipywidgets as widgets\n",
"pd.options.plotting.backend = \"plotly\""
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8b447b09",
"metadata": {},
"outputs": [],
"source": [
"df=pd.read_csv('BASF_Data_NewOrder.csv', sep=';', decimal=\",\") "
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "5fc7b7d2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Metrik</th>\n",
" <th>Datum</th>\n",
" <th>Summe [Milliarden €]</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.1999</td>\n",
" <td>29.473</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2000</td>\n",
" <td>35.946</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2001</td>\n",
" <td>32.500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2002</td>\n",
" <td>32.216</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2003</td>\n",
" <td>33.361</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2004</td>\n",
" <td>37.537</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2005</td>\n",
" <td>42.745</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2006</td>\n",
" <td>52.610</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2007</td>\n",
" <td>57.951</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2008</td>\n",
" <td>62.304</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2009</td>\n",
" <td>50.693</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2010</td>\n",
" <td>63.873</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2011</td>\n",
" <td>73.497</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2012</td>\n",
" <td>72.129</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2013</td>\n",
" <td>73.973</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2014</td>\n",
" <td>74.326</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2015</td>\n",
" <td>70.449</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2016</td>\n",
" <td>57.550</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2017</td>\n",
" <td>61.223</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2018</td>\n",
" <td>60.220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2019</td>\n",
" <td>59.316</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2020</td>\n",
" <td>59.149</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2021</td>\n",
" <td>78.598</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2022</td>\n",
" <td>87.327</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2005</td>\n",
" <td>5.830</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2006</td>\n",
" <td>6.750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2007</td>\n",
" <td>7.316</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2008</td>\n",
" <td>6.463</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2009</td>\n",
" <td>3.677</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2010</td>\n",
" <td>7.761</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2011</td>\n",
" <td>8.586</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2012</td>\n",
" <td>6.742</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2013</td>\n",
" <td>7.160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2014</td>\n",
" <td>7.626</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2015</td>\n",
" <td>6.248</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2016</td>\n",
" <td>6.275</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2017</td>\n",
" <td>7.587</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2018</td>\n",
" <td>5.974</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2019</td>\n",
" <td>4.201</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2020</td>\n",
" <td>-0.191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2021</td>\n",
" <td>7.677</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2022</td>\n",
" <td>6.548</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2008</td>\n",
" <td>9.562</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2009</td>\n",
" <td>7.388</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2010</td>\n",
" <td>11.131</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2011</td>\n",
" <td>11.993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2012</td>\n",
" <td>10.009</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2013</td>\n",
" <td>10.432</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2014</td>\n",
" <td>11.043</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2015</td>\n",
" <td>10.649</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2016</td>\n",
" <td>10.526</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2017</td>\n",
" <td>10.765</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2018</td>\n",
" <td>8.970</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2019</td>\n",
" <td>8.185</td>\n",
" </tr>\n",
" <tr>\n",
" <th>54</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2020</td>\n",
" <td>6.494</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2021</td>\n",
" <td>11.355</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2022</td>\n",
" <td>10.748</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Metrik Datum Summe [Milliarden €]\n",
"0 Umsatz 01.01.1999 29.473\n",
"1 Umsatz 01.01.2000 35.946\n",
"2 Umsatz 01.01.2001 32.500\n",
"3 Umsatz 01.01.2002 32.216\n",
"4 Umsatz 01.01.2003 33.361\n",
"5 Umsatz 01.01.2004 37.537\n",
"6 Umsatz 01.01.2005 42.745\n",
"7 Umsatz 01.01.2006 52.610\n",
"8 Umsatz 01.01.2007 57.951\n",
"9 Umsatz 01.01.2008 62.304\n",
"10 Umsatz 01.01.2009 50.693\n",
"11 Umsatz 01.01.2010 63.873\n",
"12 Umsatz 01.01.2011 73.497\n",
"13 Umsatz 01.01.2012 72.129\n",
"14 Umsatz 01.01.2013 73.973\n",
"15 Umsatz 01.01.2014 74.326\n",
"16 Umsatz 01.01.2015 70.449\n",
"17 Umsatz 01.01.2016 57.550\n",
"18 Umsatz 01.01.2017 61.223\n",
"19 Umsatz 01.01.2018 60.220\n",
"20 Umsatz 01.01.2019 59.316\n",
"21 Umsatz 01.01.2020 59.149\n",
"22 Umsatz 01.01.2021 78.598\n",
"23 Umsatz 01.01.2022 87.327\n",
"24 EBIT 01.01.2005 5.830\n",
"25 EBIT 01.01.2006 6.750\n",
"26 EBIT 01.01.2007 7.316\n",
"27 EBIT 01.01.2008 6.463\n",
"28 EBIT 01.01.2009 3.677\n",
"29 EBIT 01.01.2010 7.761\n",
"30 EBIT 01.01.2011 8.586\n",
"31 EBIT 01.01.2012 6.742\n",
"32 EBIT 01.01.2013 7.160\n",
"33 EBIT 01.01.2014 7.626\n",
"34 EBIT 01.01.2015 6.248\n",
"35 EBIT 01.01.2016 6.275\n",
"36 EBIT 01.01.2017 7.587\n",
"37 EBIT 01.01.2018 5.974\n",
"38 EBIT 01.01.2019 4.201\n",
"39 EBIT 01.01.2020 -0.191\n",
"40 EBIT 01.01.2021 7.677\n",
"41 EBIT 01.01.2022 6.548\n",
"42 EBITDA 01.01.2008 9.562\n",
"43 EBITDA 01.01.2009 7.388\n",
"44 EBITDA 01.01.2010 11.131\n",
"45 EBITDA 01.01.2011 11.993\n",
"46 EBITDA 01.01.2012 10.009\n",
"47 EBITDA 01.01.2013 10.432\n",
"48 EBITDA 01.01.2014 11.043\n",
"49 EBITDA 01.01.2015 10.649\n",
"50 EBITDA 01.01.2016 10.526\n",
"51 EBITDA 01.01.2017 10.765\n",
"52 EBITDA 01.01.2018 8.970\n",
"53 EBITDA 01.01.2019 8.185\n",
"54 EBITDA 01.01.2020 6.494\n",
"55 EBITDA 01.01.2021 11.355\n",
"56 EBITDA 01.01.2022 10.748"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"id": "d5c6c68d",
"metadata": {},
"source": [
"---------------------------------\n",
"# Schreibe Unternehmensdaten in PostgreSQL"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "6c09bdca",
"metadata": {},
"outputs": [],
"source": [
"import psycopg2"
]
},
{
"cell_type": "markdown",
"id": "383fb9a9",
"metadata": {},
"source": [
"### Verbinde zur Datenbank"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "3e1ea224",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Database connected successfully\n"
]
}
],
"source": [
"conn = psycopg2.connect(\n",
" host=\"localhost\",\n",
" database=\"transparenz\",\n",
" user=\"postgres\",\n",
" password=\"postgres\")\n",
"\n",
"print(\"Database connected successfully\")"
]
},
{
"cell_type": "markdown",
"id": "cba7013a",
"metadata": {},
"source": [
"## Iteriere durch Dataframe und schreibe Datensätze in Tabelle *Company*"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "961ac836",
"metadata": {},
"outputs": [],
"source": [
"cur = conn.cursor()\n",
"\n",
"PK_ID=8 #BASF hat den PK 8, deshalb wird dieser manuell hinzugefügt\n",
"\n",
"\n",
"for i in range(len(df)):\n",
" #get data from dataframe\n",
" kind_of=str(df['Metrik'].iloc[i])\n",
" date=str(df['Datum'].iloc[i])\n",
" amount=float(df['Summe [Milliarden €]'].iloc[i])\n",
" \n",
" postgres_insert_query = \"\"\" INSERT INTO finance (company_id,kind_of, date, sum) VALUES (%s,%s,%s,%s)\"\"\" \n",
" record_to_insert = (PK_ID,kind_of,date,amount)\n",
" cur.execute(postgres_insert_query, record_to_insert) \n",
" #print(postgres_insert_query, record_to_insert)\n",
" \n",
"conn.commit()\n",
"conn.close()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "46b5be7c",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,479 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "dbd6eae9",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import ipywidgets as widgets\n",
"pd.options.plotting.backend = \"plotly\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8b447b09",
"metadata": {},
"outputs": [],
"source": [
"df=pd.read_csv('Telekom_Data_NewOrder.csv', sep=';',decimal=',') "
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5fc7b7d2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Metrik</th>\n",
" <th>Datum</th>\n",
" <th>Summe [Milliarden €]</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2005</td>\n",
" <td>59.600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2006</td>\n",
" <td>61.300</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2007</td>\n",
" <td>62.500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2008</td>\n",
" <td>61.700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2009</td>\n",
" <td>64.600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2010</td>\n",
" <td>62.420</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2011</td>\n",
" <td>58.650</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2012</td>\n",
" <td>58.170</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2013</td>\n",
" <td>60.130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2014</td>\n",
" <td>62.660</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2015</td>\n",
" <td>69.230</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2016</td>\n",
" <td>73.100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2017</td>\n",
" <td>74.950</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2018</td>\n",
" <td>75.660</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2019</td>\n",
" <td>80.530</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2020</td>\n",
" <td>99.950</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2021</td>\n",
" <td>107.610</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2022</td>\n",
" <td>114.200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2005</td>\n",
" <td>7.600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2006</td>\n",
" <td>5.300</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2007</td>\n",
" <td>5.300</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2008</td>\n",
" <td>7.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2009</td>\n",
" <td>6.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2010</td>\n",
" <td>5.510</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2011</td>\n",
" <td>5.560</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2012</td>\n",
" <td>-3.960</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2013</td>\n",
" <td>4.930</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2014</td>\n",
" <td>7.250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2015</td>\n",
" <td>7.030</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2016</td>\n",
" <td>9.160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2017</td>\n",
" <td>9.380</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2018</td>\n",
" <td>8.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2019</td>\n",
" <td>9.460</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2020</td>\n",
" <td>12.370</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2021</td>\n",
" <td>12.580</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2022</td>\n",
" <td>15.410</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2018</td>\n",
" <td>23.333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2019</td>\n",
" <td>24.731</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2020</td>\n",
" <td>35.017</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2021</td>\n",
" <td>37.330</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2022</td>\n",
" <td>40.208</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Metrik Datum Summe [Milliarden €]\n",
"0 Umsatz 01.01.2005 59.600\n",
"1 Umsatz 01.01.2006 61.300\n",
"2 Umsatz 01.01.2007 62.500\n",
"3 Umsatz 01.01.2008 61.700\n",
"4 Umsatz 01.01.2009 64.600\n",
"5 Umsatz 01.01.2010 62.420\n",
"6 Umsatz 01.01.2011 58.650\n",
"7 Umsatz 01.01.2012 58.170\n",
"8 Umsatz 01.01.2013 60.130\n",
"9 Umsatz 01.01.2014 62.660\n",
"10 Umsatz 01.01.2015 69.230\n",
"11 Umsatz 01.01.2016 73.100\n",
"12 Umsatz 01.01.2017 74.950\n",
"13 Umsatz 01.01.2018 75.660\n",
"14 Umsatz 01.01.2019 80.530\n",
"15 Umsatz 01.01.2020 99.950\n",
"16 Umsatz 01.01.2021 107.610\n",
"17 Umsatz 01.01.2022 114.200\n",
"18 EBIT 01.01.2005 7.600\n",
"19 EBIT 01.01.2006 5.300\n",
"20 EBIT 01.01.2007 5.300\n",
"21 EBIT 01.01.2008 7.000\n",
"22 EBIT 01.01.2009 6.000\n",
"23 EBIT 01.01.2010 5.510\n",
"24 EBIT 01.01.2011 5.560\n",
"25 EBIT 01.01.2012 -3.960\n",
"26 EBIT 01.01.2013 4.930\n",
"27 EBIT 01.01.2014 7.250\n",
"28 EBIT 01.01.2015 7.030\n",
"29 EBIT 01.01.2016 9.160\n",
"30 EBIT 01.01.2017 9.380\n",
"31 EBIT 01.01.2018 8.000\n",
"32 EBIT 01.01.2019 9.460\n",
"33 EBIT 01.01.2020 12.370\n",
"34 EBIT 01.01.2021 12.580\n",
"35 EBIT 01.01.2022 15.410\n",
"36 EBITDA 01.01.2018 23.333\n",
"37 EBITDA 01.01.2019 24.731\n",
"38 EBITDA 01.01.2020 35.017\n",
"39 EBITDA 01.01.2021 37.330\n",
"40 EBITDA 01.01.2022 40.208"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"id": "d5c6c68d",
"metadata": {},
"source": [
"---------------------------------\n",
"# Schreibe Unternehmensdaten in PostgreSQL"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "6c09bdca",
"metadata": {},
"outputs": [],
"source": [
"import psycopg2"
]
},
{
"cell_type": "markdown",
"id": "383fb9a9",
"metadata": {},
"source": [
"### Verbinde zur Datenbank"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "3e1ea224",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Database connected successfully\n"
]
}
],
"source": [
"conn = psycopg2.connect(\n",
" host=\"localhost\",\n",
" database=\"transparenz\",\n",
" user=\"postgres\",\n",
" password=\"postgres\")\n",
"\n",
"print(\"Database connected successfully\")"
]
},
{
"cell_type": "markdown",
"id": "22b9ab1d",
"metadata": {},
"source": [
"## Iteriere durch Dataframe und schreibe Datensätze in Tabelle *Company*"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "961ac836",
"metadata": {},
"outputs": [],
"source": [
"cur = conn.cursor()\n",
"\n",
"PK_ID=5 #BASF hat den PK 8, deshalb wird dieser manuell hinzugefügt\n",
"\n",
"\n",
"for i in range(len(df)):\n",
" #get data from dataframe\n",
" kind_of=str(df['Metrik'].iloc[i])\n",
" date=str(df['Datum'].iloc[i])\n",
" amount=float(df['Summe [Milliarden €]'].iloc[i])\n",
" \n",
" postgres_insert_query = \"\"\" INSERT INTO finance (company_id,kind_of, date, sum) VALUES (%s,%s,%s,%s)\"\"\" \n",
" record_to_insert = (PK_ID,kind_of,date,amount)\n",
" cur.execute(postgres_insert_query, record_to_insert) \n",
" #print(postgres_insert_query, record_to_insert)\n",
" \n",
"conn.commit()\n",
"conn.close()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "46b5be7c",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,416 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "dbd6eae9",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import ipywidgets as widgets\n",
"pd.options.plotting.backend = \"plotly\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8b447b09",
"metadata": {},
"outputs": [],
"source": [
"df=pd.read_csv('EON_Data_NewOrder.csv', sep=';',decimal=',') "
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5fc7b7d2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Metrik</th>\n",
" <th>Datum</th>\n",
" <th>Summe [Milliarden €]</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2007</td>\n",
" <td>66.912</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2008</td>\n",
" <td>84.873</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2009</td>\n",
" <td>79.974</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2010</td>\n",
" <td>92.863</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2011</td>\n",
" <td>112.954</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2012</td>\n",
" <td>132.093</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2013</td>\n",
" <td>119.615</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2014</td>\n",
" <td>113.095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2015</td>\n",
" <td>42.656</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2016</td>\n",
" <td>38.173</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2017</td>\n",
" <td>37.965</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2018</td>\n",
" <td>30.084</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2019</td>\n",
" <td>41.284</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2020</td>\n",
" <td>60.944</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2021</td>\n",
" <td>77.358</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Umsatz</td>\n",
" <td>01.01.2022</td>\n",
" <td>115.660</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2012</td>\n",
" <td>7.010</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2013</td>\n",
" <td>5.640</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2014</td>\n",
" <td>4.700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2015</td>\n",
" <td>3.600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2016</td>\n",
" <td>3.100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2017</td>\n",
" <td>3.100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2018</td>\n",
" <td>2.990</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2019</td>\n",
" <td>3.220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2020</td>\n",
" <td>3.780</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2021</td>\n",
" <td>4.720</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>EBIT</td>\n",
" <td>01.01.2022</td>\n",
" <td>5.200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2018</td>\n",
" <td>4.840</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2019</td>\n",
" <td>5.558</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2020</td>\n",
" <td>6.905</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2021</td>\n",
" <td>7.889</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>EBITDA</td>\n",
" <td>01.01.2022</td>\n",
" <td>8.059</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Metrik Datum Summe [Milliarden €]\n",
"0 Umsatz 01.01.2007 66.912\n",
"1 Umsatz 01.01.2008 84.873\n",
"2 Umsatz 01.01.2009 79.974\n",
"3 Umsatz 01.01.2010 92.863\n",
"4 Umsatz 01.01.2011 112.954\n",
"5 Umsatz 01.01.2012 132.093\n",
"6 Umsatz 01.01.2013 119.615\n",
"7 Umsatz 01.01.2014 113.095\n",
"8 Umsatz 01.01.2015 42.656\n",
"9 Umsatz 01.01.2016 38.173\n",
"10 Umsatz 01.01.2017 37.965\n",
"11 Umsatz 01.01.2018 30.084\n",
"12 Umsatz 01.01.2019 41.284\n",
"13 Umsatz 01.01.2020 60.944\n",
"14 Umsatz 01.01.2021 77.358\n",
"15 Umsatz 01.01.2022 115.660\n",
"16 EBIT 01.01.2012 7.010\n",
"17 EBIT 01.01.2013 5.640\n",
"18 EBIT 01.01.2014 4.700\n",
"19 EBIT 01.01.2015 3.600\n",
"20 EBIT 01.01.2016 3.100\n",
"21 EBIT 01.01.2017 3.100\n",
"22 EBIT 01.01.2018 2.990\n",
"23 EBIT 01.01.2019 3.220\n",
"24 EBIT 01.01.2020 3.780\n",
"25 EBIT 01.01.2021 4.720\n",
"26 EBIT 01.01.2022 5.200\n",
"27 EBITDA 01.01.2018 4.840\n",
"28 EBITDA 01.01.2019 5.558\n",
"29 EBITDA 01.01.2020 6.905\n",
"30 EBITDA 01.01.2021 7.889\n",
"31 EBITDA 01.01.2022 8.059"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"id": "d5c6c68d",
"metadata": {},
"source": [
"---------------------------------\n",
"# Schreibe Unternehmensdaten in PostgreSQL"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6c09bdca",
"metadata": {},
"outputs": [],
"source": [
"import psycopg2"
]
},
{
"cell_type": "markdown",
"id": "383fb9a9",
"metadata": {},
"source": [
"### Verbinde zur Datenbank"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "3e1ea224",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Database connected successfully\n"
]
}
],
"source": [
"conn = psycopg2.connect(\n",
" host=\"localhost\",\n",
" database=\"transparenz\",\n",
" user=\"postgres\",\n",
" password=\"postgres\")\n",
"\n",
"print(\"Database connected successfully\")"
]
},
{
"cell_type": "markdown",
"id": "22b9ab1d",
"metadata": {},
"source": [
"## Iteriere durch Dataframe und schreibe Datensätze in Tabelle *Company*"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "961ac836",
"metadata": {},
"outputs": [],
"source": [
"cur = conn.cursor()\n",
"\n",
"PK_ID=9 #BASF hat den PK 8, deshalb wird dieser manuell hinzugefügt\n",
"\n",
"\n",
"for i in range(len(df)):\n",
" #get data from dataframe\n",
" kind_of=str(df['Metrik'].iloc[i])\n",
" date=str(df['Datum'].iloc[i])\n",
" amount=float(df['Summe [Milliarden €]'].iloc[i])\n",
" \n",
" postgres_insert_query = \"\"\" INSERT INTO finance (company_id,kind_of, date, sum) VALUES (%s,%s,%s,%s)\"\"\" \n",
" record_to_insert = (PK_ID,kind_of,date,amount)\n",
" cur.execute(postgres_insert_query, record_to_insert) \n",
" #print(postgres_insert_query, record_to_insert)\n",
" \n",
"conn.commit()\n",
"conn.close()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "46b5be7c",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@@ -0,0 +1,10 @@
Stadt;Name
Aschaffenburg;Amtsgericht Aschaffenburg
Bamberg;Amtsgericht Bamberg
Bayreuth;Amtsgericht Bayreuth
Duesseldorf;Amtsgericht Duesseldorf
Duisburg;Amtsgericht Duisburg
Duisburg;Amtsgericht Duisburg-Hamborn
Duisburg;Amtsgericht Duisburg-Ruhrort
Oberhausen;Amtsgericht Oberhausen
Wuppertal;Amtsgericht Wuppertal
1 Stadt Name
2 Aschaffenburg Amtsgericht Aschaffenburg
3 Bamberg Amtsgericht Bamberg
4 Bayreuth Amtsgericht Bayreuth
5 Duesseldorf Amtsgericht Duesseldorf
6 Duisburg Amtsgericht Duisburg
7 Duisburg Amtsgericht Duisburg-Hamborn
8 Duisburg Amtsgericht Duisburg-Ruhrort
9 Oberhausen Amtsgericht Oberhausen
10 Wuppertal Amtsgericht Wuppertal
@@ -0,0 +1,58 @@
Metrik;Datum;Summe [Milliarden €]
Umsatz;01.01.1999;29,473
Umsatz;01.01.2000;35,946
Umsatz;01.01.2001;32,5
Umsatz;01.01.2002;32,216
Umsatz;01.01.2003;33,361
Umsatz;01.01.2004;37,537
Umsatz;01.01.2005;42,745
Umsatz;01.01.2006;52,61
Umsatz;01.01.2007;57,951
Umsatz;01.01.2008;62,304
Umsatz;01.01.2009;50,693
Umsatz;01.01.2010;63,873
Umsatz;01.01.2011;73,497
Umsatz;01.01.2012;72,129
Umsatz;01.01.2013;73,973
Umsatz;01.01.2014;74,326
Umsatz;01.01.2015;70,449
Umsatz;01.01.2016;57,55
Umsatz;01.01.2017;61,223
Umsatz;01.01.2018;60,22
Umsatz;01.01.2019;59,316
Umsatz;01.01.2020;59,149
Umsatz;01.01.2021;78,598
Umsatz;01.01.2022;87,327
EBIT;01.01.2005;5,83
EBIT;01.01.2006;6,75
EBIT;01.01.2007;7,316
EBIT;01.01.2008;6,463
EBIT;01.01.2009;3,677
EBIT;01.01.2010;7,761
EBIT;01.01.2011;8,586
EBIT;01.01.2012;6,742
EBIT;01.01.2013;7,16
EBIT;01.01.2014;7,626
EBIT;01.01.2015;6,248
EBIT;01.01.2016;6,275
EBIT;01.01.2017;7,587
EBIT;01.01.2018;5,974
EBIT;01.01.2019;4,201
EBIT;01.01.2020;-0,191
EBIT;01.01.2021;7,677
EBIT;01.01.2022;6,548
EBITDA;01.01.2008;9,562
EBITDA;01.01.2009;7,388
EBITDA;01.01.2010;11,131
EBITDA;01.01.2011;11,993
EBITDA;01.01.2012;10,009
EBITDA;01.01.2013;10,432
EBITDA;01.01.2014;11,043
EBITDA;01.01.2015;10,649
EBITDA;01.01.2016;10,526
EBITDA;01.01.2017;10,765
EBITDA;01.01.2018;8,97
EBITDA;01.01.2019;8,185
EBITDA;01.01.2020;6,494
EBITDA;01.01.2021;11,355
EBITDA;01.01.2022;10,748
1 Metrik Datum Summe [Milliarden €]
2 Umsatz 01.01.1999 29,473
3 Umsatz 01.01.2000 35,946
4 Umsatz 01.01.2001 32,5
5 Umsatz 01.01.2002 32,216
6 Umsatz 01.01.2003 33,361
7 Umsatz 01.01.2004 37,537
8 Umsatz 01.01.2005 42,745
9 Umsatz 01.01.2006 52,61
10 Umsatz 01.01.2007 57,951
11 Umsatz 01.01.2008 62,304
12 Umsatz 01.01.2009 50,693
13 Umsatz 01.01.2010 63,873
14 Umsatz 01.01.2011 73,497
15 Umsatz 01.01.2012 72,129
16 Umsatz 01.01.2013 73,973
17 Umsatz 01.01.2014 74,326
18 Umsatz 01.01.2015 70,449
19 Umsatz 01.01.2016 57,55
20 Umsatz 01.01.2017 61,223
21 Umsatz 01.01.2018 60,22
22 Umsatz 01.01.2019 59,316
23 Umsatz 01.01.2020 59,149
24 Umsatz 01.01.2021 78,598
25 Umsatz 01.01.2022 87,327
26 EBIT 01.01.2005 5,83
27 EBIT 01.01.2006 6,75
28 EBIT 01.01.2007 7,316
29 EBIT 01.01.2008 6,463
30 EBIT 01.01.2009 3,677
31 EBIT 01.01.2010 7,761
32 EBIT 01.01.2011 8,586
33 EBIT 01.01.2012 6,742
34 EBIT 01.01.2013 7,16
35 EBIT 01.01.2014 7,626
36 EBIT 01.01.2015 6,248
37 EBIT 01.01.2016 6,275
38 EBIT 01.01.2017 7,587
39 EBIT 01.01.2018 5,974
40 EBIT 01.01.2019 4,201
41 EBIT 01.01.2020 -0,191
42 EBIT 01.01.2021 7,677
43 EBIT 01.01.2022 6,548
44 EBITDA 01.01.2008 9,562
45 EBITDA 01.01.2009 7,388
46 EBITDA 01.01.2010 11,131
47 EBITDA 01.01.2011 11,993
48 EBITDA 01.01.2012 10,009
49 EBITDA 01.01.2013 10,432
50 EBITDA 01.01.2014 11,043
51 EBITDA 01.01.2015 10,649
52 EBITDA 01.01.2016 10,526
53 EBITDA 01.01.2017 10,765
54 EBITDA 01.01.2018 8,97
55 EBITDA 01.01.2019 8,185
56 EBITDA 01.01.2020 6,494
57 EBITDA 01.01.2021 11,355
58 EBITDA 01.01.2022 10,748
@@ -0,0 +1,33 @@
Metrik;Datum;Summe [Milliarden €]
Umsatz;01.01.2007;66,912
Umsatz;01.01.2008;84,873
Umsatz;01.01.2009;79,974
Umsatz;01.01.2010;92,863
Umsatz;01.01.2011;112,954
Umsatz;01.01.2012;132,093
Umsatz;01.01.2013;119,615
Umsatz;01.01.2014;113,095
Umsatz;01.01.2015;42,656
Umsatz;01.01.2016;38,173
Umsatz;01.01.2017;37,965
Umsatz;01.01.2018;30,084
Umsatz;01.01.2019;41,284
Umsatz;01.01.2020;60,944
Umsatz;01.01.2021;77,358
Umsatz;01.01.2022;115,66
EBIT;01.01.2012;7,01
EBIT;01.01.2013;5,64
EBIT;01.01.2014;4,7
EBIT;01.01.2015;3,6
EBIT;01.01.2016;3,1
EBIT;01.01.2017;3,1
EBIT;01.01.2018;2,99
EBIT;01.01.2019;3,22
EBIT;01.01.2020;3,78
EBIT;01.01.2021;4,72
EBIT;01.01.2022;5,2
EBITDA;01.01.2018;4,84
EBITDA;01.01.2019;5,558
EBITDA;01.01.2020;6,905
EBITDA;01.01.2021;7,889
EBITDA;01.01.2022;8,059
1 Metrik Datum Summe [Milliarden €]
2 Umsatz 01.01.2007 66,912
3 Umsatz 01.01.2008 84,873
4 Umsatz 01.01.2009 79,974
5 Umsatz 01.01.2010 92,863
6 Umsatz 01.01.2011 112,954
7 Umsatz 01.01.2012 132,093
8 Umsatz 01.01.2013 119,615
9 Umsatz 01.01.2014 113,095
10 Umsatz 01.01.2015 42,656
11 Umsatz 01.01.2016 38,173
12 Umsatz 01.01.2017 37,965
13 Umsatz 01.01.2018 30,084
14 Umsatz 01.01.2019 41,284
15 Umsatz 01.01.2020 60,944
16 Umsatz 01.01.2021 77,358
17 Umsatz 01.01.2022 115,66
18 EBIT 01.01.2012 7,01
19 EBIT 01.01.2013 5,64
20 EBIT 01.01.2014 4,7
21 EBIT 01.01.2015 3,6
22 EBIT 01.01.2016 3,1
23 EBIT 01.01.2017 3,1
24 EBIT 01.01.2018 2,99
25 EBIT 01.01.2019 3,22
26 EBIT 01.01.2020 3,78
27 EBIT 01.01.2021 4,72
28 EBIT 01.01.2022 5,2
29 EBITDA 01.01.2018 4,84
30 EBITDA 01.01.2019 5,558
31 EBITDA 01.01.2020 6,905
32 EBITDA 01.01.2021 7,889
33 EBITDA 01.01.2022 8,059
@@ -0,0 +1,42 @@
Metrik;Datum;Summe [Milliarden €]
Umsatz;01.01.2005;59,6
Umsatz;01.01.2006;61,3
Umsatz;01.01.2007;62,5
Umsatz;01.01.2008;61,7
Umsatz;01.01.2009;64,6
Umsatz;01.01.2010;62,42
Umsatz;01.01.2011;58,65
Umsatz;01.01.2012;58,17
Umsatz;01.01.2013;60,13
Umsatz;01.01.2014;62,66
Umsatz;01.01.2015;69,23
Umsatz;01.01.2016;73,1
Umsatz;01.01.2017;74,95
Umsatz;01.01.2018;75,66
Umsatz;01.01.2019;80,53
Umsatz;01.01.2020;99,95
Umsatz;01.01.2021;107,61
Umsatz;01.01.2022;114,2
EBIT;01.01.2005;7,6
EBIT;01.01.2006;5,3
EBIT;01.01.2007;5,3
EBIT;01.01.2008;7
EBIT;01.01.2009;6
EBIT;01.01.2010;5,51
EBIT;01.01.2011;5,56
EBIT;01.01.2012;-3,96
EBIT;01.01.2013;4,93
EBIT;01.01.2014;7,25
EBIT;01.01.2015;7,03
EBIT;01.01.2016;9,16
EBIT;01.01.2017;9,38
EBIT;01.01.2018;8
EBIT;01.01.2019;9,46
EBIT;01.01.2020;12,37
EBIT;01.01.2021;12,58
EBIT;01.01.2022;15,41
EBITDA;01.01.2018;23,333
EBITDA;01.01.2019;24,731
EBITDA;01.01.2020;35,017
EBITDA;01.01.2021;37,33
EBITDA;01.01.2022;40,208
1 Metrik Datum Summe [Milliarden €]
2 Umsatz 01.01.2005 59,6
3 Umsatz 01.01.2006 61,3
4 Umsatz 01.01.2007 62,5
5 Umsatz 01.01.2008 61,7
6 Umsatz 01.01.2009 64,6
7 Umsatz 01.01.2010 62,42
8 Umsatz 01.01.2011 58,65
9 Umsatz 01.01.2012 58,17
10 Umsatz 01.01.2013 60,13
11 Umsatz 01.01.2014 62,66
12 Umsatz 01.01.2015 69,23
13 Umsatz 01.01.2016 73,1
14 Umsatz 01.01.2017 74,95
15 Umsatz 01.01.2018 75,66
16 Umsatz 01.01.2019 80,53
17 Umsatz 01.01.2020 99,95
18 Umsatz 01.01.2021 107,61
19 Umsatz 01.01.2022 114,2
20 EBIT 01.01.2005 7,6
21 EBIT 01.01.2006 5,3
22 EBIT 01.01.2007 5,3
23 EBIT 01.01.2008 7
24 EBIT 01.01.2009 6
25 EBIT 01.01.2010 5,51
26 EBIT 01.01.2011 5,56
27 EBIT 01.01.2012 -3,96
28 EBIT 01.01.2013 4,93
29 EBIT 01.01.2014 7,25
30 EBIT 01.01.2015 7,03
31 EBIT 01.01.2016 9,16
32 EBIT 01.01.2017 9,38
33 EBIT 01.01.2018 8
34 EBIT 01.01.2019 9,46
35 EBIT 01.01.2020 12,37
36 EBIT 01.01.2021 12,58
37 EBIT 01.01.2022 15,41
38 EBITDA 01.01.2018 23,333
39 EBITDA 01.01.2019 24,731
40 EBITDA 01.01.2020 35,017
41 EBITDA 01.01.2021 37,33
42 EBITDA 01.01.2022 40,208
@@ -0,0 +1,1000 @@
"Hans-Hermann;Colifu"
"Carolina;Jevugradeweiner"
"Heinz-Peter;Fowelatestein"
"Gerlind;Nasefo"
"Steven;Gutusedemüller"
"Cristina;Databison"
"Gisbert;Revebistein"
"Lilo;Gelesademüller"
"Hilmar;Virisegehein"
"Margaret;Koch"
"Fritz;Mitimode"
"Alexandre;Schmid"
"Brian;Cewamauhein"
"Sinaida;Viwagau"
"Nicole;Hotagrode"
"Rosalia;Suwofu"
"Rocco;Kotesedemüller"
"Kira;Jowifoson"
"Branko;Schulz"
"George;Schmidt"
"Walentina;Poradumeiner"
"Cemal;Pavobedemüller"
"Eberhardt;Dedugradeweiner"
"Reinhard;Welodustein"
"Friedrich;Fischer"
"Abbas;Bauer"
"Albina;Furafo"
"Patrick;Köhler"
"Karl-Heinz;Duwafiweiner"
"Birgitt;Vorewede"
"Gerolf;Potigradestein"
"Franz;Tölevade"
"Leonore;Hötubi"
"Dominik;Cuvidi"
"Friedrich-Wilhelm;Lotubi"
"Henri;König"
"Lea;Richter"
"Karla;König"
"Suse;Schulz"
"Hannes;Wötulatemüller"
"Ekkehard;Mevabede"
"Meinhard;Rötebahein"
"Sylvester;Hävado"
"Aurelia;Herrmann"
"Friedo;Sotofumüller"
"Gilbert;Piwosede"
"Meinhard;Ritedumüller"
"Ahmad;Lange"
"Adeline;Meyer"
"Edit;Sasivoremeiner"
"Josef;Fevigrade"
"Marlies;Nalofledemüller"
"Gerhart;Muwidihein"
"Susan;Redischatthein"
"Carolina;Fasifo"
"Henriette;Lisubedeweiner"
"Elvira;Neumann"
"Violetta;Folilode"
"Heike;Krüger"
"Hartmuth;Föwomodestein"
"Diethelm;Hitasedestein"
"Carin;Povebastein"
"Thekla;Schmitt"
"Albertine;Riwuwattemüller"
"Tülay;Schneider"
"Kerstin;Nolasadeson"
"Andreas;Liladumeiner"
"Nikolaos;Jevubedemeiner"
"Simona;Veruschattmüller"
"Diethard;Hüwawede"
"Dusan;Navusegeweiner"
"Hella;Zotefomüller"
"Ronald;Fasimattmüller"
"Insa;Hudemau"
"Niklas;Colibamüller"
"Evamaria;Huber"
"Loni;Viwifihein"
"Verena;Woruwattemüller"
"Ingelore;Titibedestein"
"Mehdi;Rutigradeson"
"Alida;Nasiplau"
"Annett;Gutefison"
"Leonie;Neumann"
"Eduard;Schmid"
"Joanna;Gürogau"
"Bernadette;Zeresedemeiner"
"Klaus;Schulze"
"Moritz;Bädagedestein"
"Ingelore;Setofareson"
"Nikolaj;Jetiplauson"
"Sylvie;Vitedumeiner"
"Till;Motidamüller"
"Heidelinde;Gilisege"
"Christof;Lutavademeiner"
"Torsten;Kowobimeiner"
"Nina;Nowugrodemüller"
"Jens-Uwe;Jewosede"
"Jörg;Sivuhedehein"
"Götz;Felegaumeiner"
"Danica;Hoffmann"
"Karl-Heinrich;Fewovademeiner"
"Aneta;Lürevore"
"Ignaz;König"
"Sylvia;Berulodemeiner"
"Svetlana;Zatimatthein"
"Felicia;Schulze"
"Marie-Louise;Hadawede"
"Antonietta;Neumann"
"Dragica;Zaribumeiner"
"Abram;Butoduson"
"Dina;Müsabedestein"
"Hilde;Cülusede"
"Verena;Tawugrodehein"
"Anatolij;Mulawedemeiner"
"Ira;Wulawadestein"
"Hildegard;Wotegatemeiner"
"Alwine;Koroschatt"
"Patric;Towedu"
"Nadeschda;Relolode"
"Hedi;Tadegrade"
"Dietlinde;Lelavore"
"Pascale;Tüdawedeweiner"
"Sevim;Vetisademüller"
"Erdal;Melogedeweiner"
"Rotraut;Fiduvorestein"
"Jane;Wovimode"
"Guenter;Turabimüller"
"Rosalia;Püwigrademüller"
"Leokadia;Hatavodeson"
"Magnus;Rürovadehein"
"Sieglinde;Däriplauson"
"Vincenzo;Schmidt"
"Änne;Välolaustein"
"Jobst;Rüwawatteweiner"
"Sibille;Betebustein"
"Friedericke;Märelauhein"
"Tom;Lutimau"
"Annelie;Jöwudumüller"
"Gabriela;Valafareweiner"
"Leila;Höramattson"
"Bruno;Lange"
"Mary;Ruwagradehein"
"Meral;Golovore"
"Svea;Götebahein"
"Cordula;Tawefu"
"Ralf-Peter;Gerigrodehein"
"Jörg-Peter;Wilobison"
"John;Püviwattemüller"
"Viviane;Fedabede"
"Friedbert;Jitubamüller"
"Marco;Schröder"
"Ahmet;Fuchs"
"Anita;Zesemau"
"Ekkehard;Mulobodo"
"Eberhardt;Schmitz"
"Donata;Hoffmann"
"Hilma;Hoffmann"
"Götz;Gesihedehein"
"Adriane;Cewosadestein"
"Bruno;Söwolatemeiner"
"Liliana;Cerufomeiner"
"Gilda;Cewebede"
"Kamil;Maseflodeson"
"Gotthard;Gasusegehein"
"Susann;Neumann"
"Nada;Zoruvaremüller"
"Manuel;Patofostein"
"Roland;Fitafo"
"Ronald;Voweda"
"Heike;Patedohein"
"Heiderose;Neumann"
"Birgid;Pivudistein"
"Mariola;Niwosedemüller"
"Darko;Hidamau"
"Gilbert;Bodavorehein"
"Adele;Müller"
"Annette;Wolf"
"Hulda;Cavusadeweiner"
"Benjamin;Vörivodemüller"
"Antonietta;Jörufere"
"Ernst-August;Wivugrodehein"
"Malgorzata;Düdisade"
"Eckhard;Cudumodeson"
"Rebekka;Bavuduweiner"
"Traude;König"
"Ramon;Wöridihein"
"Uwe;Taruwade"
"Ulf;Fadischattmüller"
"Wolf-Dieter;Voveba"
"Friedhelm;Giwumau"
"Ercan;Lehmann"
"Britt;Palesede"
"Eleonore;Vörugatehein"
"Drago;Lehmann"
"Sandor;Müller"
"Elisa;Nevamattstein"
"Hans;Masigate"
"Marika;Jasefareson"
"Angelique;Geloplau"
"Rosel;Folugrodestein"
"Ricarda;Schäfer"
"Wolfhard;Madigrade"
"Cemal;Sadohedemüller"
"Maria;Bölugedemeiner"
"Gesche;Noviwedehein"
"Mira;Fuwabuweiner"
"Miriam;Kutegate"
"Hilmar;Jäviwede"
"Klaus-Dieter;Fewomatt"
"Ursel;Sutomauson"
"Karl-Friedrich;Dötasegeweiner"
"Emmi;Tetaplaumeiner"
"Hans-Jochen;Wolf"
"Reinhard;Buwefere"
"Corina;Vovogatestein"
"Erdmute;Joligate"
"Edit;Hoffmann"
"Antonino;Schmitt"
"Betti;Görudo"
"Annamaria;Walter"
"Alexandra;Wagner"
"Hans-J.;Lehmann"
"Rosmarie;Covebison"
"Ottilie;Schäfer"
"Natalia;Meier"
"Edeltraut;Becker"
"Ferdi;Werner"
"Reimar;Schmitt"
"Erna;Vivesademeiner"
"Sylvia;Masumodehein"
"Thomas;Riwifledeweiner"
"Hans;Baragaumüller"
"Hüseyin;Zarebe"
"Erika;Suruvodeweiner"
"Nikolai;Jivubahein"
"Hans-J.;Hoffmann"
"Dorit;Sodemattson"
"Klaudia;Lutimodemüller"
"Mariana;Gatebeson"
"Jonas;Rawafimüller"
"Tony;Mätegrodestein"
"Sevim;Galilauhein"
"Irma;Hawogradeweiner"
"Carla;Sisuhede"
"Vinko;Bauer"
"Mirella;Siwaschatt"
"Eckart;Metelau"
"Ildiko;Mowuvore"
"Ivo;Päwofo"
"Friedhold;Covagedemeiner"
"Nancy;Jülelauhein"
"Gretel;Tödosadeson"
"Wigbert;Rewoschatt"
"Isabelle;Näligrodehein"
"Hanny;Richter"
"Rouven;Fuchs"
"Maya;Mowawedeweiner"
"Gordana;Wagner"
"Inna;Patogrode"
"Jobst;Vosavode"
"Milena;Botogrodemeiner"
"Stilla;Rutavademeiner"
"Stephanie;Schmid"
"Pirmin;Tuwelauhein"
"Fatima;Schmitt"
"Luise;Cevelaumeiner"
"Friedhilde;Zölowadestein"
"Ester;Pädibistein"
"Carmine;Schwarz"
"Damian;Hartmann"
"Serge;Kidasede"
"Andreas;Rätobiweiner"
"Walther;Liwogrademüller"
"Franziska;Jodosedestein"
"Amelie;Däwadu"
"Heinz-Gerd;Loleduson"
"Leyla;Divifustein"
"Catrin;Herrmann"
"Anna-Marie;Borewatte"
"Philomena;Rotolodehein"
"Erdogan;Lätemaustein"
"Klaus;Schäfer"
"Heidrun;Braun"
"Anna-Lena;Cudifimeiner"
"Gerhart;Jasamattson"
"Susann;Ditodiweiner"
"Simon;Pilemaumeiner"
"Kristin;Hofmann"
"Nuran;Bauer"
"Gudula;Culalatemeiner"
"Babett;Pasasademüller"
"Ludmila;Tetobumüller"
"Annelene;Jasevore"
"Maria-Luise;Meyer"
"Käthe;Herrmann"
"Jovan;Mawodu"
"Brigitte;Häsubede"
"Annegret;Silufareson"
"Heinz-Peter;Huber"
"Tibor;Lurimauweiner"
"Roland;Wuravode"
"Rafael;Meier"
"Hans-J.;Schmidt"
"Julia;Jesesegehein"
"Franz;Lange"
"Anne-Rose;Newivare"
"Antonina;Klein"
"Gino;Jilifimüller"
"Birte;Vösugedeweiner"
"Zlatko;Cäwilate"
"Luzia;Hatagateweiner"
"Hans;Wölesege"
"Hans-Heinrich;Garobodo"
"Beatrice;Norewade"
"Wenzel;Vidilatemeiner"
"Anton;Lüdomodeweiner"
"Heini;Mayer"
"George;Schmitz"
"Maya;Lange"
"Dina;Meweplauson"
"Wilhelmine;Havafledeweiner"
"Daniele;Lange"
"Christa-Maria;Tötevore"
"Anatol;Hoffmann"
"Eleni;Gilifostein"
"Roy;Cudilauson"
"Regina;Gatabuson"
"Wolfgang;Sulidason"
"Gisela;Pavusademüller"
"Heinz-Otto;Köhler"
"Massimo;Katugateweiner"
"Stephanie;Schmitt"
"Gotthard;Dätamattstein"
"Eric;Näwebison"
"Renata;Bisavorehein"
"Yasmin;Fischer"
"Andres;Futagatehein"
"Sinaida;Gorasegemüller"
"Klaus-Günter;Metafistein"
"Marko;Daladi"
"Gitte;Pösidohein"
"Frank;Zimmermann"
"Wendelin;Wolf"
"Otmar;Lövafistein"
"Janet;Rösifledehein"
"Kenan;Musobu"
"Gero;Musuvode"
"Norbert;Wolf"
"Gisa;Ludawade"
"Fredo;Lotevodehein"
"Sara;Golifledeson"
"Erica;Helavade"
"Hildegunde;Lavawatteweiner"
"Darko;Fölabodomeiner"
"Helge;Givuplaumüller"
"Julian;Zewegrademeiner"
"Aurelia;Vuwafostein"
"Lina;Wolf"
"Anne-Rose;Jorasademüller"
"Thilo;Krause"
"Margaret;Wudiflodemeiner"
"Gordon;Hesasadeson"
"Katharina;Zusadoweiner"
"Caren;Havigedestein"
"Grit;Pivafuweiner"
"Gina;Disagrade"
"Hildburg;Födobason"
"Gunther;Nuvolaustein"
"Esther;Richter"
"Luise;Kesosedemeiner"
"Antonietta;Hitalate"
"Edelbert;Maier"
"Sylke;Kaiser"
"Petra;Ralowede"
"Türkan;Zatugede"
"Corina;Dulemaumeiner"
"Kai-Uwe;Talawedemeiner"
"Ingolf;Düselodeson"
"Judith;Duleda"
"Volkhard;Meier"
"Hedi;Rädomodeweiner"
"Corina;Solibedemüller"
"Alban;Gowifo"
"Luciano;Schröder"
"Sergej;Favuflede"
"Sandor;Hotogrademeiner"
"Fredo;Raralateson"
"Daniele;Levisedeweiner"
"Magdalena;Nutewadestein"
"Edwin;Weduschatthein"
"Canan;Powomattstein"
"Tilly;Jarawedehein"
"Ulla;Neumann"
"Berthold;Pedogau"
"Thilo;Fotavade"
"Tanja;Rowomode"
"Adolfine;Madelaustein"
"Rebecca;Zodavoreweiner"
"Rigo;Netaferestein"
"Sigurd;Mowebi"
"Erwin;Läsosadeweiner"
"Tilman;Bitilateweiner"
"Angelique;Citafo"
"Trudel;Hasalau"
"Raissa;Jülodoweiner"
"Alma;Botomode"
"Stephanie;Zimmermann"
"Bernard;Mateschattmüller"
"Emma;Müller"
"Freia;Volifomüller"
"Hans-Herbert;Kurilatestein"
"Jacqueline;Schröder"
"Fredy;Sisagradeson"
"Elly;Casumodeson"
"Ellen;Pitasege"
"Petar;Schneider"
"Rosa;Palaschattweiner"
"Joana;Wavufo"
"Heide-Marie;Wiwevareweiner"
"Dittmar;Fusifare"
"Reinhart;Krause"
"Hilma;Lange"
"August;Goviwattemüller"
"Bianca;Wodimode"
"Kreszentia;Nuwiwede"
"Erdogan;Rulabodomüller"
"Sylke;Fusefomeiner"
"Hassan;Fischer"
"Ayse;Mödalateweiner"
"Hatice;Werner"
"Zlatko;Müregate"
"Tania;Werner"
"Detlef;Cewuvoremüller"
"Dariusz;Meyer"
"Oxana;Cösilodeweiner"
"Hans-Henning;Dovifledehein"
"Luka;Braun"
"Kristine;Kotewatte"
"Annedore;Mörufuhein"
"Mareen;Marehede"
"Pascal;Suresegeweiner"
"Almut;Meier"
"Reinald;Wolf"
"Sabina;Wagner"
"Katharina;Movobi"
"Athanasios;Cütefledemüller"
"Stefano;Beweda"
"Walfried;Müwawadehein"
"Damaris;Maier"
"Paulina;Detofistein"
"Artur;Folasademeiner"
"Erica;Worudustein"
"Konstantinos;Kirevademeiner"
"Natalja;Citigrademeiner"
"William;Fuchs"
"Patric;Fosagrode"
"Kilian;Kaiser"
"Heidemarie;Notuplaustein"
"Mariusz;Zowebede"
"Ulrike;Todeduson"
"Jovan;Fuvowademüller"
"Katerina;Nutevadehein"
"Elisabeth;Lewubameiner"
"Ernestine;Wötischattson"
"Aleksandar;Watehedestein"
"Halina;Jötumodehein"
"Annamaria;Mivovade"
"Irina;Dudawede"
"Heinfried;Fütefoson"
"Tassilo;Luvofare"
"Mariele;Ritigatemeiner"
"Lea;Madelaumeiner"
"Sibel;Givuwedehein"
"Leila;Kitubihein"
"Mohammed;Meyer"
"Janett;Givegrodestein"
"Vassilios;Vurigrade"
"Hans;Kutugate"
"Ralph;Budifu"
"Gotthilf;Curagradeweiner"
"Melitta;Nawifo"
"Dirk;Bitoba"
"Sandro;Vusemattweiner"
"Falko;Vesuplauweiner"
"Gesine;Hofmann"
"Fanny;Füwegedehein"
"Margaretha;Sodigrademeiner"
"Marcella;Läsilate"
"Anne;Hoffmann"
"Annaliese;Wüsuvade"
"Rocco;Hoffmann"
"Pedro;Daduhedemeiner"
"Frieda;Wolf"
"Luzia;Vewevaremüller"
"Marianne;Viribodomüller"
"Jose;Ratalodeweiner"
"Dan;Vötiwedemeiner"
"Leyla;Ruregateson"
"Orhan;Südagede"
"Reinhilde;Dudufu"
"Gerta;Koch"
"Marika;Bosefarestein"
"Chantal;Lehmann"
"James;Fedesademeiner"
"Ante;Nosegrode"
"Gottfried;Krüger"
"Theda;Sawigatehein"
"Jan;Nisischatt"
"Ullrich;Lehmann"
"Nikolaos;Tavuvaremeiner"
"Deborah;Vesimauson"
"Türkan;Jösovaremeiner"
"Ignatz;Gudafuweiner"
"Aleksandr;Säwafo"
"Hannah;Krause"
"Benedikt;Schröder"
"Erik;Leteferemeiner"
"Marga;Pirafistein"
"Arnd;Wütehedeson"
"Wiebke;Rulida"
"Isabella;Jodumodemüller"
"Marika;Küvafo"
"Björn;Sirafi"
"Branko;Bileplaumeiner"
"Dierk;Daregateson"
"Max;Fätifostein"
"Mareile;Zisaflede"
"Mahmoud;Vötivademeiner"
"Erol;Lehmann"
"Alexa;Nivusedeweiner"
"Ingmar;Hartmann"
"Victor;Fesiwattestein"
"Myriam;Hartmann"
"Emilie;Hörulauweiner"
"Rosi;Lorobimeiner"
"Vinko;Nowibedehein"
"Urban;Gewomode"
"Linus;Suvelatestein"
"Heinz-Walter;Jelimaumüller"
"Friedhilde;Wüwubastein"
"Auguste;Mayer"
"Fatih;Rädugradestein"
"Christof;Zurifu"
"Katharina;Fuwudason"
"Viktoria;Ludavoreson"
"Hans;Schmidt"
"Friedbert;Nütilaumüller"
"Geraldine;Zimmermann"
"Meta;Richter"
"Beata;Telobu"
"Jakob;Jovedi"
"Elena;Zimmermann"
"Anthony;Bötugedemeiner"
"Achim;Fädemodeson"
"Benita;Nedosade"
"Alwine;Köhler"
"Achim;Lowedihein"
"Kreszenz;Kadihede"
"Nikolai;Schneider"
"Eberhardt;Bauer"
"Mathilde;Duwefimüller"
"Linus;Hitisadeson"
"Nikolas;Schröder"
"Kordula;Mosimodehein"
"Jeanette;Walter"
"Gregor;Paviwademüller"
"Bettina;Mevewedeweiner"
"Beate;Havawattemüller"
"Walter;Votofostein"
"Hulda;Dälifumüller"
"Mary;Wütodoweiner"
"Patrick;Korofoweiner"
"Jörg;Küribahein"
"Meta;Naduflede"
"Magda;Malabodo"
"Paul-Heinz;Duwawatte"
"Stjepan;Fuchs"
"Babette;Havisedeweiner"
"Alexandre;Bivoflede"
"Michael;Reloplaumüller"
"Nicolas;Roleflode"
"Simon;Koch"
"Anna-Marie;Zulofuson"
"Giorgio;Vovoflode"
"Urs;Jelebaweiner"
"Gerdi;Kuvosade"
"Harm;Relusede"
"Fred;Pavuferehein"
"Ann;Zäraschattson"
"Gislinde;Givudohein"
"Valeria;Giteplaustein"
"Ortrud;Rutomattmeiner"
"Carmen;Zäromauhein"
"Leyla;Müller"
"Raissa;Lusugradestein"
"Ömer;Wawimattstein"
"Geza;König"
"Vittorio;Bevamaumüller"
"Patrick;Schmitt"
"Günther;Würafumüller"
"Hans-Uwe;Klein"
"Regine;Levafoweiner"
"Ekkehard;Gediduson"
"Susi;Lange"
"Heinz-Werner;Kewoflede"
"Timm;Werner"
"Gusti;Hutugatehein"
"Marie-Theres;Braun"
"Lukas;Nowematthein"
"Filippo;Dudoflode"
"Hüseyin;Votesegeson"
"Sandy;Ladagate"
"Bodo;Posibodo"
"Hellmuth;Zowemauhein"
"Sergej;Lange"
"Meinolf;Jiwobodostein"
"Heinz-Peter;Kesuduweiner"
"Hannes;Favifledestein"
"Doris;Redubimeiner"
"Reni;Jowasege"
"Liane;Braun"
"Holger;Förebihein"
"Mirko;Geresege"
"Ellinor;Pövischatthein"
"Christl;Schröder"
"Waltraud;Padufu"
"Leopoldine;Piwigrodeweiner"
"Gislinde;Tusudison"
"Leonardo;Mäveflede"
"Selim;Fotogatemeiner"
"Patricia;Bädihedemüller"
"Edelgard;Cusofoson"
"Juliana;Putebaweiner"
"Zehra;Käsolau"
"Sükrü;Dädumattmeiner"
"Hilmar;Schmid"
"Käte;Görivodemeiner"
"Ute;Getamaumüller"
"Friedhold;Silavade"
"Kristin;Saroschattson"
"Ida;Dutabison"
"Rafael;Fivalatemeiner"
"Wilma;Widavodemeiner"
"Claudio;Pätomodemüller"
"Friedo;Krüger"
"Marga;Herrmann"
"Gesa;Meier"
"Wanda;Zörefaremüller"
"Frauke;Kaiser"
"Hansjoachim;Wawodoson"
"Christel;Viwofison"
"Angelika;Becker"
"Suse;Situfledehein"
"Romuald;Puwewade"
"Erol;Midisege"
"Heini;Weber"
"Horst-Günter;Culiwedestein"
"Thea;Buludohein"
"Steve;Getusedehein"
"Heimo;Fetagrade"
"Zdenka;Vevuvareson"
"Stanislaw;Schwarz"
"Metin;Wudelateson"
"Walter;Didegatemüller"
"Ilka;Klein"
"Henning;Kotolode"
"Änne;Becker"
"Ines;Hüdofu"
"Emma;Noduwademüller"
"Wencke;Mowolau"
"Reza;Toredimeiner"
"Murat;Meliferehein"
"Hanne;Rosewade"
"Antonina;Budufiweiner"
"Hans-Wilhelm;Zisefaremüller"
"Thilo;Cöwefison"
"Marianna;Jütadu"
"Agata;Hoffmann"
"Stavros;Fitiplauhein"
"Margarita;Sutaflodehein"
"Walburga;Zosuhede"
"Sandor;Wusuferemüller"
"Ortrud;Welumatt"
"Luise;Cotuwattestein"
"Marlene;Lovomatt"
"Nicolas;Buteschattmeiner"
"James;Pevewattemüller"
"Mirco;Nodolauweiner"
"Egon;Fuchs"
"Burckhard;Schäfer"
"Dunja;Sevedi"
"Nikolas;Vovesademüller"
"Sergej;Jotosademeiner"
"Edelgard;Fuchs"
"Hermine;Newusedeweiner"
"Rico;Mayer"
"Berta;Schmidt"
"Dorothea;Fischer"
"Catherine;Klein"
"Sigfried;Lorelau"
"Karl;Jatufare"
"Galina;Becker"
"Wilhelmine;Josimode"
"Maria;Bavisedemeiner"
"Paul-Gerhard;Zuvidameiner"
"Ortrun;Wetuvodehein"
"Ingolf;Schmitz"
"Ottilie;Müller"
"Traugott;Dotofihein"
"Luciano;Werifihein"
"Siegward;Schmitz"
"Zlatko;Sisifumeiner"
"Henni;Schmid"
"Gabriella;Schwarz"
"Marcella;Tirilatehein"
"Lilian;Madusade"
"Kreszenz;Fürifumüller"
"Hans-Werner;Küsolateson"
"Emmi;Biwoferemeiner"
"Heidemarie;Wutudamüller"
"Melanie;Hofmann"
"Käthi;Cesemodestein"
"Etta;Koch"
"Heike;Sesegradestein"
"Eleonora;Tusabason"
"Gönül;Sutegede"
"Ariane;Murebodo"
"Henrik;Rewubamüller"
"Klaus-Jürgen;Schulze"
"Mike;Titifostein"
"Wenzel;Vivuvade"
"Türkan;Rasaduweiner"
"Zenta;Dedufimeiner"
"Laurenz;Butube"
"Marietta;Krause"
"Ingetraud;Dosubodohein"
"Hanni;Wowodistein"
"Ralf-Peter;Nosilodemeiner"
"Miguel;Hodifledemeiner"
"Mario;Jösugrodeweiner"
"Osman;Mitado"
"Bruno;Müller"
"Hans-Hinrich;Hotadu"
"Patrick;Schmidt"
"Birgid;Leselauweiner"
"Monica;Lüdofu"
"Georgine;Hiwematt"
"Mehmet;Fäwebason"
"Lioba;Meier"
"Hagen;Süvegatemüller"
"Kornelius;Fevefuweiner"
"Aleksej;Tadiplauhein"
"Rosmarie;Wätufohein"
"Fritz;Mayer"
"Hans;Düsuvadestein"
"Magdalene;Cusavarestein"
"Marliese;Fovuplaustein"
"Jakob;Relagauson"
"Leila;Koch"
"Stefanie;Revimattmeiner"
"Ingmar;Jevihedeweiner"
"Christine;Wusebimeiner"
"Jacob;Metufohein"
"Hans-Adolf;Neumann"
"Gisbert;Schulz"
"Meinrad;Wüwadomüller"
"Sieglinde;Tatoplau"
"Egbert;Pätofohein"
"Katy;Kölofareson"
"Sylvie;Lutigaustein"
"Knut;Puwoferestein"
"Gerhard;Hiwodomüller"
"Trudel;Wolf"
"Chantal;Krause"
"Esther;Wesewatte"
"Dragica;Fasuwade"
"Reginald;Madegauweiner"
"Fatima;Kusibu"
"Karla;Balifledestein"
"Mary;Netasedeson"
"Igor;Schäfer"
"Giovanna;Maier"
"Cornelia;Wütegrode"
"Mehmet;Bauer"
"Metin;Krüger"
"Herbert;Gelosadehein"
"Hans-Gerd;Zurulatehein"
"Mariusz;Tovemattmeiner"
"Hans-Helmut;Rasuwattemeiner"
"Baptist;Midafi"
"Pedro;Hilasedehein"
"Sarah;Tütibodomüller"
"Maximilian;Sawiwedemeiner"
"Ekrem;Muvagate"
"Kurt;Hofmann"
"Norbert;Dutematt"
"Patric;Siwubameiner"
"Gretel;Sutugedehein"
"Christl;Toreba"
"Pauline;Bitibeson"
"Franco;Fasasademeiner"
"Mariele;Laravodemeiner"
"Lili;Diribumüller"
"Kenneth;Sosemaumüller"
"Leo;Botomattmeiner"
"Henriette;Ralufere"
"Friedlinde;Lirimaustein"
"Gerold;Herrmann"
"Oliver;Zädebastein"
"Anatol;Vawavadeweiner"
"Tabea;Dutavore"
"Paulina;Dawodoweiner"
"Lilo;Nöduvarehein"
"Anthony;Rusabodostein"
"Rolf-Dieter;Dürogrodeweiner"
"Elise;Körebuweiner"
"Mona;Ketedumeiner"
"Patric;Sorisadeweiner"
"Karolina;Zutihedeson"
"Julie;Hartmann"
"Janos;Vavemauhein"
"Cathrin;Davobe"
"Katrin;Hutodahein"
"Canan;Klein"
"Heidelore;Fotubemüller"
"Toralf;Silahedemeiner"
"Adolf;Telolodemeiner"
"Katja;Lange"
"Veronika;Visebodo"
"Karlheinz;Givafoson"
"Leonie;Garaplau"
"Tassilo;Walter"
"Mirja;Becker"
"Antonios;Schneider"
"Tilman;Zusegrode"
"Bianka;Getafumüller"
"Stefani;Pawuhedehein"
"Dina;Dorafarestein"
"Silvester;Fasihedeweiner"
"Carolina;Jutilodemüller"
"Hans-Günter;Fitelauweiner"
"Eleni;Schäfer"
"Cemal;Ritigrodemüller"
"Hagen;Wutusegemüller"
"Bernt;Gorudason"
"Loretta;Becker"
"Sabrina;Katomattstein"
"Gottlieb;Zuvagaumüller"
"Rita;Witifumeiner"
"Cengiz;Detuflodestein"
"Oscar;Filafledestein"
"Pero;Müller"
"Ruthild;Muremau"
"Magret;Richter"
"Sigrid;Zimmermann"
"Nils;Lange"
"Cecilia;Zuwibodoweiner"
"Gisa;Maier"
"Dennis;Duvofo"
"Georgios;Weber"
"Kevin;Duregedestein"
"Albin;Metafaremeiner"
"Reinhard;Lowafoson"
"Christine;Duraflede"
"Guenter;Puwobuhein"
"Sylvia;Torumode"
"Marija;Mavelodemeiner"
"Tatiana;Vatawademüller"
"Türkan;Volubedemeiner"
"Pius;Wädeba"
"Rene;Fischer"
"Sebastiano;Rotavare"
"Sieghard;Fusudo"
"Imke;Züsoplaumüller"
"Egbert;Biduvade"
"Leonardo;Kevafoweiner"
"Bernd-Dieter;Mituwattemeiner"
"Leokadia;Füsuvode"
"Amelie;Mireplaumüller"
"Ingolf;Braun"
"Karolina;Pasegauson"
"Christian;Lange"
"Mara;Dotubodo"
"Helma;Häsibehein"
"Karsten;Vuvidostein"
"Andrey;Mudubodostein"
"Theres;Cevovoreweiner"
"Mareike;Braun"
"Kemal;Füribison"
"Andy;Pulusege"
"Anneliese;Nödugrodemeiner"
"Linda;Maier"
"Muharrem;Tasovode"
"Wibke;Meyer"
"Hans-Christian;Tävobiweiner"
"Walli;Walibodo"
"Gerti;Rotido"
"Giesela;Bevagede"
"Gerhart;Jarolodemeiner"
"Erhardt;Schröder"
"Mirjam;Nisabaweiner"
"Amalie;Lesolateweiner"
"Bertram;Novebedemüller"
"Eveline;Vavogedemüller"
"Walburga;Rowovoreweiner"
"Silke;Krause"
"Randolf;Huvadistein"
"Immo;Gulilatehein"
"Isa;Meyer"
"Olivia;Cativorestein"
"Arnulf;Meier"
"Elke;Vavegedeson"
"Meinrad;Basolate"
"Franz-Xaver;Kaiser"
"Irmtrud;Zativadeweiner"
"Mattias;Hedifoweiner"
"Petar;Virofuhein"
"Heino;Wurabimeiner"
"Lotte;Hötesadeson"
"Henner;Niwigate"
"Cemal;Bavugedeweiner"
"Hanny;Pologau"
"Heinz-Gerd;Vätisade"
"Kuno;Mayer"
"Philipp;Maier"
"Dietmar;Klein"
"Etta;Covibu"
"Hans;Parogedehein"
"Klaus;Cadimodestein"
"Dragan;Dovobimüller"
"Bernhardine;Caludiweiner"
"Bianka;Horiwadeweiner"
"Franz;Hatulate"
"Kuno;Wutofohein"
"Monja;Barosedestein"
"Monique;Batuschattmüller"
"Robin;Dedifereson"
"Kaspar;Husubamüller"
"Magnus;Dütomattmüller"
"Rosel;Luvewatteson"
"Tino;Hesisedemüller"
"Carlo;Buvosademüller"
"Petar;Rerovodeson"
"Murat;Bewisedeson"
"Sonja;Vutawedeson"
"Birgitta;Wavugedehein"
"Maritta;Vedosademüller"
"Clarissa;Zuvibustein"
"Urszula;Köhler"
"Hans-Werner;Zimmermann"
"Iris;Viwimattweiner"
"Stefan;Däsidason"
"Cäcilia;Schäfer"
"Gabriel;Kadufareson"
"Leopold;Zetogau"
"Adelgunde;Motivadeson"
"Kathleen;Bötifistein"
"Sybille;Süravareson"
"Andy;Becker"
"Ewald;Masegradehein"
"Christa;Modischatt"
"Ansgar;Sörasadeson"
"Wulf;Gerabu"
"Adelgunde;Motufaremeiner"
"Marian;Cesosedeson"
"Rupert;Motugrodehein"
"Friedhelm;Wowebe"
"Anne-Kathrin;Hevusegeweiner"
"Luise;Meier"
"Violetta;Bilalatemeiner"
"Edda;Rowemau"
"Viktor;Tutewatteweiner"
"Elwira;Herrmann"
"Johanna;Ridivare"
"Meinolf;Rusegedeson"
"Klaus-Ulrich;Hartmann"
"Kai-Uwe;Puvagateson"
"Korinna;Hotiwatte"
"Tatiana;Rirobihein"
"Silvana;Tilifoweiner"
"Georgia;Vodigate"
"Baptist;Gäligrodeweiner"
"Darius;Rätisademeiner"
"Magda;Köhler"
"Anne-Kathrin;Holubi"
"Theres;Nevovarehein"
"Ignatz;Walter"
"Frederike;Richter"
"Gerard;Davidustein"
"Karl-Hermann;Patevade"
"Judith;Köhler"
"Randolf;Zedufledeson"
"Henning;Vutoda"
"Maik;Ralabe"
"Ercan;Cilumattstein"
"Alicia;Sarolodestein"
"Ingmar;Vitisedehein"
"Augustin;Schmitz"
"Michaela;Werner"
"Raymund;Sewesedemüller"
1 Hans-Hermann;Colifu
2 Carolina;Jevugradeweiner
3 Heinz-Peter;Fowelatestein
4 Gerlind;Nasefo
5 Steven;Gutusedemüller
6 Cristina;Databison
7 Gisbert;Revebistein
8 Lilo;Gelesademüller
9 Hilmar;Virisegehein
10 Margaret;Koch
11 Fritz;Mitimode
12 Alexandre;Schmid
13 Brian;Cewamauhein
14 Sinaida;Viwagau
15 Nicole;Hotagrode
16 Rosalia;Suwofu
17 Rocco;Kotesedemüller
18 Kira;Jowifoson
19 Branko;Schulz
20 George;Schmidt
21 Walentina;Poradumeiner
22 Cemal;Pavobedemüller
23 Eberhardt;Dedugradeweiner
24 Reinhard;Welodustein
25 Friedrich;Fischer
26 Abbas;Bauer
27 Albina;Furafo
28 Patrick;Köhler
29 Karl-Heinz;Duwafiweiner
30 Birgitt;Vorewede
31 Gerolf;Potigradestein
32 Franz;Tölevade
33 Leonore;Hötubi
34 Dominik;Cuvidi
35 Friedrich-Wilhelm;Lotubi
36 Henri;König
37 Lea;Richter
38 Karla;König
39 Suse;Schulz
40 Hannes;Wötulatemüller
41 Ekkehard;Mevabede
42 Meinhard;Rötebahein
43 Sylvester;Hävado
44 Aurelia;Herrmann
45 Friedo;Sotofumüller
46 Gilbert;Piwosede
47 Meinhard;Ritedumüller
48 Ahmad;Lange
49 Adeline;Meyer
50 Edit;Sasivoremeiner
51 Josef;Fevigrade
52 Marlies;Nalofledemüller
53 Gerhart;Muwidihein
54 Susan;Redischatthein
55 Carolina;Fasifo
56 Henriette;Lisubedeweiner
57 Elvira;Neumann
58 Violetta;Folilode
59 Heike;Krüger
60 Hartmuth;Föwomodestein
61 Diethelm;Hitasedestein
62 Carin;Povebastein
63 Thekla;Schmitt
64 Albertine;Riwuwattemüller
65 Tülay;Schneider
66 Kerstin;Nolasadeson
67 Andreas;Liladumeiner
68 Nikolaos;Jevubedemeiner
69 Simona;Veruschattmüller
70 Diethard;Hüwawede
71 Dusan;Navusegeweiner
72 Hella;Zotefomüller
73 Ronald;Fasimattmüller
74 Insa;Hudemau
75 Niklas;Colibamüller
76 Evamaria;Huber
77 Loni;Viwifihein
78 Verena;Woruwattemüller
79 Ingelore;Titibedestein
80 Mehdi;Rutigradeson
81 Alida;Nasiplau
82 Annett;Gutefison
83 Leonie;Neumann
84 Eduard;Schmid
85 Joanna;Gürogau
86 Bernadette;Zeresedemeiner
87 Klaus;Schulze
88 Moritz;Bädagedestein
89 Ingelore;Setofareson
90 Nikolaj;Jetiplauson
91 Sylvie;Vitedumeiner
92 Till;Motidamüller
93 Heidelinde;Gilisege
94 Christof;Lutavademeiner
95 Torsten;Kowobimeiner
96 Nina;Nowugrodemüller
97 Jens-Uwe;Jewosede
98 Jörg;Sivuhedehein
99 Götz;Felegaumeiner
100 Danica;Hoffmann
101 Karl-Heinrich;Fewovademeiner
102 Aneta;Lürevore
103 Ignaz;König
104 Sylvia;Berulodemeiner
105 Svetlana;Zatimatthein
106 Felicia;Schulze
107 Marie-Louise;Hadawede
108 Antonietta;Neumann
109 Dragica;Zaribumeiner
110 Abram;Butoduson
111 Dina;Müsabedestein
112 Hilde;Cülusede
113 Verena;Tawugrodehein
114 Anatolij;Mulawedemeiner
115 Ira;Wulawadestein
116 Hildegard;Wotegatemeiner
117 Alwine;Koroschatt
118 Patric;Towedu
119 Nadeschda;Relolode
120 Hedi;Tadegrade
121 Dietlinde;Lelavore
122 Pascale;Tüdawedeweiner
123 Sevim;Vetisademüller
124 Erdal;Melogedeweiner
125 Rotraut;Fiduvorestein
126 Jane;Wovimode
127 Guenter;Turabimüller
128 Rosalia;Püwigrademüller
129 Leokadia;Hatavodeson
130 Magnus;Rürovadehein
131 Sieglinde;Däriplauson
132 Vincenzo;Schmidt
133 Änne;Välolaustein
134 Jobst;Rüwawatteweiner
135 Sibille;Betebustein
136 Friedericke;Märelauhein
137 Tom;Lutimau
138 Annelie;Jöwudumüller
139 Gabriela;Valafareweiner
140 Leila;Höramattson
141 Bruno;Lange
142 Mary;Ruwagradehein
143 Meral;Golovore
144 Svea;Götebahein
145 Cordula;Tawefu
146 Ralf-Peter;Gerigrodehein
147 Jörg-Peter;Wilobison
148 John;Püviwattemüller
149 Viviane;Fedabede
150 Friedbert;Jitubamüller
151 Marco;Schröder
152 Ahmet;Fuchs
153 Anita;Zesemau
154 Ekkehard;Mulobodo
155 Eberhardt;Schmitz
156 Donata;Hoffmann
157 Hilma;Hoffmann
158 Götz;Gesihedehein
159 Adriane;Cewosadestein
160 Bruno;Söwolatemeiner
161 Liliana;Cerufomeiner
162 Gilda;Cewebede
163 Kamil;Maseflodeson
164 Gotthard;Gasusegehein
165 Susann;Neumann
166 Nada;Zoruvaremüller
167 Manuel;Patofostein
168 Roland;Fitafo
169 Ronald;Voweda
170 Heike;Patedohein
171 Heiderose;Neumann
172 Birgid;Pivudistein
173 Mariola;Niwosedemüller
174 Darko;Hidamau
175 Gilbert;Bodavorehein
176 Adele;Müller
177 Annette;Wolf
178 Hulda;Cavusadeweiner
179 Benjamin;Vörivodemüller
180 Antonietta;Jörufere
181 Ernst-August;Wivugrodehein
182 Malgorzata;Düdisade
183 Eckhard;Cudumodeson
184 Rebekka;Bavuduweiner
185 Traude;König
186 Ramon;Wöridihein
187 Uwe;Taruwade
188 Ulf;Fadischattmüller
189 Wolf-Dieter;Voveba
190 Friedhelm;Giwumau
191 Ercan;Lehmann
192 Britt;Palesede
193 Eleonore;Vörugatehein
194 Drago;Lehmann
195 Sandor;Müller
196 Elisa;Nevamattstein
197 Hans;Masigate
198 Marika;Jasefareson
199 Angelique;Geloplau
200 Rosel;Folugrodestein
201 Ricarda;Schäfer
202 Wolfhard;Madigrade
203 Cemal;Sadohedemüller
204 Maria;Bölugedemeiner
205 Gesche;Noviwedehein
206 Mira;Fuwabuweiner
207 Miriam;Kutegate
208 Hilmar;Jäviwede
209 Klaus-Dieter;Fewomatt
210 Ursel;Sutomauson
211 Karl-Friedrich;Dötasegeweiner
212 Emmi;Tetaplaumeiner
213 Hans-Jochen;Wolf
214 Reinhard;Buwefere
215 Corina;Vovogatestein
216 Erdmute;Joligate
217 Edit;Hoffmann
218 Antonino;Schmitt
219 Betti;Görudo
220 Annamaria;Walter
221 Alexandra;Wagner
222 Hans-J.;Lehmann
223 Rosmarie;Covebison
224 Ottilie;Schäfer
225 Natalia;Meier
226 Edeltraut;Becker
227 Ferdi;Werner
228 Reimar;Schmitt
229 Erna;Vivesademeiner
230 Sylvia;Masumodehein
231 Thomas;Riwifledeweiner
232 Hans;Baragaumüller
233 Hüseyin;Zarebe
234 Erika;Suruvodeweiner
235 Nikolai;Jivubahein
236 Hans-J.;Hoffmann
237 Dorit;Sodemattson
238 Klaudia;Lutimodemüller
239 Mariana;Gatebeson
240 Jonas;Rawafimüller
241 Tony;Mätegrodestein
242 Sevim;Galilauhein
243 Irma;Hawogradeweiner
244 Carla;Sisuhede
245 Vinko;Bauer
246 Mirella;Siwaschatt
247 Eckart;Metelau
248 Ildiko;Mowuvore
249 Ivo;Päwofo
250 Friedhold;Covagedemeiner
251 Nancy;Jülelauhein
252 Gretel;Tödosadeson
253 Wigbert;Rewoschatt
254 Isabelle;Näligrodehein
255 Hanny;Richter
256 Rouven;Fuchs
257 Maya;Mowawedeweiner
258 Gordana;Wagner
259 Inna;Patogrode
260 Jobst;Vosavode
261 Milena;Botogrodemeiner
262 Stilla;Rutavademeiner
263 Stephanie;Schmid
264 Pirmin;Tuwelauhein
265 Fatima;Schmitt
266 Luise;Cevelaumeiner
267 Friedhilde;Zölowadestein
268 Ester;Pädibistein
269 Carmine;Schwarz
270 Damian;Hartmann
271 Serge;Kidasede
272 Andreas;Rätobiweiner
273 Walther;Liwogrademüller
274 Franziska;Jodosedestein
275 Amelie;Däwadu
276 Heinz-Gerd;Loleduson
277 Leyla;Divifustein
278 Catrin;Herrmann
279 Anna-Marie;Borewatte
280 Philomena;Rotolodehein
281 Erdogan;Lätemaustein
282 Klaus;Schäfer
283 Heidrun;Braun
284 Anna-Lena;Cudifimeiner
285 Gerhart;Jasamattson
286 Susann;Ditodiweiner
287 Simon;Pilemaumeiner
288 Kristin;Hofmann
289 Nuran;Bauer
290 Gudula;Culalatemeiner
291 Babett;Pasasademüller
292 Ludmila;Tetobumüller
293 Annelene;Jasevore
294 Maria-Luise;Meyer
295 Käthe;Herrmann
296 Jovan;Mawodu
297 Brigitte;Häsubede
298 Annegret;Silufareson
299 Heinz-Peter;Huber
300 Tibor;Lurimauweiner
301 Roland;Wuravode
302 Rafael;Meier
303 Hans-J.;Schmidt
304 Julia;Jesesegehein
305 Franz;Lange
306 Anne-Rose;Newivare
307 Antonina;Klein
308 Gino;Jilifimüller
309 Birte;Vösugedeweiner
310 Zlatko;Cäwilate
311 Luzia;Hatagateweiner
312 Hans;Wölesege
313 Hans-Heinrich;Garobodo
314 Beatrice;Norewade
315 Wenzel;Vidilatemeiner
316 Anton;Lüdomodeweiner
317 Heini;Mayer
318 George;Schmitz
319 Maya;Lange
320 Dina;Meweplauson
321 Wilhelmine;Havafledeweiner
322 Daniele;Lange
323 Christa-Maria;Tötevore
324 Anatol;Hoffmann
325 Eleni;Gilifostein
326 Roy;Cudilauson
327 Regina;Gatabuson
328 Wolfgang;Sulidason
329 Gisela;Pavusademüller
330 Heinz-Otto;Köhler
331 Massimo;Katugateweiner
332 Stephanie;Schmitt
333 Gotthard;Dätamattstein
334 Eric;Näwebison
335 Renata;Bisavorehein
336 Yasmin;Fischer
337 Andres;Futagatehein
338 Sinaida;Gorasegemüller
339 Klaus-Günter;Metafistein
340 Marko;Daladi
341 Gitte;Pösidohein
342 Frank;Zimmermann
343 Wendelin;Wolf
344 Otmar;Lövafistein
345 Janet;Rösifledehein
346 Kenan;Musobu
347 Gero;Musuvode
348 Norbert;Wolf
349 Gisa;Ludawade
350 Fredo;Lotevodehein
351 Sara;Golifledeson
352 Erica;Helavade
353 Hildegunde;Lavawatteweiner
354 Darko;Fölabodomeiner
355 Helge;Givuplaumüller
356 Julian;Zewegrademeiner
357 Aurelia;Vuwafostein
358 Lina;Wolf
359 Anne-Rose;Jorasademüller
360 Thilo;Krause
361 Margaret;Wudiflodemeiner
362 Gordon;Hesasadeson
363 Katharina;Zusadoweiner
364 Caren;Havigedestein
365 Grit;Pivafuweiner
366 Gina;Disagrade
367 Hildburg;Födobason
368 Gunther;Nuvolaustein
369 Esther;Richter
370 Luise;Kesosedemeiner
371 Antonietta;Hitalate
372 Edelbert;Maier
373 Sylke;Kaiser
374 Petra;Ralowede
375 Türkan;Zatugede
376 Corina;Dulemaumeiner
377 Kai-Uwe;Talawedemeiner
378 Ingolf;Düselodeson
379 Judith;Duleda
380 Volkhard;Meier
381 Hedi;Rädomodeweiner
382 Corina;Solibedemüller
383 Alban;Gowifo
384 Luciano;Schröder
385 Sergej;Favuflede
386 Sandor;Hotogrademeiner
387 Fredo;Raralateson
388 Daniele;Levisedeweiner
389 Magdalena;Nutewadestein
390 Edwin;Weduschatthein
391 Canan;Powomattstein
392 Tilly;Jarawedehein
393 Ulla;Neumann
394 Berthold;Pedogau
395 Thilo;Fotavade
396 Tanja;Rowomode
397 Adolfine;Madelaustein
398 Rebecca;Zodavoreweiner
399 Rigo;Netaferestein
400 Sigurd;Mowebi
401 Erwin;Läsosadeweiner
402 Tilman;Bitilateweiner
403 Angelique;Citafo
404 Trudel;Hasalau
405 Raissa;Jülodoweiner
406 Alma;Botomode
407 Stephanie;Zimmermann
408 Bernard;Mateschattmüller
409 Emma;Müller
410 Freia;Volifomüller
411 Hans-Herbert;Kurilatestein
412 Jacqueline;Schröder
413 Fredy;Sisagradeson
414 Elly;Casumodeson
415 Ellen;Pitasege
416 Petar;Schneider
417 Rosa;Palaschattweiner
418 Joana;Wavufo
419 Heide-Marie;Wiwevareweiner
420 Dittmar;Fusifare
421 Reinhart;Krause
422 Hilma;Lange
423 August;Goviwattemüller
424 Bianca;Wodimode
425 Kreszentia;Nuwiwede
426 Erdogan;Rulabodomüller
427 Sylke;Fusefomeiner
428 Hassan;Fischer
429 Ayse;Mödalateweiner
430 Hatice;Werner
431 Zlatko;Müregate
432 Tania;Werner
433 Detlef;Cewuvoremüller
434 Dariusz;Meyer
435 Oxana;Cösilodeweiner
436 Hans-Henning;Dovifledehein
437 Luka;Braun
438 Kristine;Kotewatte
439 Annedore;Mörufuhein
440 Mareen;Marehede
441 Pascal;Suresegeweiner
442 Almut;Meier
443 Reinald;Wolf
444 Sabina;Wagner
445 Katharina;Movobi
446 Athanasios;Cütefledemüller
447 Stefano;Beweda
448 Walfried;Müwawadehein
449 Damaris;Maier
450 Paulina;Detofistein
451 Artur;Folasademeiner
452 Erica;Worudustein
453 Konstantinos;Kirevademeiner
454 Natalja;Citigrademeiner
455 William;Fuchs
456 Patric;Fosagrode
457 Kilian;Kaiser
458 Heidemarie;Notuplaustein
459 Mariusz;Zowebede
460 Ulrike;Todeduson
461 Jovan;Fuvowademüller
462 Katerina;Nutevadehein
463 Elisabeth;Lewubameiner
464 Ernestine;Wötischattson
465 Aleksandar;Watehedestein
466 Halina;Jötumodehein
467 Annamaria;Mivovade
468 Irina;Dudawede
469 Heinfried;Fütefoson
470 Tassilo;Luvofare
471 Mariele;Ritigatemeiner
472 Lea;Madelaumeiner
473 Sibel;Givuwedehein
474 Leila;Kitubihein
475 Mohammed;Meyer
476 Janett;Givegrodestein
477 Vassilios;Vurigrade
478 Hans;Kutugate
479 Ralph;Budifu
480 Gotthilf;Curagradeweiner
481 Melitta;Nawifo
482 Dirk;Bitoba
483 Sandro;Vusemattweiner
484 Falko;Vesuplauweiner
485 Gesine;Hofmann
486 Fanny;Füwegedehein
487 Margaretha;Sodigrademeiner
488 Marcella;Läsilate
489 Anne;Hoffmann
490 Annaliese;Wüsuvade
491 Rocco;Hoffmann
492 Pedro;Daduhedemeiner
493 Frieda;Wolf
494 Luzia;Vewevaremüller
495 Marianne;Viribodomüller
496 Jose;Ratalodeweiner
497 Dan;Vötiwedemeiner
498 Leyla;Ruregateson
499 Orhan;Südagede
500 Reinhilde;Dudufu
501 Gerta;Koch
502 Marika;Bosefarestein
503 Chantal;Lehmann
504 James;Fedesademeiner
505 Ante;Nosegrode
506 Gottfried;Krüger
507 Theda;Sawigatehein
508 Jan;Nisischatt
509 Ullrich;Lehmann
510 Nikolaos;Tavuvaremeiner
511 Deborah;Vesimauson
512 Türkan;Jösovaremeiner
513 Ignatz;Gudafuweiner
514 Aleksandr;Säwafo
515 Hannah;Krause
516 Benedikt;Schröder
517 Erik;Leteferemeiner
518 Marga;Pirafistein
519 Arnd;Wütehedeson
520 Wiebke;Rulida
521 Isabella;Jodumodemüller
522 Marika;Küvafo
523 Björn;Sirafi
524 Branko;Bileplaumeiner
525 Dierk;Daregateson
526 Max;Fätifostein
527 Mareile;Zisaflede
528 Mahmoud;Vötivademeiner
529 Erol;Lehmann
530 Alexa;Nivusedeweiner
531 Ingmar;Hartmann
532 Victor;Fesiwattestein
533 Myriam;Hartmann
534 Emilie;Hörulauweiner
535 Rosi;Lorobimeiner
536 Vinko;Nowibedehein
537 Urban;Gewomode
538 Linus;Suvelatestein
539 Heinz-Walter;Jelimaumüller
540 Friedhilde;Wüwubastein
541 Auguste;Mayer
542 Fatih;Rädugradestein
543 Christof;Zurifu
544 Katharina;Fuwudason
545 Viktoria;Ludavoreson
546 Hans;Schmidt
547 Friedbert;Nütilaumüller
548 Geraldine;Zimmermann
549 Meta;Richter
550 Beata;Telobu
551 Jakob;Jovedi
552 Elena;Zimmermann
553 Anthony;Bötugedemeiner
554 Achim;Fädemodeson
555 Benita;Nedosade
556 Alwine;Köhler
557 Achim;Lowedihein
558 Kreszenz;Kadihede
559 Nikolai;Schneider
560 Eberhardt;Bauer
561 Mathilde;Duwefimüller
562 Linus;Hitisadeson
563 Nikolas;Schröder
564 Kordula;Mosimodehein
565 Jeanette;Walter
566 Gregor;Paviwademüller
567 Bettina;Mevewedeweiner
568 Beate;Havawattemüller
569 Walter;Votofostein
570 Hulda;Dälifumüller
571 Mary;Wütodoweiner
572 Patrick;Korofoweiner
573 Jörg;Küribahein
574 Meta;Naduflede
575 Magda;Malabodo
576 Paul-Heinz;Duwawatte
577 Stjepan;Fuchs
578 Babette;Havisedeweiner
579 Alexandre;Bivoflede
580 Michael;Reloplaumüller
581 Nicolas;Roleflode
582 Simon;Koch
583 Anna-Marie;Zulofuson
584 Giorgio;Vovoflode
585 Urs;Jelebaweiner
586 Gerdi;Kuvosade
587 Harm;Relusede
588 Fred;Pavuferehein
589 Ann;Zäraschattson
590 Gislinde;Givudohein
591 Valeria;Giteplaustein
592 Ortrud;Rutomattmeiner
593 Carmen;Zäromauhein
594 Leyla;Müller
595 Raissa;Lusugradestein
596 Ömer;Wawimattstein
597 Geza;König
598 Vittorio;Bevamaumüller
599 Patrick;Schmitt
600 Günther;Würafumüller
601 Hans-Uwe;Klein
602 Regine;Levafoweiner
603 Ekkehard;Gediduson
604 Susi;Lange
605 Heinz-Werner;Kewoflede
606 Timm;Werner
607 Gusti;Hutugatehein
608 Marie-Theres;Braun
609 Lukas;Nowematthein
610 Filippo;Dudoflode
611 Hüseyin;Votesegeson
612 Sandy;Ladagate
613 Bodo;Posibodo
614 Hellmuth;Zowemauhein
615 Sergej;Lange
616 Meinolf;Jiwobodostein
617 Heinz-Peter;Kesuduweiner
618 Hannes;Favifledestein
619 Doris;Redubimeiner
620 Reni;Jowasege
621 Liane;Braun
622 Holger;Förebihein
623 Mirko;Geresege
624 Ellinor;Pövischatthein
625 Christl;Schröder
626 Waltraud;Padufu
627 Leopoldine;Piwigrodeweiner
628 Gislinde;Tusudison
629 Leonardo;Mäveflede
630 Selim;Fotogatemeiner
631 Patricia;Bädihedemüller
632 Edelgard;Cusofoson
633 Juliana;Putebaweiner
634 Zehra;Käsolau
635 Sükrü;Dädumattmeiner
636 Hilmar;Schmid
637 Käte;Görivodemeiner
638 Ute;Getamaumüller
639 Friedhold;Silavade
640 Kristin;Saroschattson
641 Ida;Dutabison
642 Rafael;Fivalatemeiner
643 Wilma;Widavodemeiner
644 Claudio;Pätomodemüller
645 Friedo;Krüger
646 Marga;Herrmann
647 Gesa;Meier
648 Wanda;Zörefaremüller
649 Frauke;Kaiser
650 Hansjoachim;Wawodoson
651 Christel;Viwofison
652 Angelika;Becker
653 Suse;Situfledehein
654 Romuald;Puwewade
655 Erol;Midisege
656 Heini;Weber
657 Horst-Günter;Culiwedestein
658 Thea;Buludohein
659 Steve;Getusedehein
660 Heimo;Fetagrade
661 Zdenka;Vevuvareson
662 Stanislaw;Schwarz
663 Metin;Wudelateson
664 Walter;Didegatemüller
665 Ilka;Klein
666 Henning;Kotolode
667 Änne;Becker
668 Ines;Hüdofu
669 Emma;Noduwademüller
670 Wencke;Mowolau
671 Reza;Toredimeiner
672 Murat;Meliferehein
673 Hanne;Rosewade
674 Antonina;Budufiweiner
675 Hans-Wilhelm;Zisefaremüller
676 Thilo;Cöwefison
677 Marianna;Jütadu
678 Agata;Hoffmann
679 Stavros;Fitiplauhein
680 Margarita;Sutaflodehein
681 Walburga;Zosuhede
682 Sandor;Wusuferemüller
683 Ortrud;Welumatt
684 Luise;Cotuwattestein
685 Marlene;Lovomatt
686 Nicolas;Buteschattmeiner
687 James;Pevewattemüller
688 Mirco;Nodolauweiner
689 Egon;Fuchs
690 Burckhard;Schäfer
691 Dunja;Sevedi
692 Nikolas;Vovesademüller
693 Sergej;Jotosademeiner
694 Edelgard;Fuchs
695 Hermine;Newusedeweiner
696 Rico;Mayer
697 Berta;Schmidt
698 Dorothea;Fischer
699 Catherine;Klein
700 Sigfried;Lorelau
701 Karl;Jatufare
702 Galina;Becker
703 Wilhelmine;Josimode
704 Maria;Bavisedemeiner
705 Paul-Gerhard;Zuvidameiner
706 Ortrun;Wetuvodehein
707 Ingolf;Schmitz
708 Ottilie;Müller
709 Traugott;Dotofihein
710 Luciano;Werifihein
711 Siegward;Schmitz
712 Zlatko;Sisifumeiner
713 Henni;Schmid
714 Gabriella;Schwarz
715 Marcella;Tirilatehein
716 Lilian;Madusade
717 Kreszenz;Fürifumüller
718 Hans-Werner;Küsolateson
719 Emmi;Biwoferemeiner
720 Heidemarie;Wutudamüller
721 Melanie;Hofmann
722 Käthi;Cesemodestein
723 Etta;Koch
724 Heike;Sesegradestein
725 Eleonora;Tusabason
726 Gönül;Sutegede
727 Ariane;Murebodo
728 Henrik;Rewubamüller
729 Klaus-Jürgen;Schulze
730 Mike;Titifostein
731 Wenzel;Vivuvade
732 Türkan;Rasaduweiner
733 Zenta;Dedufimeiner
734 Laurenz;Butube
735 Marietta;Krause
736 Ingetraud;Dosubodohein
737 Hanni;Wowodistein
738 Ralf-Peter;Nosilodemeiner
739 Miguel;Hodifledemeiner
740 Mario;Jösugrodeweiner
741 Osman;Mitado
742 Bruno;Müller
743 Hans-Hinrich;Hotadu
744 Patrick;Schmidt
745 Birgid;Leselauweiner
746 Monica;Lüdofu
747 Georgine;Hiwematt
748 Mehmet;Fäwebason
749 Lioba;Meier
750 Hagen;Süvegatemüller
751 Kornelius;Fevefuweiner
752 Aleksej;Tadiplauhein
753 Rosmarie;Wätufohein
754 Fritz;Mayer
755 Hans;Düsuvadestein
756 Magdalene;Cusavarestein
757 Marliese;Fovuplaustein
758 Jakob;Relagauson
759 Leila;Koch
760 Stefanie;Revimattmeiner
761 Ingmar;Jevihedeweiner
762 Christine;Wusebimeiner
763 Jacob;Metufohein
764 Hans-Adolf;Neumann
765 Gisbert;Schulz
766 Meinrad;Wüwadomüller
767 Sieglinde;Tatoplau
768 Egbert;Pätofohein
769 Katy;Kölofareson
770 Sylvie;Lutigaustein
771 Knut;Puwoferestein
772 Gerhard;Hiwodomüller
773 Trudel;Wolf
774 Chantal;Krause
775 Esther;Wesewatte
776 Dragica;Fasuwade
777 Reginald;Madegauweiner
778 Fatima;Kusibu
779 Karla;Balifledestein
780 Mary;Netasedeson
781 Igor;Schäfer
782 Giovanna;Maier
783 Cornelia;Wütegrode
784 Mehmet;Bauer
785 Metin;Krüger
786 Herbert;Gelosadehein
787 Hans-Gerd;Zurulatehein
788 Mariusz;Tovemattmeiner
789 Hans-Helmut;Rasuwattemeiner
790 Baptist;Midafi
791 Pedro;Hilasedehein
792 Sarah;Tütibodomüller
793 Maximilian;Sawiwedemeiner
794 Ekrem;Muvagate
795 Kurt;Hofmann
796 Norbert;Dutematt
797 Patric;Siwubameiner
798 Gretel;Sutugedehein
799 Christl;Toreba
800 Pauline;Bitibeson
801 Franco;Fasasademeiner
802 Mariele;Laravodemeiner
803 Lili;Diribumüller
804 Kenneth;Sosemaumüller
805 Leo;Botomattmeiner
806 Henriette;Ralufere
807 Friedlinde;Lirimaustein
808 Gerold;Herrmann
809 Oliver;Zädebastein
810 Anatol;Vawavadeweiner
811 Tabea;Dutavore
812 Paulina;Dawodoweiner
813 Lilo;Nöduvarehein
814 Anthony;Rusabodostein
815 Rolf-Dieter;Dürogrodeweiner
816 Elise;Körebuweiner
817 Mona;Ketedumeiner
818 Patric;Sorisadeweiner
819 Karolina;Zutihedeson
820 Julie;Hartmann
821 Janos;Vavemauhein
822 Cathrin;Davobe
823 Katrin;Hutodahein
824 Canan;Klein
825 Heidelore;Fotubemüller
826 Toralf;Silahedemeiner
827 Adolf;Telolodemeiner
828 Katja;Lange
829 Veronika;Visebodo
830 Karlheinz;Givafoson
831 Leonie;Garaplau
832 Tassilo;Walter
833 Mirja;Becker
834 Antonios;Schneider
835 Tilman;Zusegrode
836 Bianka;Getafumüller
837 Stefani;Pawuhedehein
838 Dina;Dorafarestein
839 Silvester;Fasihedeweiner
840 Carolina;Jutilodemüller
841 Hans-Günter;Fitelauweiner
842 Eleni;Schäfer
843 Cemal;Ritigrodemüller
844 Hagen;Wutusegemüller
845 Bernt;Gorudason
846 Loretta;Becker
847 Sabrina;Katomattstein
848 Gottlieb;Zuvagaumüller
849 Rita;Witifumeiner
850 Cengiz;Detuflodestein
851 Oscar;Filafledestein
852 Pero;Müller
853 Ruthild;Muremau
854 Magret;Richter
855 Sigrid;Zimmermann
856 Nils;Lange
857 Cecilia;Zuwibodoweiner
858 Gisa;Maier
859 Dennis;Duvofo
860 Georgios;Weber
861 Kevin;Duregedestein
862 Albin;Metafaremeiner
863 Reinhard;Lowafoson
864 Christine;Duraflede
865 Guenter;Puwobuhein
866 Sylvia;Torumode
867 Marija;Mavelodemeiner
868 Tatiana;Vatawademüller
869 Türkan;Volubedemeiner
870 Pius;Wädeba
871 Rene;Fischer
872 Sebastiano;Rotavare
873 Sieghard;Fusudo
874 Imke;Züsoplaumüller
875 Egbert;Biduvade
876 Leonardo;Kevafoweiner
877 Bernd-Dieter;Mituwattemeiner
878 Leokadia;Füsuvode
879 Amelie;Mireplaumüller
880 Ingolf;Braun
881 Karolina;Pasegauson
882 Christian;Lange
883 Mara;Dotubodo
884 Helma;Häsibehein
885 Karsten;Vuvidostein
886 Andrey;Mudubodostein
887 Theres;Cevovoreweiner
888 Mareike;Braun
889 Kemal;Füribison
890 Andy;Pulusege
891 Anneliese;Nödugrodemeiner
892 Linda;Maier
893 Muharrem;Tasovode
894 Wibke;Meyer
895 Hans-Christian;Tävobiweiner
896 Walli;Walibodo
897 Gerti;Rotido
898 Giesela;Bevagede
899 Gerhart;Jarolodemeiner
900 Erhardt;Schröder
901 Mirjam;Nisabaweiner
902 Amalie;Lesolateweiner
903 Bertram;Novebedemüller
904 Eveline;Vavogedemüller
905 Walburga;Rowovoreweiner
906 Silke;Krause
907 Randolf;Huvadistein
908 Immo;Gulilatehein
909 Isa;Meyer
910 Olivia;Cativorestein
911 Arnulf;Meier
912 Elke;Vavegedeson
913 Meinrad;Basolate
914 Franz-Xaver;Kaiser
915 Irmtrud;Zativadeweiner
916 Mattias;Hedifoweiner
917 Petar;Virofuhein
918 Heino;Wurabimeiner
919 Lotte;Hötesadeson
920 Henner;Niwigate
921 Cemal;Bavugedeweiner
922 Hanny;Pologau
923 Heinz-Gerd;Vätisade
924 Kuno;Mayer
925 Philipp;Maier
926 Dietmar;Klein
927 Etta;Covibu
928 Hans;Parogedehein
929 Klaus;Cadimodestein
930 Dragan;Dovobimüller
931 Bernhardine;Caludiweiner
932 Bianka;Horiwadeweiner
933 Franz;Hatulate
934 Kuno;Wutofohein
935 Monja;Barosedestein
936 Monique;Batuschattmüller
937 Robin;Dedifereson
938 Kaspar;Husubamüller
939 Magnus;Dütomattmüller
940 Rosel;Luvewatteson
941 Tino;Hesisedemüller
942 Carlo;Buvosademüller
943 Petar;Rerovodeson
944 Murat;Bewisedeson
945 Sonja;Vutawedeson
946 Birgitta;Wavugedehein
947 Maritta;Vedosademüller
948 Clarissa;Zuvibustein
949 Urszula;Köhler
950 Hans-Werner;Zimmermann
951 Iris;Viwimattweiner
952 Stefan;Däsidason
953 Cäcilia;Schäfer
954 Gabriel;Kadufareson
955 Leopold;Zetogau
956 Adelgunde;Motivadeson
957 Kathleen;Bötifistein
958 Sybille;Süravareson
959 Andy;Becker
960 Ewald;Masegradehein
961 Christa;Modischatt
962 Ansgar;Sörasadeson
963 Wulf;Gerabu
964 Adelgunde;Motufaremeiner
965 Marian;Cesosedeson
966 Rupert;Motugrodehein
967 Friedhelm;Wowebe
968 Anne-Kathrin;Hevusegeweiner
969 Luise;Meier
970 Violetta;Bilalatemeiner
971 Edda;Rowemau
972 Viktor;Tutewatteweiner
973 Elwira;Herrmann
974 Johanna;Ridivare
975 Meinolf;Rusegedeson
976 Klaus-Ulrich;Hartmann
977 Kai-Uwe;Puvagateson
978 Korinna;Hotiwatte
979 Tatiana;Rirobihein
980 Silvana;Tilifoweiner
981 Georgia;Vodigate
982 Baptist;Gäligrodeweiner
983 Darius;Rätisademeiner
984 Magda;Köhler
985 Anne-Kathrin;Holubi
986 Theres;Nevovarehein
987 Ignatz;Walter
988 Frederike;Richter
989 Gerard;Davidustein
990 Karl-Hermann;Patevade
991 Judith;Köhler
992 Randolf;Zedufledeson
993 Henning;Vutoda
994 Maik;Ralabe
995 Ercan;Cilumattstein
996 Alicia;Sarolodestein
997 Ingmar;Vitisedehein
998 Augustin;Schmitz
999 Michaela;Werner
1000 Raymund;Sewesedemüller
@@ -0,0 +1,20 @@
Mohammed;Klein
Myriam;Koch
Dorothe;Zerusedemeiner
Emine;Puviplau
Galina;Tosewede
Hans-Walter;Mädidostein
Ludmilla;Krause
Jessica;Lesibedemeiner
Franz;Lowufohein
Krzysztof;Gaselatemüller
Gerolf;Navusedeson
Sibylla;Sutedihein
Nina;Golebede
Alicja;Revibodomeiner
Meryem;Kadeduhein
Janina;Zimmermann
Hendrik;Krüger
Oskar;Podadi
Maria-Luise;Nelaflodeson
Nadine;Niwogatemeiner
1 Mohammed Klein
2 Myriam Koch
3 Dorothe Zerusedemeiner
4 Emine Puviplau
5 Galina Tosewede
6 Hans-Walter Mädidostein
7 Ludmilla Krause
8 Jessica Lesibedemeiner
9 Franz Lowufohein
10 Krzysztof Gaselatemüller
11 Gerolf Navusedeson
12 Sibylla Sutedihein
13 Nina Golebede
14 Alicja Revibodomeiner
15 Meryem Kadeduhein
16 Janina Zimmermann
17 Hendrik Krüger
18 Oskar Podadi
19 Maria-Luise Nelaflodeson
20 Nadine Niwogatemeiner
@@ -0,0 +1,19 @@
Company_HR;Company_Court;Jahr;Umsatz;Ebit;EBITDA
;12336;5;2005;59600;7600;
;12336;5;2006;61300;5300;
;12336;5;2007;62500;5300;
;12336;5;2008;61700;7000;
;12336;5;2009;64600;6000;
;12336;5;2010;62420;5510;
;12336;5;2011;58650;5560;
;12336;5;2012;58170;-3960;
;12336;5;2013;60130;4930;
;12336;5;2014;62660;7250;
;12336;5;2015;69230;7030;
;12336;5;2016;73100;9160;
;12336;5;2017;74950;9380;
;12336;5;2018;75660;8000;23333
;12336;5;2019;80530;9460;24731
;12336;5;2020;99950;12370;35017
;12336;5;2021;107610;12580;37330
;12336;5;2022;114200;15410;40208
1 Company_HR;Company_Court;Jahr;Umsatz;Ebit;EBITDA
2 ;12336;5;2005;59600;7600;
3 ;12336;5;2006;61300;5300;
4 ;12336;5;2007;62500;5300;
5 ;12336;5;2008;61700;7000;
6 ;12336;5;2009;64600;6000;
7 ;12336;5;2010;62420;5510;
8 ;12336;5;2011;58650;5560;
9 ;12336;5;2012;58170;-3960;
10 ;12336;5;2013;60130;4930;
11 ;12336;5;2014;62660;7250;
12 ;12336;5;2015;69230;7030;
13 ;12336;5;2016;73100;9160;
14 ;12336;5;2017;74950;9380;
15 ;12336;5;2018;75660;8000;23333
16 ;12336;5;2019;80530;9460;24731
17 ;12336;5;2020;99950;12370;35017
18 ;12336;5;2021;107610;12580;37330
19 ;12336;5;2022;114200;15410;40208
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,34 @@
version: "3.8"
services:
db:
image: postgres:14.1-alpine
container_name: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
#- db:/var/lib/postgresql/data
- ./PostgreSQL:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4:7.2
container_name: pgadmin4_container
restart: always
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: admin@fh-swf.de
PGADMIN_DEFAULT_PASSWORD: admin
volumes:
# - pgadmin:/var/lib/pgadmin
- ./pgadmin:/var/lib/pgadmin
mongodb:
image: mongo:7.0.0-rc4
ports:
- '27017:27017'
volumes:
# - dbdata6:/data/db
- ./mongo:/data/db
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB