leaflet_compare -> polars
This commit is contained in:
@@ -802,14 +802,6 @@ def interactive_histoall(theworkouts, histoparam, includereststrokes,
|
|||||||
|
|
||||||
rowdata = rowdata.fill_nan(None).drop_nulls()
|
rowdata = rowdata.fill_nan(None).drop_nulls()
|
||||||
|
|
||||||
#rowdata = dataprep.filter_df(rowdata, 'spm', spmmin, largerthan=True)
|
|
||||||
#rowdata = dataprep.filter_df(rowdata, 'spm', spmmax, largerthan=False)
|
|
||||||
|
|
||||||
#rowdata = dataprep.filter_df(
|
|
||||||
# rowdata, 'driveenergy', workmin, largerthan=True)
|
|
||||||
#rowdata = dataprep.filter_df(
|
|
||||||
# rowdata, 'driveenergy', workmax, largerthan=False)
|
|
||||||
|
|
||||||
if rowdata.is_empty():
|
if rowdata.is_empty():
|
||||||
return "", "No Valid Data Available"
|
return "", "No Valid Data Available"
|
||||||
|
|
||||||
@@ -914,7 +906,7 @@ def leaflet_chart_compare(course, workoutids, labeldict={}, startenddict={}):
|
|||||||
w = Workout.objects.get(id=id)
|
w = Workout.objects.get(id=id)
|
||||||
rowdata = rdata(w.csvfilename)
|
rowdata = rdata(w.csvfilename)
|
||||||
time = rowdata.df['TimeStamp (sec)']
|
time = rowdata.df['TimeStamp (sec)']
|
||||||
df = pd.DataFrame({
|
df = pl.DataFrame({
|
||||||
'workoutid': id,
|
'workoutid': id,
|
||||||
'lat': rowdata.df[' latitude'],
|
'lat': rowdata.df[' latitude'],
|
||||||
'lon': rowdata.df[' longitude'],
|
'lon': rowdata.df[' longitude'],
|
||||||
@@ -924,26 +916,28 @@ def leaflet_chart_compare(course, workoutids, labeldict={}, startenddict={}):
|
|||||||
except (Workout.DoesNotExist, KeyError): # pragma: no cover
|
except (Workout.DoesNotExist, KeyError): # pragma: no cover
|
||||||
pass
|
pass
|
||||||
try:
|
try:
|
||||||
df = pd.concat(data, axis=0)
|
df = pl.concat(data, rechunk=True)
|
||||||
except ValueError: # pragma: no cover
|
except ValueError: # pragma: no cover
|
||||||
df = pd.DataFrame()
|
df = pl.DataFrame()
|
||||||
|
|
||||||
latmean, lonmean, coordinates = course_coord_center(course)
|
latmean, lonmean, coordinates = course_coord_center(course)
|
||||||
|
|
||||||
course_dict = GeoCourseSerializer(course).data
|
course_dict = GeoCourseSerializer(course).data
|
||||||
|
|
||||||
# Throw out 0,0
|
# Throw out 0,0
|
||||||
df = df.replace(0, np.nan)
|
df = df.with_columns(
|
||||||
df = df.loc[(df != 0).any(axis=1)]
|
(pl.col("lat")+pl.col("lon")).alias("latlon")
|
||||||
df.fillna(method='bfill', axis=0, inplace=True)
|
)
|
||||||
df.fillna(method='ffill', axis=0, inplace=True)
|
df =df.filter(pl.col("latlon")!=0,)
|
||||||
|
df = df.fill_nan(None)
|
||||||
|
df = df.select(pl.all()).interpolate()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
lat = df['lat']
|
lat = df['lat']
|
||||||
lon = df['lon']
|
lon = df['lon']
|
||||||
except KeyError: # pragma: no cover
|
except KeyError: # pragma: no cover
|
||||||
return [0, "invalid coordinate data"]
|
return [0, "invalid coordinate data"]
|
||||||
if lat.empty or lon.empty: # pragma: no cover
|
if lat.is_empty() or lon.is_empty(): # pragma: no cover
|
||||||
return [0, "invalid coordinate data"]
|
return [0, "invalid coordinate data"]
|
||||||
|
|
||||||
colors = itertools.cycle(palette)
|
colors = itertools.cycle(palette)
|
||||||
@@ -955,7 +949,7 @@ def leaflet_chart_compare(course, workoutids, labeldict={}, startenddict={}):
|
|||||||
trajectories = []
|
trajectories = []
|
||||||
|
|
||||||
for id, color in items:
|
for id, color in items:
|
||||||
group = df[df['workoutid'] == int(id)].copy()
|
group = df.filter(pl.col("workoutid") == int(id))
|
||||||
try:
|
try:
|
||||||
startsecond, endsecond = startenddict[id]
|
startsecond, endsecond = startenddict[id]
|
||||||
except KeyError: # pragma: no cover
|
except KeyError: # pragma: no cover
|
||||||
@@ -967,17 +961,14 @@ def leaflet_chart_compare(course, workoutids, labeldict={}, startenddict={}):
|
|||||||
except KeyError: # pragma: no cover
|
except KeyError: # pragma: no cover
|
||||||
label = str(id)
|
label = str(id)
|
||||||
|
|
||||||
group.sort_values(by='time', ascending=True, inplace=True)
|
group = group.sort("time")
|
||||||
group.dropna(axis=0, how='any', inplace=True)
|
|
||||||
if endsecond > 0:
|
if endsecond > 0:
|
||||||
group['time'] = group['time'] - startsecond
|
group = group.with_columns((pl.col("time")-startsecond))
|
||||||
mask = group['time'] < 0
|
group = group.filter(pl.col("time")>0)
|
||||||
group.mask(mask, inplace=True)
|
group = group.filter(pl.col("time")<endsecond-startsecond)
|
||||||
mask = group['time'] > (endsecond-startsecond)
|
|
||||||
group.mask(mask, inplace=True)
|
|
||||||
|
|
||||||
lat = group['lat'].dropna()
|
lat = group['lat'].fill_nan(None).drop_nulls().to_list()
|
||||||
lon = group['lon'].dropna()
|
lon = group['lon'].fill_nan(None).drop_nulls().to_list()
|
||||||
|
|
||||||
coordinates = zip(lat, lon)
|
coordinates = zip(lat, lon)
|
||||||
|
|
||||||
@@ -996,7 +987,7 @@ def leaflet_chart_compare(course, workoutids, labeldict={}, startenddict={}):
|
|||||||
'trajectories': trajectories,
|
'trajectories': trajectories,
|
||||||
}
|
}
|
||||||
|
|
||||||
script, div = get_chart("/mapcompare", mapdata)
|
script, div = get_chart("/mapcompare", mapdata, debug=True)
|
||||||
|
|
||||||
return script, div
|
return script, div
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user