【数据分析】- 基于新冠肺炎文本数据分析一、数据采集二、数据处理三、数据分析

任务
利用这里数据: 2020新冠肺炎记忆:报道、非虚构与个人叙述(持续更新)

结合下面文章中用到的方法 [ 以虎嗅网4W+文章的文本挖掘为例,展现数据分析的一整套流程 ](http://www.woshipm.com/data-
analysis/873430.html)

完成描述性分析(发文数量、发文时间、相关性分析、城市提及分析)

文本挖掘(关键词提取、lda主题模型、情绪分析、词云绘制)、知识图谱构建等任务

一、数据采集

2020新冠肺炎记忆:报道、非虚构与个人叙述(持续更新)

这篇文章中进行数据获取,本人采取的方法是利用爬虫,获取该文章页面,获取所列文章列表及其原文链接,进而通过链接获取文章具体内容。截至2020-2-17我获取的链接数1351个,分析知道,这些链接主要来源于:微信公众号、财经网、经济观察网、方方博客、中国经营网专题、界面网,1351个链接中来自这几个网站文章数量为1324个,其余的只有27个,不到2%,直接舍弃。于是利用爬虫分别从链接对应网站获取文章内容,并整理到excel中。

![](https://img-blog.csdnimg.cn/20200224114338138.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

代码见附录中:t1.py

二、数据处理

1.数据清洗

将第一部分中采集的excel中的空行删除,获得可以利用的1285行数据。

2.文本分词

利用Jieba的精确模式进行文本内容的分词处理,并利用已有的停留词进行无关词过滤,最后将处理好的词存入文件中。

![](https://img-blog.csdnimg.cn/20200224114431286.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

代码见附录中:t2.py

三、数据分析

1、描述性分析

1.1 发文数量、来源和发文日期

从下图可以看出,统计的文章数量从1月6号到1月28号逐步增加,之后至今保持相对稳定,均值在40篇左右。此外可以看出每日文章的来源,可以很明显的看出文章基本上都来自微信公众号,由此可以看出微信公众号在新媒体传播途径中的重要地位。

![](https://img-blog.csdnimg.cn/20200219122756586.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

1.2 城市提及分析

首先根据全国1-5线城市利用百度接口查询其对应的经纬度,并构建单词表,根据前文整理的文章内容进行分词处理,并统计文中各个城市提及的次数,利用这些数据结合
folium

工具,绘制了城市提及频次的地理分布地图(即下图),由图可以清晰的看出祖国各大城市基本都有提及到,这也说明了此次疫情已经蔓延至全国各地,从图中还可以看出颜色最深的地方是湖北武汉市,这也印证了武汉是此次疫情的爆发中心,在各个网站的报导文章中频繁出现。

![](https://img-blog.csdnimg.cn/20200218210644165.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

本文除了对城市进行了以上处理外,还进行了文本中城市之间共现关系的分析,通过对每篇文章中城市提及的处理,统计了每篇文章中各个城市共同出现的频率,获得了两个文件:city_node.csv和city_edge.csv文件,再利用
gephi
进行共现关系图的绘制,得到如下图片,通过图片可以清晰的看出,每个城市基本都与武汉市有连线,也就是说提及那些城市的同时,也提及了武汉。同时节点的大小也同时反应了城市提及的次数,再一次与上面的热力分布图呼应,武汉是提及最多的城市,依然反应了武汉是这次疫情中舆论的中心。

相关代码:dataAnalysis.py

![](https://img-blog.csdnimg.cn/20200222220322532.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

利用以上数据,绘制了城市动态流向图, 动态图(GIF)制作方法
,获得下图,可以看出大部分城市直接的相互关系,并且可以看出流动量大、交错密集的区域无疑是武汉,这样表现了武汉是这个舆论的中心。对于孤立的点,表明的是这个城市是在报道中单独出现。

绘图代码:t3.py

2、文本挖掘

2.1 关键词提取

一般关键词提取可以采用两种方法,通常采用词频较高的词作为关键词,但是词频并不一点代表该词很重要,故本人采取的是另一种方法,根据TF-
IDF(termfrequency–inverse document frequency)来提取关键词,

TF-IDF是一种 统计方法

,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在 语料库
中出现的频率成反比下降。TF-
IDF加权的各种形式常被 搜索引擎

应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-
IDF以外,因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果中出现的顺序。

因此可以看出TF-
IDF更能体现一个词的重要性,以此作为提取关键词的依据相对而言更为合理,当然由于实际问题,直接使用会导致人名优先出现,缺乏分析的准确性,可以通过调整TfidfVectorizer函数的min_df参数(本文采用的值是0.023),对模型进行一定程度调整,最终将获取的结果按TF-
IDF值进行排序,下面展示排行前100的关键词:

![](https://img-blog.csdnimg.cn/20200224133451620.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

通过以上关键词可以看出内容主要分为如下几个方面:

  • 城市地点类:温州、江苏、鄂州、新加坡、韩国、香港、襄阳等;
  • 医疗相关类:透析、双黄连、疫苗、病死率、氧气、血液、抗体等;
  • 人物相关类:李文亮、孕妇、外婆、外公、乘客、母亲、粉丝等

从中我们可以看出这些文章报道了各地疫情、治疗的现状和方法、药物等,同时由于素材包括很多病人自述,所以出现大量人物相关词汇,包括医生以及任务称呼等。

此外,笔者选取TOP500关键词来绘制关键词云。

![](https://img-blog.csdnimg.cn/20200224171448799.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

代码见附录:TF-IDF.py

2.2 LDA主题模型分析

上面只对每篇文章进行了关键词提取,并未考虑整体文章的内容,下面将采用LDA主题模型对文章数据进行主题提取。实际操作中是利用sk-
learn中的LatentDirichletAllocation()函数进行实现的,其中指定的类别经多次尝试发现设置为4类结果较好,并提取了四个主题的权重前20的主题词,整理的结果为下图:

![](https://img-blog.csdnimg.cn/20200226153553573.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

通过上面的结果可以看出1285篇文章虽然都是讲本次新冠状病毒相关的,但是可以具体分为如下四个类别:

  • 疫情相关:主要介绍当前疫情的现状:包括病毒介绍、病例数量、医患人员等内容。
  • 野生动物:主要介绍的是与此次疫情有密切关系的野生动物问题,目前普遍认为病毒是从野生动物传播到人体的,所以此段时间野生动物、海鲜、野生动物市场、相关交易等备受人们关注。
  • 在线教育:由于受到此次疫情影响,学校、公司等大规模推迟开学、上班时间,但是在停课不停学的号召下,线上教育在此次疫情中发挥的淋漓尽致,从小学、初中、高中一直到大学,目前都已经开始在实行线上教育了,所以此次线上教育在教育事业中起到了前所未有的巨大作用,也成为了不少媒体关注的焦点。
  • 疫情影响:这部分主题主要突出了疫情产生的一些相关影响,导致口罩物资等严重紧缺,湖北武汉率先封城,同时也导致许多相关接触人员收到医学观察和隔离。

统计每个主题类别的文章占比,得到如下图,可以看到关于疫情描述的文章占比最多,达到了56.3%,其次则为疫情影响类别的文章,占比41.6%,而线上教育和野生动物相关的占比都较少,分别占1.6%和0.5%。

![](https://img-blog.csdnimg.cn/2020022617111047.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

下面再结合了时间对不同类别的数据进行了统计和分析,得到下图,可以看出整体文章整体呈现先升后降趋势,与上面相同,依然是疫情类别和疫情影响类别占了文章的大部分,但是通过这个图可以看出的是,随着时间的推前和往年开学日期的到来,线上教育的文章开始逐步增加,可以预见在疫情还未完全结束前,线上教育将会使用的越来越广泛,在文章中的提及度也会提高。

![](https://img-blog.csdnimg.cn/20200226173434207.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

代码附录:LDA_主题模型.py

2.3 情感分析

本文接着对主题分类之后又对原有标题进行了情感打分,利用的是snownlp库进行打分,获得的分数区间为[0,1],其中分数越接近1越积极,越接近0越消极,获得结果如下图:

![](https://img-blog.csdnimg.cn/20200227131555985.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

对所有文章的情感得分进行了分析,得到如下图片,有图片可以看出大部分文章标题都是比较积极的态度,然而消极的也有不少。

![](https://img-blog.csdnimg.cn/2020022713285570.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NDUxNTc4,size_16,color_FFFFFF,t_70)

代码见附录:Snownlp情感分析.py

3、结束语

通过对关于这次疫情的样本文档的分析,可以看出人们对疫情的持续关注,报道文章不断增加,文章涉及的城市主要以武汉为主,并涵盖全国各地城市,主要报导的主题也是绕疫情相关的,包括疫情以及由其推动的线上教育等等,对于疫情的报导态度,大部分分章都是表达的都是比较积极的态度。


附录:

t1.py:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2020/2/12 13:02
    # @Author  : ystraw
    # @Site    : 
    # @File    : t1.py
    # @Software: PyCharm Community Edition
    # @function: 从github指定链接中进行数据获取
    #            获取链接后,根据链接的不同来源,进行不同网页的抓取文章内容
    
    import requests
    import time
    import datetime
    from bs4 import BeautifulSoup
    from openpyxl import Workbook
    import random
    from lxml import etree
    from openpyxl import load_workbook
    import getIpPool
    proxies = getIpPool.getproxies()
    MAX_num = 15    # Ip取值范围
    openFlag = 1   # 0关闭Ip代理,1开启Ip代理
    outTime = 10   # 超时时间
    
    # 写入文件:, 新建不追加:
    def writeFile(filename, file):
        with open(filename, 'w', encoding='utf-8') as f:
            f.write(file)
        print(filename, '已写入!')
        f.close()
    # 写入文件:, 新建追加:
    def writeFile_add(filename, file):
        with open(filename, 'a', encoding='utf-8') as f:
            f.write(file)
        print(filename, '已写入!')
        f.close()
    # 读入文件
    def readFile(filename):
        with open(filename, 'r', encoding='utf-8') as f:
            str = f.read()
        print(filename, '已读入!')
        f.close()
        return str
    # 写入Excel
    def write_excel_xls(path, sheet_name, value, bHead):
        # 获取需要写入数据的行数
        index = len(value)
        # 获取需要写入数据的行数
        index = len(value)
    
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值