新冠疫情新闻报道分析
项目展示页面:http://badwei.xyz:8080/covid-19/lxw.jsp
项目源码及数据集(点击源码即可下载):
源码
1. 系统概述
1.1 系统背景介绍
2020年,新冠疫情爆发,各媒体都有对新冠疫情信息的报道,这些报道杂乱无章,所以设计本系统,分析这些疫情新闻报道所体现的大数据信息。
衷心感谢各位医疗工作者的付出和努力,希望通过对疫情新闻的分析,让大家增强对疫情的关注,愿所有人都好起来。
1.2 系统架构设计
1)Python数据爬取
2)分布式Hive仓库进行数据处理
3)Sqoop导出到mysql
4)Python读取mysql并处理数据
5)前端读取python处理后的数据
2.数据采集模块的设计与开发
如果使用的是公开的数据集,则这一模块标题可以改为“2. 数据描述”,阐述数据的来源及数据所包含的信息
Python数据采集模块:(项目来源:https://github.com/BlankerL/DXY-COVID-19-Crawler)
本项目为新型冠状病毒(COVID-19/2019-nCoV)疫情状况的实时爬虫,数据来源为丁香园。
为方便读取,为以上爬取的信息建立数据仓库:(项目来源:https://github.com/BlankerL/DXY-COVID-19-Data )处理为 csv文件。
最后处理的csv数据集(参考:https://github.com/BlankerL/DXY-COVID-19-Data/releases/tag/2021.01.06 )
原作者项目爬取了丁香医生几乎所有的数据,包括新闻以及疫情信息,因为本项目主要做对疫情新闻的分析,所以只取新闻部分DXYNews.csv做数据集。
DXYNews.csv的内容大致为:疫情期间各家媒体所发布的关于疫情的新闻报道和时间,来源,题目,内容等等之类的信息。
本项目之后的数据集使用DXYNews.csv是截止到2020.12.31号的数据集。(另外,由于电脑本身内存问题,导致内存不够,数据量过大会引起内存不足从而无法分析,所以以下所有数据集使用的是2020.12.1-2020.12.31期间一个月的数据进行分析处理。)
3. 数据预处理模块的设计与开发
1.数据预处理程序1:pre-treatment_summary.py
单独提取数据集文章内容:为了生成词云。
pandas模块读取DXYNews.csv文件,并单独提取文章内容(summary)一列,使用jieba对文章分词分词,分词后引入stopwords.txt停词表,对无用数据进行剔除,对结果数据存储到test文件中。
test数据内容为:
2.数据预处理程序2:pre-treatment-Timeinfo.py
提取数据集文章的时间、题目、来源。
pandas模块DXYNews.csv文件,提取时间、题目和来源。字段中间用hive默认分隔符’\001’隔开,处理后数据存为test2文件,test2文件内容为:
4. 数据仓库的设计与开发
1.启动hadoop集群,启动mysql。
2.启动分布式hive仓库,node01下启动hiveservers2, node02下beeline连接hive
3.建立数据库covid19day
4.创建第一个来源表dayall_origin,包括时间来源time_local,题目title,来源infoSource,设置分区字段datestr 使用hive默认分隔符’\001’分隔
5.创建第二个来源表allword,包括词条word,datestr为分区字段
6.把test和test2传入虚拟机node01的/root/covid19day目录中
7.node01处理test,把test传入hdfs ,node02中hive表allword加载数据,因为数据集是2020.12.01-2020.12.31的数据,所以datestr设为20201201,在allword中查看前3条数据看是否导入成功
8.同样的方法,node01处理test2,把test2传入hdfs ,node02中hive表dayall_origin加载数据,在dayall_origin中查看前3条数据看是否导入成功
5.数据分析模块的设计与开发
1.分析一:对来源表dayall_origin进行分析(分析时间,进行时间明细操作)
1)创建明细表dayall_detail包含来源时间time_local,日期daystr,时间timestr , 月month , 天day , 小时hour , 题目title , 来源infoSource
2)创建中间表t_ods_tmp_detail表解析时间字段,把time_local分成daystr,tmstr,month,day,hour
3)把t_ods_tmp_detail表中数据写入到明细表dayall_detail中
4)对数据分析,分析每天发布的新闻总数,创建数据表covid19_everyday,包含每天的新闻数covid19 ,天daystr
5)用hive计算dayall_detail表中每天的新闻数,结果存储到表covid19_everyday中
6)查看表covid19_everyday中前3条数据,看是否成功
2.分析二:对明细表表dayall_detail进行分析(分析数据来源)
1)创建数据表covid19_sourcenum,包含数量covid19,来源infoSource
2)在明细表dayall_detail中,计算来源个数,写入到表covid19_sourcenum中
3)查看表covid19_sourcenum中前三条数据,验证是否成功
3.分析三:对来源表allword进行分析
1)创建表allword_seged,包含数量num和词条word
2)从来源表allword中计算word的数量,存储在表allword_seged中
3)查看表allword_seged几条数据,验证是否成功
6. 数据导出模块的设计与开发
1. 数据导出1:导出covid19_everyday表
1)在mysql中创建表t_covid19_num,包含cvoid19NewsNum,dateStr
2)sqoop把hive表covid19_everyday导出到mysql表t_covid19_num
3)sqlyog连接mysql,查看表中数据是否导出正确
2.数据导出2:导出covid19_sourcenum表
1)在mysql中创建表covid19_sourcenum,包含数量covid19,来源infoSource
2)sqoop把hive表covid19_sourcenum 导出到mysql表covid19_sourcenum
3)sqlyog连接mysql,查看表中数据是否导出正确
3.数据导出3:导出allword_seged表
1)在mysql中创建表words_num,包含数量num,词条word
2)sqoop把hive表allword_seged 导出到mysql表words_num
3)sqlyog连接mysql,查看表中数据是否导出正确
7.报表展示模块的设计与开发
本项目利用echars显示报表。
1.设计echarstest.py,读取mysql数据库中表covid19_sourcenum表t_covid19_num和表words_num中的数据并且处理为echars的字典列表的数据echarsin,把新闻日期存为”data”,新闻数量存为”daynewsnum”,新闻来源存为”infosource”,新闻来源数量存为”sourcedaynewsnum”,把新闻来源和新闻来源数量当做name value 存入”bing”中,把词条和词条的个数当做name value存入”ciyun”中,把城市名和城市出现个数当做 name value存入”city”中
2.网络服务器配置tomcat,将echarsin放到服务器上当做数据来源
3.jsp中写javascript利用getInputStream获取信息流,通过url链接到对象,获得输入流,然后读取为一行字符串。
4.利用输入流InputStream中获得的数据data,进行可视化展示。
9.系统特色及总结
系统特色:
系统采用了:数据采集模块,数据预处理模块,数据仓库,数据分析,数据导出,报表展示模块等6个模块,综合利用了python爬虫,python数据读取写入以及数据处理,hive仓库,hive分析,sqoop导出,echars展示等多个功能点。
数据采集模块采用python爬取丁香园疫情新闻并处理为csv文件。
数据预处理模块采用python进行对csv文件的读写操作。
数据仓库使用hadoop分布式集群,采用分布式的hive建立数据仓库,分布式hdfs存取数据并导入hive仓库。
数据分析阶段,建立中间表、明细表等存储hive处理后的数据。
数据导出利用sqoop导出到mysql
报表展示利用echars进行可视化展示,并将jsp页面部署在有tomcat服务的网络服务器上,方便查看。
系统最后通过报表分析得出结论:
系统通过对整个12月份的疫情新闻报道的分析echars展示,得出结论:
1.通过每日新闻折线图,得出结论:12.7日和12.8日无疫情相关新闻,可能疫情有所缓解,12月30号疫情报道数飙升,可能在当天出现了新的疫情,或者疫情有了重大突破。
2.通过各媒体报道数柱状图和新闻发布数饼状图得出结论:央视新闻发布的新闻数占比90%,一家独大,其他几家零零散散发布了剩下的10%。
3.通过12月高频词词云得出结论:病例,疫情,确诊,肺炎,输入,死亡,新增等词汇占比非常之高,可以知道疫情的危害,以及疫情对我们的伤害之大。
4.北京,上海等地区被报道次数较多,可能疫情较为严重或者对疫情较为重视。
总结:
通过对新闻疫情数据的分析,了解了新闻所体现出来的各种信息,了解了疫情的信息,更清楚地认识了疫情的严峻性。
通过对整个项目的实现,对分布式hadoop集群,hdfs存取数据,hive仓库操作以及sqoop操作更加熟悉,对echars展示操作更加熟悉。对大数据的处理过程更加深入。
项目最后,再次衷心感谢各位医疗工作者的付出和努力,通过对疫情新闻的分析,让大家增强对疫情的关注,愿所有人都好起来。
评论区