Spaces:
Running
Running
| 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 | |