面向智慧消防的数据采集及分析系统的设计与实现

2024-01-24 08:52顾梦娇那孜古力·斯拉木钟青阳汪世宇赵鸿博马文涛
电脑知识与技术 2023年34期
关键词:智慧消防数据可视化爬虫

顾梦娇 那孜古力·斯拉木 钟青阳 汪世宇 赵鸿博 马文涛

摘要:“智慧消防”建设中一项重要任务是采集及分析城市消防数据,全面展示火灾情况和数据特征。面向“智慧消防”的数据采集及分析系统采用Python的网络爬虫Request庫和Django网络框架,设计了一个面向城市消防领域的数据采集及数据分析的系统。该系统不仅能快速地获取城市消防数据,还能全面分析并可视化展示火灾情况和特征,从而提升火灾数据采集的效率并拓展城市火灾数据分析的方法。该系统将提升火灾数据采集效率,拓展城市火灾数据分析的理论和方法,为“智慧消防”的发展做出贡献。

关键词:智慧消防;爬虫;数据可视化;数据分析;Web应用架构

中图分类号:TP311.5      文献标识码:A

文章编号:1009-3044(2023)34-0066-05

开放科学(资源服务)标识码(OSID)

0 引言

“智慧消防”对于提升消防安全水平和保障公众生命财产安全至关重要[1],近几年逐渐成为近年消防界研究的热点[2]。尽管已有的智慧消防系统取得了一些成果,但在数据采集和分析方面仍存在不足之处[3]。传统的数据采集方法效率低下且容易出错[4],而现有系统在数据分析和展示方面缺乏全面性和准确性[5]。因此,开展了面向城市消防领域的数据采集及分析系统。首先利用Python的Request网络爬虫技术获取城市消防数据[6],之后通过Django框架实现了系统的爬虫功能、数据分析、数据可视化等功能[7]。本文旨在提升火灾数据采集效率,拓展城市火灾数据分析的理论和方法,为“智慧消防”的发展做出贡献。

1 相关技术

1.1 网络爬虫Request库概述

网络爬虫是一种自动化程序,用于从网页中获取数据信息。通过访问网页的文本协议和地址来实现数据的爬取,无须人为干预或操作即可完成网站中数据信息的自动化爬取[8]。网络爬虫技术主要用于对网页中数据的爬取和分析,可以应用于多种网络信息的检索和存储[9]。常用的网络爬虫操作流程是“获取数据-解析数据-存储数据”,模拟了用户使用浏览器获取网页信息的过程。在Python中,常用的HTTP请求库是Requests[10]。相比于urllib库,Requests更易于使用,并可以减少很多工作量[11]。实际上,Requests是在urllib基础上进行了高度封装,并支持一些其他特性,如使用Cookie保持会话、自动确定响应内容的编码等[12]。

1.2 Django框架简介

Django框架结构如图1所示。Django 的设计采用的是 MTV(Model-View-Template) 架构,一种与经典 MVC 架构类似的架构[13]。M模型层与数据库交互,进行增删改查操作;models.py中的Firesi类定义了火灾案例的关键信息,可根据需求增加和修改属性。通过M模型层操作实现对数据库中火灾案例数据的灵活管理和处理。V视图层接收请求并处理业务,view.py中的函数完成爬虫任务和案例管理,通过Fight()函数作为爬虫入口,Jiangxi_news()c和Guizhou_news()获取特定省份的消防案例,Keys()确定案例属性,News()和Root_Delete()负责保存和删除案例,通过Echarts()展示案例的图表化信息。在系统中,T表现层封装和构造了要返回的HTML,创建了基本的页面模板,包括layout.html、fight.html、news.html、show.html和echarts.html,通过动态生成相应的HTML页面,给用户提供展示和交互的界面,实现了页面的组织和重用,提高了系统的可维护性和灵活性。

2 系统分析

2.1 系统功能需求分析

从用户角度出发,设计实际功能,系统需要实现登录系统、数据采集、数据预处理、数据预览、可视化分析等功能。系统包括普通用户和管理员用户。用户功能需求分析阶段的用例图如图2所示。

系统管理员通过登录系统模块确认身份后,可以采集消防网页的数据,并以超链接的形式显示火灾案例标题。当管理员该功能按钮时,数据采集模块会自动调用数据预处理模块对采集到的原始数据进行清洗、转换、集成和规范化等操作。处理后的数据会被存入数据库,并通过数据预览模块进行文本呈现、删除和导出操作,方便其他研究人员使用。同时,系统还设计了可视化分析模块,为普通用户提供前后端交互的可视化界面,方便他们浏览数据分析结果。整体而言,数据预处理是数据采集的子过程,因为它依赖于数据采集,而没有数据采集,就无法进行数据预处理。因此,在用例图中使用include关系能够清晰地表达数据采集包含数据预处理的关系。

2.2 系统非功能性分析

由于性能需求总是与系统的具体功能相联系,所以非功能性需求工程方法的结果质量通常取决于功能性需求规格的质量[14]。对于该系统,除了实现数据采集、预处理和可视化分析功能外,还要满足以下几个非功能性需求:

1) 安全需求:降低紧急情况发生的可能性,快速反应并处理异常,以防止系统故障和数据丢失。

2) 可靠性需求:确保准确无误的数据采集,规范输入数据格式,避免因格式不一致而引发错误。

3) 易用性需求:功能直观易学,操作简便,界面简洁美观。

4) 可扩展性需求:具备良好的可扩展性,能够满足未来的业务增长和功能变化需求。

5) 灵活性需求:适应不同网页结构,进行适当修改以适应不同消防网页的环境和结构。

综合考虑上述需求,系统会采取多层次的安全措施,验证和备份数据,保证数据准确性和安全性。用户界面会简洁明了,逻辑直观,提供操作指南。系统采用模块化架构,支持新的功能和数据源扩展。同时,系统也会灵活适应不同网页环境和结构。

3 系统设计

3.1 系统架构设计

面向城市消防的数据采集及分析系统架构设计如图3所示。该应用采用了多层架构来实现功能。在应用层,使用HTML、CSS和JavaScript等前端语言设计Web页面,以展示相关功能。在业务层,采用了基于MTV模式的Django框架,包含Model层、View层和Template层,用于设计功能模块、处理业务逻辑和展示火灾案例数据给用户。数据库层主要处理系统内部的数据交互,使用MySQL作为数据库存储数据,其复杂性很低,但是仍然提供广泛的数据库功能和选项[15],并提供数据预览功能,实现数据库的可视化管理。通过这种架构,系统实现了前端展示、业务逻辑处理和数据库交互的功能。

3.2 系统功能模块设计

面向城市消防的数据采集及分析系统模块层次图如图4所示。总共由以下5个功能模块组成:

1) 管理员登录模块

系统银行分为管理员和普通访客,以体现非功能需求的安全性。普通访客可以直接访问系统并进入可视化分析页面。然而,如果他们想进入其他页面,就需要进行登录验证。管理员需要输入正确的用户名、密码和验证码才能进入系统,管理员具有最高权限,可以执行数据采集、预处理等操作,并对整个平台进行操作。

2) 数据采集模块

数据采集模块是为了确保数据来源的安全可靠,并且让采集操作变得方便和易用。管理员在数据采集页面上确认需要爬取的省份,并输入火灾案例的时间范围,然后提交这些数据到后台进行采集。采集完成后,火灾案例的标题以 URL 的形式展示在页面上。为了提高系统的可扩展性、全面性和灵活性,该模块针对不同的省份编写了不同的爬虫函数。

3) 数据预处理模块

管理员可以通过点击火灾案例标题进入数据预处理页面。在这个页面上,管理员可以根据火灾案例新闻对数据进行预处理,包括完善数据的属性值。当管理员确认数据无误后,可以将数据存储到数据库中。

