V tomto praktiku si předvedeme určení neznámé veličiny $C(T)$ definované jako součin $$C(T) = A(T) \, B(T),$$ přičemž veličiny $A(T)$, $B(T)$ jsme určili měřením. Určíme zároveň směrnici závislosti veličiny $C$ na $T$.
jsme si velice šikovně zapsali do souboru, jako tzv. "comma separated value" (CSV) format už v průběhu měření do souboru data.csv:
In [1]:
ls
In [2]:
!cat data.csv
Data načteme pomocí funkce read_csv z balíku pandas. Pandas je třeba nejprve naimportovat:
In [3]:
import pandas
In [4]:
pandas.read_csv?
In [5]:
data = pandas.read_csv('data.csv')
Vznikla proměnná data představuje tzv. DataFrame. DataFrame si lze představit jako tabulku, jeho vizualizace je v jupyter notebooku velice jednoduchá
In [6]:
data
Out[6]:
Dopočítáme veličinu $C$:
In [7]:
data['C'] = data['A'] * data['B']
In [8]:
data
Out[8]:
Základní grafická vizualizace dat je také velice jednoduchá:
In [9]:
import matplotlib.pyplot
%matplotlib inline
In [10]:
matplotlib.pyplot.plot(data['T'], data['C'], 'o')
Out[10]:
Fitování naměřené zavislosti přímkou je lehce náročnější:
In [11]:
import scipy.optimize
def f(x, C0, C1):
return C0 * x + C1
popt, pcov = scipy.optimize.curve_fit(f, data['T'], data['C'])
In [12]:
scipy.optimize.curve_fit?
Parametry $C_0$ a $C_1$ jsou v poli popt:
In [13]:
print(popt)
Kovarianční matice:
In [14]:
print(pcov) # vypocet statistickych chyb pozdeji
Konečně vyneseme závislost do grafu i s fitem:
In [15]:
matplotlib.pyplot.plot(data['T'], data['C'], 'o')
y = f(data['T'], popt[0], popt[1]) # y = C0 * x + C1
matplotlib.pyplot.plot(data['T'], y)
Out[15]:
O něco hezčí grafy lze vytvořit s "trochou" námahy:
In [16]:
matplotlib.pyplot.rcParams['figure.autolayout'] = True #Automaticky nastaví velikost grafu, aby se vešel do obrazu
matplotlib.pyplot.rcParams['figure.figsize'] = 12, 7 #Velikost obrázku - šířka, výška (v palcích)
matplotlib.pyplot.rcParams['axes.labelsize'] = 25 #Velikost názvů os
matplotlib.pyplot.rcParams['axes.titlesize'] = 25 #Velikost nadpisu
matplotlib.pyplot.rcParams['font.size'] = 25 #Velikost hodnot na osách
matplotlib.pyplot.rcParams['lines.linewidth'] = 2.0 #Tloušťka čar
matplotlib.pyplot.rcParams['lines.markersize'] = 12 #Velikost bodů
matplotlib.pyplot.rcParams['legend.fontsize'] = 25 #Velikost textu v legendě
matplotlib.pyplot.rcParams['text.usetex'] = True #LaTeX bude použit pro psaní všech textů
matplotlib.pyplot.rcParams['text.latex.unicode'] = True #Použije latexové balíky pro unicode řetězce
matplotlib.pyplot.rcParams['font.family'] = "serif" #Nastaví rodinu fontů na 'serif'
matplotlib.pyplot.rcParams['font.serif'] = "cm" #Do této rodiny patří i např. "Times New Roman"
matplotlib.pyplot.rcParams['xtick.major.pad'] = 10.0 #Vzdálenost čísel na x-ové ose od osy
matplotlib.pyplot.rcParams['ytick.major.pad'] = 10.0 #Vzdálenost čísel na y-ové ose od osy
matplotlib.pyplot.rcParams['text.latex.preamble'] = r"\usepackage{subdepth}, \usepackage{type1cm} "
In [17]:
matplotlib.pyplot.plot(data['T'], data['C'], 'o', label='data')
y = f(data['T'], popt[0], popt[1]) # y = C0 * x + C1
matplotlib.pyplot.plot(data['T'], y, label=r'$y = C_0 \, x + C_1$')
matplotlib.pyplot.legend(loc='best')
matplotlib.pyplot.xlim([14.5, 21.5])
matplotlib.pyplot.xlabel(r"$T$")
matplotlib.pyplot.ylabel(r"$C(T)$")
matplotlib.pyplot.title("Fišerův problém vyřešen!")
Out[17]:
In [ ]: