docs/document-structure (#578)
Habe per toctree die verschiedenen Dokumente in die richtige Reihenfolge gebracht. --------- Co-authored-by: Tim Ronneburg <Tim-Ronneburg@users.noreply.github.com> Co-authored-by: Sebastian <94404394+SeZett@users.noreply.github.com> Co-authored-by: Philipp Horstenkamp <philipp@horstenkamp.de> Co-authored-by: SeZett <zeleny.sebastian@fh-swf.de>
No files matched your search
@@ -0,0 +1,939 @@
|
||||

|
||||
|
||||
# Datenspeicherung
|
||||
|
||||
## 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.
|
||||
|
||||
## Allgemeine Anforderungen an Datenbank
|
||||
|
||||
- **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.
|
||||
- **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.
|
||||
- **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.
|
||||
- **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.$
|
||||
|
||||
- **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.
|
||||
- **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
|
||||
|
||||
## 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
|
||||
|
||||
### 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.
|
||||
|
||||
- **Sentiment daten:** Die Sentiment- oder Stimmungsdaten beschreiben die Aussenwahrnehmung des Unternehmens
|
||||
hinsichtlich
|
||||
der Mitarbeiterzufriedenheit, Nachhaltigkeit und Umweltfreundlichkeit.
|
||||
|
||||
> Mit Sentiment daten 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 verschiedener 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 Mindmap 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.
|
||||
|
||||

|
||||
|
||||
### 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 | |
|
||||
|
||||
### 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 herzustellen. 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 |
|
||||
|
||||
## Arten von Datenbanken
|
||||
|
||||
### 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 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
|
||||
|
||||
#### Anlegen von Tabellen
|
||||
|
||||
Der Umgang von relationalen Datenbanken erfolgt mittels SQL. Folgend ein Beispiel zum Anlegen einer Tabelle mit
|
||||
Attributen.
|
||||
|
||||
```sql
|
||||
CREATE TABLE Bildungsstaette
|
||||
(
|
||||
ID INT PRIMARY KEY NOT NULL,
|
||||
Name VARCHAR(255) NOT NULL,
|
||||
Anschrift VARCHAR(255),
|
||||
Art VARCHAR(100)
|
||||
);
|
||||
```
|
||||
|
||||
#### 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:**
|
||||
|
||||
```sql
|
||||
SELECT *
|
||||
FROM table_name;
|
||||
```
|
||||
|
||||
**Anzeige definierter Attribute einer Tabelle:**
|
||||
|
||||
```sql
|
||||
SELECT column1, column2
|
||||
FROM table_name;
|
||||
```
|
||||
|
||||
**Gefilterte Anzeige einer Tabelle:**
|
||||
|
||||
```sql
|
||||
SELECT *
|
||||
FROM table_name
|
||||
WHERE condition;
|
||||
```
|
||||
|
||||
**Daten aus mehreren Tabellen abrufen (Join):**
|
||||
|
||||
```sql
|
||||
SELECT t1.column1, t2.column2
|
||||
FROM table1 t1
|
||||
JOIN table2 t2 ON t1.id = t2.id;
|
||||
```
|
||||
|
||||
### 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).
|
||||
|
||||
#### 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)
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 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
|
||||
```
|
||||
|
||||
### 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 erforderlich 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) |
|
||||
|
||||
#### Erstellung eines Datensatzes
|
||||
|
||||
Die Einrichtung von Zeitseriendatenbanken erfolgt mit der CLI von Influx.
|
||||
|
||||
**Anlegen eines Buckets:**
|
||||
|
||||
```
|
||||
CREATE DATABASE finance
|
||||
```
|
||||
|
||||
#### 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 Zeitbereichs:**
|
||||
|
||||
```
|
||||
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}))
|
||||
```
|
||||
|
||||
### 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 Dokumentendatenbank 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.
|
||||
|
||||

|
||||
|
||||
#### 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()
|
||||
|
||||
```
|
||||
|
||||
### 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.
|
||||
|
||||
## 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:
|
||||

|
||||
|
||||
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.
|
||||
|
||||
### 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.
|
||||

|
||||
|
||||
Zentrales Element ist die Stammdatentabelle **company**, welche einen zusammengesetzten Primärschlüssel aus der Nummer
|
||||
des Handelsregisters 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 persistiert 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 Spaltenbezeichner 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 das 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).
|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
### 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, Aktualisieren 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.
|
||||
|
||||
## Proof of Concept
|
||||
|
||||
### 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:
|
||||
|
||||
```console
|
||||
docker-compose -f docker-compose.yml up
|
||||
```
|
||||
|
||||
### 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
|
||||
```
|
||||
|
||||

|
||||
|
||||
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) |
|
||||
|
||||

|
||||
|
||||
### 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. Hierfü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.
|
||||

|
||||
|
||||
**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
|
||||
|
||||
### 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 worden ist sehr einfach mit PGAdmin möglich.
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||
|
||||
### Abfragen der Datenbank
|
||||
|
||||
Das 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>
|
||||
|
||||
## 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, wurde 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,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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -0,0 +1,205 @@
|
||||
{
|
||||
"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\", database=\"transparenz\", user=\"postgres\", password=\"postgres\"\n",
|
||||
")\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",
|
||||
" \"\"\"\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",
|
||||
"\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",
|
||||
" \"\"\"\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",
|
||||
"\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",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"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
|
||||
|
@@ -0,0 +1,329 @@
|
||||
{
|
||||
"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",
|
||||
"\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\", database=\"transparenz\", user=\"postgres\", password=\"postgres\"\n",
|
||||
")\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",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"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,605 @@
|
||||
{
|
||||
"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/octwWPTMcv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 truncated
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"id": "30df80ed",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"\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\", database=\"transparenz\", user=\"postgres\", password=\"postgres\"\n",
|
||||
")\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 = (\n",
|
||||
" \"\"\" INSERT INTO finance (company_id,kind_of, date, sum) VALUES (%s,%s,%s,%s)\"\"\"\n",
|
||||
" )\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,480 @@
|
||||
{
|
||||
"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",
|
||||
"\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\", database=\"transparenz\", user=\"postgres\", password=\"postgres\"\n",
|
||||
")\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 = (\n",
|
||||
" \"\"\" INSERT INTO finance (company_id,kind_of, date, sum) VALUES (%s,%s,%s,%s)\"\"\"\n",
|
||||
" )\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,417 @@
|
||||
{
|
||||
"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",
|
||||
"\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\", database=\"transparenz\", user=\"postgres\", password=\"postgres\"\n",
|
||||
")\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 = (\n",
|
||||
" \"\"\" INSERT INTO finance (company_id,kind_of, date, sum) VALUES (%s,%s,%s,%s)\"\"\"\n",
|
||||
" )\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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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"
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 100 KiB |