时空矢量数据处理与分析软件包。

sptemp的Python项目详细描述


sptemp

用于表示、处理和分析时空矢量数据的python包。

此软件包的文档位于: https://baumanndaniel.github.io/sptemp/

包的源代码位于: https://github.com/BaumannDaniel/sptemp

这个包是由daniel baumann创建的,baumann-dan@outlook.com

先决条件

可以在不依赖项的情况下安装包,但是要使用包的全部功能,需要四个第三方包。

  • dateutil:时间段所需。from_iso()方法
  • shapely:插值、移动几何和分析模块所需
  • pyproj:如果使用坐标系,则需要
  • pandas:分析模块所需

开始

包提供了表示时间戳数据的类,以及离散和连续变化的值。

创建一个移动实数

在下面的示例中,将从带时间戳的浮点创建一个移动实数。例如,这些数据可以表示温度时间序列或股票价格。

importdatetimeasdtfromsptempimportzeitfromsptemp.interpolationimportICollectionasICtso1=zeit.TS_Object(1.5,dt.datetime(2019,7,4,14,15,10))tso2=zeit.TS_Object(5.2,dt.datetime(2019,7,4,14,15,20))tso3=zeit.TS_Object(2.4,dt.datetime(2019,7,4,14,15,35))tso4=zeit.TS_Object(8.9,dt.datetime(2019,7,4,14,15,50))tsu1=zeit.TS_Unit(IC.linear,zeit.Time_Period(dt.datetime(2019,7,4,14,15,10),dt.datetime(2019,7,4,14,15,50)))ip1=zeit.Interpolator([tsu1])mvr=zeit.Moving_Object([tso1,tso2,tso3,tso4],ip1)printmvr.interpolate(dt.datetime(2019,7,4,14,15,17)).value# == 4.09

创建移动点几何图形

在这个例子中,一个移动点是从有时间戳的形状点几何创建的。

importdatetimeasdtimportshapely.geometryassgimportsptemp.moving_geometryasmgfromsptempimportzeitfromsptemp.interpolationimportICollectionasICfromsptemp.interpolationimportIPointtsp1=mg.TS_Point(sg.Point(1,1),dt.datetime(2019,7,4,14,15,10))tsp2=mg.TS_Point(sg.Point(2,3),dt.datetime(2019,7,4,14,15,15))tsp3=mg.TS_Point(sg.Point(5,4),dt.datetime(2019,7,4,14,15,20))tsp4=mg.TS_Point(sg.Point(6,2),dt.datetime(2019,7,4,14,15,26))tsp5=mg.TS_Point(sg.Point(7,2),dt.datetime(2019,7,4,14,15,30))tsu1=zeit.TS_Unit(IPoint.linear_point,zeit.Time_Period(dt.datetime(2019,7,4,14,15,10),dt.datetime(2019,7,4,14,15,21)))tsu2=zeit.TS_Unit(IC.constant,zeit.Time_Period(dt.datetime(2019,7,4,14,15,21),dt.datetime(2019,7,4,14,15,24)))tsu3=zeit.TS_Unit(IPoint.linear_point,zeit.Time_Period(dt.datetime(2019,7,4,14,15,24),dt.datetime(2019,7,4,14,15,30)))ip1=zeit.Interpolator([tsu1,tsu2,tsu3])mvp=mg.Moving_Point([tsp1,tsp2,tsp3,tsp4,tsp5],ip1)printmvp.interpolate(dt.datetime(2019,7,4,14,15,17)).value# == sg.Point(3.2,3.4)

按照线串定义的路线创建移动点几何图形

在本例中,移动点遵循由形状为线条的几何图形定义的路线。

importdatetimeasdtimportshapely.geometryassgimportsptemp.moving_geometryasmgfromsptempimportzeitfromsptemp.interpolationimportIPointtsp1=mg.TS_Point(sg.Point(1,1),dt.datetime(2019,7,4,14,15,10))tsp2=mg.TS_Point(sg.Point(7,2),dt.datetime(2019,7,4,14,15,30))tsu1=zeit.TS_Unit(IPoint.curve_point,zeit.Time_Period(dt.datetime(2019,7,4,14,15,10),dt.datetime(2019,7,4,14,15,30)))ip1=zeit.Interpolator([tsu1])mvp2=mg.Moving_Point([tsp1,tsp2],ip1)lr=sg.LineString([(1,1),(2,3),(5,4),(6,2),(7,2)])printmvp2.interpolate(dt.datetime(2019,7,4,14,15,17),lr).value# = sg.Point(2.74564305 3.24854768)

创建移动线串几何图形

在此示例中,将创建连续移动的线串几何图形。

