Completed
Push — master ( 2950cc...b2a338 )
by Xianshun
01:09
created

Observation.is_categorical()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
c 1
b 0
f 1
dl 0
loc 2
rs 10
1
class Observation(object):
2
    x = None
3
    y = None
4
    group_id = None
5
    label = None
6
7
    def __init__(self, x=None, label=None, group_id=None, y=None):
8
        if x is not None:
9
            self.x = x
10
        if y is not None:
11
            self.y = y
12
13
        if label is not None:
14
            self.label = label
15
16
        if group_id is not None:
17
            self.group_id = group_id
18
19
    def is_categorical(self):
20
        return self.label is not None
21
22
    def is_numerical(self):
23
        return self.x is not None
24
25
26
class Sample(object):
27
    observations = None
28
29
    def __init__(self):
30
        self.observations = []
31
32
    def add(self, observation):
33
        self.observations.append(observation)
34
35
    def size(self):
36
        return len(self.observations)
37
38
    def get(self, index):
39
        return self.observations[index]
40
41
    def is_categorical(self):
42
        return self.observations[0].is_categorical()
43
44
    def is_numerical(self):
45
        return self.observations[0].is_numerical()
46
47
    def count_by_group_id(self, group_id):
48
        return sum(1 for x in self.observations if group_id is None or x.group_id == group_id)
49
50
51
class SampleDistribution(object):
52
    sample = None
53
    group_id = None
54
55
    def __init__(self, sample=None, group_id=None):
56
        if group_id is not None:
57
            self.group_id = group_id
58
        if sample is not None:
59
            self.sample = sample
60
            self.mean = SampleDistribution.calculate_mean(sample, group_id)
61
62
    @staticmethod
63
    def calculate_mean(sample, group_id):
64
        count = 0
65
        sum = 0
66
        for i in range(sample.size()):
67
            observation = sample.get(i)
68
            if observation.group_id != group_id:
69
                continue
70
            sum += observation.x
71
            count += 1
72
        return sum / count
73