4) 数据预览模块

数据预览模块是一个界面,它将数据库中的数据以文本的形式展示在页面上供管理员进行操作。在这个模块中,管理员可以对数据进行导出和删除操作。这个模块设计简单且易于使用,提供了强大的易用性。

5) 可视化分析模块

可視化分析模块的目标是通过丰富的图表类型来有效传达消防案例数据的信息。消防案例数据拥有时间、空间和案例属性三个维度,因此在设计过程中要考虑这些数据特点。模块会有针对性地选择柱状图、折线图、饼图、旭日图、树图和地图等多种图表类型,用于展示火灾案例的现状情况。这样的设计可以减少用户认知负担,提高决策效率,并促进数据内容的有效传达。

4 数据库设计

4.1 概念模型设计

在面向城市消防的数据采集及分析系统的实体关系图中,实体有管理员、火灾案例属性。系统E-R模型如图5所示。

4.2 逻辑模型的设计

根据系统E-R模型图,转换出两个数据表,分别是,用户信息表AdminInfos:用于控制用户访问权限;火灾案例属性表FileINFO:用于存储每次火灾的火灾信息。分别如表1和表2所示。

5 系统开发及测试

5.1 功能模块的实现流程

数据分析流程的研究方法如图6所示,总共分为4部分,各部分负责的功能如下:

1) 数据采集:通过 requests 库获取各种消防案例的数据。

2) 数据清洗:通过 pandas、numpy、re 库对案例的数据进行清洗处理,得到火灾案例属性值。

3) 数据存储:将处理好的属性值存储到 MySQL 数据库。

4) 数据分析、展示:对数据进行可视化现状分析,以全面详细的方式展现近年来的火灾发生情况和相关数据特征。

当管理员点击导航栏中的数据获取按钮时,系统会跳转到“/fight/”页面,进入数据采集模块。在该模块中,管理员需要选择省份,并确认时间范围。一旦确认完毕,管理员可以点击开始爬取按钮。

当开始爬取按钮被点击后,表单数据会通过 form 提交至火灾采集视图函数 Fight()。在该函数中,可以通过 request.POST.get() 方法来获取提交的信息,确认省份编号、省份火灾平台链接和时间范围,通过调用预先编写好的省份火灾平台爬虫代码来获取所需的数据,并返回相应的信息。数据采集的结果如图7所示。

管理员点击数据展示按钮后,进入“/show/”数据预览模块。调用视图函数 Show() 查询火灾基本情况表数据,并使用 paginator 创建分页对象。通过 pagination.page_queryset 方法获取数据和总页数。

使用render() 传递数据到show.html 页面,并将每条数据逐行展示。每条数据后面有删除按钮,点击后在Root_Delete() 函数中使用 models.FileINFO.objects.filter(id=nid).delete() 删除对应数据。数据导出由 Save() 函数实现,定义表头信息,通过 for 循环将数据写入 Excel 文件。预览界面可参考图8。

5.2 系统功能测试

图9展示了六个省份在四年内不同月份的城市火灾数量情况的堆叠条形图。它可以将六个省份的火灾数量综合起来,以便比较各省份之间的差异,快速了解火灾情况,并进行直观的比较。观察图表可知,在四年的8—11月份,江西省的火灾数量呈现出上升的趋势。这个趋势提醒当地政府和民众在这个时间段加强火灾防范工作,减少火灾的发生,以避免人员和财产的损失。

图10折线图展示了四年内不同月份火灾数量的变化情况。数据显示,每年的 8—11月份城市火灾数量显著增加,高于其他月份。这一趋势为消防部门提供重要的提示和提醒,应在火灾高发期加强巡查和预防措施,以降低火灾发生率。

