{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Computergestützte Datenauswertung\n",
"**Institut für Experimentelle Teilchenphysik (ETP)**
\n",
"**Institut für Theorie der Kondensierten Materie (TKM)**
\n",
"Prof. Dr. Ulrich Husemann (ETP)
\n",
"Dr. Thorsten Chwalek (ETP), Dr. Andreas Poenicke (TKM)
\n",
"[ILIAS-Seite zum Kurs](https://ilias.studium.kit.edu/ilias.php?baseClass=ilrepositorygui&ref_id=2627198)
\n",
"Sommersemester 2025 – Blatt 02
\n",
"Abgabe: Montag, 12.05.2025 oder Dienstag, 13.05.2025 \n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Auf dem zweiten Übungsblatt beschäftigen Sie sich mit den Grundlagen der statistischen Datenauswertung.\n",
"In der [ersten Aufgabe](#Aufgabe1) setzen Sie sich mit einfachen statistischen Größen auseinander durch selbstständiges Implementieren der Ausdrücke aus der Vorlesung.\n",
"In der [zweiten Aufgabe](#Aufgabe2) bekommen Sie die Möglichkeit, den zentralen Grenzwertsatz noch einmal selbst in grafischer Weise zu vertiefen. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Aufgabe 1: Berechnung statistischer Größen \n",
"---\n",
"\n",
"In dieser Aufgabe implementieren Sie die Berechnung einiger der statistischen Größen aus der Vorlesung. \n",
"Ziel dieser Übung ist es, die statistischen Größen, die aus einer Stichprobe (z. B. einer Messung) gewonnen werden, zu verinnerlichen: *arithmetisches Mittel*, *Stichprobenvarianz* und *Stichprobenstandardabweichung* (oft wird auch verkürzend von *Mittelwert*, *Varianz* und *Standardabweichung* gesprochen). Außerdem wiederholen Sie verschiedene Berechnungsweisen, die Sie in der Vorlesung kennengelernt haben.\n",
"\n",
"In diesem Verzeichnis liegt Ihnen die Datei `numbers.txt` vor.\n",
"Diese Datei beinhaltet ganzzahlige Zufallszahlen im Bereich 0 bis 9.\n",
"Auf dem letzten Aufgabenblatt lernten Sie bereits die Bibliothek *NumPy* kennen und in der Vorlesung wurde Ihnen teilweise gezeigt, wie Sie mithilfe der Bibliothek die statistischen Größen *arithmetisches Mittel* ([`numpy.mean`](https://numpy.org/doc/stable/reference/generated/numpy.mean.html)), *Stichprobenvarianz* ([`numpy.var`](https://numpy.org/doc/stable/reference/generated/numpy.var.html)) und *Stichprobenstandardabweichung* ([`numpy.std`](https://numpy.org/doc/stable/reference/generated/numpy.std.html)) berechnen können.\n",
"Die folgende Jupyter-Zellen zeigt Ihnen, wie Sie die Daten in `numbers.txt` einlesen können und wie Sie mithilfe von *NumPy* die statistischen Größen berechnen lassen können.\n",
"\n",
"**Anmerkung:**
\n",
"In vielen Fällen ist die *Stichprobenvarianz mit Bessel-Korrektur* der beste Schätzwert für die Varianz einer Wahrscheinlichkeitsverteilung aus einer Stichprobe, da diese erwartungstreu ist.\n",
"Eine einfache Herleitung für den Korrekturfaktor finden Sie auf [Wikipedia](https://de.wikipedia.org/wiki/Stichprobenvarianz_(Schätzfunktion)#Erwartungstreue)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"# Einlesen der Daten aus der Datei\n",
"numbers = np.loadtxt('numbers.txt', dtype=int)\n",
"N = len(numbers)\n",
"print(N, \"Zahlen eingelesen: \\n\", numbers)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# NumPy-Funktionen\n",
"print(\"Statistische Größen mit NumPy:\")\n",
"print(\"Arithmetisches Mittel : \", np.mean(numbers))\n",
"print(\"Stichprobenvarianz : \", np.var(numbers))\n",
"print(\"Stichprobenstandardabweichung: \", np.std(numbers))\n",
"print(\"Erwartungstreue Varianz : \", np.var(numbers, ddof=1))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Arbeitsanweisung:**
\n",
"Schreiben Sie eine Python-Routine zur Berechnung der vier Größen, indem Sie die Definitionen der Größen, die Sie in der Vorlesung für Stichproben kennengelernt haben, ohne Verwendung von Bibliotheken implementieren. Berechnen Sie die vier Größen mit dem Datensatz aus `numbers.txt` und vergleichen Sie Ihr Ergebnis mit den Werten, die Sie mithilfe von *NumPy* bereits erhalten haben.\n",
"\n",
"**Hinweis:**
\n",
"Es bietet sich an, die einzelnen Berechnungen in Funktionen zu implementieren, die Sie wiederverwenden können."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Eigene Funktionen\n",
"\n",
"#def mean(values):\n",
" # Hier Ihren Code einfügen\n",
"\n",
"#def variance(values):\n",
" # Hier Ihren Code einfügen\n",
"\n",
"#def sigma(values):\n",
" # Hier Ihren Code einfügen\n",
"\n",
"#def unbiased_variance(values):\n",
" # Hier Ihren Code einfügen\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Statstische Definition für Stichproben\n",
"#print(\"Statistische Größen mit eigener Defenition:\")\n",
"#print(\"Mittelwert: \", mean(numbers))\n",
"#print(\"Varianz: \", variance(numbers))\n",
"#print(\"Standardabweichung: \", sigma(numbers))\n",
"#print(\"Erwartungstreue Varianz\", unbiased_variance(numbers))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bestimmen Sie nun die Häufigkeit der einzelnen Zahlen in der Datei `numbers.txt`, d. h. füllen Sie einen `numpy.array` mit der jeweiligen Häufigkeit, mit der die Zahlen 0 bis 9 vorkommen. \n",
"Das `numpy.array` enthält dann statt der ursprünglichen Datenmenge nur noch 10 Zahlen, die eine erheblich komprimiertere Version der ursprünglichen Daten darstellt.\n",
"In manchen Fällen der Datenauswertung werden Sie auf genau diesen Fall treffen, dass Ihnen nur die Häufigkeiten von Ereignissen in Ereignisklassen, die als *Bins* bezeichet werden, bekannt sind."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Bestimmung der Häufigkeit\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Berechnen Sie anschließend den Mittelwert und die Varianz der Daten direkt aus der Häufigkeitsverteilung, wie Sie es bereits in der Vorlesung hergeleitet haben.\n",
"Vergleichen Sie mit den Ergebnissen, die Sie bisher erhalten haben."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Eigene Funktionen aus Häufigkeit\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Aufgabe 2: Zentraler Grenzwertsatz \n",
"---\n",
"\n",
"Der zentrale Grenzwertsatz ist in der statistischen Datenauswertung von wesentlicher Bedeutung und Bestandteil vieler Näherungen im frequentistischen Ansatz. \n",
"In dieser Aufgabe sollen Sie selbst qualitativ anhand von zwei Beispielen die Konvergenz der Summe von $n$ unabhängigen Zufallszahlen beobachten.\n",
"\n",
"Zur Wiederholung aus der Vorlesung: **Zentraler Grenzwertsatz**
\n",
"Im Grenzfall großer $n$ ist die (normierte) Summe von $n$ unabhängigen Zufallszahlen eine Zufallszahl, die einer Normalverteilung folgt.\n",
"$\n",
"z_n=\\frac{\\sum_{i=1}^n(x_i-\\mu_i)}{\\sqrt{\\sum_{i=1}^n\\sigma_i^2}}=\\frac{y_n-\\mathsf{E}[y_n]}{\\sqrt{\\mathsf{V}[y_n]}}\n",
"$\n",
"konvergiert für $n\\to\\infty$ gegen eine Standardnormalverteilung."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Arbeitsanweisung:**
\n",
"Betrachten Sie die Summe $y_n$ von $n$ **gleichverteilten** Zufallszahlen $x_i$ im Intervall [0,1], $y_n=\\sum_{i=1}^{n}x_i$.\n",
"Berechnen Sie für $n=2,10, 100, 1000$ jeweils 100000 Werte von $z_n$.\n",
"Histogrammieren Sie die 100000 $z_n$ Werte und zeichnen Sie jeweils die Standardnormalverteilung (Normalverteilung mit $\\mu=0$ und $\\sigma=1$) mit in das Diagramm.\n",
"Achten Sie auf eine ausreichende Anzahl an Bins, damit der Vergleich aussagekräftig ist.\n",
"\n",
"**Hinweis:**
\n",
"Für die Summe von $n$ gleichverteilten Zufallszahlen erhalten Sie $\\mathsf{E}[y_n]=n/2$ und $\\mathsf{V}[y_n]=n/12$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Funktion für die Normalverteilung\n",
"def Gaussian(x, mu=0., sigma=1.):\n",
" return np.exp(-(x - mu)**2 / 2 / sigma**2) / np.sqrt(2*np.pi) / sigma"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Durchführung und Darstellung des Zufallexperiments\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wiederholen Sie nun die Zufallsexperimente mit einer Summe $y_n=\\sum_{i=1}^{n} x_i$ von exponentiell verteilten Zufallszahlen $x_i$ für den Fall $\\lambda = 1$. Verwenden Sie diesmal $\\mathsf{E}[y_n]$ und $\\mathsf{V}[y_n]$ nicht aus der Vorlesung, sondern berechnen Sie sie aus der PDF der Exponentialverteilung $f(x_i)=\\lambda e^{-\\lambda x_i}$ und den Definitionen von Erwartungswert und Varianz selbst.\n",
"\n",
"Erhalten Sie das gleiche Ergebnis wie davor oder gibt es Unterschiede?\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Durchführung und Darstellung des Zufallexperiments\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}