Merge branch 'main' into feature/Verflechtungsanalyse

This commit is contained in:
RonnyFlex committed 2023-08-10 18:44:55 +02:00
commit a64230b78c
142 files changed
+39518 -803

No files matched your search

-3
View File
@@ -1,3 +0,0 @@
[flake8]
max-line-length = 88
extend-ignore = E203
+61
View File
@@ -0,0 +1,61 @@
name: Documentation-Action
on:
push:
branches:
- main
pull_request:
branches:
- '*'
jobs:
doc-build:
name: Build
runs-on: ubuntu-latest
steps:
- run: sudo apt install pandoc -y
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install and configure Poetry
uses: snok/install-poetry@v1
with:
version: 1.4.2
virtualenvs-create: false
- run: poetry install --only doc,root,develop
- name: Doc-Build
run: |
cd documentations
sphinx-apidoc -o . ../src/aki_prj23_transparenzregister -feP
make html
- name: Package artifact
uses: actions/upload-pages-artifact@v1
with:
path: documentations/_build/html/
doc-deploy:
name: Deployment
runs-on: ubuntu-latest
needs: doc-build
permissions:
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: false
if: github.ref == 'refs/heads/main'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- run: echo "Deployment URL = ${{ steps.deployment.outputs.page_url }}"
- uses: actions/download-artifact@v3
with:
name: github-pages
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
with:
artifact_name: github-pages
+82
View File
@@ -0,0 +1,82 @@
name: Python-Lint
on:
push:
paths:
- '*.py'
- poetry.lock
- pyproject.toml
pull_request:
jobs:
run-linters:
name: Black & mypy
runs-on: ubuntu-latest
steps:
- name: Set up python
id: setup-python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Check out Git repository
uses: actions/checkout@v3
- name: Install and configure Poetry
uses: snok/install-poetry@v1
with:
version: 1.4.2
virtualenvs-create: false
virtualenvs-path: ~/local/share/virtualenvs
- run: poetry install --without develop,doc,test
- name: Run linters
uses: wearerequired/lint-action@v2
with:
black: true
mypy: true
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: chartboost/ruff-action@v1
with:
version: 0.0.277
python-requirements:
name: Check Python Requirements
runs-on: ubuntu-latest
steps:
- name: Set up python
id: setup-python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install and configure Poetry
uses: snok/install-poetry@v1
with:
version: 1.4.2
virtualenvs-path: ~/local/share/virtualenvs
- name: Cache pipenv
id: cache-pipenv
uses: actions/cache@v3
with:
path: ~/.local/share/virtualenvs
key: venv
- name: Check out Git repository
uses: actions/checkout@v3
- name: Poetry export
run: poetry export -f requirements.txt --output requirements.txt
- name: Check license
run: |
poetry run pip install pip-licenses
poetry run pip-licenses --format=markdown --output-file=license-summary.md
- name: Archive license summary
uses: actions/upload-artifact@v3
with:
name: license-summary
path: |
license-summary.md
requirements.txt
- name: Check requirements security with pip-audit
uses: pypa/gh-action-pip-audit@v1.0.0
with:
inputs: requirements.txt
@@ -0,0 +1,131 @@
name: Test & Build
on:
pull_request:
pull_request_target:
push:
paths:
- '*.py'
- poetry.lock
- pyproject.toml
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install and configure Poetry
uses: snok/install-poetry@v1
with:
version: 1.4.2
virtualenvs-path: ~/local/share/virtualenvs
- id: cache-pipenv
uses: actions/cache@v3
with:
path: ~/.local/share/virtualenvs
key: venv
- run: poetry install --without develop,doc,lint
- name: Run test suite
run: |
poetry run pytest --junit-xml=unit-test-results.xml --cov-report "xml:coverage.xml" --cov=src tests/
- name: Archive code coverage results
uses: actions/upload-artifact@v3
with:
name: code-coverage-report
path: |
coverage.xml
.coverage
- name: Archive code coverage results
uses: actions/upload-artifact@v3
with:
name: test-report
path: |
unit-test-results.xml
if-no-files-found: error
coverage_pull_request:
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/download-artifact@v3
with:
name: code-coverage-report
- name: Get Cover
uses: orgoro/coverage@v3.1
with:
coverageFile: coverage.xml
token: ${{ secrets.GITHUB_TOKEN }}
thresholdAll: 0.8
thresholdNew: 0.8
thresholdModified: 0.8
coverage_report:
runs-on: ubuntu-latest
needs: test
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- id: cache-pipenv
uses: actions/cache@v3
with:
path: ~/.local/share/virtualenvs
key: venv
- name: Install and configure Poetry
uses: snok/install-poetry@v1
with:
version: 1.4.2
virtualenvs-path: ~/local/share/virtualenvs
- run: |
poetry install --only test
- uses: actions/download-artifact@v3
with:
name: code-coverage-report
- name: Make Coverage Report
run: |
poetry run coverage html
- name: Archive builds
uses: actions/upload-artifact@v3
with:
name: Coverage Report HTML
path: htmlcov/
build:
runs-on: ubuntu-latest
needs: test
steps:
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install and configure Poetry
uses: snok/install-poetry@v1
with:
version: 1.4.2
virtualenvs-path: ~/local/share/virtualenvs
- id: cache-pipenv
uses: actions/cache@v3
with:
path: ~/.local/share/virtualenvs
key: venv
- name: Check out repository code
uses: actions/checkout@v3
- run: |
poetry install --without develop,doc,lint,test
poetry build
- name: Archive builds
uses: actions/upload-artifact@v3
with:
name: builds
path: dist/
+5
View File
@@ -1,5 +1,6 @@
# Temporary hosting of Deutschland/Bundesanzeiger library
**/deutschland
*secrets.json
# Snyk
.dccache
@@ -209,3 +210,7 @@ replay_pid*
/handelsregister.db
/handelsregister.png
/documentations/_build/
/documentations/aki_prj23_transparenzregister.*
/documentations/modules.rst
/unit-test-results.xml
+22 -40
View File
@@ -12,7 +12,7 @@ repos:
- id: check-xml
- id: check-ast
- id: check-added-large-files
args: [--enforce-all]
args: [--enforce-all --maxkb=50000]
- id: name-tests-test
- id: detect-private-key
- id: check-case-conflict
@@ -23,6 +23,13 @@ repos:
- id: debug-statements
- id: pretty-format-json
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.0.277
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
@@ -33,7 +40,7 @@ repos:
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: v2.8.0
rev: v2.9.0
hooks:
- id: pretty-format-ini
args: [--autofix]
@@ -44,56 +51,31 @@ repos:
exclude: (^poetry.lock$)
- repo: https://github.com/domdfcoding/flake2lint
rev: v0.4.2
hooks:
- id: flake2lint
- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
hooks:
- id: flake8
args: [--config=tox.ini]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.2.0
rev: v1.4.1
hooks:
- id: mypy
additional_dependencies:
- pandas==2.*
- pandas-stubs==2.0.*
- types-requests
- repo: https://github.com/frnmst/md-toc
rev: 8.1.9
hooks:
- id: md-toc
- repo: https://gitlab.com/smop/pre-commit-hooks
rev: v1.0.0
hooks: []
# - id: check-poetry
- repo: https://github.com/python-poetry/poetry
rev: 1.5.0
hooks:
- id: poetry-check
- repo: https://github.com/Lucas-C/pre-commit-hooks-java
rev: 1.3.10
hooks: []
# - id: validate-html
- repo: https://github.com/asottile/pyupgrade
rev: v3.3.2
hooks:
- id: pyupgrade
args: [--py311-plus]
- id: validate-html
- repo: https://github.com/pylint-dev/pylint
rev: v3.0.0a6
hooks: []
# - id: pylint
# args: [--disable=import-error]
- repo: https://github.com/MarcoGorelli/absolufy-imports
rev: v0.3.1
- repo: https://github.com/python-jsonschema/check-jsonschema
rev: 0.23.2
hooks:
- id: absolufy-imports
- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
name: isort (python)
- id: check-github-workflows
+3
View File
@@ -0,0 +1,3 @@
{
"files.eol": "\n"
}
+596 -112
View File
@@ -2,7 +2,11 @@
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# FinBert\n",
"\n",
@@ -19,6 +23,11 @@
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Libraries\n",
"\n",
@@ -31,23 +40,22 @@
"* torchaudio\n",
"* sentencepiece\n",
"* sacremoses"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"ExecuteTime": {
"start_time": "2023-05-01T13:16:08.554998Z",
"end_time": "2023-05-01T13:16:13.740927Z"
"end_time": "2023-05-01T13:16:13.740927Z",
"start_time": "2023-05-01T13:16:08.554998Z"
},
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
"slideshow": {
"slide_type": "skip"
},
"tags": []
},
"outputs": [
@@ -108,26 +116,30 @@
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Importing and creation of models and tokenizer"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-05-01T13:16:15.121662Z",
"start_time": "2023-05-01T13:16:13.743921Z"
},
"jupyter": {
"outputs_hidden": false
},
"tags": [],
"ExecuteTime": {
"start_time": "2023-05-01T13:16:13.743921Z",
"end_time": "2023-05-01T13:16:15.121662Z"
}
"slideshow": {
"slide_type": "subslide"
},
"tags": []
},
"outputs": [],
"source": [
@@ -145,30 +157,39 @@
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Analyze a single sentiment"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-05-01T13:16:15.194193Z",
"start_time": "2023-05-01T13:16:15.122665Z"
},
"jupyter": {
"outputs_hidden": false
},
"ExecuteTime": {
"start_time": "2023-05-01T13:16:15.122665Z",
"end_time": "2023-05-01T13:16:15.194193Z"
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": "+ 0.034084\n0 0.932933\n- 0.032982\ndtype: float32"
"text/plain": [
"+ 0.034084\n",
"0 0.932933\n",
"- 0.032982\n",
"dtype: float32"
]
},
"execution_count": 27,
"metadata": {},
@@ -192,34 +213,29 @@
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Creating test data"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": 28,
"execution_count": null,
"metadata": {
"tags": [],
"ExecuteTime": {
"start_time": "2023-05-01T13:16:15.198186Z",
"end_time": "2023-05-01T13:16:15.208856Z"
}
"end_time": "2023-05-01T13:16:15.208856Z",
"start_time": "2023-05-01T13:16:15.198186Z"
},
"slideshow": {
"slide_type": "skip"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": " text lan\n0 Microsoft fails to hit profit expectations en\n1 Am Aktienmarkt überwieg weiter die Zuversicht,... de\n2 Stocks rallied and the British pound gained. en\n3 Meyer Burger bedient ab sofort australischen M... de\n4 Meyer Burger enters Australian market and exhi... en\n5 J&T Express Vietnam hilft lokalen Handwerksdör... de\n6 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... de\n7 Microsoft aktie fällt. de\n8 Microsoft aktie steigt. de",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>text</th>\n <th>lan</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Microsoft fails to hit profit expectations</td>\n <td>en</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Am Aktienmarkt überwieg weiter die Zuversicht,...</td>\n <td>de</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Stocks rallied and the British pound gained.</td>\n <td>en</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Meyer Burger bedient ab sofort australischen M...</td>\n <td>de</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Meyer Burger enters Australian market and exhi...</td>\n <td>en</td>\n </tr>\n <tr>\n <th>5</th>\n <td>J&amp;T Express Vietnam hilft lokalen Handwerksdör...</td>\n <td>de</td>\n </tr>\n <tr>\n <th>6</th>\n <td>7 Experten empfehlen die Aktie zum Kauf, 1 Exp...</td>\n <td>de</td>\n </tr>\n <tr>\n <th>7</th>\n <td>Microsoft aktie fällt.</td>\n <td>de</td>\n </tr>\n <tr>\n <th>8</th>\n <td>Microsoft aktie steigt.</td>\n <td>de</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"text_df = pd.DataFrame(\n",
" [\n",
@@ -248,44 +264,270 @@
" {\"text\": \"Microsoft aktie fällt.\", \"lan\": \"de\"},\n",
" {\"text\": \"Microsoft aktie steigt.\", \"lan\": \"de\"},\n",
" ]\n",
")\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-01T13:16:15.208856Z",
"start_time": "2023-05-01T13:16:15.198186Z"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>text</th>\n",
" <th>lan</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Microsoft fails to hit profit expectations</td>\n",
" <td>en</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Am Aktienmarkt überwieg weiter die Zuversicht,...</td>\n",
" <td>de</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Stocks rallied and the British pound gained.</td>\n",
" <td>en</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Meyer Burger bedient ab sofort australischen M...</td>\n",
" <td>de</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Meyer Burger enters Australian market and exhi...</td>\n",
" <td>en</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>J&amp;T Express Vietnam hilft lokalen Handwerksdör...</td>\n",
" <td>de</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>7 Experten empfehlen die Aktie zum Kauf, 1 Exp...</td>\n",
" <td>de</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Microsoft aktie fällt.</td>\n",
" <td>de</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Microsoft aktie steigt.</td>\n",
" <td>de</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" text lan\n",
"0 Microsoft fails to hit profit expectations en\n",
"1 Am Aktienmarkt überwieg weiter die Zuversicht,... de\n",
"2 Stocks rallied and the British pound gained. en\n",
"3 Meyer Burger bedient ab sofort australischen M... de\n",
"4 Meyer Burger enters Australian market and exhi... en\n",
"5 J&T Express Vietnam hilft lokalen Handwerksdör... de\n",
"6 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... de\n",
"7 Microsoft aktie fällt. de\n",
"8 Microsoft aktie steigt. de"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"text_df"
]
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"collapsed": false
}
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Analyze multiple Sentiments"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-05-01T13:16:16.132009Z",
"start_time": "2023-05-01T13:16:15.211858Z"
},
"jupyter": {
"outputs_hidden": false
},
"ExecuteTime": {
"start_time": "2023-05-01T13:16:15.211858Z",
"end_time": "2023-05-01T13:16:16.132009Z"
}
},
"outputs": [
{
"data": {
"text/plain": " text lan + 0 \n0 Microsoft fails to hit profit expectations en 0.034084 0.932933 \\\n1 Am Aktienmarkt überwieg weiter die Zuversicht,... de 0.053528 0.027950 \n2 Stocks rallied and the British pound gained. en 0.898361 0.034474 \n3 Meyer Burger bedient ab sofort australischen M... de 0.116597 0.012790 \n4 Meyer Burger enters Australian market and exhi... en 0.187527 0.008846 \n5 J&T Express Vietnam hilft lokalen Handwerksdör... de 0.066277 0.020608 \n6 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... de 0.050346 0.022004 \n7 Microsoft aktie fällt. de 0.066061 0.016440 \n8 Microsoft aktie steigt. de 0.041449 0.018471 \n\n - \n0 0.032982 \n1 0.918522 \n2 0.067165 \n3 0.870613 \n4 0.803627 \n5 0.913115 \n6 0.927650 \n7 0.917498 \n8 0.940080 ",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>text</th>\n <th>lan</th>\n <th>+</th>\n <th>0</th>\n <th>-</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Microsoft fails to hit profit expectations</td>\n <td>en</td>\n <td>0.034084</td>\n <td>0.932933</td>\n <td>0.032982</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Am Aktienmarkt überwieg weiter die Zuversicht,...</td>\n <td>de</td>\n <td>0.053528</td>\n <td>0.027950</td>\n <td>0.918522</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Stocks rallied and the British pound gained.</td>\n <td>en</td>\n <td>0.898361</td>\n <td>0.034474</td>\n <td>0.067165</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Meyer Burger bedient ab sofort australischen M...</td>\n <td>de</td>\n <td>0.116597</td>\n <td>0.012790</td>\n <td>0.870613</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Meyer Burger enters Australian market and exhi...</td>\n <td>en</td>\n <td>0.187527</td>\n <td>0.008846</td>\n <td>0.803627</td>\n </tr>\n <tr>\n <th>5</th>\n <td>J&amp;T Express Vietnam hilft lokalen Handwerksdör...</td>\n <td>de</td>\n <td>0.066277</td>\n <td>0.020608</td>\n <td>0.913115</td>\n </tr>\n <tr>\n <th>6</th>\n <td>7 Experten empfehlen die Aktie zum Kauf, 1 Exp...</td>\n <td>de</td>\n <td>0.050346</td>\n <td>0.022004</td>\n <td>0.927650</td>\n </tr>\n <tr>\n <th>7</th>\n <td>Microsoft aktie fällt.</td>\n <td>de</td>\n <td>0.066061</td>\n <td>0.016440</td>\n <td>0.917498</td>\n </tr>\n <tr>\n <th>8</th>\n <td>Microsoft aktie steigt.</td>\n <td>de</td>\n <td>0.041449</td>\n <td>0.018471</td>\n <td>0.940080</td>\n </tr>\n </tbody>\n</table>\n</div>"
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>text</th>\n",
" <th>lan</th>\n",
" <th>+</th>\n",
" <th>0</th>\n",
" <th>-</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Microsoft fails to hit profit expectations</td>\n",
" <td>en</td>\n",
" <td>0.034084</td>\n",
" <td>0.932933</td>\n",
" <td>0.032982</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Am Aktienmarkt überwieg weiter die Zuversicht,...</td>\n",
" <td>de</td>\n",
" <td>0.053528</td>\n",
" <td>0.027950</td>\n",
" <td>0.918522</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Stocks rallied and the British pound gained.</td>\n",
" <td>en</td>\n",
" <td>0.898361</td>\n",
" <td>0.034474</td>\n",
" <td>0.067165</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Meyer Burger bedient ab sofort australischen M...</td>\n",
" <td>de</td>\n",
" <td>0.116597</td>\n",
" <td>0.012790</td>\n",
" <td>0.870613</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Meyer Burger enters Australian market and exhi...</td>\n",
" <td>en</td>\n",
" <td>0.187527</td>\n",
" <td>0.008846</td>\n",
" <td>0.803627</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>J&amp;T Express Vietnam hilft lokalen Handwerksdör...</td>\n",
" <td>de</td>\n",
" <td>0.066277</td>\n",
" <td>0.020608</td>\n",
" <td>0.913115</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>7 Experten empfehlen die Aktie zum Kauf, 1 Exp...</td>\n",
" <td>de</td>\n",
" <td>0.050346</td>\n",
" <td>0.022004</td>\n",
" <td>0.927650</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Microsoft aktie fällt.</td>\n",
" <td>de</td>\n",
" <td>0.066061</td>\n",
" <td>0.016440</td>\n",
" <td>0.917498</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Microsoft aktie steigt.</td>\n",
" <td>de</td>\n",
" <td>0.041449</td>\n",
" <td>0.018471</td>\n",
" <td>0.940080</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" text lan + 0 \n",
"0 Microsoft fails to hit profit expectations en 0.034084 0.932933 \\\n",
"1 Am Aktienmarkt überwieg weiter die Zuversicht,... de 0.053528 0.027950 \n",
"2 Stocks rallied and the British pound gained. en 0.898361 0.034474 \n",
"3 Meyer Burger bedient ab sofort australischen M... de 0.116597 0.012790 \n",
"4 Meyer Burger enters Australian market and exhi... en 0.187527 0.008846 \n",
"5 J&T Express Vietnam hilft lokalen Handwerksdör... de 0.066277 0.020608 \n",
"6 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... de 0.050346 0.022004 \n",
"7 Microsoft aktie fällt. de 0.066061 0.016440 \n",
"8 Microsoft aktie steigt. de 0.041449 0.018471 \n",
"\n",
" - \n",
"0 0.032982 \n",
"1 0.918522 \n",
"2 0.067165 \n",
"3 0.870613 \n",
"4 0.803627 \n",
"5 0.913115 \n",
"6 0.927650 \n",
"7 0.917498 \n",
"8 0.940080 "
]
},
"execution_count": 29,
"metadata": {},
@@ -304,19 +546,18 @@
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion about FinBert\n",
"\n",
"The current form of this model can't be used for the german language.\n",
"It could be used if the text is translated beforehand. But it is questionable if that will work well.\n",
"Another way would be to retrain the same model with translated text from this models' data. But I do not believe this to be feasible."
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Translating sentiments before analysing them with FinBert\n",
"\n",
@@ -326,14 +567,17 @@
"[Translator: Helsinki-NLP/opus-mt-de-en](https://huggingface.co/Helsinki-NLP/opus-mt-de-en)\n",
"https://huggingface.co/docs/transformers/main/en/model_doc/marian#transformers.MarianMTModel\n",
"\n"
],
"metadata": {
"collapsed": false
}
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-01T13:16:19.308043Z",
"start_time": "2023-05-01T13:16:16.135009Z"
}
},
"outputs": [],
"source": [
"from transformers import AutoTokenizer, AutoModelForSeq2SeqLM\n",
@@ -341,18 +585,17 @@
"translation_tokenizer = AutoTokenizer.from_pretrained(\"Helsinki-NLP/opus-mt-de-en\")\n",
"\n",
"translation_model = AutoModelForSeq2SeqLM.from_pretrained(\"Helsinki-NLP/opus-mt-de-en\")"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2023-05-01T13:16:16.135009Z",
"end_time": "2023-05-01T13:16:19.308043Z"
}
}
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-01T13:16:19.928232Z",
"start_time": "2023-05-01T13:16:19.310046Z"
}
},
"outputs": [
{
"name": "stderr",
@@ -364,7 +607,9 @@
},
{
"data": {
"text/plain": "'J&T Express Vietnam helps local craft villages increase their reach.'"
"text/plain": [
"'J&T Express Vietnam helps local craft villages increase their reach.'"
]
},
"execution_count": 31,
"metadata": {},
@@ -385,18 +630,17 @@
")\n",
"tf = translate_sentiment(headline)\n",
"tf"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2023-05-01T13:16:19.310046Z",
"end_time": "2023-05-01T13:16:19.928232Z"
}
}
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-01T13:16:23.381261Z",
"start_time": "2023-05-01T13:16:19.933234Z"
}
},
"outputs": [
{
"name": "stdout",
@@ -412,8 +656,112 @@
},
{
"data": {
"text/plain": " lan orig \n0 en NaN \\\n1 de_translated Am Aktienmarkt überwieg weiter die Zuversicht,... \n2 en NaN \n3 de_translated Meyer Burger bedient ab sofort australischen M... \n4 en NaN \n5 de_translated J&T Express Vietnam hilft lokalen Handwerksdör... \n6 de_translated 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... \n7 de_translated Microsoft aktie fällt. \n8 de_translated Microsoft aktie steigt. \n\n text \n0 Microsoft fails to hit profit expectations \n1 On the stock market, confidence continued to p... \n2 Stocks rallied and the British pound gained. \n3 Meyer Burger is now serving the Australian mar... \n4 Meyer Burger enters Australian market and exhi... \n5 J&T Express Vietnam helps local craft villages... \n6 7 experts recommend the stock for purchase, 1 ... \n7 Microsoft Aktie falls. \n8 Microsoft share is rising. ",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>lan</th>\n <th>orig</th>\n <th>text</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>en</td>\n <td>NaN</td>\n <td>Microsoft fails to hit profit expectations</td>\n </tr>\n <tr>\n <th>1</th>\n <td>de_translated</td>\n <td>Am Aktienmarkt überwieg weiter die Zuversicht,...</td>\n <td>On the stock market, confidence continued to p...</td>\n </tr>\n <tr>\n <th>2</th>\n <td>en</td>\n <td>NaN</td>\n <td>Stocks rallied and the British pound gained.</td>\n </tr>\n <tr>\n <th>3</th>\n <td>de_translated</td>\n <td>Meyer Burger bedient ab sofort australischen M...</td>\n <td>Meyer Burger is now serving the Australian mar...</td>\n </tr>\n <tr>\n <th>4</th>\n <td>en</td>\n <td>NaN</td>\n <td>Meyer Burger enters Australian market and exhi...</td>\n </tr>\n <tr>\n <th>5</th>\n <td>de_translated</td>\n <td>J&amp;T Express Vietnam hilft lokalen Handwerksdör...</td>\n <td>J&amp;T Express Vietnam helps local craft villages...</td>\n </tr>\n <tr>\n <th>6</th>\n <td>de_translated</td>\n <td>7 Experten empfehlen die Aktie zum Kauf, 1 Exp...</td>\n <td>7 experts recommend the stock for purchase, 1 ...</td>\n </tr>\n <tr>\n <th>7</th>\n <td>de_translated</td>\n <td>Microsoft aktie fällt.</td>\n <td>Microsoft Aktie falls.</td>\n </tr>\n <tr>\n <th>8</th>\n <td>de_translated</td>\n <td>Microsoft aktie steigt.</td>\n <td>Microsoft share is rising.</td>\n </tr>\n </tbody>\n</table>\n</div>"
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>lan</th>\n",
" <th>orig</th>\n",
" <th>text</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>en</td>\n",
" <td>NaN</td>\n",
" <td>Microsoft fails to hit profit expectations</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>de_translated</td>\n",
" <td>Am Aktienmarkt überwieg weiter die Zuversicht,...</td>\n",
" <td>On the stock market, confidence continued to p...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>en</td>\n",
" <td>NaN</td>\n",
" <td>Stocks rallied and the British pound gained.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>de_translated</td>\n",
" <td>Meyer Burger bedient ab sofort australischen M...</td>\n",
" <td>Meyer Burger is now serving the Australian mar...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>en</td>\n",
" <td>NaN</td>\n",
" <td>Meyer Burger enters Australian market and exhi...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>de_translated</td>\n",
" <td>J&amp;T Express Vietnam hilft lokalen Handwerksdör...</td>\n",
" <td>J&amp;T Express Vietnam helps local craft villages...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>de_translated</td>\n",
" <td>7 Experten empfehlen die Aktie zum Kauf, 1 Exp...</td>\n",
" <td>7 experts recommend the stock for purchase, 1 ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>de_translated</td>\n",
" <td>Microsoft aktie fällt.</td>\n",
" <td>Microsoft Aktie falls.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>de_translated</td>\n",
" <td>Microsoft aktie steigt.</td>\n",
" <td>Microsoft share is rising.</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" lan orig \n",
"0 en NaN \\\n",
"1 de_translated Am Aktienmarkt überwieg weiter die Zuversicht,... \n",
"2 en NaN \n",
"3 de_translated Meyer Burger bedient ab sofort australischen M... \n",
"4 en NaN \n",
"5 de_translated J&T Express Vietnam hilft lokalen Handwerksdör... \n",
"6 de_translated 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... \n",
"7 de_translated Microsoft aktie fällt. \n",
"8 de_translated Microsoft aktie steigt. \n",
"\n",
" text \n",
"0 Microsoft fails to hit profit expectations \n",
"1 On the stock market, confidence continued to p... \n",
"2 Stocks rallied and the British pound gained. \n",
"3 Meyer Burger is now serving the Australian mar... \n",
"4 Meyer Burger enters Australian market and exhi... \n",
"5 J&T Express Vietnam helps local craft villages... \n",
"6 7 experts recommend the stock for purchase, 1 ... \n",
"7 Microsoft Aktie falls. \n",
"8 Microsoft share is rising. "
]
},
"execution_count": 32,
"metadata": {},
@@ -443,23 +791,167 @@
"\n",
"translated_df = translate_sentiments(text_df.copy())\n",
"translated_df"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2023-05-01T13:16:19.933234Z",
"end_time": "2023-05-01T13:16:23.381261Z"
}
}
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2023-05-01T13:16:24.076261Z",
"start_time": "2023-05-01T13:16:23.383269Z"
}
},
"outputs": [
{
"data": {
"text/plain": " lan orig \n0 en NaN \\\n1 de_translated Am Aktienmarkt überwieg weiter die Zuversicht,... \n2 en NaN \n3 de_translated Meyer Burger bedient ab sofort australischen M... \n4 en NaN \n5 de_translated J&T Express Vietnam hilft lokalen Handwerksdör... \n6 de_translated 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... \n7 de_translated Microsoft aktie fällt. \n8 de_translated Microsoft aktie steigt. \n\n text + 0 \n0 Microsoft fails to hit profit expectations 0.034084 0.932933 \\\n1 On the stock market, confidence continued to p... 0.919673 0.018426 \n2 Stocks rallied and the British pound gained. 0.898361 0.034474 \n3 Meyer Burger is now serving the Australian mar... 0.221019 0.006844 \n4 Meyer Burger enters Australian market and exhi... 0.187527 0.008846 \n5 J&T Express Vietnam helps local craft villages... 0.891114 0.007633 \n6 7 experts recommend the stock for purchase, 1 ... 0.040850 0.016722 \n7 Microsoft Aktie falls. 0.027456 0.889160 \n8 Microsoft share is rising. 0.952216 0.019054 \n\n - \n0 0.032982 \n1 0.061901 \n2 0.067165 \n3 0.772137 \n4 0.803627 \n5 0.101254 \n6 0.942427 \n7 0.083384 \n8 0.028730 ",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>lan</th>\n <th>orig</th>\n <th>text</th>\n <th>+</th>\n <th>0</th>\n <th>-</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>en</td>\n <td>NaN</td>\n <td>Microsoft fails to hit profit expectations</td>\n <td>0.034084</td>\n <td>0.932933</td>\n <td>0.032982</td>\n </tr>\n <tr>\n <th>1</th>\n <td>de_translated</td>\n <td>Am Aktienmarkt überwieg weiter die Zuversicht,...</td>\n <td>On the stock market, confidence continued to p...</td>\n <td>0.919673</td>\n <td>0.018426</td>\n <td>0.061901</td>\n </tr>\n <tr>\n <th>2</th>\n <td>en</td>\n <td>NaN</td>\n <td>Stocks rallied and the British pound gained.</td>\n <td>0.898361</td>\n <td>0.034474</td>\n <td>0.067165</td>\n </tr>\n <tr>\n <th>3</th>\n <td>de_translated</td>\n <td>Meyer Burger bedient ab sofort australischen M...</td>\n <td>Meyer Burger is now serving the Australian mar...</td>\n <td>0.221019</td>\n <td>0.006844</td>\n <td>0.772137</td>\n </tr>\n <tr>\n <th>4</th>\n <td>en</td>\n <td>NaN</td>\n <td>Meyer Burger enters Australian market and exhi...</td>\n <td>0.187527</td>\n <td>0.008846</td>\n <td>0.803627</td>\n </tr>\n <tr>\n <th>5</th>\n <td>de_translated</td>\n <td>J&amp;T Express Vietnam hilft lokalen Handwerksdör...</td>\n <td>J&amp;T Express Vietnam helps local craft villages...</td>\n <td>0.891114</td>\n <td>0.007633</td>\n <td>0.101254</td>\n </tr>\n <tr>\n <th>6</th>\n <td>de_translated</td>\n <td>7 Experten empfehlen die Aktie zum Kauf, 1 Exp...</td>\n <td>7 experts recommend the stock for purchase, 1 ...</td>\n <td>0.040850</td>\n <td>0.016722</td>\n <td>0.942427</td>\n </tr>\n <tr>\n <th>7</th>\n <td>de_translated</td>\n <td>Microsoft aktie fällt.</td>\n <td>Microsoft Aktie falls.</td>\n <td>0.027456</td>\n <td>0.889160</td>\n <td>0.083384</td>\n </tr>\n <tr>\n <th>8</th>\n <td>de_translated</td>\n <td>Microsoft aktie steigt.</td>\n <td>Microsoft share is rising.</td>\n <td>0.952216</td>\n <td>0.019054</td>\n <td>0.028730</td>\n </tr>\n </tbody>\n</table>\n</div>"
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>lan</th>\n",
" <th>orig</th>\n",
" <th>text</th>\n",
" <th>+</th>\n",
" <th>0</th>\n",
" <th>-</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>en</td>\n",
" <td>NaN</td>\n",
" <td>Microsoft fails to hit profit expectations</td>\n",
" <td>0.034084</td>\n",
" <td>0.932933</td>\n",
" <td>0.032982</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>de_translated</td>\n",
" <td>Am Aktienmarkt überwieg weiter die Zuversicht,...</td>\n",
" <td>On the stock market, confidence continued to p...</td>\n",
" <td>0.919673</td>\n",
" <td>0.018426</td>\n",
" <td>0.061901</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>en</td>\n",
" <td>NaN</td>\n",
" <td>Stocks rallied and the British pound gained.</td>\n",
" <td>0.898361</td>\n",
" <td>0.034474</td>\n",
" <td>0.067165</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>de_translated</td>\n",
" <td>Meyer Burger bedient ab sofort australischen M...</td>\n",
" <td>Meyer Burger is now serving the Australian mar...</td>\n",
" <td>0.221019</td>\n",
" <td>0.006844</td>\n",
" <td>0.772137</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>en</td>\n",
" <td>NaN</td>\n",
" <td>Meyer Burger enters Australian market and exhi...</td>\n",
" <td>0.187527</td>\n",
" <td>0.008846</td>\n",
" <td>0.803627</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>de_translated</td>\n",
" <td>J&amp;T Express Vietnam hilft lokalen Handwerksdör...</td>\n",
" <td>J&amp;T Express Vietnam helps local craft villages...</td>\n",
" <td>0.891114</td>\n",
" <td>0.007633</td>\n",
" <td>0.101254</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>de_translated</td>\n",
" <td>7 Experten empfehlen die Aktie zum Kauf, 1 Exp...</td>\n",
" <td>7 experts recommend the stock for purchase, 1 ...</td>\n",
" <td>0.040850</td>\n",
" <td>0.016722</td>\n",
" <td>0.942427</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>de_translated</td>\n",
" <td>Microsoft aktie fällt.</td>\n",
" <td>Microsoft Aktie falls.</td>\n",
" <td>0.027456</td>\n",
" <td>0.889160</td>\n",
" <td>0.083384</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>de_translated</td>\n",
" <td>Microsoft aktie steigt.</td>\n",
" <td>Microsoft share is rising.</td>\n",
" <td>0.952216</td>\n",
" <td>0.019054</td>\n",
" <td>0.028730</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" lan orig \n",
"0 en NaN \\\n",
"1 de_translated Am Aktienmarkt überwieg weiter die Zuversicht,... \n",
"2 en NaN \n",
"3 de_translated Meyer Burger bedient ab sofort australischen M... \n",
"4 en NaN \n",
"5 de_translated J&T Express Vietnam hilft lokalen Handwerksdör... \n",
"6 de_translated 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... \n",
"7 de_translated Microsoft aktie fällt. \n",
"8 de_translated Microsoft aktie steigt. \n",
"\n",
" text + 0 \n",
"0 Microsoft fails to hit profit expectations 0.034084 0.932933 \\\n",
"1 On the stock market, confidence continued to p... 0.919673 0.018426 \n",
"2 Stocks rallied and the British pound gained. 0.898361 0.034474 \n",
"3 Meyer Burger is now serving the Australian mar... 0.221019 0.006844 \n",
"4 Meyer Burger enters Australian market and exhi... 0.187527 0.008846 \n",
"5 J&T Express Vietnam helps local craft villages... 0.891114 0.007633 \n",
"6 7 experts recommend the stock for purchase, 1 ... 0.040850 0.016722 \n",
"7 Microsoft Aktie falls. 0.027456 0.889160 \n",
"8 Microsoft share is rising. 0.952216 0.019054 \n",
"\n",
" - \n",
"0 0.032982 \n",
"1 0.061901 \n",
"2 0.067165 \n",
"3 0.772137 \n",
"4 0.803627 \n",
"5 0.101254 \n",
"6 0.942427 \n",
"7 0.083384 \n",
"8 0.028730 "
]
},
"execution_count": 33,
"metadata": {},
@@ -469,30 +961,22 @@
"source": [
"sentiments = analyse_sentiments(translated_df)\n",
"sentiments"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2023-05-01T13:16:23.383269Z",
"end_time": "2023-05-01T13:16:24.076261Z"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion about a translated FinBert\n",
"\n",
"When translating a german text to english before using FinBert the results look much better and could be used for our project.\n",
"The big problem is that it will take even more CPU.\n",
"It should probably be combined with a language recognition and could be used to take multiple languages in since there are many variances of this translation model."
],
"metadata": {
"collapsed": false
}
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
+266 -330
View File
@@ -8,14 +8,6 @@
"# Daten Extraktion aus dem Bundesanzeiger"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"In order to run this notebooks, download the `deutschland` library source code from: [TrisNol/deutschland](https://github.com/TrisNol/deutschland/tree/feat/bundesanzeiger-raw-report) and place it in the `Jupyter/API-tests/Bundesanzeiger/deutschland` directory. Since the PR adding the required features to the main repo has not been completet as of of yet (see: [PR](https://github.com/bundesAPI/deutschland/pull/88)) we have to include it in another way..."
]
},
{
"attachments": {},
"cell_type": "markdown",
@@ -26,18 +18,9 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\trist\\AppData\\Roaming\\Python\\Python310\\site-packages\\requests\\__init__.py:102: RequestsDependencyWarning: urllib3 (1.26.12) or chardet (5.1.0)/charset_normalizer (2.0.12) doesn't match a supported version!\n",
" warnings.warn(\"urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported \"\n"
]
}
],
"outputs": [],
"source": [
"import pandas as pd\n",
"from deutschland.bundesanzeiger import Bundesanzeiger"
@@ -45,26 +28,28 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dict_keys(['040860c00ef9020cfb6db2f58a163256', '9eb401c5af2f0289b8207233bf852b81', 'b14d979ea9f42367d413589050bd04e5', 'ecb8c1011456ea0d40f87e850fc216bf', '3a7c6c1f1d1b89bf5ceb165f0ee88053', '03b2e6aac2f2da2c0c5e8f23de9caec4', 'a5f8dc87fa797e7d2f8fb88c49a23c36', '9a3a8a3e84290ee650cbccf32323b3d7', '6c0fcc20a58aaa18a9d13f35a51e3996', 'bf276d441c339e787e22385d2b69b277', '90a79d28f3c11a2122d2827d2bf6acda', '88c785ce3b3c580dcc285661c7790cca', 'd3064baa8246c3ed02e30b5038200edc', '5bf92eed2808b484c005409764b825b7', 'fece6303c991a280850be1900ff78f8f', '26b0624c60cdbf647f3d45f4917ec6ea', '9f98bee55f598908cca60b6a47e5d49d', '99267bb7474e6d1d5d9e091ba5ef3ee8', '102738ef4b91408ed043d84fe785b50b', '94711f3e509518d073e1760d97550347'])\n"
"dict_keys(['c1051233030a8e0232523052fd4a2310', '57d129e6fd7505d567fa13919e5e6bdd'])\n"
]
}
],
"source": [
"ba = Bundesanzeiger()\n",
"reports = ba.get_reports(\"Atos IT-Dienstleistung und Beratung GmbH\")\n",
"reports = ba.get_reports(\n",
" \"Volkswagen Economy Service Erdle Bernhard Erdle GmbH\"\n",
") # \"Atos IT-Dienstleistung und Beratung GmbH\")\n",
"print(reports.keys())"
]
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
@@ -75,7 +60,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 35,
"metadata": {},
"outputs": [
{
@@ -109,42 +94,18 @@
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2023-03-17</td>\n",
" <td>Aufsichtsrat</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstl...</td>\n",
" <td>2023-05-25</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Volkswagen Economy Service Erdle Bernhard Erdl...</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nVolkswagen Economy Se...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2022-03-25</td>\n",
" <td>2023-05-24</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2021-03-11</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2020-03-24</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtosIT-Dienstleistung...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2018-12-11</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun...</td>\n",
" <td>Volkswagen Economy Service Erdle Bernhard Erdl...</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nVolkswagen Economy Se...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" </tr>\n",
" </tbody>\n",
@@ -153,35 +114,23 @@
],
"text/plain": [
" date name \\\n",
"0 2023-03-17 Aufsichtsrat \n",
"1 2022-03-25 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"2 2021-03-11 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"3 2020-03-24 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"4 2018-12-11 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"0 2023-05-25 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"1 2023-05-24 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"\n",
" company \\\n",
"0 Atos IT-Dienstleistung und Beratung GmbH \n",
"1 Atos IT-Dienstleistung und Beratung GmbH \n",
"2 Atos IT-Dienstleistung und Beratung GmbH \n",
"3 Atos IT-Dienstleistung und Beratung GmbH \n",
"4 Atos IT-Dienstleistung und Beratung GmbH \n",
" company \\\n",
"0 Volkswagen Economy Service Erdle Bernhard Erdl... \n",
"1 Volkswagen Economy Service Erdle Bernhard Erdl... \n",
"\n",
" report \\\n",
"0 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstl... \n",
"1 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun... \n",
"2 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun... \n",
"3 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtosIT-Dienstleistung... \n",
"4 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun... \n",
"0 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nVolkswagen Economy Se... \n",
"1 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nVolkswagen Economy Se... \n",
"\n",
" raw_report \n",
"0 <div class=\"publication_container\">\\n <div cla... \n",
"1 <div class=\"publication_container\">\\n <div cla... \n",
"2 <div class=\"publication_container\">\\n <div cla... \n",
"3 <div class=\"publication_container\">\\n <div cla... \n",
"4 <div class=\"publication_container\">\\n <div cla... "
"1 <div class=\"publication_container\">\\n <div cla... "
]
},
"execution_count": 8,
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
@@ -193,7 +142,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 36,
"metadata": {},
"outputs": [
{
@@ -228,46 +177,19 @@
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2023-03-17</td>\n",
" <td>Aufsichtsrat</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstl...</td>\n",
" <td>2023-05-25</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Volkswagen Economy Service Erdle Bernhard Erdl...</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nVolkswagen Economy Se...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>Aufsichtsrat</td>\n",
" <td>Jahresabschluss</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2022-03-25</td>\n",
" <td>2023-05-24</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>Jahresabschluss</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2021-03-11</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>Jahresabschluss</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2020-03-24</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtosIT-Dienstleistung...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>Jahresabschluss</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2018-12-11</td>\n",
" <td>Jahresabschluss zum Geschäftsjahr vom 01.01.20...</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun...</td>\n",
" <td>Volkswagen Economy Service Erdle Bernhard Erdl...</td>\n",
" <td>\\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nVolkswagen Economy Se...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>Jahresabschluss</td>\n",
" </tr>\n",
@@ -277,35 +199,23 @@
],
"text/plain": [
" date name \\\n",
"0 2023-03-17 Aufsichtsrat \n",
"1 2022-03-25 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"2 2021-03-11 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"3 2020-03-24 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"4 2018-12-11 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"0 2023-05-25 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"1 2023-05-24 Jahresabschluss zum Geschäftsjahr vom 01.01.20... \n",
"\n",
" company \\\n",
"0 Atos IT-Dienstleistung und Beratung GmbH \n",
"1 Atos IT-Dienstleistung und Beratung GmbH \n",
"2 Atos IT-Dienstleistung und Beratung GmbH \n",
"3 Atos IT-Dienstleistung und Beratung GmbH \n",
"4 Atos IT-Dienstleistung und Beratung GmbH \n",
" company \\\n",
"0 Volkswagen Economy Service Erdle Bernhard Erdl... \n",
"1 Volkswagen Economy Service Erdle Bernhard Erdl... \n",
"\n",
" report \\\n",
"0 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstl... \n",
"1 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun... \n",
"2 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun... \n",
"3 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtosIT-Dienstleistung... \n",
"4 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nAtos IT-Dienstleistun... \n",
"0 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nVolkswagen Economy Se... \n",
"1 \\n\\n\\n\\n \\n\\n\\n\\n\\n\\n\\n\\nVolkswagen Economy Se... \n",
"\n",
" raw_report type \n",
"0 <div class=\"publication_container\">\\n <div cla... Aufsichtsrat \n",
"1 <div class=\"publication_container\">\\n <div cla... Jahresabschluss \n",
"2 <div class=\"publication_container\">\\n <div cla... Jahresabschluss \n",
"3 <div class=\"publication_container\">\\n <div cla... Jahresabschluss \n",
"4 <div class=\"publication_container\">\\n <div cla... Jahresabschluss "
"0 <div class=\"publication_container\">\\n <div cla... Jahresabschluss \n",
"1 <div class=\"publication_container\">\\n <div cla... Jahresabschluss "
]
},
"execution_count": 9,
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
@@ -317,21 +227,9 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\trist\\AppData\\Local\\Temp\\ipykernel_6460\\963182859.py:2: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" df_jahresabschluss['jahr'] = df_jahresabschluss.name.apply(\n"
]
},
{
"data": {
"text/html": [
@@ -361,61 +259,34 @@
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2022-03-25</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <th>0</th>\n",
" <td>2023-05-25</td>\n",
" <td>Volkswagen Economy Service Erdle Bernhard Erdl...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>2020</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2021-03-11</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <th>1</th>\n",
" <td>2023-05-24</td>\n",
" <td>Volkswagen Economy Service Erdle Bernhard Erdl...</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>2019</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2020-03-24</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>2018</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2018-12-11</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>2017</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2018-01-03</td>\n",
" <td>Atos IT-Dienstleistung und Beratung GmbH</td>\n",
" <td>&lt;div class=\"publication_container\"&gt;\\n &lt;div cla...</td>\n",
" <td>2016</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" date company \\\n",
"1 2022-03-25 Atos IT-Dienstleistung und Beratung GmbH \n",
"2 2021-03-11 Atos IT-Dienstleistung und Beratung GmbH \n",
"3 2020-03-24 Atos IT-Dienstleistung und Beratung GmbH \n",
"4 2018-12-11 Atos IT-Dienstleistung und Beratung GmbH \n",
"6 2018-01-03 Atos IT-Dienstleistung und Beratung GmbH \n",
" date company \\\n",
"0 2023-05-25 Volkswagen Economy Service Erdle Bernhard Erdl... \n",
"1 2023-05-24 Volkswagen Economy Service Erdle Bernhard Erdl... \n",
"\n",
" raw_report jahr \n",
"1 <div class=\"publication_container\">\\n <div cla... 2020 \n",
"2 <div class=\"publication_container\">\\n <div cla... 2019 \n",
"3 <div class=\"publication_container\">\\n <div cla... 2018 \n",
"4 <div class=\"publication_container\">\\n <div cla... 2017 \n",
"6 <div class=\"publication_container\">\\n <div cla... 2016 "
"0 <div class=\"publication_container\">\\n <div cla... 2020 \n",
"1 <div class=\"publication_container\">\\n <div cla... 2019 "
]
},
"execution_count": 10,
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
@@ -439,7 +310,7 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
@@ -449,11 +320,12 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"sample_report = df_jahresabschluss.iloc[0].raw_report"
"sample_report = df_jahresabschluss.iloc[0].raw_report\n",
"sample_report_content = df_jahresabschluss.iloc[0].raw_report"
]
},
{
@@ -466,45 +338,20 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"import re\n",
"from dataclasses import dataclass\n",
"\n",
"\n",
"@dataclass\n",
"class Auditor:\n",
" name: str\n",
" company: str\n",
"\n",
"\n",
"def extract_auditors(report: str) -> list:\n",
" auditor_regex = r\"[a-z A-Z,.'-]+, Wirtschaftsprüfer\"\n",
" hits = re.findall(auditor_regex, report)\n",
" return [hit.replace(\", Wirtschaftsprüfer\", \"\").lstrip() for hit in hits]"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Eckhard Lewe', 'Renate Hermsdorf']"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"extract_auditors(sample_report)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def extract_auditor_company(report: str) -> str:\n",
" soup = BeautifulSoup(report, features=\"html.parser\")\n",
" temp = soup.find_all(\"b\")\n",
@@ -512,27 +359,37 @@
" br = elem.findChildren(\"br\")\n",
" if len(br) > 0:\n",
" return elem.text.split(\"\\n\")[1].strip()\n",
" return None"
" return None\n",
"\n",
"\n",
"def extract_auditors(report: str) -> list:\n",
" auditor_company = extract_auditor_company(report)\n",
" auditor_regex = r\"[a-z A-Z,.'-]+, Wirtschaftsprüfer\"\n",
" hits = re.findall(auditor_regex, report)\n",
" return [\n",
" Auditor(hit.replace(\", Wirtschaftsprüfer\", \"\").lstrip(), auditor_company)\n",
" for hit in hits\n",
" ]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Warth & Klein Grant Thornton AG'"
"[]"
]
},
"execution_count": 17,
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"extract_auditor_company(sample_report)"
"extract_auditors(sample_report)"
]
},
{
@@ -561,97 +418,177 @@
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>Anhang</th>\n",
" <th>2020 TEUR</th>\n",
" <th>Vorjahr TEUR</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1. Umsatzerlöse</td>\n",
" <td>(1)</td>\n",
" <td>69.819</td>\n",
" <td>77.429</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2. Veränderung des Bestandes an unfertigen Lei...</td>\n",
" <td>NaN</td>\n",
" <td>-41.000</td>\n",
" <td>-66.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3. Sonstige betriebliche Erträge</td>\n",
" <td>(2)</td>\n",
" <td>489.000</td>\n",
" <td>1.816</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4. Materialaufwand</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>a) Aufwendungen für bezogene Waren</td>\n",
" <td>NaN</td>\n",
" <td>-1.220</td>\n",
" <td>-3.003</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 Anhang 2020 TEUR \\\n",
"0 1. Umsatzerlöse (1) 69.819 \n",
"1 2. Veränderung des Bestandes an unfertigen Lei... NaN -41.000 \n",
"2 3. Sonstige betriebliche Erträge (2) 489.000 \n",
"3 4. Materialaufwand NaN NaN \n",
"4 a) Aufwendungen für bezogene Waren NaN -1.220 \n",
"\n",
" Vorjahr TEUR \n",
"0 77.429 \n",
"1 -66.000 \n",
"2 1.816 \n",
"3 NaN \n",
"4 -3.003 "
"{'net_income': 23484.67, 'equity': 65083.84, 'current_assets': 357613.61}"
]
},
"execution_count": 18,
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def extract_kpis(report_content) -> dict:\n",
" \"\"\"\n",
" Source: https://github.com/bundesAPI/deutschland/pull/87/files#diff-f5b9db5384cf523fcc677056065041e7793bfc4da9cf74c4eebd6fab732739bd\n",
" Extracts Key Performance Indicators (KPIs) from the financial reports.\n",
" Args:\n",
" reports (dict): A dictionary containing the financial reports with their hash as keys and report details as values.\n",
" Returns:\n",
" dict: A dictionary containing the extracted KPIs with their report hash as keys and KPIs as values.\n",
" \"\"\"\n",
"\n",
" kpis = {}\n",
"\n",
" # Define KPI patterns to search for\n",
" kpi_patterns = {\n",
" \"revenue\": r\"(?:revenue|umsatz|erlöse)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"net_income\": r\"(?:net income|jahresüberschuss|nettoeinkommen|Ergebnis nach Steuern)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"ebit\": r\"(?:ebit|operating income)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"ebitda\": r\"(?:ebitda)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"gross_profit\": r\"(?:gross profit|bruttogewinn)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"operating_profit\": r\"(?:operating profit|betriebsgewinn)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"assets\": r\"(?:total assets|bilanzsumme)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"liabilities\": r\"(?:total liabilities|gesamtverbindlichkeiten)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"equity\": r\"(?:shareholders'? equity|eigenkapital)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"current_assets\": r\"(?:current assets|umlaufvermögen)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"current_liabilities\": r\"(?:current liabilities|kurzfristige verbindlichkeiten)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"long_term_debt\": r\"(?:long[-\\s]?term debt|langfristige verbindlichkeiten)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"short_term_debt\": r\"(?:short[-\\s]?term debt|kurzfristige verbindlichkeiten)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"cash_and_cash_equivalents\": r\"(?:cash (?:and cash equivalents)?|barmittel)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"dividends\": r\"(?:dividends?|dividende)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" \"cash_flow\": r\"(?:cash flow|cashflow|cash flow from operating activities)[:\\s]*([\\d,.]+[mmb]?)\",\n",
" }\n",
"\n",
" report_kpis = {}\n",
" for kpi, pattern in kpi_patterns.items():\n",
" match = re.search(pattern, report_content, flags=re.IGNORECASE | re.UNICODE)\n",
" if match:\n",
" value = match.group(1)\n",
"\n",
" # Clean and validate the extracted number\n",
" try:\n",
" if not value: # Check if value is empty\n",
" cleaned_value = None\n",
" else:\n",
" multiplier = 1\n",
" if value[-1].lower() == \"m\":\n",
" value = value[:-1]\n",
" multiplier = 1_000_000\n",
" elif value[-1].lower() == \"b\":\n",
" value = value[:-1]\n",
" multiplier = 1_000_000_000\n",
"\n",
" # Remove commas after checking for multipliers\n",
" value = value.replace(\".\", \"\").replace(\",\", \".\").strip()\n",
" cleaned_value = float(value) * multiplier\n",
" except ValueError:\n",
" cleaned_value = None\n",
"\n",
" if cleaned_value is not None:\n",
" report_kpis[kpi] = cleaned_value\n",
" return report_kpis\n",
"\n",
"\n",
"extract_kpis(\n",
" BeautifulSoup(sample_report, features=\"html.parser\").get_text().replace(\"\\n\", \" \")\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"\n",
"with open(\"./temp.txt\", \"w\") as file:\n",
" file.write(\n",
" BeautifulSoup(sample_report, features=\"html.parser\")\n",
" .get_text()\n",
" .replace(\"\\n\", \" \")\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MultiIndex([('Aktiva', 'Unnamed: 0_level_1'),\n",
" ('Aktiva', '31.12.2020 EUR'),\n",
" ('Aktiva', '31.12.2019 EUR')],\n",
" )\n",
"Aktiva Unnamed: 0_level_1 object\n",
" 31.12.2020 EUR object\n",
" 31.12.2019 EUR object\n",
"dtype: object\n",
"MultiIndex([('Passiva', 'Unnamed: 0_level_1'),\n",
" ('Passiva', '31.12.2020 EUR'),\n",
" ('Passiva', '31.12.2019 EUR')],\n",
" )\n",
"Passiva Unnamed: 0_level_1 object\n",
" 31.12.2020 EUR object\n",
" 31.12.2019 EUR object\n",
"dtype: object\n",
"Index(['Angaben zur Identifikation der Gesellschaft laut Registergericht', 'Angaben zur Identifikation der Gesellschaft laut Registergericht.1'], dtype='object')\n",
"Angaben zur Identifikation der Gesellschaft laut Registergericht object\n",
"Angaben zur Identifikation der Gesellschaft laut Registergericht.1 object\n",
"dtype: object\n"
]
},
{
"data": {
"text/plain": [
"{}"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def parse_tables(report: str) -> list:\n",
" result = {}\n",
" soup = BeautifulSoup(report, features=\"html.parser\")\n",
" for table in soup.find_all(\"table\", {\"class\": \"std_table\"}):\n",
" df = pd.read_html(StringIO(str(table)))[0]\n",
" print(df.columns)\n",
" print(df.dtypes)\n",
" return result\n",
"\n",
"\n",
"parse_tables(sample_report)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"ename": "KeyError",
"evalue": "'Passiva'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32mc:\\Users\\trist\\Documents\\Code\\M.Sc\\aki_prj23_transparenzregister\\Jupyter\\API-tests\\Bundesanzeiger\\notebook.ipynb Cell 21\u001b[0m in \u001b[0;36m1\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Users/trist/Documents/Code/M.Sc/aki_prj23_transparenzregister/Jupyter/API-tests/Bundesanzeiger/notebook.ipynb#X26sZmlsZQ%3D%3D?line=10'>11</a>\u001b[0m \u001b[39mreturn\u001b[39;00m result\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Users/trist/Documents/Code/M.Sc/aki_prj23_transparenzregister/Jupyter/API-tests/Bundesanzeiger/notebook.ipynb#X26sZmlsZQ%3D%3D?line=13'>14</a>\u001b[0m bilanz \u001b[39m=\u001b[39m get_bilanz(sample_report)\n\u001b[1;32m---> <a href='vscode-notebook-cell:/c%3A/Users/trist/Documents/Code/M.Sc/aki_prj23_transparenzregister/Jupyter/API-tests/Bundesanzeiger/notebook.ipynb#X26sZmlsZQ%3D%3D?line=14'>15</a>\u001b[0m bilanz[\u001b[39m\"\u001b[39;49m\u001b[39mPassiva\u001b[39;49m\u001b[39m\"\u001b[39;49m]\u001b[39m.\u001b[39mhead()\n",
"\u001b[1;31mKeyError\u001b[0m: 'Passiva'"
]
}
],
"source": [
"def get_bilanz(report: str) -> any:\n",
" result = {}\n",
@@ -672,30 +609,30 @@
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Gesellschafterbeschluss', 'Shareholder Resolution'], dtype='object')\n",
"Index(['Unnamed: 0', 'Anhang', '31.12.2020 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', 'Anhang', '2020 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Aufgliederung nach Tätigkeitsbereichen', '2020 TEUR',\n",
"Int64Index([0, 1], dtype='int64')\n",
"Index(['Unnamed: 0', 'Anhang', '31.12.2021 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', 'Anhang', '2021 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Aufgliederung nach Tätigkeitsbereichen', '2021 TEUR',\n",
" 'Vorjahr TEUR'],\n",
" dtype='object')\n",
"Index(['Aufgliederung nach Inland und Ausland', '2020 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '31.12.2020 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '31.12.2020 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '31.12.2020'], dtype='object')\n",
"Index(['Aufgliederung nach Inland und Ausland', '2021 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '31.12.2021 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '31.12.2021 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '31.12.2021'], dtype='object')\n",
"Index(['Unnamed: 0', 'TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', 'TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', 'TEUR'], dtype='object')\n",
"Int64Index([0, 1, 2], dtype='int64')\n",
"Index(['Unnamed: 0', 'TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '31.12.2020 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '2020 Anzahl MA', 'Vorjahr Anzahl MA'], dtype='object')\n",
"Index(['Unnamed: 0', '31.12.2021 TEUR', 'Vorjahr TEUR'], dtype='object')\n",
"Index(['Unnamed: 0', '2021 Anzahl MA', 'Vorjahr Anzahl MA'], dtype='object')\n",
"MultiIndex([('Art des Geschäfts', 'Unnamed: 0_level_1'),\n",
" ('Art der Beziehung', 'Gesellschafterin TEUR'),\n",
" ('Art der Beziehung', 'Verbundene Unternehmen TEUR')],\n",
@@ -707,24 +644,23 @@
" ('Anschaffungs- oder Herstellungskosten', ...),\n",
" ('Anschaffungs- oder Herstellungskosten', ...)],\n",
" )\n",
"MultiIndex([('Unnamed: 0_level_0', 'Unnamed: 0_level_1'),\n",
" ( 'Abschreibungen', 'Stand 01.01.2020 EUR'),\n",
" ( 'Abschreibungen', 'Abschreibungen des Geschäftsjahres EUR'),\n",
" ( 'Abschreibungen', 'Abgänge Umbuchung EUR'),\n",
" ( 'Abschreibungen', 'Stand 31.12.2020 EUR')],\n",
"MultiIndex([('Unnamed: 0_level_0', ...),\n",
" ( 'Abschreibungen', ...),\n",
" ( 'Abschreibungen', ...),\n",
" ( 'Abschreibungen', ...),\n",
" ( 'Abschreibungen', ...)],\n",
" )\n",
"MultiIndex([('Unnamed: 0_level_0', 'Unnamed: 0_level_1'),\n",
" ( 'Buchwerte', 'Stand 31.12.2020 EUR'),\n",
" ( 'Buchwerte', 'Stand 31.12.2019 EUR')],\n",
" ( 'Buchwerte', 'Stand 31.12.2021 EUR'),\n",
" ( 'Buchwerte', 'Stand 31.12.2020 EUR')],\n",
" )\n",
"Index(['Nichtfinanzieller Leistungsindikator', 'Unnamed: 1', '2020', '2019',\n",
" '2018'],\n",
"Index(['Nichtfinanzieller Leistungsindikator', 'Unnamed: 1', '2021', '2020',\n",
" '2019'],\n",
" dtype='object')\n",
"Index(['Gewinn- und Verlustrechnung', '2020 TEUR', 'Vorjahr TEUR',\n",
"Index(['Gewinn- und Verlustrechnung', '2021 TEUR', 'Vorjahr TEUR',\n",
" 'Veränderung TEUR'],\n",
" dtype='object')\n",
"Index(['Bilanz', '31.12.2020 TEUR', 'Vorjahr TEUR', 'Veränderung TEUR'], dtype='object')\n",
"Index(['Bericht des Aufsichtsrats', 'Report of the Supervisory Board'], dtype='object')\n"
"Index(['Bilanz', '31.12.2021 TEUR', 'Vorjahr TEUR', 'Veränderung TEUR'], dtype='object')\n"
]
}
],
+1
View File
@@ -0,0 +1 @@
data/
+879
View File
@@ -0,0 +1,879 @@
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# News"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tagesschau API"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import requests\n",
"from bs4 import BeautifulSoup\n",
"\n",
"\n",
"class TagesschauAPI:\n",
" def __init__(self):\n",
" self.base_url = \"https://www.tagesschau.de/api2\"\n",
"\n",
" def get_news_for_sector(self, sector: str) -> dict:\n",
" url = f\"{self.base_url}/news/\"\n",
" regions = \",\".join([str(i) for i in range(1, 16)])\n",
" result = requests.get(url=url, params={\"regions\": regions, \"ressort\": sector})\n",
" return result.json()\n",
"\n",
" def custom_search(self, query: str) -> dict:\n",
" url = f\"{self.base_url}/search/\"\n",
" result = requests.get(url=url, params={\"searchText\": query})\n",
" return result.json()\n",
"\n",
" def get_news_details_text(self, url: str) -> dict:\n",
" content = requests.get(url)\n",
" soup = BeautifulSoup(content.text, features=\"html.parser\")\n",
"\n",
" return \" \".join(\n",
" [elem.text.replace(\"\\n\", \" \") for elem in soup.find_all(\"p\")][1:]\n",
" )\n",
"\n",
"\n",
"tagesschau = TagesschauAPI()\n",
"\n",
"data = tagesschau.get_news_for_sector(\"wirtschaft\")\n",
"with open(\"./data/temp.json\", \"w+\", encoding=\"utf-8\") as file:\n",
" json.dump(data, file, ensure_ascii=False)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 54/54 [00:12<00:00, 4.49it/s]\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>title</th>\n",
" <th>date</th>\n",
" <th>source_url</th>\n",
" <th>text</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>f6f64332-a721-43b2-a6e1-0d64be343712</td>\n",
" <td>Bezahlen mit der Karte - bald ohne Maestro</td>\n",
" <td>2023-06-17T07:14:11.918+02:00</td>\n",
" <td>https://www.tagesschau.de/wirtschaft/verbrauch...</td>\n",
" <td>Das Maestro-Logo gehörte bislang normalerweis...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20869ff8-54ac-436d-964d-8d45032467a9</td>\n",
" <td>Durchschnaufen an der Wall Street</td>\n",
" <td>2023-06-16T22:22:05.873+02:00</td>\n",
" <td>https://www.tagesschau.de/wirtschaft/finanzen/...</td>\n",
" <td>Nach einer ereignisreichen Woche haben die US...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>467c0c06-6332-4ab6-8678-666c35388850</td>\n",
" <td>EVG und Deutsche Bahn vertagen sich auf kommen...</td>\n",
" <td>2023-06-16T21:53:30.404+02:00</td>\n",
" <td>https://www.tagesschau.de/wirtschaft/unternehm...</td>\n",
" <td>Die Tarifverhandlungen zwischen Deutscher Bah...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>83e6a13f-2731-41e8-8298-212263e59887</td>\n",
" <td>Wie der Euro von steigenden Zinsen profitiert</td>\n",
" <td>2023-06-16T14:57:03.999+02:00</td>\n",
" <td>https://www.tagesschau.de/wirtschaft/finanzen/...</td>\n",
" <td>Nach der jüngsten Zinserhöhung der EZB ist de...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>a59fb7be-04d1-4c5b-ba8b-b2cafbd6aba7</td>\n",
" <td>Intel will Chipfabrik im polnischen Breslau bauen</td>\n",
" <td>2023-06-16T14:00:01.950+02:00</td>\n",
" <td>https://www.tagesschau.de/wirtschaft/unternehm...</td>\n",
" <td>Der US-Konzern Intel plant eine neue Chipfabr...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id \\\n",
"0 f6f64332-a721-43b2-a6e1-0d64be343712 \n",
"1 20869ff8-54ac-436d-964d-8d45032467a9 \n",
"2 467c0c06-6332-4ab6-8678-666c35388850 \n",
"3 83e6a13f-2731-41e8-8298-212263e59887 \n",
"4 a59fb7be-04d1-4c5b-ba8b-b2cafbd6aba7 \n",
"\n",
" title \\\n",
"0 Bezahlen mit der Karte - bald ohne Maestro \n",
"1 Durchschnaufen an der Wall Street \n",
"2 EVG und Deutsche Bahn vertagen sich auf kommen... \n",
"3 Wie der Euro von steigenden Zinsen profitiert \n",
"4 Intel will Chipfabrik im polnischen Breslau bauen \n",
"\n",
" date \\\n",
"0 2023-06-17T07:14:11.918+02:00 \n",
"1 2023-06-16T22:22:05.873+02:00 \n",
"2 2023-06-16T21:53:30.404+02:00 \n",
"3 2023-06-16T14:57:03.999+02:00 \n",
"4 2023-06-16T14:00:01.950+02:00 \n",
"\n",
" source_url \\\n",
"0 https://www.tagesschau.de/wirtschaft/verbrauch... \n",
"1 https://www.tagesschau.de/wirtschaft/finanzen/... \n",
"2 https://www.tagesschau.de/wirtschaft/unternehm... \n",
"3 https://www.tagesschau.de/wirtschaft/finanzen/... \n",
"4 https://www.tagesschau.de/wirtschaft/unternehm... \n",
"\n",
" text \n",
"0 Das Maestro-Logo gehörte bislang normalerweis... \n",
"1 Nach einer ereignisreichen Woche haben die US... \n",
"2 Die Tarifverhandlungen zwischen Deutscher Bah... \n",
"3 Nach der jüngsten Zinserhöhung der EZB ist de... \n",
"4 Der US-Konzern Intel plant eine neue Chipfabr... "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from tqdm import tqdm\n",
"import pandas as pd\n",
"\n",
"\n",
"news = []\n",
"for news_article in tqdm(data[\"news\"]):\n",
" info = {\n",
" \"id\": news_article[\"externalId\"],\n",
" \"title\": news_article[\"title\"],\n",
" \"date\": news_article[\"date\"],\n",
" \"source_url\": news_article[\"detailsweb\"],\n",
" \"text\": tagesschau.get_news_details_text(news_article[\"detailsweb\"]),\n",
" }\n",
" news.append(info)\n",
"\n",
"df = pd.DataFrame(news)\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"df.to_json(\"./data/news.json\", orient=\"records\", force_ascii=False)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from utils.mongodb.mongo import MongoConnector\n",
"\n",
"connector = MongoConnector(\n",
" hostname=\"localhost\",\n",
" database=\"transparenzregister\",\n",
" username=\"root\",\n",
" password=\"pR0R0v2e2\",\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from utils.mongodb.mongo import MongoNewsService\n",
"\n",
"service = MongoNewsService(connector)\n",
"service.get_all()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"from models.News import News\n",
"\n",
"# service.insert(\n",
"# News(\n",
"# \"abc\", \"Hallo Welt\", \"heute\", \"what does the fox say\", \"https://localhost:8080\"\n",
"# )\n",
"# )"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'id': 'f6f64332-a721-43b2-a6e1-0d64be343712',\n",
" 'title': 'Bezahlen mit der Karte - bald ohne Maestro',\n",
" 'date': '2023-06-17T07:14:11.918+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/girocard-maestro-mastercard-visa-zahlungssystem-100.html',\n",
" 'text': ' Das Maestro-Logo gehörte bislang normalerweise zur Girocard, der früheren EC-Karte. Nun wird Maestro nach und nach aufs internationale Zahlungssystem von Mastercard und Visa umgestellt. Was dabei zu beachten ist. Manche Kunden deutscher Banken und Sparkassen sind verunsichert. Denn ab dem 1. Juli wird das gewohnte Maestro-Logo bei vielen neuen Girokarten - den ehemaligen EC-Karten - nicht mehr auf der Vorderseite prangen. Keinen Grund zur Aufregung sieht Oliver Hommel von Euro Kartensysteme in Frankfurt, dem Gemeinschaftsunternehmen der deutschen Banken und Sparkassen, das sich um die Einsatzmöglichkeiten der Girocard in ganz Europa kümmert: \"Die bestehenden Karten bleiben bis zum Ablaufdatum gültig und können auch weiterhin eingesetzt werden.\" Noch nie funktionierte die deutsche Girocard im Ausland: Sie war und ist auf eine zusätzliche Funktion angewiesen. Bisher hat Mastercard diese Funktion mit dem Maestro-System ermöglicht. Dass das Maestro-System ab dem 1. Juli sukzessive nicht mehr eingesetzt wird, ist eine Entscheidung des Unternehmens Mastercard, nicht eine der deutschen Banken und Sparkassen. Der US-Zahlungsdienstanbieter vereinheitlicht sein internationales Geschäft. 25.04.2023 Die Pläne für ein europäisches Zahlungssystem werden konkreter. mehr Doch das funktioniert offenbar nicht ganz reibungslos. Anders als ursprünglich geplant, steigen nicht alle Banken ab dem 1. Juli um. Sie habe keine Übersicht darüber, welche Geldinstitute trotz der Frist zunächst weiter Karten mit Maestro-Funktion ausgeben, so Tanja Beller vom Bundesverband Deutscher Banken. Mastercard bestätigt auf BR-Anfrage, \"bei technischen Herausforderungen finden wir zusammen mit unseren Partnern Migrationspläne, die im Einzelfall auch Übergangsfristen beinhalten können\". Die Sparkassen zumindest machen Nägel mit Köpfen: ab dem 1. Juli werde es \"nur noch die neuen Sparkassen-Cards geben, die eine\\xa0Kombination aus einer girocard und einer Debitkarte von Mastercard oder Visa\\xa0sind\", so der Deutsche Sparkassen- und Giroverband. 08.06.2023 Dispozinsen in Deutschland sind zuletzt stark angestiegen. Dabei gibt es große Preisunterschiede bei den Banken. mehr Unabhängig vom konkreten Datum im Einzelfall einer Bank - es ist unumkehrbar: Girokarten werden mit dem internationalen Debit-System von Mastercard ausgestattet. Visa bietet dies bereits mit dem VPay-System an. Die internationale Funktion von Visa und Mastercard gilt für die Girocard selbst - als sogenannter Co-Badge - oder für neue eigene Debitkarten der US-Firmen. Viele deutsche Direktbanken geben sie mittlerweile aus. Für beide Systeme gilt: Das Girokonto wird sofort mit der Zahlung belastet, ob beim Einkauf im Geschäft oder beim Geldabheben am Automaten. Anders ist das bei einer Kreditkarte: Hier wird in der Regel nur einmal monatlich vom Girokonto abgebucht. 14.02.2023 In Deutschland wird in vier von fünf Fällen mittlerweile kontaktlos mit der Girocard gezahlt. mehr Tanja Beller stellt klar, es handele sich nur um einen Austausch der sogenannten Akzeptanzzeichen: \"Es gilt für den Kunden die Regel: Wenn ich das Logo auf meiner Karte im Ausland an einem Geldautomaten oder an einer elektronischen Kasse finde, dann kann ich die dort einsetzten.\" Bei einer neu ausgegebenen Karte kann es allerdings im Ausland zu Problemen kommen, warnt Stephanie Heise von der Verbraucherzentrale Nordrhein-Westfalen im Interview mit dem Bayerischen Rundfunk: \"Bei Girocards ganz ohne Maestro- oder VPay-Funktion: Diese können dann nicht mehr im Ausland zum Bezahlen genutzt werden.\" 30.05.2023 Immer mehr Sparer legen wieder Festgeld an. mehr Umgekehrt lehnt so mancher Einzelhändler innerhalb Deutschlands die neuen Debitkarten von Visa und Mastercard ab, die keine Girofunktion haben. Das passiert dann, wenn das entsprechende Geschäft auch keine Kreditkarten von Visa- oder Mastercard akzeptiert. Als Grund weisen Händler auf höhere Kosten als bei der Girocard hin. Ob im Urlaub oder daheim - es werde weitere Einsatzmöglichkeiten für die Girokarte mit Visa- oder Mastercard-Debitfunktion geben, erläutert Oliver Hommel: \"Was sicherlich eine Veränderung ist: Bei diesen Kombinationskarten aus Girocard und internationaler Debitkarte hat der Kunde zusätzlich die Option, die Karte online, im Internet einzusetzen.\" hintergrund 27.05.2023 Ein Girokonto bei einem Digitalkonzern? Viele Deutsche können sich das laut einer Umfrage vorstellen. mehr Viele Autovermieter im Ausland würden bei der Abholung eines Mietwagens für die Kaution jedoch weder die neuen Debitkarten mit Visa- oder Mastercard-Logo noch eine deutsche Girocard akzeptieren, so Verbraucherschützerin Stefanie Heise. Hier sei meist eine echte Kreditkarte gefragt. UrlaubLine truncated
" {'id': '20869ff8-54ac-436d-964d-8d45032467a9',\n",
" 'title': 'Durchschnaufen an der Wall Street',\n",
" 'date': '2023-06-16T22:22:05.873+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/marktberichte/marktbericht-dax-kurse-hexensabbat-dow-tesla-rekordhoch-100.html',\n",
" 'text': ' Nach einer ereignisreichen Woche haben die US-Anleger es heute ruhiger angehen lassen. Die Stimmung an der Wall Street bleibt aber gut, denn Rezessionssorgen treten derzeit zurück. Nach einer ereignisreichen Woche ging es heute an der Wall Street ruhiger zu. Die großen US-Aktienindizes bewegten sich lange Zeit um ihre Schlussniveaus, ehe am Ende des Tages noch etwas Verkaufsdruck aufkam. Der Leitindex Dow Jones, der gestern noch 1,2 Prozent gestiegen war, gab am Ende moderat um 0,32 Prozent nach auf 34.299 Punkte. Auf Wochensicht blieb ein Zuwachs von gut 1,2 Prozent. Auch an der Nasdaq und dem S&P-500 ging es mäßig bergab, nachdem die beiden Indizes im frühen Geschäft noch neue Jahreshochs markiert hatten. Die Technologiebörse ging um 0,68, der S&P-500 um 0,37 Prozent niedriger aus dem Handel. Insgesamt beruhigte sich damit das Kursgeschehen nach den jüngsten deutlichen Bewegungen. \"Es war eine sehr volle Woche für Investoren, sagte Chris Zaccarelli, Chefinvestor beim Vermögensberater Independent Advisor Alliance. \"Wir sehen am US-Markt heute eine kleine Pause; die Investoren müssen die Informationen erst mal verdauen.\" Die US-Notenbank Fed hatte am Mittwoch zwar weiter steigende Zinsen signalisiert, Börsianer sehen aber Anzeichen für ein Abklingen der hohen Inflationsraten und rechnen nur noch mit einem Zinsschritt im Juli. Die US-Börsen hatten gestern auf überraschend robuste Konjunkturdaten positiv reagiert, unter anderem die wichtigen Einzelhandelsumsätze aus dem Mai. Trotz des scharfen Zinszyklus der Notenbank Federal Reserve (Fed) zeichnet sich bisher keine tiefere Rezession ab - ein Szenario, das an der Börse gut ankommt und der Zielsetzung der Fed genau entspricht. Allerdings ist gerade der Dow, anders als der DAX, noch nicht auf Rekordhoch. Aktuell fehlt etwa dem Index noch ein Anstieg von über sieben Prozent zu seinem Allzeithoch, das bei 36.942 Punkten liegt. Zudem hat die Börse schon seit einiger Zeit ein heißes neues Thema: KI, also Künstliche Intelligenz, lockt die Anleger zunehmend an den Markt, verspricht doch der Einsatz der selbst lernenden Programme hohe Gewinnsteigerungsmöglichkeiten, unter anderem durch Kostensenkungen. Den Chiphersteller Nvidia machte die-KI-Fantasie erst kürzlich zum Billionen-Unternehmen. Nun erkor Morgan Stanley die Aktien aus diesem Grund zum Top-Favoriten im US-Halbleiterbereich. Trotz der Kursrally sei die Bewertung der Papiere angesichts steigender Gewinnprognosen sogar zurückgegangen, hieß es. Nvidia-Aktien konnten anfänglich stärkere Gewinne nicht halten und schlossen letztlich fast unverändert. Auch bei Adobe setzt sich die KI-Rally zunächst fort, die Aktie zog am Ende noch um 0,9 Prozent an. Der Softwareanbieter hatte am Donnerstagabend seine Jahresziele hochgeschraubt. Viele Analysten reagierten mit teils deutlichen Kurszielerhöhungen. Das zweite Geschäftsquartal habe gezeigt, dass Adobe einer der größten Profiteure des Themas KI ist, schrieb Analyst Kash Rangan von Goldman Sachs. Auch zum Wochenschluss haben die Anleger am deutschen Aktienmarkt zugegriffen und dem Leitindex DAX dabei neue Rekordmarken beschert. Erstmals stieg der Index im Verlauf über 16.400 Punkte, das neue Rekordhoch wurde bei 16.427 Punkten markiert. Ganz halten konnte der DAX das hohe Niveau aber nicht und ging am Ende bei 16.357 Punkten um 0,41 Prozent höher aus dem Markt. Auch auf Basis der Schlusskurse ist das eine neue Bestmarke. Der MDAX, der Index der mittelgroßen Werte, ging bei 27.480 Punkten um 0,55 Prozent höher aus dem Markt. Weder ein weiterhin nicht beendeter Zinszyklus noch eher düstere Konjunkturprognosen können derzeit die Hausse - einen stetigen Anstieg der Börsenkurse - stoppen, so scheint es. \"Die Hausse nährt die Hausse\", lautet ein altes Börsensprichwort, das derzeit den Handel bestimmt. Auf Wochensicht erreichte der DAX auf einen respektablen Gewinn von rund 2,5 Prozent. \"Im Moment ist die Gier größer als die Angst\", sagte Thomas Altmann vom Vermögensverwalter QC Partners. \"Die einzige Angst, die die meisten aktuell umtreibt, ist die Angst, weitere Kursgewinne zu verpassen.\" Allerdings sprang der DAX am sogenannten \"Hexensabbat\" auf sein neues Hoch, also dem gleichzeitigen Verfallstag von Optionen und Futures auf Aktien und Indizes an der Terminbörse Eurex. Das geht häufig mit Kursschwankungen einher, versuchen die Terminmarktakteure doch, die Kurse in die von ihnen gewünschte Richtung zu treiben, vor allem wenn sie auf dem falschen Fuß erwischt werden. Der \"Elchtest\" für das neue Hoch steht von daher also noch aus. Bester DAX-Wert waren Rheinmetall, die Aktie des Rüstungskonzerns und Autozulieferers stieg knapp fünf Prozent. Firmenchef Armin Papperger sagte im Interview mit der Nachrichtenagentur Reuters, dass in den kommenden sechs Wochen mit der Bundesrepublik ein Rahmenvertrag im Volumen von \"einigen Milliarden Euro\" abgeschlossen werde. Die GewiLine truncated
" {'id': '467c0c06-6332-4ab6-8678-666c35388850',\n",
" 'title': 'EVG und Deutsche Bahn vertagen sich auf kommende Woche',\n",
" 'date': '2023-06-16T21:53:30.404+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/bahn-evg-tarifgespraeche-vertagt-100.html',\n",
" 'text': ' Die Tarifverhandlungen zwischen Deutscher Bahn und EVG werden kommende Woche weitergehen. Beide Seiten erklärten, sie hätten \"Verständigungen\" und \"Kompromisslinien\" erarbeitet. Bis zur nächsten Gesprächsrunde soll es keine Streiks geben. Die Eisenbahn- und Verkehrsgewerkschaft (EVG) und die Deutschen Bahn (DB) haben die Tarifgespräche auf kommende Woche vertragt. Dies teilten die Verhandlungspartner am späten Abend übereinstimmend mit. \"Wir haben intensiv verhandelt und zu vielen Themen eine Verständigung erreicht\", erklärte DB-Personalvorstand Martin Seiler. \"Das Ziel ist in Sicht.\" Auch EVG-Tarifvorstand Kristian Loroch sprach von \"zahlreichen Kompromisslinien\", die erarbeitet worden seien. Diese sollten nun \"mit den zuständigen Entscheidergremien\" in der Gewerkschaft ausführlich diskutiert werden. Arbeitsniederlegungen bei der Deutschen Bahn sind nach EVG-Angaben bis zur nächsten Gesprächsrunde ausgeschlossen. 14.06.2023 Die Gewerkschaft EVG und die Bahn haben sich bei den Tarifverhandlungen offenbar angenähert. mehr Eigentlich hatten EVG und Bahn ihre Verhandlungen von Montag an auf fünf Tage angesetzt - sie sollten also bis Freitag gehen. In den letzten Stunden der Verhandlungen dürften vor allem mögliche Entgelterhöhungen und die Laufzeit des Tarifvertrags im Mittelpunkt gestanden haben - die beiden kompliziertesten Themen. Die Gewerkschaft hatte bei einer Zwischenbilanz am Mittwoch bereits hervorgehoben, es gebe dabei viel Konfliktpotenzial. Beide Seiten ließen nach dem Ende offen, in welchen Punkten es Einigungen gab und wo noch Differenzen bleiben. Auch über den Ablauf und die Stimmung wurde weiter nichts bekanntgegeben. 12.06.2023 Im Tarifkonflikt bei der Deutschen Bahn wird von heute an wieder für insgesamt 230.000 Beschäftigte verhandelt. mehr Die Tarifverhandlungen laufen bereits seit Ende Februar. Zwei Mal legte die EVG mit begleitenden Warnstreiks den Bahnverkehr weitgehend lahm. Ein geplanter 50-Stunden-Ausstand im Mai wurde nach juristischer Auseinandersetzung beim Arbeitsgericht in Frankfurt am Main kurzfristig abgesagt. Die Bahn bietet bis zu zwölf Prozent mehr Lohn bei einer Laufzeit von 24 Monaten. Für mittlere Einkommen bedeutet es zehn Prozent mehr, für höhere acht Prozent mehr. Dazu kämen 2850 Euro Ausgleichsprämie für die Inflation noch in diesem Jahr. Die EVG hatte das Angebot zuletzt als unzureichend besonders für untere Lohngruppen bezeichnet, sich aber verhandlungsbereit gezeigt. Die Gewerkschaft fordert für gut 180.000 Beschäftigte zwölf Prozent mehr Lohn, mindestens aber 650 Euro im Monat mehr, bei einer Laufzeit von zwölf Monaten. Dieses Thema im Programm: Über dieses Thema berichtete Deutschlandfunk am 16. Juni 2023 um 22:00 Uhr in den Nachrichten. 09.06.2023 • 13:35 Uhr Audio 14.06.2023 • 15:23 Uhr '},\n",
" {'id': '83e6a13f-2731-41e8-8298-212263e59887',\n",
" 'title': 'Wie der Euro von steigenden Zinsen profitiert',\n",
" 'date': '2023-06-16T14:57:03.999+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/devisen-euro-dollar-zinsen-100.html',\n",
" 'text': ' Nach der jüngsten Zinserhöhung der EZB ist der Euro auf den höchsten Stand seit gut einem Monat gestiegen. Wie sich die Währung in den kommenden Monaten weiter entwickeln könnte - und was das für die Wirtschaft bedeutet. Der Zinsentscheid der Europäischen Zentralbank (EZB) hat den Euro auf den höchsten Stand seit über einem Monat gehievt. Die europäische Gemeinschaftswährung kletterte gestern im späten Handel auf 1,0949 Dollar. Auch heute verharrt sie über der Marke von 1,09 Dollar. Ende September war der Euro noch auf ein 20-Jahres-Tief von 0,9538 Dollar abgerutscht. Doch seitdem erlebt er eine Renaissance. Allein bis Ende des vergangenen Jahres stieg die Währung um mehr als zwölf Prozent und Anfang Mai schließlich mit 1,1068 Dollar auf das höchste Niveau seit März 2022. Was sind die Gründe? Und welche Kräfte wirken generell auf die Entwicklung einer Devise? 15.06.2023 Die Europäische Zentralbank hat den Leitzins um 0,25 Prozentpunkte angehoben. mehr \"Ganz grundsätzlich ist die Währung eines Wirtschaftsraums, dem es gut geht, stärker\", erklärt Sonja Marten, Devisenexpertin bei der DZ Bank, im Gespräch mit tagesschau.de. Das sei wie bei einer Aktie: Titel eines Unternehmens, das viel Geld verdient, laufen erfolgreich. \"Wenn Geld ins Land kommt und Investitionen getätigt werden, steigt die Nachfrage nach der jeweiligen Währung.\" Daher spiele vor allem die Erwartungshaltung über die Konjunktur eine zentrale Rolle. Im Herbst hatten die Sorgen über die Energieversorgung im Winter den Euro Marten zufolge überproportional belastet. Als sich herausstellte, dass die Lage doch nicht so schlimm werde wie befürchtet, habe sich sowohl der wirtschaftliche Ausblick etwas aufgehellt als auch der Eurokurs stabilisiert. Im Frühjahr sei er schließlich wieder schwächer gewesen, da die konjunkturellen Daten aus der Eurozone negativ überrascht hatten, so Marten. Weitere Faktoren für die Kursentwicklung von Währungen sind die Inflation und die Geldpolitik von Zentralbanken. \"Wenn ich höhere Zinsen auf eine Anlage bekomme, erhalte ich dafür mehr Geld und sie wird lohnenswerter\", erläutert Commerzbank-Analystin Esther Reichelt gegenüber tagesschau.de. Für Investitionen in Europa seien internationale Anleger auf Euros angewiesen, wodurch die Nachfrage nach der Währung steigt. 27.01.2023 Der Euro notiert im Vergleich zum Dollar so hoch wie seit April 2022 nicht mehr, was Verbrauchern hilft. mehr Die EZB schraubte den Leitzins gestern um 0,25 Prozentpunkte nach oben - die achte Erhöhung in Folge. Zudem signalisierten die Währungshüter der Eurozone weitere Anhebungen. \"Wir sind noch nicht am Ziel\", sagte EZB-Chefin Christine Lagarde und verwies auf die weiterhin hohe Inflation. Steigt der Eurokurs also weiter? \"Ob Zinserhöhungen positiv oder negativ auf den Euro wirken, hängt davon ab, ob sie den Wertverlust der Inflation ausgleichen\", betont Devisenexpertin Reichelt. Eine hohe Preissteigerung sorge nämlich dafür, dass die Währung an Wert verliert und die Investitionen dementsprechend unattraktiver wird. Darüber hinaus ist der Kurs immer vom Vergleich mit einer anderen Devise und damit vom Wechselkurs beeinflusst. Wenn der Dollarkurs sinkt, notiert der Euro höher und andersherum. Das sei ebenfalls ein wichtiger Aspekt für den Aufschwung des Euro, so Reichelt. \"Seit Herbst kamen zunehmend Spekulationen auf, dass die amerikanische Notenbank ihren Zinserhöhungszyklus bald beendet\". Die Währungshüter der EZB hätten sich zu dem Zeitpunkt dagegen entschlossener gezeigt, mithilfe von Zinsschritten die Inflation zu bekämpfen. In der Regel profitiere der Euro von steigenden Zinsen, sagt auch Marten. \"Wenn die Inflation allerdings hartnäckig bleibt und die EZB gezwungen ist, die Zinsschraube auf Kosten der Wirtschaft immer weiter anzuziehen, kann es irgendwann auch in die andere Richtung laufen\". Das komme zwar nicht häufig vor, doch es gebe durchaus einen \"Kipppunkt\", an dem höhere Zinsen negativ auf Devisen wirken können. 14.06.2023 Wie erwartet hat die US-Notenbank den Leitzins unverändert gelassen - erstmals nach zehn Erhöhungen in Folge. mehr \"Wir haben für den Euro zum Jahresende eine Prognose von 1,12 Dollar\", berichtet Marten. Nachdem Europas Wirtschaft zuletzt eher enttäuschte und die US-Konjunktur positiv überraschte, rechnen die Volkswirte der DZ Bank bald mit einer Umkehr: \"Sie gehen davon aus, dass die USA aufgrund der aggressiven Zinserhöhungen in eine Rezession rutschen wird.\" Die Fed müsse den überhitzten Arbeitsmarkt abkühlen und nehme dafür einen Abschwung in Kauf. Das schwäche den Dollar und stärke wiederum den Euro. Das 12-Monats-Ziel in der Prognose liege bei 1,15 Dollar. \"Unsere Volkswirte erwarten, dass die EZB und die Fed bald ihren Zinserhöhungszyklus im Gleichschritt beendenLine truncated
" {'id': 'a59fb7be-04d1-4c5b-ba8b-b2cafbd6aba7',\n",
" 'title': 'Intel will Chipfabrik im polnischen Breslau bauen',\n",
" 'date': '2023-06-16T14:00:01.950+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/intel-chipproduktion-standort-europa-subventionen-100.html',\n",
" 'text': ' Der US-Konzern Intel plant eine neue Chipfabrik in Polen. Damit baut der Konzern seine Europa-Präsenz weiter aus. Im Streit über Subventionen für das geplante Werk in Magdeburg rückt eine Einigung offenbar näher. Für Europa könnte es ein weiterer Schritt hin zu mehr Unabhängigkeit in der Chipproduktion sein: Der weltgrößte Halbleiter-Hersteller Intel will im polnischen Breslau eine große Chipfabrik bauen. Neben der Fertigung in Irland und dem geplanten Werk in Magdeburg wäre es der dritte europäische Standort des US-Konzerns. In dem polnischen Werk sollen Mikroprozessoren montiert und getestet werden, wie Konzern-Chef Pat Gelsinger heute in Breslau ankündigte. Das Investitionsvolumen bezifferte er auf umgerechnet 4,2 Milliarden Euro. In der Anlage selbst sollen bis zum Jahr 2027 rund 2000 hoch qualifizierte Arbeitsplätze entstehen. Intel erwartet außerdem, dass indirekt mehrere Tausend weitere Jobs geschaffen werden, zusätzlich zu eventuellen Neueinstellungen bei Zulieferern. 19.04.2023 Mit Milliarden Euro will sich die EU bei Computerchips unabhängiger von Asien machen. mehr Wie bei quasi allen neuen Chip-Fabriken weltweit war die Entscheidung für den Standort Breslau mit einer Subventionszusage durch den Staat verbunden. Intel-Chef Gelsinger sagte laut Nachrichtenagentur Reuters: \"Polen war einfach ein bisschen hungriger\" und habe sich so gegen andere Länder durchgesetzt, die darum gewetteifert hätten, dass Intel in ihrer Region investiere. Wie hoch die Zuschüsse der polnischen Regierung ausfallen, teilte Intel nicht mit. Der Konzern betonte jedoch, die geplante Investition in Polen werde zusammen mit der bereits bestehenden Wafer-Fertigung im irischen Leixlip und der geplanten Fabrik in Magdeburg dazu beitragen, eine durchgängige Wertschöpfungskette für die Halbleiterproduktion in Europa zu schaffen. Mit Blick auf die Gefahr von Abhängigkeiten hatte der EU-Rat gemeinsam mit dem Europaparlament im April dieses Jahres das sogenannte \"Chip-Gesetz\" verabschiedet. Demnach soll der europäische Marktanteil an Halbleitern bis 2030 von zehn Prozent auf mindestens 20 Prozent verdoppelt werden. Dahinter steht der Wille der EU, technologisch unabhängiger von China zu werden. Damit sich internationale Chipherstellern mit großen Anlagen in Europa anzusiedeln, hatte sie zuletzt grünes Licht für milliardenschwere Subventionen gegeben. 08.06.2023 Um bei der Chip-Produktion unabhängiger von China zu werden, hat die EU ein Beihilfen-Programm genehmigt. mehr Über die Höhe der Subvention für das geplante Intel-Werks in Magdeburg gab es zuletzt Streit innerhalb der Regierung, nachdem Intel mehr als die genehmigten 6,8 Milliarden Euro Subvention vom Bund verlangte. Finanzminister Christian Lindner (FPD) lehnte dies zunächst ab. Nach Informationen des \"Handelsblatts\" rückt eine Einigung näher. Das Blatt zitiert Regierungskreise, wonach sich die Subventionen für die Intel-Fabrik in Magdeburg nun auf 9,8 Milliarden Euro belaufen sollen. Der Vertrag stehe kurz vor der Unterzeichnung. Wie ein Regierungssprecher bestätigte, will sich der Intel-Chef am Montag mit Bundeskanzler Olaf Scholz treffen. 07.11.2022 • 22:53 Uhr Weltspiegel 02.10.2022 • 14:45 Uhr '},\n",
" {'id': '78901a9b-6f3d-40bf-a845-ba2db953de21',\n",
" 'title': 'Gesetz aus Malta sorgt in Deutschland für Ärger',\n",
" 'date': '2023-06-16T13:54:50.369+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/malta-gluecksspiel-100.html',\n",
" 'text': ' Malta schützt mit einem neuen Gesetz Glückspielfirmen vor Schadensersatzklagen. Das hat Auswirkungen auf den Spielerschutz in Deutschland. Der Drogenbeauftragte der Bundesregierung übt Kritik, Behörden prüfen einen Verstoß gegen EU-Recht. Das Parlament in Malta hat in dieser Woche ein Gesetz verabschiedet, das die heimische Glücksspielindustrie vor Schadensersatzklagen aus dem Ausland schützen soll. Konkret regelt das Gesetz, das ab heute gilt, dass Gerichte in Malta künftig Gerichtsurteile aus dem Ausland nicht mehr vollstrecken sollen, wenn die Firmen eine maltesische Glücksspiellizenz besitzen und die örtlichen Regularien befolgen. Malta reagiert damit auf eine Klagewelle aus dem Ausland. Vor allem in Deutschland und Österreich haben Zivilgerichte zuletzt regelmäßig Glücksspielfirmen dazu verurteilt, Klägern erlittene Spielverluste zu erstatten. Grund dafür war stets, dass die Firmen, von Malta aus im Internet Glücksspiele auch für Spielerinnen und Spieler in Deutschland und Österreich angeboten haben, obwohl das dort jeweils explizit verboten war. Bei den zahlreichen Verfahren geht es häufig um hohe Geldbeträge. Die Kläger verweisen regelmäßig darauf, nicht gewusst zu haben, dass die Spielangebote in ihrem Land illegal waren. Oft geben sie auch an unter Spielsucht zu leiden. hintergrund 17.05.2023 Malta will Glücksspielfirmen vor Schadenersatzklagen aus dem Ausland schützen. mehr Während das Gesetzesvorhaben aus Malta unter Anwälten und Spielerschützern bereits frühzeitig für Aufregung sorgte, reagierte die Bundesregierung im vergangenen Monat noch weitgehend ahnungslos. Auch die Gemeinsame Glücksspielbehörde der Länder (GGL) teilte lediglich mit, das Gesetzesvorhaben zur Kenntnis genommen zu haben. Mittlerweile gibt es Bewegung in der Sache. So schreibt die GGL auf erneute Anfrage des ARD-Hauptstadtstudios, dass sie das \"Gesetz unter Spielerschutzgesichtspunkten durchaus kritisch\" sieht. Intern werde der Sachverhalt bereits geprüft, \"insbesondere auch hinsichtlich der Europarechtskonformität.\" Sollte die GGL zur Auffassung kommen, dass das maltesische Gesetz gegen das Europarecht verstößt, werde sie mit den Ländern das weitere Vorgehen beraten. Möglich wäre dann, dass die Länder die Bundesregierung auffordern, bei der EU zu intervenieren. Auch auf Ebene des Bundes findet das Thema mittlerweile Beachtung. So berichtet der Drogenbeauftragte der Bundesregierung, Burkhard Blienert im Gespräch mit dem ARD-Hauptstadtstudio, dass er in der Sache Kontakt mit dem Bundesjustizministerium aufgenommen habe. Es sei notwendig, dass man sich den Sachverhalt genau anschaue, damit \"nicht hinterher die Spielerinnen und Spieler die Opfer sind\" und unter \"einer eventuell unklaren rechtlichen Situation zu leiden haben\". Der Handlungsbedarf sei groß, sagt Blienert, der Spielerschutz habe eine besondere Bedeutung. Das Bundesjustizministerium sieht die Verantwortung für eine rechtliche Klärung allerdings vor allem bei der EU-Kommission. Ihr obliege es, zu prüfen, ob die Vorschriften aus Malta mit Unionsrecht vereinbar sind, teilt eine Sprecherin mit. \"Die Kommission hat bereits Gespräche mit Malta aufgenommen\" und werde \"gegebenenfalls die nötigen Schritte einleiten.\" Auch das Justizministerium werde \"den Vorgang weiter verfolgen.\" 06.11.2017 Auf dem Online-Glücksspielmarkt gelten Gesetze nichts. Der deutsche Automatenkönig Gauselmann mischt mit. mehr Eine Sprecherin der EU-Kommission bestätigt auf Anfrage, dass derzeit eine Beschwerde geprüft wird. Eingereicht wurde sie im Mai von den beiden Anwälten Karim Weber und Benedikt Quarch. Sie werfen Malta einen Verstoß gegen das Europarecht vor. Das müsse ein Vertragsverletzungsverfahren zur Folge haben, so die Forderung von Quarch. Sollte das Vorgehen Maltas \"durch die EU ungestraft stehenbleibt, dann werden die nächsten Länder anfangen, ihre jeweils größte und wichtigste Industrie mit solchen Gesetzen zu schützen.\" Das hätte dann, sagt Quarch, weitreichende Auswirkungen auf die europäische Rechtsgemeinschaft. Abzuwarten bleibt, wie Glücksspielfirmen, gegen die in Deutschland geklagt wird, den maltesischen Schutzschirm künftig nutzen werden. Viele der betroffenen Firmen besitzen mittlerweile auch eine deutsche Glücksspiellizenz. Insofern stehen sie zumindest diesbezüglich unter der Aufsicht der Gemeinsamen Glücksspielbehörde der Länder. Diese kündigt an, das Thema auch dahingehend zu beobachten: \"Sollten die Anbieter den Schutzschirm zu Lasten der deutschen Spieler anwenden, wird im Einzelfall zu prüfen sein, ob sich dies auf die Zuverlässigkeit des Anbieters auswirkt oder Nachschärfungen in den Nebenbestimmungen der Erlaubnisse gegebenenfalls erforderlich und möglich sein werden.\" 07.11.2017 • 19:00 Uhr 30.11.2017 • 17:11 Uhr 12.06.2014 • 12:12 Uhr 20.11.2017 Line truncated
" {'id': 'tagesschau_04c6e79c-f9da-4fa5-ade8-7d79c8bc30c6',\n",
" 'title': 'Schub für die Offshore-Windenergie',\n",
" 'date': '2023-06-16T13:29:19.166+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/offshore-windmarkt-ausbau-103.html',\n",
" 'text': ' Die Stromerzeugung auf dem Meer wird immer wichtiger. Nicht nur Energieversorger, auch Ölkonzerne mischen in dem Milliardenmarkt mit. Große Hoffnungen der Branche ruhen auf den Vereinigten Staaten. Von Notker Blechner, tagesschau.de US-Präsident Joe Biden lässt die Erneuerbare-Energien-Branche auf bessere Geschäfte hoffen. Mit seinem Zwei-Billionen-Dollar-Plan für den Ausbau der Infrastruktur in den USA dürfte er den Markt kräftig antreiben. Allein zwölf Milliarden Dollar sollen in den Ausbau der Offshore-Windenergie fließen. Bis 2030 sollen zehn Millionen Haushalte mit Ökostrom aus riesigen Parks an der Ost- und Westküste versorgt werden. \"Die USA bekommen jetzt zusätzlichen Schwung\", so Siemens-Gamesa-Chef Andreas Nauen. Schon 2020 sammelte der Windanlagenbauer fast ein Fünftel seiner neuen Aufträge in den Vereinigten Staaten ein. Erst vor kurzem kam eine große Bestellung aus Virginia. Siemens Gamesa liefert die Turbinen für den größten Offshore-Windpark in den USA. Er soll bis 2026 gut 600.000 Haushalte mit Strom versorgen. Große Pläne haben auch BP und der norwegische Energiekonzern Equinor. Sie bauen gemeinsam riesige Windfarmen vor der Küste von New York und Massachusetts. Bis 2030 sollen diese gut 50 Gigawatt Leistung bringen - das wäre mehr als die derzeitige gesamte Kapazität der britischen Windkraftanlagen zusammen. Bisher gilt Großbritannien als größter Offshore-Windmarkt weltweit. Das Vereinigte Königreich will bis 2030 etwa ein Drittel seines Stroms mit Wind aus der Nordsee decken. Vor kurzem erhielten RWE und EnBW Zuschläge für jeweils zwei Offshore-Windprojekte. 21.01.2021 China hat 2020 doppelt so viele Anlagen für Wind- und Solarenergie gebaut als im Jahr zuvor. mehr Und auch in der EU tut sich einiges. Brüssel hat den eine Billion Euro umfassenden \"Green Deal\" beschlossen. Ein Schwerpunkt dabei ist der Ausbau der Windenergie vor den Meeresküsten. Bis 2030 soll sich die Kapazität der Offshore-Windfarmen in Europa auf 60 Gigawatt verfünffachen. Bisher liegt sie bei zwölf Gigawatt. Bis 2050 sollen sogar Farmen mit einer Leistung von 300 Gigawatt installiert sein. Außerdem sollen 40 Gigawatt aus Wellen- und Gezeitenkraftanlagen sowie schwimmenden Wind- und Solaranlagen kommen. Nach Einschätzung der Internationalen Energieagentur (IEA) könnte die Offshore-Windkraft binnen 20 Jahren zum wichtigsten Stromlieferanten in Europa werden. Ihr Anteile dürfte von heute zwei Prozent auf rund 25 Prozent steigen, prognostiziert die IEA. Weltweit sehen Experten ein enormes Wachstumspotenzial. \"Der globale Offshore-Windmarkt wird sich in diesem Jahrzehnt versechsfachen\", prophezeit Henrik Poulsen, Chef von Orsted, dem inzwischen weltgrößten Betreiber von Offshore-Windparks. Rund ein Viertel aller Windräder auf den Meeren stellt der dänische Konzern her. Orsted war einst im Öl- und Gasgeschäft tätig und hieß Dong. Das dänische Unternehmen spielte im Wettbewerb mit \"Big Oil\" nur eine kleine Rolle. Vor vier Jahren verkaufte Dong sein Geschäft mit fossilen Energieträgern und konzentrierte sich ganz auf erneuerbare Energien. Ähnlich wie Orsted streben nun auch andere Ölkonzerne verstärkt ins Geschäft mit Offshore-Windkraft, weil sie mit dem baldigen Ende des Ölbooms rechnen. \"Die Corona-Pandemie könnte die Wende von fossilen Brennstoffen zu erneuerbaren Energien beschleunigen\", heißt es im BP Energy Outlook. BP und Shell haben Milliardeninvestitionen in Wind- und Solarenergie angekündigt. Bis 2030 will BP 50 Gigawatt grünen Strom produzieren. Ein Schwerpunkt soll der Offshore-Wind sein. Auch der französische Total-Konzern hat ehrgeizige Pläne. Jährlich wollen die Franzosen drei Milliarden Dollar in das Ökostrom-Geschäft investieren. Bis 2025 beabsichtigt der Konzern bereits eine Erzeugungskapazität von über 35 Gigawatt bei erneuerbaren Energien. Total setzt auf Offshore-Windenergie im Mittelmeer und in Asien. Vor wenigen Wochen hat der Ölkonzern zusammen mit der australischen Bank Macquarie Pläne für den Bau schwimmender Windräder vor der Küste Südkoreas präsentiert. Die Expansion von \"Big Oil\" in den erneuerbaren Energien könnte den Wettbewerb im Offshore-Markt neu anheizen. Bisher beherrschen neben Orsted die Unternehmen Siemens Gamesa, RWE und Vestas den Markt. RWE will bis Ende 2022 rund fünf Milliarden Euro in erneuerbare Energien investieren und über 13 Gigawatt an Ökostrom-Anlagen im Portfolio haben. Der Preiskampf und der Kostendruck dürften zunehmen. Jährlich sinken die Kosten für Offshore-Windanlagen um knapp sechs Prozent. In den kommenden Jahren werden die ersten Windparks an Netz gehen, deren Betreiber keine Subventionen mehr in Anspruch nehmen wollen. 16.06.2023 WIndkraft hat die Kohle im vergangenen Jahr als Deutschlands wichtigster Energieträger abgelöst. mehr In Deutschland herrschte zuLine truncated
" {'id': 'tagesschau_047a2bdc-2891-4ae1-b2f0-cd50b044c381',\n",
" 'title': 'Wind ist wichtigste Stromquelle',\n",
" 'date': '2023-06-16T13:29:18.901+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/wind-ist-wichtigste-stromquelle-101.html',\n",
" 'text': ' Nicht die Kohlekraftwerke haben im vergangenen Jahr den meisten Strom in Deutschland produziert - sondern Windkraft-Anlagen. Erneuerbare Energien erreichen inzwischen einen Rekordanteil. Windenergie ist im Jahr 2020 zu Deutschlands wichtigster Stromquelle geworden. Erstmals wurde im vergangenen Jahr mehr Strom aus Wind erzeugt und ins heimische Netz eingespeist als aus Kohlekraftwerken, wie das Statistische Bundesamt bekanntgab. Der Anteil der Windkraft am Energiemix lag bei 25,6 Prozent, der Anteil von Kohle bei 24,8 Prozent - was 21,5 Prozent weniger sind als 2019. Im Jahr 2020 wurde dagegen 5,4\\xa0Prozent mehr Strom aus Windkraft erzeugt als 2019. Windenergie dürfte noch wichtiger werden. Vor wenigen Tagen startete die Bundesnetzagentur eine Ausschreibung: Auf drei Flächen in Nord- und Ostsee sollen neue Windparks gebaut werden. Auch der Anteil der erneuerbaren Energien an der im Inland erzeugten und eingespeisten Strommenge erreichte 2020 einen neuen Höchststand - und stieg von 42,3\\xa0Prozent im Jahr 2019 auf 47,0\\xa0Prozent. Ins heimische Netz wurden aufs Jahr gesehen 502,6 Milliarden Kilowattstunden eigenproduzierter Strom eingespeist und damit 5,9 Prozent weniger als im Jahr zuvor. Die Statistiker weisen darauf hin, dass dies mit der Corona-Pandemie und dem verhängten Lockdown zusammenhängt: \"Der vergleichsweise geringe Strombedarf in dieser Zeit konnte zu einem großen Teil aus erneuerbaren Energien gedeckt werden. Aufgrund des Einspeisevorrangs für diese Energieträger wurden viele konventionelle Kraftwerke zurückgefahren\", heißt es dazu in der Mitteilung. Die exportierte Strommenge sank um acht Prozent, übertraf aber mit 67 Milliarden Kilowattstunden immer noch die Importe. Sie legten um 19,7 Prozent auf 40,1 Milliarden Kilowattstunden zu. Die Windkraft hat sich zur wichtigsten deutschen Energiequelle entwickelt, obwohl der Ausbau vor allem der Onshore-Anlagen an Land zuletzt stockte. So kam 2020 deutlich weniger neue Leistung hinzu als in den vorangegangenen Jahren. Auch werden seit dem Jahreswechsel die ersten alten Windkraftanlagen abmontiert, die keine staatliche Förderung mehr erhalten. Dieses Thema im Programm: Über dieses Thema berichtete NDR Info am 05. März 2021 um 11:39 Uhr.'},\n",
" {'id': '8b9c3903-4a84-445f-83d4-085485ee7ac7',\n",
" 'title': 'Baugenehmigungen brechen um ein Drittel ein',\n",
" 'date': '2023-06-16T11:08:02.741+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/konjunktur/wohnungsbau-einbruch-statistik-baugenehmigungen-100.html',\n",
" 'text': ' Im April brachen die Baugenehmigungen so stark ein wie seit über 17 Jahren nicht mehr. Grund: die explodierenden Baukosten und hohen Zinsen. Aus der Branche wird Kritik am Bund lauter. Bedarf und Angebot klaffen auf dem deutschen Wohnungsmarkt weiter auseinander: So wurde im April der Bau von 21.200 Wohnungen genehmigt. Das waren laut Statistischem Bundesamt 9900 Baugenehmigungen weniger als im April des vergangenen Jahres - ein Minus von 31,9 Prozent. Das sei der stärkste Rückgang gegenüber einem Vorjahresmonat seit März 2007, teilte die Behörde heute in Wiesbaden mit. Besonders stark ging die Zahl der Baugenehmigungen im April bei Zweifamilienhäusern zurück, sie brach etwa um die Hälfte ein. Bei Einfamilienhäusern gab es ein Minus von 33,5 Prozent zum Vorjahresmonat und bei Mehrfamilienhäusern, der zahlenmäßig stärksten Gebäudeart, einen Rückgang von gut 27 Prozent. Trotz großer Nachfrage nach Wohnraum sinkt die Zahl der Baugenehmigungen der Statistik zufolge seit Mai 2022. Als Gründe für den Rückgang nennt das Statistische Bundesamt vor allem die hohen Kosten für Baumaterialien und zunehmend schlechtere Finanzierungsbedingungen. Wegen der stark gestiegenen Kreditzinsen und hoher Baupreise halten sich viele Bauherren mit Projekten zurück oder stornieren sie - von privaten Hausbauern bis zu Großinvestoren. Das ifo-Institut in München erwartet in den kommenden Monaten einen noch drastischeren Rückgang beim Wohnungsbau in Deutschland. In diesem Jahr dürften laut der Forscher lediglich rund 245.000 und 2024 sogar nur 210.000 Wohnungen in neuen Gebäuden fertiggestellt werden. Der Hauptverband der Deutschen Bauindustrie (HDB) rechnet in diesem Jahr bestenfalls mit 250.000 fertiggestellten Wohnungen. Das wären rund 45.000 weniger als im vergangenen Jahr und weit weg vom Ziel der Bundesregierung. Die Ampel-Koalition hatte die Zielmarke von 400.000 neuen Wohnungen im Jahr herausgegeben. 18.04.2023 Das Neubauziel der Ampel-Koalition von 400.000 Wohnungen jährlich ist auch in diesem Jahr bereits in weite Ferne gerückt. mehr Der Immobilienverband ZIA rechnet für 2025 mit einer Lücke von bis zu 700.000 Wohneinheiten und 1,4 Millionen Wohnungssuchenden. Die Ursachen seien ausbleibende Bauprojekte wegen explodierender Baupreise und staatlicher Regelungswut. \"Der Staat ist für 37 Prozent der Kosten am Produkt Wohnen verantwortlich\", sagte ZIA-Präsident Andreas Mattner der \"Bild\"-Zeitung laut einem Vorabbericht. Auch ifo-Bauexperte Ludwig Dorffmeister gibt dem Bund eine Teilschuld, da er die Neubauförderung \"drastisch zurückgefahren\" und die Standards für den Neubau Anfang 2023 \"abermals verschärft\" habe. Besonders in den großen Städten gibt es dem ZIA zufolge gewaltige Wohnraumlücken: Allein in Berlin fehlten nach Daten der Immobilienmarktbeobachter Empirica Regio Anfang 2023 mehr als 23.000 Wohnungen. Damit ist die Hauptstadt trauriger Spitzenreiter. Auch in Hamburg gebe es 13.632 Wohnungen zu wenig und in München fehlten mehr als 10.000 Wohnungen. 14.06.2023 Die Deutschen Versicherer warnen davor, dass der Klimawandel zu steigenden Beiträgen bei Wohngebäude-Versicherungen führen könnte. mehr Nach Angaben des Münchner ifo-Instituts stößt die große Mehrheit der Bauträger seit vielen Monaten keine neuen Vorhaben mehr an. Die aktuell verbuchten Aufträge gingen auf Projekte zurück, die schon zu weit fortgeschritten seien, um sie abzubrechen. Daneben finden laut ifo weiterhin Bauvorhaben im hochpreisigen Segment statt, für deren Kunden die gestiegenen Kosten keine große Rolle spielen. 17.05.2023 • 10:31 Uhr 20.04.2023 • 18:41 Uhr 15.06.2023 • 14:16 Uhr '},\n",
" {'id': '9d54113d-c90a-4216-8305-bbd33f026194',\n",
" 'title': 'Was tun, wenn der Grundsteuerbescheid kommt?',\n",
" 'date': '2023-06-16T11:02:07.452+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/grundsteuer-bescheide-100.html',\n",
" 'text': ' Die Finanzämter verschicken die ersten Bescheide zur neuen Grundsteuer. Die wird zwar erst in anderthalb Jahren fällig. Aber viele Menschen befürchten, dass es für sie teurer wird. Was zu beachten ist. Als erstes kommen Bescheide über den Grundsteuerwert und den sogenannten Grundsteuermessbetrag - in der Regel in einem Brief. Daraus ist noch nicht abzulesen, wie hoch die neue Grundsteuer ausfallen wird. Dort wird erstmal zusammengefasst, was man dem Finanzamt als Grundbesitz gemeldet hat. Trotzdem sollte man den Brief nicht ungelesen abheften, sondern nochmal gründlich kontrollieren, ob alle dem Finanzamt gemeldeten Angaben auch stimmen: etwa die Fläche, das Baujahr oder der Bodenrichtwert. Wenn etwa ein Grundstück im Naturschutzgebiet liegt oder ein steiler Hang als Bauland eingestuft wird, hat man jetzt die Gelegenheit, Widerspruch einzulegen. Das muss man innerhalb von vier Wochen tun. Das liegt daran, dass man nur dann gegen den finalen Grundsteuerbescheid vorgehen kann, wenn man gegen diesen ersten Bescheid Einspruch erhoben hat. Die Kommunen beginnen jetzt damit, ihre sogenannten Hebesätze festzulegen - also den Faktor, der zusammen mit dem Grundstückswert die Steuerhöhe bestimmt. Wer den ersten Bescheid unwidersprochen lässt, verliert damit sein Recht, sich später gegen eine möglicherweise zu hohe Grundsteuer zu wehren. 12.06.2023 Mehr als drei Millionen Menschen haben bereits Einspruch gegen ihre Bescheide zur neuen Grundsteuer eingelegt - das hat eine Umfrage ergeben. mehr Die neue Grundsteuer wird in anderthalb Jahren fällig, also ab Januar 2025, für alle, auch für Mieter. Denn Vermieter können die Grundsteuer auf die Miete umlegen. Die Umsetzung findet in den Kommunen statt und die werden voraussichtlich bis zum kommenden Frühjahr die endgültigen Werte festlegen - dann also auch alle Widersprüche verarbeitet haben. Erst im Herbst kommenden Jahres gehen dann die Bescheide mit der Steuerberechnung raus. Erst dann ist klar, was man bezahlen muss. Das ist zumindest der Plan. Die allermeisten Eigentümer, 90 Prozent, haben die Erklärung inzwischen abgegeben. Jetzt liegen 36 Millionen Grundsteuererklärungen bei den Finanzämtern. In einigen Bundesländern haben die Ämter die Erklärungen schon vollständig bearbeitet und ihre Bescheide verschickt. Widerspruch eingelegt haben bisher etwa drei Millionen Menschen. 28.05.2023 In Münster soll der Bau von freistehenden Einfamilienhäusern stark eingeschränkt werden. mehr Einige Bundesländer haben mit Blick auf die Reform ihr Personal vorsorglich deutlich aufgestockt. Trotzdem müssen wohl auch Finanzbeamte, die sonst andere Aufgaben haben, in den Grundsteuerabteilungen einspringen. Das betrifft zum Beispiel auch Beamte, die normalerweise die Steuererklärungen von Unternehmen prüfen. Das heißt: Wenn bei diesen Unternehmensprüfungen jetzt weniger genau hingeschaut werden kann, kann das am Ende auch wieder Steuereinnahmen kosten. Eigentlich sollte die Grundsteuerreform \"aufkommensneutral\" gestaltet werden - also die Kommunen sollten im Schnitt genauso viel einnehmen wie vorher. Für den Einzelnen kann es aber trotzdem teurer werden, denn dieses Gebot der Aufkommensneutralität gilt eben nur im Durchschnitt. Und es ist tatsächlich nicht rechtlich bindend. 25.02.2023 Für viele Hausbesitzer könnte es ein böses Erwachen geben, wenn die nächsten Bescheide für die Grundsteuer kommen. mehr Angesichts steigender Kosten der Kommunen etwa für Energie oder Gehälter im öffentlichen Dienst rechnen deshalb einige damit, dass die Grundsteuerreform doch dazu genutzt wird, diese steigenden Kosten zu kompensieren. Eine aktuelle Befragung des Beratungsunternehmens EY hat solche Befüchtungen genährt: Ein Drittel der Kommunen gab dort an, dass sie ihre Hebesätze erhöhen wollen. Zumindest dort dürfte es also teurer werden. 02.06.2023 • 16:01 Uhr 14.06.2023 • 11:09 Uhr 10.03.2023 • 10:39 Uhr Hintergrund 14.01.2019 • 08:00 Uhr 21.01.2023 • 14:26 Uhr 18.08.2022 • 12:15 Uhr '},\n",
" {'id': '23d81b6c-e019-4a7b-84ff-3ee6b4c11386',\n",
" 'title': 'Zahl der Firmenpleiten steigt um fast ein Fünftel',\n",
" 'date': '2023-06-16T09:25:20.974+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/konjunktur/firmenpleiten-insolvenzen-rezession-100.html',\n",
" 'text': ' Die Firmenpleiten nehmen in Deutschland merklich zu. Zwar waren wegen der ausgelaufenen Corona-Staatshilfen mehr Pleiten erwartet worden. Doch die Rezession verstärkt die negative Entwicklung. Die Firmenpleiten in Deutschland nehmen in der Rezession spürbar zu. Im ersten Quartal erhöhte sich die Zahl der beantragten Unternehmensinsolvenzen um 18,2 Prozent im Vergleich zum Vorjahreszeitraum auf 4117, wie das Statistische Bundesamt mitteilte. Auch die voraussichtlichen Forderungen der Gläubiger aus den gemeldeten Unternehmensinsolvenzen stiegen deutlich. Die Amtsgerichte bezifferten sie auf rund 6,7 Milliarden Euro, nach rund 3,9 Milliarden Euro ein Jahr zuvor. Gesunken ist dagegen die Zahl der Verbraucherinsolvenzen: Sie gab um 2,1 auf 16.676 nach. 11.04.2023 Die jüngste Bankenkrise dürfte sich einer Studie zufolge auf die Anzahl der Firmenpleiten auswirken. mehr Von Januar bis März ist das deutsche Bruttoinlandsprodukt (BIP) um 0,3 Prozent und damit bereits das zweite Quartal in Folge geschrumpft. Daher steckt Europas größte Volkswirtschaft in einer sogenannten technischen Rezession. Angesichts der wirtschaftlichen Flaute, hohen Energiekosten und steigenden Zinsen sind viele Firmen mit Belastungen konfrontiert. Bezogen auf 10.000 Unternehmen gab es in den drei Monaten zwölf Insolvenzen. Die meisten davon entfielen auf die Branche Verkehr und Lagerei mit 26 Fällen. Es folgten die Bereiche Bergbau und Gewinnung von Steinen und Erden sowie sonstige wirtschaftliche Dienstleistungen (zum Beispiel Zeitarbeitsfirmen) mit jeweils 20 Fällen. Die geringste Häufigkeit mit nur einer Insolvenz je 10.000 Unternehmen gab es in der Energieversorgung. Der negative Trend bei den Firmenpleiten könnte sich im zu Ende gehenden Quartal fortsetzen. Darauf deutet die Entwicklung bei den beantragten Regelinsolvenzen hin, die im Mai um 3,1 Prozent zum Vorjahresmonat zunahmen. Im April hatte es bereits ein Plus von 4,8 Prozent gegeben. Diese Verfahren fließen erst nach der ersten Entscheidung des Insolvenzgerichts in die Statistik ein. Der tatsächliche Zeitpunkt des Insolvenzantrags liegt in vielen Fällen aber fast drei Monate davor. 24.04.2023 Der Herrenmodehersteller Ahlers stellt wegen drohender Zahlungsunfähigkeit einen Insolvenzantrag. mehr Trotz Corona- und Energiekrise war die Zahl der Firmenpleiten in den vergangenen Jahren auf einem historisch niedrigen Niveau verweilt. Die umfangreichen staatlichen Hilfen wie die teilweisen Aussetzung der Insolvenzantragspflicht, die Ausweitung des Kurzarbeitergeldes, finanzielle Unterstützung von Firmen sowie ein Vollstreckungsstopp der Finanzbehörden und Krankenkassen hatten einen sprunghaften Anstieg verhindert. Wegen der geringen Zahlen von 2020 bis 2022 hatten Experten einen aufgeschobenen Anstieg im laufenden Jahr erwartet. Höhere Produktionskosten, steigende Personalausgaben und ein deutlicher Zinsanstieg verschlechtern die finanzielle Lage vieler Unternehmen. 15.06.2023 • 12:52 Uhr 19.04.2023 • 11:27 Uhr 29.03.2023 • 16:18 Uhr 03.03.2023 • 12:45 Uhr 06.09.2022 • 17:17 Uhr '},\n",
" {'id': 'a9db1526-8ae1-4d96-ad2a-62b37f7a29f2',\n",
" 'title': 'Geschäft mit Fusionen und Übernahmen zieht an',\n",
" 'date': '2023-06-16T08:16:37.642+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/uebernahmen-fusionen-deutschland-2023-100.html',\n",
" 'text': ' Dank des Viessmann-Verkaufs ist das Geschäft mit großen Fusionen und Übernahmen in Deutschland im ersten Halbjahr um mehr als 30 Prozent höher als im Vorjahr. Innerdeutsche Transaktionen gibt es kaum. Das Geschäft mit großen Fusionen und Übernahmen in Deutschland kommt allmählich wieder in Gang. Nicht zuletzt wegen der 13,2 Milliarden Dollar schweren Übernahme des hessischen Heiztechnik-Konzerns Viessmann durch den US-Rivalen Carrier Global ist das Volumen auf dem deutschen M&A-Markt nach knapp sechs Monaten mit 66 Milliarden Dollar 31 Prozent höher als vor einem Jahr, wie aus den \"League Tables\" des Finanzdatenanbieters Refinitiv hervorgeht. 26.04.2023 Der Heizungsbauer Viessmann verkauft seine Klimatechniksparte für zwölf Milliarden Euro an Carrier Global. mehr Für zwölf Milliarden Euro verkaufte die Familie Viessmann im April die dominierende Heiztechnik-Sparte ihrer gleichnamigen Firma an Carrier Global. Sie hatte befürchtet, bei der Umstellung von Gas- und Öl-Heizungen auf Wärmepumpen im internationalen Vergleich zu klein zu sein. Die Übernahme hatte eine politische Diskussion ausgelöst, ob die \"Wärmewende\" der Bundesregierung die deutschen Hersteller überfordert. Den Kaufpreis erhalten die Eigentümer größtenteils in bar, für die restlichen 2,4 Milliarden Euro bekommt sie Carrier-Aktien. Der Fall Viessmann liegt im Trend. So kommen die Käufer von deutschen Firmen überwiegend aus dem Ausland. Häufig sind das Finanzinvestoren, die dank ihrer tiefen Taschen im ersten Halbjahr (Stand: 14. Juni) 303 deutsche Firmen für insgesamt 14 Milliarden Dollar kauften - so viele wie noch nie seit Beginn der Aufzeichnungen 1980. Deutsche Unternehmen zögern dagegen im laufenden Jahr wegen der schwächelnden Konjunktur mit Übernahmen. Innerdeutsche Transaktionen liegen im Jahresverlauf mit einem Minus von einem Drittel auf dem niedrigsten Stand seit 2019, Zukäufe im Ausland sogar auf einem Sechs-Jahres-Tief. 27.04.2023 Der Heizungshersteller Viessmann verkauft seine Wärmepumpen-Sparte an den US-Konzern Carrier Global. mehr Die zweitgrößte Fusion betrifft den deutschen Softwareriesen SAP. Rund vier Jahre nach der Übernahme hat der Konzern seine US-Datenanalyse-Tochter Qualtrics wieder verkauft. 7,7 Milliarden Dollar bekommen die Walldorfer für ihren 71-Prozent-Anteil vom Finanzinvestor Silver Lake und dessen Partner, dem kanadischen Pensionsfonds CPPIB. Insgesamt legen die neuen Besitzer 11,6 Milliarden Dollar auf den Tisch, um Qualtrics von der Börse zu nehmen. SAP hatte das US-Unternehmen 2019 für acht Milliarden Dollar vom Firmengründer Gründer Ryan Smith gekauft und später an die Börse gebracht. Es folgt die 3,9 Milliarden Euro schwere Übernahme des dänischen Finanzsoftware-Spezialisten Simcorp, mit der die Deutsche Börse ihr Geschäft mit Dienstleistungen für Vermögensverwalter ausbauen will. Das Angebot an die SimCorp-Aktionäre läuft derzeit. Das an der Kopenhagener Börse gelistete Unternehmen arbeitet seit zwei Jahren mit der Deutsche-Börse-Tochter Qontigo zusammen. Der Daten- und Analyse-Spezialist, Simcorp und der Stimmrechtsberater ISS sollen in einem neuen Segment gebündelt werden. Dazu kommt der US-Pharma- und Medizintechnik-Konzern Baxter International, der seine Biopharma-Sparte für 4,25 Milliarden Dollar an ein Konsortium um die Finanzinvestoren Advent und Warburg Pincus verkauft. Ein Großteil davon, Baxter Oncology, sitzt in Halle in Westfalen, weshalb die Transaktion mit knapp drei Milliarden Euro in die deutsche Übernahmen-Rangliste eingeht. 01.04.2022 Vor 50 Jahren wurde die Firma \"Systemanalyse Programmentwicklung\" gegründet, kurz SAP. mehr Besonders profitiert von den Geschäften hat die US-Investmentbank JPMorgan. Ihre Banker begleiteten zwölf Übernahmen und Fusionen mit deutscher Beteiligung im Volumen von 31,5 Milliarden Dollar. Goldman Sachs, im ersten Quartal noch die Nummer eins, folgt mit sechs Deals für 26,6 Milliarden Dollar auf Platz zwei. Auch den dritten Rang belegt mit Morgan Stanley (17,8 Milliarden Dollar) eine US-Bank. Die Deutsche Bank liegt auf ihrem Heimatmarkt mit sieben Transaktionen im Wert von 6,2 Milliarden Dollar auf Rang sechs. Im mauen Geschäft mit Eigenkapital-Emissionen und -Platzierungen (ECM), sprich Börsengängen, hat Morgan Stanley die Spitzenposition aus dem ersten Halbjahr 2022 verteidigt. Zwei Transaktionen mit 1,68 Milliarden Dollar Volumen reichten, um UniCredit und Barclays mit großem Abstand auf die Plätze zu verweisen. Die Konkurrenz hofft, dass IPOs nach der Sommerpause ins Laufen kommen. Bei Fremdkapital-Transaktionen ist die Deutsche Bank mit 53 Emissionen im Volumen von 15,8 Milliarden Dollar unangefochten Erster. Ihr Marktanteil sinkt aber leicht auf 7,5 Prozent. Rang zwei behauptet JPMorgan mit 37 Emissionen über 11,4 Milliarden DollaLine truncated
" {'id': '5cc61bcb-d290-4114-b608-0d5aba426f27',\n",
" 'title': 'US-Anleger in Kauflaune',\n",
" 'date': '2023-06-15T22:31:21.487+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/marktberichte/marktbericht-aktien-fed-ezb-100.html',\n",
" 'text': ' Abflauende Rezessionsängste haben die Käufer heute wieder an die Wall Street gelockt. Das zuletzt alles beherrschend Zinsthema rückte derweil in den Hintergrund. Nach zunächst verhaltener Eröffnung haben die großen US-Aktienindizes im Verlauf ihre Gewinne ausgebaut und höher geschlossen. Hinweise der US-Notenbank Federal Reserve (Fed) auf weiter mögliche Zinserhöhungen, die gestern belastet hatten, traten heute in den Hintergrund. Vielmehr knüpfte der Dow-Jones-Index nach dem gestrigen Rücksetzer an seine vorangegangene Gewinnserie an und legte am Ende um 1,26 Prozent zu auf 34.408 Punkte. Es war der höchste Stand seit Mitte Dezember. Das Tageshoch lag bei 34.488 Zählern noch ein Stück höher. Auch an die zinssensitive Technologiebörse Nasdaq kehrten die Käufer zurück. Der Composite-Index rückte um 1,15 Prozent vor. Der marktbreite S&P-500-Index stieg um 1,22 Prozent. Beide Indizes markierten damit neue Jahreshochs. Neben dem Nachgang zum gestrigen Zinsentscheid der Notenbank Federal Reserve (Fed) standen eine Reihe neuer Konjunkturdaten auf der Agenda der Wall Street. Diese fielen teilweise überraschend gut aus, was den Markt stützte. 14.06.2023 Wie erwartet hat die US-Notenbank den Leitzins unverändert gelassen - erstmals nach zehn Erhöhungen in Folge. mehr Die Konjunkturdaten dämpften Rezessionsängste der Anleger, allen voran die wichtigen Einzelhandelsumsätze. Die Erlöse der US-Einzelhändler stiegen den Angaben zufolge im Mai überraschend um 0,3 Prozent. \"Derzeit warten eine Menge Leute aus Angst vor einer Rezession an der Seitenauslinie\", sagte David Russell, Manager beim Brokerhaus TradeStation. \"Da diese Sorgen schwinden, wenden sie sich wieder Aktien zu.\" Der private Konsum gilt als Hauptstütze der weltgrößten Volkswirtschaft. Auch die Industriestimmung im US-Bundesstaat New York hat sich im Juni unerwartet stark aufgehellt und überraschte positiv. Der an der Börse viel beachtete Empire-State-Index stieg von minus 31,8 Punkten im Vormonat auf plus 6,6 Zähler, wie die regionale Notenbank von New York mitteilte. Analysten hatten im Schnitt zwar mit einer Verbesserung gerechnet, waren aber im Schnitt nur von einem moderaten Anstieg auf minus 15,1 Punkte ausgegangen. Die wöchentlichen Daten vom Arbeitsmarkt deuteten auf eine Stagnation hin, die Zahl der Erstanträge auf Arbeitslosenhilfe fiel mit 262.000 Menschen dabei etwas höher aus als erwartet. Eine Zahl von 270.000 Erstanträgen gilt als kritische Marke, die eine nachhaltige Eintrübung des Arbeitsmarkts signalisiert. Dieser boomte bislang jedoch - trotz massiver Zinserhöhungen der Federal Reserve. Ein sich allmählich abkühlender Jobmarkt, ein Hauptziel der Fed im Kampf gegen die Inflation, dürfte aus Sicht von Bankchef Jerome Powell dazu beitragen, dass die Wirtschaft trotz der strafferen Geldpolitik eine sanfte Landung hinlegen wird - also nicht in eine Rezession abgleitet. Positive Spuren hinterließ die Geldpolitik heute bei den in New York gelisteten Anteilsscheinen chinesischer Technologieaktien. Dass die chinesische Zentralbank versucht, mit der Senkung ihres Hauptleitzinses der schwächelnden Wirtschaft des Landes unter die Arme zu greifen, bescherte unter anderem dem Amazon-Konkurrenten Alibaba ein Kursplus von 3,1 Prozent. Auch Börsenschwergewicht Apple ist heute wieder in die Erfolgsspur zurückgekehrt. Das Papier stieg in der Spitze um über ein Prozent bis auf 186,52 Dollar und markierte damit ein neues Rekordhoch. Am Ende stand ein Aufschlag von 1,1 Prozent auf 186,01 Dollar. Nachdem sich die Anleger mit dem jüngsten Zinsentscheid der EZB zunächst schwer taten, erholte sich der DAX im Verlauf und folgte einer steigenden Wall Street nach oben. Am Ende schloss der deutsche Leitindex an einem ereignisreichen Tag bei 16.290 Punkten um 0,13 Prozent nur leicht schwächer. Im Tagestief war der Index nach dem Zinsentscheid zunächst bis auf 16.165 Punkte gefallen, ehe er sich danach wieder nach oben orientierte. Der Schlusskurs liegt zudem nahe des Tageshoch bei 16.301 Punkten und weiter in Sichtweite des erst gestern erreichten neuen Rekordhochs bei 16.336 Punkten. Damit präsentiert sich der DAX trotz der Aussicht auf weitere Zinserhöhungen durch die EZB weiterhin äußerst robust. Die heute beschlossene Erhöhung um weitere 25 Basispunkte auf 4,00 Prozent war erwartet worden. Die deutlichen Worte von EZB-Chefin Christine Lagarde bezüglich weiterer Zinsschritte zeigen aber, wohin die Richtung im künftigen Zinszyklus der Bank geht. Denn vom EZB-Ziel einer Inflationsrate von 2,00 Prozent ist die Eurozone noch weit entfernt. \"Es ist sehr wahrscheinlich, dass wir die Zinsen im Juli weiter anheben werden\", sagte Lagarde im Anschluss an die Zinsentscheidung. \"Wir sind noch nicht am Ziel.\" Sie verwies auf die zu hohe Inflation. Die Notenbank erhöhte sogar ihre Inflationsprognose, was Experten als die eigentlicLine truncated
" {'id': '873f8c93-c996-4e08-a077-7f2b182197aa',\n",
" 'title': 'Netzagentur versteigert Flächen für Offshore-Windparks',\n",
" 'date': '2023-06-15T19:24:04.940+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/technologie/offshore-windparks-bundesnetzagentur-energie-strom-100.html',\n",
" 'text': ' Mehrere Unternehmen bewerben sich um Flächen für Windparks in Nord- und Ostsee. Wer dort tätig werden darf, bestimmt die Bundesnetzagentur erstmals per Versteigerung. Laut ihr verzichten die Firmen auf staatliche Förderung. Die Bundesnetzagentur wird erstmals mit Hilfe einer Versteigerung bestimmen, welches Unternehmen einen Windpark auf See errichten darf. Dies geht aus einer Meldung der Bonner Behöre hervor. Hintergrund ist eine Ausschreibung vom 31. Dezember 2022. Ausgeschrieben waren vier Flächen für Offshore-Windparks in Nord- und Ostsee. Für alle vier Flächen seien mehrere Null-Cent-Gebote eingegangen, berichtete die Behörde. Das bedeutet, die Unternehmen verzichten von vorneherein auf eine staatliche Förderung. Damit werde ein sogenanntes dynamisches Gebotsverfahren erforderlich. Behördenpräsident Klaus Müller nannte die Ergebnisse der Ausschreibung eine \"gute Nachricht für die Energiewende in Deutschland.\" Es sei erfreulich, dass die Unternehmen keine Förderung für den Ausbau der Offshore-Windenergie benötigten. \"Die Null-Cent-Gebote machen deutlich, dass die Offshore-Windenergie wirtschaftlich attraktiv ist,\" so Müller. 24.04.2023 Neun Länder treffen sich heute zum Nordsee-Gipfel in Ostende: Es geht um den schnelleren und besser abgestimmten Ausbau der Windkraft auf See. mehr Die Flächen mit einer Gesamtleistung von 7000 Megawatt für Windenergieanlagen auf See liegen in der Nord- und Ostsee und sind nicht zentral voruntersucht. Das heißt laut Bundesnetzagentur, es gebe keine staatliche Voruntersuchung, die beispielsweise die Meeresumwelt, den Baugrund und wind- und ozeanographische Verhältnisse der ausgeschriebenen Flächen analysieren. Der Bieter, der den Zuschlag bekommt, muss die entsprechenden Voruntersuchungen vor Errichtung eines Windparkt in eigener Zuständigkeit durchführen. Den Zuschlag erhält jeweils der Bieter, der den geringsten Förderbedarf für einen Windpark auf der Fläche anmeldet. Verzichten mehrere Bieter bei einer Fläche auf eine Förderung und geben Gebote mit einem Gebotswert von null Cent pro Kilowattstunde ab, entscheidet erstmalig ein\\xa0sogenanntes\\xa0dynamisches Gebotsverfahren über den Zuschlag. Danach erhält der Bieter den Zuschlag mit der höchsten Zahlungsbereitschaft, ist auf der Seite der Bundesnetzagentur zum Start der Ausschreibung zu lesen. Die Zahlungsbereitschaft der Bieter werde nun im Wege eines Online-Gebotsverfahrens ermittelt. Geplant sei nun \"zeitnah\" eine elektronische Versteigerung. Hintergrund 28.09.2022 Obwohl die Zahl der installierten Windkraftanlagen 2021 zurückgegangen ist, setzt sich die Regierung ambitionierte Pläne. mehr \"Die Erlöse kommen zum überwiegenden Teil über eine Senkung der Stromkosten den Verbraucherinnen und Verbraucher direkt zugute,\" so Müller. Das gelte für 90 Prozent der eingenommenen Gelder. Jeweils fünf Prozent flössen in den in den Meeresnaturschutz und die Förderung einer umweltschonenden Fischerei. Drei der Flächen für Offshore-Windparks mit einer Leistung von jeweils 2000\\xa0Megawatt\\xa0liegen in der Nordsee und eine Fläche für eine Leistung von 1000\\xa0Megawatt\\xa0liegt in der Ostsee. Die Flächen in der Nordsee liegen etwa 120\\xa0Kilometer\\xa0nordwestlich von Helgoland und die Fläche in der Ostsee\\xa0etwa\\xa025\\xa0km\\xa0vor der Insel Rügen. Die Inbetriebnahme der Windparks ist für das Jahr 2030 vorgesehen. 24.04.2023 Die Nordsee werde zum wichtigen Ort der Energieproduktion, so Bundeskanzler Scholz. mehr Anfang Januar hatte die Bundesregierung das \"Mehr-Windenergie-auf-See\"-Gesetz auf den Weg gebracht. Damit habe sie nach eigenen Angaben die Voraussetzungen geschaffen, um den Ausbau der Offshore-Windenergie voranzubringen. Bis zum Jahr 2030 soll die\\xa0installierte Leistung von Offshore-Windenergie auf mindestens 30 Gigawatt und bis 2045 auf mindestens 70 Gigawatt steigen.\\xa0 Nach Angaben des Beratungsunternehmens Deutsche Windguard waren Ende 2022 in Deutschland 1539 Offshore-Windenergieanlagen mit einer Leistung von insgesamt 8,1 Gigawatt in Betrieb. Dieses Thema im Programm: Über dieses Thema berichtete Deutschlandfunk am 29. April 2023 um 17:30 Uhr. 16.06.2023 • 13:29 Uhr 29.08.2022 • 14:43 Uhr '},\n",
" {'id': '08a99fad-b0be-4481-ac87-b71a8eeeb95e',\n",
" 'title': 'Siemens baut neue Hightech-Fabrik in Singapur',\n",
" 'date': '2023-06-15T19:23:48.142+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/siemens-investitionen-100.html',\n",
" 'text': ' Der Siemens hat neue Investitionen in Milliardenhöhe angekündigt. Das Geld fließt in den Ausbau eines Werks in Zentralchina, aber auch in eine neue Hightech-Fabrik in Singapur. Ein Umdenken der Konzerns? Siemens will in diesem Jahr zwei Milliarden Euro in Fabriken und Forschung in Asien, den USA und Europa investieren. Dabei soll es einen starken Fokus auf Asien geben: So werde in Zentralchina das Werk in Chengdu für 140 Millionen Euro ausgebaut, erklärte der Konzern. Gleichzeitig errichtet er in Singapur für 200 Millionen eine neue Hightech-Fabrik. An beiden Standorten werden so demnach jeweils 400 Arbeitsplätze entstehen. In Chengdu will Siemens seine Produktionskapazitäten um 40 Prozent ausbauen. \"Der chinesische Markt ist stark und wird weiter wachsen\", sagte Vorstandschef\\xa0Roland Busch dem \"Handelsblatt\". Kein Unternehmen könne es sich leisten, auf diesen attraktiven Markt zu verzichten. 09.02.2023 Siemens ist auf dem Weg zum Digitalkonzern. mehr Allerdings sehe Siemens auch das Risiko, sich zu sehr auf ein Land wie China zu konzentrieren - daher das Werk in Singapur. \"Wir wollen von hier aus die starke Nachfrage in Südostasien bedienen\", sagte Busch. Neben Indien seien auch Länder wie Thailand und Vietnam attraktive Absatzmärkte für den Konzern. In China soll in erster Linie für den chinesischen Markt produziert werden. Einen ähnlichen Ansatz verfolgten derzeit viele Unternehmen, so Jens Hildebrandt, Geschäftsführer der deutschen Auslandshandelskammer (AHK), gegenüber der Wirtschaftszeitung: Aus China heraus in andere asiatische Länder zu exportierten, werde einerseits durch die gestiegenen Kosten und anderseits auch aus geopolitischen Gründen \"unattraktiv\". Der Standort der neuen Siemens-Fabrik für Steuerungstechnik in Singapur ist ein Politikum. Der Konzern will unabhängiger von einzelnen Märkten und Standorten werden, womit vor allem China gemeint sein dürfte. Siemens-Chef Busch kündigte den Bau vor Ort an und sprach von einer Strategie, die Diversifizierung, Lokalisierung und Resilienz des Konzerns zu stärken. Der aktuellen Ankündigung ging möglicherweise ein Umdenken voraus. Aus Unternehmenskreisen war im Vorfeld zu hören, dass der Vorstand die neue Fabrik ursprünglich in China bauen wollte. Erst als es angesichts der zunehmenden geopolitischen Spannungen erheblichen Gegenwind im Aufsichtsrat gab, sei man auf Singapur umgeschwenkt. Dieser Darstellung hat Siemens inzwischen widersprochen. Die Behauptung, es habe einen solchen Schwenk gegeben sei schlicht falsch sagte ein Konzernsprecher dem Bayerischen Rundfunk. 03.11.2022 Topmanager begleiten Kanzler Scholz auf seiner China-Reise. mehr Bislang hat Siemens weltweit zwei Fabriken, in denen der Konzern Steuerungstechnik für Maschinen und ganze Fabriken herstellt: in Amberg in der Oberpfalz und in Chengdu. Weitere Investitionen in Europa und den USA an sollen im Laufe des Jahres bekanntgegeben werden. Zusammen mit einigen bereits im laufenden\\xa0Jahr bekanntgegebenen Investitionen, unter anderem in Tschechien, Amberg, Frankfurt und den Vereinigten Staaten, sollen sich die Investitionspläne auf rund 2 Milliarden Euro belaufen. Damit bliebe etwa eine Milliarde für die noch nicht näher genannten Investitionen in Europa und den USA. Siemens wachse deutlich schneller als der Markt, sagte der Konzernchef. \"Daher kündigen wir heute eine Investitionsstrategie an, um das künftige Wachstum zu fördern, Innovationen voranzutreiben und auch unsere eigene Resilienz zu erhöhen.\" faq 01.06.2023 Tech-Unternehmen konnten in den vergangenen Wochen vom Boom in der KI-Branche profitieren. mehr Die Investitionen untermauern Busch zufolge die Strategie des Konzerns, \"die reale und die digitale Welt zu verbinden, sowie unseren Fokus auf Diversifizierung und Lokalisierung unseres Geschäfts\". So solle der Fokus der Investitionen auf den Bereichen künstliche Intelligenz und industrielles \"Metaversum\" liegen, in denen Siemens unter anderem mit dem Chiphersteller Nvidia und dem US-Softwarekonzern Microsoft zusammenarbeitet. Erfolgreich ist der Konzern bereits in der Sparte Digitale Fabrik, wobei hier die Industrieautomatisierung eine zentrale Rolle spielt. In diesem Bereich ist der Konzern bereits Weltmarktführer und konnte diese Stellung zuletzt auch behaupten. Mit Informationen von Stephan Lina, BR 09.02.2023 • 09:33 Uhr Analyse 12.04.2023 • 14:43 Uhr Exklusiv 03.02.2023 • 20:30 Uhr 23.05.2022 • 10:16 Uhr 11.08.2022 • 10:57 Uhr '},\n",
" {'id': '836120ce-9602-4296-9b04-8eff4da34be5',\n",
" 'title': 'Befeuert Beyoncé die schwedische Inflation?',\n",
" 'date': '2023-06-15T16:31:26.141+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/beyonce-inflation-100.html',\n",
" 'text': ' Die Inflationsrate in Schweden ist zuletzt nicht wie erwartet gesunken. Schuld daran soll Beyoncé sein, sagt ein Volkswirt. Die US-Sängerin begann in der schwedischen Hauptstadt Stockholm ihre Welttournee. \"Renaissance\" heißt der Titel ihres neuen Albums, mit dem die US-Sängerin Beyoncé aktuell durch die Welt tourt. In Schwedens Hauptstadt Stockholm hatte die Sängerin die Tournee Anfang Mai eröffnet. Und soll damit laut dem Chefvolkswirt der Danske Bank in Schweden, Michael Grahn, die schwedische Inflation befeuert haben. \"Beyoncé ist für die zusätzliche Überraschung in diesem Monat verantwortlich. Das ist ziemlich erstaunlich für ein einzelnes Ereignis\", sagte Grahan der \"Financial Times\". \"Das haben wir noch nie gesehen.\" 02.02.2023 Minister Habeck berät in Schweden über die EU-Reaktion auf den \"Inflation Reduction Act\" der USA. mehr In Schweden lag die Inflationsrate im Mai bei 9,7 Prozent, nach 10,5 Prozent im April. Damit war die Inflation im Mai zwar erstmals seit Monaten wieder unter die Marke von zehn Prozent gefallen. Allerdings ging die sogenannte Kerninflation im Mai, in der die schwankungsanfälligen Preise für Energie und Lebensmittel nicht berücksichtigt werden, nur um 0,2 Prozent zurück - weit weniger als Ökonomen erwartet hatten. Das schwedische Statistikamt führt als Preistreiber neben einem hohen Zinsaufwand für Immobilienkäufe und Bekleidung vor allem die gestiegenen Preise für Hotels und Restaurantbesuche an. So haben laut der Statistikbehörde allein höhere Preise für Hotels und Restaurants 0,3 Prozentpunkte zur schwedischen Inflation beigetragen. Grahn bezeichnet das als den \"Beyoncé-Effekt\". Denn aus aller Welt seien Hunderttausende Fans zu dem Eröffnungskonzert am 10. Mai nach Stockholm gereist - Hoteliers hätten dies genutzt, um höhere Preise zu verlangen. Bekannt sind ähnliche Effekte laut der \"Financial Times\" bereits von großen Sportturnieren. Darum geht der Ökonom auch davon aus, dass der Effekt im Juni wieder nachlassen dürfte. Die Sängerin ist zum ersten Mal seit sieben Jahren wieder auf Tour und löste mit der Tourankündigung bereits eine enorme Nachfrage nach Tickets aus. Am Donnerstag gibt die Sängerin ihr erstes von drei Deutschlandkonzerten in Köln. In der kommende Woche tritt sie außerdem in Hamburg und Frankfurt auf, die Tickets für Konzerte sind seit Monaten vergriffen. Bislang zeigte sich der \"Beyoncé-Effekt\", wie Grahn ihn nannte, aber noch nicht in den Inflationsdaten anderer Länder, in denen die Sängerin bereits aufgetreten ist. 07.06.2023 Die Deutschen kaufen anders ein, um bei weiterhin steigenden Preisen zu sparen. mehr Dort hofft man übrigens, dass die Konzerte von Bruce Springsteen in Göteborg nicht ebenfalls einen \"Beyoncé-Effekt\" haben. Andreas Wallström, Leiter der Prognoseabteilung bei der Swedbank, sagte gegenüber der \"Financial Times\", er fürchte, dass die Springsteen-Konzerte ebenfalls zu steigenden Preisen in der Hotel- und Gastrobranche führen könnten. Dieses Thema im Programm: Über dieses Thema berichtete BR24 am 15. Juni 2023 um 15:52 Uhr. 14.06.2023 • 15:08 Uhr 15.06.2023 • 14:16 Uhr Analyse 02.03.2023 • 13:40 Uhr 24.03.2023 • 08:42 Uhr '},\n",
" {'id': '091386f3-78b5-4180-8d5b-7c5b371aed93',\n",
" 'title': 'Leitzins in der Eurozone steigt auf vier Prozent',\n",
" 'date': '2023-06-15T14:16:40.611+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/ezb-zinsanstieg-inflation-euroraum-100.html',\n",
" 'text': ' Die Europäische Zentralbank hat den Leitzins um 0,25 Prozentpunkte angehoben. Es ist bereits die achte Erhöhung in Folge seit Juli 2022. EZB-Präsidentin Lagarde deutete bereits eine weitere Erhöhung im Juli an. Die Europäische Zentralbank hat den Leitzins in der Eurozone abermals erhöht - um 0,25 Prozentpunkte. Damit liegt der zentrale Zinssatz, zu dem die Geschäftsbanken sich Geld bei der EZB leihen können, nun bei vier Prozent. An diesem sogenannten Hauptrefinanzierungssatz orientieren sich Banken bei der Kreditvergabe, etwa für private Baukredite. Mit dem neuen Zinsschritt hat die EZB seit Juli 2022 ihre Leitzinssätze bereits zum achten Mal in Folge erhöht. Diese Entwicklung gilt als der schnellste Erhöhungszyklus in ihrer Geschichte. Auch der sogenannte Einlagesatz für Banken, die ihr Geld bei der EZB \"parken\", stieg - von 3,25 auf 3,50 Prozent. Die EZB könnte laut ihrer Präsidentin Christine Lagarde schon im kommenden Monat ihren Leitzins nochmals anheben. \"Es wird sehr wahrscheinlich so sein, dass wir die Zinsen im Juli weiter erhöhen werden\", sage sie auf einer Pressekonferenz. \"Und das ist so, weil wir entschlossen sind, unser Ziel rechtzeitig zu erreichen\", ergänzte sie mit Blick auf die angestrebt Inflationsrate von zwei Prozent. \"Sind wir fertig? Haben wir unsere Reise schon beendet? Nein, wir sind noch nicht am Ziel angekommen.\" Vom EZB-Ziel ist die Teuerung in der Eurozone nach jüngsten Daten noch weit entfernt. Im Mai ging die Inflation zwar merklich auf 6,1 Prozent zurück. Allerdings dürfte sie im Gesamtjahr 2023 immer noch bei 5,4 Prozent liegen. Im kommenden Jahr wird die Rate den Prognosen zufolge dann bei 3 Prozent liegen und erst 2025 bei 2,2 Prozent. Als Haupttreiber der Inflation bezeichnete Lagarde derzeit den Arbeitsmarkt und die Löhne. Zuvor hatte die Notenbank-Chefin den europäischen Arbeitsmarkt als Quelle der wirtschaftlichen Stärke bezeichnet. Höhere Zinsen gelten als Mittel gegen die Teuerung, da sie die Nachfrage dämpfen und damit zeitverzögert auch den Preisauftrieb. Zugleich können steigende Zinsen das Wirtschaftswachstum hemmen. Aktuell ist bereits ein deutlicher Rückgang der Kreditnachfrage von Haushalten und Firmen zu beobachten. Am Mittwoch hatte die US-Notenbank Federal Reserve nach zehn Leitzinserhöhungen in Folge eine Pause eingelegt. Sie ließ erstmals seit Beginn ihrer jüngsten Zinserhöhungen im März 2022 den Leitzins unverändert und hält an der Zinsspanne von zwischen 5,0 und 5,25 Prozent fest. In den USA war zuvor bekannt geworden, dass die Inflationsrate im Mai auf vier Prozent gegenüber dem Vorjahresmonat gefallen ist. 14.06.2023 In ungewöhnlicher Form kritisiert die EZB die Wirtschaft dafür, die Teuerung künstlich anzutreiben. mehr \"Wir denken noch nicht über eine Pause nach\", sagte EZB-Präsidentin Lagarde dagegen heute. Zu einem möglichen Zinsgipfel wollte sie sich nicht äußern. Die Konjunkturaussichten im Euro-Raum bleiben aus Sicht der Währungshüterin vorerst eingetrübt: \"Das Wirtschaftswachstum bleibt kurzfristig wahrscheinlich schwach.\" Im Laufe des Jahres werde sich das Bild jedoch aufhellen. Gründe seien die voraussichtlich nachlassende Inflation und weiter abnehmende Lieferengpässe. 14.06.2023 • 20:53 Uhr 14.06.2023 • 10:03 Uhr 04.05.2023 • 14:46 Uhr 09.06.2022 • 01:09 Uhr 27.10.2022 • 05:00 Uhr '},\n",
" {'id': 'add3a48e-d847-48eb-9e0d-2a1db3daf00c',\n",
" 'title': 'Überschwemmte Äcker, bedrohte Ernten',\n",
" 'date': '2023-06-15T14:05:59.591+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/staudamm-ukraine-102.html',\n",
" 'text': ' Vom Kachowka-Stausee hängt die Bewässerung Hunderttausender Hektar Agrarfläche ab. Die Systeme zu reparieren, könnte Jahre dauern. Die Folgen des Dammbruchs für die Landwirtschaft könnten verheerend sein. Mehr als 10.000 Hektar landwirtschaftliche Fläche sind als Folge des Dammbruchs in der Ukraine überflutet worden. Nach ukrainischen Angaben wurden 150 Tonnen Maschinenöl in den Fluss Dnipro gespült. Ob die überfluteten Flächen mittelfristig wieder für Ackerbau genutzt werden können, ist offen. Alex Lissitsa, der Vorsitzende des ukrainischen Verbands der Agrarunternehmer, sagte auf Anfrage des Bayerischen Rundfunks, es werde befürchtet, dass sich auch Tierseuchen ausbreiten könnten, da kleinere Ställe mitsamt der Tiere von den Wassermassen weggeschwemmt wurden. Besorgt sind Landwirte aber nicht nur wegen der überfluteten Flächen. Am Kachowka-Stausee hängen 31 Bewässerungssysteme für gut 580.000 Hektar landwirtschaftliche Fläche. Dadurch könnten vier Millionen Tonnen Getreide verdörren, schätzt Lissitsa. Auch vor dem Dammbruch sei mit 20 Prozent weniger Getreide aus der Ukraine zu rechnen gewesen, da weniger ausgesät wurde, sagt er. Der Experte vermag die Auswirkung auf den Weltmarkt nicht abzuschätzen, da andere Regionen beim Getreideanbau mit großer Trockenheit zu kämpfen haben und Ausfälle befürchten. Möglicherweise könnten südosteuropäische Länder wie Rumänien oder Serbien die Folgen der Ernteausfälle in der Ukraine abfedern oder ausgleichen. 13.06.2023 Der Kreml bleibt dabei: Der Bruch des Staudamms Kachowka sei eine Folge ukrainischer Sabotage. mehr Betroffen ist aber auch der Anbau von Gemüse wie Tomaten und die daran hängende Lebensmittelindustrie, die aus den Tomaten Ketchup und andere Produkte herstellt, sowie der Melonenanbau. Schon vergangene Woche warnte das ukrainische Agrarministerium, ohne Bewässerung könnte die gute halbe Million Hektar Fläche in \"Wüste\" verwandelt werden. Nun wird der ukrainische Agrarminister Mykola Solskyi konkreter: Indirekt könnten insgesamt 1,5 Millionen Hektar landwirtschaftliche Fläche betroffen sein, da es sich für Landwirte nicht lohne, Felder ohne Bewässerung zu bewirtschaften, wenn ihnen das Einkommen aus den Feldern fehle, die bis vor kurzem bewässert wurden. Solskyi vermutet, dass es drei bis sieben Jahre dauert, bis die Bewässerungssysteme wieder repariert sind. Er warnt vor einem sozialen Problem durch die Ernteausfälle. Ihm zufolge werden die Bewässerungssysteme nicht mit Wasser versorgt werden, bis der Staudamm wiederaufgebaut ist. reportage 11.06.2023 Aber die freiwilligen Helfer lassen sich davon nicht entmutigen. Ein Besuch vor Ort. mehr Wie werden sich die Folgen des Dammbruchs auf den Agrarmarkt in Deutschland auswirken? Das Bundeslandwirtschaftsministerium teilt auf BR-Anfrage mit, die Preise für Getreide seien nach dem Staudammbruch weltweit gestiegen, \"die Auswirkungen auf den deutschen Agrarmarkt sind aber bislang insgesamt moderat\". Andreas Löbhard, der Marktexperte des Bayerischen Bauernverbandes (BBV), rechnet wegen der ausreichenden Selbstversorgung in Deutschland nicht damit, dass der Bruch des Staudamms Einfluss auf die Nahrungsmittelerzeugung hierzulande haben wird. Nach dem Überfall Russlands auf die Ukraine im Februar vergangenen Jahres stiegen die Getreidepreise rapide an und erreichten im April 2022 den bisherigen Höchststand während des Kriegs, so der BBV. \"Seit der zweiten Jahreshälfte des vergangenen Jahres erleben wir einen stetigen Abwärtstrend der Getreidepreise, der sich nach Auffassung des BBV kurzfristig auch so fortsetzen wird\", sagte der Verbands-Experte. 07.06.2023 Nach der Zerstörung des Kachowka-Staudamms sind Zehntausende auf der Flucht vor den Wassermassen. mehr Zwei Gründe nennt Löbhard für die sinkenden Preise: ein umfangreiches Angebot von Getreide aus der Schwarzmeerregion, für das die Ukraine über das Getreideabkommen und vor allem Russland verantwortlich seien. \"Russland hat in der vergangenen Saison eine Rekordernte eingefahren und weist eine hohe Exportquote auf.\" Der zweite Grund für die massiven Preisverfälle bei Getreide sieht er in den guten Prognosen für die kommende Ernte. Kombiniert mit gut gefüllten Lagern wirken sich die positiven Aussichten preisdrückend aus. Löbhard schätzt die Lage also deutlich optimistischer ein als der ukrainische Agrarexperte Lissitsa, der auf weniger Ernte in der Ukraine und in anderen möglicherweise von Trockenheit betroffenen Anbaugebieten verweist. reportage 09.06.2023 • 11:34 Uhr 09.06.2023 • 11:24 Uhr 08.06.2023 • 15:45 Uhr 07.06.2023 • 13:50 Uhr 29.05.2023 • 14:56 Uhr Video 15.06.2023 • 22:56 Uhr Analyse 30.04.2022 • 03:16 Uhr Audio 21.04.2022 • 15:36 Uhr Audio 21.04.2022 • 09:34 Uhr '},\n",
" {'id': '54453278-1e7d-4bc3-b33f-ea84f2daa7ac',\n",
" 'title': 'Forscher erwarten 2023 schrumpfende Wirtschaft',\n",
" 'date': '2023-06-15T12:52:14.804+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/konjunktur/deutsche-wirtschaft-rezession-prognosen-100.html',\n",
" 'text': ' Mehrere Wirtschaftsforschungsinstitute haben ihre Prognosen für das deutsche Wirtschaftswachstum im laufenden Jahr nach unten geschraubt. Allerdings zieht der private Konsum wieder an und könnte für Erholung sorgen. Für die Wirtschaftsleistung in Deutschland zeichnet sich nach Einschätzung mehrerer Wirtschaftsforschungsinstitute für das laufende Jahr ein Rückgang ab. So erwartet etwa das Kieler Institut für Weltwirtschaft (IfW) im Vergleich zum Vorjahr ein Minus von 0,3 Prozent und revidiert damit seine Frühjahrsprognose (+0,5 Prozent) nach unten, wie es mitteilte. Grund sei vor allem das Winterhalbjahr. Im Jahresverlauf sei aber ein moderates Wachstum zu erwarten. 06.06.2023 Die Industrie ist schwach ins zweite Quartal gestartet - damit könnte die Wirtschaft weiter schrumpfen. mehr Für 2024 rechnet das IfW nun mit einem Plus von 1,8 Prozent (bisher 1,4 Prozent). Die Inflation dürfte sich in den kommenden Monaten deutlich verringern und 2024 dann 2,1 Prozent betragen. In Anbetracht der Krise und des Lieferstopps von Öl und Gas aus Russland schlage sich die deutsche Wirtschaft wacker und bestätige damit ihre Fähigkeit, sich schnell an neue Gegebenheiten anzupassen, kommentierte Institutspräsident Moritz Schularick. IfW-Konjunkturchef Stefan Kooths sagte, der Ausblick sei \"besser als es die negative Jahresrate für das Bruttoinlandsprodukt vermuten lässt\". \"Ein nach wie vor großes Aufholpotenzial nach der Corona-Pandemie, hohe Auftragsbestände in der Industrie und demnächst kräftige Kaufkraftzuwächse bei einem stabilen Arbeitsmarkt sind die Zutaten, die die Konjunktur stützen.\" Verglichen zur Frühjahrsprognose haben die Nachwehen der Energiekrise sowie die straffe Geldpolitik der deutschen Wirtschaft im Winterhalbjahr jedoch etwas stärker zugesetzt als zunächst erwartet, hieß es vom IfW. Mit einem ungewöhnlich hohen Krankenstand und einem Einbruch des Staatskonsums nach dem Ende der Corona-Maßnahmen hätten außerdem Sondereffekte die Wirtschaftsleistung merklich gedämpft. Dazu kämen die Belastungen durch Arbeitskräftemangel und Lieferengpässe. Gegenwärtig liegt das Bruttoinlandsprodukt (BIP) noch 0,5 Prozent unter dem Niveau vor Ausbruch der Corona-Pandemie. hintergrund 26.05.2023 Während Deutschland in die Rezession gerutscht ist, läuft die Konjunktur anderswo in Europa besser. mehr Dank kräftiger Verdienstzuwächse und höherer Sozialleistungen bei gleichzeitig sinkender Inflationsrate nimmt die Kaufkraft vieler Menschen laut IfW-Prognose bereits im Jahresverlauf merklich zu. Das verleihe dem zuletzt sehr schwachen privaten Konsum Auftrieb. \"Ein Teil des drastischen Preisauftriebs, der zunächst die Gewinnmargen steigen ließ, kommt nun in Form von höheren Löhnen bei den Arbeitnehmerhaushalten an\", so Kooths. Davon profitieren demnach vor allem die Dienstleistungsbranchen, sprich der Einzelhandel oder das Hotel- und Gaststättengewerbe. Das Deutsche Institut für Wirtschaftsforschung (DIW) geht ebenfalls davon aus, dass die Menschen in Deutschland in diesem Quartal wieder mehr konsumiert haben. \"Wir denken, dass der private Konsum sich erholt - aber zaghaft\", sagte DIW-Expertin Geraldine Dany-Knedlik heute. Die verlangsamte Inflation habe dazu beigetragen, dass die Unsicherheit gemindert worden sei. \"Wir sehen jetzt auch erste Tariflohnabschlüsse mit kräftigen Raten, wie zum Beispiel im Öffentlichen Dienst.\" Laut DIW-Erwartung dürften die realen Einkommen ab der zweiten Jahreshälfte erstmals seit drei Jahren wieder steigen. Damit hätten die Menschen auch abzüglich der Preissteigerungen mehr Geld zur Verfügung. Zuvor war der private Konsum eingebrochen. Das habe mit dazu geführt, dass die deutsche Wirtschaft im ersten Quartal leicht geschrumpft sei, sagte Dany-Knedlik. Das DIW geht nun davon aus, dass die Wirtschaftsleistung in diesem Jahr insgesamt um 0,2 Prozent zurückgehen wird. Die anstehende Erholung werde die Verluste aus den ersten Monaten nicht ausgleichen können. 05.06.2023 In den 1950er Jahren wuchs die deutsche Wirtschaft rasant. Derzeit ist sie in einer Rezession. mehr Noch weitere Institute senkten heute ihre Konjunkturprognosen für Deutschland. So erwartet etwa das RWI – Leibniz-Institut für Wirtschaftsforschung für dieses Jahr einen Rückgang der Wirtschaftsleistung um 0,3 Prozent. Im März waren die Forscher noch von einem Wachstum von 0,2 Prozent ausgegangen. Für 2024 rechnet das RWI hingegen wie das IfW mit einem stärkeren Wachstum als bislang: 2,0 statt 1,8 Prozent. \"Die gesamtwirtschaftliche Nachfrage in Deutschland ist derzeit schwach. Dies ist vor allem auf einen kräftigen Rückgang des Konsums der privaten Haushalte zurückzuführen\", teilte das Essener Institut mit, verwies aber ebenfalls mit Blick auf die sinkende Inflation auf eine Erholung. Für den Sommer ist dLine truncated
" {'id': 'b61939bd-efd5-41e9-809a-7c8231113937',\n",
" 'title': 'Palmöl statt Sonnenblumenöl in Pommes und Chips',\n",
" 'date': '2023-06-15T12:44:07.989+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/chips-palmoel-sonnenblumenoel-100.html',\n",
" 'text': ' Die Lieferengpässe von Sonnenblumenöl sind längst vorbei. Aber offenbar greifen Hersteller von Pommes und Chips derzeit trotzdem lieber zum günstigen Palmöl. In der Zutatenliste sucht man einen Hinweis dazu allerdings häufig vergeblich. Hersteller von Kartoffelchips und Pommes verwenden offenbar weiterhin ersatzweise billigeres Palm- statt Sonnenblumenöl. Wie die Hamburger Verbraucherzentrale unter Verweis auf Stichprobenkäufe mitteilte, wurden die Produkte teils sogar in alten Packungen mit falscher Kennzeichnung vertrieben: In der Zutatenliste war Sonnenblumenöl aufgeführt. Der Hinweis auf das ersatzweise verwendete Palmöl fand sich lediglich in einem Aufdruck in dem Feld mit dem Mindesthaltbarkeitsdatum. Laut Verbraucherzentrale ist dies durch eine Flexibilisierungsregelung bei der Lebensmittelkennzeichnung zwar übergangsweise erlaubt, damit die Branche auf außergewöhnliche Lieferengpässe reagieren kann. Eine solche Situation lag im vergangenen Jahr nach Beginn des russischen Angriffskriegs gegen die Ukraine vor. Denn die Ukraine ist ein führender Produzent von Sonnenblumenöl. Das Öl wurde weltweit knapp, weshalb Unternehmen alternativ auf Palmöl und -fett umstiegen. 29.04.2022 Das Exportverbot von indonesischem Palmöl hat die Preise weiter nach oben getrieben. mehr Nach Einschätzung der Verbraucherschutzzentrale hat sich die Marktlage allerdings bereits in der zweiten Sommerhälfte des vergangenen Jahres wieder entspannt, es sei Sonnenblumenöl in ausreichender Menge verfügbar gewesen. Hersteller von Kartoffelfertigprodukten oder auch Cerealien halten dennoch weiterhin an Palmöl fest. Für die Unternehmen sei dies wegen des niedrigeren Preises lukrativ, für die Verbraucherinnen und Verbraucher aber entstünden Nachteile: So bestehe Palmöl zu einem größeren Teil aus gesundheitlich weniger wünschenswerten gesättigten Fettsäuren, erklärten die Verbraucherschützer. Auch könnten bei der Verarbeitung krebserregende Stoffe entstehen. Die Verbraucherzentrale untersuchte im April nach eigenen Angaben 13 Produkte, bei denen Sonnenblumenöl im Sommer 2022 durch Palmöl ersetzt worden war. Zwölf waren noch immer mit Palmöl als Zutat im Handel. Nur eine Sorte Chips wurde wieder mit Sonnenblumenöl verkauft. Sie forderten ein Einschreiten der Lebensmittelüberwachung und rieten Verbraucherinnen und Verbrauchern dazu, sehr genau auf Zutatenlisten sowie Aufdrucke zu achten. \"Unseres Erachtens nutzen die betroffenen Hersteller die Ausnahmesituation des letzten Jahres zu ihren Gunsten aus\", erklärte der Lebensmittelexperte der Hamburger Verbraucherzentrale, Armin Valet. 03.03.2022 • 08:13 Uhr 30.07.2022 • 08:35 Uhr '},\n",
" {'id': 'd08c035a-32d1-45e6-93a1-9027e69f3957',\n",
" 'title': 'Mehr als doppelt so viele Studierende wie Azubis',\n",
" 'date': '2023-06-15T11:29:25.861+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/studierende-auszubildende-100.html',\n",
" 'text': ' Der Trend zur Akademisierung in Deutschland verstärkt sich seit vielen Jahren. 2021 gab es weit mehr als doppelt so viele Studentinnen und Studenten wie Auszubildende. Viele Betriebe können Ausbildungsstellen nicht mehr besetzen. Die Zahl der Studierenden in Deutschland ist in den vergangenen Jahren deutlich gestiegen. So gab es 2021 hierzulande weit mehr als doppelt so viele Studentinnen und Studenten (2,9\\xa0Millionen) wie Auszubildende (1,3\\xa0Millionen). Auf zehn Studierende kamen somit 4,3 Auszubildende, wie das Statistische Bundesamt mitteilte. 1950 kamen auf zehn Studierende noch 75,5 Auszubildende. Besonders dramatisch ist das für Ausbildungsbetriebe: Mittlerweile wird es für sie immer schwieriger, ihre Ausbildungsstellen zu besetzen. Einerseits begründen das die Statistiker mit der demografischen Entwicklung, die dazu führt, dass weniger junge Menschen die Schule verlassen. Außerdem schlage sich der gesellschaftliche Wandel, in dem Akademisierung, Individualisierung und Privatisierung eine immer höhere Bedeutung bekommen, auch in der Ausbildungswahl nieder und mache ein Studium für viele attraktiver. Auch die Verteilung der Auszubildenden auf die verschiedenen Berufe hat sich erheblich verändert. Während 1950 bei den männlichen Auszubildenden die angehenden Maurer, Tischler und Maler dominierten, stehen heute die künftigen Kraftfahrzeugmechatroniker und Anlagenmechaniker für Sanitär-, Heizungs- und Klimatechnik an vorderster Stelle. Bei den weiblichen Auszubildenden sind heute vor allem Kauffrau für Büromanagement, medizinische Fachangestellte und zahnmedizinische Fachangestellte beliebt. Der steigende Grad der Akademisierung zeigt sich auch am wachsenden Anteil der Abiturientinnen und Abiturienten. So stieg die Zahl derer, die eine allgemeine Hochschulreife oder die Fachhochschulreife erlangten, im Jahr 2021 auf 34,4\\xa0Prozent. 1970 hatte sie noch bei 11,5 Prozent gelegen. Parallel dazu sank der Anteil der Jugendlichen ohne Abschluss von rund 20 Prozent auf 6,2 Prozent. 16.05.2019 Von August an sollen Studenten und Schüler mehr BAföG erhalten können. Der Opposition reicht das nicht. mehr Eine der auffälligsten Veränderungen, die die Statistiker feststellen konnten, betrifft die immer stärkere Bildungsbeteiligung von Frauen und Mädchen. So waren 2021 mehr als die Hälfte der Studienanfänger im ersten Hochschulsemester weiblich, 1950 lag ihr Anteil lediglich bei 18,5\\xa0Prozent. Unter den Auszubildenden ist der Frauenanteil ebenfalls gestiegen: Im Jahr 2021 lag der Anteil an weiblichen Azubis bei 34,5\\xa0Prozent, 1950 hatte der Frauenanteil unter den Auszubildenden bei 24,9\\xa0Prozent gelegen. Daran zeigt sich, dass auch nach wie vor deutlich mehr Männer als Frauen eine Berufsausbildung im dualen System machen. 05.12.2022 • 18:00 Uhr 08.09.2022 • 12:47 Uhr 21.09.2022 • 16:50 Uhr 23.03.2023 • 15:40 Uhr FAQ 15.03.2023 • 12:17 Uhr FAQ 19.04.2020 • 04:47 Uhr '},\n",
" {'id': 'tagesschau_dba63ea8-ccd4-46c9-9daa-59207bcb6741',\n",
" 'title': 'Musik - aber ohne Musiker',\n",
" 'date': '2023-06-15T11:08:28.989+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/ki-musikindustrie-101.html',\n",
" 'text': ' Künstliche Intelligenz dringt in alle Lebensbereiche vor - auch in die Musik und komponiert sogar selbst. Doch auf Basis bereits veröffentlichter Werke. Universal Music will dagegen nun vorgehen. Immer schneller entwickelt sich die Künstliche Intelligenz (KI), immer besser werden ihre Anwendung. Nun tauchen auf den Plattformen von Musik-Streamingdiensten offenbar vermehrt Songs auf, die von Künstlicher Intelligenz aus generiert wurden - aus Liedern von bekannten Künstlern, die auf diesen Plattformen veröffentlicht wurden. Die Universal Music Group, selbst eines der größten Musiklabels, hat wichtige Streamingdienste für Musik nun offenbar aufgefordert, zu handeln. Wie aus internen E-Mails, die der \"Financial Times\" vorliegen, hervorgeht, verlangt Universal Music, dass Plattformen wie Spotify oder Apple gezielt gegen die Verbreitung von KI-generierter Musik vorgehen. \"Wir werden nicht zögern, Schritte zu unternehmen, um unsere Rechte und die unserer Künstler zu schützen\", schrieb Universal Music bereits im März an die Streamingdienste. Hintergrund 15.06.2023 Alibaba hat sein KI-Modell veröffentlicht - und China einen ersten Regulierungsentwurf. mehr Nach Informationen der \"Financial Times\" sei man bei Universal Music besorgt darüber, dass KI-Bots vermehrt Songs populärer Künstler, die auf Streaming-Plattformen zu finden sind, nutzen, um sich selbst das komponieren beizubringen. Das Problem daran: Die Bots würden laut Informationen der \"Finanical Times\" besonders die Pop-Songs nutzen, um sich selbst das Komponieren beizubringen - und klingen dann auch wie die derzeit erfolgreichen Künstlerinnen und Künstler. \"Wir haben eine moralische und kommerzielle Verantwortung gegenüber unseren Künstlern, daran zu arbeiten, die unbefugte Nutzung ihrer Musik zu verhindern und Plattformen daran zu hindern, Inhalte aufzunehmen, die die Rechte von Künstlern und anderen Urhebern verletzen\", sagte ein Sprecher der Universal Music Group gegenüber der \"Financial Times\". Universal Music hat bekannte deutsche und internationale Künstler unter Vertrag, etwa die deutsche Sängerin Sarah Conner, Rammstein, Eminem oder Billie Eilish. Ihre Rechte will der US-Musikkonzern, der neben Sony Music und der Warner Music Group eines der wichtigsten Musiklabels weltweit ist, schützen. 15.02.2021 Für die Songkataloge von Neil Young, Shakira oder Bob Dylan werden gigantische Summen aufgerufen. mehr Denn die Programme, die in der Lage sind, KI-generierte Musikstücke zu erzeugen, häufen sich. Auch der US-Konzern Google hat ein solches Programm entwickelt: MusicLM. Aus Beschreibungen generiert das Programm Musikstücke, die dann etwa so klingen können \"Langsamer, Bass-und Schlagzeug-geführter Reggae-Song\". Dies ist auf der Webseite zum neuen Programm zu hören. \"Unsere Experimente zeigen, dass MusicLM sowohl in der Audioqualität als auch in der Einhaltung der Textbeschreibung bisherige Systeme übertrifft\", heißt es von den Entwicklern. 04.03.2023 Der schottische Sänger Nathan Evans wurde mit \"Wellerman\" über Nacht zum TikTok-Star. mehr Und es gibt bereits großartige Erfolge zu feiern: 2021 wurde die von dem deutschen Komponisten Ludwig van Beethoven zu seinen Lebzeiten nicht vollendete 10. Sinfonie uraufgeführt. Eine KI hatte \"Beethovens X\" zu Ende geschrieben, der Dirigent zeigte sich vor zwei Jahren aber noch skeptisch: \"Die KI verarbeitet Dinge, die schon passiert sind. Die Frage ist, ob sie etwas originäres Neues schafft, was aus der Seele des Menschen einen Zeitgeist auffängt und daraus ein unverwechselbares Kunstwerk macht. Da hätte ich meine ganz, ganz großen Zweifel\", sagte Dirigent Dirk Kaftan. Dass KI in ihrer Kreativität der Menschlichen allerdings in nichts nachsteht, konnte jüngst eine Studie der\\xa0Humboldt-Universität zu Berlin (HU) und der Universität in Essex belegen: Sie ließ 100 Menschen und sechs KI-Programme einen Kreativitätstest ablegen, mit dem verblüffenden Ergebnis, dass es zwischen den menschlichen und den KI-basierten Kreativ-Erzeugnissen kaum Unterschiede gab. FAQ 29.07.2019 Im Rechtsstreit zwischen Kraftwerk und Moses Pelham hat der EuGH ein Grundsatzurteil gefällt. mehr Auch wenn KI laut\\xa0Antonio Krüger, Direktor des Deutschen Forschungszentrums für Künstliche Intelligenz, nicht in der Lage sei, selbst \"völlig abstraktes Neuland zu betreten\", ist die Musik-Branche aufgeschreckt. \"Wir gehen davon aus, dass unsere Plattformpartner verhindern wollen, dass ihre Dienste auf eine Weise genutzt werden, die den Künstlern schadet\", sagte ein Sprecher der Universal Music Group der \"Finanical Times\". Und meint damit eindeutig, KI-generierte Musik, die auf Basis bereits veröffentlichter Werke Ähnliches reproduziert. Die Streaming-Dienste selbst habenLine truncated
" {'id': 'tagesschau_e9ece930-0109-4949-ab69-7243e69d48a2',\n",
" 'title': 'Chatbot mit \"sozialistischen Grundwerten\"',\n",
" 'date': '2023-06-15T11:08:28.656+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/technologie/alibaba-ki-chatbot-china-regulierung-101.html',\n",
" 'text': ' Chinas Techriese Alibaba will im Geschäft mit Künstlicher Intelligenz mitmischen. Gleichzeitig bereitet Peking staatliche Auflagen vor. Aber auch im Westen müssen sich Regierungen fragen: Wie viel Regeln braucht die Technologie? Für den chinesischen Internet-Riesen Alibaba war es eine große Ankündigung. Die Cloud-Sparte des Online-Handelskonzerns hat heute ein Konkurrenzangebot zum Textroboter ChatGPT vorgestellt: die Sprachsoftware \"Tongyi Qianwen\", was so viel wie \"Wahrheit aus tausend Fragen\" bedeutet, die ebenfalls Künstliche Intelligenz (KI) einsetzt. Doch nur kurz darauf dürfte die Freude der Entwickler einen kräftigen Dämpfer erhalten haben. Gleichzeitig veröffentlichte die chinesische Internet-Regulierungsbehörde, die \"Cyberspace Administration of China\", den ersten Entwurf geplanter Vorschriften für KI-Dienstleistungen. In 21 Punkten stellt die Behörde mögliche Auflagen vor, die bald auf die chinesischen Unternehmen und Entwickler von KI-Sprachmodellen zukommen könnten. So müssen die Inhalte nach dem Willen Pekings die \"Grundwerte des Sozialismus\" widerspiegeln. Zudem dürfen keine Informationen verbreitet werden, welche die wirtschaftliche und soziale Ordnung stören könnten. Auch soll bei der Entwicklung der Algorithmen darauf geachtet werden, Diskriminierung etwa aufgrund von Geschlecht oder Alter zu verhindern. 15.05.2023 Mit KI lassen sich in kurzer Zeit Texte erzeugen. mehr Ein Problem für die Entwickler dürfte dabei auch die Regel darstellen, dass alle Inhalte wahrheitsgemäß sein sollen. Die Entwicklung von KI-Sprachmodellen befindet sich derzeit noch in einem frühen Stadium. In vielen Fällen arbeitet die Software noch ungenau und durchaus fehleranfällig. Ein peinlicher Irrtum unterlief etwa Google bei der Vorstellung seines Chatbots \"Bard\", der bei seinem ersten öffentlichen Auftritt eine falsche Antwort zum James-Webb-Teleskop gab. Alibabas Chatbot ist dagegen zunächst auf das Geschäftsleben ausgerichtet und soll etwa Dokumente oder E-Mails verfassen. Es bleibe jedoch abzuwarten, wie gut sich der Bot im Rennen mit der Konkurrenz schlage, sagt George Karapetyan, KI-Fachmann bei der Beratung LPA gegenüber tagesschau.de. \"Ersten Anwenderberichten zufolge hatte Alibabas Bot außerdem bereits \\'Halluzinationen\\', was letztlich bedeutet, dass er selbstbewusst falsche Antworten gibt.\" Die chinesische Regulierungsbehörde will solchen falschen Inhalten nun Einhalt gebieten. Bis zum 10. Mai dürfen zum Vorschriften-Katalog noch Kommentare und Vorschläge eingereicht werden. \"Da die chinesische Regierung beginnt, zu regulieren und vorzuschreiben, was diese Bots sagen dürfen und was nicht, könnte dies eine zusätzliche Hürde bei der Abwägung zwischen Innovation und Einhaltung von Vorschriften darstellen\", so Karapetyan. 09.02.2023 Googles Chatbot hat sich mit einer Antwort vertan - und die Aktie des Mutterkonzerns einbrechen lassen. mehr Aus Sicht des Experten kann die frühzeitige Einführung eindeutiger Regeln für die Unternehmen andererseits auch hilfreich sein, um das Risiko unvorhergesehener Ergebnisse zu mindern. \"Gelingt es China frühzeitig, klare Leitplanken zu definieren, birgt dies auch Chancen.\" Es könne jedoch schwierig sein, eine Technologie zu regulieren, die sich so schnell entwickelt und so intelligent sei. Jeden Tag werde berichtet, wie Internetnutzer die Schutzmechanismen zur Kontrolle der Bots umgehen. Alibaba ist dabei nur das jüngste Beispiel eines chinesischen Konzerns mit eigenem Textroboter. Nur einen Tag zuvor hatte das in Hongkong ansässige KI-Unternehmen SenseTime in einer Live-Demo seinen Chatbot \"SenseChat\" vorgestellt, auf den die Börse mit einem kräftigen Kursplus reagierte. Und nicht zuletzt demonstrierte auch die chinesische Suchmaschine Baidu seinen Chatbot \"Ernie Bot\", der jedoch für weniger Begeisterung und einen fallenden Aktienkurs sorgte. \"Chinesische Bots hinken im Moment noch hinterher und konzentrieren sich primär auf die chinesische Sprache\", so KI-Fachmann Karapetyan. Im Moment sei ChatGPT, die vom Start-up OpenAI konzipierte und von Microsoft unterstützte Software, der \"klare Marktführer und der Goldstandard\" unter den Chatbots. 16.03.2023 Baidu, der Google-Rivale aus China, hat seinen neuen ChatGPT-Konkurrenten \"Ernie\" vorgestellt. mehr Die Konkurrenten von Microsoft und ChatGPT in der Tech-Branche sind unter Zugzwang geraten, ihr Geschäft mit Künstlicher Intelligenz voranzutreiben, auch wenn das Produkt noch unreif ist. Gleichzeitig wächst angesichts der rasanten Entwicklung der Druck auf Regierungen weltweit, Antworten auf die Frage zu finden, wie der Gesetzgeber reagieren soll. In den USA kündigte die IT-Behörde NTIA (\"National Telecommunications and Information Administration\") heute öffentliche Beratungen zu möglichenLine truncated
" {'id': 'tagesschau_a6d1d568-7ca8-48cf-932c-9b010770c077',\n",
" 'title': 'Microsoft bringt KI-Anwendungen ins Büro',\n",
" 'date': '2023-06-15T11:08:28.303+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/technologie/ki-microsoft-google-baidu-office-bueroprogramme-chat-nadella-wettlauf-chatgpt-101.html',\n",
" 'text': ' Im Wettlauf um die Anwendung von Künstlicher Intelligenz im professionellen Alltag nimmt Microsoft die nächste Hürde. Der Konzern integriert Funktionen in seine wichtigsten Büroprogramme. \\xa0\\xa0\\xa0\\xa0 Microsoft geht bei der Anwendung von Künstlicher Intelligenz in die Offensive. Der Technologiekonzern werde umfassende KI-Funktionen in seine wichtigsten Büroprogramme integrieren, kündigte Konzernchef Satya Nadella an. Mit dem \"Microsoft 365 Copilot\" könnten Anwenderinnen und Anwender von Office-Programmen von den neuartigen KI-Funktionen profitieren, die seit Monaten in der IT-Welt für Aufsehen sorgten, so Nadella. Zu den Office-Bausteinen, die eine \"Copilot\"-Erweiterung erhalten, gehören Word für Textverarbeitung, Outlook für E-Mails und Kalender, Powerpoint für Präsentationen und Teams für Chats. 06.03.2023 Ob Microsoft, Google, Meta, Snapchat oder TikTok: Die Tech-Konzerne versuchen eilig, mit Künstlicher Intelligenz Geschäfte zu machen. mehr \"Der heutige Tag markiert den nächsten großen Schritt in der Entwicklung der Art und Weise, wie wir mit Computern interagieren\", sagte Nadella. Dies werde die Art und Weise, wie wir arbeiten, grundlegend verändern und eine neue Welle des Produktivitätswachstums freisetzen, verspricht er. Mit dem neuen \"Copiloten für die Arbeit\" gebe Microsoft den Menschen mehr Handlungsspielraum und mache Technologie über die universellste Schnittstelle - die natürliche Sprache - zugänglicher. Nadella stellte zusammen mit Microsoft-Manager Jared Spataro beispielsweise einen neuartigen Business Chat vor. Dieser arbeitet nicht nur mit den Daten eines öffentlichen KI-Sprachmodells, sondern greift auch auf persönliche Daten wie Kalendereinträge, E-Mails, Chats sowie andere Dokumente der Anwenderinnen und Anwender zurück. \"Damit können Sie Dinge erledigen, die Sie bisher noch nie tun konnten\", so Spataro. So könne man dem Programm mündlich Anweisungen geben, wie zum Beispiel: \"Sagen Sie meinem Team, wie wir die Produktstrategie aktualisiert haben.\" Die Software würde dann auf Basis von Meetings, E-Mails und Chats ein entsprechendes Status-Update erstellen. 08.02.2023 Microsoft will eine ChatGPT-Variante in seine Suchmaschine Bing integrieren und so Google angreifen. mehr Mit der breit angelegten KI-Offensive greift Microsoft die bislang unangetastete Führungsposition von Google in den Bereichen Internetsuche und Onlinewerbung an. Hier spielt die Integration des Text-Roboters ChatGPT in Bing und den Browser Microsoft Edge eine maßgebliche Rolle. Mit \"Microsoft 365 Copilot\" will der weltgrößte Software-Konzern zusätzlich seine Vormachtstellung im Bereich der Office-Software absichern und weiter ausbauen. Die Integration der KI-Funktionen in seine Office-Software dürfte von noch größerer Tragweite sein als die KI-Initiative bei Bing. Bei der Suchmaschine Bing kommt der Konzern nur auf niedrige einstellige Marktanteile, während Microsoft den Office-Markt mit großem Abstand dominiert. Analyse 31.01.2023 Deutschland hinkt bei der Entwicklung von Künstlicher Intelligenz zurück. Hat die Ampel eine Strategie? mehr Ein Microsoft-Sprecher sagte der Nachrichtenagentur dpa, \"Microsoft 365 Copilot\" und der \"Business Chat\" könnten auch bedenkenlos in der Europäischen Union eingesetzt werden, da sie die Bestimmungen der Datenschutz-Grundverordnung (DSGVO) der EU erfüllten. Die KI-Lösungen seien auch nicht an den Einsatz der englischen Sprache gebunden, sondern würden auch beispielsweise auf Deutsch gut funktionieren. Derzeit werde das Update von 20 ausgewählten gewerblichen Kunden getestet. Weitere sollen in den nächsten Monaten hinzukommen. Das Preismodell für den Einsatz der KI-Funktionen werde in absehbarer Zeit kommuniziert. 16.03.2023 Baidu, der Google-Rivale aus China, hat seinen neuen ChatGPT-Konkurrenten \"Ernie\" vorgestellt. mehr Am Dienstag hatte Google bereits angekündigt, eine Reihe von neuen generativen KI-Funktionen für seine verschiedenen Workspace-Apps auf den Markt zu bringen, darunter Google Docs, GMail, Sheets und Slides. Zu den Funktionen gehören unter anderem neue Möglichkeiten, Texte mit KI zu generieren oder zusammenzufassen sowie Ideen zu sammeln. Dank der KI können dann vollständige E-Mails in GMail auf der Grundlage von knappen Aufzählungspunkten erzeugt werden. Der chinesische Internetkonzern Baidu hat mit seiner Antwort auf den populären Text-Automaten ChatGPT gestern allerdings die Erwartungen nicht erfüllt. \"Ich kann nicht sagen, dass wir vollständig bereit sind\", sagte Firmengründer Robin Li bei einer im Internet übertragenen Präsentation. Ernie Bot werde enthüllt, weil der Markt danach verlange. ChatGPT sei eine \"hohe Messlatte\". China gilt neben den USA als führend in der ErforschungLine truncated
" {'id': '1f18906e-c098-4a20-a3a3-ecc8f4810993',\n",
" 'title': 'Wenn der ICE am Großstadt-Bahnhof vorbeirauscht',\n",
" 'date': '2023-06-15T10:08:23.093+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/bahn-fernverkehrsnetz-100.html',\n",
" 'text': ' Zweimal am Tag hält neuerdings ein ICE in Ravensburg mit seinen 50.000 Einwohnern. Andere teils deutlich größere Städte warten bis heute auf ihren Anschluss an den Schienenfernverkehr. Es ist ein historischer Moment für Ravensburg. Am vergangenen Sonntag um 15.02 Uhr fährt der ICE von Dortmund nach Innsbruck in die Stadt in Oberschwaben ein - zum ersten Mal in ihrer Geschichte. Die Gleise wurden kürzlich saniert. \"Das ist eine neue Ära für Ravensburg. Das ist ganz was Großes\", sagt Bahnfan Andreas Klimowitsch, der wie viele andere heute extra zum Bahnsteig gekommen ist. Anna Schuster hat sich sogar ein Ticket gekauft. \"Um einmal ICE zu fahren. Das erste Mal\", sagt sie. Zweimal täglich hält in Zukunft ein ICE in Ravensburg. Einmal auf dem Weg nach Innsbruck, einmal auf dem Rückweg nach Dortmund. Damit hat die Stadt mit knapp 50.000 Einwohnern vielen deutschen Großstädten etwas voraus. 17.05.2023 Die Deutsche Bahn unterzieht sich einem Modernisierungsprogramm und will damit auch das Durchschnittsalter seiner ICE-Flotte senken. mehr Heilbronn zum Beispiel. Die 125.000-Einwohner-Stadt ist komplett vom Fernverkehr abgeschnitten. Wer hier eine weitere Strecke mit der Bahn reisen will, muss erst einmal mit einem Regionalzug nach Karlsruhe, Würzburg, Mannheim oder Stuttgart fahren - was die Reise deutlich verlängert. \"Die Stadt Heilbronn ist das einzige Oberzentrum in Baden-Württemberg und eine von wenigen Großstädten in Deutschland, die über keinen Schienenfernverkehrs-Anschluss verfügt\", klagt Oberbürgermeister Harry Mergel. Oft würden die Anschlüsse am Knoten Würzburg, aber auch in Mannheim, verpasst. Der SPD-Politiker fordert die Deutsche Bahn auf, schnellstmöglich einen dauerhaften ICE-Halt in Heilbronn einzurichten. Das Problem: Der Bahnhof erfüllt bisher nicht die Anforderungen für einen solchen Halt, unter anderem sind laut Bahn die Bahnsteige zu kurz. 28.04.2023 Das Problem: Schon heute ist das Netz der Bahn an vielen Stellen überlastet. mehr In Chemnitz kennen sie die Probleme: Die sächsische Industriemetropole mit rund 250.000 Einwohnern war lange Zeit die größte deutsche Stadt ohne Fernzug-Anschluss. Seit dem Sommer des vergangenen Jahres hält täglich wieder zweimal der Intercity, der via Dresden und Berlin an die Ostsee fährt. Für Fahrgastvertreter nicht mehr als Kosmetik. \"Zweimal ein IC am Tag ist ein Alibi\", sagt Detlef Neuß von Pro Bahn im Gespräch mit tagesschau.de. Weil die Strecke nach Leipzig frühestens in den 2030er-Jahren elektrifiziert werden soll, sind die Möglichkeiten in Chemnitz allerdings begrenzt. Dabei ist die Stadt 2025 Europäische Kulturhauptstadt und rechnet mit vielen Besucherinnen und Besuchern. \"Chemnitz macht aus der Not eine Tugend\", sagt Oberbürgermeister Sven Schulze. Man setze für 2025 auf schnelle Anbindungen per Bus und Regionalbahn an die Flughäfen Prag, Berlin Leipzig und Dresden. Heißt aber auch: Fliegen statt Bahnfahren. 03.06.2023 Wie hat das Zugunglück in Eschede vor 25 Jahren das Sicherheitskonzept der Deutschen Bahn verändert? mehr \"Wir reden davon, dass der Flugverkehr reduziert werden soll\", sagt Pro-Bahn Sprecher Neuß. \"Dann müssen Großstädte aber auch im Stundentakt an den Fernverkehr angebunden sein.\" Natürlich müsse man differenzieren: Von einer Stadt wie Offenbach am Main sei man schnell in Frankfurt, ebenso von Mönchengladbach in Düsseldorf - da brauche es keinen Fernzug-Halt. In abgelegeneren Städten schon. Auch davon gibt es immer noch einige: In Bremerhaven halten am Tag gerade einmal zwei IC, in Reutlingen ebenfalls. Trier ist komplett vom Fernverkehr abgeschnitten - mit Ausnahme eines luxemburgischen Fernverkehrszuges, der aber zwischen Trier und Koblenz nur als Regional-Express verkehrt. Fahrgastvertreter fordern außerdem auch für Städte wie Krefeld eine bessere Anbindung. Krefeld liegt zwar ebenfalls nahe an Düsseldorf, hat aber deutlich über 200.000 Einwohner. Bisher halten hier am Tag zwei ICE - einer morgens, einer abends. 26.05.2023 Zugausfälle, Schienenersatzverkehr: Alltag auf deutschen Schienen.\\xa0Doch häufig scheint die DB damit überfordert. mehr Die Deutsche Bahn verweist darauf, dass sie in den vergangenen Jahren einiges erreicht habe. Neben dem neuen IC-Halt in Chemnitz sei etwa auch die Stadt Siegen mittlerweile angebunden an den Fernverkehr. Ebenso Jena in Thüringen. Für Fahrgastvertreter Neuß ist das zu wenig. Die Politik habe hier versagt. Seit der Bahnreform 1994 habe man das Schienennetz um ein Viertel reduziert, Infrastruktur nicht erneuert, Fernverkehrsstrecken würden rein nach Wirtschaftlichkeit eingerichtet oder eingestellt. \"Wir müssen sehr viel mehr Geld in die Bahn stecken\", fordert er. Das sei auch im Interesse des ganzen Landes. \"Bei einer neuen Line truncated
" {'id': 'tagesschau_612186dd-5a15-4d59-8c96-a022ca051977',\n",
" 'title': 'Was ist der \"Equal Pay Day\"?',\n",
" 'date': '2023-06-15T09:15:34.686+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/equal-pay-day-101.html',\n",
" 'text': ' Frauen verdienen im Schnitt gut ein Fünftel weniger als Männer. Der\\xa0heutige \"Equal Pay Day\" macht auf diesen Missstand aufmerksam. Doch seit Jahren hat sich an dem Problem so gut wie nichts geändert. Im Schnitt verdient eine Frau in Deutschland 21 Prozent weniger Geld als ein Mann. Wenn man das aufs Jahr hochrechnet, arbeiten Frauen bis Mitte März quasi umsonst. Und es wird auch nicht besser, wie das Statistische Bundesamt berichtet. Dafür gibt es verschiedene Gründe. Teilweise werden Frauen nicht nur in den exakt gleichen Jobs wie Männer schlechter bezahlt. Sie arbeiten häufig auch in Berufen, die per se schon weniger honoriert werden, zum Beispiel als Friseurin, Bürokauffrau oder Altenpflegerin. Frauen arbeiten auch häufiger in Teilzeit als Männer. All das zusammengerechnet führt zum sogenannten \"Pay Gap\", also den messbaren Wert des Lohnunterschiedes zwischen Männern und Frauen. Bundesfamilienministerin Franziska Giffey will das ändern. Sie will Gesetze für mehr Gleichberechtigung schaffen. Ein Vorhaben soll beispielsweise für mehr Frauen in den Führungsebenen deutscher Unternehmen sorgen. Außerdem will Giffey die \"sozialen Berufe\", in denen zu etwa 80 Prozent Frauen arbeiten, aufwerten und dafür sorgen, dass dort besser bezahlt wird. Seit Januar 2018 gibt es das sogenannte Lohntransparenzgesetz. Es soll helfen, die Lohnunterschiede zwischen Männern und Frauen zu verkleinern. Beschäftigte haben seitdem das Recht zu erfahren, wie Kollegen des jeweils anderen Geschlechts mit ähnlichen Tätigkeiten bezahlt werden. Dass das dringend notwendig ist, zeigt auch ein Blick in die Vergangenheit: Seit 2006 hat sich der Lohnunterschied von Männern und Frauen um nur zwei Prozentpunkte verringert. Dieses Thema im Programm: Über dieses Thema berichtete Inforadio am 18. März 2019 um 09:25 Uhr. 18.03.2019 • 11:13 Uhr '},\n",
" {'id': 'f449db23-9d7c-448c-9860-2368a794158f',\n",
" 'title': 'Wieder mehr Ungleichheit bei Einkommen',\n",
" 'date': '2023-06-15T08:32:18.084+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/konjunktur/arbeitseinkommen-100.html',\n",
" 'text': ' In Deutschland nimmt die Ungleichheit der Einkommensverteilung Wirtschaftsforschern zufolge erneut zu. Dieses Jahr dürften vor allem höhere Einkommen wachsen, während das Plus bei Geringverdienern schmaler ausfällt. Die Ungleichheit der Einkommensverteilung nimmt in Deutschland auch in diesem Jahr weiter zu: 2023 dürften wie schon im vergangenen Jahr vor allem höhere Einkommen steigen, während das Plus bei den unteren Einkommen geringer ausfällt. Das geht aus einer veröffentlichten Modellrechnung des Deutschen Instituts für Wirtschaftsforschung (DIW) hervor. \"Insgesamt dürfte die Ungleichheit der Arbeitseinkommen im Zuge der wirtschaftlichen Erholung nach der Pandemie sogar leicht zugenommen haben und auch in diesem Jahr noch etwas größer werden\", so das Fazit der Berliner Forscherinnen und Forscher. Das dürfte die Wirkung der Energiekrise, die ohnehin vor allem ärmere Haushalte treffe, noch verstärken. 30.05.2023 Wegen der jüngsten Tariferhöhungen sind die Löhne in Deutschland stark gestiegen. mehr So dürften den Rechnungen der Wissenschaftler zufolge die unteren 40 Prozent in diesem Jahr nur ein Lohnplus von 2,55 Prozent verzeichnen, die \"Top Ten\" könnten dagegen auf Plus 2,81 Prozent kommen. Schon 2022 sei das Bild ähnlich gewesen: In den untersten Einkommensgruppen lag das Plus mit 5,96 Prozent unter dem der obersten von 6,85 Prozent. Die hohe Inflation habe im vergangenen Jahr \"zu einem realen Rückgang bei den Einkommensschwachen geführt, während Topverdienende noch von leichten realen Einkommenszuwächsen profitiert haben dürften\". Dass sich die Ungleichheit wieder verstärkt, zeigt auch der sogenannte Gini-Koeffizient, der die Ungleichheit misst und international vergleichbar macht. Während er im vergangenen Jahrzehnt von 0,39 auf 0,37 sank, rechnen die Forscher für das laufende Jahr nun mit einem Anstieg um rund ein Prozent. Der Gini-Koeffizient bewegt sich zwischen 0 und 1: Je höher der Wert, desto größer die Ungleichheit. 15.06.2023 Der\\xa0\"Equal Pay Day\" macht auf die ungleiche Bezahlung von Männern und Frauen aufmerksam. mehr Als Grundlage für die Schätzung und Prognose der Arbeitseinkommens-Verteilung dienen dem DIW eine Vielzahl von aktuellen Daten, von der Entwicklung des Bruttoinlandsprodukts über den Anteil der Menschen in Kurzarbeit bis hin zu einer repräsentativen Befragung privater Haushalte in Deutschland. Das neue Prognosemodell erlaubt daher, Aussagen über den derzeitigen Stand der Ungleichheit der monatlichen Bruttoarbeitseinkommen abhängig Beschäftigter zu treffen. Relevante Daten für die Berechnung lägen bislang meist erst mit einer Verzögerung von teilweise mehr als zwei Jahren vor, weshalb bisherige Studien meist in die Vergangenheit gerichtet seien. 27.02.2023 • 15:59 Uhr 30.12.2021 • 07:49 Uhr 23.05.2023 • 12:20 Uhr 01.05.2023 • 15:44 Uhr 25.04.2023 • 13:36 Uhr Hintergrund 01.03.2023 • 14:42 Uhr '},\n",
" {'id': 'cea650ef-ae71-40b7-a4d1-ab258b069a3b',\n",
" 'title': 'Unsicherheit kehrt zurück',\n",
" 'date': '2023-06-14T22:11:59.381+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/marktberichte/marktbericht-dax-dow-jones-344.html',\n",
" 'text': ' Die Zinspause der Fed ist da, aber die Zukunft ungewiss. Das brachte die Kurse an der Wall Street unter Druck. Dem DAX hatte die Aussicht auf eine Zinspause noch ein neues Rekordhoch beschert. Wie weithin erwartet hat die amerikanische Notenbank Federal Reserve (Fed) eine Zinspause eingelegt. Zugleich aber machten die Währungshüter klar, dass es in diesem Jahr weitere Zinsschritte geben dürfte. Einzelne Optimisten hatten zuvor schon ein endgültiges Ende des steilen Zinspfades ins Gespräch gebracht. 14.06.2023 Wie erwartet hat die US-Notenbank den Leitzins unverändert gelassen - erstmals nach zehn Erhöhungen in Folge. mehr Das brachte die Kurse an der Wall Street, die bereits verhalten eröffnet hatte, unter Druck. Der Leitindex Dow Jones ging 0,7 Prozent tiefer aus dem Handel. Die Technologiewerte konnten ihre zwischenzeitlichen Verluste dagegen wettmachen und sogar zulegen. Der Nasdaq 100 schloss 0,7 Prozent höher. Am deutschen Aktienmarkt hatte die Aussicht auf eine Zinspause der Fed noch die Kurse beflügelt. Der deutsche Leitindex überbot das bisherige Rekordhoch am Mittag mit 16.336 Zählern um fünf Punkte. Den Xetra-Handel beendete der DAX bei 16.310 Punkten, ein Plus von 0,5 Prozent. Für den bisherigen Jahresverlauf bedeutet das einen Gewinn von rund 17 Prozent. \"Fast schon euphorische Anleger erwarten heute eine Zinspause\", kommentierte Jürgen Molnar vom Broker RoboMarkets. \"Was allerdings die Zeit danach angeht und hier insbesondere den Termin der nächsten Sitzung im Juli, darüber gehen die Meinungen an der Börse auseinander\", so der Marktexperte. Der japanische Nikkei-Index schloss am Morgen 1,5 Prozent höher bei 33.502 Punkten und erreichte zwischenzeitlich ein neues 33-Jahres-Hoch. Neben der Hoffnung auf eine mögliche Zinspause in den USA, auch gestützt durch die Erwartung einer weiteren ultralockeren Politik der Bank of Japan. Der Euro war im Vorfeld der US-Zinsentscheidung deutlich über die Marke von 1,08 Dollar gestiegen. Am späten Abend kostete die Europäische Gemeinschaftswährung 1,0832 Dollar. Für Donnerstag wird eine weitere Zinserhöhung der Europäischen Zentralbank (EZB) erwartet. Die Ölpreise fielen am Nachmittag zurück, nachdem die wöchentlichen Öllagerbestände der USA veröffentlicht worden waren. Am Abend kostete ein Barrel (159 Liter) der Nordseesorte Brent zur Lieferung im August 73,73 Dollar. Das sind 1,1 Prozent weniger als gestern. Die amerikanischen Ölreserven sind in der vergangenen Woche unerwartet deutlich um 7,9 Millionen auf 467,1 Millionen Barrel gestiegen. Analysten hatten dagegen im Schnitt mit einem Rückgang um 1,5 Millionen Barrel gerechnet. Auch in Deutschland könnte sich Inflation weiter abschwächen, darauf deutet der Rückgang der Großhandelspreise im Mai hin. Sie sanken wegen günstigerer Energie um 2,6 Prozent gegenüber dem Vorjahresmonat und damit zum zweiten Mal in Folge, wie das Statistische Bundesamt mitteilte. Das ist der stärkste Rückgang seit Juli 2020, als der Ausbruch der Corona-Pandemie auch für ökonomische Verwerfungen sorgte. Im April hatte es bereits ein Minus von 0,5 Prozent gegeben. 14.06.2023 Die Preise im deutschen Großhandel sind zum zweiten Mal in Folge gefallen. mehr Die Vorzugsaktie von Volkswagen konnte im DAX überdurchschnittlich zulegen. Der Autobauer will seine Kernmarke VW in den nächsten drei Jahren massiv auf Rendite trimmen. Die Volumenmarke soll das operative Ergebnis bis 2026 durch mehr Effizienz und Einsparungen um zehn Milliarden Euro steigern und damit auf eine Rendite von 6,5 Prozent kommen. 2022 schaffte VW 3,6 Prozent. Unter anderem soll die Produktion von VW enger mit der von Skoda und Seat verzahnt werden. \"Wir starten eine große, gemeinsame Kraftanstrengung, um die Marke VW zu neuer Stärke zu führen und robust für die Zukunft aufzustellen\", so Markenchef Thomas Schäfer auf der Betriebsversammlung in Wolfsburg. Airbus rechnet in den nächsten 20 Jahren mit einem weiter steigenden Bedarf an Passagier- und Frachtjets. Zwischen 2023 und 2042 würden weltweit voraussichtlich 40.850 neue Verkehrsmaschinen benötigt, hieß es von dem DAX-Konzern. Das sind 1360 Maschinen mehr, als der Flugzeugbauer vergangenes Jahr für die folgenden zwei Jahrzehnte vorausgesagt hatte. Hauptgrund sei eine verstärkte Erneuerung der Flotten durch weniger spritdurstige Maschinen. Der Reisekonzern TUI profitiert trotz der hohen Inflation von einer hohen Nachfrage. Man blicke auf eine starke Sommersaison \"und in den letzten Wochen erstmals auch wieder mit Gästezahlen über dem Jahr 2019\", sagte Deutschland-Chef Stefan Baumert. Deshalb habe TUI in einigen Zielgebieten noch einmal Kontingente nachbestellt. Der Passagierverkehr am Frankfurter Flughafen hat sich im Mai weiter von der Corona-Krise erholt. Der Flughafenbetreiber Fraport zählte an Deutschlands größtem Luftfahrt-DrehkreuzLine truncated
" {'id': 'f68c75f7-0dc3-46fb-ab3f-728e6b74d751',\n",
" 'title': 'Fed legt Zinspause ein',\n",
" 'date': '2023-06-14T20:53:22.406+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/fed-entscheid-zinspause-100.html',\n",
" 'text': ' Wie erwartet hat die US-Notenbank den Leitzins unverändert gelassen - erstmals nach zehn Erhöhungen in Folge. Weitere Zinsschritte noch in diesem Jahr schlossen die Währungshüter aber nicht aus. Die amerikanische Notenbank Federal Reserve (Fed) legt nach einer Serie von zehn Zinserhöhungen eine Pause ein. Die Zentralbank beließ ihren geldpolitischen Schlüsselsatz am Mittwoch in der Spanne von 5,0 bis 5,25 Prozent. Die Entscheidung war von den meisten Beobachtern erwartet worden. Zuletzt hatte ein überraschend deutlicher Rückgang der Inflation auf 4,0 Prozent eine Zinspause wahrscheinlicher gemacht. Mit ihrer aktualisierten Zinsprognose signalisierten die Währungshüter um Fed-Chef Jerome Powell aber, dass der Zinsgipfel noch nicht erreicht sein dürfte: Zum Jahresende peilen sie im Mittel ein Zinsniveau von 5,6 Prozent an. Im März lag dieses Ziel noch bei 5,1 Prozent. Das legt nahe, dass die Notenbank dieses Jahr noch zwei Schritte nach oben im Umfang von jeweils einem viertel Prozentpunkt gehen könnte. Die Fed will die Ruhepause nun dazu nutzen, weitere Daten zu sichten, bevor sie über eine weitere Straffung entscheidet. Wann mit weiteren Zinserhöhungen zu rechnen ist, bleibt also offen. Zurzeit gehen die meisten Beobachter von einem weiteren Zinsschritt auf der nächsten geldpolitischen Sitzung am 26. Juli aus. Die Währungshüter bekräftigten am Mittwoch, dass sie mit Blick auf die Inflationsrisiken weiter wachsam bleiben. Zugleich senkten sie ihre Inflationsprognose für dieses Jahr von bisher 3,3 auf 3,2 Prozent. Die Kerninflation ohne Lebensmittel- und Energiepreise setzten sie allerdings mit 3,9 Prozent etwas höher an. Im März hatte die Notenbank noch eine Kernrate von 3,6 Prozent vorausgesagt. Die Notenbank peilt eine Teuerungsrate von 2,0 Prozent an, ist also noch lange nicht am Ziel. Die konjunkturelle Lage deutet ebenso auf einen weiteren Spielraum der Notenbank hin. Nach ihrer aktuellen Prognose soll die US-Wirtschaft in diesem Jahr um ein Prozent wachsen. Das wären 0,6 Prozentpunkte mehr als noch im März prognostiziert. Für das kommende Jahr sagt die Fed ein Wachstum von 1,1 Prozent voraus. analyse 14.06.2023 Die Inflation in den Vereinigen Staaten ist überraschend stark zurückgegangen. mehr \"Die Pause bei den Zinserhöhungen ist in der aktuellen Lage angemessen\", kommentierte Volkswirt Michael Heise von HQ Trust. \"Die US-Notenbank vollzieht damit eine schwierige Gratwanderung zwischen einer konsequenten Inflationsbekämpfung und dem Vermeiden einer starken Rezession. Da die Projektionen der Notenbank in 2023 eine etwas robustere Konjunktur signalisieren als bislang angenommen, dürfte es sich tatsächlich nur um eine Pause bei Zinserhöhungen handeln.\" Der Ökonom rechnet damit, dass das Leitzinsniveau bis Ende des Jahres um weitere 50 Basispunkte steigt. Dieses Thema im Programm: Über dieses Thema berichtete tagesschau24 am 14. Juni 2023 um 21:30 Uhr. 03.05.2023 • 20:43 Uhr analyse 30.05.2023 • 17:27 Uhr interview 24.05.2023 • 16:09 Uhr interview 01.06.2023 • 15:07 Uhr '},\n",
" {'id': '537f18a5-6095-4dc0-83d6-eb19c81030de',\n",
" 'title': 'Welche Regeln für Batterien künftig gelten',\n",
" 'date': '2023-06-14T18:28:44.573+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/batterien-eu-parlament-100.html',\n",
" 'text': ' Batterien sollen in der EU künftig langlebiger sein - und einfach austauschbar. Auch soll es Sammelquoten für ausgediente Akkus etwa von E-Bikes geben. Das hat das Europaparlament beschlossen. Batterien sind fast überall. Sie stecken in Laptops und Handys, Uhren und Radios, aber auch in Elektrofahrrädern und E-Autos. Für die angestrebte Energiewende in der Europäischen Union spielen sie deshalb eine entscheidende Rolle, sagt der grüne Europaabgeordnete Malte Gallee. Er hält die neue Batterieverordnung für revolutionär: \"Sie ist deswegen so besonders, weil sie zum ersten Mal eine Produktkategorie wirklich über den gesamten Lebenszyklus hinweg reguliert und dafür sorgt, dass die Mobilität unserer Zukunft klimaneutral werden kann.\" Schon die Herstellung soll möglichst umweltverträglich und nachhaltig sein. Außerdem sollen die neuen Regeln dafür sorgen, dass die Stromspeicher langlebiger werden, dass man sie leichter wiederverwerten kann\\xa0und: dass sie in den Elektrogeräten oder Fahrzeugen nicht mehr fest\\xa0verbaut, sondern reparier- und austauschbar sind, und zwar vom Endverbraucher selbst, ohne eine Spezialwerkstatt einschalten zu müssen. 30.05.2023 In Nordfrankreich hat eine der größten Batteriefabriken Europas eröffnet. mehr Einweg-E-Zigaretten dürften daher bald vom Markt verschwinden, weil sich die Umstellung der Produktion für die Hersteller nicht lohnt. EU-Umweltkommissar Virginius Sinkevicius nennt die Verordnung \"einen großen Schritt auf dem Weg hin zu einer europäischen Kreislaufwirtschaft, und Batterien einen wichtigen Schrittmacher beim Umstieg auf Klimaneutralität\". Ein \"Batterie-Pass\" soll bei allen Fahrzeugbatterien und Industrie-Akkus ab einem Gewicht von fünf Kilo für mehr Transparenz sorgen und den Verbrauchern auf einen Blick alle wesentlichen Produktinformationen liefern. Vom CO2-Fußabdruck über die tatsächlichen Speicherkapazitäten und die sozialen Standards bei der Rohstoffgewinnung bis hin zu den jeweiligen Vorgaben für das Recycling. Die Wiederverwertungsquoten für Rohstoffe wie Lithium oder Kobalt werden angehoben, auch für Cadmium-Nickel-Batterien gelten strengere Recycling-Ziele.\\xa0 30.04.2023 Die Batterien ausrangierter E-Autos lassen sich als Stromspeicher nutzen - um Netzschwankungen auszugleichen. mehr Für ausgediente Akkus aus \"leichten Verkehrsmitteln\", damit sind zum Beispiel Elektrofahrräder oder -roller gemeint, werden ebenfalls feste Sammelquoten festgelegt. Derzeit importiert Europa laut EU-Kommission jährlich etwa 800.000 Tonnen Autobatterien, 190.000 Tonnen Industriebatterien und 160.000 Tonnen Verbraucherbatterien. Ein Großteil davon wird nicht recycelt, sondern entsorgt - was Ressourcen verschwendet und gefährliche Stoffe freisetzt. Das soll jetzt ganz anders werden. \"Ehrlicherweise können wir es uns nicht leisten, Lithium und andere Materialien zu verschwenden, sondern wir müssen sie wiederverwenden\", sagt Tiemo Woelken, Umweltpolitiker der Europa-SPD. \"Das stellt sicher, dass wir unabhängiger werden vom Weltmarkt und dass wir nachhaltiger werden. Beides brauchen wir.\" Analyse 03.03.2023 Eine Elektroauto-Batterie braucht bis zu neun Kilo Lithium und 13 Kilo Kobalt. mehr Kritiker der Batterietechnik weisen unter anderem darauf hin, dass für den Abbau der Rohstoffe in Afrika nach wie vor schwere Umweltzerstörungen in Kauf genommen werden. Für den deutschen Christdemokraten Peter Liese überwiegen allerdings die Vorteile: \"Wenn Sie zu Fuß gehen, ist das umweltfreundlicher als batteriebetriebene Autos zu benutzen, als einen Speicher zu haben für Photovoltaik und damit ihre Wärmepumpe zu betreiben. Wenn Sie frieren, ist das ist das umweltfreundlicher. Wir wollen aber Wärme, wir wollen Mobilität mit moderner Technik. Und dazu brauchen wir Batterien.\" Auf die Grundzüge der Reform hatten sich die Abgeordneten mit den EU-Ländern schon verständigt. Nach dem heutigen Parlamentsbeschluss muss die Batterieverordnung muss jetzt noch von der Vertretung der Mitgliedsstaaten bestätigt werden, das gilt als reine Formsache. Danach treten die neuen Regeln EU-weit in Kraft. Dieses Thema im Programm: Über dieses Thema berichtete BR24 am 14. Juni 2023 um 16:50 Uhr. 12.05.2023 • 14:35 Uhr 22.04.2023 • 11:05 Uhr 22.02.2023 • 08:30 Uhr 16.06.2023 • 17:45 Uhr Audio 16.06.2023 • 16:55 Uhr Audio 15.06.2023 • 17:07 Uhr '},\n",
" {'id': '1a4da40b-dd6b-455b-b298-7db7003a63c0',\n",
" 'title': 'EU droht Google mit Aufspaltung',\n",
" 'date': '2023-06-14T16:37:42.235+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/google-alphabet-eu-strafe-online-werbung-100.html',\n",
" 'text': ' Im Kartellstreit mit Google droht die EU mit ihrer bislang härtesten Sanktion. Die Kommission hat heute zum ersten Mal signalisiert, dass sie den Tech-Giganten zum Verkauf eines Teils seines Geschäfts verpflichten könnte. Wegen wettbewerbswidrigen Verhaltens muss der Internetkonzern Google möglicherweise einen Teil seines Geschäfts mit Online-Werbung auf Anordnung der Europäischen Union verkaufen. Eine Selbstverpflichtung reiche voraussichtlich nicht aus, um die bisherige Praxis zu beenden, sagte die für einen fairen Wettbewerb zuständige EU-Kommissarin Margarethe Vestager. \"Natürlich weiß ich, dass dies eine starke Behauptung ist, aber sie spiegelt die Natur der Märkte und ihre Funktionsweise wider.\" 23.05.2023 Der Bundesgerichtshof hat die Position von Suchmaschinen-Betreibern wie Google gestärkt. mehr Die Europäische Kommission sei nach einer Untersuchung zu dem vorläufigen Schluss gekommen, dass nur die obligatorische Veräußerung eines Teils der Google-Dienste die Bedenken mit Blick auf den Wettbewerb ausräumen könne, teilte die Behörde heute mit. In dem Verfahren geht es zentral um die Frage, ob Google sich bei Anzeigendiensten gegenüber Rivalen einen Vorteil verschafft und dadurch den Wettbewerb verzerrt hat. Bei zweijährigen Ermittlungen hatten die EU-Aufseher festgestellt, dass die Alphabet-Tochter den Konkurrenzkampf behindere, indem sie ihre eigene Technologie für Online-Werbung bevorzuge. Google praktiziere dies schon seit 2014. \"Das Unternehmen sammelt Nutzerdaten, verkauft Werbeflächen und fungiert als Vermittler von Online-Werbung\", so Vestager. Google sei also auf fast allen Ebenen dieser Branche vertreten. \"Wir befürchten, dass Google seine Marktstellung genutzt haben könnte, um seine eigenen Vermittlungsdienste zu begünstigen\", sagte die Politikerin. Analyse 20.01.2023 Mit Alphabet hat der nächste große Tech-Konzern angekündigt, Tausende Mitarbeiter zu entlassen. mehr Es ist das erste Mal, dass die EU einem Tech-Giganten auferlegt, Teile seines Geschäfts aufzuspalten. Google kann nun seine Argumente darlegen, bevor die Kommission ihre endgültige Entscheidung trifft. Das Unternehmen reagierte nicht sofort auf eine Bitte um Stellungnahme. Unter anderem dank seiner starken Position als Suchmaschinen-Betreiber kann der US-Konzern weltweit 28 Prozent aller Einnahmen durch Internet-Anzeigen für sich verbuchen. Im vergangenen Jahr summierten sich diese Erlöse auf 224,5 Milliarden Dollar. Die EU hat sich an die Spitze einer weltweiten Bewegung gesetzt, die ein hartes Durchgreifen gegen Großkonzerne der Technologiebranche befürwortet. Allerdings haben sich die europäischen Wettbewerbsbehörden bisher auf die Verhängung drastischer Geldstrafen beschränkt, darunter drei Kartellstrafen gegen Google in Höhe von mehreren Milliarden Euro. Dieses Thema im Programm: Über dieses Thema berichtete Deutschlandfunk am 14. Juni 2023 um 17:08 Uhr. 11.05.2023 • 10:14 Uhr 09.02.2023 • 15:19 Uhr 20.01.2023 • 12:43 Uhr '},\n",
" {'id': '7b51e38b-279b-491a-a4ba-eaa88d0cf3fc',\n",
" 'title': 'Lada-Hersteller will Häftlinge in Produktion einsetzen',\n",
" 'date': '2023-06-14T16:04:52.958+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/autobauer-arbeitskraeftemangel-russland-100.html',\n",
" 'text': ' Dem russischen Autobauer Avtovaz fehlen Arbeitskräfte - die Lücken sollen offenbar Strafgefangene schließen. Von der Gefängnisverwaltung in der Region Samara hieß es, Avtovaz habe zu Zwangsarbeit verurteilte Gefangene angefordert. Russlands größter Autobauer Avtovaz will Lücken in seiner Belegschaft mit Strafgefangenen schließen. Die Gefängnisverwaltung in der Industrieregion Samara teilte heute mit, der Lada-Hersteller habe wegen der äußerst angespannten Lage auf dem Arbeitsmarkt um die Zuteilung von Häftlingen gebeten, die zu Zwangsarbeit verurteilt worden seien. Avtovaz kämpft wie viele andere Konzerne in Russland mit einem Mangel an Arbeitskräften. Auf dem russischen Arbeitsmarkt herrscht praktisch Vollbeschäftigung. Die Arbeitslosenquote sank im April auf ein Rekordtief von 3,3 Prozent. Dazu beigetragen haben infolge des Ukraine-Kriegs die Einziehung Hunderttausender Männer zum Militär und die Flucht vieler anderer ins Ausland. Das kollidiert mit den ehrgeizigen Zielen des russischen Autobauers: Avtovaz wolle seine Produktion ab September um 28 Prozent und ab Januar kommenden Jahres um 40 Prozent steigern, hieß es in der Mitteilung. Das Unternehmen, das in der nach einem italienischen Kommunisten benannten Stadt Togliatti in der Region Samara ansässig ist, lehnte eine Stellungnahme zur Erreichung der Ziele mit Zwangsarbeitern ab. Die russische Autoindustrie erholt sich allmählich von dem historischen Einbruch im vergangenen Jahr. Nach dem Angriff Russlands auf die Ukraine war die russische Autoproduktion unter anderem wegen westlicher Wirtschaftssanktionen im vergangenen Jahr auf 450.000 Autos gesunken. Das war der niedrigste Stand seit dem Ende der Sowjetunion. Mehrere westliche Hersteller haben sich aus dem Land zurückgezogen, darunter der frühere Avtovaz-Mehrheitsaktionär Renault. 24.03.2022 • 15:09 Uhr 13.06.2023 • 16:10 Uhr 07.06.2023 • 03:24 Uhr '},\n",
" {'id': '519003c0-2ff0-404e-9ff6-88979804edfb',\n",
" 'title': 'Lagarde sieht Gierflation bei Unternehmen',\n",
" 'date': '2023-06-14T15:08:48.502+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/ezb-inflation-preiserhoehungen-gierflation-100.html',\n",
" 'text': ' In ungewöhnlicher Form kritisiert die EZB die Wirtschaft, die Teuerung künstlich anzutreiben. Was für Verbraucher ärgerlich ist, wird für die Währungshüter zum Problem: Gegen Profitgier können sie nämlich nichts ausrichten. Immer wieder nimmt die alte Dame die kleine Packung Hähnchenfilet aus der Tiefkühltruhe, schaut sie sich an, guckt dann ins Portemonnaie und stellt sie wieder zurück. Mit 5,98 Euro verlangt der Discounter, der sich gerne als besonders günstig anpreist, auch einen stolzen Preis. Das Mini-Produkt gab es vor wenigen Monaten noch für die Hälfte. Doch für die Rentnerin ist der neue Preis zu hoch. Stattdessen geht sie drei Reihen weiter und greift zur Packung Spaghetti. 07.06.2023 Die Deutschen kaufen anders ein, um bei weiterhin steigenden Preisen zu sparen. mehr Nahrungsmittel sind weiterhin der Preistreiber Nummer eins in Deutschland und sie schmälern das verfügbare Einkommen vieler Menschen erheblich. Auch wenn sich die Inflationsrate in Deutschland im Mai im Vergleich zum Vorjahr auf 6,1 Prozent etwas abgeschwächt hat, stiegen die Preise für Lebensmittel weiter massiv an - um fast 15 Prozent. Teurer wurden vor allem Molkereiprodukte (plus 28 Prozent), Brot (plus 19 Prozent) und Fisch (plus 19 Prozent). Auch für Marmelade, Schokolade und Gemüse mussten Verbraucher deutlich tiefer in die Tasche greifen. Ursprünglich waren die Folgen der Corona-Krise, der Krieg gegen die Ukraine und die hohen Energiepreise Auslöser der hohen Inflation. Jetzt wird immer klarer, dass viele Unternehmen die Preise auch künstlich antreiben. \"Gierflation\" heißt das Phänomen, bei dem Firmen deutlich mehr auf den Endpreis schlagen, als es die gestiegenen Kosten für Strom, Gas oder Vorprodukte rechtfertigen lassen. 13.06.2023 Die Inflationsrate hat sich im Mai leicht auf 6,1 Prozent abgeschwächt, vor allem dank gesunkener Energiekosten. mehr Dieses \"mehr\" wird mittlerweile zum Preistreiber in sich selbst und damit zur Herausforderung - so sehr, dass jetzt sogar EZB-Präsidentin Christine Lagarde vor dem Wirtschafts- und Währungsausschuss des Europaparlaments deutliche Worte fand: Die meisten Unternehmen hätten \"den Vorteil genutzt, die höheren Kosten völlig auf die Kunden abzuwälzen\", so Lagarde. \"Und einige von ihnen haben die Preise über den bloßen Kostendruck hinaus erhöht.\" Nicht nur die EZB, auch zahlreiche andere Studien belegen das Phänomen der Gierflation. Für den Lebensmittelbereich untersuchte der Kreditversicherer Allianz Trade den Markt und kam zu dem Schluss: \"Es scheint zunehmend Anzeichen für Gewinnmitnahmen zu geben sowie unzureichenden Wettbewerb\", sagt Inflations-Experte Andy Jobst. Dies gelte vor allem für die Hersteller von Milchprodukten, Eiern und nicht-saisonalem Obst und Gemüse. analyse 24.05.2023 Ökonomen und Verbraucherschützer vermuten in Supermärkten teils ungerechtfertigt hohe Preissteigerungen. mehr Viele Verbraucherschützer machten Stichproben, bei denen herauskam, dass die hohe Teuerung bei manchen Produkten \"weder gerechtfertigt noch nachvollziehbar\" sei, so etwa das Ergebnis der Verbraucherzentrale NRW. Eine Untersuchung des Münchener ifo-Instituts fand heraus, dass nicht nur der Handel, sondern auch das Gastgewerbe, der Verkehrssektor und das Baugewerbe genau verstünden, wie man Preise stärker erhöht als notwendig. Tatsächlich ist die Teuerung auch im Tourismus besonders heftig: Airlines verlangen auf beliebten Routen heute im Durchschnitt doppelt so hohe Ticketpreise wie vor einem Jahr, obwohl die Kerosin-Preise drastisch gefallen sind. Auch die Reiseveranstalter schlugen bei Pauschalreisen kräftig drauf - wohlwissend, dass gerade die Deutschen nach Jahren der Corona-Entbehrung offenbar bereit sind, alles zu zahlen, was der Markt verlangt. Für die EZB sind die jetzt dargelegten Entwicklungen ein Argument, um von eigenen Versäumnissen bei der Inflationsbekämpfung abzulenken. Aber sie stellen für die Währungshüter auch ein großes Problem dar: Gier kann man mit Geldpolitik nämlich schlecht zügeln. Gegen ungerechtfertigte Teuerung helfen weder Zinsanhebungen noch straffe Geldpolitik. 13.06.2023 Ein Preisvergleich zwischen UK und europäischen Ländern zeigt: In Deutschland ist der Einkauf günstiger. mehr Auch aus diesem Grund ging EZB-Präsidentin Christine Lagarde jetzt noch einen Schritt weiter: Vor dem EU-Parlament forderte sie, dass sich die nationalen Wettbewerbsbehörden mit dem Thema Gierflation befassen sollten. \"Ich würde das auf jeden Fall für absolut angebracht halten\", sagte sie den Parlamentariern. Viel Hoffnung muss sich Lagarde da aber nicht machen: Schon im vergangenen August hatte Andreas Mundt, Präsident des Bundeskartellamtes, hierzulande zuständig für einen ordentlichen Wettbewerb, von einem heftigeLine truncated
" {'id': 'c595b3cd-685b-44ea-8efd-5227e376cc88',\n",
" 'title': 'EVG und Bahn nähern sich an',\n",
" 'date': '2023-06-14T14:47:46.119+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/tarifverhandlungen-bahn-evg-annaeherung-100.html',\n",
" 'text': ' Man sei einem Tarifabschluss \"einen Schritt nähergekommen\": Die Gewerkschaft EVG und die Bahn haben sich bei den Tarifverhandlungen offenbar aufeinander zubewegt. Die \"größten Brocken\" seien aber noch offen. Im Tarifkonflikt bei der Deutschen Bahn sind die Verhandler der Eisenbahn- und Verkehrsgewerkschaft (EVG) zufolge einem Tarifabschluss \"einen Schritt nähergekommen\". In verschiedenen Arbeitsgruppen seien sowohl Themenkomplexe des Arbeitgebers wie auch Forderungen der EVG erörtert und dabei um gangbare Kompromisslinien gerungen worden. \"Abschließende Vereinbarungen gibt es bislang allerdings nicht\" sagte EVG-Verhandlungsführer Kristian Loroch laut einer Mitteilung. \"Entscheidend ist für uns, dass am Ende das Gesamtpaket stimmt. Nur dann werden unsere Tarifkommissionen zustimmen.\" 12.06.2023 Im Tarifkonflikt bei der Deutschen Bahn wird von heute an wieder für insgesamt 230.000 Beschäftigte verhandelt. mehr Auch nach Ansicht von DB-Personalvorstand Martin Seiler laufen die Gespräche derzeit \"intensiv und konstruktiv\". Auf die Frage, ob noch diese Woche ein Abschluss möglich sei, sagte Seiler:\\xa0\"Das ist das Ziel, dass wir Ende der Woche eine tragfähige Gesamtlösung darstellen.\" Aber: \"Wir haben auch noch viel vor uns\", darunter die \"größten Brocken\" wie die Frage der Lohnerhöhung insgesamt sowie die Laufzeit des Tarifvertrags. Grund zum Optimismus sei für ihn schon allein \"die Tatsache, dass wir zwei Tage hier sind und verhandeln\". Die größten Herausforderungen liegen \"noch vor uns\", sagte auch der EVG-Verhandlungsführer Loroch und nannte dieselben zentralen Streitthemen Lohnerhöhung und Laufzeit. Hier liege \"viel Konfliktpotenzial\", denn die Erwartungshaltung der Beschäftigten sei groß - \"und damit auch die Streikbereitschaft\". Die Deutsche Bahn und die EVG hatten zu Beginn der Woche ihre Tarifverhandlungen wieder aufgenommen. Die Gespräche sind bis Freitag angesetzt. Die Tarifverhandlungen laufen bereits seit Ende Februar, zweimal wurde begleitend dazu schon gestreikt. Die Tarifverhandlungen dauern bereits seit Ende Februar an. Die Gewerkschaft fordert einen\\xa0Festbetrag von mindestens 650 Euro pro Monat mehr oder zwölf Prozent bei den oberen Lohngruppen. Die Laufzeit soll nach ihren Vorstellungen zwölf Monate betragen. Die Bahn hatte bei Verhandlungen Ende Mai in Fulda je nach Einkommensgruppe zwölf, zehn beziehungsweise acht Prozent mehr in mehreren Stufen in Aussicht gestellt. Die Laufzeit soll bei 24 Monaten liegen - also doppelt so lang wie von der Gewerkschaft gefordert. Die erste Erhöhungsstufe soll laut DB-Angebot noch dieses Jahr kommen. Hinzu kommt eine Inflationsausgleichsprämie in mehreren Zahlungen von insgesamt 2850 Euro. Dieses Thema im Programm: Über dieses Thema berichtete Deutschlandfunk am 14. Juni 2023 um 14:53 Uhr. 01.06.2023 • 22:01 Uhr faq 31.05.2023 • 16:42 Uhr 31.05.2023 • 16:55 Uhr 31.05.2023 • 03:46 Uhr '},\n",
" {'id': '72adeff4-f4b0-4671-902f-b392d00ae397',\n",
" 'title': 'Habeck kündigt Unterstützung für Stahlkocher an',\n",
" 'date': '2023-06-14T14:45:47.231+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/subventionen-stahlindustrie-thyssenkrupp-habeck-100.html',\n",
" 'text': ' Wirtschaftsminister Habeck hat den Stahlkochern von Thyssenkrupp Unterstützung beim Umbau hin zu einer grünen Produktion des Werkstoffs zugesagt. Eine Einigung mit der EU-Kommission stehe kurz bevor. Bundeswirtschaftsminister Robert Habeck hat sich zuversichtlich gezeigt, dass eine geplante Milliardenförderung für eine Anlage zur Grünstahl-Produktion in Duisburg demnächst auch formal von der die EU-Kommission genehmigt wird. \"Wir werden das im Sommer hinkriegen\", sagte der Grünen-Politiker bei einer Kundgebung vor Tausenden Stahlarbeitern von Thyssenkrupp. Er bestätigte Angaben von IG-Metall-Vorstand Jürgen Kerner, wonach die EU-Kommission grundsätzlich mit der geplanten Förderung durch Bund und Land NRW in Höhe von insgesamt zwei Milliarden Euro einverstanden sei. 03.05.2023 In wenigen Jahren will Thyssenkrupp in Duisburg Stahl produzieren, ohne dass dabei Kohlendioxid entsteht. mehr \"Ich werde alles dafür tun, dass diese Stahlindustrie in Deutschland in allen Standorten erhalten bleibt, indem sie grün wird\", betonte Habeck. Es gehe darum, die Branche zu transformieren. \"Und zwar nicht irgendwo, sondern hier.\" In den vergangenen Wochen seien in den Gesprächen mit der EU-Kommission Fortschritte erzielt worden. Es fehle nur noch ein wenig Diskussion um das Kleingedruckte. Deutschlands größter Stahlhersteller Thyssenkrupp will Ende 2026 eine über zwei Milliarden Euro teure Anlage in Betrieb nehmen, die mit Wasserstoff statt Kohle funktioniert und somit klimafreundlich Stahl produziert. Das Land Nordrhein-Westfalen und der Bund wollen das Projekt mit insgesamt rund zwei Milliarden Euro fördern. Während die Landesregierung Subventionen von bis zu 700 Millionen Euro zugesagt hat, warten die Stahlkocher noch auf rund 1,3 Milliarden Euro vom Bund. Der Grund: Die endgültige beihilferechtliche Genehmigung durch die EU-Kommission steht noch aus. Diese hatte jüngst erklärt, sie führe konstruktive Gespräche mit der Bundesregierung. Es gebe aber noch keine finale Entscheidung. Die Arbeitnehmervertreter befürchten, dass der Konzern bei einer längeren Hängepartie seine Pläne zurückzieht. Binnen der nächsten zwei Wochen müsse Klarheit herrschen, sagte Kerner, der auch stellvertretender Aufsichtsratschef bei Thyssenkrupp ist. 11.05.2023 Wegen hoher Energiekosten und Wertberichtigungen der Stahlsparte hat Thyssenkrupp im zweiten Quartal Verlust gemacht. mehr Zu dem heutigen Aktionstag in Duisburg hatte die IG Metall aufgerufen. Rund 12.000 Stahlkocher nahmen der Gewerkschaft zufolge an der Kundgebung in Duisburg teil. Auf Transparenten waren Slogans wie \"Ohne uns keine Energiewende\" oder \"Solidarität mit den Stahlarbeitern\" zu lesen. Habeck musste zeitweise gegen ein Pfeifkonzert anreden, auf der Bühne herrschte aber eine freundliche Stimmung. Habeck wurde ein rotes T-Shirt überreicht mit der Aufschrift \"Stillstand hat noch nie was bewegt\", das er auch anzog. Die Gewerkschaftsvertreter forderten eine rasche Genehmigung der geplanten Förderung. Stahlbetriebsratschef Tekin Nasikkol drückte am Ende seine Hoffnung aus, dass es nun in die richtige Richtung gehe. Zuvor hatte er jedoch den Druck auf Habeck erhöht. \"Unsere grüne Zukunft ist gefährdet. Der Bund und die EU schieben sich die Verantwortung hin und her. Damit muss Schluss sein\", betonte Nasikkol unter dem Applaus der Stahlkocher. Sonntagsreden habe es genug gegeben. \"Das Buch der 1000 Ausreden muss jetzt zugeschlagen werden.\" Auch Thyssenkrupp Steel Europe verwies darauf, dass noch einige Punkte erledigt werden müssten. \"In den nächsten Wochen müssen Absichtserklärungen in Planungs- und Rechtssicherheit für die Umsetzung der nächsten Schritte der grünen Transformation überführt werden.\" Der Konzern sei daher weiterhin in intensiven und konstruktiven Gesprächen mit allen zuständigen Behörden. Dieses Thema im Programm: Über dieses Thema berichtete tagesschau24 am 14. Juni 2023 um 17:00 Uhr. 05.05.2023 • 13:06 Uhr 21.03.2022 • 17:03 Uhr 15.05.2013 • 08:20 Uhr 18.10.2022 • 08:12 Uhr '},\n",
" {'id': '3572a46b-f87e-433e-a369-e9945f022b74',\n",
" 'title': '14-Jähriger fängt bei SpaceX an',\n",
" 'date': '2023-06-14T14:28:07.714+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/14-jaehriger-bei-spacex-100.html',\n",
" 'text': ' In dieser Woche beendet er sein Studium, nächsten Monat fängt er einen Vollzeitjob bei Elon Musks Raumfahrtunternehmen SpaceX an: Dabei ist Kairan Quazi erst 14 Jahre alt. Erlebt hat er aber schon einiges. Kairan Quazi trägt Turnschuhe, hat eine kurze Hose und ein Hawaiihemd an. Alles ist ein bisschen verknittert - er läuft rum, wie Jungs in seinem Alter rumlaufen. Nur wo er da steht, ist ungewöhnlich: nämlich ganz alleine auf der Bühne eines Kongresses für Computer-Expertinnen und Experten in San Diego. Er macht die Abschlusspräsentation und ist gerade einmal zehn Jahre alt. Das ist nun vier Jahre her. In dieser Woche schließt Quazi sein Studium ab, in Santa Clara im US-Bundesstaat Kalifornien. Mittlerweile ist er 14 Jahre alt. Dann hat er einen Abschluss in Informatik und ist Ingenieur. 20.04.2023 Der Testflug des \"Starship\"-Raketensystems endete kurz nach dem Start mit einer ungeplanten Explosion. mehr Aus seiner Sicht ist das Studium eigentlich ganz normal gelaufen, sagt er einem CBS-Lokalsender. \"Es gibt da nichts, was anders wäre. Ich habe eine Menge Freunde gefunden. Und nach ein paar Tagen war das nichts Besonderes mehr, dass ich da war.\" Aber natürlich war er der einzige 11-jährige Student. Und: Vor ihm gab es keinen jüngeren Absolventen. Vor seinem Studium hatte Quazi schon ein Praktikum beim Chiphersteller Intel gemacht. Mit zwei Jahren habe er in ganzen Sätzen gesprochen, sagen seine Eltern. Und auch sonst sei alles ziemlich schnell gegangen. In der dritten Klasse haben seine Eltern und Lehrer gemerkt, dass er unterfordert ist. Ab da habe er Spezialunterricht bekommen. In der vierten Klasse habe er 19 Programmiersprachen beherrscht, sagt er in einem Interview für einen YouTube-Kanal. Er sei aber auch in einem Basketball-Team und gebe Mitstudenten Nachhilfe, erzählt Quazi. \"Ich bin Tutor in Differenzial- und Integralrechnung, Trigonometrie, Statistik und Computer-Programmierung.\" Viele meinen, dass er seine Kindheit verpasst habe, sagt Quazi. Er sieht das anders: \"Wenn dem so gewesen wäre, hätte ich die Schule nicht so schnell beenden müssen.\" 30.06.2021 Elon Musk treibt seinen satellitenbasierten Internetdienst Starlink mit Verve voran. mehr Im Juli fängt Quazi bei Elon Musks Firma SpaceX an zu arbeiten. Dafür zieht er mit seiner Mutter nach Redmond im Bundesstaat Washington. Die Abteilung, in der er arbeiten wird, ist Starlink - da kümmert er sich um Satelliten-Technologie. Maximal 40 Stunden pro Woche wird er arbeiten - mehr sind für 14-Jährige in Washington State nicht erlaubt. In zwei Jahren darf er in den USA dann einen Führerschein machen, \\xa0in vier Jahren wählen und in sieben Jahren sein erstes Bier trinken. Dieses Thema im Programm: Über dieses Thema berichtete BR24 am 14. Juni 2023 um 12:42 Uhr. 15.03.2023 • 04:22 Uhr Analyse 17.11.2022 • 21:22 Uhr Audio 14.06.2023 • 09:57 Uhr Audio 14.06.2023 • 08:35 Uhr Audio 06.06.2023 • 09:38 Uhr '},\n",
" {'id': 'eff18081-70ad-42c7-b1ff-8ddaacb217bb',\n",
" 'title': 'Türen von Apotheken bleiben heute geschlossen',\n",
" 'date': '2023-06-14T13:54:43.326+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/apotheken-protesttag-100.html',\n",
" 'text': ' Als Zeichen des Protests bleiben die meisten Apotheken in Deutschland heute geschlossen. Die Branche prangert eine steigende Belastung bei zu niedriger Vergütung an. Doch Bundesgesundheitsminister Lauterbach sieht kaum Handlungsspielraum. Bundesweit bleiben heute die meisten Apotheken geschlossen. Die Branche protestiert damit gegen den \"Sparwahn\" in der Gesundheitspolitik. Für die Versorgung mit Medikamenten bleiben lediglich die Notfallapotheken geöffnet. Einer Umfrage der Bundesvereinigung Deutscher Apothekerverbände (ABDA) zufolge beteiligten sich landesweit etwa 85 Prozent aller Apotheken an der Protestaktion. Rund 1200 Apotheken blieben für die Notfallversorgung geöffnet. In mehreren Bundesländern sind am \"Protesttag\" Kundgebungen oder Demonstrationen angekündigt, wie die Bundesvereinigung Deutscher Apothekerverbände (ABDA) auf ihrer Internetseite mitteilt. In Berlin zog ein \"Protestmarsch\" vom Potsdamer Platz zum Bundeswirtschaftsministerium. Weitere Demonstrationen gab es unter anderem in Düsseldorf, Münster, Wiesbaden und Augsburg. Die ABDA kritisiert die wachsenden Anforderungen und Belastungen für die Belegschaft von Apotheken, etwa durch Lieferengpässe von Medikamenten oder durch ein zu hohes Maß an Bürokratie im Arbeitsalltag. Die Lieferprobleme hätten die Arbeit für Apotheken \"noch komplizierter gemacht und kosten Kraft und Zeit\", heißt es von der ABDA. In dem Zusammenhang kritisiert die Vereinigung die aus ihrer Sicht mangelhafte Gesundheitspolitik der Bundesregierung. Der Entwurf des sogenannten Lieferengpass-Gesetzes tauge weder dafür, \"die\\xa0Versorgung der Patientinnen und Patienten\\xa0zu verbessern, noch dazu, die Lage der\\xa0Apotheken als erste, wohnortnahe Anlaufstelle in der Arzneimittelversorgung\\xa0zu unterstützen\". Und das, obwohl die Ampel-Parteien genau diese Zusagen in ihrem Koalitionsvertrag festgehalten hätten. 06.06.2023 Apotheker haben einen \"Sparwahn\" bei der Arzneimittelversorgung kritisiert. mehr Dem gestiegenen Aufwand für die Mitarbeiterinnen und Mitarbeiter in Apotheken stellt die ABDA eine fehlende \"finanzielle Anerkennung für diese Mehrarbeit\" gegenüber. Die Branche verlangt, die fixe Pauschale von 8,35 Euro pro rezeptpflichtigem Medikament für Beratung auf zwölf Euro anzuheben. Dieser Festbetrag sei seit zehn Jahren nicht mehr angepasst worden, trotz steigender Kosten, heißt es von der ABDA weiter. Damit seien Apotheken \"von der wirtschaftlichen Gesamtentwicklung abgekoppelt\", was \"nicht mehr nur ungerecht, sondern existenzgefährdend\" sei. Neben der Anhebung der fixen Pauschale auf zwölf Euro solle eine zusätzliche Pauschale eingeführt werden, um das Versorgungsangebot durch die Apotheken bundesweit absichern zu können. Die ABDA kritisiert, dass andere Gesundheitseinrichtungen wie Arztpraxen oder Kliniken im Gegensatz zu Apotheken Extra-Zahlungen erhalten hätten, um eine gesicherte Versorgung zu gewährleisten. Doch Bundesgesundheitsminister Karl Lauterbach hatte der Forderung nach mehr Geld eine Absage erteilt. Zwar äußerte er Verständnis, aber fehlende zusätzliche Haushaltsmittel und steigende Beiträge für die gesetzliche Krankenversicherung ließen derzeit keine Spielräume für einen solchen Schritt. Auch beim Spitzenverband der Gesetzlichen Krankenversicherung (GKV) stößt die Forderung nach einer höheren Vergütung auf Widerstand. Das Honorar für Mitarbeiterinnen und Mitarbeiter in Apotheken steige unaufhörlich, da Apotheken zusätzlich zur Pauschale für jedes Medikament drei Prozent vom Einkaufspreis erhielten. \"Mit jeder Preissteigerung, mit jedem neuen, teureren Medikament steigt auch das Honorar des Apothekers\", sagte GKV-Sprecher Florian Lanz. Würde der Festbetrag wie gefordert auf zwölf Euro pro ausgegebener Medikamentenpackung erhöht, wären das Mehreinnahmen von 2,2 Milliarden Euro für die Apotheken - ohne dass für Patientinnen und Patienten irgendetwas besser würde. Kritik kam auch von der Deutschen Stiftung Patientenschutz. Lobbyisten gäben immer wieder vor, für die Patienten zu handeln, sagte Vorstand Eugen Brysch. Dabei sei letztendlich Eigeninteresse die Motivation für solche Aktionen auf Kosten der Patienten. Unterstützung erhält die Apothekenbranche hingegen von der FDP. Lars Lindemann, Gesundheitspolitiker der Partei, forderte gegenüber der Nachrichtenagentur dpa: \"Wenn der finanzielle Spielraum nicht viel zulässt, dann müssen wir die Rahmenbedingungen ändern.\" Was für ihn bedeute: Weniger Bürokratie, maximale Flexibilität und Planungssicherheit für Apotheken. Ein pauschales Nein bringe keine Lösung, warnte Lindemann und betonte: \"Geschlossene Apothekentüren dürfen nicht zum Alltag werden.\" Lindemanns Parteikollegin Christine Aschenberg-Dugnus betonte, der Bundesregierung sei durchaus bewusst, \"dass Apotheken derzeit durch erhöhte Abschläge und Arzneimittellieferengpässe zLine truncated
" {'id': 'aba11117-2a58-42d2-ba47-7624f5c1ce40',\n",
" 'title': 'Höhepunkt der globalen Ölnachfrage in Sicht',\n",
" 'date': '2023-06-14T13:50:26.537+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/weltwirtschaft/oelnachfrage-iea-prognose-100.html',\n",
" 'text': ' Weltweit wird die Nachfrage nach Öl in den kommenden Jahren langsamer ansteigen, so die Internationale Energieagentur IEA. Den Höhepunkt der Nachfrage sieht sie noch vor dem Jahr 2030 erreicht. Die weltweite Nachfrage nach Öl wird bis 2028 deutlich langsamer ansteigen als in den vergangenen Jahren. Das geht aus einer Analyse der Internationalen Energieagentur IEA hervor. Im Jahr 2028 sei auf das Jahr gesehen schließlich der Effekt einer geringeren Nachfrage zu beobachten. \"Die Umstellung auf eine saubere Energiewirtschaft nimmt Fahrt auf und ein Höhepunkt der weltweiten Ölnachfrage vor dem Ende dieses Jahrzehnts ist in Sicht\", sagte IEA-Direktor Fatih Birol. Besonders der Flugsektor und die petrochemische Industrie würden dazu beitragen, dass der Bedarf zwischen 2022 und 2028 um sechs Prozent bis auf 105,7 Millionen Barrel Öl am Tag anwachse, hieß es im mittelfristigen Ölmarktbericht der IEA. Die IEA geht aber davon aus, dass vor allem in Transportsektor ab 2026 etwa durch mehr elektrische Fahrzeuge und Biosprit weniger Öl gebraucht werden wird. 04.06.2023 Die erweiterte Organisation Erdöl exportierender Länder (OPEC+) will Ölproduktion erneut drosseln. mehr \"Ölförderer müssen auf das zunehmende Tempo des Wandels genau achtgeben und ihre Investitionsentscheidungen so vornehmen, dass ein geordneter Übergang gewährleistet wird\", sagte Birol. Die vorgelagerten Investitionen für die Erkundung, Förderung und Produktion von Öl und Gas werden laut IEA in diesem Jahr voraussichtlich das höchste Niveau seit 2015 erreichen und bei 528 Milliarden US-Dollar liegen. Ein solches Investitionsniveau würde der IEA zufolge ausreichen, um die Nachfrage bis 2028 zu decken. Allerdings mahnte die IEA auch, dass dieses Öl im Hinblick auf das Netto-Null-Ziel eigentlich nicht gefördert werden dürfte. Netto-Null bezeichnet das Ziel, nur noch so viele Treibhausgas-Emissionen zu verursachen, wie kompensiert werden können. Ein rascheres Sinken der Ölnachfrage ist der IEA zufolge aber nur mit Verhaltensveränderungen und zusätzlichen politischen Schritten möglich. Dieses Thema im Programm: Über dieses Thema berichtete Deutschlandfunk am 14. Juni 2023 um 15:41 Uhr. weltspiegel 28.05.2023 • 15:52 Uhr 25.05.2023 • 13:48 Uhr 16.05.2023 • 13:42 Uhr '},\n",
" {'id': '0914c2d0-a7b2-4294-af04-4d6fa3884872',\n",
" 'title': 'DAX steigt auf neues Rekordhoch',\n",
" 'date': '2023-06-14T12:03:50.619+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/dax-rekordhoch-100.html',\n",
" 'text': ' Der DAX hat sein wenige Wochen altes Rekordhoch nochmals übertroffen. Seit Jahresbeginn ist der Aktienindex um rund 17 Prozent gestiegen. Die Aussicht auf eine Zinspause in den USA lässt Anleger zugreifen. Der deutsche Leitindex DAX hat am Mittag sein erst wenige Wochen altes Rekordhoch übertroffen. Zuletzt stieg das Börsen-Barometer um 0,63 Prozent auf 16.332 Punkte. Die bisherige Bestmarke des Jahres stammte mit 16.331 Punkten aus dem Mai. Mit dem heutigen Hoch baute der DAX sein bisheriges Jahresplus auf etwa 17 Prozent aus. analyse 14.06.2023 Die Inflation in den Vereinigen Staaten ist überraschend stark zurückgegangen. mehr Anleger setzen weiterhin auf eine Pause bei den Zinserhöhungen in den USA. Spannend wird es dabei am Abend, wenn die Leitzinsentscheidung der US-Notenbank ansteht. \"Die Inflation in den USA kühlt sich weiter ab und macht damit den Weg frei für die erste Pause nach 15 Monaten Zinserhöhungszyklus der Federal Reserve\", schrieb am Morgen der Experte Konstantin Oldenburger vom Broker CMC Markets. Die Aussicht auf eine weniger straffe Geldpolitik in den kommenden Monaten treibe den deutschen Leitindex im Vorfeld der beiden Notenbanksitzungen weiter nach oben, ergänzte Oldenburger. Nach der Fed am Abend fällt am Donnerstag auch die Europäische Zentralbank ihre nächste Entscheidung. Bei den Europäern geht der Markt aber von einer Anhebung um nochmals 0,25 Prozentpunkte aus. Hoffnungen, dass die EZB es aber auch bald etwas ruhiger angehen lassen könnte, machten zuletzt Inflationsdaten aus der Eurozone. Die Teuerungsrate hatte im Mai in der Eurozone überraschend deutlich nachgegeben auf 6,1 Prozent, wenngleich das immer noch deutlich über dem Ziel der EZB von zwei Prozent liegt. 14.06.2023 Die Preise im deutschen Großhandel sind zum zweiten Mal in Folge gefallen. mehr Zinserhöhungspausen oder gar ein sich abzeichnendes Ende des Zinserhöhungszyklus nähren bei Investoren Hoffnungen auf eine bessere wirtschaftliche Entwicklung. Denn höhere Zinsen bremsen diese, da sie die Finanzierung für Unternehmen verteuert und auch Konsum- und Immobilienkredite kostspieliger werden. Dieses Thema im Programm: Über dieses Thema berichtete tagesschau24 am 14. Juni 2023 um 09:00 Uhr. 13.06.2023 • 10:41 Uhr 13.06.2023 • 16:03 Uhr 07.06.2023 • 08:22 Uhr '},\n",
" {'id': 'bf36204e-b9c6-4ea7-9f0f-58d43398186c',\n",
" 'title': 'Warnung vor Preisschock bei Gebäude-Versicherungen',\n",
" 'date': '2023-06-14T11:09:27.196+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/gebaeudeversicherungen-100.html',\n",
" 'text': ' Die Deutschen Versicherer warnen davor, dass der Klimawandel zu steigenden Beiträgen bei Wohngebäude-Versicherungen führen könnte. Ihr Lobbyverband fordert mehr Prävention für Extremwetterereignisse. Die deutschen Versicherer warnen angesichts zunehmender klimabedingter Wetterextreme vor stark steigenden Beiträgen für Gebäudeversicherungen. Würden Klimaanpassungen nicht konsequent umgesetzt, könne es \"allein infolge der Klimaschäden innerhalb der nächsten zehn Jahre zu einer Verdopplung der Prämien\" kommen, erklärte der Hauptgeschäftsführer des Gesamtverbandes der Deutschen Versicherungswirtschaft (GDV), Jörg Asmussen. Betroffen wären Hausbesitzerinnen und Hausbesitzer, aber auch Mieterinnen und Mieter.\\xa0 26.11.2022 Höhere Zinsen und stark steigende Preise führen gerade dazu, dass viele Familien Hausbaupläne fallen lassen müssen. mehr Mancherorts könnten die Versicherungen für Gebäude sogar so teuer werden, dass Kunden sich diese nicht mehr leisten könnten. Jeder Versicherer müsse künftig prüfen, ob er steigende Extremwetterschäden langfristig weiter versichern könne. Mathias Kleuker, der bei dem Verband für Risikoschutz zuständig ist, sagte einer Mitteilung zufolge, einige Versicherer könnten dazu gezwungen sein, ihr Geschäft aufzugeben, weil die Risiken zu groß werden könnten. Die Versicherer plädieren daher dafür, beim Planen und Bauen stärker auf Klimaanpassung zu achten und in Überschwemmungsgebieten einen Baustopp zu verhängen. Bei extrem hohen Schadenssummen sollte aus Sicht der Versicherer der Staat die Kosten mittragen: \"Wir sprechen hier von Ausnahme-Katastrophen mit einem Schadenvolumen deutlich über 30 Milliarden Euro\", sagte Kleuker - also einem Volumen, das sogar das Ausmaß der Flutkatastrophe im Ahrtal übersteige. 31.05.2023 Trotz schwerer Winterstürme ging die Schadensumme durch Unwetter im Jahr 2022 stark zurück. mehr Laut den aktuellen Erkenntnissen des Weltklimarats werden Extremwetterereignisse durch den Klimawandel in den kommenden Jahren häufiger und schwerer. Auch Deutschland muss sich demnach auf weitere Überflutungen, Stürme und Dürren einstellen. Dieses Thema im Programm: Über dieses Thema berichtete BR24 am 14. Juni 2023 um 13:40 Uhr. 25.11.2022 • 19:45 Uhr 02.06.2023 • 16:01 Uhr 07.06.2023 • 09:26 Uhr 12.04.2022 • 14:53 Uhr 28.03.2023 • 14:48 Uhr '},\n",
" {'id': 'f9a8c6b6-e898-41ca-bc1b-7788d7b91189',\n",
" 'title': 'Was wird aus Berlusconis Wirtschaftsimperium?',\n",
" 'date': '2023-06-14T10:52:51.503+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/berlusconi-konzern-fininvest-tv-sender-nachlass-100.html',\n",
" 'text': ' Der Unternehmer Silvio Berlusconi hinterlässt einen Großkonzern, zu dem außer TV-Sendern eine Bank, ein Fußballklub und Immobiliengeschäfte gehören. Wer hat künftig die Macht in seiner Familienholding Fininvest? \"Grazie Silvio - Ciao papà\". Weiß auf blau lief den ganzen Tag weithin sichtbar die Abschiedsbotschaft für den Firmengründer über das digitale Laufband des Sendeturms in Cologno Monzese, traditioneller Sitz der Fernsehsender Silvio Berlusconis und seiner Familie. In den wichtigsten Berlusconi-TV-Programmen wurden am Todestag die aktuellen Sendungen abgebrochen, bis tief in die Nacht liefen Sonderübertragungen - erstmals in der Geschichte des Berlusconi-Fernsehens ohne Werbeunterbrechungen. Nachruf 12.06.2023 Niemand war länger im Amt des Ministerpräsidenten als er: Silvio Berlusconi hat Italiens Politik nachhaltig beeinflusst. mehr Das TV-Geschäft ist immer ein Herzstück des Wirtschaftsreiches Silvio Berlusconis gewesen. Nach dem Tod des Firmengründers aber sieht Italiens führende Wirtschaftszeitung \"Il Sole 24 Ore\" ein \"Imperium\", das sich \"vielen Herausforderungen\" stellen muss. Um Ängste einzudämmen, haben die fünf Kinder Berlusconis bereits am Todestag ihres Vaters den Märkten versichert: \"Die Aktivitäten werden in einer Linie der absoluten Kontinuität fortgesetzt.\" Piersilvio Berlusconi leitet das TV-Geschäft - und zeigt keine Ambitionen in der Politik. Spannend ist vor allem die Zukunft des Fernsehbetriebs der Familie, stets eine \"Cashcow\" im Firmengeflecht und entscheidend beteiligt am politischen Aufstieg des Silvio Berlusconi. Das Unternehmen, das in Italiens kommerziellem Fernsehen quasi eine Monopolstellung hat, wird geführt vom ältesten Sohn, Piersilvio Berlusconi. Der 54-Jährige ist seit 2015 Vorstandschef der Mediaset-Gruppe, die vor knapp einem Jahr umbenannt wurde in Media for Europe (MFE) - um deutlich zu machen, dass die Familie Berlusconi sich als Player nicht nur im italienischen, sondern im internationalen Fernsehgeschäft sieht. 12.06.2023 Nach seinem Tod wird Berlusconi als einer der \"einflussreichsten Männer\" Italiens gewürdigt. mehr Der Heimatmarkt allerdings ist nach wie vor die wirtschaftliche Basis. Angeführt von den drei wichtigsten MFE-Programmen Canale 5, Rete 4 und Italia 1 sind die Berlusconi-Sender im vergangenen Jahr erstmals fast auf Augenhöhe gekommen mit dem italienischen Staatsfernsehen RAI, das zu 99,56 Prozent in der Hand des Finanzministeriums ist. Im vergangenen Jahr erreichten die Berlusconi-Programme zur Hauptsendezeit eine durchschnittliche Quote von 36,2 Prozent. 55 Prozent des italienischen TV-Werbemarkts sind in den Händen der zu MFE gehörenden Berlusconi-Firma Publitalia. In dem seit Jahren international schwierigen TV-Markt hat sich Berlusconis Fernsehunternehmen relativ gut gehalten. Zwar scheiterte der Ausflug ins digitale Pay-TV, Mediaset Premium wurde 2019 eingestellt. Mit der Streaming-Plattform Mediaset Infinity versucht das Berlusconi-Unternehmen nun am Internetgeschäft teilzuhaben, auch neue TV-Spartenkanäle der MFE sind erfolgreich. 2021 erzielte das Unternehmen einen Nettogewinn von 374 Millionen Euro, im allgemeinen Krisenjahr 2022 waren es immerhin noch 216,9 Millionen. Ein Übernahmeversuch des französischen Medienkonzerns Vivendi wurde 2021 abgewehrt. 12.06.2023 Italiens Regierung droht mehr Unruhe nach dem Tod Berlusconis. Die Forza Italia muss sich nun neu orientieren. mehr Profitiert hat Mediaset lange von der politischen Protektion durch Silvio Berlusconi. Piersilvio Berlusconi aber hat sich zuletzt als Vorstandschef freigeschwommen. Im Unterschied zu seinem verstorbenen Vater treibt ihn kein politisches Sendungsbewusstsein um. Piersilvio sieht sich als Wirtschaftsmanager, etwas anderes hat er sein Leben lang nicht gemacht. Seit 1992 arbeitet er in Unternehmen des Familienkonzerns. Die Zeit, als sein Vater in die Politik einstieg, erzählte Piersilvio Berlusconi vor einigen Jahren, sei für ihn ein \"Albtraum\" gewesen. Vom Charakter deutlich ruhiger als Signor Papà, ließ Piersilvio, der einige Jahre Philosophie studiert hat, zuletzt Trash-Sendungen aus dem Programm werfen. Die internationalen Geschäfte liegen in Piersilvios Hand, die Erhöhung des Anteils von MFE am deutschen Unternehmen ProSiebenSat.1 hat er als Vorstandschef vorangetrieben. Er möchte, hat Piersilvio Berlusconi erzählt, das familieneigene Fernsehen zum \"pan-europäischen Unternehmen\" ausbauen. Außer in Italien und Deutschland ist die MFE vor allem im spanischen TV-Markt aktiv. Steht an der Spitze der Holding Fininvest: Tochter Marina Berlusconi. Der Berlusconi-Konzern ist aber weit mehr als Medien. Die Holding der Familie heißt Fininvest und wird seit 2005Line truncated
" {'id': '54229e43-aaa4-46a8-8ed8-0c02f2a007fc',\n",
" 'title': 'Großhandelspreise fallen stark',\n",
" 'date': '2023-06-14T10:03:28.754+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/inflation-grosshandelspreise-100.html',\n",
" 'text': ' Die Preise im deutschen Großhandel sind zum zweiten Mal in Folge gefallen. Damit könnte auch die Inflation weiter nachlassen, denn der Großhandel gilt als Scharnier zwischen Herstellern und Endkunden. Die deutschen Großhandelspreise sind im Mai wegen günstigerer Energie erneut gesunken. Sie gingen um 2,6 Prozent im Vergleich zum Vorjahresmonat zurück, wie das Statistische Bundesamt mitteilte. Das ist der stärkste Rückgang seit Juli 2020, als der Ausbruch der Corona-Pandemie auch für ökonomische Verwerfungen sorgte. Im April hatte es bereits ein Minus von 0,5 Prozent gegeben - dies war der erste Preisrückgang gegenüber dem Vorjahresmonat seit Dezember 2020. Auch im Vergleich zum Vormonat sanken die Preise im deutschen Großhandel: Von April auf Mai betrug der Rückgang 1,1 Prozent. 07.06.2023 Die Deutschen kaufen anders ein, um bei weiterhin steigenden Preisen zu sparen. mehr Den größten Einfluss auf die Entwicklung der Großhandelspreise hatten Mineralölerzeugnisse wie Benzin, die im Mai 22,7 Prozent billiger waren als ein Jahr zuvor. Die Rohstoffpreise waren vor einem Jahr nach dem russischen Einmarsch in die Ukraine besonders kräftig gestiegen. Dagegen stiegen im vergangenen Monat die Preise für Obst, Gemüse und Kartoffeln um mehr als 20 Prozent, die Preise für Baustoffe und Bauelemente aus mineralischen Stoffen um 11,6 Prozent im Vergleich zum Vorjahr. 13.06.2023 Die Inflationsrate hat sich im Mai leicht auf 6,1 Prozent abgeschwächt, vor allem dank gesunkener Energiekosten. mehr Mit dem sinkenden Preisdruck im Großhandel könnte auch die Inflation in Deutschland weiter nachlassen. Denn Preisveränderungen im Großhandel, der als Scharnier zwischen Herstellern und Endkunden gilt, kommen in der Regel mit Verzögerung auch bei den Verbrauchern an. Die Inflationsrate lag im Mai mit 6,1 Prozent auf dem niedrigsten Stand seit mehr als einem Jahr. Viele Ökonomen halten den Höhepunkt bei der Inflation inzwischen für überschritten. \"Allerdings dürfte insbesondere aufgrund der hohen Inflation zum Jahresbeginn die Teuerung im Gesamtjahr 2023 noch bei mehr als fünf Prozent liegen\" sagte der wissenschaftliche Direktor des Instituts für Makroökonomie und Konjunkturforschung (IMK), Sebastian Dullien. Für 2024 sei eine Inflationsrate von weniger als 2,5 Prozent zu erwarten. Dieses Thema im Programm: Über dieses Thema berichtete tagesschau24 am 14. Juni 2023 um 12:00 Uhr. hintergrund 28.05.2023 • 15:34 Uhr analyse 24.05.2023 • 12:24 Uhr 31.05.2023 • 15:30 Uhr 07.06.2023 • 16:16 Uhr Analyse 02.03.2023 • 13:40 Uhr '},\n",
" {'id': 'ea34c26d-96ff-4480-bd4d-72c6870121d7',\n",
" 'title': 'Microsoft bei Activision-Übernahme ausgebremst',\n",
" 'date': '2023-06-14T08:55:47.935+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/microsoft-activision-uebernahme-100.html',\n",
" 'text': ' Die geplante Mega-Übernahme des Videospiele-Herstellers Activision durch Microsoft liegt vorübergehend auf Eis. Ein US-Richter gab dem Antrag der US-Kartellbehörde statt, das Geschäft vorläufig auszusetzen. Die US-Verbraucherschutzbehörde FTC hat die Übernahme des Videospiel-Herstellers Activision Blizzard durch Microsoft vorübergehend aufgehalten. Bereits zu Beginn der Woche beantragte die FTC bei einem Bundesgericht in San Francisco eine einstweilige Verfügung, um den Abschluss des rund 69 Milliarden Dollar schweren Deals zu verhindern. Ein US-Richter gab dem Antrag der US-Behörde nun statt. Der Schritt sei notwendig, um den Status quo aufrechtzuerhalten, während die Klage der FTC anhängig sei, begründete US-Bezirksrichter Edward Davila seine Entscheidung. Die FTC befürchtet, dass Microsoft die Übernahme dazu nutzen könnte, den Wettbewerb in \"mehreren dynamischen und schnell wachsenden Spielemärkten zu schädigen\".\\xa0Wegen der befürchteter Wettbewerbsverzerrungen hatte die US-Verbraucherschutzbehörde bereits im Dezember gegen die Übernahme Klage eingereicht. 09.12.2022 Die US-Behörde FTC will die Übernahme von Activision Blizzard durch den Softwarekonzern Microsoft verhindern. mehr Auch außerhalb der USA gibt es Kritik an der geplanten Übernahme: Die britische Wettbewerbsbehörde CMA hatte im April erklärt, es sei zu befürchten, dass der Zusammenschluss \"zu weniger Innovation und weniger Auswahl für britische Spieler\" im Bereich des Cloud-Gamings führe. Die EU-Kommission hingegen hatte die Übernahme des Entwicklers bekannter Spiele wie \"Call of Duty\" und \"World of Warcraft\" Mitte Mai unter Auflagen gebilligt. 15.05.2023 Microsoft machte dafür Zugeständnisse. Vetos kommen weiter aus den USA und Großbritannien. mehr Eine Anhörung zur Klage in den USA ist für kommende Woche angesetzt. \"Wir begrüßen die Gelegenheit, unseren Fall vor Gericht zu präsentieren\", sagte Microsoft-Manager Brad Smith gegenüber US-Medien. Durch die Übernahme soll das weltweit drittgrößte Videospiel-Unternehmen entstehen. Microsoft ist auf dem Videospielmarkt vor allem mit seiner Konsole Xbox vertreten. Dieses Thema im Programm: Über dieses Thema berichtete Deutschlandfunk am 16. Mai 2023 um 14:43 Uhr. 06.06.2023 • 13:58 Uhr 23.01.2023 • 17:22 Uhr 16.04.2023 • 08:42 Uhr 12.05.2023 • 12:43 Uhr '},\n",
" {'id': '3f8d95b3-e891-441a-9fc0-a839936ae00c',\n",
" 'title': 'Gesunkene Inflation macht US-Zinsentscheid spannend',\n",
" 'date': '2023-06-14T08:22:49.284+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/konjunktur/fed-inflation-ezb-schwellenlaender-geldpolitik-zinserhoehung-leitzins-100.html',\n",
" 'text': ' Die Inflation in den Vereinigen Staaten ist überraschend stark zurückgegangen. Damit wird wahrscheinlicher, dass die US-Notenbank Federal Reserve nach ihrer Serie von Zinserhöhungen eine Pause einlegt. Die Inflationsrate in den USA ist im Mai überraschend stark zurückgegangen. Die Verbraucherpreise stiegen im Vorjahresvergleich um 4,0 Prozent, teilte das US-Arbeitsministerium mit. Experten hatten mit einem weniger starken Rückgang gerechnet. Im April hatte die Teuerungsrate noch bei 4,9 Prozent gelegen. Insgesamt zeigt die Tendenz bei den US-Verbraucherpreisen in den vergangenen Monaten nach unten. Elf Monate in Folge geht die Inflationsrate nun schon zurück. Noch im Juni vergangenen Jahres hatte sie 9,1 Prozent betragen - der höchste Stand seit 40 Jahren. 13.06.2023 Autobauer Ford hat in Köln seine erste E-Auto-Produktion in Europa eingeweiht. mehr Für die Finanzmärkte stehen die US-Inflationsdaten derzeit unter besonderer Beobachtung, denn sie sind für die Geldpolitik der Notenbank Federal Reserve von hoher Relevanz. Die Inflation liegt in den Vereinigten Staaten immer noch deutlich über der Zielmarke von 2,0 Prozent, sodass eine Straffung der Geldpolitik weiterhin als angemessen gilt. Die Frage ist allerdings, wie lange und mit welchem Tempo. Wenn die US-Teuerung sinkt, steigt zumindest die Chance, dass die Fed die Zinsen langsamer und weniger stark erhöht. Mit Blick auf den Zinsentscheid heute Abend rechnen bereits viele Marktbeobachter mit einer Zinspause, auch wenn es für eine Entwarnung in Sachen Inflation noch zu früh ist. Die Federal Reserve werde auf ihrer Sitzung \"vermutlich die erwartete Zinspause einlegen und den Leitzinskorridor bei 5,00 Prozent bis 5,25 Prozent beibehalten\", kommentieren die Commerzbank-Fachleute Christoph Balz und Bernd Weidensteiner. Ob dies allerdings schon das definitive Ende der Zinserhöhungen darstelle, sei weit weniger klar.\\xa0 02.06.2023 Nach dem Repräsentantenhaus hat auch der US-Senat für einen Gesetzentwurf zur Verhinderung eines Zahlungsausfalls gestimmt. mehr Hintergrund der Erwägungen der Commerzbank-Ökonomen, die zur Vorsicht mahnen, ist die sogenannte Kerninflationsrate. Bei dieser Rate, die für die Beurteilung der Lage ebenfalls herangezogen wird, sind die besonders schwankungsanfälligen Energie- und Lebensmittelpreise ausgeklammert. Sie gibt nach Ansicht von Fachleuten den allgemeinen Preistrend besser wieder als die Gesamtrate. Die Kerninflation fiel von 5,5 auf 5,3 Prozent - Volkswirte hatten mit 5,2 Prozent einen etwas stärkeren Rückgang erwartet. Shaan Raithatha, Ökonom beim Fondsanbieter Vanguard Europe, sieht in den aktuellen Daten deshalb noch keinen Wendepunkt für die US-Geldpolitik: \"Gemäß unserer Einschätzung wird die Inflation weiter abnehmen, aber bis zum Jahresende voraussichtlich über drei Prozent bleiben. In diesem Szenario ist es unwahrscheinlich, dass die Fed ihren Leitzins in diesem Jahr senken wird.\" analyse 30.05.2023 Die EZB will \"mittelfristig\" eine Inflation von zwei Prozent - wann kann sie ihr Ziel erreichen? mehr Insbesondere die Anleger am Aktienmarkt hoffen auf eine Drosselung des zuletzt scharfen Zinserhöhungstempos der Fed. Dies könnte den Impuls für weitere Kursgewinne liefern. Die Geldpolitik der Fed ist nicht zuletzt deshalb auch für viele Menschen in Deutschland und anderswo in Europa von Bedeutung. Schließlich haben viele in Altersvorsorge-Produkte wie beispielsweise Investmentfonds investiert, die über den Aktienmarkt Rendite erwirtschaften. Ein florierender US-Aktienmarkt hat positive Auswirkungen auf den europäischen und deutschen Aktienmarkt, der sich oft an den sogenannten US-Vorgaben orientiert. Auch auf die Wirtschaft hat die Fed-Zinspolitik große Auswirkungen. Ein zu hoher Leitzins könnte die US-Konjunktur abwürgen. Die Finanzierungsbedingungen für Unternehmen und private Haushalte verschlechtern sich mit steigenden Zinsen. Angesichts der globalen wirtschaftlichen Vernetzung und der großen Abhängigkeit der europäischen Wirtschaft von den Vereinigten Staaten und der Wall Street hätte eine US-Rezession auch erhebliche Folgen für die Konjunktur hierzulande, die sich derzeit ohnehin eher schwach entwickelt. Der Devisenmarkt wird ebenfalls stark von der US-Geldpolitik beeinflusst. Deswegen reagierte heute beispielsweise der Euro mit Kursgewinnen darauf, dass eine Zinspause in den USA wahrscheinlicher geworden ist, während die EZB die Zinsen in dieser Woche weiter erhöhen dürfte. Hohe Zinsen in den Vereinigten Staaten können dazu führen, dass Investoren ihr Geld bevorzugt in US-Anleihen anlegen, um die Rendite auf ihre Geldanlagen zu erhöhen. \\xa0 Ein stark anziehender Dollar und hohe US-Zinsen bedeuten deshalb vor allem für viele sogenannte Schwellenländer ein großes Risiko. Zum einen sind viele AnleiLine truncated
" {'id': '93a2d7a7-da65-404a-8a22-b7b7cd393495',\n",
" 'title': 'US-Anleger bleiben in Kauflaune',\n",
" 'date': '2023-06-13T22:21:45.878+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/finanzen/marktberichte/marktbericht-dax-rally-kurse-dow-inflation-fed-100.html',\n",
" 'text': ' Der Wall Street ist die Generalprobe vor dem morgigen Zinsentscheid der Notenbank gelungen. Rückläufige Inflationsdaten wurden von den Anlegern positiv aufgenommen. Zinsängste ebbten ab. Mit Erleichterung haben Anleger an der Wall Street auf den Rückgang der Inflation reagiert. Die Zahlen bestärkten sie in ihrer Einschätzung, dass die Notenbank Federal Reserve (Fed) die Zinsen bei ihrer Sitzung am Mittwoch vorerst nicht weiter erhöht. Die US-Teuerungsrate ging im Mai auf vier Prozent zurück, nachdem sie im vorangegangenen Monat noch bei 4,9 Prozent gelegten hatte. \"Die Inflation bleibt aber hartnäckig über dem Fed-Ziel von zwei Prozent\", gab Richard Flynn, Manager beim Brokerhaus Charles Schwab zu bedenken. \"Die gute Nachricht ist allerdings, dass der Preisdruck sich auf eine kleinere Anzahl von Bereichen beschränkt als zu Jahresbeginn.\" analyse 14.06.2023 Die Inflation in den Vereinigen Staaten ist überraschend stark zurückgegangen. mehr Dies verhalf allen großen Aktienindizes zu weiteren Kursgewinnen. Sowohl der S&P 500 als auch der technologielastige Nasdaq waren erst gestern auf 14-Monats-Hochs gestiegen und setzten damit ihre Klettertour fort. Der Dow Jones, der Leitindex der Standardwerte, legte am Ende um 0,43 Prozent zu und schloss bei 34.212 Zählern. Erneut etwas besser schnitt die zinssensitive Technologiebörse Nasdaq ab. Der Composite-Index rückte um 0,83, der Auswahlindex Nasdaq 100 um 0,79 Prozent vor. Der marktbreite S&P-500-Index ging bei 4369 Punkten um 0,69 Prozent höher aus dem Handel. Etwas aus dem Tritt kam derweil die 2023 bisher stark gelaufenen Apple-Aktien, die unter einem negativen Analystenkommentar litten. Maue Nachfragetrends, aber ein Bewertungsaufschlag von 50 Prozent gegenüber dem S&P 500 - das Verhältnis zwischen Chancen und Risiken sei eher ungünstig, schrieb UBS-Analyst David Vogt. Er strich seine Kaufempfehlung. Apple-Anteile hatten am vergangenen Montag nach 42 Prozent Jahresplus ein Rekordhoch von fast 185 Dollar erreicht. Vogt sieht keinen Spielraum über 190 Dollar hinaus. Das Papier schloss bei 183,31 Dollar um 0,26 Prozent etwas leichter. Der deutsche Aktienmarkt hat heute mit Gewinnen auf eine im Mai von 4,9 auf 4,0 Prozent deutlich gesunkene US-Inflation reagiert. Die Verbraucherpreise waren im Vorfeld mit großer Spannung erwartet worden, gelten sie doch als eine zentrale Entscheidungsgrundlage für die US-Notenbank Federal Reserve (Fed) bei ihrer weiteren Zinspolitik. Hoffnungen auf eine Zinspause der Fed im Juni wurden durch die Zahlen geschürt. Der DAX war bereits am Morgen mit viel Schwung gestartet und markierte zunächst bei 16.223 Punkten sein Tageshoch, welches im späten Geschäft mit einer steigenden Wall Street im Rücken noch leicht übertroffen wurde. Am Ende schloss der deutsche Leitindex bei 16.230 Punkten nur zwei Punkte unter Tageshoch, ein Zugewinn von 0,83 Prozent. Damit nimmt der deutsche Leitindex sein bei 16.331 Punkten liegendes Allzeithoch ins Visier und zeigt sich trotz eines inflationären Umfeldes und eines bisher beispiellosen Zinszyklus der großen Notenbanken weiter sehr robust. Der MDAX, der Index der mittelgroßen Werte, legte 0,61 Prozent zu auf 27.473 Punkte. Morgen ab 20 Uhr mitteleuropäischer Zeit (MEZ) wird der Zinsentscheid der Fed erwartet, gefolgt von der EZB am Donnerstag. Die \"Woche der Notenbanken\" wird am Freitag von der Bank of Japan beendet. Von der Europäischen Zentralbank (EZB) erwarten Experten eine kleine Erhöhung um 0,25 Prozentpunkte, sie liegt im Zinszyklus noch hinter der Fed zurück. Konkret stiegen die US-Verbraucherpreise im Mai gegenüber dem Vorjahresmonat um 4,0 Prozent und fielen damit besser aus als erwartet. Analysten hatten mit einem Rückgang auf 4,1 Prozent gerechnet. Im April hatte die Rate noch bei 4,9 Prozent gelegen. Wermutstropfen ist aber die von der Federal Reserve besonders beobachtete Kerninflation ohne die Preise für Lebensmittel und Energie. Diese stieg im Jahresvergleich um 5,3 Prozent und fiel damit nach zuvor 5,5 Prozent nur leicht. Experten hatten genau mit dieser Entwicklung gerechnet. Die Lage entspanne sich weiter, auch wenn es zu beachten gelte, dass die Inflationsraten vor allem wegen kräftiger Basiseffekte gesunken seien, kommentierte Helaba-Volkswirt Ralf Umlauf. Vor allem der monatliche Anstieg der Kernrate von 0,4 Prozent könne die US-Notenbank nicht beruhigen. \"Obwohl es auf den Vorstufen der preislichen Entwicklung Hinweise darauf gibt, dass die Kernteuerung im Verlauf des Jahres weiter nachgeben wird, bleibt das Risiko bestehen, dass die US-Notenbank im Sommer nochmals an der Zinsschraube dreht\", so Umlauf. Allerdings dürften die Zahlen der Notenbank auch den nötigen Spielraum geben, um im Juni nach zuvor zehn Anhebungen eine Zinspause einzulegen. Genau darauf hatten die Märkte zuletzt gesetzt. Derzeit befinden sich die US-Leitzinsen zwischen 5,Line truncated
" {'id': 'afef7926-3f74-42db-8ac0-4e99934e2f91',\n",
" 'title': 'Kurssturz wegen Jan Böhmermann?',\n",
" 'date': '2023-06-13T19:23:24.246+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/cts-eventim-boehmermann-kritik-aktienkurs-100.html',\n",
" 'text': ' Die Aktie des Ticketverkäufers und Konzertveranstalters CTS-Eventim ist binnen eines Tages um fast neun Prozent eingebrochen. Zuvor hatte der TV-Satiriker Jan Böhmermann den Konzern in seiner ZDF-Sendung kritisiert. Nach Kritik des TV-Satirikers Jan Böhmermann ist die Aktie des Event-Vermarkters und Tickethändlers CTS-Eventim abgestürzt. In seiner Sendung \"ZDF Magazin Royale\" am Freitagabend hatte Böhmermann den Konzern zum Thema gemacht. Die Folge trägt den Titel: \"Mit Fantasiegebühren zum Eventimperium\". Der umstrittene Satiriker verwies in der Sendung auf die enorme Marktmacht des nach eigenen Angaben international führenden Anbieters von Tickets und Live-Events. Zudem kritisierte Böhmermann die Ticket-Verkaufsgebühren als zu hoch. Bereits Anfang Juni hatte die ARD berichtet, wie Eventim zum marktbeherrschenden Player im Ticket- und Veranstaltungsgeschäft werden konnte - auch indem das Unternehmen am Kartellamt vorbei expandierte. 13.06.2023 ardmediathek Die Aktie des im M-Dax notierten Unternehmens rutschte am Montag im Tagesverlauf deutlich ab und lag zum Handelsschluss rund 8,8 Prozent im Minus - in einem ansonsten freundlichen Marktumfeld. Am Dienstag verlor das Papier weitere 7,5 Prozent. Vielfach wurde der Kurssturz der Aktie als Folge der Böhmermann-Schelte gedeutet. Seit Jahresbeginn hatte die Aktie von CTS-Eventim zuvor um gut neun Prozent zugelegt - ein Erholungseffekt nach dem Einbruch während der Corona-Pandemie. Konzerte und Live-Events mussten deswegen komplett abgesagt werden. exklusiv 03.06.2023 Der Ticket- und Veranstaltungskonzern Eventim ist Marktführer in Deutschland. mehr Erst Anfang vergangenen Jahres hatte das Unternehmen 36 Millionen Euro vom Staat bekommen - im Rahmen der Corona-Überbrückungshilfen. Insgesamt sollen es laut Böhmermann 276 Millionen Euro Corona-Hilfen für CTS-Eventim gewesen sein. 09.08.2022 • 08:12 Uhr 30.05.2023 • 08:30 Uhr '},\n",
" {'id': '70a3d034-58a0-4557-8235-dbfa9687d897',\n",
" 'title': 'Exporte zu Russlands Nachbarn stark gestiegen',\n",
" 'date': '2023-06-13T16:10:29.623+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/weltwirtschaft/exporte-russland-gus-100.html',\n",
" 'text': ' Deutschland exportiert seit Beginn des Ukraine-Kriegs deutlich mehr Waren in die Nachbarstaaten Russlands. Experten vermuten, dass damit auch die westlichen Sanktionen umgangen werden. Die deutschen Exporte in Russlands Nachbarstaaten haben sich gegenüber dem Niveau vor dem Ukraine-Krieg mehr als verdoppelt. Von Januar bis April summierten sich die Ausfuhren in die Gemeinschaft Unabhängiger Staaten (GUS) ohne Russland auf 2,9 Milliarden Euro, wie das Statistische Bundesamt mitteilte. Das seien 1,5 Milliarden Euro mehr als im gleichen Zeitraum des Vorkriegsjahres 2021, was einem Plus von 106,4 Prozent entspreche. 18.05.2023 Etwa 70 Unternehmen und Organisationen sollen vom US-Export abgeschnitten werden. mehr Exportiert wurden hauptsächlich Kraftfahrzeuge und Kraftfahrzeugteile im Wert von 865 Millionen Euro. \"Damit hat sich der Export dieser Güter gegenüber dem Vergleichszeitraum des Jahres 2021 mehr als verfünffacht\", so die Statistiker. Weitere wichtige Exportgüter waren Maschinen und chemische Erzeugnisse. Zugleich sind die deutschen Exporte in die Russische Föderation gegenüber dem Vorkriegsniveau erwartungsgemäß eingebrochen. Seit März 2022 haben die EU-Staaten mehrere Sanktionspakete mit Exportverboten nach Russland verabschiedet. Die Exporte lagen mit 3,5 Milliarden Euro um 58,3 Prozent unter dem ersten Jahresdrittel 2021, als noch Waren im Wert von 8,4 Milliarden Euro nach Russland gingen. Am stärksten gingen die Ausfuhren von Kraftfahrzeugen und Kraftfahrzeugteilen sowie Maschinen zurück. 12.05.2023 Die EU-Außenminister suchen nach einer einheitlichen Haltung zu Unternehmen, die Russland unterstützen. mehr Diese Parallelität lässt unschwer auf einen hohen Anteil so genannter Umgehungsgeschäfte schließen, also den Weiterexport aus anderen GUS-Staaten in die Russische Föderation, womit westliche Sanktionen umgangen werden. Diese Geschäfte, die auch über weitere Drittstaaten wie etwa den Iran stattfinden sollen, lassen sich trotz aller Sanktionsbemühungen westlicher Staaten kaum kontrollieren. Nach Einschätzung von Ökonomen muss Russland für diese Parallelimporte deutlich höhere Preise bezahlen. Die Zahlen zeigen denn auch, dass die möglichen Parallelimporte lange nicht an das Vorkriegsniveau der Ausfuhren nach Russland heranreichen. \"Der Exportanstieg in die GUS-Staaten machte (...) weniger als ein Drittel des Exportrückgangs nach Russland aus\", so das Statistische Bundesamt. Die Statistiker haben 2021 als Vergleichsjahr gewählt, weil Aussagen gegenüber Januar bis April 2022 durch den Beginn des Ukraine-Kriegs und die folgenden\\xa0Sanktionen \"stark verzerrt\" seien. Interview 24.02.2023 Wie hart treffen die westlichen Sanktionen Russland? mehr Im Jahr 2022 gehörten außer Russland noch Armenien, Aserbaidschan, Belarus, Kasachstan, Kirgisistan, Moldau, Tadschikistan, Turkmenistan und Usbekistan zur GUS. Die meisten deutschen Warenexporte in diese Ländergruppe gingen in den ersten vier Monaten des Jahres nach Kasachstan (1,1 Milliarden Euro). Sie fielen damit um 0,7 Milliarden Euro höher aus als im gleichen Zeitraum 2021. Auch die Exporte nach Belarus und Usbekistan nahmen von 440 auf 617 Millionen Euro beziehungsweise von 176 auf 315 Millionen Euro spürbar zu. Russland selbst rutschte auf Rang 28 der wichtigsten Empfängerstaaten deutscher Waren, im Vergleichszeitraum 2021 lag das Land noch auf Rang 15. Deutsche Unternehmen können insbesondere noch pharmazeutische Erzeugnisse sowie Maschinen, mechanische Geräte, Fahrzeuge, Kunststoffe und elektrotechnische Erzeugnisse nach Russland exportieren. Dieses Thema im Programm: Über dieses Thema berichtete Inforadio am 13. Juni 2023 um 09:38 Uhr. 19.05.2023 • 14:36 Uhr 24.08.2022 • 03:54 Uhr 05.06.2023 • 10:14 Uhr 07.06.2023 • 03:24 Uhr 06.12.2022 • 14:04 Uhr 02.08.2022 • 16:53 Uhr 04.05.2022 • 09:28 Uhr Hintergrund 02.08.2022 • 16:53 Uhr 17.05.2022 • 08:07 Uhr '},\n",
" {'id': '3d437e5b-6032-4764-aa5b-a489f4b5ba7e',\n",
" 'title': 'Supermarkt-Einkauf anderswo noch viel teurer',\n",
" 'date': '2023-06-13T16:03:21.233+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/preisvergleich-bbc-uk-sz-lebensmittelpreise-100.html',\n",
" 'text': ' Ein Preisvergleich zwischen sechs Ländern zeigt: Verbraucher in anderen europäischen Staaten müssen für Produkte des täglichen Bedarfs teilweise noch deutlich mehr zahlen als Konsumenten in Deutschland. Die BBC hat jüngst die Preise von 23 typischen Konsumartikeln wie Butter, Klopapier oder Zahnpasta in Großbritannien vergleichen lassen - mit den Preisen in Deutschland, Spanien, Italien, Frankreich und den Niederlanden. Das Ergebnis: Unter diesen Ländern ist Deutschland noch am günstigsten, wenn man auf die untersuchten Produkte blickt. Die höchsten Preise müssen demnach die Konsumenten in Frankreich bezahlen. Gesamtkosten von 55 Euro beim Einkauf in Deutschland errechneten Experten des Marktforschungsinstituts Circana im Auftrag der BBC für den zusammengestellten Warenkorb. Ein französischer Supermarktkunde zahlt demnach für dieselben Produkte knapp 79 Euro. Großbritannien rangiert mit gut 60 Euro im Mittelfeld. 07.06.2023 Die Deutschen kaufen anders ein, um bei weiterhin steigenden Preisen zu sparen. mehr Die Marktforscher untersuchten dabei die Durchschnittspreise der jeweiligen Produkte im März, umgerechnet auf vergleichbare Verpackungsgrößen. Besonders günstig waren in Deutschland dem Vergleich zufolge Milch, Joghurt, Dosenfisch, Babynahrung, Zucker und Süßstoff, Spülmittel sowie Tierfutter. Billiger in Großbritannien waren Windeln, Fertigpizza und Reis. Relativ hoch sind im europäischen Vergleich die deutschen Nudelpreise. Wie entstehen die Preise? Experten halten die Intensität des Wettbewerbs für einen sehr wichtigen Faktor. In Deutschland haben die Discounter mit ihren günstigeren Eigenmarken-Produkten den Fachleuten einen besonders hohen Marktanteil - was große Auswirkungen auf den gesamten Einzelhandel hat. Außerdem spiele die Politik eine Rolle, die durch Besteuerung, Subventionen und Regulierung Einfluss auf die Preise nehme. In Frankreich zum Beispiel könnte ein stärkerer Schutz für die Erzeuger zu höheren Lebensmittelpreisen in den Geschäften führen, so William Woods, Lebensmittelexperte beim Analysehaus Bernstein. 13.06.2023 Die Inflationsrate hat sich im Mai leicht auf 6,1 Prozent abgeschwächt, vor allem dank gesunkener Energiekosten. mehr In Großbritannien hatten die Lebensmittelpreise zuletzt um 19 Prozent verglichen mit dem Vorjahr zugelegt. Auch in der Eurozone und in Deutschland ziehen die Preise immer weiter an - wenn auch mit gebremstem Tempo. Im Mai stiegen die deutschen Preise für Nahrungsmittel im Mai um immer noch stark überdurchschnittliche 14,9 Prozent. Im April hatte der Anstieg noch 17,2 Prozent zum Vorjahr betragen. In der Eurozone sieht es ähnlich aus: Hier zeigen die Mai-Daten für verarbeitete Lebensmittel (einschließlich Tabak und Alkohol) verglichen mit dem Vorjahresmonat einen Anstieg um 13,4 Prozent. Die Preise für Lebensmittel steigen also deutlich stärker an als die allgemeine Inflationsrate. \\xa0\\xa0 analyse 24.05.2023 Ökonomen und Verbraucherschützer vermuten in Supermärkten teils ungerechtfertigt hohe Preissteigerungen. mehr Dabei entspannen sich die globalen Lebensmittelpreise bereits seit Monaten, wie ein Blick auf den \"FAO Food Price Index\" zeigt. Der Nahrungsmittel-Preisindex\\xa0der\\xa0Ernährungs- und Landwirtschaftsorganisation\\xa0(FAO) der\\xa0Vereinten Nationen wird monatlich veröffentlicht und bildet die Entwicklung der\\xa0Weltmarktpreise\\xa0von 55 Agrarrohstoffen und\\xa0Nahrungsmitteln\\xa0in\\xa0Dollar ab. Im Mai sank er auf 124,3 Punkte, was einem Minus von 2,6 Prozent verglichen mit April entspricht. Warum steigen die Lebensmittelpreise also weiterhin überdurchschnittlich? \"Etliche Faktoren spielen in den Preisanstieg hinein, darunter gestiegene Energiekosten, versteckte Preiserhöhungen\\xa0sowie die schwierige internationale politische Lage und Arbeitskräftemangel\", heißt es dazu von der Verbraucherzentrale.\\xa0Manche Preise von Lebensmitteln seien indes weder gerechtfertigt noch nachvollziehbar.\\xa0Deshalb sei ein kritischer Blick der Politik und des Kartellamts auf Handel und Lebensmittelhersteller notwendig. Dieses Thema im Programm: Über dieses Thema berichtete tagesschau24 am 13. Juni 2023 um 17:00 Uhr. 01.09.2022 • 12:27 Uhr 23.04.2022 • 09:41 Uhr 13.04.2022 • 12:13 Uhr 22.06.2022 • 09:45 Uhr Kommentar 14.06.2022 • 20:50 Uhr 07.06.2023 • 16:16 Uhr '},\n",
" {'id': '41b3ccfc-5c61-4b4f-a60d-a85df308b04a',\n",
" 'title': 'Fords Zeitenwende',\n",
" 'date': '2023-06-13T13:13:34.584+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/unternehmen/ford-elektroautos-koeln-100.html',\n",
" 'text': ' Ford hat in Köln seine erste E-Auto-Produktion in Europa eingeweiht. Es ist Auftakt zu einem Strategiewechsel: In der Stadt läuft künftig nicht mehr das günstige Modell Fiesta vom Band, sondern ein teurer Elekto-SUV. Es wirkt etwas inszeniert: Eine Karosse des neuen vollelektrischen SUV Ford Explorer hängt am Laufband. An den Laufbändern hinter dem Rampenlicht hängen noch die Rahmen des bescheidenen Fiesta, der in Kürze dem doppelt so großen Lifestyle-Auto weichen wird. An einem abgesteckten Bereich warten Fotografen, Kamerateams und Journalisten, bis Bundeskanzler Olaf Scholz und der Aufsichtsratsvorsitzende der Ford Motor Company William Clay Ford - der Urenkel des Firmengründers - auftauchen. An der SUV-Karosse warten zwei Ford-Mitarbeiter und eine Mitarbeiterin aus der Produktion. Es war wohl der Wunsch des Kanzlers, einen direkten Austausch mit ihnen zu haben. Bei dem Gespräch erzählt Ingenieur Sami Özberk, dass die Familie seit drei Generation im Betrieb beschäftigt ist. Es ist ein Fototermin, Fragen der Journalisten sind nicht erlaubt. 14.02.2023 Alleine an den deutschen Standorten Köln und Aachen verlieren 2300 Menschen ihren Job. mehr Es liegt viel Pathos in der Luft, als Olaf Scholz und William Clay Ford am Montag den digitalen Buzzer für den symbolischen Start der E-Auto-Produktion von Ford in Europa drücken. Von einer \"neuen Ära\" spricht Scholz. Man schreibe Geschichte, wie etwa vor 93 Jahren, als Henry Ford zusammen mit Konrad Adenauer, der damals noch Oberbürgermeister von Köln war, die erste Produktionsstraße bei Ford in Betrieb nahm. Auch jetzt soll es einen Aufbruch geben. Die Werkshalle wird komplett umstrukturiert - raus mit dem Verbrennern, rein in die E-Mobilität. Anfang Juli geht hier der letzte Fiesta vom Band. Anfang September folgt der SUV Explorer, kommendes Jahr sollen die ersten Autos dieses Typs ausgeliefert werden. Dann sollen hier 250.000 E-Autos pro Jahr produziert werden. Für den Umbau investiert Ford zwei Milliarden Euro, und das vor dem Hintergrund, dass andere amerikanische Autohersteller den Produktionsstandort Europa verlassen haben, wie der Chef des US-Mutterkonzerns William Ford betont: \"Wir haben uns entschieden zu bleiben, zu investieren und die Zukunft zu gestalten - Ford neuen Atem einzuhauchen.\" 22.06.2022 Ford wird seine neuen E-Auto-Modelle in Valencia produzieren. mehr Mit dem Explorer läutet Ford in Europa eine neue Strategie ein: Nach dem Fiesta soll auch der Focus nicht mehr produziert werden. Deutlich weniger Modelle, dafür höherpreisig. Der Explorer soll bis zu 45.000 Euro kosten, doppelt so viel wie der Fiesta jetzt. Ein gewisses Wagnis, findet auch Helena Wisbert von der Universität Wolfsburg. Mit E-Autos, die in Europa produziert werden, sei es derzeit schwierig, Gewinn zu machen. Noch ist man auf die Zulieferung von wichtigen Bauteilen angewiesen. Ford kooperiert zum Beispiel mit VW, um sich Bauteile des ID.3 wie die teure Batterie zuliefern zu lassen. Ein Ford Explorer im Werk in Köln - das Elektroauto soll bis zu 45.000 Euro kosten. Trotzdem sei es ein positives Signal, denn jetzt gelte es schnell in den Markt zu kommen - und bestehende Lösungen zu nutzen, so die Automobilexpertin. Denn die Konkurrenz aus China drängt in den europäischen Markt. Dort habe man bereits Modelle entwickelt, die komplett in eigener Produktion entstehen, sodass man dort die hundertprozentige Kostenkontrolle habe. Die Verkaufspreise sind jetzt schon auf dem asiatischen Markt deutlich günstiger. 30.05.2023 In Nordfrankreich hat eine der größten Batteriefabriken Europas eröffnet. mehr Trotzdem ist es für die Mitarbeiter und Mitarbeiterinnen von Ford ein Lichtblick. Im Frühjahr fiel noch die Entscheidung, 2300 der insgesamt 14.000 Stellen in Köln zu streichen, um den Standort zu sichern. Trotz der neuen Produktion bleibt es dabei. Für die verbleibenden Mitarbeiter ist der Strategiewechsel jetzt eine Zukunftssicherung - zumindest hoffen das viele. \"Diejenigen, die am Band stehen, wollen, dass die Zukunft mit uns und mit ihnen ist\", appellierte auch Kanzler Scholz. \"Sie wollen bei den Technologien dabei sein, die für die Zukunft wichtig sind.\" Ingenieur Sami Özberk ist einer, dessen Job durch die Produktion des Explorer gesichert ist. Jetzt muss sich das neue Modell auf dem Markt bewähren und dem Konzern Geld einbringen. 31.05.2023 • 08:14 Uhr 10.05.2023 • 08:57 Uhr 03.04.2023 • 11:26 Uhr 03.02.2023 • 15:20 Uhr 14.09.2021 • 15:57 Uhr Video 12.06.2023 • 17:14 Uhr 20.02.2023 • 21:23 Uhr 12.08.2022 • 17:48 Uhr 09.08.2022 • 15:26 Uhr '},\n",
" {'id': 'a9bd0038-a181-490a-a4ec-6e09f1273aa9',\n",
" 'title': 'Tourismus in Deutschland fast auf Vorkrisenniveau',\n",
" 'date': '2023-06-13T12:35:17.722+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/tourismus-deutschland-corona-100.html',\n",
" 'text': ' Der Tourismus in Deutschland hat sich nach den Pandemiejahren erholt. Im April erreichte die Zahl der Übernachtungen fast das Vorkrisenniveau. Das liegt vor allem an Deutschen, die im eigenen Land Urlaub machen. Rund 40,2 Millionen Übernachtungen verbuchten die Beherberungsbetriebe im Monat April. Das waren nur 0,2 Prozent weniger als im Vergleichsmonat April 2019, vor dem Ausbruch der Corona-Pandemie, die der Branche rund drei Jahre lang zusetzte. Vergleichen mit dem April 2022 bedeuten die neuen Zahlen einen Zuwachs von 12,4 Prozent, wie die Statistiker mitteilten. Von der Krise erholen konnte sich demnach vor allem der Inlandstourismus. Das bedeutet, dass vor allem Deutsche wieder verstärkt im eigenen Land Urlaub machen. Die Zahl der Übernachtungen von Gästen aus dem Inland stieg im April um 9,9\\xa0Prozent im Jahresvergleich und um 2,6\\xa0Prozent im Vergleich zur Vorkrisenzeit. Bei Gästen aus dem Ausland erhöhte sich die Zahl im Vergleich zum Vorjahresmonat um 28,5\\xa0Prozent. Damit lag sie aber noch immer 13,2\\xa0Prozent unter dem Vorkrisenniveau. Die Behörde hat dabei Angaben von Hotels, Gasthöfe, Pensionen und Ferienunterkünfte, aber auch Campingplätze mit mindestens zehn Schlafgelegenheiten beziehungsweise zehn Stellplätzen ausgewertet. Die Stimmung in der deutschen Tourismusbranche hat sich zuletzt entsprechend aufgehellt. So geht die Deutsche Zentrale für Tourismus (DZT), die im Auftrag der Bundesregierung das Reiseziel Deutschland vermarktet, davon aus, dass die Branche weiter wächst. Laut einer aktuellen Umfrage ist die Stimmung in den Unternehmen von einem niedrigen Stand im letzten Quartal des vergangenen Jahres im ersten Quartal 2023 auf den höchsten Stand seit mehr als einem Jahr gestiegen. Weiter angetrieben werden dürfte der Tourismus in Deutschland auch weiterhin vor allem von den Deutschen. Laut einer Tourismus-Analyse der BAT Stiftung für Zukunftfragen planen im laufenden Jahr 28 Prozent der Deutschen einen Urlaubstrip im eigenen Land. Dabei werden die Reiseregionen in Bayern, Mecklenburg-Vorpommern und Niedersachsen bevorzugt angesteuern. 41 Prozent der Befragten wollen dagegen im europäischen Ausland ausspannen, 16 Prozent planen eine Fernreise. Aber auch unter den Europäern ist Deutschland weiterhin als Reise-Destination beliebt. Laut einer Expertenumfrage der DZT rangiert Deutschland auf Platz vier der beliebtesten Reiseländer der Europäer, nach Frankreich, Italien und Spanien. 07.03.2023 • 09:21 Uhr 01.06.2023 • 15:56 Uhr 24.05.2023 • 08:54 Uhr 03.03.2023 • 08:21 Uhr '},\n",
" {'id': 'a39e2a49-d3c3-4d7d-9cf2-827a405d28d8',\n",
" 'title': 'Anteil der Fertighäuser in Deutschland steigt',\n",
" 'date': '2023-06-13T11:15:50.091+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/mehr-fertighaeuser-deutschland-100.html',\n",
" 'text': ' In Deutschland werden immer mehr Fertighäuser errichtet. Fast jedes vierte neu gebaute Einfamilienhaus kam im vergangenen Jahr in fertigen Teilen aus der Fabrik. Dabei machen die Preissteigerungen auch vor diesem Segment nicht halt. Der Trend geht in Deutschland weiter zum Fertighaus: 22,8 Prozent der im vergangenen Jahr hierzulande fertiggestellten Einfamilienhäuser sind laut Statistischem Bundesamt vorgefertigte Häuser aus der Fabrik. Zum Vergleich: 2012 hatte der Anteil der Fertighäuser an den neu gebauten Einfamilienhäusern noch bei 15,3 Prozent gelegen. Gut 20.000 Gebäude wurden im vergangenen Jahr insgesamt in dieser Bauweise errichtet, die meisten davon - 17.600 - waren Einfamilienhäuser. Damit stieg der Zahl der Fertighäuser in Deutschland insgesamt um drei Prozent im Vergleich zu 2021. Das Statistikamt vermutet, dass sich dieser Trend auch in diesem Jahr fortsetzen wird. Zwar seien 2022 weniger Baugenehmigungen als im Vorjahr erteilt worden (minus 14,6 Prozent), doch der Rückgang fiel geringer aus als bei den konventionellen Häusern (minus 17,5 Prozent). Vor allem schlechtere Finanzierungsbedingungen und hohe Kosten für Material dürften laut Statistikamt Gründe für weniger Bauvorhaben sein. Diese machen auch vor Fertighäusern nicht Halt: Die Preise für Einfamilienhäuser in diesem Segment stiegen 2022 im Vergleich zum Vorjahr um 15,2 Prozent. Das sei die höchste gemessene Preissteigerung gegenüber einem Vorjahr seit Beginn der Erhebung 1968, erklärte das Statistikamt. Im Zehnjahresvergleich habe sich der Bau von Einfamilienfertighäusern um mehr als 65 Prozent verteuert. 02.06.2023 Wie realistisch ist das neue Förderprogramm des Bundesbauministeriums für Familien? mehr 30.05.2023 • 09:01 Uhr 26.11.2022 • 15:42 Uhr 12.04.2022 • 14:53 Uhr 10.01.2022 • 09:36 Uhr '},\n",
" {'id': '040aefa6-2871-428d-ab34-a5194aa164ca',\n",
" 'title': 'Privatinvestor übernimmt Golden Globes',\n",
" 'date': '2023-06-13T11:09:26.661+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/golden-globes-verkauf-100.html',\n",
" 'text': ' Ein Privatunternehmen verleiht künftig die Golden Globe Awards. Die neue Macher versprechen, die Veranstaltung zu modernisieren. An den Globes hatte es in den vergangenen Jahren heftige Kritik gegeben. Die viel beachteten Golden Globe Awards sind in neuer Hand. Der bisherige Ausrichter, die Hollywood Foreign Press Association (HFPA), hat ihre Rechte an die Investmentfirma Eldridge Industries und deren Tochter Dick Clark Productions verkauft, wie der Journalistenverband bekanntgab. Zugleich gab der Verband seine Auflösung bekannt. Damit endet die 80-jährige Geschichte der Vereinigung von in Hollywood ansässigen Journalisten, die vorwiegend für ausländische Medien berichten. An ihre Stelle tritt eine neue Stiftung, die Golden Globe Foundation, die die philanthropische Arbeit der HFPA mit Spenden für wohltätige Zwecke fortführen soll. Der Verband hatte das neue Modell bereits im vergangenen Juli beschlossen. Besonders in den 2000er-Jahren hatte sich die Kritik an der knapp 100 Mitglieder zählenden HFPA gehäuft. Ihr wurden mangelnde Diversität, Sexismus und intransparente Aufnahme- und Vergabekriterien vorgeworfen. Im vergangenen Jahr hatte der Sender NBC sogar die traditionelle TV-Übertragung abgesagt. 11.05.2021 Gegen die Organisatoren hinter der Filmauszeichnung mehren sich Vorwürfe wie Rassismus und Sexismus. mehr Anders als bei der \"Oscar\"-Verleihung werden bei den Golden Globes auch TV-Shows und Serien ausgezeichnet, deren Bedeutung in den vergangenen Jahren deutlich zugenommen hat. Die Nominierungen für die Golden Globes galten zunehmend auch als Vorboten der noch bedeutenderen Oscar-Verleihung der Academy of Motion Picture Arts and Sciences. Die hohe Aufmerksamkeit für den Film- und Fernsehpreis und dessen zunehmende Kommerzialisierung mit Millionen-Umsätzen hatten den als Non-Profit-Organisation geltenden Journalistenverband schon zuvor zu mehreren Reformen veranlasst. 13.12.2021 Die Nominierungen für die Golden Globes sind verkündet worden. Dieses Mal ist vieles anders. mehr Künftig werden die Preise also von einer privaten, profitorientierten Organisation verliehen. Die neuen Macher versprechen vor allem eine Modernisierung und Professionalisierung der Abläufe. Man wolle weiterhin die \"dynamischste Preisverleihung\" als Live-Fernsehshow für Zuschauer in aller Welt ausrichten, erklärte Jay Penske, Chef von Dick Clark Productions. Die 81. Verleihung der Golden Globes soll am 7. Januar 2024 stattfinden. 11.01.2023 • 05:52 Uhr 10.01.2022 • 06:35 Uhr '},\n",
" {'id': '04b731c4-a407-4928-b82a-fe1ccd5090cf',\n",
" 'title': 'Teuerung bleibt bei Lebensmitteln hoch',\n",
" 'date': '2023-06-13T10:41:44.742+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/verbraucher/inflation-energiepreise-lebensmittelpreise-100.html',\n",
" 'text': ' Die Inflationsrate hat sich im Mai leicht auf 6,1 Prozent abgeschwächt, vor allem dank gesunkener Energiekosten. Hohe Lebensmittelpreise machen vielen Deutschen aber weiter zu schaffen, Verbraucherschützer warnen vor den Folgen. Im Mai sind die Verbraucherpreise in Deutschland nach den Berechnungen des Statistischen Bundesamtes um 6,1 Prozent im Vergleich zum Vorjahresmonat gestiegen. Die Statistiker bestätigten damit eine frühere Schätzung. Die ermittelte Teuerungsrate bedeutet eine Abschwächung gegenüber dem April-Wert von 7,2 Prozent und ist die niedrigste Preissteigerungsrate seit März 2022. \"Die Inflationsrate hat sich damit weiter abgeschwächt, bleibt jedoch trotzdem auf einem hohen Niveau\", sagte die Präsidentin des Statistischen Bundesamtes, Ruth Brand. Von April auf Mai fielen die Preise minimal um 0,1 Prozent. Eine sinkende Teuerung bei Energiepreisen war für den Rückgang der gesamten Teuerungsrate verantwortlich. Sie legten unterdurchschnittlich um 2,6 Prozent zu. Verantwortlich dafür ist laut dem Bundesamt allerdings auch ein \"Basiseffekt\": Im Vergleichszeitraum des vergangenen Jahres waren wegen des russischen Angriffs auf die Ukraine drastische Preissteigerungen im Energiesektor zu verkraften. Auch die Preisbremsen für Strom, Erdgas und Fernwärme dämpften im Mai dieses Jahres den Preisanstieg. Erdgas kostete im Mai dennoch noch 25,6 Prozent mehr als ein Jahr zuvor, Brennholz, Holzpellets oder andere feste Brennstoffe verteuerten sich mit 23,8 Prozent ebenfalls besonders stark. Überdurchschnittlich erhöhten sich auch die Preise für Strom (+12,7 Prozent) und Fernwärme (+11,4). Dagegen waren Mineralölprodukte im vergangenen Monat billiger zu haben als ein Jahr zuvor: Leichtes Heizöl war um 30,5 Prozent günstiger zu haben als im Mai 2022, Kraftstoffe wie Benzin kosteten 14,2 Prozent weniger. Überdurchschnittlich verteuert haben sich im Mai wieder Nahrungsmittel: Hier lag die Rate bei 14,9 Prozent, nur eine leichte Abschwächung gegenüber dem April mit 17,2 Prozent. Teurer wurden vor allem Molkereiprodukte (+28,2 Prozent), Brot und Getreideerzeugnisse (+19,3 Prozent) sowie Fisch, Fischwaren und Meeresfrüchte (+19,0 Prozent). Bei Zucker, Marmelade, Honig und anderen Süßwaren legten die Preise im Schnitte um 17,9 Prozent zu. Gemüse wurde um 17,3 Prozent teurer. Hingegen waren Speisefette und Speiseöle um 7,1 Prozent günstiger, insbesondere durch den Preisrückgang bei Butter (-23,3 Prozent). 07.06.2023 Die Deutschen kaufen anders ein, um bei weiterhin steigenden Preisen zu sparen. mehr Auch ohne die Bereiche Energie und Nahrungsmittel lag die Teuerungsrate laut dem Statistischen Bundesamt im Mai bei 5,4 Prozent. Dies zeigt laut den Statistikern, dass auch in anderen Produktbereichen weiterhin ein Preisanstieg zu verzeichnen ist. Auch Dienstleistungen haben sich im abgelaufenen Monat verteuert: um im Schnitt 4,5 Prozent. Dämpfend hat sich hier offenbar die Einführung des 49 Euro teuren Deutschlandtickets ausgewirkt, so die Statistiker. Die kombinierten Tickets für Bahn, Bus und Ähnliches verbilligten sich um 22,9 Prozent im Vergleich zum Mai 2022. hintergrund 28.05.2023 Dass die Inflation so hoch ist, liegt stark an den gestiegenen Lebensmittelpreisen. mehr Für viele Bürgerinnen und Bürger bleiben die hohen Preise eine schwere Bürde. Die Verbraucherzentralen warnen vor anhaltenden Schwierigkeiten für viele Betroffene gerade unterer Einkommensschichten. \"Die Verbraucherkrise ist noch lange nicht vorbei\", sagte die Chefin des Bundesverbands (vzbv), Ramona Pop, der Nachrichtenagentur dpa. \"Finanzielle Sorgen zwingen die Menschen, in allen Bereichen des Alltags zu sparen: vom Energieverbrauch bis zum Reisen.\" Laut einer Umfrage im Auftrag des Verbands schränken sich aktuell 44 Prozent der Bundesbürger nach eigenen Angaben auch beim Kauf von Lebensmitteln ein. Im vergangenen Jahr waren es in der Umfrage 35 Prozent gewesen. Beim Energieverbrauch sparen demnach nach eigenem Bekunden nun 76 Prozent nach 78 Prozent vor einem Jahr. Besuche in Bars und Restaurants nannten 61 Prozent nach zuvor 53 Prozent. Bei Urlaub und Reisen sparen 56 Prozent nach zuvor 50 Prozent. Pop forderte, die Bundesregierung müsse dringend nachsteuern und für mehr finanzielle Sicherheit sorgen. hintergrund 07.06.2023 • 12:06 Uhr analyse 24.05.2023 • 12:24 Uhr Kommentar 14.06.2022 • 20:50 Uhr Analyse 02.03.2023 • 13:40 Uhr Video 13.06.2023 • 12:36 Uhr Video 13.06.2023 • 12:45 Uhr '},\n",
" {'id': '5f10a56a-37ee-40ed-941c-b98f35b63d38',\n",
" 'title': 'Nachfrage nach Solaranlagen stark gewachsen',\n",
" 'date': '2023-06-13T08:23:40.194+02:00',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/solarboom-auf-deutschen-daechern-100.html',\n",
" 'text': ' Hintergrund sind vor allem die hohen Energiepreise: Die Nachfrage nach Photovoltaik-Anlagen für private Wohnhäuser ist stark angestiegen - im ersten Quartal um 146 Prozent. Die Branche erwartet, dass das Wachstum weitergeht. Nach Angaben des Bundesverband Solarwirtschaft (BSW) wurden im ersten Quartal deutschlandweit 159.000 Photovoltaik-Anlagen für Privathäuser in Betrieb genommen. Das ist ein Zuwachs von 146 Prozent im Vergleich zum Vorjahreszeitraum. Laut dem Bundesverband dürfte damit die Nachfrage nach Solaranlagen in Deutschland in diesem Jahr zum siebten Mal in Folge prozentual zweistellig wachsen. In der Statistik des BSW werden neben Anlagen von privaten Hausbesitzern auch andere Investoren wie Bauern erfasst, die Solaranlagen auf landwirtschaftlichem Grund errichten lassen. Der Branchenverband hat die aktuellen Daten einen Tag von der Branchenmesse Intersolar veröffentlicht, die Mittwoch in München eröffnet wird und als ein wichtiger Treff für die Ökostrom-Branche gilt. Laut BSW-Hauptgeschäftsführer Carsten Körnig ist der aktuelle Solarboom auf mehrere Faktoren zurückzuführen. Einerseits sei der starke Anstieg der Energiepreise im vergangenen Jahr dafür verantwortlich. Zu anderen sieht Körnig auch eine Corona-Folgewirkung: \"Viele Hausbesitzer haben während der Pandemie viel in ihr Heim investiert.\" Auch die Nachfrage nach Solarspeichern steigt weiter deutlich. Die Anzahl der neuen Solarstromspeicher wird nach Einschätzung des Verbands bereits Ende Juni die Zahl der im vergangenen Jahr insgesamt installierten Solarbatterien überschreiten. Mit einer Photovoltaik-Anlage auf dem Dach oder am Balkon können Privathaushalte einerseits den Strombezug aus dem Stomnetz der Versorger reduzieren und damit Kosten sparen. Zum anderen wird überschüssiger Strom zumeist ins öffentliche Stromnetz eingespeist und über eine Einspeisevergütung an den Anlagenbesitzer vergütet. Eine Reihe von Änderungen im Erneuerbare Energien Gesetz (EEG) hat die eigene Photovoltaik-Anlage seit Jahresbeginn noch attraktiver gemacht. So sind neu installierte Anlagen von der Umsatzsteuer befreit. Die Einspeisevergütung für Neuanlagen wurde zudem erhöht. Die hohe Nachfrage privater Hauseigentümer zählt laut dem Branchenverband BSW zu den wichtigsten Treibern der Energiewende. \"Beinahe alle Zeichen stehen weiter auf Wachstum\" so Verbandschef Körnig, \"Solarsysteme sind preiswert, die Zahl der Fachkräfte steigt\". Auch die Liefersituation helle sich auf und Marktbarrieren würden zunehmend abgebaut. 05.06.2023 • 08:02 Uhr 05.05.2023 • 13:49 Uhr 29.05.2015 • 17:12 Uhr '}]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"news"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 54/54 [00:00<00:00, 670.01it/s]\n"
]
}
],
"source": [
"for article in tqdm(news):\n",
" news_article = News(**article)\n",
" if service.get_by_id(news_article.id) is None:\n",
" service.insert(news_article)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"News(id='abc', title='Hallo Welt', date='heute', text='what does the fox say')"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"service.get_by_id(\"abc\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### Handelsblatt RSS Feed"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"import requests\n",
"import xmltodict\n",
"from bs4 import BeautifulSoup\n",
"\n",
"\n",
"class HandelsblattRSS:\n",
" def __init__(self):\n",
" self.base_url = \"https://www.handelsblatt.com/contentexport/feed\"\n",
"\n",
" def get_news_for_category(self, category: str = \"unternehmen\") -> dict:\n",
" url = f\"{self.base_url}/{category}\"\n",
" result = requests.get(url=url)\n",
" if result.status_code == 200:\n",
" return xmltodict.parse(result.text)[\"rss\"][\"channel\"][\"item\"]\n",
" return None\n",
"\n",
" def get_news_details_text(self, url: str) -> dict:\n",
" content = requests.get(url)\n",
" soup = BeautifulSoup(content.text, features=\"html.parser\")\n",
"\n",
" return \" \".join(\n",
" [elem.text.replace(\"\\n\", \" \") for elem in soup.find_all(\"p\")][:]\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"handelsblatt = HandelsblattRSS()\n",
"\n",
"items = handelsblatt.get_news_for_category()\n",
"\n",
"from utils.mongodb.mongo import MongoConnector, MongoNewsService\n",
"\n",
"connector = MongoConnector(\n",
" hostname=\"trisnol.tech\",\n",
" database=\"transparenzregister\",\n",
" username=\"root\",\n",
" password=\"pR0R0v2e2\",\n",
")\n",
"\n",
"service = MongoNewsService(connector)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'2023-06-27T09:20:32+0200'"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from datetime import datetime\n",
"\n",
"d = items[0][\"pubDate\"]\n",
"datetime.strptime(d, \"%a, %d %b %Y %H:%M:%S %z\").strftime(\"%Y-%m-%dT%H:%M:%S%z\")"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 50/50 [01:04<00:00, 1.30s/it]\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>title</th>\n",
" <th>date</th>\n",
" <th>source_url</th>\n",
" <th>text</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>https://www.handelsblatt.com/29227224.html</td>\n",
" <td>Dieselskandal: Ex-Audi-Chef Rupert Stadler zu ...</td>\n",
" <td>2023-06-27T09:20:32+0200</td>\n",
" <td>https://www.handelsblatt.com/unternehmen/indus...</td>\n",
" <td>Der frühere Audi-Chef wurde wegen Betrugs zu e...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>https://www.handelsblatt.com/29226410.html</td>\n",
" <td>Luftfahrt: Größer, reichweitenstärker – aber n...</td>\n",
" <td>2023-06-27T16:28:53+0200</td>\n",
" <td>https://www.handelsblatt.com/unternehmen/hande...</td>\n",
" <td>Honda Aircraft arbeitet an einem Privatflugzeu...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>https://www.handelsblatt.com/29226522.html</td>\n",
" <td>Asien: Deutsche Unternehmen wetten auf den Ind...</td>\n",
" <td>2023-06-27T00:30:00+0200</td>\n",
" <td>https://www.handelsblatt.com/politik/internati...</td>\n",
" <td>Unternehmen gehen von einer positiven wirtscha...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>https://www.handelsblatt.com/29228524.html</td>\n",
" <td>Elektromobilität: US-Elektroautohersteller Lor...</td>\n",
" <td>2023-06-27T18:45:29+0200</td>\n",
" <td>https://www.handelsblatt.com/unternehmen/indus...</td>\n",
" <td>Das Start-up plante die Massenproduktion mit e...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>https://www.handelsblatt.com/29228272.html</td>\n",
" <td>US-Konzern: „Gewaltige Komplexität“ – BGH prüf...</td>\n",
" <td>2023-06-27T16:23:03+0200</td>\n",
" <td>https://www.handelsblatt.com/unternehmen/hande...</td>\n",
" <td>Das Kartellamt stufte den US-Konzern vergangen...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id \\\n",
"0 https://www.handelsblatt.com/29227224.html \n",
"1 https://www.handelsblatt.com/29226410.html \n",
"2 https://www.handelsblatt.com/29226522.html \n",
"3 https://www.handelsblatt.com/29228524.html \n",
"4 https://www.handelsblatt.com/29228272.html \n",
"\n",
" title \\\n",
"0 Dieselskandal: Ex-Audi-Chef Rupert Stadler zu ... \n",
"1 Luftfahrt: Größer, reichweitenstärker – aber n... \n",
"2 Asien: Deutsche Unternehmen wetten auf den Ind... \n",
"3 Elektromobilität: US-Elektroautohersteller Lor... \n",
"4 US-Konzern: „Gewaltige Komplexität“ – BGH prüf... \n",
"\n",
" date \\\n",
"0 2023-06-27T09:20:32+0200 \n",
"1 2023-06-27T16:28:53+0200 \n",
"2 2023-06-27T00:30:00+0200 \n",
"3 2023-06-27T18:45:29+0200 \n",
"4 2023-06-27T16:23:03+0200 \n",
"\n",
" source_url \\\n",
"0 https://www.handelsblatt.com/unternehmen/indus... \n",
"1 https://www.handelsblatt.com/unternehmen/hande... \n",
"2 https://www.handelsblatt.com/politik/internati... \n",
"3 https://www.handelsblatt.com/unternehmen/indus... \n",
"4 https://www.handelsblatt.com/unternehmen/hande... \n",
"\n",
" text \n",
"0 Der frühere Audi-Chef wurde wegen Betrugs zu e... \n",
"1 Honda Aircraft arbeitet an einem Privatflugzeu... \n",
"2 Unternehmen gehen von einer positiven wirtscha... \n",
"3 Das Start-up plante die Massenproduktion mit e... \n",
"4 Das Kartellamt stufte den US-Konzern vergangen... "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from datetime import datetime\n",
"from tqdm import tqdm\n",
"import pandas as pd\n",
"\n",
"\n",
"news = []\n",
"for news_article in tqdm(items):\n",
" info = {\n",
" \"id\": news_article[\"guid\"],\n",
" \"title\": news_article[\"title\"],\n",
" \"date\": datetime.strptime(\n",
" news_article[\"pubDate\"], \"%a, %d %b %Y %H:%M:%S %z\"\n",
" ).strftime(\"%Y-%m-%dT%H:%M:%S%z\"),\n",
" \"source_url\": news_article[\"link\"],\n",
" \"text\": handelsblatt.get_news_details_text(news_article[\"link\"]),\n",
" }\n",
" news.append(info)\n",
"\n",
"df = pd.DataFrame(news)\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 50/50 [00:00<00:00, 81.98it/s]\n"
]
}
],
"source": [
"from models.News import News\n",
"\n",
"for article in tqdm(news):\n",
" news_article = News(**article)\n",
" if service.get_by_id(news_article.id) is None:\n",
" service.insert(news_article)"
]
}
],
"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.10.7"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
+1
View File
@@ -0,0 +1 @@
pymongo
@@ -0,0 +1 @@
data/*
@@ -0,0 +1,192 @@
"""Unternehmensregister Scraping."""
import glob
import logging
import multiprocessing
import os
from pathlib import Path
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait
from tqdm import tqdm
logger = logging.getLogger()
def scrape(query: str, download_dir: list[str]):
"""Fetch results from Unternehmensregister for given query.
Args:
query (str): Search Query (RegEx supported)
download_dir (list[str]): Directory to place output files in
"""
download_path = os.path.join(str(Path.cwd()), *download_dir)
options = webdriver.ChromeOptions()
preferences = {
"profile.default_content_settings.popups": 0,
"safebrowsing.enabled": True,
"download": {
"directory_upgrade": True,
"prompt_for_download": False,
"extensions_to_open": "",
"default_directory": download_path,
},
}
options.add_argument("--headless=new")
options.add_experimental_option("prefs", preferences)
driver = webdriver.Chrome(options=options)
driver.get("https://www.unternehmensregister.de/ureg/")
# Accept Cookies
driver.find_elements(
By.XPATH, '//button[text()="Nur technisch notwendige Cookies akzeptieren"]'
)[0].click()
# Enter search query
driver.find_elements(By.ID, "globalSearchForm:extendedResearchCompanyName")[
0
].send_keys(query)
# Trigger search
driver.find_elements(By.ID, "globalSearchForm:btnExecuteSearchOld")[0].click()
# Wait for results
wait = WebDriverWait(driver, 15)
wait.until(
lambda driver: driver.current_url != "https://www.unternehmensregister.de/ureg/"
)
num_pages = int(
driver.find_element(By.XPATH, '//*[@class="page_count"]').text.split(" ")[0]
)
processed_companies = []
for _ in tqdm(range(num_pages)):
# Find all "Registerinformationen"
companies_tab = driver.find_elements(
By.LINK_TEXT, "Registerinformationen des Registergerichts"
)
company_names = [
elem.text
for elem in driver.find_elements(
By.XPATH, '//div[@class="company_result"]/span/b'
)
]
for index, company_link in enumerate(companies_tab):
company_name = company_names[index]
if company_name in processed_companies:
continue
# Go to intermediary page
company_link.click()
# Trigger next redirect
driver.find_element(By.LINK_TEXT, "Registerinformationen anzeigen").click()
# Trigger SI download
driver.find_element(By.LINK_TEXT, "SI").click()
# Show shopping cart
wait.until(
ec.visibility_of_element_located(
(By.LINK_TEXT, "Dokumentenkorb ansehen")
)
)
driver.find_element(By.LINK_TEXT, "Dokumentenkorb ansehen").click()
# Get document
elems = driver.find_elements(By.TAG_NAME, "input")
elems[-2].click()
wait.until(
ec.visibility_of_element_located((By.ID, "paymentFormOverview:btnNext"))
)
driver.find_element(By.ID, "paymentFormOverview:btnNext").click()
wait.until(
ec.visibility_of_element_located((By.LINK_TEXT, "Zum Dokumentenkorb"))
)
driver.find_element(By.LINK_TEXT, "Zum Dokumentenkorb").click()
num_files = get_num_files(download_path)
driver.find_element(By.CLASS_NAME, "download-wrapper").click()
try:
wait.until(wait_for_download_condition(download_path, num_files))
file_name = "".join(e for e in company_name if e.isalnum()) + ".xml"
rename_latest_file(
download_path,
file_name,
)
processed_companies.append(company_name)
except Exception:
logger.warning("Exception caught in Scraping")
finally:
for _ in range(6):
driver.back()
driver.find_element(By.XPATH, '//*[@class="fas fa-angle-right"]').click()
driver.close()
def wait_for_download_condition(
path: str, num_files: int, pattern: str = "*.xml"
) -> bool:
"""Selenium wait condition monitoring number of files in a dir.
Args:
path (str): Directory path
num_files (int): Current number of file
pattern (str, optional): File pattern. Defaults to "*.xml".
Returns:
bool: Current num file exceeded
"""
return len(glob.glob1(path, pattern)) > num_files
def get_num_files(path: str, pattern: str = "*.xml") -> int:
"""Get number of files in directory.
Args:
path (str): Directory to scan
pattern (str, optional): File pattern. Defaults to "*.xml".
Returns:
int: Number of files matching pattern
"""
return len(glob.glob1(path, pattern))
def rename_latest_file(path: str, filename: str, pattern: str = "*.xml"):
"""Rename file in dir with latest change date.
Args:
path (str): Dir to check
filename (str): Name of file
pattern (str, optional): File pattern. Defaults to "*.xml".
"""
list_of_files = [os.path.join(path, file) for file in glob.glob1(path, pattern)]
latest_download = max(list_of_files, key=os.path.getctime)
os.rename(latest_download, os.path.join(path, filename))
if __name__ == "__main__":
"""Main procedure"""
import pandas as pd
df_relevant_companies = pd.read_excel(
"./data/study_id42887_top-100-unternehmen-deutschland.xlsx",
sheet_name="Toplist",
skiprows=1,
)
df_relevant_companies = df_relevant_companies[df_relevant_companies["Name"].notna()]
batch_size = 5
pool = multiprocessing.Pool(processes=batch_size)
params = [
(query, ["data", "Unternehmensregister", "scraping", query.strip()])
for query in df_relevant_companies.Name
]
# Map the process_handler function to the parameter list using the Pool
pool.starmap(scrape, params)
# Close the Pool to prevent any more tasks from being submitted
pool.close()
# Wait for all the processes to complete
pool.join()
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,10 @@
ocrmypdf
pytesseract
opencv-python
pdf2image
bs4
selenium
xmltodict
tqdm
openpyxl
pandas
+28
View File
@@ -0,0 +1,28 @@
version: '3.8'
services:
mongodb:
image: mongo:6.0.6
container_name: mongodb
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: pR0R0v2e2
MONGO_INITDB_DATABASE: transparenzregister
ports:
- 27017:27017
volumes:
- mongodb_data:/data/db
mongo-express:
image: mongo-express:1.0.0-alpha
container_name: mongo-express
restart: unless-stopped
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_SERVER: mongodb
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: pR0R0v2e2
volumes:
mongodb_data:
+236
View File
@@ -0,0 +1,236 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2023-06-03T01:36:32.345509400Z",
"start_time": "2023-06-03T01:36:32.332130700Z"
}
},
"outputs": [],
"source": [
"from typing import Final\n",
"\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 1,
"outputs": [
{
"data": {
"text/plain": " Company 1 Connection Weight Company 2\n0 21 83 58\n1 37 88 86\n2 40 6 83\n3 60 35 2\n4 11 22 10\n.. ... ... ...\n695 62 37 11\n696 10 24 27\n697 97 40 55\n698 14 87 66\n699 50 55 82\n\n[693 rows x 3 columns]",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Company 1</th>\n <th>Connection Weight</th>\n <th>Company 2</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>21</td>\n <td>83</td>\n <td>58</td>\n </tr>\n <tr>\n <th>1</th>\n <td>37</td>\n <td>88</td>\n <td>86</td>\n </tr>\n <tr>\n <th>2</th>\n <td>40</td>\n <td>6</td>\n <td>83</td>\n </tr>\n <tr>\n <th>3</th>\n <td>60</td>\n <td>35</td>\n <td>2</td>\n </tr>\n <tr>\n <th>4</th>\n <td>11</td>\n <td>22</td>\n <td>10</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>695</th>\n <td>62</td>\n <td>37</td>\n <td>11</td>\n </tr>\n <tr>\n <th>696</th>\n <td>10</td>\n <td>24</td>\n <td>27</td>\n </tr>\n <tr>\n <th>697</th>\n <td>97</td>\n <td>40</td>\n <td>55</td>\n </tr>\n <tr>\n <th>698</th>\n <td>14</td>\n <td>87</td>\n <td>66</td>\n </tr>\n <tr>\n <th>699</th>\n <td>50</td>\n <td>55</td>\n <td>82</td>\n </tr>\n </tbody>\n</table>\n<p>693 rows × 3 columns</p>\n</div>"
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from typing import Final\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"number_of_entries = 100\n",
"number_of_contacts = 10\n",
"ids: Final = [_ for _ in range(number_of_entries)]\n",
"companies = pd.DataFrame(columns=[], index=pd.Index(ids, name=\"company_id\"))\n",
"companies\n",
"\n",
"\n",
"id1 = (\n",
" pd.Series(ids * number_of_contacts, name=\"Company 1\")\n",
" .sample(frac=0.7, random_state=42)\n",
" .reset_index(drop=True)\n",
")\n",
"id2 = (\n",
" pd.Series(ids * number_of_contacts, name=\"Company 2\")\n",
" .sample(frac=0.7, random_state=43)\n",
" .reset_index(drop=True)\n",
")\n",
"connections = (\n",
" pd.DataFrame(\n",
" [\n",
" id1,\n",
" pd.Series(\n",
" np.random.randint(0, 100, size=(max(len(id1), len(id2)))),\n",
" name=\"Connection Weight\",\n",
" ),\n",
" id2,\n",
" ]\n",
" )\n",
" .T.dropna()\n",
" .astype(int)\n",
")\n",
"connections = connections.loc[(connections[\"Company 1\"] != connections[\"Company 2\"])]\n",
"connections"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-06-03T10:15:42.647508100Z",
"start_time": "2023-06-03T10:15:40.656713900Z"
}
}
},
{
"cell_type": "code",
"execution_count": 69,
"outputs": [
{
"data": {
"text/plain": " Company 1 Connection Weight Company 2\n0 21 36 58\n1 37 59 86\n2 40 26 83\n3 60 21 2\n4 11 2 10\n.. ... ... ...\n695 62 45 11\n696 10 64 27\n697 97 24 55\n698 14 51 66\n699 50 93 82\n\n[693 rows x 3 columns]",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Company 1</th>\n <th>Connection Weight</th>\n <th>Company 2</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>21</td>\n <td>36</td>\n <td>58</td>\n </tr>\n <tr>\n <th>1</th>\n <td>37</td>\n <td>59</td>\n <td>86</td>\n </tr>\n <tr>\n <th>2</th>\n <td>40</td>\n <td>26</td>\n <td>83</td>\n </tr>\n <tr>\n <th>3</th>\n <td>60</td>\n <td>21</td>\n <td>2</td>\n </tr>\n <tr>\n <th>4</th>\n <td>11</td>\n <td>2</td>\n <td>10</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>695</th>\n <td>62</td>\n <td>45</td>\n <td>11</td>\n </tr>\n <tr>\n <th>696</th>\n <td>10</td>\n <td>64</td>\n <td>27</td>\n </tr>\n <tr>\n <th>697</th>\n <td>97</td>\n <td>24</td>\n <td>55</td>\n </tr>\n <tr>\n <th>698</th>\n <td>14</td>\n <td>51</td>\n <td>66</td>\n </tr>\n <tr>\n <th>699</th>\n <td>50</td>\n <td>93</td>\n <td>82</td>\n </tr>\n </tbody>\n</table>\n<p>693 rows × 3 columns</p>\n</div>"
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"id1 = (\n",
" pd.Series(ids * number_of_contacts, name=\"Company 1\")\n",
" .sample(frac=0.7, random_state=42)\n",
" .reset_index(drop=True)\n",
")\n",
"id2 = (\n",
" pd.Series(ids * number_of_contacts, name=\"Company 2\")\n",
" .sample(frac=0.7, random_state=43)\n",
" .reset_index(drop=True)\n",
")\n",
"connections = (\n",
" pd.DataFrame(\n",
" [\n",
" id1,\n",
" pd.Series(\n",
" np.random.randint(0, 100, size=(max(len(id1), len(id2)))),\n",
" name=\"Connection Weight\",\n",
" ),\n",
" id2,\n",
" ]\n",
" )\n",
" .T.dropna()\n",
" .astype(int)\n",
")\n",
"connections = connections.loc[(connections[\"Company 1\"] != connections[\"Company 2\"])]\n",
"connections"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-06-03T01:40:08.441882700Z",
"start_time": "2023-06-03T01:40:08.406876900Z"
}
}
},
{
"cell_type": "code",
"execution_count": 73,
"outputs": [
{
"data": {
"text/plain": " Company 2\nCompany 1 \n0 6\n1 6\n2 5\n3 9\n4 7\n... ...\n95 7\n96 8\n97 7\n98 6\n99 8\n\n[100 rows x 1 columns]",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Company 2</th>\n </tr>\n <tr>\n <th>Company 1</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>6</td>\n </tr>\n <tr>\n <th>1</th>\n <td>6</td>\n </tr>\n <tr>\n <th>2</th>\n <td>5</td>\n </tr>\n <tr>\n <th>3</th>\n <td>9</td>\n </tr>\n <tr>\n <th>4</th>\n <td>7</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n </tr>\n <tr>\n <th>95</th>\n <td>7</td>\n </tr>\n <tr>\n <th>96</th>\n <td>8</td>\n </tr>\n <tr>\n <th>97</th>\n <td>7</td>\n </tr>\n <tr>\n <th>98</th>\n <td>6</td>\n </tr>\n <tr>\n <th>99</th>\n <td>8</td>\n </tr>\n </tbody>\n</table>\n<p>100 rows × 1 columns</p>\n</div>"
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"connections[[\"Company 1\", \"Company 2\"]].groupby(\"Company 1\").count()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-06-03T01:44:23.433333600Z",
"start_time": "2023-06-03T01:44:23.424841700Z"
}
}
},
{
"cell_type": "code",
"execution_count": 72,
"outputs": [
{
"data": {
"text/plain": " Analysis-d0 Analysis-d1\ncompany_id \n0 1 6\n1 1 6\n2 1 5\n3 1 9\n4 1 7\n... ... ...\n95 1 7\n96 1 8\n97 1 7\n98 1 6\n99 1 8\n\n[100 rows x 2 columns]",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Analysis-d0</th>\n <th>Analysis-d1</th>\n </tr>\n <tr>\n <th>company_id</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>6</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1</td>\n <td>6</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1</td>\n <td>5</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1</td>\n <td>9</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1</td>\n <td>7</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>95</th>\n <td>1</td>\n <td>7</td>\n </tr>\n <tr>\n <th>96</th>\n <td>1</td>\n <td>8</td>\n </tr>\n <tr>\n <th>97</th>\n <td>1</td>\n <td>7</td>\n </tr>\n <tr>\n <th>98</th>\n <td>1</td>\n <td>6</td>\n </tr>\n <tr>\n <th>99</th>\n <td>1</td>\n <td>8</td>\n </tr>\n </tbody>\n</table>\n<p>100 rows × 2 columns</p>\n</div>"
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"companies[\"Analysis-d0\"] = 1\n",
"companies[\"Analysis-d1\"] = connections[[\"Company 1\", \"Company 2\"]].groupby(\"Company 1\").count()\n",
"connection_sum = connections.join(connections.set_index(\"Company 2\"), on=)\n",
"companies[\"Analysis-d1\"] = connections[[\"Company 1\", \"Company 2\"]].groupby(\"Company 1\").count()\n",
"# for tiers in range(5):\n",
"companies"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-06-03T01:43:25.341850700Z",
"start_time": "2023-06-03T01:43:25.318015500Z"
}
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"companies"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2023-06-03T01:36:32.382091200Z"
}
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"start_time": "2023-06-03T01:36:32.385093700Z"
}
}
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,316 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "3730fd2c",
"metadata": {},
"outputs": [],
"source": [
"import configurationFH as conf #hier wird die Configuration für das K8 cluster verwendet\n",
"import aki_prj23_transparenzregister.utils.mongo as mongo"
]
},
{
"cell_type": "markdown",
"id": "305f2cc1",
"metadata": {},
"source": [
"Für die ersten Experimente zum Lesen und Schreiben von Daten, bieten sich die Tutorials von PyMongo an:\n",
"\n",
"https://pymongo.readthedocs.io/en/stable/tutorial.html"
]
},
{
"cell_type": "markdown",
"id": "e7c41906",
"metadata": {},
"source": [
"# Erstellen eines Connection-Objekts\n",
"## utils.mongo.MongoConnection\n",
"Dem Connection Object werden die Credentials und Name der Datenbank übergeben, um ein Verbindungsobjekt zu erzeugen."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "efecf29d",
"metadata": {},
"outputs": [],
"source": [
"#Create Connection-Object\n",
"MongoObject=mongo.MongoConnection(conf.HOSTNAME,conf.DATABASE,conf.PORT,conf.USERNAME,conf.PASSWORD)"
]
},
{
"cell_type": "markdown",
"id": "6975afde",
"metadata": {},
"source": [
"# Verbindungsherstellung\n",
"## utils.mongo.MongoConnector\n",
"Das erzeugte Objekt stellt mit der pymongo-Bilbiothek eine Verbindung zur Datenbank her."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e755c39b",
"metadata": {},
"outputs": [],
"source": [
"#create Connection\n",
"MongoConnect=mongo.MongoConnector(MongoObject)"
]
},
{
"cell_type": "markdown",
"id": "97d3ef0c",
"metadata": {},
"source": [
"# Erzeuge eine Collection-Instanz\n",
"Jede Mongo Datenbank kann mehrere Collections beinhalten. Um auf diese unabhängigen Collections zuzugreifen, muss eine Instanz erstellt werden."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "34e19d26",
"metadata": {},
"outputs": [],
"source": [
"#create Object for news-collection\n",
"CollNews=MongoConnect.database[\"news\"]"
]
},
{
"cell_type": "markdown",
"id": "ed7a99f7",
"metadata": {},
"source": [
"# Auslesen der Newsartikel\n",
"\n",
"Mit der find()-Methode wird eine Anfrage an die Datenbank gesendet, welche alle Dokumente der gewählten Collection zurückgibt.\n",
"Der cursor verweist somit auf das erste Element der Collection.\n",
"Mit der find-Methode können auch einzelne Elemente der Collection gefunden werden, die definierte Attribute erfüllen.\n",
"\n",
"Der Code führt eine Abfrage in der MongoDB-Sammlung \"news\" durch, erhält die Ergebnisse in einem Cursor und wandelt den Cursor dann in eine Python-Liste um, um auf die Daten einfacher zugreifen zu können. Die Liste NewsList enthält nun alle Dokumente aus der \"news\"-Sammlung als Python-Listenobjekte. Jedes Element in der Liste entspricht einem Dokument aus der Datenbank."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "495d5448",
"metadata": {},
"outputs": [],
"source": [
"#get all documents from collection\n",
"cursor=CollNews.find({})\n",
"NewsList=list(cursor)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "192c5199",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"918"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(NewsList)"
]
},
{
"cell_type": "markdown",
"id": "3de93755",
"metadata": {},
"source": [
"# Auswählen eines Artikels"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "4978218a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'_id': 'tagesschau_90fb6340-abc5-40bb-85c3-3cfd98aa795a',\n",
" 'title': 'GDL kündigt neue Streiks an',\n",
" 'date': '2023-06-28T16:46:37.324+02:00',\n",
" 'text': ' Die Deutsche Bahn soll wieder bestreikt werden. Die Lokführergewerkschaft GDL hat neue Arbeitskämpfe angekündigt, nachdem die Tarifverhandlungen mit der Bahn gescheitert waren. Ab Freitag könnten die Arbeitsniederlegungen beginnen. Die Lokführergewerkschaft GDL hat erneute Streiks bei der Deutschen Bahn angekündigt. Zum genauen Zeitpunkt und Dauer machte GDL-Chef Claus Weselsky noch keine Angaben. Er teilte lediglich mit, dass am Mittwoch und Donnerstag nicht gestreikt werde. Die GDL werde den Streik \"rechtzeitig ankündigen\". Vor der Entscheidung der GDL-Spitzengremien für die Wiederaufnahme von\\xa0Streiks hatte Weselsky von rund 100 Stunden Arbeitskampf gesprochen. Das wären mehr als vier Tage. Die GDL hatte im Herbst bereits sechs Mal bundesweit zu Arbeitsniederlegungen aufgerufen und damit den Bahnverkehr stark eingeschränkt. Die\\xa0GDL warf der Bahn vor der Streik-Entscheidung vor, in der laufenden Tarifrunde auf Zeit zu spielen. Der Konzern habe in der jüngsten Runde am 11. Februar zuvor gemachte Zusagen zurückgenommen. Die Bahn habe die Chance, den Arbeitskampf noch abzuwenden, wenn sie ein Positionspapier der GDL doch noch unterzeichne, so Weselsky. Das bundeseigene Unternehmen hatte zuvor eine Unterschrift unter das Dokument abgelehnt. Damit erfüllte sie ein von der GDL gesetztes Ultimatum nicht. In dem Papier sind Grundpositionen der Gewerkschaft festgeschrieben. Aus Sicht der Bahn enthält es aber nicht den Sachstand, sondern Maximalforderungen der GDL. \"Es gibt keinerlei Veranlassung, der Verhandlungsstand ist eigentlich so, dass wir zu Ergebnissen kommen könnten\", sagte Bahn-Personalvorstand Ulrich Weber. \"Von daher halte ich diese angekündigten Streiks für unverhältnismäßig.\" Da sich die GDL noch nicht auf einen Termin und eine Dauer festgelegt hat, habe er die Hoffnung, den Arbeitskampf in Gesprächen mit der Gewerkschaft noch abwenden zu können. Neben verkürzten Arbeitszeiten und fünf Prozent mehr Geld verlangt die GDL auch für ihre Mitglieder außerhalb der Lokführer-Berufsgruppe eigenständige Tarifverträge. Diese waren bislang von der konkurrierenden DGB-Gewerkschaft\\xa0EVG ausgehandelt worden. Die Bahn will nach eigenem Bekunden in den parallel geführten Verhandlungen unterschiedliche Regelungen für ein und dieselbe Berufsgruppe verhindern. Die Eisenbahn- und Verkehrsgewerkschaft (EVG) will ebenfalls voneinander abweichende Tarifverträge vermeiden. Dieses Thema im Programm: v',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/gdl-bahn-streik-105.html',\n",
" 'company': '[Deutsche Bahn, GDL]'}"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NewsList[212]"
]
},
{
"cell_type": "markdown",
"id": "0ccba849",
"metadata": {},
"source": [
"# Erweitern des JSONS"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9904c9c3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'_id': 'tagesschau_90fb6340-abc5-40bb-85c3-3cfd98aa795a', 'title': 'GDL kündigt neue Streiks an', 'date': '2023-06-28T16:46:37.324+02:00', 'text': ' Die Deutsche Bahn soll wieder bestreikt werden. Die Lokführergewerkschaft GDL hat neue Arbeitskämpfe angekündigt, nachdem die Tarifverhandlungen mit der Bahn gescheitert waren. Ab Freitag könnten die Arbeitsniederlegungen beginnen. Die Lokführergewerkschaft GDL hat erneute Streiks bei der Deutschen Bahn angekündigt. Zum genauen Zeitpunkt und Dauer machte GDL-Chef Claus Weselsky noch keine Angaben. Er teilte lediglich mit, dass am Mittwoch und Donnerstag nicht gestreikt werde. Die GDL werde den Streik \"rechtzeitig ankündigen\". Vor der Entscheidung der GDL-Spitzengremien für die Wiederaufnahme von\\xa0Streiks hatte Weselsky von rund 100 Stunden Arbeitskampf gesprochen. Das wären mehr als vier Tage. Die GDL hatte im Herbst bereits sechs Mal bundesweit zu Arbeitsniederlegungen aufgerufen und damit den Bahnverkehr stark eingeschränkt. Die\\xa0GDL warf der Bahn vor der Streik-Entscheidung vor, in der laufenden Tarifrunde auf Zeit zu spielen. Der Konzern habe in der jüngsten Runde am 11. Februar zuvor gemachte Zusagen zurückgenommen. Die Bahn habe die Chance, den Arbeitskampf noch abzuwenden, wenn sie ein Positionspapier der GDL doch noch unterzeichne, so Weselsky. Das bundeseigene Unternehmen hatte zuvor eine Unterschrift unter das Dokument abgelehnt. Damit erfüllte sie ein von der GDL gesetztes Ultimatum nicht. In dem Papier sind Grundpositionen der Gewerkschaft festgeschrieben. Aus Sicht der Bahn enthält es aber nicht den Sachstand, sondern Maximalforderungen der GDL. \"Es gibt keinerlei Veranlassung, der Verhandlungsstand ist eigentlich so, dass wir zu Ergebnissen kommen könnten\", sagte Bahn-Personalvorstand Ulrich Weber. \"Von daher halte ich diese angekündigten Streiks für unverhältnismäßig.\" Da sich die GDL noch nicht auf einen Termin und eine Dauer festgelegt hat, habe er die Hoffnung, den Arbeitskampf in Gesprächen mit der Gewerkschaft noch abwenden zu können. Neben verkürzten Arbeitszeiten und fünf Prozent mehr Geld verlangt die GDL auch für ihre Mitglieder außerhalb der Lokführer-Berufsgruppe eigenständige Tarifverträge. Diese waren bislang von der konkurrierenden DGB-Gewerkschaft\\xa0EVG ausgehandelt worden. Die Bahn will nach eigenem Bekunden in den parallel geführten Verhandlungen unterschiedliche Regelungen für ein und dieselbe Berufsgruppe verhindern. Die Eisenbahn- und Verkehrsgewerkschaft (EVG) will ebenfalls voneinander abweichende Tarifverträge vermeiden. Dieses Thema im Programm: v', 'source_url': 'https://www.tagesschau.de/wirtschaft/gdl-bahn-streik-105.html', 'company': '[Deutsche Bahn, GDL]'}\n"
]
}
],
"source": [
"import json\n",
"\n",
"# select the news article\n",
"data=NewsList[212]\n",
"jsonID=data['_id']\n",
"\n",
"#add the new attribute \n",
"data['company'] = '[Deutsche Bahn, GDL]'\n",
"\n",
"print(data)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "4eef3942",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'tagesschau_90fb6340-abc5-40bb-85c3-3cfd98aa795a'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"jsonID"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "0752a77a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<pymongo.results.UpdateResult at 0x1f0048b26d0>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"CollNews.update_one(\n",
" {\"_id\": data[\"_id\"]},\n",
" {\"$set\": data},\n",
" upsert=True # Setze upsert=True, um das Dokument einzufügen, falls es noch nicht existiert\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "dae4966a",
"metadata": {},
"outputs": [],
"source": [
"#get all documents from collection\n",
"cursor=CollNews.find({})\n",
"NewsList=list(cursor)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "0412f2f8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'_id': 'tagesschau_90fb6340-abc5-40bb-85c3-3cfd98aa795a',\n",
" 'title': 'GDL kündigt neue Streiks an',\n",
" 'date': '2023-06-28T16:46:37.324+02:00',\n",
" 'text': ' Die Deutsche Bahn soll wieder bestreikt werden. Die Lokführergewerkschaft GDL hat neue Arbeitskämpfe angekündigt, nachdem die Tarifverhandlungen mit der Bahn gescheitert waren. Ab Freitag könnten die Arbeitsniederlegungen beginnen. Die Lokführergewerkschaft GDL hat erneute Streiks bei der Deutschen Bahn angekündigt. Zum genauen Zeitpunkt und Dauer machte GDL-Chef Claus Weselsky noch keine Angaben. Er teilte lediglich mit, dass am Mittwoch und Donnerstag nicht gestreikt werde. Die GDL werde den Streik \"rechtzeitig ankündigen\". Vor der Entscheidung der GDL-Spitzengremien für die Wiederaufnahme von\\xa0Streiks hatte Weselsky von rund 100 Stunden Arbeitskampf gesprochen. Das wären mehr als vier Tage. Die GDL hatte im Herbst bereits sechs Mal bundesweit zu Arbeitsniederlegungen aufgerufen und damit den Bahnverkehr stark eingeschränkt. Die\\xa0GDL warf der Bahn vor der Streik-Entscheidung vor, in der laufenden Tarifrunde auf Zeit zu spielen. Der Konzern habe in der jüngsten Runde am 11. Februar zuvor gemachte Zusagen zurückgenommen. Die Bahn habe die Chance, den Arbeitskampf noch abzuwenden, wenn sie ein Positionspapier der GDL doch noch unterzeichne, so Weselsky. Das bundeseigene Unternehmen hatte zuvor eine Unterschrift unter das Dokument abgelehnt. Damit erfüllte sie ein von der GDL gesetztes Ultimatum nicht. In dem Papier sind Grundpositionen der Gewerkschaft festgeschrieben. Aus Sicht der Bahn enthält es aber nicht den Sachstand, sondern Maximalforderungen der GDL. \"Es gibt keinerlei Veranlassung, der Verhandlungsstand ist eigentlich so, dass wir zu Ergebnissen kommen könnten\", sagte Bahn-Personalvorstand Ulrich Weber. \"Von daher halte ich diese angekündigten Streiks für unverhältnismäßig.\" Da sich die GDL noch nicht auf einen Termin und eine Dauer festgelegt hat, habe er die Hoffnung, den Arbeitskampf in Gesprächen mit der Gewerkschaft noch abwenden zu können. Neben verkürzten Arbeitszeiten und fünf Prozent mehr Geld verlangt die GDL auch für ihre Mitglieder außerhalb der Lokführer-Berufsgruppe eigenständige Tarifverträge. Diese waren bislang von der konkurrierenden DGB-Gewerkschaft\\xa0EVG ausgehandelt worden. Die Bahn will nach eigenem Bekunden in den parallel geführten Verhandlungen unterschiedliche Regelungen für ein und dieselbe Berufsgruppe verhindern. Die Eisenbahn- und Verkehrsgewerkschaft (EVG) will ebenfalls voneinander abweichende Tarifverträge vermeiden. Dieses Thema im Programm: v',\n",
" 'source_url': 'https://www.tagesschau.de/wirtschaft/gdl-bahn-streik-105.html',\n",
" 'company': '[Deutsche Bahn, GDL]'}"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"NewsList[212]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "426cdc6a",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
+5
View File
@@ -0,0 +1,5 @@
HOSTNAME="stagingdbtransparenzreg.ioappzs.mongodb.net"
DATABASE="transparenzregister"
PORT=None
USERNAME="db_user"
PASSWORD="secret_password"
+5
View File
@@ -0,0 +1,5 @@
HOSTNAME="172.17.38.210"
DATABASE="transparenzregister"
PORT=30217
USERNAME="root"
PASSWORD="secret_password"
+8
View File
@@ -1,5 +1,13 @@
# aki_prj23_transparenzregister
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![Actions status](https://github.com/astral-sh/ruff/workflows/CI/badge.svg)](https://github.com/astral-sh/ruff/actions)
[![Pytest](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/test-action.yaml/badge.svg?branch=main)](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/test-action.yaml)
[![Python-Lint-Push-Action](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/lint-actions.yaml/badge.svg)](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/lint-actions.yaml)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
## Contributions
See the [CONTRIBUTING.md](CONTRIBUTING.md) about how code should be formatted and what kind of rules we set ourselves.
[![bandit](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/bandit-action.yaml/badge.svg)](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/bandit-action.yaml)
+20
View File
@@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+88
View File
@@ -0,0 +1,88 @@
"""Python sphinx documentation build configuration."""
# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
import os
import sys
from importlib.metadata import metadata
from typing import Final
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
_DISTRIBUTION_METADATA = metadata("aki-prj23-transparenzregister")
__author__: Final[str] = _DISTRIBUTION_METADATA["Author"]
__email__: Final[str] = _DISTRIBUTION_METADATA["Author-email"]
__version__: Final[str] = _DISTRIBUTION_METADATA["Version"]
project: Final[str] = "transparenzregister"
copyright: Final[str] = "2023, AKI PRJ23" # noqa: A001
author: Final[str] = __author__
version: Final[str] = __version__
release: Final[str] = __version__
sys.path.insert(0, os.path.abspath("../src")) # Add the path to your Python package
sys.path.insert(0, os.path.abspath("../src/aki_prj23_transparenzregister"))
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
extensions: Final[list[str]] = [
"sphinx.ext.autodoc",
"nbsphinx",
"myst_parser",
"sphinx.ext.napoleon",
"sphinx_copybutton",
"sphinx_autodoc_typehints",
"sphinx.ext.intersphinx",
"sphinx.ext.autosectionlabel",
"sphinx.ext.viewcode",
"IPython.sphinxext.ipython_console_highlighting",
"sphinxcontrib.mermaid",
]
# templates_path : Final[list[str]] = ["_templates"]
exclude_patterns: Final[list[str]] = ["_build", "Thumbs.db", ".DS_Store", "templates"]
root_doc: Final[str] = "index"
# master_doc = "index"
autodoc_default_flags: Final[list[str]] = [
"members",
"inherited-members",
"show-inheritance",
]
autodoc_class_signature: Final[str] = "separated"
autodoc_default_options: Final[dict[str, bool]] = {
_: True for _ in autodoc_default_flags
}
autodoc_typehints: Final[str] = "signature"
simplify_optional_unions: Final[bool] = True
typehint_defaults: Final[str] = "comma"
source_suffix: Final[list[str]] = [".rst", ".md"]
mermaid_output_format: Final[str] = "raw"
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_theme: Final[str] = "sphinx_rtd_theme"
html_static_path: Final[list[str]] = ["_static"]
napoleon_google_docstring: Final[bool] = True
napoleon_numpy_docstring: Final[bool] = False
nbsphinx_execute = "never"
intersphinx_mapping: Final[dict[str, tuple[str, None]]] = {
"python": ("https://docs.python.org/3", None),
"pandas": ("https://pandas.pydata.org/docs/", None),
"numpy": ("https://numpy.org/doc/stable/", None),
"matplotlib": ("https://matplotlib.org/stable/", None),
"scikit-learn": ("https://scikit-learn.org/stable/", None),
"sphinx": ("https://docs.sympy.org/latest/", None),
}
+58
View File
@@ -0,0 +1,58 @@
.. Your Package Name documentation master file, created by Sphinx
Transparenzregister Dokumentation
=================================
This is the documentation for the AKI project group on the german transparenzregister and an Analysis there of.
.. toctree::
:maxdepth: 3
:caption: Project Management
project_management/*
.. toctree::
:glob:
:maxdepth: 1
:caption: Meeting Notes:
meeting-notes/*
.. toctree::
:glob:
:maxdepth: 3
:caption: Research
research/*
.. toctree::
:glob:
:maxdepth: 3
:caption: Seminararbeiten
seminararbeiten/*
.. toctree::
:glob:
:maxdepth: 1
:caption: UI Mock Ups
mock_up/*
.. toctree::
:glob:
:maxdepth: 0
:caption: Modules
modules
.. automodule:: aki_prj23_transparenzregister
:members:
:undoc-members:
:show-inheritance:
:inherited-members:
:autodoc_member_order:
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
+35
View File
@@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=_build
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
if "%1" == "" goto help
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd
@@ -0,0 +1,90 @@
# Weekly *5*: 09.06.2023
## Teilnehmer
- Prof. Arinir
- Tristan Nolde
- Tim Ronneburg
- Phillip Horstenkamp
- Kim Mesewinkel-Risse
- Sascha Zhu
- Sebastian Zeleny
## Themen
- Stepstone Projekt:
- Gewünscht wird ein initialer Austausch mit Stepstone
- Befürchtung ist, dass es zu einem Hinderniss 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 der Link zum Repo wird geteilt. Darüber hinaus werden keine Ressourcen zugesprochen.
- Vorstellung [vorheriger Absprache](https://github.com/orgs/fhswf/projects/17?pane=issue&itemId=29707639) und Feedback:
- Ändert sich der Scope - Nein
- NDA - Nein
- Veröffentlichung - maximal Impressionen
- 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
- Verflechtungsanalyse:
- Graphen Theorie
- Social Network Analyse
- Erweiterung über Graphen Theorie hinaus
- 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
- Visualiserung:
- Prinzipien
- Vorteile
- Bibliotheken für Umsetzung (Network X, PyViz, ...)
- 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? Kann dort gefiltert werden?
- Wenn nicht direkt am Graphen (der Darstellung) gefiltert werden kann, dann frühzeitig filtern, bevor der Graph gebaut wird
- Datenspeicherung
- Erste Integration von Visualisierung mit Datenspeicherung
- Vorstellung der "Datencluster"
- Stammdaten
- Stimmungsdaten
- Social Graph
- Zeitseriendaten
- Relationales DB Modell
- Fokus ebenfalls auf Abfrage der Daten für Folge-Projekte wie Visualiserung 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
- 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
- Text Mining
- Fokus auf Sentiment Analyse
- Vergleich verschiedener Lösungen und ML Modelle
- Abschließendes Fazit, welches Tool am besten geeignet ist
- Daten Extraktion
- Fokus auf Web Mining/Scraping im Rahmen des Transparenzregisters
- Datenquellen
- API
- Websites (HTML)
- PDF
- Datenextraktion aus diesen Quellen
- Orchestrierung mit Airflow
- DevOps
- Dependency Management in Python
- Standard requirements.txt
- pip-tools
- poetry
- Vorteile von Lintern
- GitHub
- Actions
- Security
- etc.
- Feedback:
- Git wird als State-of-the-Art angesehen und muss nicht näher erläutert werden
## Abgeleitete Action Items
| Action Item | Verantwortlicher | Deadline |
|-------------|------------------|-----------------|
| Folien hochladen | Projekt Team | vor Präsentationstermin |
| Absprache Abgrenzung von Verflechtungsanalyse und Visualisierung | Tim und Kim | nächster Abgleich |
| Deployment Plan aufstellen | Projekt Team | nach Seminararbeiten |
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

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

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

@@ -10,7 +10,7 @@
- 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?
@@ -40,8 +40,3 @@ Kennzahlen:
Best Practice:
- [Science Direct](https://www.sciencedirect.com/science/article/pii/S2666389920301896)
- [Toptal](https://www.toptal.com/designers/data-visualization/data-visualization-best-practices)
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@@ -0,0 +1,369 @@
<html>
<head>
<meta charset="utf-8">
<script>function neighbourhoodHighlight(params) {
// console.log("in nieghbourhoodhighlight");
allNodes = nodes.get({ returnType: "Object" });
// originalNodes = JSON.parse(JSON.stringify(allNodes));
// if something is selected:
if (params.nodes.length > 0) {
highlightActive = true;
var i, j;
var selectedNode = params.nodes[0];
var degrees = 2;
// mark all nodes as hard to read.
for (let nodeId in allNodes) {
// nodeColors[nodeId] = allNodes[nodeId].color;
allNodes[nodeId].color = "rgba(200,200,200,0.5)";
if (allNodes[nodeId].hiddenLabel === undefined) {
allNodes[nodeId].hiddenLabel = allNodes[nodeId].label;
allNodes[nodeId].label = undefined;
}
}
var connectedNodes = network.getConnectedNodes(selectedNode);
var allConnectedNodes = [];
// get the second degree nodes
for (i = 1; i < degrees; i++) {
for (j = 0; j < connectedNodes.length; j++) {
allConnectedNodes = allConnectedNodes.concat(
network.getConnectedNodes(connectedNodes[j])
);
}
}
// all second degree nodes get a different color and their label back
for (i = 0; i < allConnectedNodes.length; i++) {
// allNodes[allConnectedNodes[i]].color = "pink";
allNodes[allConnectedNodes[i]].color = "rgba(150,150,150,0.75)";
if (allNodes[allConnectedNodes[i]].hiddenLabel !== undefined) {
allNodes[allConnectedNodes[i]].label =
allNodes[allConnectedNodes[i]].hiddenLabel;
allNodes[allConnectedNodes[i]].hiddenLabel = undefined;
}
}
// all first degree nodes get their own color and their label back
for (i = 0; i < connectedNodes.length; i++) {
// allNodes[connectedNodes[i]].color = undefined;
allNodes[connectedNodes[i]].color = nodeColors[connectedNodes[i]];
if (allNodes[connectedNodes[i]].hiddenLabel !== undefined) {
allNodes[connectedNodes[i]].label =
allNodes[connectedNodes[i]].hiddenLabel;
allNodes[connectedNodes[i]].hiddenLabel = undefined;
}
}
// the main node gets its own color and its label back.
// allNodes[selectedNode].color = undefined;
allNodes[selectedNode].color = nodeColors[selectedNode];
if (allNodes[selectedNode].hiddenLabel !== undefined) {
allNodes[selectedNode].label = allNodes[selectedNode].hiddenLabel;
allNodes[selectedNode].hiddenLabel = undefined;
}
} else if (highlightActive === true) {
// console.log("highlightActive was true");
// reset all nodes
for (let nodeId in allNodes) {
// allNodes[nodeId].color = "purple";
allNodes[nodeId].color = nodeColors[nodeId];
// delete allNodes[nodeId].color;
if (allNodes[nodeId].hiddenLabel !== undefined) {
allNodes[nodeId].label = allNodes[nodeId].hiddenLabel;
allNodes[nodeId].hiddenLabel = undefined;
}
}
highlightActive = false;
}
// transform the object into an array
var updateArray = [];
if (params.nodes.length > 0) {
for (let nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
// console.log(allNodes[nodeId]);
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
} else {
// console.log("Nothing was selected");
for (let nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
// console.log(allNodes[nodeId]);
// allNodes[nodeId].color = {};
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
}
}
function filterHighlight(params) {
allNodes = nodes.get({ returnType: "Object" });
// if something is selected:
if (params.nodes.length > 0) {
filterActive = true;
let selectedNodes = params.nodes;
// hiding all nodes and saving the label
for (let nodeId in allNodes) {
allNodes[nodeId].hidden = true;
if (allNodes[nodeId].savedLabel === undefined) {
allNodes[nodeId].savedLabel = allNodes[nodeId].label;
allNodes[nodeId].label = undefined;
}
}
for (let i=0; i < selectedNodes.length; i++) {
allNodes[selectedNodes[i]].hidden = false;
if (allNodes[selectedNodes[i]].savedLabel !== undefined) {
allNodes[selectedNodes[i]].label = allNodes[selectedNodes[i]].savedLabel;
allNodes[selectedNodes[i]].savedLabel = undefined;
}
}
} else if (filterActive === true) {
// reset all nodes
for (let nodeId in allNodes) {
allNodes[nodeId].hidden = false;
if (allNodes[nodeId].savedLabel !== undefined) {
allNodes[nodeId].label = allNodes[nodeId].savedLabel;
allNodes[nodeId].savedLabel = undefined;
}
}
filterActive = false;
}
// transform the object into an array
var updateArray = [];
if (params.nodes.length > 0) {
for (let nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
} else {
for (let nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
}
}
function selectNode(nodes) {
network.selectNodes(nodes);
neighbourhoodHighlight({ nodes: nodes });
return nodes;
}
function selectNodes(nodes) {
network.selectNodes(nodes);
filterHighlight({nodes: nodes});
return nodes;
}
function highlightFilter(filter) {
let selectedNodes = []
let selectedProp = filter['property']
if (filter['item'] === 'node') {
let allNodes = nodes.get({ returnType: "Object" });
for (let nodeId in allNodes) {
if (allNodes[nodeId][selectedProp] && filter['value'].includes((allNodes[nodeId][selectedProp]).toString())) {
selectedNodes.push(nodeId)
}
}
}
else if (filter['item'] === 'edge'){
let allEdges = edges.get({returnType: 'object'});
// check if the selected property exists for selected edge and select the nodes connected to the edge
for (let edge in allEdges) {
if (allEdges[edge][selectedProp] && filter['value'].includes((allEdges[edge][selectedProp]).toString())) {
selectedNodes.push(allEdges[edge]['from'])
selectedNodes.push(allEdges[edge]['to'])
}
}
}
selectNodes(selectedNodes)
}</script>
<style>.vis-overlay{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-color-picker{background-color:#fff;border-radius:15px;box-shadow:0 0 10px 0 rgba(0,0,0,.5);display:none;height:444px;left:30px;margin-left:30px;margin-top:-140px;padding:10px;position:absolute;top:0;width:310px;z-index:1}div.vis-color-picker div.vis-arrow{left:5px;position:absolute;top:147px}div.vis-color-picker div.vis-arrow:after,div.vis-color-picker div.vis-arrow:before{border:solid transparent;content:" ";height:0;pointer-events:none;position:absolute;right:100%;top:50%;width:0}div.vis-color-picker div.vis-arrow:after{border-color:hsla(0,0%,100%,0) #fff hsla(0,0%,100%,0) hsla(0,0%,100%,0);border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{cursor:pointer;height:289px;position:absolute;width:289px}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(180deg,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);border:1px solid #fff;border-radius:15px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#4c4c4c",endColorstr="#131313",GradientType=0);height:15px;left:137px;position:absolute;top:137px;width:15px}div.vis-color-picker div.vis-new-color{left:159px;padding-right:2px;text-align:right}div.vis-color-picker div.vis-initial-color,div.vis-color-picker div.vis-new-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;color:rgba(0,0,0,.4);font-size:10px;height:20px;line-height:20px;position:absolute;top:380px;vertical-align:middle;width:140px}div.vis-color-picker div.vis-initial-color{left:10px;padding-left:2px;text-align:left}div.vis-color-picker div.vis-label{left:10px;position:absolute;width:300px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{background-color:#f7f7f7;border:2px solid #d9d9d9;border-radius:10px;cursor:pointer;height:25px;line-height:25px;position:absolute;text-align:center;top:410px;vertical-align:middle;width:68px}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{height:20px;width:290px}div.vis-configuration{display:block;float:left;font-size:12px;position:relative}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper:after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;display:block;left:10px;margin-top:20px;padding-left:5px;width:495px}div.vis-configuration.vis-config-button{background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;cursor:pointer;display:block;height:25px;left:10px;line-height:25px;margin-bottom:30px;margin-top:20px;padding-left:5px;vertical-align:middle;width:495px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;height:25px;line-height:25px;vertical-align:middle;width:495px}div.vis-configuration.vis-config-item.vis-config-s2{background-color:#f7f8fa;border-radius:3px;left:10px;padding-left:5px}div.vis-configuration.vis-config-item.vis-config-s3{background-color:#e4e9f0;border-radius:3px;left:20px;padding-left:5px}div.vis-configuration.vis-config-item.vis-config-s4{background-color:#cfd8e6;border-radius:3px;left:30px;padding-left:5px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{height:25px;line-height:25px;width:120px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.visLine truncated
<script>/**
* vis-network
* https://visjs.github.io/vis-network/
*
* A dynamic, browser-based visualization library.
*
* @version 9.1.2
* @date 2022-03-28T20:17:35.342Z
*
* @copyright (c) 2011-2017 Almende B.V, http://almende.com
* @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
*
* @license
* vis.js is dual licensed under both
*
* 1. The Apache 2.0 License
* http://www.apache.org/licenses/LICENSE-2.0
*
* and
*
* 2. The MIT License
* http://opensource.org/licenses/MIT
*
* vis.js may be distributed under either license.
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(function(t){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i=function(t){return t&&t.Math==Math&&t},n=i("object"==typeof globalThis&&globalThis)||i("object"==typeof window&&window)||i("object"==typeof self&&self)||i("object"==typeof e&&e)||function(){return this}()||Function("return this")(),o=function(t){try{return!!t()}catch(t){return!0}},r=!o((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})),s=r,a=Function.prototype,h=a.apply,l=a.call,d="object"==typeof Reflect&&Reflect.apply||(s?l.bind(h):function(){return l.apply(h,arguments)}),c=r,u=Function.prototype,f=u.bind,p=u.call,v=c&&f.bind(p,p),g=c?function(t){return t&&v(t)}:function(t){return t&&function(){return p.apply(t,arguments)}},y=function(t){return"function"==typeof t},m={},b=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),w=r,k=Function.prototype.call,_=w?k.bind(k):function(){return k.apply(k,arguments)},x={},E={}.propertyIsEnumerable,O=Object.getOwnPropertyDescriptor,C=O&&!E.call({1:2},1);x.f=C?function(t){var e=O(this,t);return!!e&&e.enumerable}:E;var S,T,M=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},P=g,D=P({}.toString),I=P("".slice),B=function(t){return I(D(t),8,-1)},z=g,N=o,F=B,A=n.Object,j=z("".split),R=N((function(){return!A("z").propertyIsEnumerable(0)}))?function(t){return"String"==F(t)?j(t,""):A(t)}:A,L=n.TypeError,H=function(t){if(null==t)throw L("Can't call method on "+t);return t},W=R,q=H,V=function(t){return W(q(t))},U=y,Y=function(t){return"object"==typeof t?null!==t:U(t)},X={},G=X,K=n,$=y,Z=function(t){return $(t)?t:void 0},Q=function(t,e){return arguments.length<2?Z(G[t])||Z(K[t]):G[t]&&G[t][e]||K[t]&&K[t][e]},J=g({}.isPrototypeOf),tt=Q("navigator","userAgent")||"",et=n,it=tt,nt=et.process,ot=et.Deno,rt=nt&&nt.versions||ot&&ot.version,st=rt&&rt.v8;st&&(T=(S=st.split("."))[0]>0&&S[0]<4?1:+(S[0]+S[1])),!T&&it&&(!(S=it.match(/Edge\/(\d+)/))||S[1]>=74)&&(S=it.match(/Chrome\/(\d+)/))&&(T=+S[1]);var at=T,ht=at,lt=o,dt=!!Object.getOwnPropertySymbols&&!lt((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&ht&&ht<41})),ct=dt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ut=Q,ft=y,pt=J,vt=ct,gt=n.Object,yt=vt?function(t){return"symbol"==typeof t}:function(t){var e=ut("Symbol");return ft(e)&&pt(e.prototype,gt(t))},mt=n.String,bt=function(t){try{return mt(t)}catch(t){return"Object"}},wt=y,kt=bt,_t=n.TypeError,xt=function(t){if(wt(t))return t;throw _t(kt(t)+" is not a function")},Et=xt,Ot=function(t,e){var i=t[e];return null==i?void 0:Et(i)},Ct=_,St=y,Tt=Y,Mt=n.TypeError,Pt={exports:{}},Dt=n,It=Object.defineProperty,Bt=function(t,e){try{It(Dt,t,{value:e,configurable:!0,writable:!0})}catch(i){Dt[t]=e}return e},zt="__core-js_shared__",Nt=n[zt]||Bt(zt,{}),Ft=Nt;(Pt.exports=function(t,e){return Ft[t]||(Ft[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.21.1",mode:"pure",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE",source:"https://github.com/zloirock/core-js"});var At=H,jt=n.Object,Rt=function(t){return jt(At(t))},Lt=Rt,Ht=g({}.hasOwnProperty),Wt=Object.hasOwn||function(t,e){return Ht(Lt(t),e)},qt=g,Vt=0,Ut=Math.random(),Yt=qt(1..toString),Xt=function(t){return"Symbol("+(void 0===t?"":t)+")_"+Yt(++Vt+Ut,36)},Gt=n,Kt=Pt.exports,$t=Wt,Zt=Xt,Qt=dt,Jt=ct,te=Kt("wks"),ee=Gt.Symbol,ie=ee&&ee.for,ne=Jt?ee:ee&&ee.withoutSetter||Zt,oe=function(t){if(!$t(te,t)||!Qt&&"string"!=typeof te[t]){var e="Symbol."+t;Qt&&$t(ee,t)?te[t]=ee[t]:te[t]=Jt&&ie?ie(e):ne(e)}return te[t]},re=_,se=Y,ae=yt,he=Ot,le=function(t,e){var i,n;if("string"===e&&St(i=t.toString)&&!Tt(n=Ct(i,t)))return n;if(St(i=t.valueOf)&&!Tt(n=Ct(i,t)))return n;if("string"!==e&&St(i=t.toString)&&!Tt(n=Ct(i,t)))return n;throw Mt("Can't convert object to primitive value")},de=oe,ce=n.TypeError,ue=de("toPrimitive"),fe=function(t,e){if(!se(t)||ae(t))return t;var i,n=he(t,ue);if(n){if(void 0===e&&(e="default"),i=re(n,t,e),!se(i)||ae(i))return i;throw ce("Can't convert object to primitive value")}return void 0===e&&(e="number"),le(t,e)},pe=yt,ve=function(t){var e=fe(t,"string");return pe(e)?e:e+""},ge=Y,ye=n.document,me=ge(ye)&&ge(ye.createElement),be=function(t){return me?ye.createElement(t):{}},we=be,ke=!b&&!o((function(){return 7!=Object.defineProperty(we("div"),"a",{get:function(){return 7}}).a})),_e=b,xe=_,Ee=x,Oe=M,Ce=V,Se=ve,Te=Wt,Me=ke,Pe=Object.getOwnPropertyDescriptor;m.f=_e?Pe:function(t,e){if(t=Ce(t),e=Se(e),Me)try{return Pe(t,e)}catch(t){}if(Te(t,e))return Oe(!xe(Ee.f,t,e),t[e])};var De=o,Ie=y,Be=/#|\.prototype\./,ze=functiLine truncated
//# sourceMappingURL=vis-network.min.js.map</script>
<center>
<h1></h1>
</center>
<!-- <link rel="stylesheet" href="../node_modules/vis/dist/vis.min.css" type="text/css" />
<script type="text/javascript" src="../node_modules/vis/dist/vis.js"> </script>-->
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6"
crossorigin="anonymous"
/>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-JEW9xMcG8R+pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf"
crossorigin="anonymous"
></script>
<center>
<h1></h1>
</center>
<style type="text/css">
#mynetwork {
width: 1000px;
height: 1000px;
background-color: #ffffff;
border: 1px solid lightgray;
position: relative;
float: left;
}
</style>
</head>
<body>
<div class="card" style="width: 100%">
<div id="mynetwork" class="card-body"></div>
</div>
<script type="text/javascript">
// initialize global variables.
var edges;
var nodes;
var allNodes;
var allEdges;
var nodeColors;
var originalNodes;
var network;
var container;
var options, data;
var filter = {
item : '',
property : '',
value : []
};
// This method is responsible for drawing the graph, returns the drawn network
function drawGraph() {
var container = document.getElementById('mynetwork');
// parsing and collecting nodes and edges from the python
nodes = new vis.DataSet([{"color": "#00509b", "id": 1, "label": 1, "shape": "dot", "size": 10}, {"color": "#00509b", "id": 4, "label": 4, "shape": "dot", "size": 10}, {"color": "#00509b", "id": 2, "label": 2, "shape": "dot", "size": 10}, {"color": "#00509b", "id": 3, "label": 3, "shape": "dot", "size": 10}, {"color": "#00509b", "id": 5, "label": 5, "shape": "dot", "size": 10}, {"color": "#00509b", "id": 6, "label": 6, "shape": "dot", "size": 10}, {"color": "#00509b", "id": 7, "label": 7, "shape": "dot", "size": 10}]);
edges = new vis.DataSet([{"from": 1, "to": 4, "width": 1}, {"from": 2, "to": 4, "width": 1}, {"from": 3, "to": 4, "width": 1}, {"from": 4, "to": 5, "width": 1}, {"from": 5, "to": 6, "width": 1}, {"from": 5, "to": 7, "width": 1}]);
nodeColors = {};
allNodes = nodes.get({ returnType: "Object" });
for (nodeId in allNodes) {
nodeColors[nodeId] = allNodes[nodeId].color;
}
allEdges = edges.get({ returnType: "Object" });
// adding nodes and edges to the graph
data = {nodes: nodes, edges: edges};
var options = {
"configure": {
"enabled": false
},
"edges": {
"color": {
"inherit": true
},
"smooth": {
"enabled": true,
"type": "dynamic"
}
},
"interaction": {
"dragNodes": true,
"hideEdgesOnDrag": false,
"hideNodesOnDrag": false
},
"physics": {
"enabled": true,
"stabilization": {
"enabled": true,
"fit": true,
"iterations": 1000,
"onlyDynamicEdges": false,
"updateInterval": 50
}
}
};
network = new vis.Network(container, data, options);
return network;
}
drawGraph();
</script>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

@@ -0,0 +1,377 @@
<html>
<head>
<meta charset="utf-8">
<script>function neighbourhoodHighlight(params) {
// console.log("in nieghbourhoodhighlight");
allNodes = nodes.get({ returnType: "Object" });
// originalNodes = JSON.parse(JSON.stringify(allNodes));
// if something is selected:
if (params.nodes.length > 0) {
highlightActive = true;
var i, j;
var selectedNode = params.nodes[0];
var degrees = 2;
// mark all nodes as hard to read.
for (let nodeId in allNodes) {
// nodeColors[nodeId] = allNodes[nodeId].color;
allNodes[nodeId].color = "rgba(200,200,200,0.5)";
if (allNodes[nodeId].hiddenLabel === undefined) {
allNodes[nodeId].hiddenLabel = allNodes[nodeId].label;
allNodes[nodeId].label = undefined;
}
}
var connectedNodes = network.getConnectedNodes(selectedNode);
var allConnectedNodes = [];
// get the second degree nodes
for (i = 1; i < degrees; i++) {
for (j = 0; j < connectedNodes.length; j++) {
allConnectedNodes = allConnectedNodes.concat(
network.getConnectedNodes(connectedNodes[j])
);
}
}
// all second degree nodes get a different color and their label back
for (i = 0; i < allConnectedNodes.length; i++) {
// allNodes[allConnectedNodes[i]].color = "pink";
allNodes[allConnectedNodes[i]].color = "rgba(150,150,150,0.75)";
if (allNodes[allConnectedNodes[i]].hiddenLabel !== undefined) {
allNodes[allConnectedNodes[i]].label =
allNodes[allConnectedNodes[i]].hiddenLabel;
allNodes[allConnectedNodes[i]].hiddenLabel = undefined;
}
}
// all first degree nodes get their own color and their label back
for (i = 0; i < connectedNodes.length; i++) {
// allNodes[connectedNodes[i]].color = undefined;
allNodes[connectedNodes[i]].color = nodeColors[connectedNodes[i]];
if (allNodes[connectedNodes[i]].hiddenLabel !== undefined) {
allNodes[connectedNodes[i]].label =
allNodes[connectedNodes[i]].hiddenLabel;
allNodes[connectedNodes[i]].hiddenLabel = undefined;
}
}
// the main node gets its own color and its label back.
// allNodes[selectedNode].color = undefined;
allNodes[selectedNode].color = nodeColors[selectedNode];
if (allNodes[selectedNode].hiddenLabel !== undefined) {
allNodes[selectedNode].label = allNodes[selectedNode].hiddenLabel;
allNodes[selectedNode].hiddenLabel = undefined;
}
} else if (highlightActive === true) {
// console.log("highlightActive was true");
// reset all nodes
for (let nodeId in allNodes) {
// allNodes[nodeId].color = "purple";
allNodes[nodeId].color = nodeColors[nodeId];
// delete allNodes[nodeId].color;
if (allNodes[nodeId].hiddenLabel !== undefined) {
allNodes[nodeId].label = allNodes[nodeId].hiddenLabel;
allNodes[nodeId].hiddenLabel = undefined;
}
}
highlightActive = false;
}
// transform the object into an array
var updateArray = [];
if (params.nodes.length > 0) {
for (let nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
// console.log(allNodes[nodeId]);
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
} else {
// console.log("Nothing was selected");
for (let nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
// console.log(allNodes[nodeId]);
// allNodes[nodeId].color = {};
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
}
}
function filterHighlight(params) {
allNodes = nodes.get({ returnType: "Object" });
// if something is selected:
if (params.nodes.length > 0) {
filterActive = true;
let selectedNodes = params.nodes;
// hiding all nodes and saving the label
for (let nodeId in allNodes) {
allNodes[nodeId].hidden = true;
if (allNodes[nodeId].savedLabel === undefined) {
allNodes[nodeId].savedLabel = allNodes[nodeId].label;
allNodes[nodeId].label = undefined;
}
}
for (let i=0; i < selectedNodes.length; i++) {
allNodes[selectedNodes[i]].hidden = false;
if (allNodes[selectedNodes[i]].savedLabel !== undefined) {
allNodes[selectedNodes[i]].label = allNodes[selectedNodes[i]].savedLabel;
allNodes[selectedNodes[i]].savedLabel = undefined;
}
}
} else if (filterActive === true) {
// reset all nodes
for (let nodeId in allNodes) {
allNodes[nodeId].hidden = false;
if (allNodes[nodeId].savedLabel !== undefined) {
allNodes[nodeId].label = allNodes[nodeId].savedLabel;
allNodes[nodeId].savedLabel = undefined;
}
}
filterActive = false;
}
// transform the object into an array
var updateArray = [];
if (params.nodes.length > 0) {
for (let nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
} else {
for (let nodeId in allNodes) {
if (allNodes.hasOwnProperty(nodeId)) {
updateArray.push(allNodes[nodeId]);
}
}
nodes.update(updateArray);
}
}
function selectNode(nodes) {
network.selectNodes(nodes);
neighbourhoodHighlight({ nodes: nodes });
return nodes;
}
function selectNodes(nodes) {
network.selectNodes(nodes);
filterHighlight({nodes: nodes});
return nodes;
}
function highlightFilter(filter) {
let selectedNodes = []
let selectedProp = filter['property']
if (filter['item'] === 'node') {
let allNodes = nodes.get({ returnType: "Object" });
for (let nodeId in allNodes) {
if (allNodes[nodeId][selectedProp] && filter['value'].includes((allNodes[nodeId][selectedProp]).toString())) {
selectedNodes.push(nodeId)
}
}
}
else if (filter['item'] === 'edge'){
let allEdges = edges.get({returnType: 'object'});
// check if the selected property exists for selected edge and select the nodes connected to the edge
for (let edge in allEdges) {
if (allEdges[edge][selectedProp] && filter['value'].includes((allEdges[edge][selectedProp]).toString())) {
selectedNodes.push(allEdges[edge]['from'])
selectedNodes.push(allEdges[edge]['to'])
}
}
}
selectNodes(selectedNodes)
}</script>
<style>.vis-overlay{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-color-picker{background-color:#fff;border-radius:15px;box-shadow:0 0 10px 0 rgba(0,0,0,.5);display:none;height:444px;left:30px;margin-left:30px;margin-top:-140px;padding:10px;position:absolute;top:0;width:310px;z-index:1}div.vis-color-picker div.vis-arrow{left:5px;position:absolute;top:147px}div.vis-color-picker div.vis-arrow:after,div.vis-color-picker div.vis-arrow:before{border:solid transparent;content:" ";height:0;pointer-events:none;position:absolute;right:100%;top:50%;width:0}div.vis-color-picker div.vis-arrow:after{border-color:hsla(0,0%,100%,0) #fff hsla(0,0%,100%,0) hsla(0,0%,100%,0);border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{cursor:pointer;height:289px;position:absolute;width:289px}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(180deg,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);border:1px solid #fff;border-radius:15px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#4c4c4c",endColorstr="#131313",GradientType=0);height:15px;left:137px;position:absolute;top:137px;width:15px}div.vis-color-picker div.vis-new-color{left:159px;padding-right:2px;text-align:right}div.vis-color-picker div.vis-initial-color,div.vis-color-picker div.vis-new-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;color:rgba(0,0,0,.4);font-size:10px;height:20px;line-height:20px;position:absolute;top:380px;vertical-align:middle;width:140px}div.vis-color-picker div.vis-initial-color{left:10px;padding-left:2px;text-align:left}div.vis-color-picker div.vis-label{left:10px;position:absolute;width:300px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{background-color:#f7f7f7;border:2px solid #d9d9d9;border-radius:10px;cursor:pointer;height:25px;line-height:25px;position:absolute;text-align:center;top:410px;vertical-align:middle;width:68px}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{height:20px;width:290px}div.vis-configuration{display:block;float:left;font-size:12px;position:relative}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper:after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;display:block;left:10px;margin-top:20px;padding-left:5px;width:495px}div.vis-configuration.vis-config-button{background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;cursor:pointer;display:block;height:25px;left:10px;line-height:25px;margin-bottom:30px;margin-top:20px;padding-left:5px;vertical-align:middle;width:495px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;height:25px;line-height:25px;vertical-align:middle;width:495px}div.vis-configuration.vis-config-item.vis-config-s2{background-color:#f7f8fa;border-radius:3px;left:10px;padding-left:5px}div.vis-configuration.vis-config-item.vis-config-s3{background-color:#e4e9f0;border-radius:3px;left:20px;padding-left:5px}div.vis-configuration.vis-config-item.vis-config-s4{background-color:#cfd8e6;border-radius:3px;left:30px;padding-left:5px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{height:25px;line-height:25px;width:120px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.visLine truncated
<script>/**
* vis-network
* https://visjs.github.io/vis-network/
*
* A dynamic, browser-based visualization library.
*
* @version 9.1.2
* @date 2022-03-28T20:17:35.342Z
*
* @copyright (c) 2011-2017 Almende B.V, http://almende.com
* @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
*
* @license
* vis.js is dual licensed under both
*
* 1. The Apache 2.0 License
* http://www.apache.org/licenses/LICENSE-2.0
*
* and
*
* 2. The MIT License
* http://opensource.org/licenses/MIT
*
* vis.js may be distributed under either license.
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(function(t){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i=function(t){return t&&t.Math==Math&&t},n=i("object"==typeof globalThis&&globalThis)||i("object"==typeof window&&window)||i("object"==typeof self&&self)||i("object"==typeof e&&e)||function(){return this}()||Function("return this")(),o=function(t){try{return!!t()}catch(t){return!0}},r=!o((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})),s=r,a=Function.prototype,h=a.apply,l=a.call,d="object"==typeof Reflect&&Reflect.apply||(s?l.bind(h):function(){return l.apply(h,arguments)}),c=r,u=Function.prototype,f=u.bind,p=u.call,v=c&&f.bind(p,p),g=c?function(t){return t&&v(t)}:function(t){return t&&function(){return p.apply(t,arguments)}},y=function(t){return"function"==typeof t},m={},b=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),w=r,k=Function.prototype.call,_=w?k.bind(k):function(){return k.apply(k,arguments)},x={},E={}.propertyIsEnumerable,O=Object.getOwnPropertyDescriptor,C=O&&!E.call({1:2},1);x.f=C?function(t){var e=O(this,t);return!!e&&e.enumerable}:E;var S,T,M=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},P=g,D=P({}.toString),I=P("".slice),B=function(t){return I(D(t),8,-1)},z=g,N=o,F=B,A=n.Object,j=z("".split),R=N((function(){return!A("z").propertyIsEnumerable(0)}))?function(t){return"String"==F(t)?j(t,""):A(t)}:A,L=n.TypeError,H=function(t){if(null==t)throw L("Can't call method on "+t);return t},W=R,q=H,V=function(t){return W(q(t))},U=y,Y=function(t){return"object"==typeof t?null!==t:U(t)},X={},G=X,K=n,$=y,Z=function(t){return $(t)?t:void 0},Q=function(t,e){return arguments.length<2?Z(G[t])||Z(K[t]):G[t]&&G[t][e]||K[t]&&K[t][e]},J=g({}.isPrototypeOf),tt=Q("navigator","userAgent")||"",et=n,it=tt,nt=et.process,ot=et.Deno,rt=nt&&nt.versions||ot&&ot.version,st=rt&&rt.v8;st&&(T=(S=st.split("."))[0]>0&&S[0]<4?1:+(S[0]+S[1])),!T&&it&&(!(S=it.match(/Edge\/(\d+)/))||S[1]>=74)&&(S=it.match(/Chrome\/(\d+)/))&&(T=+S[1]);var at=T,ht=at,lt=o,dt=!!Object.getOwnPropertySymbols&&!lt((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&ht&&ht<41})),ct=dt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,ut=Q,ft=y,pt=J,vt=ct,gt=n.Object,yt=vt?function(t){return"symbol"==typeof t}:function(t){var e=ut("Symbol");return ft(e)&&pt(e.prototype,gt(t))},mt=n.String,bt=function(t){try{return mt(t)}catch(t){return"Object"}},wt=y,kt=bt,_t=n.TypeError,xt=function(t){if(wt(t))return t;throw _t(kt(t)+" is not a function")},Et=xt,Ot=function(t,e){var i=t[e];return null==i?void 0:Et(i)},Ct=_,St=y,Tt=Y,Mt=n.TypeError,Pt={exports:{}},Dt=n,It=Object.defineProperty,Bt=function(t,e){try{It(Dt,t,{value:e,configurable:!0,writable:!0})}catch(i){Dt[t]=e}return e},zt="__core-js_shared__",Nt=n[zt]||Bt(zt,{}),Ft=Nt;(Pt.exports=function(t,e){return Ft[t]||(Ft[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.21.1",mode:"pure",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.21.1/LICENSE",source:"https://github.com/zloirock/core-js"});var At=H,jt=n.Object,Rt=function(t){return jt(At(t))},Lt=Rt,Ht=g({}.hasOwnProperty),Wt=Object.hasOwn||function(t,e){return Ht(Lt(t),e)},qt=g,Vt=0,Ut=Math.random(),Yt=qt(1..toString),Xt=function(t){return"Symbol("+(void 0===t?"":t)+")_"+Yt(++Vt+Ut,36)},Gt=n,Kt=Pt.exports,$t=Wt,Zt=Xt,Qt=dt,Jt=ct,te=Kt("wks"),ee=Gt.Symbol,ie=ee&&ee.for,ne=Jt?ee:ee&&ee.withoutSetter||Zt,oe=function(t){if(!$t(te,t)||!Qt&&"string"!=typeof te[t]){var e="Symbol."+t;Qt&&$t(ee,t)?te[t]=ee[t]:te[t]=Jt&&ie?ie(e):ne(e)}return te[t]},re=_,se=Y,ae=yt,he=Ot,le=function(t,e){var i,n;if("string"===e&&St(i=t.toString)&&!Tt(n=Ct(i,t)))return n;if(St(i=t.valueOf)&&!Tt(n=Ct(i,t)))return n;if("string"!==e&&St(i=t.toString)&&!Tt(n=Ct(i,t)))return n;throw Mt("Can't convert object to primitive value")},de=oe,ce=n.TypeError,ue=de("toPrimitive"),fe=function(t,e){if(!se(t)||ae(t))return t;var i,n=he(t,ue);if(n){if(void 0===e&&(e="default"),i=re(n,t,e),!se(i)||ae(i))return i;throw ce("Can't convert object to primitive value")}return void 0===e&&(e="number"),le(t,e)},pe=yt,ve=function(t){var e=fe(t,"string");return pe(e)?e:e+""},ge=Y,ye=n.document,me=ge(ye)&&ge(ye.createElement),be=function(t){return me?ye.createElement(t):{}},we=be,ke=!b&&!o((function(){return 7!=Object.defineProperty(we("div"),"a",{get:function(){return 7}}).a})),_e=b,xe=_,Ee=x,Oe=M,Ce=V,Se=ve,Te=Wt,Me=ke,Pe=Object.getOwnPropertyDescriptor;m.f=_e?Pe:function(t,e){if(t=Ce(t),e=Se(e),Me)try{return Pe(t,e)}catch(t){}if(Te(t,e))return Oe(!xe(Ee.f,t,e),t[e])};var De=o,Ie=y,Be=/#|\.prototype\./,ze=functiLine truncated
//# sourceMappingURL=vis-network.min.js.map</script>
<center>
<h1></h1>
</center>
<!-- <link rel="stylesheet" href="../node_modules/vis/dist/vis.min.css" type="text/css" />
<script type="text/javascript" src="../node_modules/vis/dist/vis.js"> </script>-->
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6"
crossorigin="anonymous"
/>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-JEW9xMcG8R+pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf"
crossorigin="anonymous"
></script>
<center>
<h1></h1>
</center>
<style type="text/css">
#mynetwork {
width: 1000px;
height: 1000px;
background-color: #ffffff;
border: 1px solid lightgray;
position: relative;
float: left;
}
</style>
</head>
<body>
<div class="card" style="width: 100%">
<div id="mynetwork" class="card-body"></div>
</div>
<script type="text/javascript">
// initialize global variables.
var edges;
var nodes;
var allNodes;
var allEdges;
var nodeColors;
var originalNodes;
var network;
var container;
var options, data;
var filter = {
item : '',
property : '',
value : []
};
// This method is responsible for drawing the graph, returns the drawn network
function drawGraph() {
var container = document.getElementById('mynetwork');
// parsing and collecting nodes and edges from the python
nodes = new vis.DataSet([{"branche": "Branche 1", "color": "#87CEEB", "id": 1, "label": "Firma 1", "land": "Land 1", "shape": "dot", "size": 20, "title": "Firma 1\nAnzahl Verbindungen: 3"}, {"branche": "Branche 1", "color": "#87CEEB", "id": 2, "label": "Firma 2", "land": "Land 2", "shape": "dot", "size": 30, "title": "Firma 2\nAnzahl Verbindungen: 5"}, {"branche": "Branche 1", "color": "#87CEEB", "id": 3, "label": "Firma 3", "land": "Land 3", "shape": "dot", "size": 15, "title": "Firma 3\nAnzahl Verbindungen: 2"}, {"branche": "Branche 2", "color": "#0f4c81", "id": 6, "label": "Firma 6", "land": "Land 3", "shape": "dot", "size": 25, "title": "Firma 6\nAnzahl Verbindungen: 4"}, {"branche": "Branche 2", "color": "#0f4c81", "id": 5, "label": "Firma 5", "land": "Land 1", "shape": "dot", "size": 15, "title": "Firma 5\nAnzahl Verbindungen: 2"}, {"branche": "Branche 2", "color": "#0f4c81", "id": 4, "label": "Firma 4", "land": "Land 4", "shape": "dot", "size": 10, "title": "Firma 4\nAnzahl Verbindungen: 1"}, {"branche": "Branche 3", "color": "#B2FFFF", "id": 7, "label": "Firma 7", "land": "Land 3", "shape": "dot", "size": 10, "title": "Firma 7\nAnzahl Verbindungen: 1"}, {"branche": "Branche 3", "color": "#B2FFFF", "id": 8, "label": "Firma 8", "land": "Land 2", "shape": "dot", "size": 15, "title": "Firma 8\nAnzahl Verbindungen: 2"}, {"branche": "Branche 4", "color": "#191970", "id": 9, "label": "Firma 9", "land": "Land 1", "shape": "dot", "size": 15, "title": "Firma 9\nAnzahl Verbindungen: 2"}, {"branche": "Branche 4", "color": "#191970", "id": 10, "label": "Firma 10", "land": "Land 4", "shape": "dot", "size": 15, "title": "Firma 10\nAnzahl Verbindungen: 2"}]);
edges = new vis.DataSet([{"arrows": "false", "from": 1, "label": "beziehung1", "to": 2, "width": 1}, {"arrows": "false", "from": 1, "label": "beziehung3", "to": 3, "width": 1}, {"arrows": "false", "from": 1, "label": "beziehung2", "to": 6, "width": 1}, {"arrows": "false", "from": 2, "label": "beziehung2", "to": 5, "width": 1}, {"arrows": "false", "from": 2, "label": "beziehung4", "to": 5, "width": 1}, {"arrows": "false", "from": 2, "label": "beziehung3", "to": 4, "width": 1}, {"arrows": "false", "from": 2, "label": "beziehung4", "to": 6, "width": 1}, {"arrows": "false", "from": 3, "label": "beziehung2", "to": 7, "width": 1}, {"arrows": "false", "from": 6, "label": "beziehung1", "to": 8, "width": 1}, {"arrows": "false", "from": 6, "label": "beziehung1", "to": 9, "width": 1}, {"arrows": "false", "from": 8, "label": "beziehung4", "to": 10, "width": 1}, {"arrows": "false", "from": 9, "label": "beziehung3", "to": 10, "width": 1}]);
nodeColors = {};
allNodes = nodes.get({ returnType: "Object" });
for (nodeId in allNodes) {
nodeColors[nodeId] = allNodes[nodeId].color;
}
allEdges = edges.get({ returnType: "Object" });
// adding nodes and edges to the graph
data = {nodes: nodes, edges: edges};
var options = {
"configure": {
"enabled": false
},
"edges": {
"color": "grey",
"smooth": {
"enabled": true,
"type": "dynamic"
}
},
"interaction": {
"dragNodes": true,
"hideEdgesOnDrag": false,
"hideNodesOnDrag": false
},
"physics": {
"barnesHut": {
"avoidOverlap": 0,
"centralGravity": 0.3,
"damping": 0.09,
"gravitationalConstant": -8000,
"springConstant": 0.1,
"springLength": 200
},
"enabled": true,
"stabilization": {
"enabled": true,
"fit": true,
"iterations": 1000,
"onlyDynamicEdges": false,
"updateInterval": 50
}
}
};
network = new vis.Network(container, data, options);
network.on("click", neighbourhoodHighlight);
return network;
}
drawGraph();
</script>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

@@ -0,0 +1,457 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Visualisierung eines Netzwerks\n",
"\n",
"In diesem Beispiel wird ein Graph mit networkx erstellt und anschließend mit pyvis visualisiert. Der Graph basiert auf Beispieldaten. Es werden erste Optionen in den Bereichen Größe, Farbe und Form der Knoten und Mouse-Over-Texte gezeigt.\n",
"\n",
"Der Code basiert auf den Dokumentationen der beiden Bibliotheken:\n",
"- [Networkx Dokumentation](https://networkx.org/documentation/stable/)\n",
"- [Pyvis Dokumentation](https://pyvis.readthedocs.io/en/latest/index.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Installation der Bibliotheken\n",
"\n",
"Networkx ist eine Python Bibliothek zur Erstellung und Analyse von Netzwerken. Pyvis ist eine Python Bibliothek zur interaktiven Visualisierung von Netzwerkgraphen. Beide können mit `pip` installiert werden. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: networkx in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (2.6.3)\n",
"Requirement already satisfied: pyvis in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (0.3.2)\n",
"Requirement already satisfied: jinja2>=2.9.6 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from pyvis) (2.11.3)\n",
"Requirement already satisfied: networkx>=1.11 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from pyvis) (2.6.3)\n",
"Requirement already satisfied: ipython>=5.3.0 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from pyvis) (7.29.0)\n",
"Requirement already satisfied: jsonpickle>=1.4.1 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from pyvis) (3.0.1)\n",
"Requirement already satisfied: backcall in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (0.2.0)\n",
"Requirement already satisfied: pexpect>4.3 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (4.8.0)\n",
"Requirement already satisfied: jedi>=0.16 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (0.18.0)\n",
"Requirement already satisfied: traitlets>=4.2 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (5.1.0)\n",
"Requirement already satisfied: decorator in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (5.1.0)\n",
"Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (3.0.20)\n",
"Requirement already satisfied: matplotlib-inline in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (0.1.2)\n",
"Requirement already satisfied: appnope in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (0.1.2)\n",
"Requirement already satisfied: pygments in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (2.10.0)\n",
"Requirement already satisfied: pickleshare in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (0.7.5)\n",
"Requirement already satisfied: setuptools>=18.5 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.3.0->pyvis) (58.0.4)\n",
"Requirement already satisfied: parso<0.9.0,>=0.8.0 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from jedi>=0.16->ipython>=5.3.0->pyvis) (0.8.2)\n",
"Requirement already satisfied: MarkupSafe>=0.23 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from jinja2>=2.9.6->pyvis) (1.1.1)\n",
"Requirement already satisfied: ptyprocess>=0.5 in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from pexpect>4.3->ipython>=5.3.0->pyvis) (0.7.0)\n",
"Requirement already satisfied: wcwidth in /Users/kim/opt/anaconda3/lib/python3.9/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=5.3.0->pyvis) (0.2.5)\n"
]
}
],
"source": [
"# install networkx and pyvis using pip\n",
"!pip install networkx\n",
"!pip install pyvis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Erstellen eines Netzwerks mit Networkx\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import networkx as nx\n",
"\n",
"# create graph and use MultiGraph for nodes with multiple edges\n",
"G = nx.MultiGraph()\n",
"\n",
"# create list of nodes with attributes as a dictionary\n",
"nodes = [(1, {'label': 'Firma 1', 'branche': 'Branche 1', 'land': 'Land 1'}), \n",
" (2, {'label': 'Firma 2', 'branche': 'Branche 1', 'land': 'Land 2'}),\n",
" (3, {'label': 'Firma 3', 'branche': 'Branche 1', 'land': 'Land 3'}),\n",
" (4, {'label': 'Firma 4', 'branche': 'Branche 2', 'land': 'Land 4'}),\n",
" (5, {'label': 'Firma 5', 'branche': 'Branche 2', 'land': 'Land 1'}),\n",
" (6, {'label': 'Firma 6', 'branche': 'Branche 2', 'land': 'Land 3'}),\n",
" (7, {'label': 'Firma 7', 'branche': 'Branche 3', 'land': 'Land 3'}),\n",
" (8, {'label': 'Firma 8', 'branche': 'Branche 3', 'land': 'Land 2'}),\n",
" (9, {'label': 'Firma 9', 'branche': 'Branche 4', 'land': 'Land 1'}),\n",
" (10, {'label': 'Firma 10', 'branche': 'Branche 4', 'land': 'Land 4'}),\n",
" ]\n",
"\n",
"# create list of edges with attributes as a dictionary\n",
"edges = [\n",
" (1, 2, {'label': 'beziehung1'}), \n",
" (5, 2, {'label': 'beziehung2'}), \n",
" (1, 3, {'label': 'beziehung3'}), \n",
" (2, 4, {'label': 'beziehung3'}), \n",
" (2, 6, {'label': 'beziehung4'}), \n",
" (2, 5, {'label': 'beziehung4'}),\n",
" (8, 10, {'label': 'beziehung4'}),\n",
" (9, 10, {'label': 'beziehung3'}), \n",
" (3, 7, {'label': 'beziehung2'}), \n",
" (6, 8, {'label': 'beziehung1'}), \n",
" (6, 9, {'label': 'beziehung1'}), \n",
" (1, 6, {'label': 'beziehung2'})\n",
" ]\n",
"\n",
"# add nodes to the graph\n",
"G.add_nodes_from(nodes)\n",
"\n",
"# add edges to the graph, to hide arrow heads of the edges use option arrows = 'false'\n",
"G.add_edges_from(edges, arrows = 'false')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Information für das Mouse-Over hinterlegen\n",
"\n",
"Anforderung: Wenn man mit der Maus über einzelne Knoten fährt, sollten weitere Informationen sichtbar werden\n",
"\n",
"Aktuelle Umsetzung: 'title' wird als String für jeden Knoten gesetzt aus Name der Firma und Anzahl der Verbindungen.\n",
"\n",
"Erweiterungen/offene Fragen: Weitere Stammdaten-Informationen sind möglich, sofern sie zur Verfügung stehen."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"for node in G.nodes:\n",
" G.nodes[node]['title'] = G.nodes[node]['label'] + '\\n' + 'Anzahl Verbindungen: ' + str(G.degree[node])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ändern der Größe der Knoten\n",
"\n",
"Anforderung: Größe in Abhängigkeit bestimmter Attribute ändern.\n",
"\n",
"Aktuelle Umsetzung: Setzen der Größe anhand der Anzahl der Kanten.\n",
"\n",
"Erweiterungen/offene Fragen: Weitere Attribute wie EBIT, Umsatz sollten möglich sein. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Erster Test zum Bestimmen der Verbindungen und der Anzahl"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2, 3, 6]\n",
"3\n"
]
}
],
"source": [
"# get all nodes connected to node 1\n",
"print(list(G.adj[1]))\n",
"\n",
"# get number of nodes connected to node 1\n",
"print(G.degree[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Skalieren der Größe "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# scaling the size of the nodes by 5*degree\n",
"scale = 5 \n",
"\n",
"# getting all nodes and their number of connections\n",
"d = dict(G.degree)\n",
"\n",
"# updating dict\n",
"d.update((x, scale*(y+1)) for x, y in d.items())\n",
"\n",
"# setting size attribute according to created dictionary\n",
"nx.set_node_attributes(G,d,'size')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualisierung mit Pyvis\n",
"\n",
"Beim Anlegen des Netzwerks kann mit `neighborhood_highlight=True` bereits aktiviert werden, dass ein Klick auf einen Knoten benachbarte Knoten hervorhebt"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from pyvis.network import Network\n",
"\n",
"# create network, 'directed = true' allows multiple edges between nodes\n",
"nt = Network('1000px', '1000px', neighborhood_highlight=True, notebook=True, cdn_resources='in_line', directed=True)\n",
"\n",
"# populates the nodes and edges data structures\n",
"nt.from_nx(G)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Erste Tests zum Ändern der Art und Farbe eines einzelnen Knotens\n",
"\n",
"Change shape of one node:\n",
"`nt.nodes[1]['shape'] = 'square'`\n",
"\n",
"Change color of one node:\n",
"`nt.nodes[1]['color'] = 'red'`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ändern der Farbe aller Knoten \n",
"\n",
"Anforderung: Ändere die Farbe basierend auf den Attributen \"Branche\" oder \"Land\"\n",
"\n",
"Aktuelle Umsetzung: Funktion, die die Farbe der Knoten anhand des ausgewählten Attributs (type) setzt.\n",
"\n",
"Erweiterungen/offene Fragen: Mögliche Branchen und Länder haben eine festcodierte Farbe, geht das generischer? Wie können weitere Attribute integriert werden?\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# define new function that sets the color of the nodes\n",
"def color_type (net, type):\n",
" ''' color_type sets the color of a network depending on an attribute of the nodes\n",
" net: network\n",
" type: 'branche' or 'land' '''\n",
"\n",
" colormap = {'Branche 1': '#87CEEB',\n",
" 'Branche 2': '#0f4c81',\n",
" 'Branche 3': '#B2FFFF', \n",
" 'Branche 4': '#191970',\n",
" 'Land 1': '#F8D568', \n",
" 'Land 2': '#F58025', \n",
" 'Land 3': '#CC5500', \n",
" 'Land 4': '#C0362C'}\n",
" for node in net.nodes:\n",
" node['color'] = colormap[node[type]]\n",
" return net\n",
"\n",
"# set color based on attribute\n",
"nt = color_type(nt, 'branche')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ändern der Farbe aller Kanten\n",
"Normalerweise übernehmen die Kanten die Farben von ihren Knoten. Mit der Option 'color' kann für alle Kanten die gleiche Farbe gesetzt werden."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# set all edge colors \n",
"nt.options.edges.color = 'grey'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Speichern des Netzwerks als HTML\n",
"\n",
"Die Ausrichtung und Spannkräfte des Netzwerks können mit den 'physics options' gesetzt werden."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Netzwerk_Verflechtungsanalyse.html\n"
]
},
{
"data": {
"text/html": [
"\n",
" <iframe\n",
" width=\"1000px\"\n",
" height=\"1000px\"\n",
" src=\"Netzwerk_Verflechtungsanalyse.html\"\n",
" frameborder=\"0\"\n",
" allowfullscreen\n",
" \n",
" ></iframe>\n",
" "
],
"text/plain": [
"<IPython.lib.display.IFrame at 0x10b82b940>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# activate physics options to try out different solver\n",
"#nt.show_buttons(filter_=['physics'])\n",
"\n",
"# set physics options\n",
"nt.barnes_hut(gravity=-8000, central_gravity=0.3, spring_length=200, spring_strength=0.1, damping=0.09, overlap=0)\n",
"\n",
"# create html and save in same folder\n",
"nt.show('Netzwerk_Verflechtungsanalyse.html')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Erstellen eines minimalen Netzwerks"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Netzwerk.html\n"
]
},
{
"data": {
"text/html": [
"\n",
" <iframe\n",
" width=\"1000px\"\n",
" height=\"1000px\"\n",
" src=\"Netzwerk.html\"\n",
" frameborder=\"0\"\n",
" allowfullscreen\n",
" \n",
" ></iframe>\n",
" "
],
"text/plain": [
"<IPython.lib.display.IFrame at 0x10bedbf70>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import networkx as nx\n",
"from pyvis.network import Network\n",
"\n",
"sn = nx.Graph()\n",
"sn_nodes = [1,2,3,4,5,6,7]\n",
"sn_edges = [(1,4),(2,4),(3,4),(4,5),(5,6),(5,7)]\n",
"\n",
"sn.add_nodes_from(sn_nodes, color = '#00509b')\n",
"sn.add_edges_from(sn_edges)\n",
"\n",
"net = Network('1000px', '1000px', notebook=True, cdn_resources='in_line')\n",
"\n",
"net.from_nx(sn)\n",
"net.show('Netzwerk.html')\n"
]
}
],
"metadata": {
"interpreter": {
"hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49"
},
"kernelspec": {
"display_name": "Python 3.10.1 64-bit",
"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.10.1"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -128,4 +128,4 @@ from;to;label
27;42;WP
28;34;AR
29;32;V
30;40;WP
30;40;WP
Internal Server Error - Gitea
500 Internal Server Error

An error occurred:

An error occurred

Gitea Version: 28.2.0