Esempio n. 1
0
File: base.py Progetto: UKDRI/dcarte
def process_physiology(self):
    _d1 = map_devices(self.datasets['vital_signs'],
                      self.datasets['device_types'])
    _d2 = map_devices(self.datasets['blood_pressure'],
                      self.datasets['device_types'])
    bp_types = np.array(['diastolic_value', 'systolic_value'])
    df = [_d1]

    for bp_type in bp_types:
        cols = _d2.columns[~_d2.columns.str.startswith(bp_type)]
        _tmp = _d2[cols].copy()
        _tmp.source = bp_types[bp_types != bp_type][0].replace('_value', '_bp')
        _tmp.columns = _d1.columns
        df.append(_tmp)
    df = pd.concat(df)
    dtypes = {
        'device_type': 'category',
        'patient_id': 'category',
        'home_id': 'category',
        'unit': 'category',
        'source': 'category',
        'value': 'float'
    }
    df = df.astype(dtypes).reset_index(drop=True)
    df = localize_time(df, ['start_date'])

    return df
Esempio n. 2
0
File: base.py Progetto: UKDRI/dcarte
def process_kitchen(self):
    # TODO: add sensor type as a column
    activity = self.datasets['activity']
    activity = localize_time(activity, ['start_date'])
    doors = self.datasets['doors']
    appliances = map_devices(self.datasets['appliances'],
                             self.datasets['device_types'])
    doors = doors[(doors.location_name == 'fridge door')
                  & (doors.transition == 'opened>closed')]
    activity = activity[activity.location_name.isin(['kitchen',
                                                     'dining room'])]
    activity.insert(0, 'device_type', 'pir')
    doors.insert(0, 'device_type', 'door')
    appliances.value = appliances.value.astype(str)\
                                 .replace({'microwave-use': 'oven-use',
                                 'toaster-use': 'oven-use', 'iron-use': np.nan,
                                 'multi-use socket-use': np.nan})
    doors = doors[['patient_id', 'start_date', 'device_type','location_name']]\
                   .rename({'location_name': 'activity'}, axis=1)
    activity = activity[['patient_id', 'start_date', 'device_type', 'location_name']]\
                        .rename({'location_name': 'activity'}, axis=1)
    appliances = appliances[['patient_id', 'start_date', 'device_type', 'value']]\
                            .rename({'value': 'activity'}, axis=1)
    kitchen = pd.concat([doors, activity, appliances.dropna()])
    kitchen = kitchen[kitchen.patient_id != ''].sort_values(
        ['patient_id', 'start_date'])
    kitchen = process_transition(kitchen, ['patient_id'], 'start_date',
                                 'activity', ['device_type'])
    return kitchen.reset_index(drop=True)
Esempio n. 3
0
File: base.py Progetto: UKDRI/dcarte
def process_motion(self):
    activity = self.datasets['activity']
    activity = localize_time(activity, ['start_date'])
    entryway = self.datasets['entryway']
    bed_occupancy = self.datasets['bed_occupancy']
    fact = ['patient_id', 'location_name', 'start_date']
    motion = pd.concat([activity[fact], entryway[fact], bed_occupancy[fact]]).\
                        sort_values(['patient_id', 'start_date'])

    mapping = {
        'bathroom1': 'Bathroom',
        'WC1': 'Bathroom',
        'kitchen': 'Kitchen',
        'hallway': 'Hallway',
        'corridor1': 'Hallway',
        'dining room': 'Lounge',
        'living room': 'Lounge',
        'lounge': 'Lounge',
        'bedroom1': 'Bedroom',
        'front door': 'Front door',
        'back door': 'Back door'
    }
    motion.location_name = motion.location_name.replace(mapping)

    motion = motion[~motion.location_name.
                    isin(['office', 'conservatory', 'study', 'cellar'])]
    return motion.reset_index(drop=True)
Esempio n. 4
0
def process_physiology(self):
    df = self.datasets['observation']
    device_type = self.datasets['device_type']
    devices = [
        '8310-5', '150456', '55284-4', '29463-7', '251837008', '163636005',
        '8462-4', '8480-6', '8867-4'
    ]
    df = df.query('type in @devices')
    mapping = device_type.set_index('code').display.to_dict()
    mapping = {**mapping, **{'8867': 'raw_heart_rate'}}
    columns = [
        'datetimeObserved', 'type', 'subject', 'valueQuantity', 'valueUnit'
    ]
    df = df[columns].assign(source=df.type.replace(mapping))
    mapper = {
        'Body temperature': 'raw_body_temperature',
        'Total body water': 'raw_total_body_water',
        'Systolic blood pressure': 'systolic_bp',
        'Diastolic blood pressure': 'diastolic_bp',
        'MDC_PULS_OXIM_SAT_O2': 'raw_oxygen_saturation',
        'O/E - muscle mass': 'raw_body_muscle_mass',
        'Body weight': 'raw_body_weight'
    }
    df.source = df.source.replace(mapper)
    df.columns = [
        'start_date', 'device_type', 'patient_id', 'value', 'unit', 'source'
    ]
    df = localize_time(df, ['start_date'])
    return df
Esempio n. 5
0
def process_light(self):
    df = self.datasets['observation']
    columns = ['datetimeObserved','type','subject','location','valueQuantity','valueUnit']
    df = df.query('type == "56242006"')[columns]
    df.columns = ['start_date', 'device_type', 'patient_id','location_name','value', 'unit']
    df = df.assign(source='raw_light')
    df = localize_time(df,['start_date'])
    return df    
Esempio n. 6
0
File: base.py Progetto: UKDRI/dcarte
def process_doors(self):
    groupby = ['patient_id', 'location_name']
    datetime = 'start_date'
    value = 'value'
    covariates = ['location_name']
    df = self.datasets['door']
    df = localize_time(df, ['start_date'])
    doors = process_transition(df, groupby, datetime, value, covariates)
    return doors.drop('location_name', axis=1).reset_index()
Esempio n. 7
0
def process_motion(obj):
    df = obj.datasets['observation']
    df = (df[['subject', 'location', 'datetimeObserved',
              'type']].query('type == "272149007-2"').dropna(
                  subset=['location']).drop(columns='type'))
    df.columns = ['patient_id', 'location_name', 'start_date']
    df = localize_time(df, ['start_date'])
    df = df.drop_duplicates().reset_index()
    return df
Esempio n. 8
0
File: base.py Progetto: UKDRI/dcarte
def process_habitat(self):
    df = map_devices(self.datasets['environmental'],
                     self.datasets['device_types'])
    df = df[df.location_name != ''].reset_index(drop=True)
    dtypes = {
        'home_id': 'category',
        'location_id': 'category',
        'unit': 'category',
        'location_name': 'category',
        'source': 'category',
        'value': 'float'
    }
    df = df.astype(dtypes)
    df = localize_time(df, ['start_date'])
    return df
Esempio n. 9
0
def process_doors(self):
    df = self.datasets['observation']
    columns = ['subject', 'location', 'datetimeObserved', 'valueState', 'type']
    df = (df[columns].query('type == "224751004"').dropna(
        subset=['location']).drop(columns='type'))
    df.columns = ['patient_id', 'location_name', 'start_date', 'value']
    df.value = df.value.replace({'Close': 'closed', 'Open': 'opened'})
    groupby = ['patient_id', 'location_name']
    datetime = 'start_date'
    value = 'value'
    covariates = None
    df = localize_time(df, ['start_date'])
    doors = process_transition(df, groupby, datetime, value, covariates)
    doors = doors.reset_index()
    doors.location_name = doors.location_name.str.lower()
    return doors
Esempio n. 10
0
File: base.py Progetto: UKDRI/dcarte
def process_sleep(self):
    """process_sleep force sleep_mat to 1min frequency and localise time 

    :return: loclaized sleep metrics timeseries 
    :rtype: pd.DataFrame
    """
    sleep_mat = self.datasets['sleep_mat']
    sleep_mat.snoring = sleep_mat.snoring.astype(bool)
    sleep_mat = (sleep_mat.set_index('start_date').groupby(
        ['patient_id', 'home_id']).resample('1T').agg({
            'snoring':
            'sum',
            'heart_rate':
            'mean',
            'respiratory_rate':
            'mean'
        }).dropna().reset_index())
    sleep_mat = localize_time(sleep_mat, ['start_date'])
    return sleep_mat
Esempio n. 11
0
def process_sleep(self):
    sleep_mat = self.datasets['sleep_mat']
    sleep_mat = localize_time(sleep_mat, ['start_date'])
    return sleep_mat