Github链接:https://github.com/SaKaNnaaa/032002432
一、PSP表格
(2.1)在开始实现程序之前,在附录提供的PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。(3’)
(2.2)在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间(3’)
PSP2. | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 50 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 50 |
Development | 开发 | 1040 | 2160 |
·Analysis · | 需求分析 (包括学习新技术) | 120 | 960 |
· Design Spec | · 生成设计文档 | 40 | 20 |
· Design Review | · 设计复审 | 20 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 0 |
· Design | · 具体设计 | 120 | 180 |
· Coding | · 具体编码 | 600 | 1200 |
· Code Review | · 代码复审 | 60 | 0 |
·Test | · 测试(自我测试,修改代码,提交修改) | 60 | 20 |
Reporting | 报告 | 120 | 60 |
· Test Repor | · 测试报告 | 30 | 0 |
· Size Measurement | · 计算工作量 | 30 | 20 |
· Postmortem & ProcessImprovement Plan | · 事后总结, 并提出过程改进计划 | 60 | 40 |
· 合计 | 1180 | 2270 |
二、任务要求的实现
(3.1)项目设计与技术栈。从阅读完题目到完成作业,这一次的任务被你拆分成了几个环节?你分别通过什么渠道、使用什么方式方法完成了各个环节?列出你完成本次任务所使用的技术栈。(5’)
任务拆分为数据的爬取、数据的存储和处理、结果的输出和展示。主要通过python及多种第三方库完成各环节。在数据的爬取中,尝试通过python中urlib、etree、re的正则表达式、html2text等技术的使用进行数据的爬取;尝试通过pandas、numpy等技术的使用存储和处理数据;尝试通过pyecharts中多个图表的使用来完成结果的输出和展示。
(3.2)爬虫与数据处理。说明业务逻辑,简述代码的设计过程(例如可介绍有几个类,几个函数,他们之间的关系),并对关键的函数或算法进行说明。(20’)
任务相关数据要从国家卫健委官网疫情通报模块中爬取,并要求能实时更新。所以我将爬取目标分成两部分,第一部分先爬取url比较有规律的目录页面,每个目录中有24天的疫情通报链接,在通过爬取到本地的url信息去爬取单日的疫情通报信息。第二部分通过获取的url爬取通报文本信息,并从中整理出目标数据,该部分对于我来说难点在于如何提取纯文本信息,我先后尝试了xpath、正则表达式等方法,但因能力和时间有限,最后只能采用html2txt的方法获取文本。代码设计中:对于第一部分,因为时间关系,对爬虫的学习较为粗略,在页面内容获取上套用了网上的模板并作出对应修改,封装为create_tree()、get_data()两个函数,获取url链接列表,第二部分模板部分封装为create_context(),对html文本处理获得较简的目标段落文本的get_src_data(),以及对最简文本处理提取数据列表的handl_src() 。其中get_src_data()中通过关键字,如“本土病例”和“当日新增治愈”为节点,截取中间的内容,再找"(“、”)"中的内容,通过“,”分割数据,形成诸如包含“四川46例”般的字符串列表,再通过handl_src()对特殊字符串元素进行处理,就能提取出相应数据。
(3.3)数据统计接口部分的性能改进。记录在数据统计接口的性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(例如可通过VS 2019/JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。(6’)
不懂
(3.4)每日热点的实现思路。简要介绍实现该功能的算法原理,可给出必要的步骤流程图、数学公式推导和核心代码实现,并简要谈谈所采用算法的优缺点与可能的改进方案。(6’)
每日热点因时间和能力问题,时间有限没有进行设计以及相关技术的查找和学习,只是简单以单日非港澳台地区本土新增前三的信息以及港澳台地区本土新增数据输出作为实现。
(3.5)数据可视化界面的展示。在博客中介绍数据可视化界面的组件和设计的思路。(15’)
数据可视化采用了pyecharts的技术,简单学习了map、line、bar3d、timeline等图表的使用, 组件的使用较简单。通过map和timeline的组合可以较只直观地看出新增病例的分布程度和变化,但在对颜色刻度范围的设定上,最初采用数据中的最大值和最小值来确定上下限,但港澳台部分地区数字量级过大,导致非港澳台地区区分不明显,所以在刻度的选取上不参照港澳台地区数据。
三、心得体会
(4.1)在这儿写下你完成本次作业的心得体会,当然,如果你还有想表达的东西但在上面两个板块没有体现,也可以写在这儿~(10’)
本次作业对于我来说任务量大、难度较为艰巨。因没项目开发经验以及太久没打代码,导致任务上手难度极高。同时,缺乏课外对额外技能的学习和掌握,本次任务所使用的技术几乎全都要从零学起,在决定所要学的技术、查找资料以及技术学习等方面占用大量时间。在本次任务中,我划分的数据爬取、数据整理和分析以及数据可视化三个模块,因时间和精力关系,只能说大体的完成了数据爬取的模块,其他部分实属赶鸭子上架,同时在对代码的优化和测试方面,几乎没能有时间和精力的投入,这也导致了作业完成度较低。但在本次作业中,初步掌握了python基础语法,初次实现了数据存储和文件读写,初步掌握爬虫基本技术,认识了python多种第三方库;同时认识到项目开发中规划和设计的重要性,在代码编写过程中,因为几乎处于边打边学、面向百度编程的状态,所以没能有个良好的功能规划和程序封装的设计导致程序后期的开发和修改都难上加难。以上,虽然这次作业难度过大,但我能从中收获良多。