标题:基于Python语言的测量程序设计

文档介绍:

1 绪论

1.1 研究背景与意义

全球处于数字化进程当中,又遭遇新一代信息技术变革,这两方面共同促使测绘地理信息行业发生深刻改变。以往的测绘作业依靠人力做记录,靠手工实施计算,所用商业软件功能较为固定,这样的模式流程繁杂,效率低,容易出错,成果表现形式单调而且守护成本很高,如今,智慧城市数字孪生以及新型基础设施创建这些国家战略正在大力推行,这就对测绘数据是否及时获取,处理能否自动完成,分析过程能否智能执行,成果能否直观显示等方面提出前所未有的高标准。海量,多源且异构的数据大量涌现出来,现存方法难以应对这种情况,急需采用新的技术范例来解决发展过程中的难题。

在此大背景之下,Python 语言有着极为简洁的语法,属于开源免费之列,而且具备很强的第三方库生态系统,所以在科学计算和人工智能领域已经处于领先地位,正渐渐渗入工程技术领域,不过当下全面用 Python 来做测量程序设计的理论方法体系还不够完善,大多处于零星技术考察的层面,缺少完整的计划框架,本研究力求全面形成依靠 Python 的现代测量程序设计理论与操作体系,凭借它在科学计算,数据分析以及可视化方面的功能,创建起涵盖数据自动读取,预处理,平差计算一直到三维可视化显示的全过程模块,从而塑造起一个集数据收集,处理,分析,可视化和成果管理于一身的高融合度,易拓展的软件雏形,极大地优化测量工作的效率,精准程度及其智能化水准。

本研究在理论更新,技术改进以及行业推进等诸多方面存在其意义,理论层面上,把编程范式同测量学原理深入结合,这给传统的测量数据处理方法给予了重要的充实与拓展。从技术角度看,Python具备开源性,可以切实削减软件成本,它具有跨平台性和可拓展性,这就为整合诸如智能分类,异常检测之类的人工智能算法创建了根基,进而给智慧测绘筑牢结实的支撑,在行业范围之内,该项研究成果能够直接用于测绘工程,形变观测等范畴,从而优化生产效率和工程质量,加快塑造跨界复合型人才,促使测绘行业朝着智能化,信息化,自动化方向发展,这对于我国新型基础设施创建以及国家空间信息基础设施的完善有着十分关键的现实意义和战略价值。

1.2 国内外研究现状

1.2.1 国外研究现状

从全球范围看,依托编程语言开展测量数据处理的研究起源比较早,而且发展比较成熟,欧美的发达经济体较早投入测绘地理信息领域的信息化塑造工作,创建起比较全面的技术系统,国外的研究者和工程人员很早就察觉到自动化数据处理对优化测绘工作效能的价值,于是针对相关的理论算法以及应用工具展开了细致探究,在数据处理的理论与算法这个层面,国外的研究者已创建起比较完备的误差理论与数据处理方法系统,其中涵盖最小二乘平差,滤波理论,稳健估计等传统方法,这些理论给测量数据的精准化处理给予了牢靠的数学支撑,近些年,伴随计算机科学的极速发展,国外的研究更多地着眼于机器学习,深度学习等人工智能技术在测量数据处理中的应用,比如用神经网络来做变形预测,用聚类算法做点云分类等等。

在应用软件与工具平台这个层面,国外出现不少功能很强大的商业测量数据处理软件,瑞士徕卡公司有Leica Geo Office,美国天宝公司有Trimble Business Center等等。这些软件经由长时间的市场考察和技术沉淀,其数据处理流程化,规范化,专业化的优势很突出,可以满足多数普通测量项目的需要,但是,这些商业软件确实存有不少局限之处,关键就在于系统架构是封闭的,很难再次开发,而且价格比较贵,对于新技术的整合反应速度比较慢。国外学术研究里,以 MATLAB 为典型的科学计算平台被普遍采纳,它有着很强的矩阵计算能力,自带很多工具箱,给算法研究和原型验证带来方便,不过它也存在成本高,部署复杂之类的问题。 近些年来,开源运动不断发展,以Python为代表的开源技术在国外测量数据处理领域愈发受关注,一些依托Python的开源测量数据处理库和工具开始涌现出来,但是总体来说,还是零散的模块和脚本居多,并缺少系统的整合方案。

1.2.2 国内研究现状

国内正在大力创建信息化测绘体系,在此期间,依靠编程语言做测量数据处理的研究取得了很大的发展,国内学者针对测量数据处理理论做了很多富有成果的研究,按照经典误差理论,并结合我国独特的地理环境和工程需求,发展起来不少带有中国特色的数据处理方法。在软件工具层面,国内也开发出了若干拥有自主知识产权的商业软件,南方测绘公司的南方CASS软件就比较典型,这种软件在国内工程测量上被普遍采用,在数字化绘图和数据处理时有着不错的本土适应优势,不过和国外先进水平比起来,国内的商业软件在核心技术沉淀以及国际化程度上还是存在一定差距的。

近些年来,Python语言在国内不断得到普及和推广,于是,许多研究者及工程技术人员开始探寻Python在测量数据处理领域存在何种应用情况,就国内相关研究而言,其大致聚集在如下几个层面:第一点,凭借Python做到测量数据的自动读取并执行格式转换,从而化解不同仪器之间存在的数据格式不一致难题;第二点,依靠Python来研发坐标变换,高程拟合并等专门的测量运算工具;第三点,借助Python的数据可视化库把测量成果转变成图形形式加以体现;第四点,探究运用机器学习算法针对测量数据展开异常识别以及预测分析。 这些研究在某种程度上改善了测量数据处理的自动化水平,不过从全局视角看,当前多数研究偏重于编写具有特定功能的小型脚本,缺少系统规划与综合考虑。部分研究尝试塑造较为完善的测量数据处理软件,但这些研究大多着眼于前端界面的制作,对于后端数据处理的严谨性以及算法的完整性尚需进一步提升,并未产生具备广泛适应性和值得提倡的成熟体系。

