ls

!cat data1.csv

!cat data2.csv

import pandas

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

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

"""
Explanation: Fišerův problém revisited
Ú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 trochu nešikovně zapsali do dvou csv souborů (data1.csv a data2.csv):
End of explanation
"""


data = pandas.concat([data1, data2])
data

"""
Explanation: Úkol 1
Vidíme, že data jsou tentokrát trochu komplikovanější. Jako první musíme data sloučit do jednoho DataFrame.
Najdete způsob, jak to vyřešit?
End of explanation
"""


data = data.sort_values('T')
data

"""
Explanation: Úkol 2
Výborně! Bohužel v této formě jsou data trochu nepřehledná, bylo by dobré data setřídit podle parametru $T$.
End of explanation
"""


import numpy
data = data.groupby('T').aggregate(numpy.average)
data

"""
Explanation: Úkol 3
Vidíme, že pro některé hodnoty $T$ máme dvě měření, bylo by dobré nahradit hodnoty $A$ a $B$ pro tyto hodnty $T$ aritmetickým průměrem.
End of explanation
"""


import matplotlib.pyplot
%matplotlib inline

matplotlib.pyplot.rcParams['figure.autolayout'] = False
matplotlib.pyplot.rcParams['figure.figsize'] = 9, 5
matplotlib.pyplot.rcParams['axes.labelsize'] = 25
matplotlib.pyplot.rcParams['axes.titlesize'] = 25
matplotlib.pyplot.rcParams['font.size'] = 25
matplotlib.pyplot.rcParams['lines.linewidth'] = 2.0
matplotlib.pyplot.rcParams['lines.markersize'] = 12
matplotlib.pyplot.rcParams['legend.fontsize'] = 25
matplotlib.pyplot.rcParams['text.usetex'] = True
matplotlib.pyplot.rcParams['text.latex.unicode'] = True
matplotlib.pyplot.rcParams['font.family'] = "serif"
matplotlib.pyplot.rcParams['font.serif'] = "cm"
matplotlib.pyplot.rcParams['xtick.major.pad'] = 10.0
matplotlib.pyplot.rcParams['ytick.major.pad'] = 10.0
matplotlib.pyplot.rcParams['text.latex.preamble'] = r"\usepackage{subdepth}, \usepackage{type1cm}"

matplotlib.pyplot.plot(data.index, data['A'], 'o', label='A')
matplotlib.pyplot.legend(loc='best')
matplotlib.pyplot.show()

matplotlib.pyplot.plot(data.index, data['B'], 'o', label='B')
matplotlib.pyplot.legend()
matplotlib.pyplot.show()

"""
Explanation: Úkol 4
Vyneste závislost veličiny $A$ a $B$ na $T$, každou závislost do samostatného grafu.
End of explanation
"""


data = data[data.index != 23.0]
data

matplotlib.pyplot.plot(data.index, data['A'], 'o', label='A')
matplotlib.pyplot.legend(loc='best')
matplotlib.pyplot.show()

matplotlib.pyplot.plot(data.index, data['B'], 'o', label='B')
matplotlib.pyplot.legend()
matplotlib.pyplot.show()

"""
Explanation: Úkol 5
Vidíme, že měření $A$ vykazuje anomalitu pro hodnotu $T = 23$. Odstraňte toto měření z DataFrame a opět vyneste obě závislosti do grafů.
End of explanation
"""


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

matplotlib.pyplot.plot(data.index, data['C'], 'o', label='C')
matplotlib.pyplot.legend(loc='best')
matplotlib.pyplot.show()

"""
Explanation: Úkol 6
Dopočtěte veličinu $C$ a vyneste ji do grafu.
End of explanation
"""


data.loc[15:18]

import scipy.optimize

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

data1 = data.loc[15:18]
data2 = data.loc[19:]

matplotlib.pyplot.plot(data.index, data['C'], 'o', label='measurement')
popt, pcov = scipy.optimize.curve_fit(f, data1.index, data1['C'])
y = f(data1.index, popt[0], popt[1]) # y = C0 * x + C1
matplotlib.pyplot.plot(data1.index, y, label=r'$C_0 = {:0.3f}$'.format(popt[0]))

popt, pcov = scipy.optimize.curve_fit(f, data2.index, data2['C'])
y = f(data2.index, popt[0], popt[1]) # y = C0 * x + C1
matplotlib.pyplot.plot(data2.index, y, label=r'$C_0 = {:0.3f}$'.format(popt[0]))

popt, pcov = scipy.optimize.curve_fit(f, data.index, data['C'])
y = f(data.index, popt[0], popt[1]) # y = C0 * x + C1
matplotlib.pyplot.plot(data.index, y, label=r'$C_0 = {:0.3f}$'.format(popt[0]));

matplotlib.pyplot.legend(loc='best')
matplotlib.pyplot.savefig('fiser.pdf')
matplotlib.pyplot.savefig('fiser.png')

ls

"""
Explanation: Úkol 7
Proložte data přímkou v rozmezí $T \in [15, 18]$ a $T \in [19, 24]$ (tedy dvě regrese). Pak proložte data přímkou v celém intervalu $T$, vše vyneste do jednoho grafu, do legendy grafu vypište hodnoty směrnic s přesností na tři desetinná místa. Graf uložte do souboru ve formátu pdf a png.
End of explanation
"""


