ls

!cat data.csv

"""
Explanation: Fišerův problém
Úvod
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$.
Měření
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:
End of explanation
"""


import pandas

pandas.read_csv?

data = pandas.read_csv('data.csv')

"""
Explanation: Data načteme pomocí funkce read_csv z balíku pandas. Pandas je třeba nejprve naimportovat:
End of explanation
"""


data

"""
Explanation: Vznikla proměnná data představuje tzv. DataFrame. DataFrame si lze představit jako tabulku, jeho vizualizace je v jupyter notebooku velice jednoduchá
End of explanation
"""


data['C'] = data['A'] * data['B']

data

"""
Explanation: Dopočítáme veličinu $C$:
End of explanation
"""


import matplotlib.pyplot
%matplotlib inline

matplotlib.pyplot.plot(data['T'], data['C'], 'o')

"""
Explanation: Základní grafická vizualizace dat je také velice jednoduchá:
End of explanation
"""


import scipy.optimize

def f(x, C0, C1):
    return C0 * x + C1

popt, pcov = scipy.optimize.curve_fit(f, data['T'], data['C'])

scipy.optimize.curve_fit?

"""
Explanation: Fitování naměřené zavislosti přímkou je lehce náročnější:
End of explanation
"""


print(popt)

"""
Explanation: Parametry $C_0$ a $C_1$ jsou v poli popt:
End of explanation
"""


print(pcov) # vypocet statistickych chyb pozdeji

"""
Explanation: Kovarianční matice:
End of explanation
"""


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)

"""
Explanation: Konečně vyneseme závislost do grafu i s fitem:
End of explanation
"""


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} "

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!")

"""
Explanation: O něco hezčí grafy lze vytvořit s "trochou" námahy:
End of explanation
"""