1.3 主要研究内容

本课题的核心目的在于用Python语言开发出一个专门用于工程测量数据自动化清洗和初步分析的实用程序,此软件着重要解决测量数据处理中最基本,最费时,最容易犯错的数据清洗这个环节,其研究内容大致覆盖如下几部分。

测量数据的自动读取与格式化是程序的一步,而且是关键的一步,主要探究怎样利用Python来读取常见测量仪器所产生的数据文件,比如文本文件或者 CSV 文件,程序需能够自动识别文件里包含的点名,平面坐标,高程,观测时间等关键信息,并把这些原本杂乱无章的数据整理成统一而规范的表格形式,从而为后续的处理创建条件,这个阶段要应对诸如分隔符识别,字段映射,数据类型转换等诸多技术难题。

数据清洗核心算法的达成包含两大主要功能,即缺失值处理与异常值检测,就缺失值处理而言,程序要能自行辨别数据表里的空白格,而且要有若干处理策略可供用户挑选,用统计值填补,用临近数据填补或者干脆删掉缺失行之类的情况。至于异常值检测,程序需采用传统的统计检测手段,比如依靠正态分布假定的原则以及凭借分位数的箱线图办法,可以自动算出并标记下那些可能存在错误的不合理数据点,然后通知用户予以确认或者去除。

本研究设有自动检测模块,当它识别出异常记录时,用户可经由人工复核工作台来执行确认,忽略或者手动修正的操作,这样就形成了人机协作的数据清理模式,而且,系统还具备数据质量评定功能,可以对原始数据,清理成果以及异常分析结论执行量化打分,从而让用户清晰掌握数据质量变动状况。

系统需具备把清洗过的数据导出成通用格式文件的能力,而且能生成其中包含质量评价信息,处理日志以及异常概要的分析报告,如此一来用户就能方便地存档并用于后续工作,经过前面所述各项研究内容得以达成,本课题期望给工程测量人员供应一款既好用又简单易上手,还能清晰体现扩展可能性的数据清洗工具。

2 相关技术介绍

2.1 Python数据处理生态

Python 是一种解释型,面向对象的高级编程语言,由荷兰程序员吉多 · 范罗苏姆在 1989 年底开发出来,于次年即 1991 年首次公布。Python 语言的设计理念重点体现于提升代码可读性及精简语法之上,利用缩进显示代码块构造,如此一来,Python 程序便愈加便于撰写,领悟与维持,而且 Python 语言属于开源范畴,其背后有着众多积极踊跃的开发者群体做支撑,从而为自身生态系统的大放异彩构筑了牢靠根基。

在数据处理领域,Python具备丰富而完善的第三方库生态,其中 NumPyPandasMatplotlib SciPy 等最具代表性。NumPy Python 科学计算的核心库,它包含高性能的多维数组对象以及大量相关函数,几乎所有的 Python 数据处理及科学计算库都依靠它来做底层支撑,Pandas NumPy 有关联,属于数据分析的关键库,其定义了 Series DataFrame 这两个主要的数据类型,使得数据清洗,转换,合成,分组,聚合之类的任务变得更为便捷,非常适宜应对表格形式的数据,而 Matplotlib 则是 Python 最基本的绘图工具,具备多种图表制作能力,能够创建线形图,散点图,条形图,等高线图等诸多静态,互动形式及带有动画效果的可视化图像。SciPy依托于NumPy,其包含数值积分,改进,线性代数,统计等科学计算功能模块。

工程测量的数据属于结构化表格数据,所以PandasDataFrame很适合当作系统内部的主要数据载体,用Pandas能够很方便地做文件读取,空值处理,数据筛选,数据变换等工作。NumPy在数值统计计算中有重要意义,给标准差计算,阈值判断之类的场景以底层支撑,而且Python生态圈里有专门应对地理空间数据处理的库,比如用作坐标转换的pyproj,可以读写空间数据格式的GDAL等等,这些库给测量程序设计供应诸多工具挑选,依靠Python在数据处理方面强大的生态圈,本研究选定Python为关键开发语言。

2.2 FastAPI后端框架

FastAPI属于现代且快速的Web框架,可用于凭借Python 3.6及更高版本创建API服务,它在2018年面世,尽管比较晚,但因卓越的性能与优雅的设计而很快得到开发社区全面承认,FastAPI的关键设计思路涵盖高性能,易用性,健壮性和标准化这些方面。

FastAPI具备如下主要特点,其一为高性能,FastAPI依托StarlettePydantic,性能堪比Node.jsGo语言的主流框架,属于Python范畴内性能较为出色的Web框架。其二在于快速开发,FastAPI有着直观的API设计途径,开发人员可经由类型标注来界定请求参数及响应模型,框架自动执行请求解读,数据校验和序列化流程,这在很大程度上优化了开发速度,其三体现为自动文档生成功能,FastAPI依照代码里的类型标注和文档说明,可自行创建交互式的API文档,并包含在线调试与检测环节,给前后端协调带来了许多便利之处,其四则是数据验证部分,FastAPI融合了Pydantic的数据校验功能,开发时只需定义数据模型类,框架就会自动针对请求体执行类型检查,字段校对并给出错误信息。

本研究当中,FastAPI成为后端接口服务框架,它重点供应文件预览,缺失值处理,异常检测以及用户认证等功能接口,FastAPI具备异步支持,其接口定义十分清晰,这使得系统可以高效应对数据处理请求,而且保留代码的简洁性与可守护性,FastAPI还具有自动生成文档的功能,给接口调试和检测带来方便。

