[8d2107]: / rx_transformer.py

Download this file

56 lines (46 with data), 1.7 kB

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