人工智能与地理大数据实验--出租车GPS数据—时空大数据Python处理基础(一 ...

打印 上一主题 下一主题

主题 546|帖子 546|积分 1638

情况:Windows 10 专业版 + Python 3.9.1 + Anaconda 2020( 4.8.2)
    系列文章:
  人工智能与地理大数据实验--出租车GPS数据—时空大数据Python处理基础(一)
  人工智能与地理大数据实验--出租车GPS数据—时空大数据Python处理基础(二)
  
目录
一、实验目标和内容
(一)实验目标
(二)实验内容
二、数据挖掘算法
(一)算法模子先容
三、输入数据集分析
四、数据预处理
(一)数据的读取
(二)数据非常的清洗
1.载客状态字段非常
2.数据清洗思路
3.非常数据的剔除

一、实验目标和内容

(一)实验目标

(1)出租车 GPS 数据的读取与数据清洗
(2)出租车 GPS 数据时间完备性评估
(3)出租车 GPS 数据的空间完备性评估(栅格数据分布的可视化、空间分布散点图、热力图)
(4)出租车出行订单持续时间的统计(订单持续时间的统计、订单持续时间的箱形图绘制、出行订单的栅格 OD 可视化)
(二)实验内容

近年来,随着智能移动装备的普及以及硬件功能逐渐强盛,越来越多的智能移动装备被用来收罗和处理数据,用户个体产生的数据开始呈现爆炸式增长。出租车 GPS 数据是最常见的一种个体连续追踪的时空大数据。大部分出租车 GPS 数据采样频率约莫为 15S 一条,不同运营公司的数据质量会有一定的差异。车载 GPS 装备采样频率越高、运营的出租车数据越多,则数据量越大。
在获取到交通时空数据后,如何预处理数据?如那边理 GPS 定位数据的经纬度信息?如何可视化数据?如何获取其他辅助数据(如路网、公交和地铁线路等)?从而举行大数据处理、大数据分析、数据挖掘及数据可视化的本领,从而满意不偕行业的应用需求。
二、数据挖掘算法

(一)算法模子先容

处理的过程主要用到的技术有数据处理技术,举行初步加工,包括非常数据清洗、数据筛选等;地理空间数据处理是二次加工,联合数据的位置信息举行空间统计与分析;数据可视化是展示手段,将数据的处理效果转换为易于理解的图表情势展示;利用OD方法举行出租车订单出行特性分析。
1.Numpy
NumPy(Numerical Python)是一个用于举行科学计算的Python库。它提供了一个强盛的多维数组对象和用于处理这些数组的各种函数。NumPy是许多其他Python科学计算库的基础,如SciPy、Pandas和Matplotlib。
主要功能和特点:
(1)多维数组:NumPy的核心功能是多维数组对象(ndarray)。这些数组可以是一维、二维、三维或更高维度的。NumPy的数组比Python的内置列表(list)更高效,并且可以存储大量数据,如图像、声音波形等。
(2)数组操作:NumPy提供了各种数组操作函数,包括索引、切片、变形、合并、分割等。这些函数使得对数组举行数学运算和数据处理变得非常方便。
(3)广播:广播是NumPy的一个强盛功能,它答应不同形状的数组之间举行算术运算。在广播中,NumPy会主动调解数组的形状,使得它们能够兼容举行运算。
(4)数学函数:NumPy提供了大量的数学函数,如三角函数、指数函数、对数函数、线性代数函数等。这些函数可以直策应用于数组,而不必要使用循环或列表推导式。
(5)随机数生成:NumPy包含一个随机数模块,可以生成各种分布的随机数。这对于模拟和生成随机数据非常有效。
(6)快速操作:NumPy使用高度优化的C语言代码实现了其核心功能,因此实行速度非常快。与使用Python内置的列表举行循环相比,使用NumPy举行向量化操作可以极大地提高计算服从。
(7)文件输入/输出:NumPy可以读取和写入磁盘上的数组数据,支持多种文件格式,如文本文件、二进制文件和NumPy自界说的.npz文件。
2.Pandas
Pandas是一个盛行的Python数据分析工具包,提供了高效的数据布局和数据分析工具,使数据处理变得简单而直观。它是创建在NumPy之上的,提供了额外的功能和工具,使数据处理更加方便。
主要功能和特点:
(1)数据布局:Pandas提供了两种主要的数据布局:Series和DataFrame。Series是一维标签化数组,类似于一列数据,而DataFrame是一个表格型的数据布局,类似于SQL表或Excel电子表格。这些数据布局使得数据的操作和处理更加机动和简单。
(2)数据清洗:Pandas提供了各种功能来清洗和预处理数据。它可以处理缺失值、重复值和非常值。它还能够举行数据转换、重塑和合并等操作。
(3)数据选择和过滤:Pandas提供了强盛的数据选择和过滤功能。你可以使用标签、位置或条件来选择和过滤数据。这使得数据的筛选和提取变得非常简单。
(4)数据分组和聚合:Pandas支持对数据举行分组和聚合操作。你可以根据某些尺度将数据分组,并对每个组应用聚合函数(如求和、平均值、计数等)。这对于数据汇总和摘要分析非常有效。
(5)时间序列数据:Pandas对处理时间序列数据提供了很好的支持。它提供了一些特殊的数据布局和功能,使得时间序列数据的处理和分析更加便捷。
(6)数据可视化:Pandas可以与其他数据可视化库(如Matplotlib和Seaborn)联合使用,提供了简单而强盛的绘图功能。你可以轻松地创建各种类型的图表和图形,以可视化和探索数据。
(7)数据导入和导出:Pandas可以处理各种数据格式,包括CSV、Excel、SQL数据库、JSON、HTML等。你可以轻松地将数据导入到Pandas中举行分析,并将效果导出到其他格式。
3.Matplotlib
Matplotlib是一个用于创建可视化图表和绘图的Python工具包。它是一个功能强盛且广泛使用的库,适用于各种科学、工程和数据分析的应用。
主要特点和功能:
(1)绘图风格:Matplotlib提供了多种绘图风格和选项,可以创建各种类型的图表,包括线图、散点图、柱状图、饼图、等高线图等。
(2)支持多种输特殊式:Matplotlib支持将图表保存为多种常见的图像格式,如PNG、JPEG、PDF等,以便进一步使用或发布。
(3)交互式绘图:Matplotlib可以与交互式Python情况(如Jupyter Notebook)联合使用,实时更新图表,方便数据分析和可视化。
(4)自界说图表:Matplotlib答应用户对图表举行广泛的自界说,包括设置标题、轴标签、刻度、线条样式、颜色等,以满意特定需求。
(5)多子图布局:Matplotlib支持创建多个子图并举行自界说布局,使得在一个图中展示多个相关图表变得容易。
(6)支持3D绘图:Matplotlib还提供了支持三维数据可视化的工具和函数,可以创建三维散点图、曲面图、等高线图等。
(7)支持动画效果:Matplotlib可以创建动画效果,通过更新图表的数据或属性,可以呈现数据随时间变化的动态效果。
(8)绘图工具包整合:Matplotlib可以与其他Python科学计算工具包(如NumPy和Pandas)无缝整合,方便数据的处理和可视化。
4.Geopandas
Geopandas是一个Python工具包,用于在地理空间数据分析中处理和操作地理数据。它联合了Pandas(一个用于数据处理和分析的Python库)和Shapely(一个用于地理几何对象操作的库),提供了一个方便的接口来处理矢量地理数据。
主要特点和功能:
(1)数据布局:Geopandas引入了两个新的数据布局:GeoSeries和GeoDataFrame。GeoSeries是一种类似于Pandas中的Series的对象,用于存储和操作一维的地理几何对象(如点、线、多边形等)。GeoDataFrame是一种类似于Pandas中的DataFrame的对象,扩展了DataFrame的功能,可以处理包含地理几何对象的二维数据集。
(2)读写地理数据:Geopandas可以方便地读取和写入各种地理数据格式,包括常见的矢量文件格式(如Shapefile、GeoJSON等)和空间数据库(如PostGIS等)。
(3)空间操作:Geopandas提供了一系列强盛的空间操作功能,例如缓冲区分析、空间联接、空间查询等。这些操作可以用来分析和处理地理数据,例如计算两个几何对象之间的距离、计算面积、判定点是否在多边形内部等。
(4)地理数据可视化:Geopandas联合了Matplotlib(一个用于绘图的Python库)和其他可视化工具,可以方便地可视化地理数据。它提供了简单的绘图函数,可以绘制地理几何对象、制作舆图、添加图例等。
(5)投影转换:Geopandas支持地理坐标系和投影坐标系之间的转换。它可以将地理数据从一个坐标系转换到另一个坐标系,以便举行空间分析和可视化。
5.math
math是Python中内置的一个尺度库,提供了许多数学运算和函数,用于举行常见的数学操作和计算。下面是math工具包的一些主要特性和功能:
主要特点和功能:
(1)数学常数:math库包含了一些常见的数学常数,如π(pi)和自然对数的底数(e)。这些常数可以通过math库直接访问,方便在计算中使用。
(2)数值运算:math库提供了一系列的数值运算函数,如绝对值(abs)、取整(floor和ceil)、四舍五入(round)、幂运算(pow)、平方根(sqrt)、对数运算(log和log10)等。这些函数可以用于处理和计算各种数值操作。
(3)三角函数:math库包含了一系列的三角函数,如正弦(sin)、余弦(cos)、正切(tan)等。这些函数可以用于处理角度和三角形相关的计算和问题。
(4)指数和对数函数:math库提供了指数函数(exp)和对数函数(log和log10),用于举行指数运算和对数运算。这些函数对于处理复杂的数值计算和科学计算非常有效。
(5)数学运算函数:math库还提供了一些常见的数学运算函数,如最大值(max)、最小值(min)、求和(sum)、平均值(mean)、尺度差(stddev)等。这些函数可以对一组数字举行统计和计算。
(6)角度转换:math库提供了用于将角度转换为弧度和将弧度转换为角度的函数,分别是radians和degrees。这些函数方便在不同的角度单位之间举行转换。
(7)随机数生成:math库包含了一些随机数生成的函数,如生成随机浮点数(random)和生成随机整数(randint)。这些函数可以用于模拟和随机化实验、游戏开发等范畴。
6.Tarnsbigdata
Tarnsbigdata是一个用于在Apache Spark上处理大数据的Python工具包。它提供了一组方便的函数和类,使开发职员能够使用Python语言来处理大规模数据集,而无需担心底层的分布式计算细节。
主要特点和功能:
(1)提供了与pandas类似的数据布局和API,使得开发职员可以轻松地使用熟悉的Python语言来处理大数据。
(2)支持在Spark集群中分布式地加载、转换和存储数据,可以将数据分配到多个节点上举行并行处理。
(3)集成了多种数据处理和分析工具,包括数据清洗、聚类、线性回归等。
(4)可以方便地与其他Python库和Spark模块集成,例如numpy、pandas、matplotlib等。
7.Seaborn
Seaborn是一个基于Python的数据可视化工具包,它创建在Matplotlib之上,提供了更高级的统计图形绘制功能。Seaborn的设计目标是使数据可视化变得更加简单、雅观和有吸引力。
主要特点和功能:
(1)简单易用:Seaborn提供了一系列简单易用的函数和方法,使得绘制统计图形变得简单快捷。它的API设计得很直观,可以轻松地举行图形定制和样式设置。
(2)统计图形:Seaborn提供了许多用于绘制统计图形的函数,包括散点图、折线图、柱状图、箱线图、小提琴图、热力图等。这些图形能够更直观地展示数据之间的关系和分布。
(3)默认雅观:Seaborn的默认样式和颜色调色板设计得非常雅观,可以直策应用于图形中,让图形在外观上更加吸引人。此外,Seaborn还提供了许多主题和样式选项,可以举行进一步的定制。
(4)统计分析支持:Seaborn提供了一些统计分析的工具和函数,如线性回归、分类变量的条件统计等。这些功能能够资助用户更好地理解数据中的模式和趋势。
(5)多图联合展示:Seaborn支持绘制多个图形,并且可以将它们组合成一个联合展示的图形。这对于比较和展示不同数据之间的关系非常有效。
(6)与Pandas集成:Seaborn可以与Pandas数据框架无缝集成,可以直接从Pandas数据布局中绘制图形,方便快捷地举行数据分析和可视化。
8.Shapely
Shapely是一个用于在Python中举行空间几何计算的开源工具包。它提供了一套简单而强盛的几何操作和分析工具,使得用户能够处理和操作二维平面上的几何对象,如点、线和多边形。
主要特点和功能:
(1)几何对象:Shapely支持创建和处理多种几何对象,包括点(Point)、线(LineString)、线段(Line)、环(LinearRing)、多边形(Polygon)、多点(MultiPoint)、多线(MultiLineString)和多边形集合(MultiPolygon)等。这些几何对象可以举行各种操作和分析。
(2)几何操作:Shapely提供了丰富的几何操作方法,可以举行对象的组合、分割、合并、缩放、旋转、平移等操作。用户可以通过这些操作方法构建复杂的几何对象,并对其举行修改和转换。
(3)空间关系和分析:Shapely支持实行各种空间关系和分析操作,如包含(contains)、相交(intersects)、距离计算(distance)、相交面积计算(intersection)、并集计算(union)等。这些功能使得用户能够判定几何对象之间的关系,以及计算它们之间的距离、面积等属性。
(4)属性查询和操作:Shapely答应用户查询和修改几何对象的各种属性,如坐标、边界框、面积、长度等。这些属性可以用于进一步的计算和分析。
(5)可视化支持:Shapely可以与其他Python库(如Matplotlib)配合使用,方便用户将几何对象可视化展示。这对于调试、验证和展示计算效果非常有效。
三、输入数据集分析

1.TaxiData-Sample.csv(出租车GPS数据)
字段名样例阐明
车辆ID34745对每辆车的唯一标识
经度113.8099GPS经度
纬度22.62325GPS纬度
时间20:27:43
GPS数据的收罗时间

载客状态1
通常1为载客,0为空载

速度27
数据收罗时的GPS速度


2.sz.shp(行政区划矢量图形)

四、数据预处理

(一)数据的读取

通过pandas包中的pd.read_csv()方法读取目标数据文件,界说data的columns的属性,分别为VehicleNum(车牌号),Stime(时间),Lng(经度),Lat(纬度),载客状态(OpenStatus),车速(Speed)。
  1. # 导入Pandas包,并赋值给变量pd
  2. import pandas as pd
  3. # 读取GPS数据
  4. data = pd.read_csv('D:/Project/Jupyter_Project/Data/data/TaxiData-Sample.csv')
  5. # 查看数据
  6. data
复制代码

  1. # 读取数据,传入参数header
  2. data = pd.read_csv('D:/Project/Jupyter_Project/Data/data/TaxiData-Sample.csv',header = None)
  3. # 通过header方法查看数据的前5行
  4. data.head(5)
复制代码

  1. # 更改数据的列名
  2. data.columns = ['VehicleNum','Stime','Lng','Lat','OpenStatus','Speed']
  3. # 查看数据前5行
  4. data.head(5)
复制代码

(二)数据非常的清洗

1.载客状态字段非常

数据中的载客状态(OpenStatus)字段表征了出租车载客状态。当值为1时,表示出租车有搭客;反之则为空载状态。如果将全部的车辆数据读取在一个表中,将数据按车牌号和时间排序,那么在理想状态下,一辆出租车正常的OpenStatus序列应该是连续的0序列和连续的1序列依次出现。
因此非常情况应该有两种:
(1)在连续0的序列中,突然出现一个1。
(2)在连续1的序列中,突然出现一个0。
2.数据清洗思路

非常数据的载客状态与前一条数据和后一条数据的值均不同,且这三条数据必须是同一辆出租车的连续数据。
判定条件则为:
(1)非常数据的OpenStatus与前一条数据不等。
(2)非常数据的OpenStatus与后一条数据不等。
(3)非常数据的VehicleNum与前一条数据的VehicleNum相等。
(4)非常数据的VehicleNum与后一条数据的VehicleNum相等。
3.非常数据的剔除

(1)数据的排序
对data数据按照车牌与GPS时间举行排序,让同一辆车的数据放在一起,且按照时间巨细举行排序,用到的是DataFrame的sort_values()方法。
  1. # 对数据按照车牌号与GPS时间进行排序
  2. data = data.sort_values(by = ['VehicleNum','Stime'])
  3. # 查看数据
  4. data
复制代码

(2)数据的剔除
Pandas中提供了shfit函数,可以将数据的列整体上移或下移,使关键数据的前一行与后一行信息都在这一行上,使用条件判定语句举行筛选,剔除非常数据,data = data[-((data['OpenStatus'] != data['OpenStatus1'])&(data['OpenStatus'] !=data['OpenStatus2'])&(data['VehicleNum'] == data['VehicleNum1'])&(data['VehicleNum'] == data['VehicleNum2']))]
再使用data.drop()函数删除辅助判定用的列,末了保存为.csv文件。
  1. # 将OpenStatus列整体下移一行,赋值给OpenStatus1列
  2. data['OpenStatus1'] = data['OpenStatus'].shift()
  3. # 将OpenStatus列整体上移一行,赋值给OpenStatus2列
  4. data['OpenStatus2'] = data['OpenStatus'].shift(-1)
  5. # 将VehicleNum列整体下移一行,赋值给VehicleNum1列
  6. data['VehicleNum1'] = data['VehicleNum'].shift()
  7. # 将VehicleNum列整体上移一行,赋值给VehicleNum2列
  8. data['VehicleNum2'] = data['VehicleNum'].shift(-1)
  9. # 剔除异常数据
  10. data = data[-((data['OpenStatus'] != data['OpenStatus1'])&(data['OpenStatus'] != data['OpenStatus2'])&(data['VehicleNum'] == data['VehicleNum1'])&(data['VehicleNum'] == data['VehicleNum2']))]
  11. # 删除辅助判断用的列
  12. data = data.drop(['OpenStatus1','OpenStatus2','VehicleNum1','VehicleNum2'],axis = 1)
  13. # 查看数据
  14. data
复制代码

  1. # 保存数据到指定路径,index关键字决定是否保存行名
  2. data.to_csv('D:/Project/Jupyter_Project/Data/data/TaxiData-Clean.csv',index = None,encoding = 'utf-8_sig')
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表