2.3 Vue 前端框架

Vue 是一款用来创建用户界面的渐进式 JavaScript 框架,由尤雨溪在 2014 年创立,Vue 的设计理念是采取自底向上的增量开发设计,核心库专注于视图层,非常容易入手,而且凭借官方所守护的生态系统,能够便捷地创建复杂的单页应用。

Vue 3对比之前的版本,重点加强了如下几方面,其一,性能得到了改良,Vue 3重新编写了虚拟DOM相关代码,并在编译阶段执行大量静态分析与精炼操作,从而减轻运行时负担,使得初次绘制页面及后续数据变化更新的速度均有大幅改善,其二,有别于Vue 2依靠选项配置的API体系,组合式API给开发者赋予一种更具灵活性,更为符合逻辑思维流程来规划程序结构的方式,也就是遵照业务逻辑划分代码块,而非拘泥于选项分类,这样就能让那些功能繁杂且层级嵌套很深的组件变得条理分明,并具备更强的重用价值,其三,针对TypeScript开发者友好程度更高,所有源码都是用TypeScript语言重新录制而成,所以不但包含详尽完备的类型信息,而且可以很好地契合主流开发环境所提供的智能提示功能,其四,最终生成出来的文件大小缩减不少,这是因为针对核心模块执行了所谓树形晃动之类的压缩算法,去除掉那些未曾被调用过的功能分支。

本研究当中,Vue 3成为创建前端交互页面所选取的框架,该系统必要达成许多功能页面,包含数据导入,缺失值处理,异常检测以及人工复查等页面,利用 Vue 3 的组件化开发形式,可以把这些功能模块分解成单独的组件,这样做利于开发和守护,而且,采用组合式 API以后,数据处理逻辑就能得到更好的复用与整理,从而改进了代码质量。

2.4 SQLite数据库

SQLite属于轻量级的嵌入式关系型数据库,其由 D. Richard Hipp 2000 年所设计及达成,它并非传统的客户端 - 服务器数据库运作系统,SQLite 不是个单独的进程,而是一座可直接植入到应用程序当中的 C 语言库,应用程序经由函数调用的方式利用 SQLite 的数据库功能,SQLite 的设计目的在于做到简单,可靠,方便使用以及高效。

SQLite有如下主要特性,其一为零设置,SQLite无需安装,设置或者管理,亦不存在独立的服务器进程以及配置文件,仅需引入库文件便能使用。其二为跨平台性,SQLite被主流操作系统所支持,WindowsLinuxmacOSiOS以及Android均在其列,其数据库文件可在不同平台之间径行复制以供使用,其三为事务性,SQLite具备ACID事务特性,即便处于系统崩溃或者断电之类的异常状况之下,仍可保障数据的完整性与一致性。 其四是轻量级,SQLite的库文件很小,编译之后一般是几百KB,运行的时候内存占用很低,很适合资源有限的环境和嵌入式场景。

本研究当中,SQLite被用来存储用户信息及登录会话数据,该系统要有用户注册,登录,身份验证以及注销登录等能力,要将用户账号信息等实施持久化保存。选用SQLite是因为其部署简单,不需要单独的数据库服务,很合适本地演示系统,SQLite具有轻量级特点,这样整个系统就可以轻松打包并发布出去,用户无需另外安装数据库软件就能使用完整功能。

2.5 前后端分离架构

前后端分离属于Web应用程序的一种架构模式,该模式的核心思想在于把前后端各自变成独立的子系统,并经由预先定义好的API接口来达成彼此之间的交流,此架构模式与传统依靠服务器端执行渲染的模式有着很大差别,在当代Web开发领域被全面采纳。

前后台分离架构有如下几大优势,第一点是职责清晰,前端重点在于表现用户界面及交互逻辑,后台则侧重于业务逻辑的处理与数据储存。前后端两个团队可做到自主开发,检测和部署,免去因彼此依赖而产生的协调费用,第二点在于技术独立,前后端能够采用最合适的自身技术栈,前端可挑选像 React Vue Angular 这类先进的前端框架,后台也可选 Python Java Go Node.js 等任何语言及其框架,从而极大优化开发速度。 前后台分离之后,前端能够凭借模拟API数据开展开发工作,而后端只需着重关注接口的达成情况,双方经由接口文档展开约定,其并行开发的效率得以明显优化,而且,前后台具备灵活的部署能力,前后台均能独立部署,前端的静态文件可被部署到CDN之上,而后端的服务则可部署在服务器或者云函数当中,按照负载的状况实施弹性伸缩,另外,前后台分离利于良好的用户体验,这种架构天生便符合单页应用模式,页面切换时不需要重新加载整个页面,使得用户体验更为流畅。

本研究当中,系统采取了Vue 3FastAPI的前后端分离架构,前端承担页面显示,流程指引以及交互逻辑的任务,而后端则处理数据解读,规则判断和分析运算事宜,此种架构使得模块界限分明,利于开发,调试,守护以及答辩阐述,而且前后端分离还为系统日后的发展带来了灵活度,假若将来要增添新的分析规则或者可视化单元,它们彼此间的影响比较小,不太可能给整个系统带来很大的变动。

3 系统需求分析

3.1 工程测量数据处理现状与问题

当下,工程测量操作的时候,数据整理与处理这一步存在不少实际问题,这些情况会左右测量工作的效率及其成果的质量,要是深入剖析真实的测量工作流程,就可以把这些状况总结成如下几条。

工程测量存在数据格式不统一的问题,所用的仪器设备种类繁杂,全站仪,水准仪,GNSS接收机等均在其列,不同品牌,不同型号的仪器,其导出的数据文件格式有所区别。有些仪器产生的数据为固定宽度的文本格式,也有些则是逗号分隔或者制表符分隔的格式,而且,字段的命名与排列顺序也大相径庭,这样的格式异构性使得数据整合变得极为艰难,测量人员常常必要花费诸多时间手动去调整并变换数据格式,才能够把它们导入到后续的处理软件当中。

