This commit is contained in:
2023-06-20 15:36:06 +00:00
parent de85615e74
commit 515f0913b2
123 changed files with 0 additions and 0 deletions

View File

@ -0,0 +1,192 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften &mdash; transparenzregister 0.1.0 documentation</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/copybutton.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../../_static/jquery.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/sphinx_highlight.js"></script>
<script src="../../_static/clipboard.min.js"></script>
<script src="../../_static/copybutton.js"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
transparenzregister
</a>
<div class="version">
0.1.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Project planing</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../Pflichtenheft.html">Pflichtenheft: Kapitalgesellschaften referenzregister</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../timeline.html">Timeline</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Meeting Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../meeting-notes/Meeting_2023-03-30.html">Weekly <em>1</em>: 30.03.2023</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../meeting-notes/Meeting_2023-04-13.html">Weekly <em>2</em>: 13.04.2023</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../meeting-notes/Meeting_2023-05-04.html">Weekly <em>3</em>: 04.05.2023</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../meeting-notes/Meeting_2023-05-11.html">Weekly <em>4</em>: 11.05.2023</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../meeting-notes/Meeting_2023_05-25.html">Weekly <em>5</em>: 25.05.2023</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Research</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../RE_Vom-Problem-zur-Loesung.html">Von der Problemstellung zum Lösungskonzept</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data_and_metrics.html">Daten und Kennzahlen von Unternehmen</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data_and_metrics.html#fazit">Fazit</a></li>
<li class="toctree-l1"><a class="reference internal" href="../news_apis.html">Nachrichtenquellen</a></li>
<li class="toctree-l1"><a class="reference internal" href="../resarch-central.html">Research Central</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Modules</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">aki_prj23_transparenzregister</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">transparenzregister</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/research/Timeseries/Overview.md.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="timeseries-deutsch-zeitreihen-im-kontext-des-transparenzregisters-kapitalgesellschaften">
<h1>Timeseries (deutsch: Zeitreihen) im Kontext des Transparenzregisters Kapitalgesellschaften<a class="headerlink" href="#timeseries-deutsch-zeitreihen-im-kontext-des-transparenzregisters-kapitalgesellschaften" title="Permalink to this heading"></a></h1>
<section id="leitfragen">
<h2>Leitfragen<a class="headerlink" href="#leitfragen" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>Was zeichnet Timeseries Daten aus?</p></li>
<li><p>Wie werden Timeseries effizient gespeichert?</p></li>
<li><p>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?</p></li>
<li><p>Passt die Struktur und Handhabung von Timeseries Daten auf den Use Case?</p></li>
<li><p>Wo können die benötigten Daten abgerufen werden?</p></li>
<li><p>Wie könnte ein beispielhafter Datensatz (ggf. in Form eines Pandas DataFrames) aussehen?</p></li>
</ol>
</section>
<section id="timeseries">
<h2>Timeseries<a class="headerlink" href="#timeseries" title="Permalink to this heading"></a></h2>
<p>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 <code class="docutils literal notranslate"><span class="pre">Metriken</span></code> (engl.: Metrics; bei regelmäßigem Intervall) und <code class="docutils literal notranslate"><span class="pre">Ereignissen</span></code> (engl.: Events; bei unregelmäßigen Intervallen) unterschieden.</p>
<p><cite>vgl. <a class="reference external" href="https://www.influxdata.com/what-is-time-series-data/">influxdata - What is time series data?</a></p>
<p>Einige zentrale Eigenschaften von Daten, die als Zeitreihen modelliert werden, sind:</p>
<ol class="arabic simple">
<li><p><code class="docutils literal notranslate"><span class="pre">Unveränderbarkeit</span></code> (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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Lebensdauer</span></code> (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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Aggregation</span></code> (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.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Hohes</span> <span class="pre">Schreib-</span> <span class="pre">zu</span> <span class="pre">Lese-Verhältnis</span></code> (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.</p></li>
</ol>
<p><cite> vgl. <a class="reference external" href="https://tdengine.com/tsdb/characteristics-of-time-series-data/">TDengine - Characteristics of Time-Series Data</a></p>
</section>
<section id="modellierung-relevanter-kennzahlen">
<h2>Modellierung relevanter Kennzahlen<a class="headerlink" href="#modellierung-relevanter-kennzahlen" title="Permalink to this heading"></a></h2>
<section id="ist-die-timeseries-modellierung-fur-den-use-case-geeignet">
<h3>Ist die Timeseries Modellierung für den Use Case geeignet?<a class="headerlink" href="#ist-die-timeseries-modellierung-fur-den-use-case-geeignet" title="Permalink to this heading"></a></h3>
<p>Die im Rahmen der vorher durchgeführten Analyse von für den Use Case <a class="reference internal" href="../data_and_metrics.html"><span class="std std-doc">relevanten Unternehmenskennzahlen</span></a> 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.</p>
<p>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.</p>
<p>In Folge dessen eignet sich eine Zeitreihen basierte Modellierung nicht für die zentralen Unternehmenskennzahlen.</p>
<p>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 <code class="docutils literal notranslate"><span class="pre">Polyglot</span> <span class="pre">persistence</span></code> (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.</p>
<p>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.</p>
<p>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 <code class="docutils literal notranslate"><span class="pre">GraphQL</span></code> sinnvoll. Dies ermöglicht dem Client die gesamte Datenbasis zu durchforsten und den benötigten Datenbestand abzufragen. Der <code class="docutils literal notranslate"><span class="pre">GraphQL</span></code> Server kann dabei durch seine <code class="docutils literal notranslate"><span class="pre">Resolver</span></code> Struktur problemlos mehrere Datenquellen (siehe oben angesprochene <code class="docutils literal notranslate"><span class="pre">Polyglot</span> <span class="pre">Persistence</span></code>) kombinieren.</p>
</section>
<section id="uberblick-uber-datenrelationen">
<h3>Überblick über Datenrelationen<a class="headerlink" href="#uberblick-uber-datenrelationen" title="Permalink to this heading"></a></h3>
<div class="highlight-mermaid notranslate"><div class="highlight"><pre><span></span>
erDiagram
Kapitalgesellschaft ||--o{ Jahresabschluss : veroeffentlicht
Wirtschaftspruefer ||--o{ Jahresabschluss : prueft
Jahresabschluss ||--o{ Metriken : beinhaltet
Kapitalgesellschaft ||--o{ Branche : operiert_in
Person ||--o{ Vorstand : agiert_als
Person ||--o{ Wirtschaftspruefer : agiert_als
Vorstand ||--o{ Kapitalgesellschaft: leitet
Kapitalgesellschaft {
}
Branche {
}
Jahresabschluss {
}
</pre></div>
</div>
</section>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, AKI PRJ23.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>