code.Num
1import math 2import random 3import Utils 4 5def per(t, p): 6 p = math.floor(((p or 0.5) * len(t)) + 0.5) 7 return t[max(1, min(len(t), p))] 8 9class Num: 10 def __init__(self, c=0, s=""): 11 self.n = 0 # items seen 12 self.at = c # column position 13 self.name = s # column name 14 self._has = {} # kept data 15 self.lo = float('inf') # minimum seen 16 self.hi = -float('inf') # maximum seen 17 self.isSorted = True 18 self.w = -1 19 if self.name and self.name[-1] != "-": 20 self.w = 1 21 22 def nums(self): 23 return self._has 24 25 def add(self, v): 26 pos = None 27 if v != "?": 28 v = float(v) 29 self.n += 1 30 self.lo = min(self.lo, v) 31 self.hi = max(self.hi, v) 32 if len(self._has) < Utils.the['nums']: 33 pos = 1 + len(self._has) 34 else: 35 if random.random() < Utils.the['nums'] / self.n: 36 pos = random.randint(1, len(self._has)) 37 if pos: 38 self.isSorted = False 39 self._has[pos] = int(v) 40 41 def div(self): 42 a = self.nums() 43 ans = (per(a, 0.9) - per(a, 0.1))/2.58 44 return ans 45 46 def mid(self): 47 return per(self.nums(), 0.5)
def
per(t, p):
class
Num:
10class Num: 11 def __init__(self, c=0, s=""): 12 self.n = 0 # items seen 13 self.at = c # column position 14 self.name = s # column name 15 self._has = {} # kept data 16 self.lo = float('inf') # minimum seen 17 self.hi = -float('inf') # maximum seen 18 self.isSorted = True 19 self.w = -1 20 if self.name and self.name[-1] != "-": 21 self.w = 1 22 23 def nums(self): 24 return self._has 25 26 def add(self, v): 27 pos = None 28 if v != "?": 29 v = float(v) 30 self.n += 1 31 self.lo = min(self.lo, v) 32 self.hi = max(self.hi, v) 33 if len(self._has) < Utils.the['nums']: 34 pos = 1 + len(self._has) 35 else: 36 if random.random() < Utils.the['nums'] / self.n: 37 pos = random.randint(1, len(self._has)) 38 if pos: 39 self.isSorted = False 40 self._has[pos] = int(v) 41 42 def div(self): 43 a = self.nums() 44 ans = (per(a, 0.9) - per(a, 0.1))/2.58 45 return ans 46 47 def mid(self): 48 return per(self.nums(), 0.5)
Num(c=0, s='')
11 def __init__(self, c=0, s=""): 12 self.n = 0 # items seen 13 self.at = c # column position 14 self.name = s # column name 15 self._has = {} # kept data 16 self.lo = float('inf') # minimum seen 17 self.hi = -float('inf') # maximum seen 18 self.isSorted = True 19 self.w = -1 20 if self.name and self.name[-1] != "-": 21 self.w = 1
def
add(self, v):
26 def add(self, v): 27 pos = None 28 if v != "?": 29 v = float(v) 30 self.n += 1 31 self.lo = min(self.lo, v) 32 self.hi = max(self.hi, v) 33 if len(self._has) < Utils.the['nums']: 34 pos = 1 + len(self._has) 35 else: 36 if random.random() < Utils.the['nums'] / self.n: 37 pos = random.randint(1, len(self._has)) 38 if pos: 39 self.isSorted = False 40 self._has[pos] = int(v)