原始数据往往存在缺失值和异常值,这源于测量过程里的多种客观及主观要素。观测时若视线被挡,一些测点可能就会出现数据缺失情况,仪器操作时若是不小心犯错或者受到外界环境影响,个别观测值便可能出现较大偏差,这些有瑕疵的数据倘若未经处理就拿来用,必然会给后面的计算精准度和可信度带来极大不良后果,而传统数据核查手段大多靠人逐一对照比对,如此一来效率非常低,也很容易忽略一些细节。

手工处理存在效率低的状况,缺少自动化工具时,测量数据的整理大多依靠手工完成,这包含在电子表格软件里调整格式,复制粘贴数据以及人工计算公式等事务。如果数据量很大,此种手工处理方式既耗时又费力,很容易产生人为差错,尤其是在工期紧迫的时候,数据整理阶段常常是整个项目遭遇瓶颈的地方。

当下,市场上主要的商业测量数据处理软件功能比较强,但是价格很贵,中小企业,基层测绘单位或者个人用户要是去买,采购成本就是一大笔钱。而且,这些商业软件常常是黑箱子,用户不知道它内部是怎么处理的,也不能按照自己的需求去做定制化的修改,碰到要处理一些特别格式的数据或者达成某种特定分析功能的时候,用户常常就没办法了。

综上可得,工程测量数据处理领域急需一种高效又经济,而且灵活而且可扩展的解决办法,这种办法能自动执行数据读取,格式化以及清洗任务,从而让测量人员摆脱繁重的手动工作,去开展更具价值的分析工作。

3.2 功能性需求

经由对工程测量数据处理现状加以分析可知,本系统须要达成如下功能需求。

系统要具备用户经营功能,即支持用户执行注册,登录,身份认证以及注销登录等操作,这属于系统安全性最基本的保证,可保障仅合法用户才得以访问系统功能,当用户执行注册时,需给出用户名及密码,系统会把密码安全存入,一旦用户完成登录,系统便应保留其登录状态,并在后续的请求当中实施身份核查。

系统具备数据导入与字段识别的功能,它可导入常见的文本格式测量数据文件,其中包含CSVTXTTSVDAT等格式,当执行导入操作时,系统会自动判断文件所用的分隔符类型,逗号,制表符,分号,竖线以及空格之类的分隔符都在识别范围内,系统还要自动去除文件里的空行与空列,并过滤掉没有意义的列。就字段识别而言,系统需从原始字段自动找出诸如点名,X坐标,Y坐标,高程,观测时间等重要字段,并把它们转为成标准字段名称,针对数值字段和时间字段,系统得要展开格式标准化的处理。

系统具备缺失值处理功能,其为用户给予三种可供挑选的缺失值处理策略,均值填补法会以某列全部有效数值的算术平均值来填补空缺之处;前值填补法则利用同列前一有效值去填补空缺;删除含有缺失值的整行,则是直接剔除那些存在缺失值的完整记录,在完成处理之后,系统须要显示出清理成果表,而且还要给出有关缺失值处理的一些统计数据,涵盖各个列缺失值的个数,所用填补值以及处理前后两者之间的差异等情况。

系统需具备两种经典异常值检测算法,其一为准则,此方法以正态分布为前提,凡位于均值三倍标准差以外的数据点被视作异常值。其二为箱线图法,该方法依循数据分位数,若数据点超出上下四分位数1.5倍的四分位距,则被判定为异常值,检测完毕之后,系统要突出显示异常记录,阐述异常原因,还要给出异常字段的详细信息。

系统具备人工复核功能,自动检测结果也许会存在误判或者遗漏情况,所以系统需设有人工复核工作台,在此工作台上,用户可针对每条异常记录执行以下三项操作:确认异常,忽略异常以及手动修正。复核结果要返回到当前工作表当中,从而让复核结果纳入后续的数据处理及导出流程之中。

系统要针对原始数据,标准化结果,清洗结果以及异常分析结果开展质量评定,其会核算缺失率,异常率,完备度等质量指标,并以可视化形式体现质量变动状况,系统需允许用户把清洗后的数据导出成CSV文件,把分析报告导出为HTML格式文件,该报告应覆盖质量评定信息,多策略对比成果,异常概要等相关内容。

图3-1 功能结构图

3.3 非功能性需求

系统除应满足功能需求外,还要符合一些非功能需求,这样才能确保其可用与实用。

系统性能方面的要求在于,数据处理工作必要在合理的时间内执行完毕,针对包含万行左右的测量数据文件来说,数据读取,格式化以及清理这些步骤最好能在几秒钟之内结束,而异常检测步骤则希望在十秒左右便可达成,系统要防止由于数据量巨大而造成长时间等待或者界面上出现卡顿情况发生。

系统可用性方面的要求在于,其用户界面要简洁明晰,操作流程需契合测量人员的认知规律及其工作流程,各个功能页面应具备清晰的提示与指引,从而助力用户认识当下的操作目的及方法。针对那些也许会引发数据丢失的操作(譬如删除包含缺失值的行),系统应当给予确认提示,以防用户执行误操作。

系统具备可扩展性方面的要求,其架构设计需具有较好的可扩展性,如此一来才方便日后增添新的功能模块,将来也许要添加更多的缺失值处理策略,更多的异常检测算法以及更多的数据可视化形式等,这些扩展能够在当前架构之上轻松达成,并非得重新塑造整个系统才行。

