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):
6def per(t, p):
7    p = math.floor(((p or 0.5) * len(t)) + 0.5)
8    return t[max(1, min(len(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 nums(self):
23    def nums(self):
24        return self._has
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)
def div(self):
42    def div(self):
43        a = self.nums()
44        ans = (per(a, 0.9) - per(a, 0.1))/2.58
45        return ans
def mid(self):
47    def mid(self):
48        return per(self.nums(), 0.5)