importdatetimeasdtimportshapely.geometryassgimportsptemp.moving_geometryasmgfromsptempimportzeitfromsptemp.interpolationimportICurvetsl1=mg.TS_LineString(sg.LineString([(1,2),(3,1),(7,4)]),dt.datetime(2019,7,4,14,15,10))tsl2=mg.TS_LineString(sg.LineString([(1,1),(2,0.5),(3,1),(5,1),(6,2),(7,3)]),zeit.Time_Period(dt.datetime(2019,7,4,14,15,18),dt.datetime(2019,7,4,14,15,22)))tsl3=mg.TS_LineString(sg.LineString([(1,1),(3,1.5),(5,3),(7,4)]),dt.datetime(2019,7,4,14,15,30))tsu1=zeit.TS_Unit(ICurve.basic_linear,zeit.Time_Period(dt.datetime(2019,7,4,14,15,10),dt.datetime(2019,7,4,14,15,30)))ip1=zeit.Interpolator([tsu1])mvl=mg.Moving_LineString([tsl1,tsl2,tsl3],ip1)printmvl.interpolate(dt.datetime(2019,7,4,14,15,15)).value.coords[:]# = [(1.0, 1.375), (2.375, 0.6875), (3.2820250483634053, 1.211518786272554),# (5.036526791961998, 1.589895093971498), (6.018263395980998, 2.4824475469857488), (7.0, 3.375)]

创建移动的线性环几何图形

在此示例中,将创建连续移动的线性环形几何图形。

importdatetimeasdtimportshapely.geometryassgimportsptemp.moving_geometryasmgfromsptempimportzeitfromsptemp.interpolationimportIRingtslr1=mg.TS_LinearRing(sg.LinearRing([(1,1),(7,1.5),(6,4),(3,3),(1,1)]),dt.datetime(2019,7,4,14,15,10))tslr2=mg.TS_LinearRing(sg.LinearRing([(2,1),(4,0.5),(6.5,2),(6,4),(4,4),(4,2),(2,2),(2,1)]),dt.datetime(2019,7,4,14,15,18))tslr3=mg.TS_LinearRing(sg.LinearRing([(3,2),(6,2),(5.5,3.5),(3,3),(3,2)]),dt.datetime(2019,7,4,14,15,30))tsu1=zeit.TS_Unit(IRing.basic_linear,zeit.Time_Period(dt.datetime(2019,7,4,14,15,10),dt.datetime(2019,7,4,14,15,30)))ip1=zeit.Interpolator([tsu1])mvlr=mg.Moving_LinearRing([tslr1,tslr2,tslr3],ip1)printmvlr.interpolate(dt.datetime(2019,7,4,14,15,15)).value.coords[:]# = [(3.625, 3.625), (3.25, 2.0), (1.625, 1.625), (3.875, 1.1875), (4.969669914110089, 1.2633252147247767),# (6.3125, 2.75), (5.428975315279473, 3.809658438426491), (3.625, 3.625)]

实现自己的插值函数

sptemp包的用户可以为移动对象提供自己的插值函数。 这些函数必须至少有三个参数:

  • start\u ts(ts\u对象):sptemp.zeit.ts\u对象类或其子类之一的实例。
  • {STR 1 } $ Enthts (TSyObjor):SPTH.ZEIT.TSO对象类的一个实例,或其子类之一,它在时间轴上启动后放置。
  • time(datetime.datetime):指定函数插入值的时间的datetime对象。

然后,该函数可以定义任意数量的附加参数,然后由用户传递给moving_object.interpolate()方法。 函数必须返回ts_对象实例或ts_对象类的子类的实例。或者,该函数也可以不返回任何值。

在下面的示例中,定义了一个插值函数“decelerate”,它为移动点提供插值功能。

importdatetimeasdtimportshapely.geometryassgimportsptemp.moving_geometryasmgfromsptempimportzeitdefdecelerate(start_ts,end_ts,time):decelerate_factor=1+((end_ts.start_time()-time).total_seconds()/(end_ts.start_time()-start_ts.end_time()).total_seconds())iftime<end_ts.start_time()else1.0t=(time-start_ts.end_time()).total_seconds()*decelerate_factor/(end_ts.start_time()-start_ts.end_time()).total_seconds()t_x=(1-t)*start_ts.value.x+t*end_ts.value.xt_y=(1-t)*start_ts.value.y+t*end_ts.value.yifstart_ts.has_zandend_ts.has_z:t_z=(1-t)*start_ts.value.z+t*end_ts.value.zreturnmg.TS_Point(sg.Point(t_x,t_y,t_z),time)else:returnmg.TS_Point(sg.Point(t_x,t_y),time)tsp1=mg.TS_Point(sg.Point(1,1),dt.datetime(2019,7,4,14,15,10))tsp2=mg.TS_Point(sg.Point(2,3),dt.datetime(2019,7,4,14,15,15))tsp3=mg.TS_Point(sg.Point(5,4),dt.datetime(2019,7,4,14,15,20))tsp4=mg.TS_Point(sg.Point(6,2),dt.datetime(2019,7,4,14,15,26))tsp5=mg.TS_Point(sg.Point(7,2),dt.datetime(2019,7,4,14,15,30))tsu1=zeit.TS_Unit(decelerate,zeit.Time_Period(dt.datetime(2019,7,4,14,15,10),dt.datetime(2019,7,4,14,15,30)))ip1=zeit.Interpolator([tsu1])mvp3=mg.Moving_Point([tsp1,tsp2,tsp3,tsp4,tsp5],ip1)printmvp3.interpolate(dt.datetime(2019,7,4,14,15,20)).value# == sg.Point(5,4)

