Passed
Push — mpeta ( 62640f...eed483 )
by Konstantinos
01:41
created

so_magic.data.backend.panda_handling.client_code   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 45
dl 0
loc 68
rs 10
c 0
b 0
f 0
wmc 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A PDTabularRetrieverDelegate.nb_rows() 0 3 1
A PDTabularRetrieverDelegate.nb_columns() 0 3 1
A PDTabularIteratorDelegate.itercolumns() 0 3 1
A PDTabularMutatorDelegate.add_columns() 0 4 1
A PDTabularIteratorDelegate.columnnames() 0 3 1
A PDTabularIteratorDelegate.iterrows() 0 3 1
A PDTabularRetrieverDelegate.row() 0 3 1
A PDTabularRetrieverDelegate.column() 0 3 1
A PDTabularMutatorDelegate.add_column() 0 3 1
A PDTabularRetrieverDelegate.get_numerical_attributes() 0 3 1
1
import pandas as pd
2
from so_magic.data.interfaces import TabularRetriever, TabularIterator, TabularMutator
3
4
__all__ = ['BACKEND']
5
6
7
# User defined (engine dependent implementations of tabular operations)
8
9
class PDTabularRetrieverDelegate(TabularRetriever):
10
    """The observation object is the same as the one your return from 'from_json_lines'"""
11
12
    @classmethod
13
    def column(cls, identifier, data):
14
        return data.observations[identifier]
15
16
    @classmethod
17
    def row(cls, identifier, data):
18
        return data.observations.iloc[identifier]
19
20
    @classmethod
21
    def nb_columns(cls, data):
22
        return len(data.observations.columns)
23
24
    @classmethod
25
    def nb_rows(cls, data):
26
        return len(data.observations)
27
28
    @classmethod
29
    def get_numerical_attributes(cls, data):
30
        return data.observations._get_numeric_data().columns.values
31
32
33
class PDTabularIteratorDelegate(TabularIterator):
34
    """The observation object is the same as the one your return from 'from_json_lines'"""
35
36
    @classmethod
37
    def columnnames(cls, data):
38
        return list(data.observations.columns)
39
40
    @classmethod
41
    def iterrows(cls, data):
42
        return iter(data.observations.iterrows())
43
44
    @classmethod
45
    def itercolumns(cls, data):
46
        return iter(data.observations[column] for column in data.observations.columns)
47
48
49
class PDTabularMutatorDelegate(TabularMutator):
50
51
    @classmethod
52
    def add_column(cls, datapoints, values, new_attribute, **kwargs):
53
        datapoints.observations[new_attribute] = values
54
55
    @classmethod
56
    def add_columns(cls, datapoints, values, column_names, **kwargs):
57
        datapoints.observations = pd.concat([datapoints.observations, pd.DataFrame(data=values, columns=column_names)],
58
                                            axis=1)
59
60
61
BACKEND = {
62
    'backend_id': 'pd',
63
    'backend_name': 'pandas',
64
    'interfaces': [
65
        PDTabularRetrieverDelegate,
66
        PDTabularIteratorDelegate,
67
        PDTabularMutatorDelegate,
68
    ]
69
}
70