Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
MOVINGPANDAS
https://github.com/anitagraser/movingpandas
Anita Graser
@underdarkGIS
Unfortunately not this kind of Panda …
MOVINGPANDAS
… but this:
MOVINGPANDAS
https://pandas.pydata.org
MOTIVATION
https://anitagraser.com/2016/09/18/movement-data-in-gis-issues-ideas/
Movement data is …
… geographic
… temporal
 Geographic features with
timestamps?
 Timeseries with geometries?
MOTIVATION...
GIS – AN OBVIOUS CHOICE?
704/05/2019
Simple Features
 Points
 No built-in logic @ chronological order & moving object identity
 Lines
 Only attributes for ...
Pandas
… developed in the context of financial modeling
 extensive set of tools for working with dates, times,
and time-i...
Trajectory
id: string
df: GeoDataFrame
crs: string
parent: Trajectory
__str__()
set_crs(crs)
has_parent(): boolean
to_line...
>>> import pandas as pd
>>> from geopandas import read_file
>>> from shapely.geometry import Polygon
>>> from trajectory i...
>>> trajectories = []
>>> for key, values in df.groupby(['trajectory_id']):
>>> trajectory = Trajectory(key, values)
>>> p...
>>> xmin, xmax, ymin, ymax = 116.3685035,116.3702945,39.904675,39.907728
>>> polygon = Polygon([(xmin,ymin), (xmin,ymax), ...
EXAMPLE:
TIME SERIES USE CASE IN AGRICULTURE
04/05/2019
Offset function
keep time/location & shift value
def apply_offset_...
LIVE DEMO ON MYBINDER.ORG
https://anitagraser.com/2018/11/18/movement-data-in-gis-16-towards-pure-python-trajectories-usin...
Trajectools plugin
for Processing toolbox
MOVINGPANDAS INTEGRATION IN QGIS
https://anitagraser.com/2019/02/02/movement-dat...
1704/05/2019
https://anitagraser.com/2019/01/26/movement-data-in-gis-19-splitting-trajectories-by-date/
1804/05/2019
https://anitagraser.com/2019/01/26/movement-data-in-gis-19-splitting-trajectories-by-date/
 Looking for contributors  talks & workshops to spread the word
 More features & tests
 Create a MovingPandas Python p...
anita.graser@ait.ac.at
@underdarkGIS
anitagraser.com
ANITA GRASER
MovingPandas at PyDays Vienna 2019
Upcoming SlideShare
Loading in …5
×

MovingPandas at PyDays Vienna 2019

380 views

Published on

This talk presents MovingPandas, a new Python library for dealing with movement data.
Movement data analysis is a high-interest topic in many different scientific domains. Even though Python is the scripting language of choice for many analysts, there is no Python library available so far that would enable researchers and practitioners to interact with and analyze movement data efficiently. MovingPandas development is based on an analysis of state-of-the-art conceptual frameworks and existing implementations (in PostGIS, Hermes, and the R package trajectories). We describe how MovingPandas avoids limitations of SimpleFeature based movement data models commonly used in the GIS (geographic information systems) world. Finally, we present the current state of the MovingPandas implementation and demonstrate its use in stand-alone Python scripts, as well as within the context of the desktop GIS application QGIS. This work represents the first steps towards a general-purpose Python library that enables researchers and practitioners in the GIS field and beyond to handle and analyze movement data more efficiently.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

MovingPandas at PyDays Vienna 2019

  1. 1. MOVINGPANDAS https://github.com/anitagraser/movingpandas Anita Graser @underdarkGIS
  2. 2. Unfortunately not this kind of Panda … MOVINGPANDAS
  3. 3. … but this: MOVINGPANDAS https://pandas.pydata.org
  4. 4. MOTIVATION https://anitagraser.com/2016/09/18/movement-data-in-gis-issues-ideas/
  5. 5. Movement data is … … geographic … temporal  Geographic features with timestamps?  Timeseries with geometries? MOTIVATION e.g. id,x,y,t,state,type_code a,11.0,2.0,2012-01-17T12:33:51Z,walking,1 a,12.0,3.0,2012-01-17T12:36:11Z,walking,1 a,10.0,3.0,2012-01-17T12:36:51Z,walking,2 b,10.0,2.0,2012-01-17T12:33:51Z,walking,2 b,11.0,3.0,2012-01-17T12:36:51Z,walking,2 c,12.0,1.0,2012-01-17T12:33:51Z,vehicle,1 c,10.0,2.0,2012-01-17T12:35:21Z,vehicle,1 c,11.0,3.0,2012-01-17T12:36:51Z,vehicle,1 ... https://anitagraser.com/2017/10/15/movement-data-in-gis-9-trajectory-data-models/
  6. 6. GIS – AN OBVIOUS CHOICE? 704/05/2019
  7. 7. Simple Features  Points  No built-in logic @ chronological order & moving object identity  Lines  Only attributes for whole trajectory (segment)  No timestamp for each location GIS – AN OBVIOUS CHOICE?
  8. 8. Pandas … developed in the context of financial modeling  extensive set of tools for working with dates, times, and time-indexed data GeoPandas … extends the datatypes used by pandas to allow spatial operations on geometric types  http://geopandas.org WHY PANDAS? https://anitagraser.com/2018/11/18/movement-data-in-gis-16-towards-pure-python-trajectories-using-geopandas/
  9. 9. Trajectory id: string df: GeoDataFrame crs: string parent: Trajectory __str__() set_crs(crs) has_parent(): boolean to_linestring(): shapely.geometry.LineString to_linestringm_wkt(): string get_start_location(): shapely.geometry.Point get_end_location(): shapely.geometry.Point get_bbox(): (minx, miny, maxx, maxy) tuple get_start_time(): datetime get_end_time(): datetime get_duration(): timedelta get_length(): float get_direction(): float get_row_at(timestamp, method='nearest'): pandas.Series get_position_at(timestamp, method='nearest'): shapely.geometry.Point get_linestring_between(timestamp1, timestamp2): shapely.geometry.LineString get_segment_between(timestamp1, timestamp2): Trajectory add_direction() add_speed() make_line(df): shapely.geometry.LineString clip(shapely.geometry.polygon): Trajectory intersection(fiona.feature): Trajectory MOVINGPANDAS TRAJECTORY CLASS Graser (in press) MovingPandas: Efficient Structures for Movement Data in Python. GI_Forum ‒ Journal of Geographic Information Science
  10. 10. >>> import pandas as pd >>> from geopandas import read_file >>> from shapely.geometry import Polygon >>> from trajectory import Trajectory >>> df = read_file('demodata_geolife.gpkg') >>> df['t'] = pd.to_datetime(df['t']) >>> df = df.set_index('t') >>> print("Finished reading {} rows".format(len(df))) Finished reading 5908 rows EXAMPLE: READING TRAJECTORY DATA FROM GEOPACKAGE Graser (in press) MovingPandas: Efficient Structures for Movement Data in Python. GI_Forum ‒ Journal of Geographic Information Science
  11. 11. >>> trajectories = [] >>> for key, values in df.groupby(['trajectory_id']): >>> trajectory = Trajectory(key, values) >>> print(trajectory) >>> trajectories.append(trajectory) >>> print("Finished creating {} trajectories".format(len(trajectories))) Trajectory 1 (2008-12-11 04:42:14 to 2008-12-11 05:15:46) | Size: 466 | Length: 6210.1m LINESTRING (116.391305 39.898573, 116.391317 39.898617, 116.390928 39.898613, ... Trajectory 2 (2009-06-29 07:02:25 to 2009-06-29 11:13:12) | Size: 897 | Length: 38728.7m LINESTRING (116.590957 40.071961, 116.590905 40.072007, 116.590879 40.072027, ... Trajectory 3 (2009-02-04 04:32:53 to 2009-02-04 11:20:12) | Size: 1810 | Length: 12739.2m LINESTRING (116.385689 39.899773, 116.385654 39.899651, 116.385548 39.899699, ... ... Finished creating 5 trajectories EXAMPLE: READING TRAJECTORY DATA FROM GEOPACKAGE Graser (in press) MovingPandas: Efficient Structures for Movement Data in Python. GI_Forum ‒ Journal of Geographic Information Science
  12. 12. >>> xmin, xmax, ymin, ymax = 116.3685035,116.3702945,39.904675,39.907728 >>> polygon = Polygon([(xmin,ymin), (xmin,ymax), (xmax,ymax), (xmax,ymin), (xmin,ymin)]) >>> intersections = [] >>> for key, values in df.groupby(['trajectory_id']): >>> traj = Trajectory(key, values) >>> for intersection in traj.clip(polygon): >>> intersections.append(intersection) >>> print("Found {} intersections".format(len(intersections))) Found 3 intersections EXAMPLE: … AND CLIPPING BY POLYGON Graser (in press) MovingPandas: Efficient Structures for Movement Data in Python. GI_Forum ‒ Journal of Geographic Information Science
  13. 13. EXAMPLE: TIME SERIES USE CASE IN AGRICULTURE 04/05/2019 Offset function keep time/location & shift value def apply_offset_seconds(self, column, offset): self.df[column] = self.df[column] .shift(offset, freq='1s’) https://anitagraser.com/2019/01/27/dealing-with-delayed-measurements-in-geopandas/
  14. 14. LIVE DEMO ON MYBINDER.ORG https://anitagraser.com/2018/11/18/movement-data-in-gis-16-towards-pure-python-trajectories-using-geopandas/
  15. 15. Trajectools plugin for Processing toolbox MOVINGPANDAS INTEGRATION IN QGIS https://anitagraser.com/2019/02/02/movement-data-in-gis-20-trajectools-v1-released/
  16. 16. 1704/05/2019 https://anitagraser.com/2019/01/26/movement-data-in-gis-19-splitting-trajectories-by-date/
  17. 17. 1804/05/2019 https://anitagraser.com/2019/01/26/movement-data-in-gis-19-splitting-trajectories-by-date/
  18. 18.  Looking for contributors  talks & workshops to spread the word  More features & tests  Create a MovingPandas Python package NEXT STEPS
  19. 19. anita.graser@ait.ac.at @underdarkGIS anitagraser.com ANITA GRASER

×