创建spt_dataframe对象

“sptemp”包的分析模块提供了“spt_dataframe”类,使用该类可以用 关系数据结构。

在下面的例子中,两个浮标漂浮在水中并记录空气和水温的数据用 一个spt_数据帧。

importdatetimeasdtimportpyprojimportpandasimportshapely.geometryassgimportsptemp.moving_geometryasmgfromsptempimportzeitfromsptemp.analysisimportSPT_DataFramefromsptemp.interpolationimportICollectionasICfromsptemp.interpolationimportIPointutm32n=pyproj.Proj(init="epsg:32632")ip=zeit.Interpolator([zeit.TS_Unit(IC.linear,zeit.Time_Period(dt.datetime(2019,7,4,14,15,0),dt.datetime(2019,7,4,15,0,0)))])ip2=zeit.Interpolator([zeit.TS_Unit(IPoint.linear_point,zeit.Time_Period(dt.datetime(2019,7,4,14,15,0),dt.datetime(2019,7,4,15,0,0)))])air_temp1=zeit.Moving_Object([zeit.TS_Object(22.4,dt.datetime(2019,7,4,14,15,10)),zeit.TS_Object(22.7,dt.datetime(2019,7,4,14,28,45)),zeit.TS_Object(21.9,dt.datetime(2019,7,4,14,47,22))],ip)air_temp2=zeit.Moving_Object([zeit.TS_Object(21.4,dt.datetime(2019,7,4,14,17,30)),zeit.TS_Object(21.7,dt.datetime(2019,7,4,14,42,32))],ip)water_temp1=zeit.Moving_Object([zeit.TS_Object(19.3,dt.datetime(2019,7,4,14,15,20)),zeit.TS_Object(19.1,dt.datetime(2019,7,4,14,28,45))],ip)water_temp2=zeit.Moving_Object([zeit.TS_Object(18.8,dt.datetime(2019,7,4,14,17,30)),zeit.TS_Object(19.2,dt.datetime(2019,7,4,14,42,45))],ip)mvp1=mg.Moving_Point([mg.TS_Point(sg.Point(473925.42,6354541.11),dt.datetime(2019,7,4,14,15,10),utm32n),mg.TS_Point(sg.Point(473953.76,6354877.23),dt.datetime(2019,7,4,14,30,0),utm32n),mg.TS_Point(sg.Point(473967.12,6354854.73),dt.datetime(2019,7,4,14,50,0),utm32n)],ip2)mvp2=mg.Moving_Point([mg.TS_Point(sg.Point(474176.89,6354701.98),dt.datetime(2019,7,4,14,17,20),utm32n),mg.TS_Point(sg.Point(474533.54,6354770.11),dt.datetime(2019,7,4,14,50,0),utm32n)],ip2)id=["a","b"]air_temp=[air_temp1,air_temp2]water_temp=[water_temp1,water_temp2]geometry=[mvp1,mvp2]df=pandas.DataFrame({"id":id,"air_temp":air_temp,"water_temp":water_temp,"geometry":geometry})spt_df=SPT_DataFrame(df)printspt_df.interpolate(dt.datetime(2019,7,4,14,30,0)).dataframe
idwater_tempair_tempgeometry
aNone22.6363sg.Point(473953.76, 6354877.23)
b18.99821.5498sg.Point(474315.1828571429, 6354728.397755102)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓在java中加入字符串组以创建复合字符串   java系统甚至不点击“下一步”或“上一步”按钮就将我返回到上一页,而不是进入下一页   java如何在arrayList中获取特定列的不同值   CXF GZIP REST JAVA   Java:使用大量半恒定标志检查优化循环中的循环?   java如何在两个应用程序之间进行会话管理?   java SVG文件使用蜡染(但没有轴线)转换为PNG   使用协议缓冲区和内部数据模型的java   java如何在logtag 安卓中打印和查看字符串的值   javascript如何在NodeJs中应用Java/Spring的分层架构?   java Spring URL在JSP中编码不正确   模式对话框后面的java工具提示   java WSRPC生成日历对象而不是日期   在对象外部无法识别类变量   java将图像从文件读/写到BuffereImage的最快方法?   JavaSpring数据存储库对具有不同Id的子类使用抽象超类   安全在Java 5.0上运行web应用程序服务器有危险吗?