系统需具备兼容性,其要在主流操作系统下运行,WindowsLinux均为主流操作系统。后端服务可被常见浏览器所访问,主流浏览器有ChromeFirefoxEdge等,前端页面在这些主流浏览器里应能正常显示并发挥功能。

用户的登录信息需予以安全防护,不可把密码存为明文,用户上传的测量数据文件只准当下的会话加以处理,不能让其他用户访问,系统也不能把用户数据上传到外头的服务器。

4 系统设计

4.1 系统总体架构

本系统采取前后端分离的架构模式,其整体包含前端表现层,后端服务层以及数据存储层这三个层级,前端表现层承担着用户界面的显现及用户交互的任务,后端服务层则处理业务逻辑并执行计算任务,数据存储层负责将用户信息与会话数据实施持久化保存。

前端表现层依靠Vue 3框架创建而成,其形式为单页应用,在用户于浏览器访问前端页面之后,前端应用随即启动运行,当用户经由界面实施操作的时候,前端应用会向后端服务发出HTTP请求,并获取到回应的数据,然后把数据展现在界面上,这个过程中,前端应用承担着管理和协调用户交互行为以及页面路径的任务,但并不会直接干预业务逻辑层面的事情。

后端服务层依靠FastAPI框架形成起来,它向外供应RESTful API接口,当后端服务收到前端送来的请求时,会按照请求种类去调用对应的服务模块来执行操作。这些服务模块包含用户认证服务,文件解读服务,数据清洗服务,异常监测服务以及报告生成服务等等,而在后端服务处理数据的时候,会利用PandasNumPy之类的库去完成具体的运算任务。

数据存储层采用的是SQLite数据库,这个数据库主要用来保存用户账号相关信息,数据库相关的操作经由后端服务层实施封装,前端无法直接接触数据库,这样一种分层设计让每一层的责任十分明确,有益于开展工作和后续的维持。

前端和后端的通信依靠HTTP协议,数据交换格式则是JSON,前端给后端发送请求的时候,会把参数放在请求体里,而且是用JSON格式的,后端处理完以后,就会把结果也用JSON格式反馈回来,前后端按照事先明确规定的接口契约来合作,这样它们就可以各自独立地去开发和做测试了。

4-1 系统架构图

4.2 后端设计

4.2.1 接口设计

后端接口按照RESTful风格来设计,各个接口对应单独的功能点,经由HTTP方法体现操作类型,该系统主要包含如下几类接口。

用户认证类接口包含用户注册接口,用户登录接口,获取当前用户信息接口以及退出登录接口,其中,用户注册接口接受用户名和密码,把加密后的用户信息存进数据库,用户登录接口对用户名和密码执行验证,验证无误之后形成会话并且返回认证令牌,后续的请求需附带此令牌来证实用户的身份。

文件处理类接口包含文件上传预览接口以及样例加载接口,其中文件上传预览接口会接收用户上传的数据文件,并给出文件预览信息,此信息涵盖自动识别出的分隔符,列名以及前面若干行的数据预览等方面内容,而样例加载接口则从后端事先设置好的样例目录当中加载示范数据文件,其返回的信息格式和上传接口所返回的一致。

数据处理类接口包含缺失值处理接口以及异常检测接口,其中,缺失值处理接口需接受处理策略参数,执行处理流程时会返还清洗过的数据表及处理相关的统计数据,而异常检测接口应获取检测方法参数与待检测的字段清单,完成检测之后则给出异常记录集和检测成果的数据量情况。

结果导出类接口包含 CSV 导出接口和报告导出接口,其中,CSV 导出接口获取需导出的数据,并返回 CSV 格式的文件内容以供前端执行下载操作。而报告导出接口则负责接收质量评价数据以及异常监测结果,进而生成 HTML 格式的分析报告。

所有业务接口都必须以登录的用户为前提,如果处于未登录状态发起的请求将会遭到拒绝,并且收到未授权的错误信息,接口的请求体和响应体会借助Pydantic模型来做定义与验证处理,以此来保证数据结构的准确性。

4.2.2 数据库设计

本系统采用SQLite数据库,其设计相对较为简单,其中重点在于用户表,该表用于存储系统中的注册用户信息,包含用户ID,用户名,密码哈希值,注册时间等字段。用户ID充当主键,用以唯一标识各个用户,把用户名字段设为唯一索引,从而保证每个用户名仅能注册一次,密码字段并未保存明文密码,而是保存经由哈希加密后的密文,以此来加强安全性,注册时间字段会记录用户的注册时间节点,这在之后的用户统计中有一定的用途。

系统无需为测量数据设计持久化存储表,测量数据于用户会话时临时处理,其成果由用户自行决定是否下载以供本地保存。如此一来便简化了系统架构,免除出现数据文件重复存储的现象,还缩减了用户隐私数据泄漏的可能性,用户上传的原始文件以及处理进程中的中间结果仅存于内存之中,并不会写入数据库。

4.2.3 服务层设计

服务层处于后端业务逻辑的中心地位,其负责封装诸多具体功能的达成过程,其主要包含五大模块,即文件解析服务,数据清洗服务,异常检测服务,用户认证服务以及报告生成服务。

文件解析服务要处理上传的测量数据文件,它先读取文件内容,再调用分隔符识别工具自动判断文件所用的分隔符类型。一旦检测到分隔符,服务就会利用Pandas的读取功能把文件内容加载到DataFrame对象中,之后,服务执行数据清理步骤,清除空行,空列以及Unnamed之类的无效列,然后,服务会调用字段映射工具,试图自动识别点名,坐标,高程,时间等关键字段,并把这些字段重新命名为标准字段名。

数据清洗服务承担着执行缺失值处理任务的职责,它会依照用户选定的处理策略参数来针对数据表实施处理,针对均值填补策略,服务会算出每列有效数据的均值,并把此均值用以填充缺失之处。而针对前值填补策略,则是利用前一行的有效数值去填补空白区域,至于删除行策略,便是径直剔除掉那些存在缺失值的行,等到处理过程完结之后,该服务将会给出已经被清理过的数据表以及有关处理情况的统计数据。

异常检测服务承担执行异常值检测的任务,它会依照用户选定的检测方法参数以及打算检测的字段列表来行事。针对准则这种方法,服务要算出各个字段的均值和标准差,之后把那些超出均值三倍标准差范围的数据点标出来,而采用箱线图法时,则需计算每个字段的四分位数和四分位距,进而对位于上下限之外的数据点加以标记,等到检测结束以后,服务将会给出异常记录清单及其检测结果的统计数据。

用户认证服务负责管理用户的注册,登录以及身份校验事宜,在执行注册操作的时候,该服务会将用户密码执行哈希加密处理然后予以保存,而在执行登录流程之时,则需确认用户名与密码能否相契合,一旦验证结果为正面情况便创建会话令牌,至于身份校验阶段,主要是检查请求所附带的令牌是否具备有效性。

报告生成服务要创建 HTML 格式的分析报告,报告内容涵盖数据质量评定信息,缺少值处理统计情况,异常检测成果以及多策略对比等方面,该服务利用 HTML 模板,把数据自动填入到模板当中,从而形成完整的报告文件。

4.3 前端设计

4.3.1 页面结构设计

前端页面采取固定菜单导航这种布局形式,大致可以分为三个区域,左侧为菜单栏区域,这个区域始终显示系统名称,流程导航菜单,当前用户信息以及退出登录按钮等。流程导航菜单依照业务处理流程的先后次序来排列,其包含了数据录入,缺失值处理,异常分析和人工复核这四个主要页面。

顶部的状态栏会表现当前页面的提示信息,还有一些关键的操作按钮,比如保存,导出之类的,设计这个状态栏主要是给用户带来及时的操作反馈,并给予快速操作的入口。

中间主内容区为用户执行具体操作的核心所在,其按照所选菜单项来动态切换并显示不同页面内容,各页面专注于某个具体的业务流程阶段,页面间借助左侧菜单实施切换,这样分步式的页面设计让业务流程变得清晰易懂,用户较难迷途于操作路径之中。

4.3.2 组件设计

前端若想提升代码的复用性与可守护性,就要采取组件化开发方式,把页面里频繁出现的UI元素及功能模块打包成单独的组件。

表格组件属于系统中高频使用的组件类型,其主要用于表现数据预览,清洗成果以及异常记录等内容,该组件应具备列排序,列过滤,行选择等基础功能,并且要有能力对异常单元格实施高亮显现。

字段映射组件用以显示数据导入页面当中原始字段和标准字段之间的对应联系,此组件赋予用户手动调节字段映射的权利,如果自动识别存在偏差,用户能够自己选定恰当的映射关系。

质量评价组件用来表现数据质量的变动情形,其中牵涉到缺失率,异常率,完备度等等指标,这个组件会以卡片或者图表的方式去显示质量指标,这样就能让用户比较直观地了解到数据质量状况。

复核操作组件针对人工复核工作台设置,给每条异常记录赋予了确认异常,忽略异常以及手动修正这三个操作按钮,并且具备一个弹出式的编辑框,用以供用户输入修正值。

4.3.3 交互流程设计

前端交互流程依照业务处理顺序来设计,用户要依次做完四个步骤才能到达终点,在数据导入页面上,用户可选本地文件或者加载演示样例,系统会自动识别并且显示出预览结果,当用户确认好字段映射之后就能进入到下一步。在缺失值处理页面上,用户先挑选处理策略,做完清洗操作以后再查看结果,等确认完毕之后才可以继续往下走,在异常分析页面上,用户得要选出检测方法以及检测字段,等到执行了检测之后才能够看到异常记录,确认过后就到了最后一步。 在人工复核页面上,用户需逐一处理异常记录,处理完毕之后即可导出结果与报告。

在每一个步骤当中,系统均给予返回上一步以及进入下一步的导航按钮,用户能够依自己的需求来灵活调整处理的顺序,这样的流程设计一方面保全了业务逻辑的连贯性,另一方面也赋予了用户足够的操作自由度。

4.4 核心算法设计

本系统的核心算法涵盖分隔符自动识别算法,字段自动映射算法,缺失值处理算法以及异常值检测算法。

分隔符自动识别算法的设计思路在于遍历常见的分隔符集合,并针对文件的每一行执行考量,该算法会统计各类分隔符在文件里出现的频率及其一致性,挑选出出现频率较高而且每行出现次数较为稳定的分隔符作为识别成果,这样的设计可以应对多数常见的测量数据文件格式,包含逗号分隔,制表符分隔,分号分隔以及空格分隔等情形。

字段自动映射算法的设计理念在于形成起标准字段名称和潜在原始字段名称间的映射表,点名这个标准字段,其原始字段名称也许包含点名,点号,IDNamePoint等等;X坐标这一标准字段,其原始字段名称可能覆盖X,东坐标,Easting等等;高程这个标准字段,其原始字段名称大概涉及H,高程,ElevationZ等等,算法会依次浏览原始数据表中的列名,并且与映射表执行模糊适配,从而找出最为合适的列来执行映射。

缺失值处理算法包含三种策略,其一为均值填补法,此方法先计算各列有效数值之平均值,接着把缺失之处用该平均值取代,其二为前值填补法,即沿袭行方向依次查看数据表,遇到空缺时就用前面尚未缺失的同列值来代替,其三为删除行法,也就是舍弃掉含有缺失值的所有行。这三种策略各自有其适宜的应用场合,使用者可依循数据特性挑选恰当的策略。

