2022软工K班个人编程任务

一、PSP表格

  • (2.1)在开始实现程序之前,在附录提供的PSP表格记录下你估计将在程序的各个模块的开发上耗费
    的时间。(3’)
    (2.2)在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。
    (3’)
PSP2.1Personal Software Process Stages预估耗时实际耗时
planning计划3030
.Estimate.预计这个任务需要多少时间600960
Developmen.开发500800
.Analysis.需求分析(包括学习新技术)100300
.Design Review.设计复审60100
.Coding Standard.代码规范(为目前的开发制定合适的规范)6060
.Design.具体设计6060
.Coding.具体编码300700
.Code Review.代码复审6060
.Test.测试(自我测试,修改代码,提交修改)6060
Reporting报告60100
.Test Repor.测试报告6060
.Size Measurem.计算工作量6060
.Postmortem & Process Improvement Plan.事后总结,并提出过程改进计划60100
合计(去除重叠部分)6001200

二、任务要求的实现

  • (3.1)项目设计与技术栈。从阅读完题目到完成作业,这一次的任务被你拆分成了几个环节?你分
    别通过什么渠道、使用什么方式方法完成了各个环节?列出你完成本次任务所使用的技术栈。(5’)

    • 我大致是分成了一下环节,将卫建委的文章爬虫下来,完成对段落数据的处理接口,完成数据存储在excel的接口,制作数据可视化,利用lstm机器学习预测每日疫情,与实际对比,以完成发现疫情的转折与变化。爬虫部分使用的是python的selenium库,数据处理接口的实现是利用python的re库,数据存储到excel是利用python的openpyxl,数据可视化是利用了python的pycharts库,然后建了一个flask项目,通过前端传值后端调用对应时间的数据,实现可视化,机器学习是用python的tensoflow的库实现。技术栈包括,python的各种库,以及简单的前后端。
  • (3.2)爬虫与数据处理。说明业务逻辑,简述代码的设计过程(例如可介绍有几个类,几个函数,
    他们之间的关系),并对关键的函数或算法进行说明。(20’)

    • 爬虫的大体思路是,先将每日文章的网址爬到excel表格中,然后再读取excel里面的网址,将文章对应段落存取下来。
    • downlink文件的实现的是将每个文章链接爬到link.xlsx里面,原本是想利用request库爬的,但是发现该网站有反爬机制,然后换到selenium库,利用正则表达式获得网址,然后存到excel里。
    • downpage文件实现的是文章对应段落的爬取,同时将时间爬取下来,简单的方法是调用 driver.find_element(By.CLASS_NAME,"list").text这个方法,因为有反爬虫机制,最近一个月的分章的源码里文中会被标签断开成好多段,利用这个方法直接获得文本内容,然后用回车作为分隔符,就将文章分为一段一段的,然后判断关键词,保留下来段落里有“新增确诊病例”,“新增无症状感染者”,“港澳台”,分别为有用的段落保存到excel,爬完一个文章在存链接的excel里打上标记,这样如果中断也不会重新爬爬过的文章。
    • 数据处理的实现,新增确诊与无症状我用类似的处理方式,函数takecare就是用于处理文本,返回的是一个字典,省份对人数的字典。实现思路是,将文本先按照右括号断开,每一段里判断是否“本土”在这段里面,如果有就说明段括号里面的数据是需要的,利用正则将括号的内容提取出来,按照“;”,“,”的优先级再将这段话划分,对于每一段利用正则获得省份和人数,用字典记录,返回字典。
    • init_excel函数excel初始化,如果文件不存在创建文件,将省份先记录下来。insert函数参数是传入excel文件名,初始时间,插入数据的时间,省份,数量,以及类型(新增确诊还是无症状),通过cal_days函数算出两个时间相差的天数,然后找到对应的位置,将数据填入。
    • mid123文件内主程序实现的就是调用以上的接口,处理已经爬虫下来的的段落的数据,并将数据保存到changes.xlsx文件。
  • (3.3)数据统计接口部分的性能改进。记录在数据统计接口的性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(例如可通过VS 2019/JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。(6’)

    • 在我进行数据处理并且插入的时候发现处理一个日期的数据处理时间很长,通过debug后发现原因在于openpyxl当excel文件大小很大的时候插入数据花的时间很大,想要换一个python的库去实现这个功能,可以利用别的库,由于时间不够就没有优化了。
  • (3.4)每日热点的实现思路。简要介绍实现该功能的算法原理,可给出必要的步骤流程图、数学公式推导和核心代码实现,并简要谈谈所采用算法的优缺点与可能的改进方案。(6’)

    • 题目明确要求在现有数据下用上人工智能挖掘出每一日值得关注的事件。在没有仔细审题的情况下我一开始想的是把卫建委发的一些通告通知再爬下来,用聚类算法来处理文本然后获取热点信息。后面觉得应该是从每日新增上面的变化来做分析,我第一时间想到的是利用lstm做一个时间序列预测,输入前几天的数据,输出预测的后一天的数据,通过预测值和实际值的差别来做一个判断,如果相差不大说明是合理的,相差较大说明出现了转折,例如疫情被控制或者疫情爆发。lstm的相较于普通rnn的优势来说应该是它引入称作“门”的内部机制,这些门结构可以学习序列中哪些数据是要保留的重要信息,哪些是要删除的,可以调节信息流,可以解决梯度消失的问题。但是lstm的训练的硬件要求比较高,但是我训练的数据量并不大(用cpu也训练的很快(绝对不是我懒得配gpu)),但这个也是问题,训练量不大训练 效果也一般。!
    • 核心代码其实不长,如下
      model=tf.keras.Sequential([ LSTM(150,return_sequences=True), Dropout(0.2), LSTM(170), Dropout(0.2), Dense(1) ])
  • (3.5)数据可视化界面的展示。在博客中介绍数据可视化界面的组件和设计的思路。(15’)

    • 因为时间比较赶,我找到了比较简单的实现方式,用到的python的flask库以及pyecharts库。我想达到的效果是在页面里输入一个日期,跳转到可视化的界面,通过中国地图的方式展示每个地区的新增确诊以及新增无症状。实现思路是,创建一个flask项目,写一个开始界面,用户在页面输入日期,跳转界面,日期传到后端,后端读取excel对应日期的数据,用pyecharts展示出来。传参数在pyecharts的封装下是很好实现的,把读取的数据存到list里面传给pyecharts就可以了。

三、心得体会

  • (4.1)在这儿写下你完成本次作业的心得体会,当然,如果你还有想表达的东西但在上面两个板块没有体现,也可以写在这儿~(10’)
    • 刚看到题目觉得不是特别难,爬虫,记录,处理,人工智能,可视化都多少接触过应该会比较有优势,真正开始之后就觉得坑很多。卫建委的反爬虫机制使得我原本的request库来爬的计划失败了,数据格式的变动很大,使得数据处理的难度加大了很多,记录方面感觉选择了一个不太好的库,excel记录的也比较慢,人工智能也只能勉强凑数一下,学习的东西确实也很多,接触了新的爬虫,第一次写项目工程的文件,python语法更熟练了。但是我认为作业难度还是太大了,如果只是出于学习到知识的角度可以选择更好的题材,难度太大也导致了平时在作业上耗时过大,如果只是想所有功能都适当时间要投入的时间成本也是很大,压力有点太大了,其他事情都没法做我觉得就影响日常学习生活了。成品是有蛮多缺陷的,ai预测偏离太大,三年的页面数据是都爬下来了,但是只处理了大概一年的数据这样,前端界面也很简陋,但是总体是做出来了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值