import geopandas as gpd import json import datetime from shapely.geometry import Point %matplotlib inline import matplotlib.pylab as pylab pylab.rcParams['figure.figsize'] = 16, 12 with open("LocationHistory.json", 'r') as fh: data = json.loads(fh.read()) locations = data['locations'] print len(locations) # first pass, gather activity types act_types = set() for loc in locations: try: activities = loc['activitys'][0]['activities'] assert len(activities) >= 1 for act in activities: act_type = act['type'] act_types.add(act_type) except: pass act_types = sorted(list(act_types)) print act_types def generate_locations(locations): for loc in locations: loc['lon'] = loc['longitudeE7'] * 0.0000001 loc['lat'] = loc['latitudeE7'] * 0.0000001 #loc['wkt'] = 'POINT({0} {1})'.format(loc['lon'], loc['lat']) loc['geometry'] = Point(loc['lon'], loc['lat']) loc['timestampSec'] = int(loc['timestampMs']) * 0.001 # ms to s loc['datetime'] = datetime.datetime.fromtimestamp(loc['timestampSec']).strftime('%Y-%m-%d %H:%M:%S') for typ in act_types: loc[typ] = 0 maxprob = 0 bestguess = "" try: activities = loc['activitys'][0]['activities'] assert len(activities) >= 1 # Look at confidence estimate for each activity for act in activities: conf = act['confidence'] act_type = act['type'] if conf > maxprob: maxprob = conf bestguess = act_type loc[act_type] = conf except: pass loc['likelyActivity'] = bestguess # Get rid of extraneous columns try: del loc['activitys'] except KeyError: pass try: del loc['latitudeE7'] del loc['longitudeE7'] del loc['timestampMs'] except KeyError: pass yield loc #test = pd.DataFrame(generate_locations(locations)) alldf = gpd.GeoDataFrame(generate_locations(locations), crs={'proj':'longlat', 'ellps':'WGS84', 'datum':'WGS84', 'no_defs':True}) alldf.head(3) df = alldf[alldf['accuracy'] < 50] print len(df) hits = df.sindex.intersection((-122.7147, 45.51435, -122.6708, 45.54110), objects=True) dfsub = gpd.GeoDataFrame([df.ix[hit.object] for hit in hits]) len(dfsub) dfsub.plot() !rm location_history.* df.to_file('location_history.shp')