异常值检测算法包含了两种经典方法,其中,准则方法以测量数据符合正态分布为前提,计算各检测字段的均值与标准差,把超出均值三倍标准差的数据点视为异常值。箱线图法无需依赖正态分布假设,它计算每个检测字段的第一四分位数,第三四分位数以及四分位距,并把超出上下限的数据点判断为异常值,这两种方法都有各自的长处和短处,准则对于正态分布的数据表现较好,而箱线图法则在偏态分布数据面前更为稳定。

系统实现与测试

5.1 核心功能模块实现

系统执行阶段依照第四章的设计方案完成了后端服务与前端页面的编码任务,后端采用Python语言及FastAPI框架,前端则采用Vue 3框架和JavaScript语言。

用户认证模块的达成包含注册,登录以及身份校验这三项功能,在执行注册流程的时候,后端会接到用户名和密码信息,而后对密码执行哈希加密处理,并将其存储进SQLite数据库当中,当执行登录操作时,后端需对用户名和密码是否相符实施验证,一旦验证结果为正确无误,便向前端传递一个随机产生的话话令牌,前端之后发起的所有API请求都会附带这个令牌,而后端凭借中间件来检查该令牌是否有效,而在执行退出登录操作之际,后端应当清除掉服务端有关联的会话记录。

文件解析模块属于系统最为基础的功能模块,它包含了文件上传接受,分隔符检测,数据读取,字段映射以及数据标准化这些子功能,当用户上传文件的时候,后端会先获取文件内容并检测分隔符,之后利用Pandas的读取函数把数据转为成DataFrame对象,此模块调用字段映射函数,按照预先设定好的映射规则自动识别关键字段并且重新命名成标准名称,模块还会针对数值字段和时间字段做格式标准化的处理。

缺失值处理模块具备三种处理策略,此模块会接收前端传递过来的策略参数,按照策略类型来调用对应的处理函数。均值填补函数先算出每一列有效数据的平均值,接着利用Pandas的填补函数把缺失值替换成平均值,前值填补函数采用Pandas的前向填补函数,用上一行的值去替代缺失值,删除行函数则运用Pandas的删除函数,去除掉包含缺失值的所有行,当处理完毕之后,模块将会返回经过处理过的DataFrame以及相关的统计数据。

异常检测模块包含两种检测算法,其中准则检测函数会计算各个字段的均值与标准差,接着创建布尔掩码来标记超出阈值范围的数据点,箱线图法检测函数则会计算每个字段的四分位数及四分位距,并生成掩码用于标记超出上下限的数据点。这两个检测函数均会给出异常标记掩码以及异常记录的详细信息,检测结果会以表格的形式传递给前端,由前端执行高亮显示的操作。

人工复核模块具备复核状态追踪及数据更新的功能,当用户针对某条异常记录实施操作的时候,前端会把操作信息传递给后端,而后端依照操作的类型来更新复核状态,确认异常时,把这条记录标识为已被验证的异常;选择忽略异常,则把该记录从异常列表当中删除;如果是经由手动修正,则用用户输入的新值去替换原有值,并再次执行质量评定。

报告导出模块具备创建 HTML 报告的功能,这个模块采用 Jinja2 模板引擎,并制定出一个 HTML 模板,模板里包含质量考量表,处理日志以及异常概要等内容,后端把处理阶段产生的统计信息和结果数据插入到该模板当中,从而生成完备的 HTML 文件内容,再传送给前端以供用户下载。

5.2 系统界面展示

5.2.1 登录与主界面

系统登录页面是用户进入系统的唯一入口,承担着身份验证和访问控制的重要职责。用户需要输入用户名和密码进行身份验证,系统会对用户信息进行核对,验证通过后跳转至主界面。首次使用的用户可以通过注册功能创建账号,注册时系统会对用户名的唯一性进行检查,并对密码进行加密存储,确保用户信息的安全性。登录功能是系统的安全屏障,有效防止未经授权的访问,保障用户数据的安全。

登录成功后进入系统主界面,这是用户进行各项数据处理操作的核心工作台。主界面采用左右分栏的布局,左侧为固定菜单栏,按照业务处理顺序排列了数据导入”“缺失值处理”“异常分析”“人工复核四个主要功能模块。这种排列顺序与测量数据清洗的实际工作流程完全一致,用户只需按照从左到右的顺序依次操作,即可完成完整的数据处理流程。当前所在页面的菜单项会以高亮样式显示,用户随时可以了解自己所处的处理阶段。右侧主内容区根据用户选择的菜单项动态切换显示不同的功能页面,这种分步骤的导航设计使得业务流程清晰明了,大大降低了用户的学习成本。

5-2 系统主界面

5.2.2 数据导入与字段识别

数据导入页面是整个数据处理流程的起点,负责将原始测量数据加载到系统中。用户可以通过两种方式导入数据:一是从本地计算机中选择CSVTXT等格式的测量数据文件;二是加载系统内置的演示样例,便于初次使用的用户快速了解系统功能。系统能够自动识别文件的分隔符类型,包括逗号、制表符、分号等多种常见格式,同时自动清理文件中的空行和空列,确保后续处理的数据干净整洁。预览区以表格形式展示文件内容,帮助用户确认文件是否正确加载。

5-3 数据导入页面

系统加载文件后会自动进行字段映射处理,这是数据标准化的关键环节。所谓字段映射,就是将原始数据中各种不同的字段名称统一转换为系统内部的标准字段名称,如将点名”“点号”“ID”等统一映射为“point_name”。系统内部维护了映射规则表,能够自动识别大部分常见字段名称。页面提供原始数据预览和标准化结果两个标签页,用户可以在两个视图之间切换对比。当自动识别不准确时,用户可以手动调整映射关系,这种设计兼顾了自动化效率和人工干预的灵活性。完成字段映射后,数据即可进入后续的清洗和分析环节。

