Exemple #1
0
def person_map(curlocs, rg, global_opmap):
    """ Generate individual's map
    """
    assert isinstance(curlocs, list)

    iops = []
    for node in global_opmap.nodes():
        s = [node]
        s.extend(curlocs)
        if radius_of_gyration(s) <= rg:
            iops.append(node)

    return iops
def accu_rg(movdata, bsmap, output):
    """ Accumulative R_g over multiple days
    """
    bsmap = BaseStationMap(bsmap)

    dates = {'0820': 0, '0821': 1, '0822': 2, '0823': 3, '0824': 4, '0825': 5, '0826': 6}

    res = {}
    coords = {}
    for person in movement_reader(open(movdata, 'rb'), bsmap):
        uid = person.id
        tdate = person.which_day()
        if tdate not in dates:
            continue

        if uid not in coords:
            coords[uid] = person.coordinates
        else:
            coords[uid].extend(person.coordinates)

        if uid not in res:
            res[uid] = np.empty(7)
            res[uid].fill(-1)

        res[uid][dates[tdate]] = radius_of_gyration(coords[uid])

    res2 = []
    for uid in res:
        v = res[uid]
        v2 = []
        for n in v:
            if n == -1:
                try:
                    v2.append(v2[-1])
                except:
                    v2.append(0)
            else:
                v2.append(n)
        res2.append((uid, v2))
    res2 = sorted(res2, key=lambda x: x[0])

    ofile = open(output, 'wb')
    [ofile.write('%d,%s\n' % (i[0], ','.join(['%.4f' % j for j in i[1]]))) for i in res2]
    ofile.close()