Skip to content
Snippets Groups Projects
Commit 2e064b07 authored by Roger Wolf's avatar Roger Wolf
Browse files

update for lecture

parent c83b4ede
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id:4abb1785-91d0-4c14-8b61-a04e2823a405 tags:
%% Cell type:markdown id:14f93d6e-7330-4931-8076-a482dcc871e1 tags:
# Aufnahme der Daten von Hand
Um Daten manuell (d.h. per Hand) aufzunehmen und ins Jupyter-notebook einzutragen empfiehlt es sich **übersichtlich und gut organisiert** zu arbeiten. Die Aufnahme der Daten ist dadurch schneller und weniger Fehleranfällig. Gehen Sie dabei wie folgt vor:
* Machen Sie sich **bereits in der Vorbereitung zum Versuch** klar, was Sie messen möchten.
* Legen Sie geeignete Tabellen in Code-Zellen an.
* Richten Sie die grundlegende Weiterverarbeitung der Messdaten ein, indem Sie z.B. **Code-Snipets zur Berechnung systematischer Unsicherheiten in einer Code-Zelle hinterlegen**.
* Richten Sie die Möglichkeit ein die aufgenommenen **Daten sofort zu visualisieren**. So können Sie missglückte Messungen (sog. *outlier*) leicht identifizieren und ggf. neu messen.
* Speichern Sie das Jupyter-notebook während der Datennahme in regelmäßigen Zeitabständen, damit Ihnen keine Daten verloren gehen.
In der folgenden Code-Zelle sehen Sie ein Beispiel für eine vorgefertigte Tabelle, wie man Sie bereits in der Vorbereitung zum Versuch einrichten kann, und in die Sie nur noch Ihre Messwerte eintragen müssen. Nach Ausführen der Code-Zelle können Sie die aufgenommenen Daten zu jedem Zeitpunkt **sofort visualisieren**:
%% Cell type:markdown id:7b0f197c-3e85-45aa-93c2-035873086617 tags:
## Vorgefertige Tabellen in Codezellen
%% Cell type:markdown id:71eb8d3a-da8a-4f4f-8c74-88b44f55352f tags:
In der folgenden Code-Zelle sehen Sie ein Beispiel für eine vorgefertigte Tabelle, wie man sie bereits in der Vorbereitung zum Versuch einrichten kann, und in die Sie nur noch Ihre Messwerte eintragen müssen. Nach Ausführen der Code-Zelle können Sie die aufgenommenen Daten zu jedem Zeitpunkt **sofort visualisieren**:
%% Cell type:code id:c8b97a8a-fbfb-4b35-aa9c-a0fb933adfb7 tags:
``` python
# Example for the visualization of measurement points
import matplotlib.pyplot as plt
# You may use the numpy.nan object as a placeholder for values that you have
# not measured, yet
from numpy import nan, array
# This is an example from the lab experiment "Kreisel" (Spinner): The following
# values are saved in three columns of the the array a:
# - spinner revolution frequency, at which you want to start the measurement
# (in Hz);
# - spinner revolution frequency, at which you stopped the measurement (in Hz);
# - precession periode (in s).
#
# ---Values have been made up for this example---
a = array([
25.0, 24.8, 2.45,
24.5, 24.2, 3.75,
24.0, 23.9, 3.80,
23.5, nan, nan,
22.5, nan, nan,
22.0, nan, nan,
21.5, nan, nan,
21.0, nan, nan,
# This array has 8 lines and 3 columns
]).reshape(8,3)
# In the following line each column is saved into a an individual numpy array
# (via the numpy view)
a0, a1, a2 = a[0:,0], a[0:,1], a[0:,2]
# The matplotlib scatter plot ignores nan entries. All other entries are
# displayed.
#
# In the example above the arithmetic mean from the rotation frequency of the
# spinner at (a0) starting and (a1) stopping time is built and the (a2)
# precession periode of the spinner is plotted against this mean. This scatter
# plot is meant for a quick check of the quality of the measurement points
# only. For the final evaluation of the lab experiment you may use tools, which
# are better suited for statistical parameter estimation, like e.g. kafe2.
plt.scatter((a0+a1)/2, a2)
```
%% Cell type:markdown id:2e7835fc-1d8b-40c8-b1d9-c6bb53da02ff tags:
## Anzeige von Daten mit Unsicherheiten
%% Cell type:markdown id:e312ddd6-620f-472c-a6f4-1bc17ccfc08e tags:
In der folgenden Code-Zelle zeigen wir Ihnen ein Beispiel, wie man mit Hilfe der Bibliothek *matplotlib* **Daten mit Unsicherheiten in $x$- und $y$-Richtung visualisiert'':
%% Cell type:code id:bdaf1156-73dd-460f-b65c-a4c0c9b8b4aa tags:
``` python
import numpy as np, matplotlib.pyplot as plt
# data point in x
x_data = [1, 2, 3, 4, 5]
# uncertainty in x
x_err = [0.3, 0.3, 0.2, 0.2, 0.1]
# data point in y
y_data = [1, 4, 9, 16, 25]
# uncertainty in y
y_err = [0.75, 0.8, 1.2, 2.5, 3.5]
# Display with errorbars
plt.title("Beispiel zur Visualisierung von Daten mit Unsicherheiten")
plt.errorbar(x_data, y_data, xerr=x_err, yerr=y_err, color='darkblue', marker="o")
plt.ylabel("y-Achse", size='x-large')
plt.xlabel("x-Achse")
plt.show()
```
%% Cell type:markdown id:e986db70-3cfa-4816-86c9-6f41b5f816e7 tags:
## Check
%% Cell type:markdown id:c9955ad7-bd9f-49cb-965a-e6153b8ab364 tags:
Führen Sie zur Wiederholung des Gelernten und zum Test Ihres Verständnisses noch einmal die folgenden Operationen durch:
* Lesen Sie `x_data`, `x_err`. `y_data` und `y_err` ein, wie im Beispiel **Vorgefertigte Tabellen in Codezellen** gezeigt.
* Teilen Sie den den numpy array geeignet auf.
* Stellen Sie die eingelesenen Daten mit *matplotlib* dar, wie im Beispiel **Anzeige von Daten mit Unsicherheiten** gezeigt.
%% Cell type:code id:a865ae19-474c-4d69-aae1-27cbd56db520 tags:
``` python
# ADD YOUR CODE BELOW
```
......
%% Cell type:markdown id:4abb1785-91d0-4c14-8b61-a04e2823a405 tags:
# Beispiele zur Arbeit mit Daten
In den folgenden Abschnitten zeigen wir Ihnen:
* Wie Sie, mit Hilfe der Bibliothek *numpy* Mittelwert und Varianz einer Stichprobe von zufallsgrößen auswerten können.
* Wie die einen gewichteten Mittelwert und die Unsicherheit daraus auswerten können.
* Wie Sie den *pull* zwischen zwei Messungen $x_{0}$ und $x_{1} $ mit Unsicherheiten $\Delta x_{0}$ und $\Delta x_{1}$ berechnen können.
* Wie Sie, mit Hilfe der Bibliothek *numpy* **Mittelwert und Varianz einer Stichprobe** von Zufallsgrößen auswerten können.
* Wie die einen **gewichteten Mittelwert und die Unsicherheit** daraus auswerten können.
* Wie Sie den ***pull* zwischen zwei Messungen $x_{0}$ und $x_{1}$ mit Unsicherheiten $\Delta x_{0}$ und $\Delta x_{1}$** berechnen können.
Wir verwenden dabei die folgenden ausgedachten Datenpunkte
%% Cell type:code id:5dcc2735-37bb-4bcc-be21-1ca7bcfb63f7 tags:
``` python
import numpy as np
# Werte
vx = np.array([1, 2, 3, 4, 6, 5, 8, 7])
dx = np.array([0.1, 0.2, 0.1, 0.1, 0.05, 0.75, 1.5, 0.25])
```
# Berechnung eines gewichteten Mittelwerts
w = 1./dx**2
sumw = np.sum(w)
mean = np.sum(w*vx)/sumw
sigma = np.sqrt(1./sumw)
%% Cell type:markdown id:1f7de24e-bafb-4a70-aaff-347866dc0615 tags:
## Mittelwert und Varianz der Stichprobe
print("Gewichteter Mittelwert:", mean, "+/-", sigma)
%% Cell type:markdown id:9170e82d-f333-4959-a132-286d3f58b6cb tags:
In der folgenden Codezelle sehen, wie wie man Mittelwert und Varianz aus einer Stichprobe mit Hilfe der Bibliothek *numpy* berechnet.
%% Cell type:code id:a6b1ed77-7227-41a6-8864-25f0125a4fda tags:
``` python
# The sample in question
print("Sample:", vx)
# Sample mean
print("The mean of vx :", np.mean(vx))
# Sample variance; check help(np.var) for more information
print("The variance of vx:", np.var(vx, ddof=1))
# The uncertainty on the mean
print("The uncertainty on the mean of vx", np.sqrt(np.var(vx, ddof=1)/len(vx)))
```
%% Output
%% Cell type:markdown id:df675017-b558-465a-83e3-7bc4e965c27e tags:
Gewichteter Mittelwert: 4.5402900284048435 +/- 0.03668095690941965
## Gewichteter Mittelwert und Unsicherheit darauf
%% Cell type:markdown id:23a28b2d-0353-4a29-b62d-7b7574229d36 tags:
Wenn Sie einen **Mittelwert aus Messungen bilden möchten, die bereits mit Unsicherheiten versehen sind** sollten Einzelmessungen mit großer Unsicherheit mit weniger Gewicht in den Mittelwert eingehen, als Einzelessungen mit geringer Unsicherheit. Unter der Annahme, dass alle Unsicherheiten 68% Konfidenzintervallen unter Normalverteilung entsprechen erhalten Sie eine statistisch unverzerrte und effiziente Schätzung aus dem **gewichteteten Mittelwert**.
In der folgenden Codezelle zeigen wir Ihnen, wie man den **gewichteten mittelwert unf die Unsicherheit darauf** mit der Bibliothek *numpy* berechnet.
%% Cell type:code id:9e581aa0-d32e-4440-9eff-4fa132362f8d tags:
``` python
# The weights from the uncertainties
w = 1./dx**2
# Sum of weights
sumw = np.sum(w)
# Weighted mean
mean = np.sum(w*vx)/sumw
print("The weighted mean of vx :", mean)
# weighted variance
sigma = np.sqrt(1./sumw)
print("The uncertainty on the weighted mean of vx:", var)
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment