Beispiel #1
0
def sleep_ranges(day):
    # FIXME: if DatetimeIndex gets vectorized strftime, use it
    day = util.contiguous_apply(
        day,
        day['awake'],
        lambda v, blk: pd.DataFrame({'t': [blk.index[0].strftime(util.dtfmt)],
                                     'awake': [v]}, index=blk.index[[0]]))
    return '[%s]' % '; '.join(
        map('...'.join,
            zip(day.ix[~day['awake'].astype(bool),'t'],
                day.ix[~day['awake'].shift().astype(bool),'t'])))
Beispiel #2
0
    soj = util.SojournsData.from_file(soj_path, awake_ranges)
    # XXX HACK
    if 'steps' not in soj.raw_data.columns:
        ag = util.ActiGraphDataTable.from_file(ag_path, awake_ranges)
        soj.raw_data['steps'] = ag.raw_data['Steps']
    soj.process()
    # FIXME integrate this better
    if args.soj_intermediate_path:
        soj.data.iloc[:-1].to_csv(str(args.soj_intermediate_path))
        util.contiguous_apply(
            soj.data, soj.data['awake'], lambda val, block: pd.DataFrame(
                {'counts': block['counts'].sum(),
                 'Dur': block['Dur'].sum(),
                 'METs': (block['Dur'] / block['Dur'].sum() *
                     block['METs']).sum(),
                 'ActivityLevel': ','.join(block['ActivityLevel'].dropna()
                     .unique())},
                index=[block.index[0]]) if val and not np.isnan(val) else
            pd.DataFrame(
                {'counts': [], 'Dur': [], 'METs': [], 'ActivityLevel':[]}
            )).to_csv(
            str(args.soj_intermediate_path.with_name(
                    args.soj_intermediate_path.name.replace(
                        args.soj_intermediate_path.suffix,
                        '_squashed'+args.soj_intermediate_path.suffix))))
    if awake_path and not awake_path.exists():
        soj.awake_ranges.to_file(awake_path)
    summary = ActivitySummary.from_sojourns(soj, subj)
    outpath = soj_path.with_name(soj_path.stem + '_processed.csv')
    summary.to_file(outpath)