Diff of /rx_transformer.py [000000] .. [8d2107]

Switch to unified view

a b/rx_transformer.py
1
import numpy as np
2
from sklearn.base import TransformerMixin
3
4
import extract_data
5
import loader
6
7
class RX_Transformer(TransformerMixin):
8
    """
9
10
    """ 
11
    def __init__(self):
12
        pass
13
14
    def fit(self, X, y=None, **fit_params):
15
        self.all_med_classes = {}
16
        self.dimensionality = 0
17
        for empi in X:
18
            for med in self.get_med_classes(empi):
19
                if med not in self.all_med_classes:
20
                    self.all_med_classes[med] = self.dimensionality
21
                    self.dimensionality += 1
22
        return self
23
24
    def get_feature_names(self):
25
        reverse_dict = {}
26
        for med in self.all_med_classes.keys():
27
            reverse_dict[self.all_med_classes[med]] = med 
28
29
        features = []
30
        for i in range(self.dimensionality):
31
            features.append(reverse_dict[i])
32
        return np.asarray(features)
33
34
    def transform(self, X, **transform_params):
35
        transformed_X = map(self.get_med_string, X)
36
        return np.array(transformed_X)
37
38
    def get_med_vector(self, empi):
39
        vector = np.zeros(self.dimensionality)
40
        for med in self.get_med_classes(empi):
41
            vector[self.all_med_classes[med]] = 1.0
42
        return vector 
43
44
    def get_med_classes(self, empi):
45
        patient = loader.get_patient_by_EMPI(empi)
46
        operation_date = extract_data.get_operation_date(patient)
47
        medications = []
48
        for med in patient['Med']:
49
            try:
50
                date = parse_m_d_y(med['Medication_Date'])
51
                if date <= procedure_date:
52
                    medications.extend(med['RXNORM_CLASSES'])
53
            except:
54
                pass
55
        return medications