From 01b4ce00c129dda01d19b839bad32f119e2b934b Mon Sep 17 00:00:00 2001 From: Philipp Horstenkamp Date: Mon, 2 Oct 2023 20:47:42 +0200 Subject: [PATCH] Spellchecking with PyCharm (#133) Co-authored-by: KM-R <129882581+KM-R@users.noreply.github.com> --- CONTRIBUTING.md | 2 +- .../meeting-notes/Meeting_2023-03-30.md | 88 +- .../meeting-notes/Meeting_2023-04-13.md | 76 +- .../meeting-notes/Meeting_2023-05-04.md | 43 +- .../meeting-notes/Meeting_2023-05-11.md | 80 +- .../meeting-notes/Meeting_2023-05-25.md | 20 +- .../meeting-notes/Meeting_2023-06-09.md | 16 +- .../meeting-notes/Meeting_2023-08-03.md | 2 +- .../meeting-notes/Meeting_2023-08-17.md | 4 +- .../meeting-notes/Meeting_2023-08-31.md | 7 +- .../project_management/Pflichtenheft.md | 76 +- documentations/project_management/timeline.md | 1 + .../Erste_Uebersicht_Sentiment_Analysis.md | 26 +- .../research/RE_Vom-Problem-zur-Loesung.md | 37 +- .../research/Timeseries/Overview.md | 73 +- documentations/research/data_and_metrics.md | 80 +- documentations/research/news_apis.md | 31 +- documentations/research/resarch-central.md | 2 +- .../Abstract_Data_Extraction.md | 39 +- .../Datenspeicherung/00_Datenspeicherung.md | 801 +++++++++++------- .../Datenspeicherung/01_Actionlist.md | 4 +- .../Datenspeicherung/Docker_get_started.md | 98 ++- .../Abstract_Datenvisualisierung.md | 22 +- ...Seminararbeit zu Text Mining Sascha Zhu.md | 32 +- .../Abstract_verflechtungsanalyse.md | 31 +- .../models/news.py | 2 +- .../utils/data_extraction/bundesanzeiger.py | 6 +- .../utils/data_transfer.py | 2 +- tests/models/news_test.py | 2 +- .../data_extraction/bundesanzeiger_test.py | 2 +- .../unternehmensregister/extract_test.py | 2 +- tests/utils/data_transfer_test.py | 1 + 32 files changed, 1062 insertions(+), 646 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e575007..fabdb32 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ ## Repository structure - **src/`aki_prj23_transparenzregister`**: - - This subfolder/`package` contains several subdirectories: + - This sub-folder/`package` contains several subdirectories: - `ai`: - Houses AI models and pipelines, including NER and sentiment analysis. - `config`: diff --git a/documentations/meeting-notes/Meeting_2023-03-30.md b/documentations/meeting-notes/Meeting_2023-03-30.md index da548da..5e31313 100644 --- a/documentations/meeting-notes/Meeting_2023-03-30.md +++ b/documentations/meeting-notes/Meeting_2023-03-30.md @@ -1,6 +1,7 @@ # Weekly *1*: 30.03.2023 ## Teilnehmer + - Prof. Arinir - Tristan Nolde - Tim Ronneburg @@ -10,53 +11,58 @@ - Sebastian Zeleny (Protokollant) ## Themen -- **Inhalt des Project Proposals:** - - Mit welchen Metriken können Unternehmen bewertet werden? - - Was sind Kennzahlen von Kapitalgesellschaften? - - Welche Daten werden benötigt? - - Woher erhält man benötigte Daten? (Amtsgerichte --> Insolvenzen, Börsenkurse, Aktienkurse, RSS-Feeds von/zu Unternehmen) - - Wie werden die Daten verarbeitet? - - Wie können die Daten bzw. Ergebnisse präsentiert werden? - - Verflechtungen zwischen Unternehmen: Geschäftsführer, Wirtschaftsprüfer - + +- **Inhalt des Project Proposals:** + - Mit welchen Metriken können Unternehmen bewertet werden? + - Was sind Kennzahlen von Kapitalgesellschaften? + - Welche Daten werden benötigt? + - Woher erhält man benötigte Daten? (Amtsgerichte --> Insolvenzen, Börsenkurse, Aktienkurse, RSS-Feeds von/zu + Unternehmen) + - Wie werden die Daten verarbeitet? + - Wie können die Daten bzw. Ergebnisse präsentiert werden? + - Verflechtungen zwischen Unternehmen: Geschäftsführer, Wirtschaftsprüfer + - **Anforderungen an Projektdurchführung:** - - Backlog für Ideen und Aufgaben - - Meeting-Notes mit besprochenen Themen, Entscheidungen, Terminen und Action-List (Wer arbeitet an welcher Aufgabe?) - - Projektdurchführung so formal wie möglich, d.h. - - Beschreibung des Systemkontexts: Interaktion mit der Umgebung - - Datenmodell: schematische Darstellung der Datenflüsse - - Lasten- / Pflichtenheft mit Kategorisierung - - Vorschlag Frontend von Prof. Arinir: D3.js + - Backlog für Ideen und Aufgaben + - Meeting-Notes mit besprochenen Themen, Entscheidungen, Terminen und Action-List (Wer arbeitet an welcher + Aufgabe?) + - Projektdurchführung so formal wie möglich, d.h. + - Beschreibung des Systemkontexts: Interaktion mit der Umgebung + - Datenmodell: schematische Darstellung der Datenflüsse + - Lasten- / Pflichtenheft mit Kategorisierung + - Vorschlag Frontend von Prof. Arinir: D3.js -- **Bewertung des Projekts:** - - Es muss erkennbar sein, wer welche Aufgabe bearbeitet hat - - Jeder Teilnehmer soll die Aufgaben der anderen Teilnehmer kennen und ein Verständnis für diese haben (kein tiefes Domänenwissen!) - - Gesamtplanung und Dokumentation sind Teil das Ergebnis, nicht nur die technische Umsetzung - - Bewertungsschlüssel: +- **Bewertung des Projekts:** + - Es muss erkennbar sein, wer welche Aufgabe bearbeitet hat + - Jeder Teilnehmer soll die Aufgaben der anderen Teilnehmer kennen und ein Verständnis für diese haben (kein tiefes + Domänenwissen!) + - Gesamtplanung und Dokumentation sind Teil das Ergebnis, nicht nur die technische Umsetzung + - Bewertungsschlüssel: -| Gewichtung | Aufgabe | -|--------------|---------------------------------------------| -| 20% | Vortrag Seminararbeit | -| 20% | Präsentation | -| 30% | Implementierung | -| 20% | Finaler Bericht (~15 Seiten pro Teilnehmer) | -| 10% | Abschlusspräsentation | +| Gewichtung | Aufgabe | +|------------|---------------------------------------------| +| 20% | Vortrag Seminararbeit | +| 20% | Präsentation | +| 30% | Implementierung | +| 20% | Finaler Bericht (~15 Seiten pro Teilnehmer) | +| 10% | Abschlusspräsentation | - **Organisatorisches:** - - Regeltermin alle 14 Tage mit allen Projektteilnehmern, beginnend am 30.03.2023: Dieser Termin soll für Sprint Planning und Review mit Prof. Arinir genutzt werden. + - Regeltermin alle 14 Tage mit allen Projektteilnehmern, beginnend am 30.03.2023: Dieser Termin soll für Sprint + Planning und Review mit Prof. Arinir genutzt werden. - Was ist die Erwartungshaltung des Product Owners? - - Welche Themen/Aufgaben werden bearbeitet? - - Was ist das Ziel für das nächste Review? - - Projektbearbeitung/Dokumentation mit Github - - Bereitstellung des Github-Repos über FH + - Welche Themen/Aufgaben werden bearbeitet? + - Was ist das Ziel für das nächste Review? + - Projektbearbeitung/Dokumentation mit Github + - Bereitstellung des Github-Repos über FH ## Abgeleitete Action Items -| Action Item | Verantwortlicher | Deadline | -|-----------------------------------------------------------------------------------------|--------------------|----------------------------------| -| Welche Anforderungen / Erwartungen stellen wir inhaltlich und technisch an das Projekt? | alle | nächstes Weekly/work in progress | -| Erarbeiten von Arbeitspaketen/Aufgaben aus Anforderungen | alle | nächstes Weekly/work in progress | -| Welche Metriken sind notwendig? | alle | nächstes Weekly/work in progress | -| Recherche zu Datenquellen | alle | nächstes Weekly/work in progress | -| Definition von Meilensteinen | alle | nächstes Weekly | -| Erstellung eines (groben) Zeitplans | alle | nächstes Weekly | +| Action Item | Verantwortlicher | Deadline | +|-----------------------------------------------------------------------------------------|------------------|----------------------------------| +| Welche Anforderungen / Erwartungen stellen wir inhaltlich und technisch an das Projekt? | alle | nächstes Weekly/work in progress | +| Erarbeiten von Arbeitspaketen/Aufgaben aus Anforderungen | alle | nächstes Weekly/work in progress | +| Welche Metriken sind notwendig? | alle | nächstes Weekly/work in progress | +| Recherche zu Datenquellen | alle | nächstes Weekly/work in progress | +| Definition von Meilensteinen | alle | nächstes Weekly | +| Erstellung eines (groben) Zeitplans | alle | nächstes Weekly | diff --git a/documentations/meeting-notes/Meeting_2023-04-13.md b/documentations/meeting-notes/Meeting_2023-04-13.md index 135d149..f097a95 100644 --- a/documentations/meeting-notes/Meeting_2023-04-13.md +++ b/documentations/meeting-notes/Meeting_2023-04-13.md @@ -1,6 +1,7 @@ # Weekly *2*: 13.04.2023 ## Teilnehmer + - Prof. Arinir - Tristan Nolde - Tim Ronneburg (Protokollant) @@ -12,46 +13,47 @@ ## Themen - **Seminarthemen:** - - Themen die im Zuge der Implementierung erarbeitet werden - - Themen: - - Textmining (Ontologien) - - Semantische Suche - - Anmeldungsformular: - - Jeder sendet das Formular selbst an Herrn Arinir - - Projektauftakt: 30.03.2023 - - Enddatum: 15.02.2024 - - Titel: Transparanzregister Kapitalgeselschaften + - Themen die im Zuge der Implementierung erarbeitet werden + - Themen: + - Textmining (Ontologien) + - Semantische Suche + - Anmeldungsformular: + - Jeder sendet das Formular selbst an Herrn Arinir + - Projektauftakt: 30.03.2023 + - Enddatum: 15.02.2024 + - Titel: Transparenzregister Kapitalgesellschaften - **Vorstellung der Ergebnisse des letzten Sprints:** - - Erstellung des GitHubs Projekts - - Anlegen eines Protokolltemplates - - Interne Meetings jeden Donnerstag - - Timeline erstellt mit Mermaid.js in Markdown (Sebastian) - - Recherche zum Datenschutz / Urheberrecht: Welche Daten aus den Datenbanken dürfen offline oder online benutzt werden. (Sascha) - - Für die eigene Forschung: 75 % der Daten dürfen genutzt werden - - 15 % Wenn es an Dritte weitergeleitet werden - - Wenn wir die Ergebnisse veröffentlichen müssen die Vorgaben der Datenbanken beachten - - Hinweis von Herrn Arinir: Das ist als Vorschungsprojekt zu sehen - - Die Ergebnisse werden nicht veröffentlicht - - nur die Vorgehensweise wird als Paper veröffentlicht - - Recherche zu Unternehmenskennzahlen (Kim) - - Hinweis: Für Tendenzanalysen sollen zeitliche Veränderungen erfasst werden (Timescale Datenbank) - - Vierteljährliche Daten reichen aus - - Recherche zu den verfügbaren Datengrundlagen (Phillip und Tristan) - - Anlegen eines Pflichtenhefts mit den Anforderungen an das Projekt (Tim) + - Erstellung des GitHubs Projekts + - Anlegen eines Protokolltemplates + - Interne Meetings jeden Donnerstag + - Timeline erstellt mit Mermaid.js in Markdown (Sebastian) + - Recherche zum Datenschutz / Urheberrecht: Welche Daten aus den Datenbanken dürfen offline oder online benutzt + werden. (Sascha) + - Für die eigene Forschung: 75 % der Daten dürfen genutzt werden + - 15 % wenn es an Dritte weitergeleitet werden + - Wenn wir die Ergebnisse veröffentlichen müssen die Vorgaben der Datenbanken beachten + - Hinweis von Herrn Arinir: Das ist als Forschungsprojekt zu sehen + - Die Ergebnisse werden nicht veröffentlicht + - nur die Vorgehensweise wird als Paper veröffentlicht + - Recherche zu Unternehmenskennzahlen (Kim) + - Hinweis: Für Tendenzanalysen sollen zeitliche Veränderungen erfasst werden (Timescale Datenbank) + - Vierteljährliche Daten reichen aus + - Recherche zu den verfügbaren Datengrundlagen (Phillip und Tristan) + - Anlegen eines Pflichtenhefts mit den Anforderungen an das Projekt (Tim) - **Organisatorisches:** - - Es muss noch ein Projekt angelegt werden für das GitHub Repository mit einem Board zur Projektorganisation - - Im Meeting erledigt + - Es muss noch ein Projekt angelegt werden für das GitHub Repository mit einem Board zur Projektorganisation + - Im Meeting erledigt - **Recherche:** - - Nicht nur auf Kennzahlen eingehen, sondern auch auf die Berichterstattung eingehen - - Dazu sollen die Technologieauswahl recherchiert werden (Trendanalyse von Nachrichten, Finanztreff, Twitter etc.) + - Nicht nur auf Kennzahlen eingehen, sondern auch auf die Berichterstattung eingehen + - Dazu soll die Technologieauswahl recherchiert werden (Trendanalyse von Nachrichten, Finanztreff, Twitter etc.) ## Abgeleitete Action Items -| Action Item | Verantwortlicher | Deadline | -|-------------|------------------|-----------------| -| Rechechieren welche Nachrichtenquellen (Aktuelle und "Alte" Nachrichten) genutzt werden können | Sascha und Tim | 27.04.2023 | -| Recherchieren welche Technologien zur Auswertung der Nachrichtenqullen genutzt werden können (z.b. Sentiment Analyse) | Philipp und Kim | 27.04.2023 | -| Beschäftigen mit Historien (Timescale Datenbank) | Tristan und Sebastian | 27.04.2023 | -| Festlegen von Kriterien wann ein Artikel positiv oder negativ zu bewerten ist | Sascha | Ende offen | -| Abgabe des Anmeldeformulars zum Projekt | alle | 20.04.2023 | -| Liste mit geeignetetn Metriken | Herr Arinir | 27.04.2023 | +| Action Item | Verantwortlicher | Deadline | +|------------------------------------------------------------------------------------------------------------------------|-----------------------|------------| +| Recherchieren welche Nachrichtenquellen (Aktuelle und "Alte" Nachrichten) genutzt werden können | Sascha und Tim | 27.04.2023 | +| Recherchieren welche Technologien zur Auswertung der Nachrichtenquellen genutzt werden können (z.b. Sentiment Analyse) | Philipp und Kim | 27.04.2023 | +| Beschäftigen mit Historien (Timescale Datenbank) | Tristan und Sebastian | 27.04.2023 | +| Festlegen von Kriterien wann ein Artikel positiv oder negativ zu bewerten ist | Sascha | Ende offen | +| Abgabe des Anmeldeformulars zum Projekt | alle | 20.04.2023 | +| Liste mit geeigneten Metriken | Herr Arinir | 27.04.2023 | diff --git a/documentations/meeting-notes/Meeting_2023-05-04.md b/documentations/meeting-notes/Meeting_2023-05-04.md index 1507959..0be8438 100644 --- a/documentations/meeting-notes/Meeting_2023-05-04.md +++ b/documentations/meeting-notes/Meeting_2023-05-04.md @@ -1,6 +1,7 @@ # Weekly *3*: 04.05.2023 ## Teilnehmer + - Prof. Arinir - Tristan Nolde - Tim Ronneburg @@ -14,41 +15,45 @@ ### Organisatorische Absprachen: Gelten die Seminarthemen als Zwischenprüfung? In welcher Form? -- Herr Giefers hat Seminarthemen im Vorfeld definiert, in unserer Gruppe gab es eine offene Einarbeitung in die Forschungs- und Entwicklungsarbeit -- Geplanter Umfang: Seminararbeit 15-20 Seiten (Rücksprache mit Herrn Giefers und Herrn Gawron durch Herrn Arinir, Feedback beim nächsten Termin) und Vortrag mit Folien oder anderen Quellen (z.B. Quellcode) ca. 15-20 Minuten im Rahmen eines JF Termins (keine Vorstellung im Plenum) + +- Herr Giefers hat Seminarthemen im Vorfeld definiert, in unserer Gruppe gab es eine offene Einarbeitung in die + Forschungs- und Entwicklungsarbeit +- Geplanter Umfang: Seminararbeit 15-20 Seiten (Rücksprache mit Herrn Giefers und Herrn Gawron durch Herrn Arinir, + Feedback beim nächsten Termin) und Vortrag mit Folien oder anderen Quellen (z.B. Quellcode) ca. 15-20 Minuten im + Rahmen eines JF Termins (keine Vorstellung im Plenum) - Die Seminararbeiten werden benotet (20% der Endnote), die Ausarbeitung und der Vortrag zählen dabei zu jeweils 50% - Wie lautet der zeitliche Rahmen? -- Keine feste Deadline vorgegeben, Absprache innerhalb der Projektgruppe ausreichend -- Vortrag: Einigung auf zwei Termine Ende Juni/Anfang Juli -> Thema 1-3 am 22.06.2023 und Thema 4-6 am 06.07.2023 -- Seminararbeit: Abgabe voraussichtlich Ende des Sommersemesters, potentiell auch zu einem späteren Zeitpunkt möglich +- Keine feste Deadline vorgegeben, Absprache innerhalb der Projektgruppe ausreichend +- Vortrag: Einigung auf zwei Termine Ende Juni/Anfang Juli → Thema 1-3 am 22.06.2023 und Thema 4-6 am 06.07.2023 +- Seminararbeit: Abgabe voraussichtlich Ende des Sommersemesters, potenziell auch zu einem späteren Zeitpunkt möglich Welche Themenbereiche sollen behandelt werden? -- Die erste kurze Beschreibung der 6 Themenbereiche/Domänen wurde durch Herrn Arinir als positiv befunden -- Zur Eingrenzung der Themen und für ein konkreteres Feedback soll für jeden Themenbereich beim nächsten JF am 11.05.2023 ein Abstract vorgestellt werden -- Grundsätzlich sollen die Themen nicht zu oberflächlich behandelt werden, sondern explizit auf Techniken zur Umsetzung eingegangen werden +- Die erste kurze Beschreibung der 6 Themenbereiche/Domänen wurde durch Herrn Arinir als positiv befunden +- Zur Eingrenzung der Themen und für ein konkreteres Feedback soll für jeden Themenbereich beim nächsten JF am + 11.05.2023 ein Abstract vorgestellt werden +- Grundsätzlich sollen die Themen nicht zu oberflächlich behandelt werden, sondern explizit auf Techniken zur Umsetzung + eingegangen werden Einigung auf Änderungen im Bereich Projektorganisation: -- Aufnahme des zeitlichen Ablaufs der Tickets in die Meeting Notes -> Screenshot des Projects in Protokoll mit aufnehmen + +- Aufnahme des zeitlichen Ablaufs der Tickets in die Meeting Notes → Screenshot des Projects in Protokoll mit aufnehmen - Start-, Enddaten und Labels der Tickets besser pflegen - Sonstiges: + - Urlaubszeiten Herr Prof. Arinir: 17.07.-01.08.2023 - - ## Abgeleitete Action Items -| Action Item | Verantwortlicher | Deadline | -|-------------|------------------|-----------------| -| Abstract pro Thema | Alle | nächstes Weekly | -| Folienvorlage für den Seminarvortrag | Alle | nächstes Weekly | -| Rückmeldung zum Umfang der Seminararbeit | Prof. Arinir | nächstes Weekly | - +| Action Item | Verantwortlicher | Deadline | +|------------------------------------------|------------------|-----------------| +| Abstract pro Thema | Alle | nächstes Weekly | +| Folienvorlage für den Seminarvortrag | Alle | nächstes Weekly | +| Rückmeldung zum Umfang der Seminararbeit | Prof. Arinir | nächstes Weekly | ## Aktueller Projektstand + ![alt text](https://github.com/fhswf/aki_prj23_transparenzregister/blob/meeting_notes_2023-05-04/documentations/meeting-notes/images/Project_2023-05-04.PNG) diff --git a/documentations/meeting-notes/Meeting_2023-05-11.md b/documentations/meeting-notes/Meeting_2023-05-11.md index e3ae949..df8c0b9 100644 --- a/documentations/meeting-notes/Meeting_2023-05-11.md +++ b/documentations/meeting-notes/Meeting_2023-05-11.md @@ -1,6 +1,7 @@ # Weekly *4*: 11.05.2023 ## Teilnehmer + - Prof. Arinir - Tristan Nolde - Tim Ronneburg @@ -14,11 +15,12 @@ ### Organisatorische Absprachen zum Umfang und Inhalt der Seminararbeit: - Herr Arinir wird sich nochmal wegen des Umfangs der Seminararbeit bei unserer Gruppe melden -- In der Seminarbeit sollen Anforderungen und Lösungsskizzen für das Projekt "Transparenzregister" dargestellt werden. -- Die Seminarabeit soll aus einem theoretischen Teil und einem praktischen Teil, in dem der praktische Nutzen für das Projekt "Transparenzregister" erörtert wird, bestehen; ob das Verhältnis zwischen dem theoretischen und praktischen Teil bei 50:50 oder 40:60 liegt, darüber können die Verfaser der Seminararbeit selbst entscheiden -- Der Fokus der Seminarbeit soll stets danach ausgerichtet werden, wie die entsprechenden Aspekte bzw. die entsprechenden Technologien für das Projekt "Transparenzregister" genutzt werden können. - - +- In der Seminararbeit sollen Anforderungen und Lösungsskizzen für das Projekt "Transparenzregister" dargestellt werden. +- Die Seminararbeit soll aus einem theoretischen Teil und einem praktischen Teil, in dem der praktische Nutzen für das + Projekt "Transparenzregister" erörtert wird, bestehen; ob das Verhältnis zwischen dem theoretischen und praktischen + Teil bei 50:50 oder 40:60 liegt, darüber können die Verfasser der Seminararbeit selbst entscheiden +- Der Fokus der Seminararbeit soll stets danach ausgerichtet werden, wie die entsprechenden Aspekte bzw. die + entsprechenden Technologien für das Projekt "Transparenzregister" genutzt werden können. ### Vorstellung des Abstracts der Seminararbeit zu "Dev Ops" (Philipp Horstenkamp): @@ -26,11 +28,13 @@ Abstract siehe Datei in github. Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: -- Eine sehr straffe Pipeline, die für Seriensoftware in Ordnung wäre, könnte uns für unser Projekt zu sehr „fesseln“ bzw. einschränken. -- Es wäre zu überlegen, ob die Software-Entwicklung, wie diese früher ablief, mit der Software-Entwicklung von heute (u.a. mit den Automatisierungsmöglichkeiten von heute) gegenübergestellt werden soll, um daraus zunächst eine Strategie für unser Projekt zu entwickeln, bevor man sich vertieft mit DevOps beschäftigt -- Die Verwendung von CI/CD (Continuous Integration/Continuous Delivery)-Pipelines für KI-Projekte wäre ein interessantes Thema. - - +- Eine sehr straffe Pipeline, die für Seriensoftware in Ordnung wäre, könnte uns für unser Projekt zu sehr „fesseln“ + bzw. einschränken. +- Es wäre zu überlegen, ob die Software-Entwicklung, wie diese früher ablief, mit der Software-Entwicklung von heute ( + u.a. mit den Automatisierungsmöglichkeiten von heute) gegenübergestellt werden soll, um daraus zunächst eine Strategie + für unser Projekt zu entwickeln, bevor man sich vertieft mit DevOps beschäftigt +- Die Verwendung von CI/CD (Continuous Integration/Continuous Delivery)-Pipelines für KI-Projekte wäre ein interessantes + Thema. ### Vorstellung des Abstracts der Seminararbeit zu "Automatisierte Datenextraktion aus Internetquellen als Grundlage für die Analyse von Kapitalgesellschaften" (Tristan Nolde): @@ -39,48 +43,47 @@ Abstract siehe Datei in github. Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: - Pros und Cons von WebScraping gegenüber RSS-Feeds und gegenüber der API-Lösung sollen dargestellt werden -- Die Quelle E-Mail-Newsletter (z.B. vom Handelsblatt) könnte ebenfalls interessant sein, jedoch muss hierfür möglicherweise ein separater E-Mail-Account erstellt werden, was eher aufwändig ist +- Die Quelle E-Mail-Newsletter (z.B. vom Handelsblatt) könnte ebenfalls interessant sein, jedoch muss hierfür + möglicherweise ein separater E-Mail-Account erstellt werden, was eher aufwändig ist - Es wäre eventuell zu prüfen, ob auch Daten aus LinkedIn API, XING oder Facebook extrahiert werden könnten. - - ### Vorstellung des Abstracts der Seminararbeit zu "Datenspeicherung" (Sebastian Zeleny): Abstract siehe Datei in github. Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: -- Bei der Wahl der Datenbank müssen verschiedene Anforderungen berücksichtigt werden, mit hohem Abstimmungsbedarf zwischen den Topics "Datenextraktion" und "Datenvisualisierung" +- Bei der Wahl der Datenbank müssen verschiedene Anforderungen berücksichtigt werden, mit hohem Abstimmungsbedarf + zwischen den Topics "Datenextraktion" und "Datenvisualisierung" -- Herr Prof. Arinir fragte noch, ob wir das Thema "relationale Datenbanken" als Modul behandelt haben. Dies wurde bejaht, insbesondere SQL Datenbanken und SQL queries waren Gegenstand des Moduls "Datenbankprogrammierung" +- Herr Prof. Arinir fragte noch, ob wir das Thema "relationale Datenbanken" als Modul behandelt haben. Dies wurde + bejaht, insbesondere SQL Datenbanken und SQL queries waren Gegenstand des Moduls "Datenbankprogrammierung" - - -### Vorstellung des Abstracts der Seminararbeit zu "Verpflechtungsanalyse" (Tim Ronneburg): +### Vorstellung des Abstracts der Seminararbeit zu "Verflechtungsanalyse" (Tim Ronneburg): Abstract siehe Datei in github. Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: -- Beim Social Graph wäre zu überlegen, nicht nur Beziehungen zwischen Unternehmen via Personen (z.B. Wirtschaftsprüfer), sondern auch Beziehungen zwischen Unternehmen via Kooperationspartner (Stiftungen, Unis, Forschungsinstitute) bzw. Eigentums-, Kunden- und Lieferbeziehungen darzustellen +- Beim Social Graph wäre zu überlegen, nicht nur Beziehungen zwischen Unternehmen via Personen (z.B. Wirtschaftsprüfer), + sondern auch Beziehungen zwischen Unternehmen via Kooperationspartner (Stiftungen, Unis, Forschungsinstitute) bzw. + Eigentums-, Kunden- und Lieferbeziehungen darzustellen - Beim Social Graph wäre zu überlegen, ob man nach Art der Beziehung filtern könnte - - ### Vorstellung des Abstracts der Seminararbeit zu "Text Mining" (Sascha Zhu): Abstract siehe Datei in github. Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: -- Bei den Sentiment-Analyse-Tools wie FinBERT oder VADER wäre stets eine maschinelle Übersetzung der deutschen Nachrichtentexte ins Englische erforderlich, da FinBERT oder VADER keine deutschen Texte erkennen können +- Bei den Sentiment-Analyse-Tools wie FinBERT oder VADER wäre stets eine maschinelle Übersetzung der deutschen + Nachrichtentexte ins Englische erforderlich, da FinBERT oder VADER keine deutschen Texte erkennen können - Die Generierung von Ontologien ist zu komplex und soll nicht Gegenstand der Projektarbeit sein -- Bei der semantischen Textanalyse wäre empfehlenswert, dass dies über "Einzel-Personen" ausgeführt wird (das wäre dann ein Punkt im Graphen) +- Bei der semantischen Textanalyse wäre empfehlenswert, dass dies über "Einzel-Personen" ausgeführt wird (das wäre dann + ein Punkt im Graphen) - Das Thema "Named Entity Recognition" wird für die Projektarbeit eine hohe Bedeutung haben - - ### Vorstellung des Abstracts der Seminararbeit zu "Datenvisualisierung" (Kim Mesewinkel-Risse): Abstract siehe Datei in github. @@ -88,30 +91,31 @@ Abstract siehe Datei in github. Folgende Punkte wurden bei bzw. nach der Vorstellung des Abstracts diskutiert: - Bei der Datenvisualisierung wäre zu überlegen, dass man sich nur auf Python-Bibliotheken beschränkt -- Die Datenabfrage könnte über SQL oder Spark laufen, eine Schnittstelle zwischen dem Speicher und dem Front-End wird benötigt +- Die Datenabfrage könnte über SQL oder Spark laufen, eine Schnittstelle zwischen dem Speicher und dem Front-End wird + benötigt - Zwischen Daten und der Datenvisualisierung werden eventuell Zwischen-Caches benötigt -- Bezüglich der Frage nach der „Middleware“: Wenn Plotly oder Plotly Dash verwendet wird, wird keine Middleware benötigt, da dies schon eingebaut ist. - - +- Bezüglich der Frage nach der „Middleware“: Wenn Plotly oder Plotly Dash verwendet wird, wird keine Middleware + benötigt, da dies schon eingebaut ist. ### Feedback von Herrn Prof. Arinir: - Es scheint noch kein Gesamtkonzept für das Gewerk vorzuliegen. -- Wir sollten uns die Frage stellen: Was soll am Ende für "ein brauchbares Stück Software" herauskommen, damit der Anwender mit der Vielzahl von Informationen und Funktionen zurechtkommt. +- Wir sollten uns die Frage stellen: Was soll am Ende für "ein brauchbares Stück Software" herauskommen, damit der + Anwender mit der Vielzahl von Informationen und Funktionen zurechtkommt. - Eine Lösungsskizze muss definiert werden, wobei ein Pflichtenheft jetzt noch nicht erforderlich ist - Es sollen zunächst einige GUI-Designs (mit einem Muster-Datensatz) entwickelt werden. -- Pros und Cons zwischen einem Wasserfallmodell (Pflichtenheft mit bis zu 1000 Seiten) und der agilen Modellierung sollen berücksichtigt werden. +- Pros und Cons zwischen einem Wasserfallmodell (Pflichtenheft mit bis zu 1000 Seiten) und der agilen Modellierung + sollen berücksichtigt werden. - Wie sollen die Verflechtungen eingebaut werden? - Wie sollen die Daten persistiert werden? -- Es wäre empfehlenswert, mit irgendetwas (d.h. einer kleinen Lösung) anzufangen, dann das Ergebnis anzuschauen, und diese kontinuierlich zu verbessern. - - +- Es wäre empfehlenswert, mit irgendetwas (d.h. einer kleinen Lösung) anzufangen, dann das Ergebnis anzuschauen, und + diese kontinuierlich zu verbessern. ## Abgeleitete Action Items -| Action Item | Verantwortlicher | Deadline | -|--------------------------------------------|------------------|-------------------| -| GUI Designs | Alle | nächstes Weekly | -| Rückmeldung zum Umfang der Seminararbeit | Prof. Arinir | nächstes Weekly | +| Action Item | Verantwortlicher | Deadline | +|------------------------------------------|------------------|-----------------| +| GUI Designs | Alle | nächstes Weekly | +| Rückmeldung zum Umfang der Seminararbeit | Prof. Arinir | nächstes Weekly | ## Aktueller Projektstand diff --git a/documentations/meeting-notes/Meeting_2023-05-25.md b/documentations/meeting-notes/Meeting_2023-05-25.md index d04f602..607dc16 100644 --- a/documentations/meeting-notes/Meeting_2023-05-25.md +++ b/documentations/meeting-notes/Meeting_2023-05-25.md @@ -1,6 +1,7 @@ # Weekly *5*: 25.05.2023 ## Teilnehmer + - Prof. Arinir - Tristan Nolde - Tim Ronneburg @@ -11,20 +12,23 @@ ## Themen -- Nächster Termin am 08.06.2023 ist Fronleichnam => Verschoben auf 09.06.2023 09:00 +- Nächster Termin am 08.06.2023 ist Fronleichnam ⇒ Verschoben auf 09.06.2023 09:00 - Sebastian präsentiert das Miro Bord mit den Wireframediagrammen. [Siehe Anlage]() -- Philipp präsentiert den Sozial graph +- Philipp präsentiert den social graph - Sebastian präsentiert die Unternehmensdetails in sicht auf die Kennzahlen - Sebastian dankt Kim für das Überarbeiten der Graphen im Farbschema - Sebastian zeigt die anderen Übersichten - - Sascha weist darauf hin das zusätzlich noch das Quellmaterial für die Stimmungen mit angezeigt werden sollen. - - Die Form ist bisher noch unklar. + - Sascha weist darauf hin das zusätzlich noch das Quellmaterial für die Stimmungen mit angezeigt werden sollen. + - Die Form ist bisher noch unklar. -- Arinir: Auch indirekte verpflächtungen für N sprünge sollen bei den Details angezeigt werden und einen wert für den Einfluss von personen und Firmen sein. - - Zähle die Personenverbindungen juristisch/Natürlich getrennt nach den schichten der Indirektion. Interessant wäre eine auftrennung der natürlichen und Jiristischen personen in der Zählung - - Ranking der Personen nach Anzahl der Verbindungen +- Arinir: Auch indirekte Verflechtungen für N sprünge sollen bei den Details angezeigt werden und einen wert für den + Einfluss von personen und Firmen sein. + - Zähle die Personenverbindungen juristisch/Natürlich getrennt nach den schichten der Indirektion. Interessant wäre + eine auftrennung der natürlichen und Jiristischen personen in der Zählung + - Ranking der Personen nach Anzahl der Verbindungen -- Die Frage wie wir zeitliche veränderungen im sozial graph bewerten sollen kam auf. Wurde aber noch nicht abschließend beantwortet. +- Die Frage wie wir zeitliche veränderungen im social graph bewerten sollen kam auf. Wurde aber noch nicht abschließend + beantwortet. ## Abgeleitete Action Items diff --git a/documentations/meeting-notes/Meeting_2023-06-09.md b/documentations/meeting-notes/Meeting_2023-06-09.md index 2b53ea9..14548ec 100644 --- a/documentations/meeting-notes/Meeting_2023-06-09.md +++ b/documentations/meeting-notes/Meeting_2023-06-09.md @@ -14,7 +14,7 @@ - Stepstone Projekt: - Gewünscht wird ein initialer Austausch mit Stepstone - - Befürchtung ist, dass es zu einem Hinderniss wird + - Befürchtung ist, dass es zu einem Hindernis wird - Entscheidung liegt daher beim Projekt-Team - Weitere Informationen sind nicht aktuell nicht vorhanden - Vorschlag Prof. Arinir: Sollte das Thema nochmal zum Team getragen werden, wird der aktuelle Stand vorgestellt und @@ -24,7 +24,7 @@ - Ändert sich der Scope - Nein - NDA - Nein - Veröffentlichung - maximal Impressionen - - Was muss geleistet werden - nicht direkt an Stepstone sondern über FH als Mediator + - Was muss geleistet werden - nicht direkt an Stepstone, sondern über FH als Mediator - Sollen Präsentationen vorab zur Verfügung gestellt werden? - Einige Tage vorher in das Git Repo. hochladen und Prof. Arinir benachrichtigen - Rücksprache Seminarpräsentationen @@ -35,7 +35,7 @@ - Fokus auf Anwendung und Mehrwert, weniger genauer mathematischer Lösung - Feedback: - Präsentation scheint sehr umfangreich; Wunsch nach Reduzierung der Folienanzahl - - Formeln hinter den Analysen spannend, ggf. doch drauf eingehen, um Kennzahl in Kontext zu setzen + - Formeln hinter den Analysen spannend, ggf. doch darauf eingehen, um Kennzahl in Kontext zu setzen - Visualiserung: - Prinzipien - Vorteile @@ -43,7 +43,7 @@ - Effekt von Farbwahl - Erste Umsetzung im Jupyter Notebook - Feedback: - - Es werden extem viele Datenpunkte angezeigt werden müssen, wie wird dies in den Bibliotheken umgesetzt? + - Es werden extrem viele Datenpunkte angezeigt werden müssen, wie wird dies in den Bibliotheken umgesetzt? Kann dort gefiltert werden? - Wenn nicht direkt am Graphen (der Darstellung) gefiltert werden kann, dann frühzeitig filtern, bevor der Graph gebaut wird @@ -55,15 +55,15 @@ - Social Graph - Zeitseriendaten - Relationales DB Modell - - Fokus ebenfalls auf Abfrage der Daten für Folge-Projekte wie Visualiserung und Mehrwert fürs Team, weniger + - Fokus ebenfalls auf Abfrage der Daten für Folge-Projekte wie Visualisierung und Mehrwert fürs Team, weniger Theorie - Feedback: - Es müssen Erfahrungen mit der Library und Darstellung gesammelt werden, um den Mehrwert der Lösung hervorzuheben - - Modellierung der Finzanz-Kennzahlen + - Modellierung der Finanz-Kennzahlen - Spaltennamen sollen sprechend sein, z.B. "value" statt "sum" - - Präferenz zum Modell mit einzelnem Eintrag mit mehren Kennzahl Spalten stallt generischer Lösung über - Enum + - Präferenz zum Modell mit einzelnem Eintrag mit mehreren Kennzahlen pro Spalten statt generischer + Lösung über Enum - Text Mining - Fokus auf Sentiment Analyse - Vergleich verschiedener Lösungen und ML Modelle diff --git a/documentations/meeting-notes/Meeting_2023-08-03.md b/documentations/meeting-notes/Meeting_2023-08-03.md index 2c3199e..cd4ff53 100644 --- a/documentations/meeting-notes/Meeting_2023-08-03.md +++ b/documentations/meeting-notes/Meeting_2023-08-03.md @@ -16,7 +16,7 @@ - Datenspeicherung auf dem Cluster - Weitere Vorgehensweise: - Idee: Kleine Workshops/Teams - - In 2er Teams die einzelnen Funktionen über Feature Branches erstellen + - In 2er-Teams die einzelnen Funktionen über Feature Branches erstellen ## Abgeleitete Action Items diff --git a/documentations/meeting-notes/Meeting_2023-08-17.md b/documentations/meeting-notes/Meeting_2023-08-17.md index 5170a3c..f981823 100644 --- a/documentations/meeting-notes/Meeting_2023-08-17.md +++ b/documentations/meeting-notes/Meeting_2023-08-17.md @@ -26,8 +26,8 @@ - UI: - Vorstellung der ersten Visualisierung mit Plotly und Anbindung an ProductionDB - Dash startet im Hintergrund einen http-Server, welcher über den Port 8050 erreichbar ist - - Dash wird für das Dashboarding verwendet und wird (bei Bedarf) durch weitere Komponenten erweitert -- Abschluß des PoC und Umsetzung der bestehenden Architektur + - Dash wird für das Dashboard verwendet und wird (bei Bedarf) durch weitere Komponenten erweitert +- Abschluss des PoC und Umsetzung der bestehenden Architektur ## Abgeleitete Action Items diff --git a/documentations/meeting-notes/Meeting_2023-08-31.md b/documentations/meeting-notes/Meeting_2023-08-31.md index a77acc8..082cded 100644 --- a/documentations/meeting-notes/Meeting_2023-08-31.md +++ b/documentations/meeting-notes/Meeting_2023-08-31.md @@ -15,13 +15,14 @@ - Rückfrage von Herrn Arinir bezüglich Aufbau der Software und Architektur - Gerade werden einzelne Funktionen erstellt, Daten werden ungefiltert in die Mongo DB geschrieben, anschließend Bereinigung und Übertragung in die Postgres - - Vorstellung aktueller Repo-Struktur durch Tristan, relevanter Code befindet sich im src-Ordner + - Vorstellung aktueller Repo-Struktur durch Tristan + - Relevanter Code befindet sich im src-Ordner - Wie kann sichergestellt werden, dass unsere Ziele erreicht werden? - Zeitplan/Meilensteinplan gewünscht - Wann soll was erreicht werden? - - Burndown-Diagramm - -> Umsetzung durch Team beim Präsenzmeeting am 09.09.2023 + - Burn-down-Diagramm + ⇒ Umsetzung durch Team beim Präsenzmeeting am 09.09.2023 - Kurze Vorstellung der bearbeiteten Themen: NER + Sentiment (Sebastian), Finanzdaten (Tristan), UI (Kim), Datentransfer (Philipp) diff --git a/documentations/project_management/Pflichtenheft.md b/documentations/project_management/Pflichtenheft.md index 5150f20..60a58d9 100644 --- a/documentations/project_management/Pflichtenheft.md +++ b/documentations/project_management/Pflichtenheft.md @@ -6,48 +6,26 @@ Version 0.1 Erstellt am 07.04.2023 |--------------------|----------------| | Kim Mesewinkel | 000 | | Tristan Nolde | 000 | -| Sebastian Zelenie | 000 | +| Sebastian Zeleny | 000 | | Philip Horstenkamp | 000 | | Sascha Zhu | 000 | | Tim Ronneburg | 000 | - - - ## Historie der Dokumentenversion -| Version | Datum | Autor | Änderungsgrund / Bemerkung | -|-----------|------------|---------------|----------------------------------------| -| 0.1 | 07.04.2023 | Tim Ronneburg | Initiales aufsetzen des Pflichtenhefts | -| 0.2 | 000 | | | -| ... | 000 | | | -| 1.0 | 000 | | | +| Version | Datum | Autor | Änderungsgrund / Bemerkung | +|---------|------------|---------------|----------------------------------------| +| 0.1 | 07.04.2023 | Tim Ronneburg | Initiales aufsetzen des Pflichtenhefts | +| 0.2 | 000 | | | +| ... | 000 | | | +| 1.0 | 000 | | | ## Inhaltsverzeichnis + [Historie der Dokumentenversion](#historie) [Inhaltsverzeichnis](#inhaltsverzeichnis) -1. [Einleitung](#einleitung) - 1. [allgemeines](#allgemeines) - 1. [Ziel und Zweck des Dokuments](#ziel/zweck) - 1. [Ausgangssituation](#ausgangssituation) - 1. [Projektbezug](#projektbezug) - 1. [Abkürzungen](#abkürzungen) - 1. [Schnittstellen/ Bezug zu anderen Dokumenten](#schnittstellen) -1. [Konzept und Rahmenbedingungen](#konzept_und_rahmenbedingung) - 1. [Ziele des Anbieters](#ziele_anbieter) - 1. [Ziele und Nutzen des Anwenders](#ziele_anwender) - 1. [Benutzer / Zielgruppen](#benutzer/zielgruppen) - 1. [Systemvoraussetzungen (Optional)](#systemvoraussetzungen) - 1. [Ressourcen (Optional)](#ressourcen) -1. [Funktionale Anforderungen](#f_anforderung) - 1. [F100](#f100) -1. [Nicht-Funktionale Anforderungen](#nf_anforderung) - 1. [N100](#n100) -1. [Anforderungsverfolgung zu den Spezifikationen](#verfolgung_spezifikation) -1. [Abnahmekriterien und Vorgehen zur Ausgangsprüfung](#abnahmekriterien) -1. [Lieferumfang](#lieferumfang) -1. [Anhang / Ressourcen](#anhang/ressourcen) +<--!toc--> ## Einleitung @@ -62,6 +40,7 @@ Version 0.1 Erstellt am 07.04.2023 ### Abkürzungen ### Schnittstellen/ Bezug zu anderen Dokumenten + Test ## Konzept und Rahmenbedingungen @@ -76,14 +55,14 @@ Test ### Ressourcen (Optional) - - ## Funktionale Anforderungen ### **Muss Ziele** ### F100 + Die Software berechnet und veranschaulicht folgende Unternehmenskennzahlen: + - Umsatz - Gewinn - Bilanzsumme @@ -94,49 +73,66 @@ Die Software berechnet und veranschaulicht folgende Unternehmenskennzahlen: - Besitzverhältnisse ### F110 -Das System muss, neben den Kennzahlen von F100, die Metriken aus dem Anhang "data_and_metrics.md" je nach Datenlage für die Unternehmen berechnen und anzeigen. + +Das System muss, neben den Kennzahlen von F100, die Metriken aus dem Anhang "data_and_metrics.md" je nach Datenlage für +die Unternehmen berechnen und anzeigen. ### F120 -Die Software muss eine Suche nach Unternehmen und Personen anbieten die zu einer Detailansicht führt mit den in F100 genannten Kennzahlen. + +Die Software muss eine Suche nach Unternehmen und Personen anbieten die zu einer Detailansicht führt mit den in F100 +genannten Kennzahlen. ### **Soll Ziele** ### F200 -Die Software veranschaulicht die Konzernstruktur (Mutterkonzern <-> Tochterfirmen). Diese sollen durch ein Netz transparent dargestellt werden. + +Die Software veranschaulicht die Konzernstruktur (Mutterkonzern <-> Tochterfirmen). Diese sollen durch ein Netz +transparent dargestellt werden. ### F210 -Die Software zeigt die Beziehungen von Unternehmen untereinander und mit den Wirtschaftsprüfern auf. Diese sollen durch ein Netz transparent dargestellt werden. + +Die Software zeigt die Beziehungen von Unternehmen untereinander und mit den Wirtschaftsprüfern auf. Diese sollen durch +ein Netz transparent dargestellt werden. ### F220 -Die Software soll bewerten ob die Berichtserstattung der letzten 7 Tage eher Positiv oder Negativ zu dem Unternehmen war. Dabei sind häufige Vorstandswechsel negativ und Zielerreichungen positiv. + +Die Software soll bewerten ob die Berichtserstattung der letzten 7 Tage eher Positiv oder Negativ zu dem Unternehmen +war. Dabei sind häufige Vorstandswechsel negativ und Zielerreichungen positiv. ## Nicht-Funktionale Anforderungen ### **Muss Ziele** ### N100 + Das System muss die 1000 größten deutschen und europäischen Unternehmen beinhalten. Diese werden anhand der Kennzahlen + - Umsatz - - + bewertet und bemessen. ### **Soll Ziele** ### N200 + Das System ist 24/7 über das Internet für jede Person mit Internetzugang erreichbar. ### N210 + Das System soll eine Verfügbarkeit von 99 % erreichen, mit maximal 10 Ausfällen pro Jahr. ### **Kann Ziele** ### N300 -Das System kann möglichst über einen Disaster Recovery Schutz verfügen und in einem zweiten, 250 KM vom Hauptrechenzentrum entfernten Rechenzentrum die Systeme und Daten spiegeln. + +Das System kann möglichst über einen Disaster Recovery Schutz verfügen und in einem zweiten, 250 KM vom +Hauptrechenzentrum entfernten Rechenzentrum die Systeme und Daten spiegeln. ### N310 -Das System kann möglichst skalierbar sein, sodass auch eine Nutzerzahl von 1000 Benutzern die Software nutzen können. +Das System kann möglichst skalierbar sein, sodass auch eine Nutzerzahl von 1000 Benutzern die Software nutzen können. ## Anforderungsverfolgung zu den Spezifikationen diff --git a/documentations/project_management/timeline.md b/documentations/project_management/timeline.md index 02aaca5..bef5a85 100644 --- a/documentations/project_management/timeline.md +++ b/documentations/project_management/timeline.md @@ -1,4 +1,5 @@ # Timeline + ```{mermaid} gantt diff --git a/documentations/research/Erste_Uebersicht_Sentiment_Analysis.md b/documentations/research/Erste_Uebersicht_Sentiment_Analysis.md index 0132419..77e3e8e 100644 --- a/documentations/research/Erste_Uebersicht_Sentiment_Analysis.md +++ b/documentations/research/Erste_Uebersicht_Sentiment_Analysis.md @@ -1,23 +1,29 @@ # Sentimentanalyse -Sentimentanalyse ist eine Technik des maschinellen Lernens und der künstlichen Intelligenz, die verwendet wird, um das Stimmungs- oder Emotionsniveau in Texten oder anderen Inhalten zu identifizieren. Die Sentimentanalyse basiert auf der Verarbeitung natürlicher Sprache (Natural Language Processing, NLP) und nutzt Algorithmen, um das Vorkommen von positiven, negativen oder neutralen Ausdrücken in einem Text zu erkennen. - +Sentimentanalyse ist eine Technik des maschinellen Lernens und der künstlichen Intelligenz, die verwendet wird, um das +Stimmungs- oder Emotionsniveau in Texten oder anderen Inhalten zu identifizieren. Die Sentimentanalyse basiert auf der +Verarbeitung natürlicher Sprache (Natural Language Processing, NLP) und nutzt Algorithmen, um das Vorkommen von +positiven, negativen oder neutralen Ausdrücken in einem Text zu erkennen. ## Techniken der Sentimentanalyse: -1. Regelbasiert: Nutzt eine Sammlung von Regeln und lexikalischen Ressourcen, um das Sentiment zu erkennen. Beispiel: Das SentiWordNet-Lexikon ordnet jedem Wort in einem Text eine positive, negative oder neutrale Bewertung zu -2. Machine-Learning-basiert: Nutzt Algorithmen des maschinellen Lernens, beispielsweise Naive Bayes, Entscheidungsbäume und Support-Vector-Machines (SVM). -3. Deep-Learning-basiert: Nutzt neuronale Netze, beispielsweise Convolutional Neural Networks (CNN) und Recurrent Neural Networks (RNN). +1. Regelbasiert: Nutzt eine Sammlung von Regeln und lexikalischen Ressourcen, um das Sentiment zu erkennen. Beispiel: + Das SentiWordNet-Lexikon ordnet jedem Wort in einem Text eine positive, negative oder neutrale Bewertung zu +2. Machine-Learning-basiert: Nutzt Algorithmen des maschinellen Lernens, beispielsweise Naive Bayes, Entscheidungsbäume + und Support-Vector-Machines (SVM). +3. Deep-Learning-basiert: Nutzt neuronale Netze, beispielsweise Convolutional Neural Networks (CNN) und Recurrent Neural + Networks (RNN). [Deep Data Analytics](https://deep-data-analytics.com/faq/sentiment-analyse/) - ## Python Bibliotheken: + Pattern, VADER, BERT, TextBlob, spacy, CoreNLP, scikit-learn, Polyglot, PyTorch, Flair [Top 10 Libraries](https://www.unite.ai/10-best-python-libraries-for-sentiment-analysis/) ### FinBERT + Financial Sentiment Analysis with BERT [Paper](https://arxiv.org/pdf/1908.10063.pdf) @@ -26,18 +32,16 @@ Financial Sentiment Analysis with BERT [Minimal Example](https://huggingface.co/yiyanghkust/finbert-tone) - # Topic Modeling - Text-Mining-Methode, um Themen in Textsammlungen zu finden - Suche nach Trends und Mustern in unstrukturierten Daten -- Verfahren: Latent Dirichlet Allokation (LDA), Probabilistic Latent Semantic Analysis (PLSA), Non-Negative Matrix Factorization (NMF) +- Verfahren: Latent Dirichlet Allokation (LDA), Probabilistic Latent Semantic Analysis (PLSA), Non-Negative Matrix + Factorization (NMF) - Document Clustering [Beispiel Blog-Analyse](https://blog.codecentric.de/topic-modeling-codecentric-blog-articles) ## Python Bibliotheken: + Gensim (ggf. Erweiterung gensim-finance), spacy, NLTK, scikit-learn, PyCaret - - - diff --git a/documentations/research/RE_Vom-Problem-zur-Loesung.md b/documentations/research/RE_Vom-Problem-zur-Loesung.md index 0ebd5a2..5db17ab 100644 --- a/documentations/research/RE_Vom-Problem-zur-Loesung.md +++ b/documentations/research/RE_Vom-Problem-zur-Loesung.md @@ -1,11 +1,19 @@ # Von der Problemstellung zum Lösungskonzept -Um ein Softwaresystem für das Transparenzregister implementieren zu können, ist es notwendig Anforderungen zu formulieren. Diese legen die Eigenschaften der Software fest und werden benötigt, um die fachliche und technische Lösung zu modellieren / entwerfen und ein Produkt zu implementieren. -Zu Beginn sind die Anforderungen wenig eingeschränkt ("Benötigt wird eine Möglichkeit Daten zu speichern."), im Verlauf der Modellierung wird der Lösungsraum eingeschränkt ("Es bietet sich eine Datenbanklösung oder Dateiablage an.") und abschließend auf eine zu implementierende Lösung festgelegt ("Die Software verwendet ein relationales Modell unter Verwendung einer SQLite Datenbank."). +Um ein Softwaresystem für das Transparenzregister implementieren zu können, ist es notwendig Anforderungen zu +formulieren. Diese legen die Eigenschaften der Software fest und werden benötigt, um die fachliche und technische Lösung +zu modellieren / entwerfen und ein Produkt zu implementieren. + +Zu Beginn sind die Anforderungen wenig eingeschränkt ("Benötigt wird eine Möglichkeit Daten zu speichern."), im Verlauf +der Modellierung wird der Lösungsraum eingeschränkt ("Es bietet sich eine Datenbanklösung oder Dateiablage an.") und +abschließend auf eine zu implementierende Lösung festgelegt ("Die Software verwendet ein relationales Modell unter +Verwendung einer SQLite Datenbank."). ## Requirements Engineering Transparenzregister -Unser Weg zum Pflichtenheft und zur Spezifikation der Systemanforderungen ist folgend dargestellt. -Von unspezifizierten Anforderungen werden wir immer konkreter und beantworten iterativ die Fragen *Was ist das Problem/Anforderung?* und *Wie lösen wir das Problem/Anforderung?*. + +Unser Weg zum Pflichtenheft und zur Spezifikation der Systemanforderungen ist folgend dargestellt. +Von unspezifizierten Anforderungen werden wir immer konkreter und beantworten iterativ die Fragen *Was ist das +Problem/Anforderung?* und *Wie lösen wir das Problem/Anforderung?*. ### 1. Anforderungen aus Projektvorstellung @@ -20,21 +28,28 @@ Von unspezifizierten Anforderungen werden wir immer konkreter und beantworten it - Es werden Datenquellen benötigt, um Unternehmenskennzahlen ermitteln zu können. - Es werden Datenquellen benötigt, um über die öffentliche Darstellung der Unternehmen zu erfahren. -- Es werden Werkzeuge benötigt, um Sentimentanalyse über Unternehmen durchzuführen. +- Es werden Werkzeuge benötigt, um Sentimentanalyse über Unternehmen durchzuführen. - Die rechtmäßige Verwendung der Daten muss geklärt werden. - Die ermittelten Daten müssen gespeichert werden. - Es werden Werkzeuge benötigt, um Text Mining zu betreiben. ### 3. Identifikation von Domänen zur Lösungsfindung -Aus den Anforderungen der Projektvorstellung und der Projektgruppe wurden sechs Domänen identifiziert, welche benötigt werden, um ein Softwaresystem für Transparenzregister zu erarbeiten. + +Aus den Anforderungen der Projektvorstellung und der Projektgruppe wurden sechs Domänen identifiziert, welche benötigt +werden, um ein Softwaresystem für Transparenzregister zu erarbeiten. Um das benötigte Domänenwissen zu vertiefen, bearbeitet jedes Mitglied ein Cluster. ### 4. technische/fachliche Lösungen -Mit dem Domänenwissen können technische und fachliche Lösungen definiert werden ("Zur Datenspeicherung von Unternehmenskennzahlen ist *xy* notwendig, weil *abc*.") und erste Modelle (z.B. GUI-Modell) erstellt werden. + +Mit dem Domänenwissen können technische und fachliche Lösungen definiert werden ("Zur Datenspeicherung von +Unternehmenskennzahlen ist *xy* notwendig, weil *abc*.") und erste Modelle (z.B. GUI-Modell) erstellt werden. ### 5. Priorisierung von Anforderungen -Die Gruppe diskutiert die Anforderungen und legt eine Priorisierung fest. -### 6. Pflichtenheft -Das Team legt sich mit dem Pflichtenheft auf einen definierten Umfang und konkrete Inhalte der Lösung fest. Es wird in *Muss-* und *Kann-*Anforderungen unterschieden. -Das Pflichtenheft ist das **Project Proposal**. \ No newline at end of file +Die Gruppe diskutiert die Anforderungen und legt eine Priorisierung fest. + +### 6. Pflichtenheft + +Das Team legt sich mit dem Pflichtenheft auf einen definierten Umfang und konkrete Inhalte der Lösung fest. Es wird in +*Muss-* und *Kann-*Anforderungen unterschieden. +Das Pflichtenheft ist das **Project Proposal**. diff --git a/documentations/research/Timeseries/Overview.md b/documentations/research/Timeseries/Overview.md index 336e5d3..1889e87 100644 --- a/documentations/research/Timeseries/Overview.md +++ b/documentations/research/Timeseries/Overview.md @@ -1,44 +1,83 @@ # Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften ## Leitfragen + 1. Was zeichnet Timeseries Daten aus? 2. Wie werden Timeseries effizient gespeichert? -3. Welche Daten sind für den vorstehenden Use Case relevant und wie werden diese möglichts optimal (gemäß Software Qualitätskriterien wie Skalierbarkeit u.ä.) modelliert? +3. Welche Daten sind für den vorstehenden Use Case relevant und wie werden diese möglichts optimal (gemäß Software + Qualitätskriterien wie Skalierbarkeit u.ä.) modelliert? 4. Passt die Struktur und Handhabung von Timeseries Daten auf den Use Case? 5. Wo können die benötigten Daten abgerufen werden? 6. Wie könnte ein beispielhafter Datensatz (ggf. in Form eines Pandas DataFrames) aussehen? ## Timeseries -Hinter Timeseries (oder Zeitreihen) verbergen sich Datenpunkte meistens numerischer Natur aber auch andere Datentypen sind möglich, die Werte einer Kennzahl oder Entität entlang der Zeit-Achse darstellen. Nennenswerte Beispiele sind die Herzfrequenz eines Menschen sowie Aktienkurse börsennotierter Unternehmen. Es wird generell zwischen `Metriken` (engl.: Metrics; bei regelmäßigem Intervall) und `Ereignissen` (engl.: Events; bei unregelmäßigen Intervallen) unterschieden. + +Hinter Timeseries (oder Zeitreihen) verbergen sich Datenpunkte meistens numerischer Natur aber auch andere Datentypen +sind möglich, die Werte einer Kennzahl oder Entität entlang der Zeit-Achse darstellen. Nennenswerte Beispiele sind die +Herzfrequenz eines Menschen sowie Aktienkurse börsennotierter Unternehmen. Es wird generell zwischen `Metriken` (engl.: +Metrics; bei regelmäßigem Intervall) und `Ereignissen` (engl.: Events; bei unregelmäßigen Intervallen) unterschieden. --vgl. [influxdata - What is time series data?](https://www.influxdata.com/what-is-time-series-data/) Einige zentrale Eigenschaften von Daten, die als Zeitreihen modelliert werden, sind: -1. `Unveränderbarkeit` (engl.: Immutability): - Da Zeitreihen in der Regel in zeitlicher Reihenfolge aufgenommen werden, werden sie normalerweise lediglich an die bestehende Reihe angehangen und nachträglich nicht mehr angepasst. Der entscheidende Identifikator des Datensatzes besteht dabei aus dem Zeitstempel (engl.: Timestamp) sowie der zugeordneten Entität (z.B. einem Sensor). Andere Features, die als Primärschlüssel fungieren können, sind nicht vorgesehen. -2. `Lebensdauer` (engl.: Retention policy): - Da Zeitreihen in hoher Frequenz geschrieben aber mit höherem Alter seltener gelesen werden, ist es üblich alte Daten zu löschen bzw. aggregiert zu speichern, um langfristig Speicher zu sparen. -3. `Aggregation` (engl.: Aggregation): - In den meisten Use Cases werden nicht alle Daten gleichzeitig oder nur einzelne Datensätze sondern Werte eines definierten Zeitraumes abgefragt und häufig aggregiert (z.B. als Summe oder Durchschnitt) zurückgegeben. -4. `Hohes Schreib- zu Lese-Verhältnis` (engl.: High write/read ratio): - Timeseries Daten werden in der Regel in hoher Frequenz (kurzen Intervallen) geschrieben jedoch nur gelegentlich bzw. wie in Punkt 3 angemerkt aggregiert abgerufen, so dass schreibende Zugriffe zur Datenbank die lesenden an Volumen übertreffen. --- vgl. [TDengine - Characteristics of Time-Series Data](https://tdengine.com/tsdb/characteristics-of-time-series-data/) +1. `Unveränderbarkeit` (engl.: Immutability): + Da Zeitreihen in der Regel in zeitlicher Reihenfolge aufgenommen werden, werden sie normalerweise lediglich an die + bestehende Reihe angehangen und nachträglich nicht mehr angepasst. Der entscheidende Identifikator des Datensatzes + besteht dabei aus dem Zeitstempel (engl.: Timestamp) sowie der zugeordneten Entität (z.B. einem Sensor). Andere + Features, die als Primärschlüssel fungieren können, sind nicht vorgesehen. +2. `Lebensdauer` (engl.: Retention policy): + Da Zeitreihen in hoher Frequenz geschrieben aber mit höherem Alter seltener gelesen werden, ist es üblich alte Daten + zu löschen bzw. aggregiert zu speichern, um langfristig Speicher zu sparen. +3. `Aggregation` (engl.: Aggregation): + In den meisten Use Cases werden nicht alle Daten gleichzeitig oder nur einzelne Datensätze, sondern Werte eines + definierten Zeitraumes abgefragt und häufig aggregiert (z.B. als Summe oder Durchschnitt) zurückgegeben. +4. `Hohes Schreib- zu Lese-Verhältnis` (engl.: High write/read ratio): + Timeseries Daten werden in der Regel in hoher Frequenz (kurzen Intervallen) geschrieben jedoch nur gelegentlich bzw. + wie in Punkt 3 angemerkt aggregiert abgerufen, sodass schreibende Zugriffe zur Datenbank die lesenden an Volumen + übertreffen. + +-- +vgl. [TDengine - Characteristics of Time-Series Data](https://tdengine.com/tsdb/characteristics-of-time-series-data/) ## Modellierung relevanter Kennzahlen ### Ist die Timeseries Modellierung für den Use Case geeignet? -Die im Rahmen der vorher durchgeführten Analyse von für den Use Case [relevanten Unternehmenskennzahlen](../data_and_metrics.md) zeichnen sich durch ein Merkmal aus: sie basieren auf einer jährlich bis maximal jedes Quartal aufgestellten Kennzahl wie den Gewinn oder Umsatz des Unternehmens. Daraus resultiert eine für Zeitreihen geringe Datenfrequenz - üblich sind hier minütlich bis unter sekündlich geschriebene Daten. -Des Weiteren ist jeder Datensatz nicht nur an die Zeit-Achse sondern eine weitere Entität wie einen Quartals oder Jahresabschluss gebunden. Dies spiegelt nicht nur in der Berechnung der Kennzahl für ein einzelnes Unternehmen sondern auch den Vergleich zwischen Mehreren wieder: Hier ist es möglich, dass Unternehmen ihre Ergebnisse zu unterschiedlichen Zeiten aber den selben Ereignissen veröffentlichen. Immerhin ist es realistisch, dass ein Unternehmen seinen Jahresabschluss deutlich früher als ein anderes der Öffentlichkeit zur Verfügung stellt. So eine Abfrage ließe sich zwar durchaus über die Einführung einer zeitlichen Einschränkung filtern, jedoch ist auch hier die Verknüpfung zu einem Jahres- oder Quartalsabschluss von höherem Interesse. +Die im Rahmen der vorher durchgeführten Analyse von für den Use +Case [relevanten Unternehmenskennzahlen](../data_and_metrics.md) zeichnen sich durch ein Merkmal aus: sie basieren auf +einer jährlich bis maximal jedes Quartal aufgestellten Kennzahl wie den Gewinn oder Umsatz des Unternehmens. Daraus +resultiert eine für Zeitreihen geringe Datenfrequenz - üblich sind hier minütlich bis unter sekündlich geschriebene +Daten. -In Folge dessen eignet sich eine Zeitreihen basierte Modellierung nicht für die zentralen Unternehmenskennzahlen. +Des Weiteren ist jeder Datensatz nicht nur an die Zeit-Achse, sondern eine weitere Entität wie eines Quartals oder +Jahresabschluss gebunden. Dies spiegelt nicht nur in der Berechnung der Kennzahl für ein einzelnes Unternehmen, sondern +auch den Vergleich zwischen Mehreren wieder: Hier ist es möglich, dass Unternehmen ihre Ergebnisse zu unterschiedlichen +Zeiten aber den selben Ereignissen veröffentlichen. Immerhin ist es realistisch, dass ein Unternehmen seinen +Jahresabschluss deutlich früher als ein anderes der Öffentlichkeit zur Verfügung stellt. So eine Abfrage ließe sich zwar +durchaus über die Einführung einer zeitlichen Einschränkung filtern, jedoch ist auch hier die Verknüpfung zu einem +Jahres- oder Quartalsabschluss von höherem Interesse. -Für die Speicherung und Verwaltung von Aktienkursen börsennotierter Unternehmen - folglich nicht aller Kapitalgesellschaften, die im Use Case behandelt werden - bietet sich der Einsatz einer Timeseries Datenbank jedoch durchaus an, da Daten hier nicht nur in sehr hoher Frequenz geschrieben sondern auch im bekannten Muster abgefragt werden. Demzufolge mag sich eine Modellierung auf Basis der `Polyglot persistence` (Verwendung verschiedener Datenspeicherungs Technologien) auf Gesamtsicht eignen, so dass Kennzahlen sowie Stammdaten von Unternehmen in einer relationalen DB gespeichert und abhängig ihrer Unternehmensform mit Aktiekursen aus einer Timeseries DB angereichert werden. +In Folge dessen eignet sich eine zeitreihenbasierte Modellierung nicht für die zentralen Unternehmenskennzahlen. -Dieser Ansatz wäre nicht nur für diese Anforderung lohnenswert, sondern kann auch die effiziente Speicherung der Unternehmensverflechtungen vereinfachen, da für diesen Anwendungszweck eine Graphen-Datenbank ins Spiel gebracht werden könnte, die die Relationen zwischen Unternehmen und Unternehmen leicht traversierbar speichert. Es ist daher auch abzuwägen, ob diese nicht auch die Aufgaben des relationalen Modells übernehmen könnte, um die Fülle anforderungsspezifischen DB Technologien zu reduzieren, um auch so die Komplexität des Gesamtsystem gering zu halten. +Für die Speicherung und Verwaltung von Aktienkursen börsennotierter Unternehmen - folglich nicht aller +Kapitalgesellschaften, die im Use Case behandelt werden - bietet sich der Einsatz einer Timeseries Datenbank jedoch +durchaus an, da Daten hier nicht nur in sehr hoher Frequenz geschrieben, sondern auch im bekannten Muster abgefragt +werden. Demzufolge mag sich eine Modellierung auf Basis der `Polyglot persistence` (Verwendung verschiedener +Datenspeicher-Technologien) auf Gesamtsicht eignen, sodass Kennzahlen sowie Stammdaten von Unternehmen in einer +relationalen DB gespeichert und abhängig ihrer Unternehmensform mit Aktienkursen aus einer Timeseries DB angereichert +werden. -Um einen geeigneten Zugang zu den Daten von extern (z.B. der Datenvisualisierungs-Schicht in Form einer Web App) zu ermöglichen, ist der Einsatz von `GraphQL` sinnvoll. Dies ermöglicht dem Client die gesamte Datenbasis zu durchforsten und den benötigten Datenbestand abzufragen. Der ``GraphQL`` Server kann dabei durch seine `Resolver` Struktur problemlos mehrere Datenquellen (siehe oben angesprochene `Polyglot Persistence`) kombinieren. +Dieser Ansatz wäre nicht nur für diese Anforderung lohnenswert, sondern kann auch die effiziente Speicherung der +Unternehmensverflechtungen vereinfachen, da für diesen Anwendungszweck eine Graphen-Datenbank ins Spiel gebracht werden +könnte, die die Relationen zwischen Unternehmen und Unternehmen leicht traversierbar speichert. Es ist daher auch +abzuwägen, ob diese nicht auch die Aufgaben des relationalen Modells übernehmen könnte, um die Fülle +anforderungsspezifischen DB Technologien zu reduzieren, um auch so die Komplexität des Gesamtsystems gering zu halten. + +Um einen geeigneten Zugang zu den Daten von extern (z.B. der Datenvisualisierungs-Schicht in Form einer Web-App) zu +ermöglichen, ist der Einsatz von `GraphQL` sinnvoll. Dies ermöglicht dem Client die gesamte Datenbasis zu durchforsten +und den benötigten Datenbestand abzufragen. Der ``GraphQL`` Server kann dabei durch seine `Resolver` Struktur problemlos +mehrere Datenquellen (siehe oben angesprochene `Polyglot Persistence`) kombinieren. ### Überblick über Datenrelationen diff --git a/documentations/research/data_and_metrics.md b/documentations/research/data_and_metrics.md index dbbeb46..623c093 100644 --- a/documentations/research/data_and_metrics.md +++ b/documentations/research/data_and_metrics.md @@ -1,32 +1,35 @@ # Daten und Kennzahlen von Unternehmen - ## Basisdaten der Firma + * Name -* Sitz +* Sitz * Rechtsform bzw. Art der Kapitalgesellschaft (AG, KGaA, GmbH, UG) * Branche * Gründungsdatum +## Personen -## Personen * Gesellschafter/innen (Verteilung der Anteile, Höhe der Anteile) * Geschäftsführung bzw. Vorstand (Vorsitzende/r, Stellvertretung, weitere) * Aufsichtsrat (Vorsitzende/r, Stellvertretung, weitere) * Wirtschaftsprüfung (Unternehmen, verantwortliche/r Wirtschaftsprüfer/in) -Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein. Hier wären neben dem Nachnamen auch der Vorname wünschenswert. - +Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein. Hier wären neben dem Nachnamen auch der +Vorname wünschenswert. ## Bewertung der Größe der Kapitalgesellschaft + *Nach HGB §267: https://www.gesetze-im-internet.de/hgb/__267.html* + * Durchschnittliche Mitarbeiterzahl (Anzahl beschäftigte Arbeitnehmer am 31.03., 30.06., 30.09., 31.12.) * Bilanzsumme bzw. Gesamtkapital * Umsatz bzw. Umsatzerlöse - ## Kennzahlen bei Aktiengesellschaften + *Angelehnt an https://www.tagesschau.de/wirtschaft/boersenkurse/ und https://boerse.de* + * ISIN (International Securities Identification Number) * WKN (Wertpapierkennnummer) * Aktienkurs @@ -36,37 +39,43 @@ Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein * Dividendenrendite * Ausschüttungsquote = Dividende je Aktie / Gewinn je Aktie * 100 * Marketkapitalisierung = Anzahl Anteilsscheine * Aktienkurs -* Kurs-Gewinn-Verhältnis (KGV) = Aktienkurs / Gewinn pro Aktie +* Kurs-Gewinn-Verhältnis (KGV) = Aktienkurs / Gewinn pro Aktie * Kurs-Umsatz-Verhältnis (KUV) = Marktkapitalisierung / Umsatz * Kurs-Gewinn-Wachstumsverhältnis (PEG) = KGV / erwarteter Gewinnwachstum im kommenden Geschäftsjahr - ## Mögliche Kennzahlen zur Unternehmensbewertung + *Handbuch Aktien- und Unternehmensbewertung - Peter Seppelfricke* ### Erfolgskennzahlen + * Umsatz * Gewinn bzw. Jahresüberschuss * Gewinn vor Steuern (EBT) -* Gewinn vor Steuern und Zinsen (EBIT/Betriebsergebnis): Bei Gesamtkostenverfahren Summe 1-8, bei Umsatzkostenverfahren Summe 1-7 +* Gewinn vor Steuern und Zinsen (EBIT/Betriebsergebnis): Bei Gesamtkostenverfahren Summe 1-8, bei Umsatzkostenverfahren + Summe 1-7 ### Finanzkennzahlen + * Eigenkapitalquote = Eigenkapital / Gesamtkapital * 100 * Fremdkapitalquote = Fremdkapital / Gesamtkapital * 100 * Verschuldungsgrad = Fremdkapital / Eigenkapital * 100 ### Rentabilitätskennzahlen + * Eigenkapitalrentabilität = Jahresüberschuss / Eigenkapital * 100 * Return on Investment (ROI) = Gewinn / Gesamtkapital * Umsatzrentabilität = Gewinn / Umsatz * 100 ### _Nichtfinanzielle Kennzahlen_ + * _CO2-Emissionen_ * _Unfallrate_ +## Gewünschte Kennzahlen -## Gewünschte Kennzahlen *E-Mail vom 13.04.2023* + * Umsatz * EBIT * EBIT Marge @@ -78,28 +87,40 @@ Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein * Umschlaghäufigkeit des Gesamtkapitals (Umsatz / Bilanzsumme) ## Kurzdefinitionen + ### Umsatz (Erlös) + *https://www.lexoffice.de/lexikon/umsatz/* + * Wert aller Produkte und Dienstleistungen, die in einem bestimmten Zeitraum abgesetzt wurden * Muss in der GuV ausgewiesen werden -* Berechnung: Bruttoumsatz = Verkaufspreis (pro Stück) x abgesetzte Menge, Nettoumsatz = Bruttoumsatz - Erlösschmälerungen (z.B. Rabatte, Boni, Skonti) - Umsatzsteuer +* Berechnung: Bruttoumsatz = Verkaufspreis (pro Stück) x abgesetzte Menge, Nettoumsatz = Bruttoumsatz - + Erlösschmälerungen (z.B. Rabatte, Boni, Skonti) - Umsatzsteuer ### EBIT (Earnings Before Interest and Taxes/Gewinn vor Zinsen und Steuern/Betriebsergebnis/Operativer Gewinn) + *https://www.bwl-lexikon.de/wiki/ebit/* + * Kennzahl, die den Unternehmensgewinn angibt, der aus der gewöhnlichen Geschäftstätigkeit entsteht * Stellt das operative Ergebnis eines Unternehmens dar * Gibt Auskunft über die Effizienz und die Ertragskraft eines Unternehmens -* Berechnung: Jahresüberschuss/-fehlbetrag + Steueraufwand - Steuerertrag + außerordentlicher Aufwand - außerordentlicher Ertrag + Finanzaufwand - Finanzertrag = EBIT +* Berechnung: Jahresüberschuss/-fehlbetrag + Steueraufwand - Steuerertrag + außerordentlicher Aufwand - + außerordentlicher Ertrag + Finanzaufwand - Finanzertrag = EBIT ### EBIT-Marge + *https://www.bwl-lexikon.de/wiki/ebit-marge/* -* Eignet sich zum Vergleich von verschiedenen Unternehmen, zur Messung der operativen Veränderung und gibt Rückschlüsse auf die zukünftige Rentabilität + +* Eignet sich zum Vergleich von verschiedenen Unternehmen, zur Messung der operativen Veränderung und gibt Rückschlüsse + auf die zukünftige Rentabilität * Verhältnis von EBIT und Umsatz * Eine EBIT-Marge in Höhe von 10% und mehr ist als positiv zu bewerten * Berechnung: EBIT-Marge = EBIT / Umsatz ### Bilanzsumme (Gesamtvermögen/Gesamtkapital) + *https://www.bwl-lexikon.de/wiki/bilanzsumme/* + * Summe des Vermögens bzw. der Aktiva und des Kapitals bzw. der Passiva eines Unternehmens * Kriterium für die Größe von Kapitalgesellschaften * Aktiva = Anlagevermögen + Umlaufvermögen @@ -107,7 +128,9 @@ Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein * Liefert Anhaltspunkte dafür, ob und wie schnell ein Unternehmen wächst ### Eigenkapitalquote + *https://www.bwl-lexikon.de/wiki/eigenkapitalquote/* + * Informiert über die Kapitalstruktur eines Unternehmens * Geht aus der Bilanz eines Unternehmens vor * Je größer der Abstand zwischen eigenen und fremden Mittel, umso freier kann die Unternehmensleitung agieren @@ -115,21 +138,28 @@ Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein * Berechnung: Eigenkapital / Gesamtkapital ### Fremdkapitalquote + *https://www.bwl-lexikon.de/wiki/fremdkapitalquote/* + * Anteil des Fremdkapitals am gesamten Kapital * Anzeichen für die Zahlungsfähigkeit eines Unternehmens * Je höher die Quote, desto abhängiger ist das Unternehmen von Fremdkapitalgebern, die Kreditwürdigkeit sinkt * Berechnung: Fremdkapital / Gesamtkapital ### Verschuldungsgrad + *https://www.bwl-lexikon.de/wiki/verschuldungsgrad/* + * Informiert über die wirtschaftliche Stabilität eines Unternehmens -* Bei einem hohen Verschuldungsgrad wird mehr Fremdkapital in einem Unternehmen eingesetzt, die Gefahr der Insolvenz steigt +* Bei einem hohen Verschuldungsgrad wird mehr Fremdkapital in einem Unternehmen eingesetzt, die Gefahr der Insolvenz + steigt * Bei einem niedrigen Verschuldungsgrad ist die Eigenkapitalfinanzierung höher * Berechnung: Fremdkapital / Eigenkapital ### Eigenkapitalrentabilität (Return on Equity ROE) + *https://www.bwl-lexikon.de/wiki/eigenkapitalrentabilitaet/* + * Informiert über die Wirtschaftlichkeit des Unternehmens und die Sinnhaftigkeit des Kapitaleinsatzes * Misst die Ertragskraft des Unternehmens * Gewünschte Höhe der Eigenkapitalrentabilität differiert je nach Branche @@ -138,14 +168,19 @@ Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein * Berechnung: Gewinn bzw. Jahresüberschuss / Eigenkapital ### Gesamtkapitalumschlag (Kapitalumschlag/Umschlagshäufigkeit) + *https://www.bwl-lexikon.de/wiki/kapitalumschlag/* + * Verhältnis vom Umsatz zum Eigen- oder Gesamtkapital * Legt fest, wie viel Umsatz mit dem vorhandenen Kapital eines Unternehmens erwirtschaftet werden kann -* Gibt an, wie oft das eingesetzte Kapital durch die Umsatzerlöse zurück in das Unternehmen gelangt ist (desto häufiger, desto besser) +* Gibt an, wie oft das eingesetzte Kapital durch die Umsatzerlöse zurück in das Unternehmen gelangt ist (desto häufiger, + desto besser) * Berechnung: Umsatz / Bilanzsumme bzw. Gesamtkapital ### Umsatzrentabilität (Umsatzrendite/Umsatzmarge/Nettomarge) + *https://www.bwl-lexikon.de/wiki/umsatzrentabilitaet/* + * Verhältnis von Gewinn und Umsatz * Betrag, den ein Unternehme pro Euro Umsatz erwirtschaftet * Eine steigende Umsatzrendite deutet darauf hin, dass die Produktivität des Unternehmens steigt @@ -154,14 +189,18 @@ Im Fall von realen Personen könnte die eindeutige Identifikation schwierig sein * Berechnung: Gewinn / Umsatz ### Gesamtkapitalrentabilität (Return on Investment ROI, Kapitalrendite) + *https://www.bwl-lexikon.de/wiki/gesamtkapitalrentabilitaet/* + * Relation zwischen dem investierten Kapital und dem Gewinn * Beurteilungsmaßstad für die Rentabilität * Positiver ROI ist für ein Unternehmen vorteilhaft * Berechnung: Umsatzrentabilität x Kapitalumschlag # Fazit -Insgesamt sollen folgende Größen bzw. Kennzahlen betrachtet werden: + +Insgesamt sollen folgende Größen bzw. Kennzahlen betrachtet werden: + * Unternehmensgröße * Umsatz * EBIT @@ -175,8 +214,8 @@ Insgesamt sollen folgende Größen bzw. Kennzahlen betrachtet werden: * Gesamtkapitalrentabilität * Gesamtkapitalumschlag - Dazu werden folgende Daten benötigt: + * Umsatz * Bilanzsumme * EBIT @@ -186,5 +225,8 @@ Dazu werden folgende Daten benötigt: * Durchschnittliche Mitarbeiterzahl Vergleichsmöglichkeiten: -* Zeitvergleich: Vergleich der ermittelten Kennzahlen in verschiedenen Perioden, mit Hilfe von Zeitvergleichen über längere Zeiträume lassen sich Trends oder Zyklen erkennen -* Betriebsvergleich: Gegenüberstellung der Kennzahlen von Unternehmen der gleichen Branche oder Vergleich der Werte eines Unternehmens mit dem Branchendurchschnitt + +* Zeitvergleich: Vergleich der ermittelten Kennzahlen in verschiedenen Perioden, mit Hilfe von Zeitvergleichen über + längere Zeiträume lassen sich Trends oder Zyklen erkennen +* Betriebsvergleich: Gegenüberstellung der Kennzahlen von Unternehmen der gleichen Branche oder Vergleich der Werte + eines Unternehmens mit dem Branchendurchschnitt diff --git a/documentations/research/news_apis.md b/documentations/research/news_apis.md index dcc86e0..8ad3469 100644 --- a/documentations/research/news_apis.md +++ b/documentations/research/news_apis.md @@ -3,24 +3,27 @@ ## **Twitter API v2** ### **Access Levels** -**Free:** + +**Free:** + - 1,500 Tweets per months - 1 AppID - Login with Twitter **Basic:** + - 100 per month **Enterprise:** + - Monthly subscribtion tiers Postman Besipiele: https://developer.twitter.com/en/docs/tutorials/postman-getting-started Getting started: https://github.com/twitterdev - - ## **NewsAPI** + - Developer ist kostenlos - 24 Stunden verspätet sind die Artikel erreichabr - Bis zu einem Monat alte Artikel abrufbar @@ -28,47 +31,49 @@ Getting started: https://github.com/twitterdev - CORS geht nur für local host - Hat extra einen Punkt für deutsche Nachrichten: https://newsapi.org/s/germany-news-api - Benötigt einen Account um einen API Key zu generieren. Doku: https://newsapi.org/docs/get-started **Hinweis**: *Bietet die Möglichkeit nach Artikel mit einem bestimmten Wort zu suchen* ## **Bloomberg API** + - Link: https://www.bloomberg.com/professional/support/api-library/ - generell kostenlos, bei starker Nutzung muss ein Preis angefragt werden - sehr gut für Marktanalysen geeignet - ## **New York Times API** + - die ersten 1000 Anfragen pro Tag sind kostenlos - 11 verschiedene APIs - ## **PressePortal** -Bietet eine API zur DPA Gruppe an. Eher schlecht beschrieben und der API-Key muss via Email beantragt werden, bietet aber potentiell Zugriff auf deutsche Nachrichten. + +Bietet eine API zur DPA Gruppe an. Eher schlecht beschrieben und der API-Key muss via E-Mail beantragt werden, bietet +aber potenziell Zugriff auf deutsche Nachrichten. Demo: https://api.presseportal.de/v2/demo/index.htx?mod=section_all&newsroom=&office=&city=&keyword=&topic=&police_officetype=&police_federalstate=&media=dokument&limit=&language=de&companyinfo=6344 API-Key Anfragen: https://api.presseportal.de/ - ## **Tagesschau API 2.0** + https://tagesschau.api.bund.dev/ ## **Yahoo finance API** + https://financeapi.net/ ## **Google News API** + - deprecated - kostenlos - gut dokumentiert - ## **Sonstiges** -Bing News API, ESPN, Guardian API, BBC News API Yahoo News API und Financial Times fallen raus, da diese immer mit kosten verbunden sind oder sich nur mit Sport oder Kommentare befassen. -- "Die Zeit" hatte mal eine API die abgeschaltet wurde. +Bing News API, ESPN, Guardian API, BBC News API Yahoo News API und Financial Times fallen raus, da diese immer mit +kosten verbunden sind oder sich nur mit Sport oder Kommentare befassen. - --> RSS Feeds Irgendwie abgreifen \ No newline at end of file +- "Die Zeit" hatte mal eine API, welche aber abgeschaltet wurde. +- RSS-Feeds irgendwie abgreifen diff --git a/documentations/research/resarch-central.md b/documentations/research/resarch-central.md index 14f1753..35b7ecb 100644 --- a/documentations/research/resarch-central.md +++ b/documentations/research/resarch-central.md @@ -1,6 +1,5 @@ # Research Central - ## Sentiment Analysis ### FinBert @@ -9,4 +8,5 @@ FinBert is a specialised sentiment Analysis for Financial Data. Sadly it isn't a very good model, and it does not work at all for texts in german. Experiments can be found here: + * [FinBert Jupyter](../../Jupyter/AI-models/"Sentiment Analysis"/FinBert.ipynb) diff --git a/documentations/seminararbeiten/Daten_Extraktion/Abstract_Data_Extraction.md b/documentations/seminararbeiten/Daten_Extraktion/Abstract_Data_Extraction.md index 1a7cebb..81397fc 100644 --- a/documentations/seminararbeiten/Daten_Extraktion/Abstract_Data_Extraction.md +++ b/documentations/seminararbeiten/Daten_Extraktion/Abstract_Data_Extraction.md @@ -7,29 +7,40 @@ date: "2023-05-06" # Abstract: Automatisierte Daten Extraktion aus Internetquellen als Grundlage für die Analyse von Kapitalgesellschaften ## Gliederung + 1. Einleitung (Zielsetzung/Problemstellung, Vorgehen) 2. Web Scraping/Crawling - 1. Definition und Theorie - 2. Technologien - 3. Umsetzung -3. RSS Feeds - 1. Definition und Theorie - 2. Technologien - 3. Umsetzung + 2.1. Definition und Theorie + 2.2. Technologien + 2.3. Umsetzung +3. RSS-Feeds + 3.1. Definition und Theorie + 3.2. Technologien + 3.3. Umsetzung 4. APIs - 1. Definition und Theorie - 2. Technologien - 3. Umsetzung + 4.1. Definition und Theorie + 4.2. Technologien + 4.3. Umsetzung 5. Rechtliche Rahmenbedingungen 6. Vergleich der Lösungsansätze 7. Zusammenfassung ## Inhalt -In Zeiten von Big Data und AI stellen Daten und ihre Verfügbarkeit zunehmend eines der wichtigsten Wirtschaftsgüter dar. Als solches können sie auch eingesetzt werden, um Kapitalgesellschaften (eine Subklasse von Unternehmen) anhand verschiedener Kennzahlen wie der Mitarbeiterzahl oder dem Jahresgewinn zu analysieren. Obwohl solche Daten zu Genüge in Zeitungsartikeln, Newslettern oder dedizierten Aktienanalysen zu finden sind, so gestaltet sich eine automatisierte Extraktion dieser Daten aufgrund verschiedener Formate sowie weiterer Restriktionen schwierig. +In Zeiten von Big Data und AI stellen Daten und ihre Verfügbarkeit zunehmend eines der wichtigsten Wirtschaftsgüter dar. +Als solches können sie auch eingesetzt werden, um Kapitalgesellschaften (eine Subklasse von Unternehmen) anhand +verschiedener Kennzahlen wie der Mitarbeiterzahl oder dem Jahresgewinn zu analysieren. Obwohl solche Daten zu Genüge in +Zeitungsartikeln, Newslettern oder dedizierten Aktienanalysen zu finden sind, so gestaltet sich eine automatisierte +Extraktion dieser Daten aufgrund verschiedener Formate sowie weiterer Restriktionen schwierig. -Daher sollen im Rahmen dieser Seminararbeit verschiedene Wege betrachtet werden, die eben diese Daten erheben und zur Verfügung stellen können. Zu den nennenswerten Quellen gehören: Der Bundesanzeiger, RSS Feeds, Nachrichten APIs. Ziel ist es, aus diesen Quellen wertvolle Informationen bezogen auf den wirtschaftlichen Erfolg einer Kapitalgesellschaft sowie aktueller Nachrichten zu extrahieren und in ein einheitliches Format zu überführen. +Daher sollen im Rahmen dieser Seminararbeit verschiedene Wege betrachtet werden, die eben diese Daten erheben und zur +Verfügung stellen können. Zu den nennenswerten Quellen gehören: Der Bundesanzeiger, RSS-Feeds, Nachrichten APIs. Ziel +ist es, aus diesen Quellen wertvolle Informationen bezogen auf den wirtschaftlichen Erfolg einer Kapitalgesellschaft +sowie aktueller Nachrichten zu extrahieren und in ein einheitliches Format zu überführen. -Neben des technischen Einsatzes von Web Scraping/Crawling, um Informationen aus Webseiten zu gewinnen, sowie des Abfragens verfügbarer APIs soll auch der rechltiche Aspekt dieser Vorgehens Berücksichtigung finden, um die Rechtmäßigkeit zu bewerten. +Neben des technischen Einsatzes von Web Scraping/Crawling, um Informationen aus Webseiten zu gewinnen, sowie des +Abfragens verfügbarer APIs soll auch der rechtliche Aspekt dieser Vorgehens Berücksichtigung finden, um die +Rechtmäßigkeit zu bewerten. -Abschließend wird der Einsatz der verschiedenen Technologien an den Faktoren: Flexibilität, Simplizität, Verfügbarkeit und Rechtmäßigkeit, ein Fazit gezogen sowie ein Ausblick des weiteren Einsatzes gegeben. +Abschließend wird der Einsatz der verschiedenen Technologien an den Faktoren: Flexibilität, Simplizität, Verfügbarkeit +und Rechtmäßigkeit, ein Fazit gezogen sowie ein Ausblick des weiteren Einsatzes gegeben. diff --git a/documentations/seminararbeiten/Datenspeicherung/00_Datenspeicherung.md b/documentations/seminararbeiten/Datenspeicherung/00_Datenspeicherung.md index 6cddc32..1f3ebef 100644 --- a/documentations/seminararbeiten/Datenspeicherung/00_Datenspeicherung.md +++ b/documentations/seminararbeiten/Datenspeicherung/00_Datenspeicherung.md @@ -3,71 +3,116 @@
# Datenspeicherung + ## Inhaltsverzeichnis - [Datenspeicherung](#datenspeicherung) - - [Inhaltsverzeichnis](#inhaltsverzeichnis) - - [Motivation: Warum speichern wird Daten?](#motivation-warum-speichern-wird-daten) - - [1. Allgemeine Anforderungen an Datenbank](#1-allgemeine-anforderungen-an-datenbank) - - [2. Datenarten](#2-datenarten) - - [2.1 Welche Daten erwarten wir im Projekt?](#21-welche-daten-erwarten-wir-im-projekt) - - [2.2 strukturierte Daten](#22-strukturierte-daten) - - [2.3 unstrukturierte Daten](#23-unstrukturierte-daten) - - [3. Arten von Datenbanken](#3-arten-von-datenbanken) - - [3.1 Relationale Datenbank](#31-relationale-datenbank) - - [3.1.1 Anlegen von Tabellen](#311-anlegen-von-tabellen) - - [3.1.2 SQL - Abfrage von relationalen Datenbanken](#312-sql---abfrage-von-relationalen-datenbanken) - - [3.2 Graphdatenbank](#32-graphdatenbank) - - [3.2.1 Erstellung eines Datensatzes](#321-erstellung-eines-datensatzes) - - [3.2.2 Cypher - Abfrage von Graphdatenbanken](#322-cypher---abfrage-von-graphdatenbanken) - - [3.3 Zeitseriendatenbank](#33-zeitseriendatenbank) - - [3.3.1 Erstellung eines Datensatzes](#331-erstellung-eines-datensatzes) - - [3.3.2 FluxQuery](#332-fluxquery) - - [3.4 Dokumenten Datenbank ](#34-dokumenten-datenbank-) - - [3.4.1 Erstellen einer Collection / Ablegen von Dokumenten](#341-erstellen-einer-collection--ablegen-von-dokumenten) - - [3.5 Aufbau einer Datenbank](#35-aufbau-einer-datenbank) - - [4. Datenbanken Transparenzregister](#4-datenbanken-transparenzregister) - - [4.1 Production DB - relationales Datenbankmodell](#41-production-db---relationales-datenbankmodell) - - [4.2 Staging DB](#42-staging-db) - - [4.3 SQL Alchemy](#43-sql-alchemy) - - [5. Proof of Concept](#5-proof-of-concept) - - [5.1 Docker](#51-docker) - - [5.2 PG Admin](#52-pg-admin) - - [5.3 Erstellen von Mock Daten](#53-erstellen-von-mock-daten) - - [5.4 Anlegen der relationalen Tabellen](#54-anlegen-der-relationalen-tabellen) - - [5.5 Abfragen der Datenbank](#55-abfragen-der-datenbank) - - [6. Zusammenfassung](#6-zusammenfassung) - - [Quellen](#quellen) + - [Inhaltsverzeichnis](#inhaltsverzeichnis) + - [Motivation: Warum speichern wird Daten?](#motivation-warum-speichern-wird-daten) + - [1. Allgemeine Anforderungen an Datenbank](#1-allgemeine-anforderungen-an-datenbank) + - [2. Datenarten](#2-datenarten) + - [2.1 Welche Daten erwarten wir im Projekt?](#21-welche-daten-erwarten-wir-im-projekt) + - [2.2 strukturierte Daten](#22-strukturierte-daten) + - [2.3 unstrukturierte Daten](#23-unstrukturierte-daten) + - [3. Arten von Datenbanken](#3-arten-von-datenbanken) + - [3.1 Relationale Datenbank](#31-relationale-datenbank) + - [3.1.1 Anlegen von Tabellen](#311-anlegen-von-tabellen) + - [3.1.2 SQL - Abfrage von relationalen Datenbanken](#312-sql---abfrage-von-relationalen-datenbanken) + - [3.2 Graphdatenbank](#32-graphdatenbank) + - [3.2.1 Erstellung eines Datensatzes](#321-erstellung-eines-datensatzes) + - [3.2.2 Cypher - Abfrage von Graphdatenbanken](#322-cypher---abfrage-von-graphdatenbanken) + - [3.3 Zeitseriendatenbank](#33-zeitseriendatenbank) + - [3.3.1 Erstellung eines Datensatzes](#331-erstellung-eines-datensatzes) + - [3.3.2 FluxQuery](#332-fluxquery) + - [3.4 Dokumenten Datenbank ](#34-dokumenten-datenbank-) + - [3.4.1 Erstellen einer Collection / Ablegen von Dokumenten](#341-erstellen-einer-collection--ablegen-von-dokumenten) + - [3.5 Aufbau einer Datenbank](#35-aufbau-einer-datenbank) + - [4. Datenbanken Transparenzregister](#4-datenbanken-transparenzregister) + - [4.1 Production DB - relationales Datenbankmodell](#41-production-db---relationales-datenbankmodell) + - [4.2 Staging DB](#42-staging-db) + - [4.3 SQL Alchemy](#43-sql-alchemy) + - [5. Proof of Concept](#5-proof-of-concept) + - [5.1 Docker](#51-docker) + - [5.2 PG Admin](#52-pg-admin) + - [5.3 Erstellen von Mock Daten](#53-erstellen-von-mock-daten) + - [5.4 Anlegen der relationalen Tabellen](#54-anlegen-der-relationalen-tabellen) + - [5.5 Abfragen der Datenbank](#55-abfragen-der-datenbank) + - [6. Zusammenfassung](#6-zusammenfassung) + - [Quellen](#quellen)
- ## 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. +Für die Speicherung von Daten gibt es verschiedene Motivationen: + +- **Sammlung:** Zur Aufbewahrung von Wissen und Informationen über Objekte, Ereignisse oder Prozesse werden Daten + gespeichert. +- **Historisierung:** Durch die Speicherung von Daten in einem zeitlichen Zusammenhang, wird eine Historie erstellt, mit + welcher Muster, Trends oder Zusammenhänge erkannt werden können. Historische Daten helfen ausserdem bei der + Entscheidungsfindung. +- **Bewertung:** Mit gespeicherten Daten können Systeme, Produkte und Prozesse nachvollzogen, bewertet und verbessert + werden. + +Im Projekt Transparenzregister ist die Datenspeicherung eine Kernkomponente, da die gesammelten Informationen die +Grundlage für Analysen darstellen. \ +Mit geeigneten Pipelines werden aus diesen Daten Erkenntnisse extrahiert, um z.B. Verflechtungen zwischen Personen und +Unternehmen oder den wirtschaftlichen Trend eines Unternehmens visualisieren und bewerten zu können. ## 1. Allgemeine Anforderungen an Datenbank -- **1.1 Speicherung/Integrität**: Das verwendete System muss Daten, wie Unternehmenskennzahlen, Stammdaten und Verflechtungen speichern. Die Daten müssen korrekt und konsistent gespeichert werden. Konsistent bedeutet in einem gültigen und widerspruchsfreien Zustand und die Transaktionen sollen den ACID-Eigenschaften entsprechen. - - **Atomarity:** Eine Transaktion wird atomar betrachte, d.h. es ist die kleinste unteilbare Einheit, wodurch eine Transaktion entweder vollständig durchgeführt und übernommen wird (Commit) oder bei einem Fehler rückgängig gemacht wird (Rollback). - - **Consistency:** Konsistenz bedeutet, dass eine Transaktion den Datenbankzustand von einem gültigen in einen anderen gültihgen Zustand überführt. Sollte eine Transaktion eine Konsitenzverletzung verursachen, wird diese abgebrochen und die Änderungen zurückgesetzt. - - **Isolation:** Isolation sorgt dafür, dass alle Transaktion unabhängig voneinander ausgeführt werden, damit sich diese bei der Ausführung nicht gegenseitig beeinflussen. - - **Durability:** Dauerhaftigkeit bedeutet, dass die Ergebnisse einer Transaktion dauerhaft in der Datenbank gespeichert werden und auch nach einem Systemneustart oder Systemfehler erhalten bleiben. -- **1.2 Skalierbarkeit:** Das System soll skalierbar sein, um zukünftige Daten weiterhin zu speichern und weitere Unternehmen hinzuzufügen. Durch Hinzufügen von Ressourcen kann das System an steigende Datenmengen und Benutzeranforderungen angepasst werden. Man spricht von horizontaler Skalierung, da die Last auf mehrere Datenbankserver verteilt wird. -- **1.3 Sicherheit:** Die Datenbank muss Mechanismen bereitstellen, um die Daten vor unbefugtem Zugriff zu schützen. - - **Authentifizierung:** Überprüfung der Identität eines Benutzers, durch Benutzername und Passwort. Meist wird eine Zwei-Faktor-Authentifizierung verwendet, um das Sicherheitslevel zu erhöhen. - - **Autorisierung:** Der authentifizierte Benutzer erhält bei der Autorisierung Zugriffsrechte und Ressourcen, welche auf seiner Benutzerrolle basieren. Ein Benutzer mit Administratorrechten, erhält Zugriff auf alle Systemressourcen, wohingegen ein normaler Benutzer nur beschränkten Zugriff erhält. - - **Verschlüsselung:** Durch Verschlüsselung werden Daten in ein nicht interpretierbaren Code umgewandelt, um den Inhalt vor unbefugtem Zugriff zu schützen. Dafür wird ein Algorithmus verwendet, welcher einen Schlüssel generiert und die Daten mit diesem verschlüsselt. Um die Daten wieder lesen zu können, müssen diese mit dem Schlüssel dechiffriert werden. -- **1.4 Datensicherung- und Wiederherstellung:** Die Datenbank muss Funktionen zur Sicherung und Wiederherstellung unterstützen. Im Falle eines Ausfalls oder Fehlers muss sichergestellt sein, dass Mechanismen die Daten schützen und wiederherstellen. -Die meisten Daten in einer Datenbank ändern sich nur langsam, manche allerdings schnell. Je nach Anwendungsfall muss eine geeignete Sicherungsstrategie ausgewählt werden, um nur die Daten zu sichern, die sich tatsächlich ändern. -Jedes Datenbankmanagementsystem bietet unterschiedliche Mechanismen zur Datensicherung und Wiederherstellung, dessen Möglichkeiten nach Auswahl eines Systems - - **vollständiges Backup:** Das vollständige Backup ist eine komplette Kopie der Datenbank inkl. aller Daten, Indizes, Tabellen und Metadaten. Es benötigt viel Speicherplatz und Zeit zur Erzeugung der Sicherung und auch zur Wiederherstellung. - - **inkrementelles Backup:** Ein inkrementelles Backup sichert nur die Änderungen seit dem letzten vollständigem bzw. inkrementellen Backup. Durch den verringerten Datenbestand ist es deutlich schneller und datensparsamer, als das vollständige Backup. Zur Wiederherstellung wird das letzte vollständige und alle inkrementellen Backups benötigt. Allerdings entsteht eine Abhängigkeitskette, da jedes Backup seine Vorgänger zur Wiederherstellung benötigt. - - **differentielles Backup:** Beim differentiellen Backup werden alle Änderungen seit dem letzten vollständigem Backup gesichert. D.h. je weiter die letzte vollständige Sicherung zurückliegt, desto größer und langsamer wird das Backup. Zur Wiederherstellung werden das letzte vollständige und differentielle Backup benötigt. + +- **1.1 Speicherung/Integrität**: Das verwendete System muss Daten, wie Unternehmenskennzahlen, Stammdaten und + Verflechtungen speichern. Die Daten müssen korrekt und konsistent gespeichert werden. Konsistent bedeutet in einem + gültigen und widerspruchsfreien Zustand und die Transaktionen sollen den ACID-Eigenschaften entsprechen. + - **Atomarity:** Eine Transaktion wird atomar betrachte, d.h. es ist die kleinste unteilbare Einheit, wodurch eine + Transaktion entweder vollständig durchgeführt und übernommen wird (Commit) oder bei einem Fehler rückgängig + gemacht + wird (Rollback). + - **Consistency:** Konsistenz bedeutet, dass eine Transaktion den Datenbankzustand von einem gültigen in einen + anderen + gültihgen Zustand überführt. Sollte eine Transaktion eine Konsitenzverletzung verursachen, wird diese abgebrochen + und die Änderungen zurückgesetzt. + - **Isolation:** Isolation sorgt dafür, dass alle Transaktion unabhängig voneinander ausgeführt werden, damit sich + diese bei der Ausführung nicht gegenseitig beeinflussen. + - **Durability:** Dauerhaftigkeit bedeutet, dass die Ergebnisse einer Transaktion dauerhaft in der Datenbank + gespeichert werden und auch nach einem Systemneustart oder Systemfehler erhalten bleiben. +- **1.2 Skalierbarkeit:** Das System soll skalierbar sein, um zukünftige Daten weiterhin zu speichern und weitere + Unternehmen hinzuzufügen. Durch Hinzufügen von Ressourcen kann das System an steigende Datenmengen und + Benutzeranforderungen angepasst werden. Man spricht von horizontaler Skalierung, da die Last auf mehrere + Datenbankserver verteilt wird. +- **1.3 Sicherheit:** Die Datenbank muss Mechanismen bereitstellen, um die Daten vor unbefugtem Zugriff zu schützen. + - **Authentifizierung:** Überprüfung der Identität eines Benutzers, durch Benutzername und Passwort. Meist wird eine + Zwei-Faktor-Authentifizierung verwendet, um das Sicherheitslevel zu erhöhen. + - **Autorisierung:** Der authentifizierte Benutzer erhält bei der Autorisierung Zugriffsrechte und Ressourcen, + welche + auf seiner Benutzerrolle basieren. Ein Benutzer mit Administratorrechten, erhält Zugriff auf alle + Systemressourcen, + wohingegen ein normaler Benutzer nur beschränkten Zugriff erhält. + - **Verschlüsselung:** Durch Verschlüsselung werden Daten in ein nicht interpretierbaren Code umgewandelt, um den + Inhalt vor unbefugtem Zugriff zu schützen. Dafür wird ein Algorithmus verwendet, welcher einen Schlüssel generiert + und die Daten mit diesem verschlüsselt. Um die Daten wieder lesen zu können, müssen diese mit dem Schlüssel + dechiffriert werden. +- **1.4 Datensicherung- und Wiederherstellung:** Die Datenbank muss Funktionen zur Sicherung und Wiederherstellung + unterstützen. Im Falle eines Ausfalls oder Fehlers muss sichergestellt sein, dass Mechanismen die Daten schützen und + wiederherstellen. + Die meisten Daten in einer Datenbank ändern sich nur langsam, manche allerdings schnell. Je nach Anwendungsfall muss + eine geeignete Sicherungsstrategie ausgewählt werden, um nur die Daten zu sichern, die sich tatsächlich ändern. + Jedes Datenbankmanagementsystem bietet unterschiedliche Mechanismen zur Datensicherung und Wiederherstellung, dessen + Möglichkeiten nach Auswahl eines Systems + - **vollständiges Backup:** Das vollständige Backup ist eine komplette Kopie der Datenbank inkl. aller Daten, + Indizes, + Tabellen und Metadaten. Es benötigt viel Speicherplatz und Zeit zur Erzeugung der Sicherung und auch zur + Wiederherstellung. + - **inkrementelles Backup:** Ein inkrementelles Backup sichert nur die Änderungen seit dem letzten vollständigem + bzw. + inkrementellen Backup. Durch den verringerten Datenbestand ist es deutlich schneller und datensparsamer, als das + vollständige Backup. Zur Wiederherstellung wird das letzte vollständige und alle inkrementellen Backups benötigt. + Allerdings entsteht eine Abhängigkeitskette, da jedes Backup seine Vorgänger zur Wiederherstellung benötigt. + - **differentielles Backup:** Beim differentiellen Backup werden alle Änderungen seit dem letzten vollständigem + Backup + gesichert. D.h. je weiter die letzte vollständige Sicherung zurückliegt, desto größer und langsamer wird das + Backup. + Zur Wiederherstellung werden das letzte vollständige und differentielle Backup benötigt. **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:* +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.$ + - Anforderungen + - min. vierfache Backupkapazität → 2 TB + - Backupdauer vollständig: \ + USB 2.0:$\frac {500GB}{\frac{60MB/s}{1024}} = 8533 sec. \approx 142Min. \approx 2,37 Std.$ \ + USB 3.0:$\frac {500GB}{\frac{625MB/s}{1024}} = 820 sec. \approx 13,6Min. \approx 0,23 Std.$ \ + VDSL 100:$\frac {500GB}{\frac{5MB/s}{1024}} = 102400 sec. \approx 1706Min. \approx 28,4 Std.$ \ + Glasfaser:$\frac {500GB}{\frac{62,5MB/s}{1024}} = 8192 sec. \approx 136,5Min. \approx 2,3 Std.$ -- **1.5 Leistung:** Die Performanceanforderungen an die Datenbank ergibt sich aus verschiedenen Merkmalen. Diese können kombiniert gestellt werden und sind abhängig von den Anforderungen an das System. Eine Analyse der Anwendungsfälle ist notwendig, um die Anforderungen zu spezifizieren. - - **Latenz:** Die Datenbank soll Anfragen effizient und in einer akzeptablen Antwortzeit verarbeiten. Typische Datenbankapplikationen, wie z.B. ein Webshop benötigen viele einzelne Zugriffe, wofür jedes Mal ein Kommunikationsprotokoll angewendet wird. Durch viele kleine Datenbankzugriffe wird die Applikation verlangsamt, da auf die Netzwerkkommunikation gewartet wird. Für das Benutzererlebnis eines Webshops ist die Latenz ein wichtiges Merkmal. - - **Durchsatz:** Ist eine Metrik für die Anzahl an Transaktionen pro Zeiteinheit. Der Durchsatz ist wichtig bei großen Benutzeraufkommen in einem Webshop. - - **Verfügbarkeit:** Eine hohe Verfügbarkeit, also Erreichbarkeit der Datenbank, wird durch Redundanz (mehrfaches Vorhandensein) und Wiederherstellungsmechanismen gewährleistet, damit Daten koninuierlich verfügbar sind. - - **Wartbarkeit:** Eine einfach zu wartende Datenbank muss Funktionen zur Überwachung, Diagnose, Wartung, Datensicherung und Wiederherstellung bereitstellen. Durch diese automatisierten Pipelines können andere Eigenschaften, wie z.B. die Verfügbarkeit negativ beeinflusst werden, weil Prozesse die Datenbank blockieren. -- **1.6 Integration:** Die Datenbank muss Schnittstellen bereitstellen, um die gespeicherten Daten für eine Anwendung bzw. Systeme zur Verfügung zu stellen. - - **API:** Das *Application Programming Interface* ist eine definierte Schnittstelle, welche Methoden und Funktionen bereit stellt, um auf die Datenbank zuzugreifen bzw. um diese zu verwalten. - - **REST:** REpresential State Transfer beschreibt eine Schnittstelle, die das http-Protokoll verwendet, wo mit den Methoden GET, POST, PUT, DELETE die Kommunikation realisiert wird. +- **1.5 Leistung:** Die Performanceanforderungen an die Datenbank ergibt sich aus verschiedenen Merkmalen. Diese können + kombiniert gestellt werden und sind abhängig von den Anforderungen an das System. Eine Analyse der Anwendungsfälle ist + notwendig, um die Anforderungen zu spezifizieren. + - **Latenz:** Die Datenbank soll Anfragen effizient und in einer akzeptablen Antwortzeit verarbeiten. Typische + Datenbankapplikationen, wie z.B. ein Webshop benötigen viele einzelne Zugriffe, wofür jedes Mal ein + Kommunikationsprotokoll angewendet wird. Durch viele kleine Datenbankzugriffe wird die Applikation verlangsamt, da + auf die Netzwerkkommunikation gewartet wird. Für das Benutzererlebnis eines Webshops ist die Latenz ein wichtiges + Merkmal. + - **Durchsatz:** Ist eine Metrik für die Anzahl an Transaktionen pro Zeiteinheit. Der Durchsatz ist wichtig bei + großen + Benutzeraufkommen in einem Webshop. + - **Verfügbarkeit:** Eine hohe Verfügbarkeit, also Erreichbarkeit der Datenbank, wird durch Redundanz (mehrfaches + Vorhandensein) und Wiederherstellungsmechanismen gewährleistet, damit Daten koninuierlich verfügbar sind. + - **Wartbarkeit:** Eine einfach zu wartende Datenbank muss Funktionen zur Überwachung, Diagnose, Wartung, + Datensicherung und Wiederherstellung bereitstellen. Durch diese automatisierten Pipelines können andere + Eigenschaften, wie z.B. die Verfügbarkeit negativ beeinflusst werden, weil Prozesse die Datenbank blockieren. +- **1.6 Integration:** Die Datenbank muss Schnittstellen bereitstellen, um die gespeicherten Daten für eine Anwendung + bzw. Systeme zur Verfügung zu stellen. + - **API:** Das *Application Programming Interface* ist eine definierte Schnittstelle, welche Methoden und Funktionen + bereit stellt, um auf die Datenbank zuzugreifen bzw. um diese zu verwalten. + - **REST:** REpresential State Transfer beschreibt eine Schnittstelle, die das http-Protokoll verwendet, wo mit + den + Methoden GET, POST, PUT, DELETE die Kommunikation realisiert wird. - **SOAP:** Simple Object Access Protocol ist eine Schnittstelle, welche auf XML basiert. - - **ODBC:** Open Database Connectivity ist eine standardisierte Schnittstelle zum Austausch zwischen Anwendungen und Datenbanken. - - **JDBC:** Java Database Connectivity - + - **ODBC:** Open Database Connectivity ist eine standardisierte Schnittstelle zum Austausch zwischen Anwendungen + und + Datenbanken. + - **JDBC:** Java Database Connectivity ## 2. Datenarten Zur Beschreibung von Unternehmen, werden verschiedene Datenarten verwendet. -Die folgenden Datenarten sind eine allgemeine Zusammenfassung und sollen das Brainstorming für die projektspezifischen Daten unterstützen. -- **Stammdaten:** Stammdaten beinhalten die grundsätzlichen Eigenschaften und -Informationen von realen Objekten, welche für die periodische Verarbeitung notwendig sind. Ein Stammsatz für Personal besteht z.B. aus einer Personalnummer, dem Mitarbeiternamen, Anschrift und Bankverbindung. \ -Je nach Anwendungsfall bzw. Geschäftsprozess muss der Inhalt definiert werden, wie z.B. bei Unternehmens-, Kunden-, Material- oder Patientenstammdaten. +Die folgenden Datenarten sind eine allgemeine Zusammenfassung und sollen das Brainstorming für die projektspezifischen +Daten unterstützen. -- **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. +- **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. -- **Transaktionsdaten:** Transaktionsdaten beschreiben eine Veränderung des Zustands, wie z.B. eine Kapitalbewegung oder eine Ein-/Auslieferung aus einem Lager. +- **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. -- **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. +- **Transaktionsdaten:** Transaktionsdaten beschreiben eine Veränderung des Zustands, wie z.B. eine Kapitalbewegung oder + eine Ein-/Auslieferung aus einem Lager. -- **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. +- **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 +*Bestandsdaten:* Vorstand, Geschäftsführer, Aufsichtsrat + +### 2.1 Welche Daten erwarten wir im Projekt? -### 2.1 Welche Daten erwarten wir im Projekt? Aus den vorangehenden, allgemeinen Datenarten haben wir Cluster identifiziert, welche im Projekt benötigt werden. -Die Kombination aus den folgend aufgeführten Datenclustern ermöglicht eine ganzheitliche Betrachtung und Bewertung der Unternehmen. +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. +- **Unternehmensstammdaten:** Die Stammdaten beinhalten grundlegende Informationen zu einem Unternehmen, wie z.B. Name, + Anschrift, Gesellschaftsform und Branche. -- **Sentimentdaten:** Die Sentiment- oder Stimmungsdaten beschreiben die Aussenwahrnehmung des Unternehmens hinsichtlich der Mitarbeiterzufriedenheit, Nachhaltigkeit und Umweltfreundlichkeit. -> Mit Sentimentdaten können folgende Fragen beantwortet werden: ->- Welchen Ruf hat das Unternehmen? ->- Wie ist die Aussenwahrnehmung? +- **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 verschiedender Metriken. -- **Verflechtungsdaten/Social Graph:** Die Verbindungen bzw. Beziehungen zu Personen oder Unternehmen wird in den Verflechtungsdaten abgelegt. Beziehungen entstehen, wenn eine Person Geschäftsführer, Vorstand, Aufsichtsratmitglied, Prokurist oder Auditor ist und Unternehmen z.B. gemeinsam arbeiten, beliefert wird oder Anteile an einem anderen Unternehmen besitzt. +- **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? +>- Gibt es strategische Partnerschaften? >- Wie sind die Lieferketten aufgebaut? >- Wie ist die Qualität der Geschäftsbeziehungen? >- Ist das Unternehmen widerstandsfähig aufgestellt? >- Gibt es Zusammenhänge zu Personen? -Die abgebildete Mind Map ist nicht vollständig und bildet nicht den finalen Datenumfang des Projekts ab. Es ist eine Momentaufnahme, bevor das relationale Schema entwickelt und die Implementierung begonnen wurde. - +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. ![Data_Clusters](/documentations/seminararbeiten/Datenspeicherung/images/Data_Cluster.PNG) ### 2.2 strukturierte Daten -Strukturierte Daten liegen in einem definierten Format. Vorab wird ein Schema definiert, um Felder, Datentypen und Reihenfolgen festzulegen und die Daten entsprechend abzulegen. -Diese Art von Daten wird z.B. in relationalen Datenbanken verwendet, wobei jede Zeile einer Tabelle einen Datensatz repräsentiert. Die Beziehungen untereinander sind über die Entitäten definiert. -Das Beispiel unten zeigt ein einfaches Beispiel, wie die Daten für die Klasse *Company* definiert sind. Mit diesem Schema kann die Datenaufbereitung umgesetzt werden. - - +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 --- @@ -175,76 +264,98 @@ classDiagram ``` -|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 | | + +| Vorteile | Nachteile | +|:---------------------------------------------:|:----------------------------------------------------------------:| +| einfach nutzbar, da organisiert | Einschränkung der Verwendungsmöglichkeit durch Schema | +| bei bekannten Schema sind Werkzeuge vorhanden | begrenze Speichermöglichkeit, da starre Schemata vorgegeben sind | +| gut automatisierbar | | ### 2.3 unstrukturierte Daten -Unstrukturierte Daten unterliegen keinem Schema, wie z.B. E-Mails, Textdokumente, Blogs, Chats, Bilder, Videos oder Audiodateien. -- **Textanalyse:** Aus unstrukturierten Texten werden z.B. durch Analyse und Mining Informationen gewonnen, um diese zu extrahieren. Es wird das Vorkommen von bestimmten Wörtern mittels Named Entity Recognition ermittelt oder die Stimmung bzw. das Thema in einem Artikel. -- **Audio-/Videoanalyse:** Bei der Verarbeitung unstrukturierter Audio- oder Videodateien werden Objekte, Gesichter, Stimmen oder Muster erkannt, um diese für Sprachassistenten oder autonome Fahrzeuge nutzbar zu machen. -Eine wichtige Informationsquelle sind unstrukturierte Daten für Explorations- und Analyseaufgaben. Dabei werden Datenquellen wie z.B. E-Mails, RSS-Feeds, Blogs durchsucht, um bestimmte Informationen zu finden oder Zusammenhänge zwischen verschiedenen Quellen hherzustellen. Dies ermöglicht tiefe Einsicht in die Daten zu erhalten und unterstützt die Entscheidungsfindung bei unklaren Sachverhalten und die Entdeckung neuer Erkenntnisse. +Unstrukturierte Daten unterliegen keinem Schema, wie z.B. E-Mails, Textdokumente, Blogs, Chats, Bilder, Videos oder +Audiodateien. -|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 | +- **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 | ## 3. Arten von Datenbanken + ### 3.1 Relationale Datenbank -Eine relationale Datenbank speichert und verwaltet strukturierte Daten. Dabei werden die Daten in Tabellen organisiert, welche aus Zeilen und Spalten bestehen. \ -In den Zeilen der Tabellen sind die Datensätze gespeichert, d.h. jede Zeile repräsentiert einen Datensatz. Durch logisches Verbinden der Tabellen können die Beziehungen zwischen den Daten abgebildet werden. \ + +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. \ +**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| + +| **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. +**Primärschlüssel:** Der Primärschlüssel ist ein eindeutiger Bezeichner für jede einzelne Zeile einer Tabelle und wird +zur Identifikation einer einzelnen Zeile benötigt. Im oberen Beispiel ist die Spalte *ID* der Primärschlüssel. -**Fremdschlüssel:** Ein Fremdschlüssel verweist auf einen Primärschlüssel einer anderen Tabelle, um eine Beziehung zwischen den Tabellen herzustellen. \ -Im Beispiel ist bezieht sich die Spalte *customer_id* auf den Primärschlüssel der Tabelle *Table_Person*. +**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. \ +| **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. | +| **Typ** | **Beschreibung** | +|:-------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 1:1 | Jeder Primärschlüsselwert bezieht sich auf nur einen Datensatz. **Beispiel:** Jede Person hat genau eine Bestellung. | +| 1:n | Der Primärschlüssel ist eindeutig, tritt in der bezogenen Tabelle 0..n mal auf. **Beispiel:** Jede Person kann keine, eine oder mehrere Bestellungen haben. | +| n:n | Jeder Datensatz von beiden Tabellen kann zu beliebig vielen Datensätzen (oder auch zu keinem Datensatz) stehen. Meist wird für diesen Typ eine dritte Tabelle verwendet, welche als Zuordnungs- bzw. Verknüpfungstabelle angelegt wird, da andernfalls keine direkte Verbindung hergestellt werden kann. | https://www.ibm.com/docs/de/control-desk/7.6.1.2?topic=structure-database-relationships #### 3.1.1 Anlegen von Tabellen -Der Umgang von relationalen Datenbanken erfolgt mittels SQL. Folgend ein Beispiel zum Anlegen einer Tabelle mit Attributen. -``` -CREATE TABLE Bildungsstaette ( - ID INT PRIMARY KEY NOT NULL, - Name VARCHAR(255) NOT NULL, +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) + Art VARCHAR(100) ); ``` @@ -254,83 +365,109 @@ Für die Verwaltung und Abfrage wird SQL (Structured Query Language) verwendet. Mit dieser Syntax können Tabellen erstellt, Daten eingefügt, aktualisiert und gelöscht und Daten abgefragt werden. **Anzeige aller Attribute einer Tabelle:** -``` -SELECT * FROM table_name; + +```sql +SELECT * +FROM table_name; ``` **Anzeige definierter Attribute einer Tabelle:** -``` -SELECT column1, column2 FROM table_name; + +```sql +SELECT column1, column2 +FROM table_name; ``` **Gefilterte Anzeige einer Tabelle:** -``` -SELECT * FROM table_name WHERE condition; + +```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; + JOIN table2 t2 ON t1.id = t2.id; ``` ### 3.2 Graphdatenbank + Eine Graphdatenbank basiert auf dem Graphenkonzept. \ Ein Graph besteht aus Knoten und Kanten (Beziehungen), welche die Verbindungen zwischen den Knoten darstellen. \ Die Stärke der Graphdatenbank liegt in der Darstellung von komplexen Beziehungen. -**Knoten:** Jeder Knoten repräsentiert eine Entität bzw. Objekt. Jeder Knoten hat eine eindeutige ID oder Bezeichner, um auf diesen zugreifen zu können. Es können auch Attribute hinterlegt werden, um zusätzliche Informationen zu speichern, wie z.B. Geburtsjahr, Wohnort einer Person. +**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. \ +**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). +**Label:** Label werden verwendet, um die Knoten zu kategorisieren/gruppieren. Ein Knoten kann auch mehrere Label +besitzen, um die Zugehörigkeit an verschiedenen Kategorien darzustellen (z.B. Unternehmensbranche). #### 3.2.1 Erstellung eines Datensatzes + 1. Knotenerstellung: Es wird zuerst ein Knoten erstellt, der die Entität repräsentiert. -2. ID: Der Knoten benötigt eine eindeutige Identifikationsnummer, welche automatisch erzeugt oder manuell festgelegt werden kann. -3. Knoten einfügen: Wenn die beiden notwendigen Elemente (Knoten und ID) festgelegt sind, kann der Knoten eingefügt werden. +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'}), +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), +CREATE +(u1)-[:cooparates_with]->(u2), (u2)-[:cooparates_with]->(u1) ``` + ![Graph_example](images/Graph.png) -#### 3.2.2 Cypher - Abfrage von Graphdatenbanken -Um Daten abzufragen wird die Abfragesprache Cypher verwendet.\ -Es werden folgend nur einige grundlegende Befehle gezeigt.\ +#### 3.2.2 Cypher - Abfrage von Graphdatenbanken + +Um Daten abzufragen wird die Abfragesprache Cypher verwendet. +Es werden folgend nur einige grundlegende Befehle gezeigt. **Abfrage aller Knoten** -``` + +``` MATCH (n) RETURN n ``` + **Abfrage aller Kanten/Beziehungen** -``` + +``` MATCH ()-[r]-() RETURN r ``` **Abfrage von Knoten mit definierten Eigenschaften** -``` + +``` MATCH (n:Label) WHERE n.property = value RETURN n ``` **Beziehung zwischen zwei Knoten abfragen** -``` + +``` MATCH (n1)-[r]->(n2) WHERE n1.property = value1 AND n2.property = value2 RETURN r @@ -339,68 +476,85 @@ RETURN r ### 3.3 Zeitseriendatenbank Zeitserien fallen überall dort an, wo eine Metrik zeitlich betrachtet wird, wie z.B. Umsatz oder EBIT. -D.h. zu jedem Messwert gibt es einen zeitlich zugeordneten Zeitstempel, wobei die einzelnen Zeitpunkte zu einer Serie zusammengefasst werden, um den Zusammenhang zu betrachten. \ +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. +**Bucket:** Der Bucket separiert Daten in verschiedene Speicher und ist mit der Datenbank bei relationalen Datenbanken +vergleichbar. -**Datapoint:** Unter dem Bucket werden die Datenpunkte gespeichert. Ein Datapoint setzt sich aus mehreren Elementen zusammen, welche erorderlihc oder optional sind: +**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
Leerzeichen sind verboten
Max. 64kB| -|Tags| Sind optional
Bestehen aus einem Key/Value-Paar
Datentyp: String
Leerzeichen sind verboten
Max. 64 kB| -|Fields| Min. 1 Field=value Paar wird benötigt
Nicht alle Felder müssen in jedem Punkt vorhanden sein
Datentypen: Float, String, Integer, Boolean| -|Timestamp| Sind optional
Influx schreibt standardmäßig die Systemzeit als Zeitstempel
Genauigkeit kann eingestellt werden (Default: Nanosekunden)| +| **Element** | **Eigenschaft** | +|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| Measurement | Datentyp: String
Leerzeichen sind verboten
Max. 64kB | +| Tags | Sind optional
Bestehen aus einem Key/Value-Paar
Datentyp: String
Leerzeichen sind verboten
Max. 64 kB | +| Fields | Min. 1 Field=value Paar wird benötigt
Nicht alle Felder müssen in jedem Punkt vorhanden sein
Datentypen: Float, String, Integer, Boolean | +| Timestamp | Sind optional
Influx schreibt standardmäßig die Systemzeit als Zeitstempel
Genauigkeit kann eingestellt werden (Default: Nanosekunden) | #### 3.3.1 Erstellung eines Datensatzes -Die Einrichtung von Zeitseriendatenbanken erfolgt mit der CLI von Influx. + +Die Einrichtung von Zeitseriendatenbanken erfolgt mit der CLI von Influx. **Anlegen eines Buckets:** + ``` CREATE DATABASE finance ``` #### 3.3.2 FluxQuery + Zur Abfrage von Datenpunkten gibt es FluxQuery, welche sich stark an SQL orientiert. \ **Abrufen aller Daten aus Bucket:** + ``` from(bucket: "my-bucket") ``` -**Festlegen des Zeitbereich:** +**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})) ``` + ### 3.4 Dokumenten Datenbank -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. +Eine Dokumentendatenbank ist ein System, welches für das Speichern von Dokumenten entwicklet wurde. Es gibt verschiedene +Arten von Dokumenten, wie z.B. Textdateien (JSON, HTML, XML) oder PDF. +Es muss kein Schema für die Dokumente festgelegt werden, dadurch ist es möglich Dokumente mit verschiedenen Datenfeldern +zu speichern. Gleiche oder ähnliche Dokumente werden gemeinsam in *Collections* gespeichert. -Die wichtigsten Elemente einer Dokumenten-Datenbank sind: +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. +**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. +**Collection:** Collections werden verwendet, um Dokumente mit ähnlichen Eigenschaften zusammenzufassen. Da +Dokumenten-Datenbanken schemenlos sind, dienen die Collections der Organisation. -**Document:** Das Dokument ist ein einzelnes Datenobjekt und die kleinste Einheit in einer Dokumenten-DB. Ein Dokument kann z.B. ein JSON mit einer eigenen internen Struktur. +**Document:** Das Dokument ist ein einzelnes Datenobjekt und die kleinste Einheit in einer Dokumenten-DB. Ein Dokument +kann z.B. ein JSON mit einer eigenen internen Struktur. ![Document_DB](images/Document_DB.PNG) #### 3.4.1 Erstellen einer Collection / Ablegen von Dokumenten -Folgend ein Code-Snippet zum Verbinden mit der Datenbank, Anlegen einer Collection und ablegen von Dokumenten. + +Folgend ein Code-Snippet zum Verbinden mit der Datenbank, Anlegen einer Collection und ablegen von Dokumenten. ``` python from pymongo import MongoClient @@ -436,82 +590,120 @@ client.close() ``` - - ### 3.5 Aufbau einer Datenbank -Vor dem Aufbau einer relationalen Datenbank sollten planerische Schritte durchgeführt werden, um ein System zu entwerfen, dass den Anforderungen gerecht wird. \ + +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. +**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. +**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. +**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. +**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. +**Beziehungen festlegen:** Um die Beziehungen zwischen Tabellen festzulegen, werden Fremdschlüssel verwendet. Mit +Fremdschlüsseln verknüpft man Tabellen mit den Primärschlüsseln anderer, abhängiger Tabellen. ## 4. Datenbanken Transparenzregister -Nachdem die Datencluster identifiziert wurden, welche für das Transparenzregister notwendig sind, wurde Rechereche zu den benötigten Datenquellen betrieben. \ -Es gibt verschiedene Quellen, mit unterschiedlichen Schnittstellen bzw. Zugriff auf die Daten, z.B. mit API´s oder über Web Scrapping. + +Nachdem die Datencluster identifiziert wurden, welche für das Transparenzregister notwendig sind, wurde Rechereche zu +den benötigten Datenquellen betrieben. \ +Es gibt verschiedene Quellen, mit unterschiedlichen Schnittstellen bzw. Zugriff auf die Daten, z.B. mit API´s oder über +Web Scrapping. Es wurde eine Architektur definiert, welche den Aufbau der späteren Software skizziert: ![High_level_design](images/HLD.png) -Mittels geeigneter Techniken werden Daten aus diversen Quellen extrahiert (Data Extraction) und in der Staging DB gespeichert. -Mit unterschiedlichen Daten-Extraktionspipelines (Dazta Loader, Sentiment Analysis, Graph Analysis) werden die Daten aus der Staging DB verarbeitet und die strukturierten und aufbereiteten Daten in der Production DB abgelegt. \ +Mittels geeigneter Techniken werden Daten aus diversen Quellen extrahiert (Data Extraction) und in der Staging DB +gespeichert. +Mit unterschiedlichen Daten-Extraktionspipelines (Dazta Loader, Sentiment Analysis, Graph Analysis) werden die Daten aus +der Staging DB verarbeitet und die strukturierten und aufbereiteten Daten in der Production DB abgelegt. \ Das Frontend kann auf diese strukturierten Daten zugreifen, um diese zu visualisieren. ### 4.1 Production DB - relationales Datenbankmodell -Für die Production DB ist eine relationale Datenbank vorgesehen, da diese die Daten organisiert und durch Verwendung von definierten Schemata strukturiert. \ +Für die Production DB ist eine relationale Datenbank vorgesehen, da diese die Daten organisiert und durch Verwendung von +definierten Schemata strukturiert. \ Diese Strukturen erleichtern die Wartung und Integration zwischen Back- und Frontend. ![Relationales Modell](images/DB_Schema.png) -Zentrales Element ist die Stammdatentabelle **company**, welche einen zusammengesetzten Primärschlüssel aus der Nummer des Handelsregister und dem zuständigen Amtsgericht bildet. \ -Die Handelsregisternummer ist nicht eindeutig und wird deutschlandweit mehrfach vergeben, allerdings nur einfach unter einem Amtsgericht. +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 persisitiert werden. Diese steht in einer 1:n Beziehung zur Unternehmenstabelle, da ein Unternehmen viele Finanzdaten haben kann und jeder Datensatz genau einem Unternehmen zugewiesen ist. \ -Die einzelnen Metriken wurden als Attribute definiert, wodurch es viele NULL-Werte in jeder Zeile gibt. Vorteilhaft bei dieser Notation ist allerdings, dass die Metriken durch den Spalztenbezeichner eindeutig sind. +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 **Sentiment** speichert die Stimmungsdaten zu einem Unternehmen. Auch hier besteht eine 1:n Beziehung zu der +Unternehmenstabelle. Es gibt einen eigenen Enumeration-Typ, der die Art der Stimmungsdaten festlegt. -Die Tabelle **district_court** speichert die Amtsgericht, unter welchen die Unternehmen registriert sind. Diese Information ist wichtig, um mit der Handelsregisternummer und dem Amtsgericht ein Unternehmen eindeutig zu identifizieren. +Die Tabelle **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. +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). +Abschließend gibt es noch die Tabelle **company_relation**, welche die Verbindung zwischen Unternehmen modelliert. +Hierfür wurde ein Enumaration-Typ erzeugt, welcher die Art der Beziehung angibt (wird_beliefert_von, arbeitet_mit, +ist_beteiligt_an, hat_Anteile_an). ### 4.2 Staging DB -Die Staging DB ist eine dokumentbasierte Datenbank zu Speicherung von unstrukturierten und semi-strukturierten Daten. Sie dient als Zwischenspeicher oder "Rohdatenbank" für die Extraktions-Pipelines. \ -Aufgaben der Staging-DB:\ -**1. Datenvorbereitung:** Sammlung und Speicherung von Rohdaten aus verschiedenen Quellen\ -**2. Überprüfung:** Entsprechen die Daten den Anforderungen ggfs. Ermittlung von Fehlern oder Inkonsistenzen\ -**3. Testumgebung:** Die Rohdaten aus der Staging DB können mehrfach verwendet werden, um verschiedene Szenarien und Funktionalitäten der Extraktionspipelines zu erproben\ -**4. Backup:** Wenn sich im Laufe des Projekts eine Datenquelle ändert (z.B. Struktur oder Zugang zum Bundesanzeiger) sind die Daten weiterhin verfügbar oder wenn es Änderungen am Schema der Production DB gibt, kann durch eine Änderung am Data Loader das neue Tabellenschema implementiert werden +Die Staging DB ist eine dokumentbasierte Datenbank zu Speicherung von unstrukturierten und semi-strukturierten Daten. +Sie dient als Zwischenspeicher oder "Rohdatenbank" für die Extraktions-Pipelines. +Aufgaben der Staging-DB: + +1. **Datenvorbereitung:** Sammlung und Speicherung von Rohdaten aus verschiedenen Quellen +2. **Überprüfung:** Entsprechen die Daten den Anforderungen ggfs. Ermittlung von Fehlern oder Inkonsistenzen +3. **Testumgebung:** Die Rohdaten aus der Staging DB können mehrfach verwendet werden, um verschiedene Szenarien und + Funktionalitäten der Extraktionspipelines zu erproben +4. **Backup:** Wenn sich im Laufe des Projekts eine Datenquelle ändert (z.B. Struktur oder Zugang zum Bundesanzeiger) + sind die Daten weiterhin verfügbar oder wenn es Änderungen am Schema der Production DB gibt, kann durch eine Änderung + am Data Loader das neue Tabellenschema implementiert werden Die Staging DB erhält Collections der unterschiedlichen Quellen, unter welchen die Dokumente gespeichert werden. ![Staging_DB](images/Staging_DB.PNG) - ### 4.3 SQL Alchemy SQL Alchemy ist eine Python Bibliothek, um mit relationalen Datenbanken zu kommunizieren. -Dieses ORM (Object-Relational-Mapping) Framework bildet die Datenbanktabellen als Pythonklassen an und vereinfacht damit das Erstellen, Lesen, Aktualsieren und Löschen von Daten aus Pythonanwendungen.\ -Wichtige Eigenschaften: -- erleichterte Entwicklung: durch die Abbildung von Datenbanktabellen als Pythonklassen wird durchgängig Pythoncode verwendet -- Flexibilität: Durch Verwendung eines Backend-Treibers für die unterschiedlichen Datenbanken, muss der Code nicht geändert werden. Wenn eine andere Datenbank zum Einsatz kommt, muss nur der Treiber ausgetauscht werden (Plattformunabhängigkeit) +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. ## 5. Proof of Concept + ### 5.1 Docker -Für die Umsetzung der bisher vorgestellten theoretischen Betrachtungen wird ein Docker Container verwendet. Dieser Container beinhaltet eine relationale und eine dokumentbasierte Datenbank. \ -Mit Jupyter Notebooks soll die Implementierung und Befüllung der Datenbank erprobt werden, um als Startpunkt für die anstehende Softwareentwicklung zu dienen. +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: @@ -525,7 +717,7 @@ services: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres volumes: - - ./PostgreSQL:/var/lib/postgresql/data + - ./PostgreSQL:/var/lib/postgresql/data pgadmin: image: dpage/pgadmin4:7.2 container_name: pgadmin4_container @@ -544,77 +736,98 @@ services: - '27017:27017' volumes: - ./mongo:/data/db +``` -``` -|Eintrag|Beschreibung| -|---|---| -|version|Version von docker-compose| -|services|Definition der Services, welche gestartet werden| +| 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| +| 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. +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 ``` ### 5.2 PG Admin -PG Admin ist ein grafisches Administartionstool für Postgres. Wenn der Container gestartet ist, kann man sich über http://localhost:5050/browser/ mit dem Web-UI verbinden. \ + +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 + +``` +> User: admin@fh-swf.de +> Passwort: admin +```` ![PGAdmin_landing](images/PG_Admin_Board.PNG) -Zuerst muss der Server angelegt werden, dafür einen Rechtsklick auf Server und den Button „Register“ auswählen. Im geöffneten Dialog muss die Konfiguration festgelegt werden. +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)| +| Reiter | Parameter | Wert | +|------------|-------------------|---------------------------------| +| General | Name | postgres | +| Connection | Host name/address | postgres (siehe docker-compose) | +| Connection | Username | postgres (siehe docker-compose) | +| Connection | Password | postgres (siehe docker-compose) | ![PGAdmin_Conf](images/PG_Admin_Conf.PNG) ### 5.3 Erstellen von Mock Daten -**Unternehmensstammdaten:**\ -Um das Konzept und den Umgang mit den ausgewählten Datenbanken zu überprüfen, sollen Daten in die Datenbank geschrieben werden. Hier für wurde auf Statista recherchiert, welches die größten deutschen Unternehmen sind, um einen kleinen Stamm an Unternehmensdaten zu generieren (01_Stammdaten_Unternehmen_HR.csv). / + +**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. ![biggest_companies](images/Statista_Companies.png) **Amtsgerichte:** -Die Amtsgerichte sind aus https://www.gerichtsverzeichnis.de/ extrahiert, wobei lediglich 12 Amstgerichte eingefügt wurden (Amtsgerichte.csv). +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). +**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:** 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. +**Personen-Unternehmens-Beziehung:** Diese Tabelle ist zufällig erzeugt und dient lediglich für weitere Experimente. +Hierfür wurde ein Python-Skript erstellt, welches mit der mehreren Random-Funktionen die Beziehungen zufälloig +generiert. **Sentiment:** keine Mock-Daten vorhanden **Unternehmens-Unternehmens-Beziehung:** keine Mock-Daten vorhanden - ### 5.4 Anlegen der relationalen Tabellen -Für das Verbinden zu der Postgre Datenbank und das Anlegen der Tabellen wird ein Jupyter Notebooks verwendet (11_Create_Tables_with_SQL-Alchemy.ipynb). \ + +Für das Verbinden zu der Postgre Datenbank und das Anlegen der Tabellen wird ein Jupyter Notebooks verwendet ( +11_Create_Tables_with_SQL-Alchemy.ipynb). + Die benötigten Bibliotheken werden importiert und das Erstellen von Tabellen als Python-Objekte beschrieben. \ Nach dem Anlegen der Tabellen werden die Mock-Daten in die Datenbank geschrieben. \ -Eine Überprüfung, ob die Daten abgelegt wurden ist sehr einfach mit PGAdmin möglich. +Eine Überprüfung, ob die Daten abgelegt worden ist sehr einfach mit PGAdmin möglich. ![finance_data](images/finance_data.PNG) Das grundsätzliche Vorgehen bei der Verwendung von SQLAlchemy ist: + 1. Verbindung zur Datenbank herstellen ```python from sqlalchemy import create_engine @@ -626,11 +839,12 @@ Das grundsätzliche Vorgehen bei der Verwendung von SQLAlchemy ist: host="localhost", database="postgres") - #Verbindung zur Datenbank + # 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 +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 @@ -648,7 +862,7 @@ Das grundsätzliche Vorgehen bei der Verwendung von SQLAlchemy ist: ```python from sqlalchemy.orm import sessionmaker - #starte die Verbindung + # starte die Verbindung Session = sessionmaker(bind=engine) session = Session() ``` @@ -657,11 +871,12 @@ Das grundsätzliche Vorgehen bei der Verwendung von SQLAlchemy ist: # 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. +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( + # get data from dataframe + myNewData=MyClass( name = str(df['Name'].iloc[i]), city = str(df['Surname'].iloc[i]) ) @@ -670,7 +885,8 @@ Das grundsätzliche Vorgehen bei der Verwendung von SQLAlchemy ist: ``` ### 5.5 Abfragen der Datenbank -Der folgende Code-Snippet zeigt, wie man eine Abfrage gestaltet. + +Das folgende Code-Snippet zeigt, wie man eine Abfrage gestaltet. ```python from sqlalchemy import create_engine @@ -687,11 +903,13 @@ url = URL.create( database="postgres" ) -#Erstelle eine Engine zur Verbindung mit der Datenbank +# Erstelle eine Engine zur Verbindung mit der Datenbank engine = create_engine(url) -#Erstelle eine Klasse, die eine Tabelle repräsentiert +# Erstelle eine Klasse, die eine Tabelle repräsentiert Base = declarative_base() + + class Company(Base): __tablename__ = 'company' @@ -707,42 +925,55 @@ class Company(Base): PrimaryKeyConstraint('hr', 'court_id', name='pk_company_hr_court'), ) -#starte die Verbindung zur Datenbank + +# starte die Verbindung zur Datenbank Session = sessionmaker(bind=engine) session = Session() -#Abfrage aller Spalten der Tabelle/Klasse Company +# Abfrage aller Spalten der Tabelle/Klasse Company Comps = session.query(Company).all() -#Gebe die Spalten name, hr und court_id der Tabelle company aus +# Gebe die Spalten name, hr und court_id der Tabelle company aus for comp in Comps: print(comp.name, comp.hr, comp.court_id) ``` +
## 6. Zusammenfassung -Die vorliegende Seminararbeit behandelt das Thema der Datenspeicherung mit Fokus auf dem Projekt Transparenzregister. Es wurde erläutert, warum Daten gespeichert werden und welche Art von Daten es gibt.\ -Für das Projekt sind Daten und die Speicherung eine Kernkomponente, um die geforderten Analysen bezüglich Verflechtungen, unternehmerischen Erfolgs und Aussenwahrnehmung zu ermöglichen. +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. -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. +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. -Um das Konzept zu überprüfen, wurde ein Proof of Concept durchgeführt, um geeignete Werkzeuge zu erproben und das Modell auf seine Tauglichkeit zu überprüfen. \ -Hierbei wurde ein Dockercontainer eingesetzt, um die Datenbankumgebung bereitzustellen. Mithilfe der SQL-Alchemy-Bibliothek, wurden die Tabellen innerhalb der Datenbank erstellt.\ Anschließend wurden die Tabellen mit eigenen Mock-Daten befüllt, um die Funktionalität der Datenbank zu testen. -Insgesamt bietet die Seminararbeit einen umfassenden Überblick über die Bedeutung der Datenspeicherung und die verschiedenen Arten von Datenbanken. +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. +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.
## 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 +- 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 diff --git a/documentations/seminararbeiten/Datenspeicherung/01_Actionlist.md b/documentations/seminararbeiten/Datenspeicherung/01_Actionlist.md index 5d1fb97..204ac78 100644 --- a/documentations/seminararbeiten/Datenspeicherung/01_Actionlist.md +++ b/documentations/seminararbeiten/Datenspeicherung/01_Actionlist.md @@ -5,7 +5,7 @@ - [x] Erstelle eine Kurzanleitung für die Handhabung von Docker - [x] erstelle Jupyter Notebook zum Verbinden mit Datenbank und Anlegen von Tabellen - [x] Recherchiere nach den 10 größten deutschen Unternehmen und ermittel Finanzdaten (Umsatz, Ebit, Ebitda) -- [x] Erstelle ein Jupyter Notebook um diese Daten in die Datenbank zu übertragen +- [x] Erstelle ein Jupyter Notebook, um diese Daten in die Datenbank zu übertragen - [x] Erstelle ein Jupyter Notebook, um die Daten abzufragen - [x] Erstelle ein Schema für Stimmungsdaten - [x] Erstelle ein Schema für Verflechtungen @@ -14,5 +14,5 @@ - [ ] Erstelle eine Prototypen GUI in Mercury zur einfachen Abfrage von Daten - [ ] Verwende SQLalchemy, um eine Verbindung zur Datenbank aufzubauen, Tabellen anzulegen und Daten zu schreiben --> - [x] Ersetze den enumeration type in den Finanzdaten gegen einzelne (eindeutig bezeichnete) Spalten -- [x] Lade das DB Schema hoch, um es den anderen Teammitgliedern bereitzustellen +- [x] Lade das DB-Schema hoch, um es den anderen Teammitgliedern bereitzustellen - [ ] diff --git a/documentations/seminararbeiten/Datenspeicherung/Docker_get_started.md b/documentations/seminararbeiten/Datenspeicherung/Docker_get_started.md index 7be0986..6acc725 100644 --- a/documentations/seminararbeiten/Datenspeicherung/Docker_get_started.md +++ b/documentations/seminararbeiten/Datenspeicherung/Docker_get_started.md @@ -4,67 +4,81 @@ https://thibaut-deveraux.medium.com/how-to-install-neo4j-with-docker-compose-36e https://towardsdatascience.com/how-to-run-postgresql-and-pgadmin-using-docker-3a6a8ae918b5 # Installation Docker Desktop + ## Starten eines Containers: -> docker run --name basic-postgres --rm -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=4y7sV96vA9wv46VR -e PGDATA=/var/lib/postgresql/data/pgdata -v /tmp:/var/lib/postgresql/data -p 5432:5432 -it postgres:14.1-alpine +> docker run --name basic-postgres --rm -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=4y7sV96vA9wv46VR -e +> PGDATA=/var/lib/postgresql/data/pgdata -v /tmp:/var/lib/postgresql/data -p 5432:5432 -it postgres:14.1-alpine -Dieser Befehl startet einen Container mit dem Postgres14.1-alpine Image, welches von Dockerhub geladen wird. Der Container läuft unter dem Namen basic-postgres +Dieser Befehl startet einen Container mit dem Postgres14.1-alpine Image, welches von Dockerhub geladen wird. Der +Container läuft unter dem Namen basic-postgres + +| Syntax | Attribut | Beschreibung | +|-------------------|----------|-----------------------------------------------------------------------------------| +| basic-postgres | --name | Angabe des Containernamens | +| | --rm | Bei Beendigung des Containers wird das erstellte Dateisystem entfernt | +| | -e | Verwende Umgebungsvariablen | +| POSTGRES_USER | | Umgebungsvariable für den anzulegenden Benutzer: postgres | +| POSTGRES_PASSWORD | | Umgebungsvariable für das anzulegende Passwort: 4y7sV96vA9wv46VR | +| PGDATA | | Umgebungsvariable für den Ort der Datenbank | +| | -v | Einzubindendes Volumen: /tmp:/var/lib/postgresql/data | +| | -p | Angabe des Containerports und des öffentlich zugänglichen Ports | +| | -it | Interactive: der Container bleibt aktiv, damit mit diesem interagiert werden kann | -| Syntax | Attribut | Beschreibung | -| ----------- | ----------- | ----------- | -| basic-postgres | --name | Angabe des Containernamens| -| | --rm | Bei Beendigung des Containers wird das erstellte Dateisystem entfernt| -| |-e| Verwende Umgebungsvariablen | -| POSTGRES_USER | | Umgebungsvariable für den anzulegenden Benutzer: postgres| -|POSTGRES_PASSWORD| | Umgebungsvariable für das anzulegende Passwort: 4y7sV96vA9wv46VR | -| PGDATA | | Umgebungsvariable für den Ort der Datenbank| -| | -v | Einzubindendes Volumen: /tmp:/var/lib/postgresql/data | -| |-p | Angabe des Containerports und des öffentlich zugänglichen Ports | -| | -it | Interactive: der Container bleibt aktiv, damit mit diesem interagiert werden kann | - Mit einem zweiten Terminalfenster kann man auf die Bash des Containers öffnen und auf die Datenbank zugreifen. > docker exec -it basic-postgres /bin/sh - + Die folgenden Befehle starten die Postgres CLI, Ausgabe aller Datenbanken und beendet die CLI. > Psql –username postgres \ > \l \ -Exit - +> Exit + Der Container kann durch Betätigung von STRG + C beendet werden. ## Docker Compose -Das oben erklärte Vorgehen zum Starten eines Containers, festlegen der Umgebungsvariablen und zusätzliche verlinken zu einer Anwendung wird nun in einer yml-Datei beschrieben, um die Verwaltung und das Erstellen zu vereinfachen. -| | | Beschreibung | -| ----------- | ----------- | ----------- | -|Version | | Version von docker-compose | -|Services| |Definition der Services, wobei jeder ein eigenen docker-run Befehl ausführt.| -| | image | Angabe des zu verwendenden Images | -| | restart | Option um Container erneut zu starten, falls dieser gestoppt wird | -| | Environment | Umgebungsvariablen: Username und Passwort | -| | Ports | Mapping des Containerports zum Port der Hostmaschine | -| | Volumes | Angabe eines Volumes zum Persistieren der Containerdaten, damit nach einem Neustart die Daten wieder verfügbar sind | +Das oben erklärte Vorgehen zum Starten eines Containers, festlegen der Umgebungsvariablen und zusätzliche verlinken zu +einer Anwendung wird nun in einer yml-Datei beschrieben, um die Verwaltung und das Erstellen zu vereinfachen. + +| | | Beschreibung | +|----------|-------------|---------------------------------------------------------------------------------------------------------------------| +| Version | | Version von docker-compose | +| Services | | Definition der Services, wobei jeder ein eigenen docker-run Befehl ausführt. | +| | image | Angabe des zu verwendenden Images | +| | restart | Option um Container erneut zu starten, falls dieser gestoppt wird | +| | Environment | Umgebungsvariablen: Username und Passwort | +| | Ports | Mapping des Containerports zum Port der Hostmaschine | +| | Volumes | Angabe eines Volumes zum Persistieren der Containerdaten, damit nach einem Neustart die Daten wieder verfügbar sind | Nun kann der Container mittels Docker-Compose gestartet werden. -> docker-compose -f /.../docker-compose-postgres.yml up -## pgAdmin -pgAdmin ist ein grafisches Administrationswerkezug für postgreSQL und macht die oben gezeigte Administration komfortabler. \ -Erreichbar ist das Interface über: http://localhost:5050 \ +```console +docker-compose -f /.../docker-compose-postgres.yml up +``` + +## pgAdmin + +pgAdmin ist ein grafisches Administrationswerkzeug für postgreSQL und macht die oben gezeigte Administration +komfortabler. + +Erreichbar ist das Interface über: http://localhost:5050 + Als Login werden die Daten aus der docker-compose verwendet: ->User: admin@fh-swf.de ->Passwort: admin + +``` +> User: admin@fh-swf.de +> Passwort: admin +``` ### Anlegen eines Servers + Zuerst muss der Server angelegt werden, dafür einen Rechtsklick auf Server und den Button „Register“ auswählen. \ -Im geöffneten Dialog muss die Konfiguration festgelegt werden. +Im geöffneten Dialog muss die Konfiguration festgelegt werden. -| Reiter | Parameter | Wert | -| ----------- | ----------- | ----------- | -| General| Name | postgres_docker | -| Connection | Host name/address | local_pgdb (siehe docker-compose) | -| Connection | Username | postgres (siehe docker-compose) | -| Connection | Password | postgres (siehe docker-compose) | - - +| Reiter | Parameter | Wert | +|------------|-------------------|-----------------------------------| +| General | Name | postgres_docker | +| Connection | Host name/address | local_pgdb (siehe docker-compose) | +| Connection | Username | postgres (siehe docker-compose) | +| Connection | Password | postgres (siehe docker-compose) | diff --git a/documentations/seminararbeiten/Datenvisualisierung/Abstract_Datenvisualisierung.md b/documentations/seminararbeiten/Datenvisualisierung/Abstract_Datenvisualisierung.md index bfceb44..8d6fa31 100644 --- a/documentations/seminararbeiten/Datenvisualisierung/Abstract_Datenvisualisierung.md +++ b/documentations/seminararbeiten/Datenvisualisierung/Abstract_Datenvisualisierung.md @@ -1,6 +1,7 @@ # Seminarthema: Datenvisualisierung ## Geplanter Inhalt: + - Einführung - Best Practice für Datenvisualisierung - Vorstellung verschiedener Diagrammarten @@ -10,20 +11,30 @@ - Minimalbeispiele - Anwendung auf unser Projekt: - Vergleich der Bibliotheken mit Blick auf unsere drei Anwendungsbereiche - - Welche Daten werden für die einzelnen Diagramme gebraucht? + - Welche Daten werden für die einzelnen Diagramme gebraucht? - Welche Ideen/Anforderungen ergeben sich an die anderen Themenbereiche? - Fazit und Handlungsempfehlung - Welche Diagramme und welche Bibliotheken eignen sich für uns? ## Abstract: -In dieser Seminararbeit geht es um die Visualisierung von Daten in Python. Im Fokus steht die Anwendung auf die drei Themenbereiche, die im Projekt "Transparenzregister" behandelt werden: Time Series Daten, Soziale Netzwerke und Stimmungen. Nach einer Einführung in das Thema werden Best Practices für die Datenvisualisierung vorgestellt und verschiedene Diagrammarten präsentiert. Anschließend wird diskutiert, welche Diagramme für die genannten Anwendungsbereiche am besten geeignet sind. +In dieser Seminararbeit geht es um die Visualisierung von Daten in Python. Im Fokus steht die Anwendung auf die drei +Themenbereiche, die im Projekt "Transparenzregister" behandelt werden: Time Series Daten, Soziale Netzwerke und +Stimmungen. Nach einer Einführung in das Thema werden Best Practices für die Datenvisualisierung vorgestellt und +verschiedene Diagrammarten präsentiert. Anschließend wird diskutiert, welche Diagramme für die genannten +Anwendungsbereiche am besten geeignet sind. -Im zweiten Abschnitt werden verschiedene Python Bibliotheken vorgestellt und anhand von Minimalbeispielen betrachtet. Dabei wird analysiert, welche Bibliotheken die gewünschten Diagramme für unsere Anwendungsbereiche am besten darstellen und welche Daten für die Erstellung der verschiedenen Diagramme benötigt werden. Es werden zudem Ideen und Anforderungen an die anderen Themenbereiche aufgezeigt. +Im zweiten Abschnitt werden verschiedene Python Bibliotheken vorgestellt und anhand von Minimalbeispielen betrachtet. +Dabei wird analysiert, welche Bibliotheken die gewünschten Diagramme für unsere Anwendungsbereiche am besten darstellen +und welche Daten für die Erstellung der verschiedenen Diagramme benötigt werden. Es werden zudem Ideen und Anforderungen +an die anderen Themenbereiche aufgezeigt. -Im letzten Abschnitt der Arbeit wird ein Fazit gezogen und eine Handlungsempfehlung gegeben. Insgesamt soll die Arbeit einen Einblick in die Welt der Datenvisualisierung in Python geben und unserem Projekt helfen, die richtigen Entscheidungen bei der Wahl der Diagrammarten und Bibliotheken zu treffen. +Im letzten Abschnitt der Arbeit wird ein Fazit gezogen und eine Handlungsempfehlung gegeben. Insgesamt soll die Arbeit +einen Einblick in die Welt der Datenvisualisierung in Python geben und unserem Projekt helfen, die richtigen +Entscheidungen bei der Wahl der Diagrammarten und Bibliotheken zu treffen. ## Erste Sammlung von Referenzen: + Bibliotheken/Tools: - D3Blocks: [Documentation](https://d3blocks.github.io/d3blocks/pages/html/index.html), [Medium Blog](https://towardsdatascience.com/d3blocks-the-python-library-to-create-interactive-and-standalone-d3js-charts-3dda98ce97d4) - pyvis: [Documentation](https://pyvis.readthedocs.io/en/latest/tutorial.html) @@ -31,12 +42,15 @@ Bibliotheken/Tools: - plotly: [Documentation](https://plotly.com/python/#animations) Netzwerke: + - Zentralitätsmaße: [Medium Blog](https://towardsdatascience.com/social-network-analysis-from-theory-to-applications-with-python-d12e9a34c2c7) - Visualisierungsideen: [Medium Blog](https://towardsdatascience.com/visualizing-networks-in-python-d70f4cbeb259) Kennzahlen: + - Visualisierungsideem: [Towards AI](https://towardsai.net/p/l/time-series-data-visualization-in-python) Best Practice: + - [Science Direct](https://www.sciencedirect.com/science/article/pii/S2666389920301896) - [Toptal](https://www.toptal.com/designers/data-visualization/data-visualization-best-practices) diff --git a/documentations/seminararbeiten/Text_Mining/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.md b/documentations/seminararbeiten/Text_Mining/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.md index 3790b7d..5e9bbd1 100644 --- a/documentations/seminararbeiten/Text_Mining/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.md +++ b/documentations/seminararbeiten/Text_Mining/Abstract Planung Seminararbeit zu Text Mining Sascha Zhu.md @@ -4,15 +4,13 @@ **10.05.2023** - - ## Gliederung 1. Einleitung und Begriffsbestimmung 2. Text Mining Prozess -3. Verwendung von NLP-Methoden für das Text Mining +3. Verwendung von NLP-Methoden für das Text-Mining 3.1 Morphologische Textanalyse @@ -26,20 +24,32 @@ 4.2 Generierung von Ontologien mittels Text Mining ("ontology generation"/"ontology learning" ) -5. Sentiment-Analyse als Teilgebiet des Text Minings +5. Sentiment-Analyse als Teilgebiet des Text-Minings 6. Zusammenfassung und Ausblick - - Die Seminararbeit zu "Text Mining" soll in die oben genannten sechs Abschnitte gegliedert werden. -Nach einer Einleitung, in der der Begriff "Text Mining" näher definiert wird und gegenüber "Data Mining" und "Computational Linguistics" abgegrenzt wird, folgt der zweite Abschnitt zum Text Mining Prozess, der nach Hippner u. Rentzmann (2006) in die folgenden sechs Schritte eingeteilt wird: (a) Aufgabendefinition; (b) Dokumentenselektion; (c) Dokumentenaufbereitung; (d) Untersuchung mit Text-Mining-Methoden; (e) Interpretation und Evaluation; (f) Anwendung der Ergebnisse. +Nach einer Einleitung, in der der Begriff "Text Mining" näher definiert wird und gegenüber "Data-Mining" und +"Computational Linguistics" abgegrenzt wird, folgt der zweite Abschnitt zum Text Mining Prozess, der nach Hippner u. +Rentzmann (2006) in die folgenden sechs Schritte eingeteilt wird: (a) Aufgabendefinition; (b) Dokumentenselektion; (c) +Dokumentenaufbereitung; (d) Untersuchung mit Text-Mining-Methoden; (e) Interpretation und Evaluation; (f) Anwendung der +Ergebnisse. -Im darauffolgenden dritten Abschnitt zur Verwendung von NLP-Methoden für das Text Mining werden die drei Phasen des Natural Language Processings (NLP), d.h. die morphologische, syntaktische und semantische Textanalyse, näher dargestellt, wobei der Schwerpunkt auf die semantische Analysetechniken wie z.B. "Word Sense Disambiguation" (WSD) und "Named Entity Recognition" (NED) liegen soll. +Im darauffolgenden dritten Abschnitt zur Verwendung von NLP-Methoden für das Text-Mining werden die drei Phasen des +Natural Language Processing (NLP), d.h. die morphologische, syntaktische und semantische Textanalyse, näher +dargestellt, wobei der Schwerpunkt auf den semantischen Analysetechniken wie z.B. "Word Sense Disambiguation" (WSD) und +"Named Entity Recognition" (NED) liegen soll. -Der vierte Abschnitt soll sich dem Thema "Ontologien und Text Mining" widmen. Einerseits können Ontologien, die domänenspezifisches Wissen abbilden, als Grundlage für NLP-Methoden dienen, um etwa die semantische Textanalyse zu verbessern. Andererseits können mittels Text Mining automatisch bzw. semi-automatisch Ontologien als Repräsentation der Text-Mining-Ergebnisse erstellt werden ("ontology generation"/"ontology learning"). +Der vierte Abschnitt soll sich dem Thema "Ontologien und Text Mining" widmen. Einerseits können Ontologien, die +domänenspezifisches Wissen abbilden, als Grundlage für NLP-Methoden dienen, um etwa die semantische Textanalyse zu +verbessern. Andererseits können mittels Text Mining automatisch bzw. semi-automatisch Ontologien als Repräsentation der +Text-Mining-Ergebnisse erstellt werden ("ontology generation"/"ontology learning"). -Im vorletzten, fünften Analyse soll die Sentiment-Analyse als Teilgebiet des Text Mining durchleuchtet werden. Dieser Abschnitt soll den Schwerpunkt der gesamten Seminararbeit darstellen. Die Methodik, Funktionsweise, Varianten und Use Cases der Sentiment Analyse sollen anhand ausgewählter Beispiele erläutert werden. Zudem sollen auch bekannte Sentiment-Analyse-Tools wie z.B. FinBERT, VADER, SentiWS etc. näher beschrieben werden. +Im vorletzten, fünften Analyse soll die Sentiment-Analyse als Teilgebiet des Texts Mining durchleuchtet werden. Dieser +Abschnitt soll den Schwerpunkt der gesamten Seminararbeit darstellen. Die Methodik, Funktionsweise, Varianten und Use +Cases der Sentiment Analyse sollen anhand ausgewählter Beispiele erläutert werden. Zudem sollen auch bekannte +Sentiment-Analyse-Tools wie z.B. FinBERT, VADER, SentiWS etc. näher beschrieben werden. -Am Ende der Seminararbeit soll der sechste Abschnitt eine Zusammenfassung liefern und einen Ausblick darüber geben, in welche Richtung die zukünftige Entwicklung auf dem Gebiet des Text Minings gehen wird. +Am Ende der Seminararbeit soll der sechste Abschnitt eine Zusammenfassung liefern und einen Ausblick darüber geben, in +welche Richtung die zukünftige Entwicklung auf dem Gebiet des Text-Minings gehen wird. diff --git a/documentations/seminararbeiten/Verflechtungsanalyse/Abstract_verflechtungsanalyse.md b/documentations/seminararbeiten/Verflechtungsanalyse/Abstract_verflechtungsanalyse.md index 683a24c..af4b500 100644 --- a/documentations/seminararbeiten/Verflechtungsanalyse/Abstract_verflechtungsanalyse.md +++ b/documentations/seminararbeiten/Verflechtungsanalyse/Abstract_verflechtungsanalyse.md @@ -3,29 +3,26 @@ ## Entwurf des Inhaltsverzeichnis + Stichpunkte 1 Einleitung - 1.1 Problemstellung - 1.2 Zielsetzung und Aufbau der Arbeit - 2 Graphentheorie - 2.1 Begriffliche Definition - 2.2 Sociometry + - sociometry: quantitatives Methode um soziale Beziehungen zu messen. 2.3 Sociogram/ Social Graph -- Ist ein graph der ein Soziales netzwerk darstellt + +- Ist ein graph der ein soziales Netzwerk darstellt - Basiert auf der Graphentheorie - Wurde offiziell Sociogram genannt - von facebook in der F8 2007 vorgestellt 2.4 Social Network Analysis (SNA) -- Social Network Analysis (SNA): Untersuchen von Sozialen Strukturen anhand von Netzwerken und Graphtheorie. +- Social Network Analysis (SNA): Untersuchen von sozialen Strukturen anhand von Netzwerken und Graphtheorie. -3 Ein Social Graph für das Transparentsregister +3 Ein Social Graph für das Transparenzregister 3.5 Handlungsempfehlung @@ -39,10 +36,22 @@ ## Abstract -In der Seminararbeit zum Thema: "Verpflechtungsanalyse der Unternehmen und Personen im Transparenzregister" soll einerseits die Theorie für die Analyse von Verflechtungen vermittelt sowie anhand des Projektess aufgezeigt werden wie diese angewendet werden kann. +In der Seminararbeit zum Thema: "Verpflechtungsanalyse der Unternehmen und Personen im Transparenzregister" soll +einerseits die Theorie für die Analyse von Verflechtungen vermittelt sowie anhand des Projektes aufgezeigt werden wie +diese angewendet werden kann. -Als Fundament dient die Graphentheorie, welche Grundlegen für die Analyse von Netzstrukturen ist. Zunächst werden die wichtigsten Begriffe definiert und es wird eine Einführung ins Thema der Graphentheorie mit Beispielen und Erläuterung gegeben. Darauffolgend wird tiefer in das Thema eingetaucht und sich mit dem Bereich Sociogram/ Social Graph auseinandergesetzt. Ein Sociogram ist ein Model eines Netzwerks von sozialen Verbindungen die durch einen Graphen repräsentiert werden. Diese Idee wurde 2007 von Facebook als Social Graph in der F8 vorgestellt. Diese Art von Graph basiert auf der Graphentheorie. Die stärken dieses Graphen liegen in der Veranschaulichung der sozialen Verflechtungen. Daher wird der Social Graph für die Analyse der Verflechtungen innerhalb des Transparenzregisters genutzt. +Als Fundament dient die Graphentheorie, welche Grundlegen für die Analyse von Netzstrukturen ist. Zunächst werden die +wichtigsten Begriffe definiert und es wird eine Einführung ins Thema der Graphentheorie mit Beispielen und Erläuterung +gegeben. Darauffolgend wird tiefer in das Thema eingetaucht und sich mit dem Bereich Sociogram/ Social Graph +auseinandergesetzt. Ein Sociogram ist ein Model eines Netzwerks von sozialen Verbindungen die durch einen Graphen +repräsentiert werden. Diese Idee wurde 2007 von Facebook als Social Graph in der F8 vorgestellt. Diese Art von Graph +basiert auf der Graphentheorie. Die Stärken dieses Graphen liegen in der Veranschaulichung der sozialen Verflechtungen. +Daher wird der Social Graph für die Analyse der Verflechtungen innerhalb des Transparenzregisters genutzt. -Im Hauptteil der Seminararbeit wird aufgezeigt wie der Social Graph auf das Transparenzregister angewendet werden könnte. Es wird gezeigt welche Komponenten gebildet werden müssten und wie die Daten aufbereitet werden um einen Social graph bauen zu können. Des Weiteren wird auf die Formel und Algorithmen eingegangen die zur Erstellung des Graphen nötig sind. Dabei orientiert sich die Arbeit an Beispielen um die Theorie nachvollziebar zu vermitteln. Dieser Abschnitt wird mit einer Handlungsempfehlung für das Projekt abgeschlossen. +Im Hauptteil der Seminararbeit wird aufgezeigt wie der Social Graph auf das Transparenzregister angewendet werden +könnte. Es wird gezeigt welche Komponenten gebildet werden müssten und wie die Daten aufbereitet werden um einen Social +graph bauen zu können. Des Weiteren wird auf die Formel und Algorithmen eingegangen die zur Erstellung des Graphen nötig +sind. Dabei orientiert sich die Arbeit an Beispielen, um die Theorie nachvollziehbar zu vermitteln. Dieser Abschnitt +wird mit einer Handlungsempfehlung für das Projekt abgeschlossen. Abgeschlossen wird das Werk mit einer kritischen Reflexion, gefolgt von einem Fazit und einem Ausblick. diff --git a/src/aki_prj23_transparenzregister/models/news.py b/src/aki_prj23_transparenzregister/models/news.py index 01cd04c..1c9ad8f 100644 --- a/src/aki_prj23_transparenzregister/models/news.py +++ b/src/aki_prj23_transparenzregister/models/news.py @@ -1,4 +1,4 @@ -"""News mnodel.""" +"""News model.""" from dataclasses import asdict, dataclass diff --git a/src/aki_prj23_transparenzregister/utils/data_extraction/bundesanzeiger.py b/src/aki_prj23_transparenzregister/utils/data_extraction/bundesanzeiger.py index 104e48b..bdb2e29 100644 --- a/src/aki_prj23_transparenzregister/utils/data_extraction/bundesanzeiger.py +++ b/src/aki_prj23_transparenzregister/utils/data_extraction/bundesanzeiger.py @@ -52,7 +52,8 @@ class Bundesanzeiger: # Remove irrelevant columns return df_data.drop(["raw_report"], axis=1) - def filter_reports(self, df_reports: pd.DataFrame) -> pd.DataFrame: + @staticmethod + def filter_reports(df_reports: pd.DataFrame) -> pd.DataFrame: """Returns only reports of type `Jahresabschluss` and extracts the year of the report. Args: @@ -73,7 +74,8 @@ class Bundesanzeiger: ) return df_reports.drop(["name", "report", "type"], axis=1) - def extract_auditor_company(self, report: str) -> str | None: + @staticmethod + def extract_auditor_company(report: str) -> str | None: """Extract the name of an auditor company from the given yearly results report. Args: diff --git a/src/aki_prj23_transparenzregister/utils/data_transfer.py b/src/aki_prj23_transparenzregister/utils/data_transfer.py index 21ebba5..04f0f08 100644 --- a/src/aki_prj23_transparenzregister/utils/data_transfer.py +++ b/src/aki_prj23_transparenzregister/utils/data_transfer.py @@ -401,7 +401,7 @@ def add_relationships(companies: list[dict[str, dict]], db: Session) -> None: for relationship in relationships: try: - add_relationship(relationship, company_id=company_id, db=db) + add_relationship(relationship, company_id, db) except Exception: db.rollback() pbar.update() diff --git a/tests/models/news_test.py b/tests/models/news_test.py index 532a5c2..ddda1fc 100644 --- a/tests/models/news_test.py +++ b/tests/models/news_test.py @@ -1,4 +1,4 @@ -"""Test Models.nesws.""" +"""Test Models.news.""" from aki_prj23_transparenzregister.models.news import News diff --git a/tests/utils/data_extraction/bundesanzeiger_test.py b/tests/utils/data_extraction/bundesanzeiger_test.py index 94af1ca..7b26892 100644 --- a/tests/utils/data_extraction/bundesanzeiger_test.py +++ b/tests/utils/data_extraction/bundesanzeiger_test.py @@ -49,7 +49,7 @@ def test_extract_kpis() -> None: assert result[FinancialKPIEnum.LIABILITIES.value] == liabilities -def test_extracct_financial_results() -> None: +def test_extract_financial_results() -> None: input_data = """
Die Prj23_Transparenzregister GmbH erwirtschaftete einen Jahresüberschuss 10.000,43 €. diff --git a/tests/utils/data_extraction/unternehmensregister/extract_test.py b/tests/utils/data_extraction/unternehmensregister/extract_test.py index 14f3763..ca2fca5 100644 --- a/tests/utils/data_extraction/unternehmensregister/extract_test.py +++ b/tests/utils/data_extraction/unternehmensregister/extract_test.py @@ -1,4 +1,4 @@ -"""Testing utisl/data_extraction/unternehmensregister/extract.py.""" +"""Testing utils/data_extraction/unternehmensregister/extract.py.""" import os from tempfile import TemporaryDirectory diff --git a/tests/utils/data_transfer_test.py b/tests/utils/data_transfer_test.py index b26c404..bf01df4 100644 --- a/tests/utils/data_transfer_test.py +++ b/tests/utils/data_transfer_test.py @@ -601,6 +601,7 @@ def test_add_relationships_none(empty_relations: list, full_db: Session) -> None data_transfer.add_relationships([], full_db) +# noinspection SpellCheckingInspection @pytest.mark.parametrize( "documents", [