Spaces:
Running
Running
File size: 4,275 Bytes
843a502 79484be 843a502 aa4aab0 79484be 843a502 79484be 843a502 79484be 843a502 79484be aa4aab0 79484be 843a502 79484be 843a502 79484be 843a502 79484be 843a502 aa4aab0 843a502 79484be 843a502 79484be 843a502 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | import pycek_public as cek
import numpy as np
class stats_lab(cek.cek_labs):
def setup_lab(self):
"""
Define base information for the lab
"""
self.add_metadata(
laboratory = 'Basic Statistics Lab',
columns = ["X","Y"]
)
self.number_of_values = 10
self.available_samples = [
'Averages',
'Propagation of uncertainty',
'Comparison of averages',
'Linear fit',
'Non linear fit',
'Detection of outliers',
]
self.sample_parameters['Averages'] = {
"gen_values" : [
(1.0, 0.1),
(12., 2.0)
],
'expected_value' : (1.0,10.0),
"precision" : 3,
}
self.sample_parameters['Propagation of uncertainty'] = {
"gen_values" : [
(15.0, 1.0),
(133., 2.0)
],
"precision" : 3,
}
self.sample_parameters['Comparison of averages'] = {
"gen_values" : [
(15.0, 1.0),
(13.2, 2.0)
],
"precision" : 3,
}
self.sample_parameters['Linear fit'] = {
"function" : lambda x,m,q: m*x + q,
"gen_values" : {'m':12.3 , 'q':1.0},
"xrange" : [0.0 , 10.0],
"expected_value" : (11.3,0.9),
"precision" : 3,
}
self.sample_parameters['Non linear fit'] = {
"nval" : 10,
"function" : lambda x,E0,K0,Kp,V0: E0 + K0 * x / Kp * ( (V0/x)**Kp / (Kp-1)+1) - K0*V0/(Kp-1),
"gen_values" : {"E0":-634.2, "K0":12.43, "Kp":4.28, "V0":99.11},
"xrange" : [50 , 140],
"precision" : 3,
}
self.sample_parameters['Detection of outliers'] = {
"function" : lambda x,m,q: m*x + q,
"gen_values" : {'m':2.3 , 'q':0.1},
"xrange" : [10.0 , 20.0],
"shift" : 2,
"precision" : 3,
}
def create_data(self):
"""
Generate the data
"""
if self.sample is None:
raise Exception("Sample not defined")
prm = self.sample_parameters[ self.sample ]
self.set_parameters(
number_of_values = self.number_of_values,
)
if "precision" in prm:
self.set_parameters( precision = prm["precision"] )
if "noise" in prm:
self.set_parameters( noise_level = prm["noise"] )
self.add_metadata(
number_of_values = self.number_of_values,
sample = self.sample,
)
if "expected_value" in prm:
self.add_metadata( **{"expected_value": prm["expected_value"]} )
if self.sample in ["Averages", 'Propagation of uncertainty', 'Comparison of averages']:
data = self._generate_normal_random(self.number_of_values, prm['gen_values'])
elif self.sample in ["Linear fit"]:
self.noise_level = 5
data = self.generate_data_from_function(
prm["function"],
prm['gen_values'],
self.number_of_values,
prm['xrange'],
noise_level = self.noise_level,
)
elif self.sample in ["Non linear fit"]:
self.noise_level = 5
data = self.generate_data_from_function(
prm["function"],
prm['gen_values'],
self.number_of_values,
prm['xrange'],
noise_level = self.noise_level,
)
elif self.sample in ["Detection of outliers"]:
data = self.generate_data_from_function(
prm["function"],
prm['gen_values'],
self.number_of_values,
prm['xrange'],
noise_level = self.noise_level,
)
i = np.random.randint(self.number_of_values)
data[i,1] += prm['shift']
self.data = data
return data
|