{
 "cells": [
  {
   "attachments": {
    "grafik.png": {
     "image/png": "[encoded data, 53612 characters]"
    }
   },
   "cell_type": "markdown",
   "id": "8e40a4b1",
   "metadata": {},
   "source": [
    "# Aufgabe: Welche Daten müssen zeitlich persistiert werden und wie können diese gespeichert werden?\n",
    "Autor: Sebastian \\\n",
    "Datum: 20-04-2023\n",
    "\n",
    "Eine Frage ist, welche Daten von Kapitalgesellschaften benötigt werden, um eine Historie zu visualisieren und auszuwerten.\n",
    "Dafür werden Daten von Kapitalgesellschaften über **Statista** verwendet.\\\n",
    "Für dieses Portal gibt es eine Hochschullizenz. Man kann sich über den folgenden Link anmelden: https://de.statista.com/login/campus/ und wählt die Fachhochschule Südwestfalen aus. \\\n",
    "Man wird auf die Anmeldeseite der FH SWF geleitet, meldet sich dort an und willigt der Datenweitergabe zu.\n",
    "\n",
    "> 20.04.2023: Für API ist ein Key notwendig, den es für die FH scheinbar nicht gibt! Daten müssen manuell ermittelt werden!\n",
    "\n",
    "> Die Daten sind nicht homogen formatiert, d.h. Formatierung und Skalierung (Millonen, Milliarden €) müssen angepasst werden!\n",
    "\n",
    "### Kennzahlen\n",
    "In einer ersten Betrachtung werden die vorgeschlagenen Kennzahlen betrachtet:\n",
    "- Umsatz\n",
    "- EBIT\n",
    "- EBIT Marge\n",
    "- Bilanzsumme\n",
    "- Eigenkapitalanteil (Eigenkapital / Bilanzsumme)\n",
    "- Fremdkapitalanteil (Fremdkapital / Bilanzsumme)\n",
    "- Verschuldungsgrad (Fremdkapital / Eigenkapital)\n",
    "- Eigenkapitalrentabilität (EBIT/Eigenkapital)\n",
    "- Umschlaghäufigkeit des Gesamtkapitals (Umsatz / Bilanzsumme) \n",
    "\n",
    "Im Zuge des Projekts wäre es wünschenswert für jedes beteiligte Unternehmen eine Zeitreihe der oben genannten Kennzahlen zu erhalten, damit man sich die Historie ansehen und ggfs. mit anderen Unternehmen vergleichen kann.\n",
    "\n",
    "Als ersten Anhaltspunkt welche Unternehmen betrachtet werden, wurde nach den 10 größten deutschen Unternehmen gesucht:\n",
    "https://www.ig.com/de/trading-strategien/die-groessten-unternehmen-deutschlands-und-der-welt-220715\n",
    "\n",
    "\n",
    "|Platz |\tUnternehmen |\tBranche |\tMarktkapitalisierung (EUR) in Mrd.|\n",
    "|---|---|---|---|\n",
    "|1. |\tSAP |\tSoftware |\t101,8|\n",
    "|2. |\tDeutsche Telekom |\tTelekommunikation |\t95,8|\n",
    "|3. |\tVolkswagen Vz.| \tAutomobil |\t77,3|\n",
    "|4. |\tSiemens |\tEisen / Stahl \t|77,2|\n",
    "|5. |\tAllianz |\tVersicherung |\t74,3|\n",
    "|6. |\tMercedes-Benz Group| \tAutomobil |\t58,8|\n",
    "|7. |\tBayer| \tPharma |\t56,3|\n",
    "|8. |\tSiemens Healthineers| \tMedical Equipment| \t54,1|\n",
    "|9. |\tDeutsche Post| \tGütertransport| \t44,4|\n",
    "|10. |\tBMW |\tAutomobil| \t44,4|\n",
    "\n",
    "Eine erste Idee:\n",
    "![grafik.png](attachment:grafik.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "01459424",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import ipywidgets as widgets\n",
    "pd.options.plotting.backend = \"plotly\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2d2f79a",
   "metadata": {},
   "source": [
    "**Einlesen der bestehenden Datensätze**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4862a09e",
   "metadata": {},
   "outputs": [],
   "source": [
    "dfEON=pd.read_csv('EON_Data.csv', index_col=0, sep=';') \n",
    "dfBASF=pd.read_csv('BASF_Data.csv', index_col=0, sep=';') \n",
    "dfTELEKOM=pd.read_csv('TELEKOM_Data.csv', index_col=0, sep=';') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9f84b5d6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Umsatz [Mill. €]    73100.0\n",
       "EBIT [Mill. €]       9160.0\n",
       "EBITDA [Mill. €]        NaN\n",
       "Name: 2016, dtype: float64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#select a specific year\n",
    "dfTELEKOM.loc[2016]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51453575",
   "metadata": {},
   "source": [
    "### Mini GUI\n",
    "Folgend wird eine minimale GUI implementiert, welche die drei Metriken (Umsatz, EBIT, EBITDA) von drei Unternehmen visualisiert."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c871a495",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "65844e8711d241c5a4dcea9a8f5fa4c1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(Dropdown(description='Company:', options=('BASF', 'EON', 'Telekom'), value='BASF'), Drop…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def get_Data(company, metric):\n",
    "    if company=='BASF':\n",
    "        dfSelect=dfBASF\n",
    "        print('BASF')\n",
    "    if company=='EON':\n",
    "        dfSelect=dfEON\n",
    "        print('EON') \n",
    "    if company=='Telekom':\n",
    "        dfSelect=dfTELEKOM\n",
    "        print('Telekom')   \n",
    "    fig=dfSelect.plot()\n",
    "    fig.show()   \n",
    "    return\n",
    "\n",
    "W_company=widgets.Dropdown(\n",
    "    options=['BASF', 'EON', 'Telekom'],\n",
    "    value='BASF',\n",
    "    description='Company:',\n",
    "    disabled=False,\n",
    ")\n",
    "W_metric=widgets.Dropdown(\n",
    "    options=['EBIT', 'EBITDA', 'Volume'],\n",
    "    value='Volume',\n",
    "    description='Metric:',\n",
    "    disabled=False,\n",
    ")\n",
    "\n",
    "out=widgets.interact(get_Data, company=W_company, metric=W_metric)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fe99f2c6",
   "metadata": {},
   "source": [
    "### Fazit\n",
    "Mit wieviel Datensätzen müssen wir im Projekt rechnen? \\\n",
    "Wir nehmen an, dass die Datenbank 100 deutsche Unternehmen beinhaltet, welches je mit 9 Metriken bewertet wird und max. 4 Daten punkte (Quartalszahlen) vorliegen. Ein realistischer Rückblick ist über die letzten 15 Jahre möglich, da ansonsten die Datengrundlage dünn wird. \n",
    "\n",
    "Eine kurze Überschlagsrechnung ergibt: \n",
    "\n",
    "\n",
    "$\n",
    "n_{Unternehmen} = 100 \\newline\n",
    "n_{Metriken}=9 \\newline\n",
    "n_{Datenpunkte pro Jahr }=4 \\newline\n",
    "n_{Jahre} = 15 \\newline \\newline\n",
    "n_{Datensätze} = n_{Unternehmen} *n_{Metriken} * n_{Datenpunkte pro Jahr }  *n_{Jahre} \\newline \n",
    "n_{Datensätze} = 100 * 9 * 4 * 15 = 54000 Datenpunkte\n",
    "$\n",
    "\n",
    "D.h. für jedes Unternehmen wären es 540 Datenpunkte, welche sich auf 9 Metriken aufteilen. \\\n",
    "Diese Datenmenge (60 Einträge pro Metrik) könnte als **JTS json Time Series** abgespeichert werden.\n",
    "\n",
    "### JTS - json Time series\n",
    "\n",
    "\n",
    "Example for a jts document(https://docs.eagle.io/en/latest/reference/historic/jts.html):\n",
    "\n",
    "``` json\n",
    "{\n",
    "    \"docType\": \"jts\",\n",
    "    \"version\": \"1.0\",\n",
    "    \"header\": {\n",
    "        \"startTime\": \"2018-08-16T02:00:00.000Z\",\n",
    "        \"endTime\": \"2018-08-16T02:20:43.000Z\",\n",
    "        \"recordCount\": 5,\n",
    "        \"columns\": {\n",
    "            \"0\": {\n",
    "                \"id\": \"541a5a129bc9b4035f906d70\",\n",
    "                \"name\": \"Temperature\",\n",
    "                \"dataType\": \"NUMBER\",\n",
    "                \"renderType\": \"VALUE\",\n",
    "                \"format\": \"0.###\",\n",
    "                \"aggregate\": \"NONE\"\n",
    "            }\n",
    "        }\n",
    "    },\n",
    "    \"data\": [\n",
    "        {\n",
    "            \"ts\": \"2018-08-16T02:00:39.000Z\",\n",
    "            \"f\": { \"0\": {\"v\": 99, \"q\": 100, \"a\": \"site maintenance\"} }\n",
    "        },\n",
    "        {\n",
    "            \"ts\": \"2018-08-16T02:05:40.000Z\",\n",
    "            \"f\": { \"0\": {\"v\": 28.22 } }\n",
    "        },\n",
    "        {\n",
    "            \"ts\": \"2018-08-16T02:10:41.000Z\",\n",
    "            \"f\": { \"0\": {\"a\": \"sensor recalibrated\" } }\n",
    "        },\n",
    "        {\n",
    "            \"ts\": \"2018-08-16T02:15:42.000Z\",\n",
    "            \"f\": { \"0\": {\"v\": 29.2, \"q\": 100 } }\n",
    "        },\n",
    "        {\n",
    "            \"ts\": \"2018-08-16T02:20:43.000Z\",\n",
    "            \"f\": { \"0\": {\"v\": 29.18 } }\n",
    "        }\n",
    "    ]\n",
    "}\n",
    "\n",
    "```\n",
    "\n",
    "### Mongo DB\n",
    "Mongo DB bietet die Möglichkeit auch Zeitseriendaten zu persistieren. Das bietet den Vorteil nicht mehrere Datenbanksysteme für die Entitäten und Zeitserien aufzusetzen, sondern ein Datenbanksystem zu verwenden."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "37033e3e",
   "metadata": {},
   "source": [
    "Überlegungen zur Architektur\n",
    "\n",
    "    Datenintegrität und -sicherheit: Wenn die Sicherheit Ihrer Daten und die Vermeidung von Datenverlusten Priorität haben, kann es sinnvoll sein, die Daten in einer zentralisierten Datenbank zu speichern. Eine solche Datenbank kann eine höhere Kontrolle über den Zugriff auf die Daten bieten und eine bessere Überwachung von Änderungen und Zugriffen ermöglichen.\n",
    "\n",
    "    Skalierbarkeit: Wenn Sie erwarten, dass Ihre Daten in Zukunft stark anwachsen werden, kann es sinnvoll sein, eine verteilte Architektur zu wählen, um die Skalierbarkeit Ihrer Systeme sicherzustellen.\n",
    "\n",
    "    Zugriff auf die Daten: Wenn verschiedene Abteilungen oder Anwendungen auf unterschiedliche Arten auf die Daten zugreifen müssen, kann eine verteilte Architektur sinnvoll sein, um sicherzustellen, dass die Daten für alle Benutzer zugänglich sind.\n",
    "\n",
    "    Analyse: Wenn Sie Datenanalysen durchführen möchten, kann es vorteilhaft sein, die Daten in unterschiedlichen Formaten (z.B. als flache Dateien oder in einer NoSQL-Datenbank) zu speichern, um schnellere Abfragen und Analysen zu ermöglichen.\n",
    "\n",
    "Basierend auf diesen Überlegungen kann es sinnvoll sein, die verschiedenen Datenarten in verschiedenen Datenbanken oder sogar auf verschiedenen Servern zu speichern, um die Vorteile jeder Architektur nutzen zu können. Allerdings kann dies auch zu zusätzlichen Komplexitäten in der Verwaltung der Daten führen. Eine geeignete Architektur hängt also von den spezifischen Anforderungen Ihrer Daten und Ihrer Organisation ab.\n",
    "\n",
    "Hier ist ein möglicher Ansatz für die Architektur Ihrer Daten:\n",
    "\n",
    "    Stammdaten: Die Stammdaten könnten in einer zentralisierten Datenbank gespeichert werden, um eine hohe Datenintegrität und -sicherheit zu gewährleisten. Eine relationale Datenbank wie MySQL oder PostgreSQL könnte für diese Daten geeignet sein.\n",
    "\n",
    "    Social Graph Daten: Die Social Graph Daten könnten in einer NoSQL-Datenbank wie MongoDB oder Cassandra gespeichert werden, um die Skalierbarkeit zu gewährleisten und schnelle Abfragen auf den Daten durchzuführen.\n",
    "\n",
    "    Stimmungsdaten: Die Stimmungsdaten könnten in einer Datenbank mit Textsuchfunktionen wie Elasticsearch oder Solr gespeichert werden, um schnelle Abfragen und Analysen durchzuführen.\n",
    "\n",
    "    Zeitseriendaten: Die Zeitseriendaten könnten in einer spezialisierten Zeitreihendatenbank wie InfluxDB oder TimescaleDB gespeichert werden, um schnelle Abfragen und Analysen auf den Daten durchzuführen.\n",
    "\n",
    "Es ist wichtig, sicherzustellen, dass die verschiedenen Datenbanken in Ihrer Architektur gut miteinander integriert sind, um eine effektive Analyse der Daten zu ermöglichen. Eine Möglichkeit besteht darin, Daten aus den verschiedenen Datenbanken in ein zentrales Data Warehouse oder Data Lake zu laden, um die Analyse der Daten zu erleichtern.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f747140",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "d4831944",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  },
  "vscode": {
   "interpreter": {
    "hash": "c9f5fc863bfeb52628e16391e02b82346ddba486f3a90a174bf61c42516759ec"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
