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()