图11条形图可以直观地比较各省份在不同月份的火灾数量,并能够快速获取某个省份火灾数量的变化趋势。此外,它还具有方便的交互功能,比如点击图例可以展示具体省份的火灾数量情况,或者通过交互式操作展示不同时间段的火灾数量变化情况,帮助用户更好地理解数据背后的趋势和规律。结合图10和图11中的数据,可以观察到在2021年,陕西省的城市火灾数量最多,高于其他五个省份,特别是在8个月份的火灾数量都超过了广东省。

6 结束语

本项工作的主要内容是设计和实现面向城市消防领域的数据采集和分析系统。首先,介绍了Request库,并详细讨论了采用了Django框架中MVT模式各模层的实现。接着对系统进行了设计,包括系统架构、功能模块和数据库的设计。最后,介绍了系统功能的实现以及开发测试。

本文设计并实现的面向“智慧消防”的数据分析及采集系统能够快速采集城市消防災情的发生情况和关键特征数据,并通过高效算法的分析,从庞大冗杂的历史城市消防灾情数据库中筛选出与目标数据最匹配的一系列灾情数据,为“智慧消防”领域的决策系统提供宝贵的数据资源。这将为消防部门提供准确的灾情数据支持,有助于提高决策制定和灾情应对的效率。

目前的不足之一是数据采集模块的丰富度和系统界面设计方面存在有待完善之处。为了解决这些问题,未来的工作计划是通过编写更多地区的爬虫代码来丰富数据采集模块,增加数据来源的多样性。同时,利用图表功能生成更多的可视化分析,完善系统的数据展示和分析能力。此外,还计划持续挖掘火灾数据的内在联系,深入研究数据背后的规律和趋势。通过这些工作的持续改进,可以提升系统的功能和用户体验,进一步提高应用的价值和效益。

参考文献:

[1] 刘晓薇,雷蕾.智慧消防发展现状研究[J].消防界(电子版),2022,8(1):19-22.

[2] 谢济涛.智慧消防在消防安全管理中的应用[J].消防界(电子版),2021,7(19):81-82.

[3] 李国生.智慧消防平台建设探讨[J].消防科学与技术,2018,37(5):687-690.

[4] 肖调伟.基于大数据+GIS技术的灭火救援“一张图” 构想[J].中国公共安全(学术版),2018(2):65-67.

[5] 刘筱璐,王文青.美国智慧消防发展现状概述[J].科技通报,2017,33(5):232-235.

[6] 曾浩.基于Python的Web开发框架研究[J].广西轻工业,2011,27(8):124-125,176.

[7] 任妮,吴琼,栗荟荃.数据可视化技术的分析与研究[J].电子技术与软件工程,2022(16):180-183.

[8] 孙立伟,何国辉,吴礼发.网络爬虫技术的研究[J].电脑知识与技术,2010,6(15):4112-4115.

[9] 李玉香,王孟玉,涂宇晰.基于python的网络爬虫技术研究[J].信息技术与信息化,2019(12):143-145.

[10] 黎曦.基于网络爬虫的论坛数据分析系统的设计与实现[D].武汉:华中科技大学,2019.

[11] 林家业,王啸闻.基于Python的静态网页数据分析与正则提取[J].电脑编程技巧与维护,2023(2):159-161.

[12] 杨健,陈伟.基于Python的三种网络爬虫技术研究[J].软件工程,2023,26(2):19,24-27.

[13] 白相辰.基于Django框架的Web在线教育平台的设计与实现[D].北京:北京交通大学,2019.

[14] 吴淑慧.基于问题框架方法的软件非功能性需求分析的研究[D].合肥:安徽大学,2018.

[15] 郑智方,李彬,刘世坤,等.探究MySQL的运用实例-对数据库的宏观把握[J].科技风,2020(6):129.

【通联编辑:谢媛媛】

猜你喜欢
智慧消防数据可视化爬虫
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
城市轨道交通之智慧消防
利用爬虫技术的Geo-Gnutel la VANET流量采集
关于“智慧消防”建设的实践与思考
大数据环境下基于python的网络爬虫技术
可视化:新媒体语境下的数据、叙事与设计研究
我国数据新闻的发展困境与策略研究