5-4 字段自动识别与映射

5.2.3 缺失值处理

缺失值处理页面负责对数据中的空缺值进行处理,这是数据清洗的核心环节之一。在工程测量实践中,由于观测条件限制或仪器故障等原因,原始数据中常常存在缺失值,如果不加处理会严重影响后续计算的准确性。系统提供三种处理策略供用户选择。均值填充策略使用该列所有有效数据的平均值填充缺失位置,适用于数据分布较为均匀的场景。前值填充策略使用同一列中上一个非缺失的值填充缺失位置,适用于具有时间顺序或空间连续性的数据。删除缺失值所在行策略直接移除包含缺失值的行记录,适用于缺失值数量较少的情况。用户可以根据数据特点选择合适的策略。

5-5 缺失值处理页面

用户选择处理策略并点击执行按钮后,系统自动完成清洗操作。处理完成后,系统展示清洗前后的数据对比和详细的统计信息,帮助用户直观了解清洗效果。左侧展示清洗前的原始数据,右侧展示清洗后的数据,用户可以逐行对比处理前后的变化。对于经过填充处理的位置,在右侧表格中以特殊背景色高亮显示。表格下方展示详细的处理统计信息,包括各列缺失值的处理情况、填充值内容、处理前后行数变化等。这些统计信息为用户评估清洗效果提供了量化依据,确认效果后用户可以进入下一步异常检测环节。

5-6 缺失值处理结果对比

5.2.4 异常检测与分析

异常检测页面负责对数据中的异常值进行自动识别和标记。在工程测量中,异常值通常被称为粗差,可能源于仪器故障、观测错误等多种原因,如果不加处理会严重影响分析结果的准确性。系统提供两种经典的异常检测算法供用户选择。准则基于正态分布假设,将超出均值三倍标准差范围的数据点判定为异常值,适用于数据服从正态分布的场景。箱线图法基于数据的分位数进行判断,将超出上下四分位数1.5倍四分位距范围的数据点判定为异常值,适用于偏态分布数据。用户选择检测方法和要检测的字段后点击执行按钮,系统开始检测。

5-7 异常检测页面

检测完成后,系统以表格形式展示异常记录列表,异常值单元格以红色高亮显示,并附带异常原因说明,帮助用户理解该数据被判定为异常的具体原因。页面同时展示质量评分卡片,包括缺失率、异常率、完整度等质量指标的变化情况,帮助用户快速了解数据质量状况。系统还提供策略对比功能,以图表形式展示不同检测方法下的异常识别结果对比,用户可以直观地看到两种方法检测出的异常数量差异和重叠情况。通过对比分析,用户可以了解不同算法对当前数据的适用性,从而选择最适合的检测策略。

5-8 异常检测结果展示

5.2.5 人工复核与结果导出

人工复核页面是自动检测与最终决策之间的重要桥梁。虽然异常检测算法能够自动识别出大部分明显的异常值,但算法判断并非百分之百准确,存在误判和漏判的可能。因此,在自动检测之后引入人工复核环节十分必要。人工复核页面以表格形式展示所有异常记录,每条记录旁边提供三个操作按钮。确认异常表示用户认可系统的检测结果,该记录将被标记为已验证异常。忽略异常表示用户认为该记录为正常值,将从异常列表中移除。手动修正允许用户直接输入新值替换原值,弹出编辑框输入新值后即可完成修正。页面顶部展示复核进度条和状态统计,帮助用户掌握整体处理进度。

5-9人工复核工作台

用户完成所有异常记录的人工复核后,即可进入结果导出环节。系统提供两种导出方式。CSV数据下载用于导出清洗后的数据文件,该文件包含了经过缺失值处理和异常值处理后的完整数据,用户可以将该文件导入其他专业软件进行后续分析。HTML报告下载用于导出一份完整的分析报告,报告以网页形式呈现,内容包括数据质量评估信息、缺失值处理统计、异常检测结果、策略对比数据以及人工复核记录等。报告采用结构化布局,配有图表和表格,便于阅读和存档。通过以上五个环节的紧密衔接,用户可以获得高质量的清洗数据和完善的分析报告。

5-10 结果导出

5.3 系统测试

要想让系统既稳定又可靠,就要全面地执行一些测试,这些测试包含功能测试和性能测试这两个部分。

功能检查包含系统全部的功能模块,其中涉及用户注册登录,文件导入,字段识别,缺失值处理,异常检测,人工复核以及结果导出等功能模块,检查时,就各个功能点制定了许多检查案例,这些检查案例包含正常情形和异常情形。以文件导入功能为例,检查了多种格式的 CSV 文件, TXT 文件,还检查了有着不同分隔符的文件;就缺失值处理功能而言,对其所有三种处理策略展开了检查;至于异常检测功能,则针对两种检测算法在不同数据分布状况下的表现实施了检查,功能检查结果显示,系统的各项功能皆能正常运行,符合设计需求。

性能考量重点在于数据处理的时间效率,检测时会用不同大小的测量数据文件来分别考量文件读取,缺失值处理以及异常识别所需的时间,检测结果显示,针对包含数千行的测量数据文件而言,这些操作大都能在几秒以内结束,其响应速度符合实际应用的需求,而且,当数据量不断增大之时,处理时间表现出线性上升的态势,这也与预期相符。

兼容性测试用来验证系统在不同操作系统和浏览器中的运行状况,后端服务在WindowsLinux环境下可以正常开启并运行,前端页面于ChromeFirefox以及Edge浏览器当中表现正常,交互功能亦未出现异常。

经由全方位的考量及验证,系统的功能较为完善,其性能处于良好水平,运行也十分稳定,可以满足工程测量数据清洗与分析的实际需求。

更多推荐