16.1.4 案例一数据分析

16.1.4 案例一数据分析

经过数据预处理部分,我们已经获取了usenet_words数据框,接下来进行文本分析的步骤。文本分析主要包括文本的描述性统计、关键词提取、文档聚类、主题建模、情感分析。

1.描述性统计

文本类数据的描述性统计和数值型数据不同:对于数值型数据,我们可以统计变量的平均值、中位数等;而对于文本类数据,我们更加关注的是文本中出现频次最多的词或者文本中最常用的词。依据这些词,我们可以对文本的主题有一个简单的了解,从而便于对文档进行分类、聚类等操作。

首先,对数据集常用词进行探索,代码如下:

然后,我们按照主题对常用词进行探索,代码如下:

2.关键词提取

通过对文本进行描述性统计可以发现,文本中一些词的出现概率非常高,但是它们真的对理解文本主题有帮助吗?或者说它们可以从一定程度上反映文本的主题吗?即使我们已经对数据做了去除停用词处理,但是文本中依然会有许多不太重要的词重复出现。因此,若想要正确了解文本的主题,需要使用某些算法提取文中的关键词,本章使用的是TF-IDF算法。

TF-IDF算法的基本思想是:词语的重要性与它在文件中出现的次数成正比,但同时会与它在语料库中出现的频率成反比。也就是说,如果一些词在某个子数据集中重复出现,那么这个词可能比其他词对这个数据集更加重要,但是如果其他数据集中也重复出现了这些词,那么这些词明显无法代表此数据集的特色。为了提取文本中“最具特色”的表征性关键词,需要利用TF-IDF算法,也就是说,如果某个词或者短语在一个子数据集中出现多次,但是在其他子数据集中很少出现,就可以认为这个词或短语具有很好的区分性,适合对这个子数据集进行表征。

使用TF-IDF算法对数据进行关键词提取,代码如下:

我们可以提取某些特定主题中TF-IDF较高的词,从而了解这个新闻组的主题,以talk主题为例,代码如下:

可以使用ggplot将talkdf数据对象可视化:

关键词提取结果如图16-4所示。

图16-4 关键词提取结果

读者可以使用相同的代码探索其他新闻组的关键词。

3.文档聚类

文档聚类主要对具有相同或相近特征的文本进行归类。以talk.politics.guns新闻组数据集为例,该数据集中的文本存在“gun”和“guns”之类相似的特征词,要发现哪些新闻组在主题上相似,可以使用widyr包中的pairwise_cor()函数识别不同主题的新闻组,进而对文本聚类。

首先,探索文档之间的相关性:

然后,我们对相关性进行筛选,如下代码表示获取相关性大于0.5的项:

将上述代码筛选的结果以图表呈现,如果相关系数大于0.5时输出的网络图效果欠佳,可以选择相关系数大于0.4的输出结果,示例代码如下:

文档聚类网络图如图16-5所示。

图16-5 文档聚类网络图

从图16-5中可以看出:第一,在相关性大于0.4的情况下,文本被分成了4类,分别为计算机/电子产品、政治/宗教、机动车辆和体育;第二,相同的词条具有很强的相关性,其中,宗教和政治联系尤为紧密,电子产品中IBM和苹果某些新闻的联系也是比较紧密的。

4.主题建模

接下来我们使用主题模型深入挖掘文本之间的关系。两篇文档是否相关往往不仅取决于字面上的词语重复,还取决于文字背后的语义关联,数据集也是如此。主题模型是对文字隐含主题进行建模的方法,它改正了传统信息检索中文档相似度计算方法的缺点,并且能够在海量互联网数据中自动寻找文字间的语义主题。本节介绍的主题模型基于LDA算法。

LDA主题模型是一种能够从大量文本中提取主题的概率模型,经常被运用到主题发现、文档标记等社会科学的研究中,是文本分析非常有用的工具。

我们以与sci相关的新闻为例进行LDA主题建模,首先将数据提取出来:

主题模型需要文档-词频矩阵,但是目前我们的数据结构是处理后的整洁数据,每行每个文档只有一个术语,所以主题建模需要使用cast_dtm()函数对数据进行处理,代码如下:

使用topicmodels包中的LDA函数进行主题建模:

上述代码建立的LDA主题模型提取了4个语义主题,如果想了解每个主题的语义内涵,可以将4个主题的关键词可视化。

首先将4个主题中的关键词提取出来:

然后使用ggplot将其可视化:

使用LDA进行主题建模的结果如图16-6所示。

图16-6 使用LDA进行主题建模的结果

由图16-6可知:主题1中的关键词是“space”“nasa”“earth”等,因此可以确定第一个主题与航天科技有关;第二个主题中可能跟密码学有关,因为它涉及“key”“encryption”等术语。我们可以使用此代码对整个数据集进行主题建模,从而获取每一个数据集所代表的主题。

5.情感分析

情感分析就是针对一段文本分析其情感的技术。当然,我们无法通过计算机和算法得出像人类一样复杂的情感,但是我们可以判断一段文本的正向性和负向性,或者说这段文本是积极的还是消极的,进一步,我们还可以判断文本中情感的波动水平,如积极或者消极的程度。

一般来说,情感分析有两种方式:词法分析和机器学习。本文主要介绍词法分析。

词法分析的原理是事先定义一个情感词典,然后依据情感词典对一段文本进行评价,从而获取整段文本的情感。例如,定义“喜欢”这个词为1分,则:在“我喜欢你”这句话中,“我”和“你”都是中性词,均为0分,“喜欢”为1分,那么这句话的总分就是1分;在“我喜欢你,但讨厌他”这句话中,“讨厌”这个词在情感词典中分数为“-1”,那么整句话的得分就是0分。

本节进行情感分析使用的是tidytext包,使用的情感词典是AFINN情感词典。下面对每个子数据集进行一个综合的情感评定,并将得到的情感分数可视化。

获取每个子数据集的情感得分的代码如下:

将所有子数据集的情感得分可视化:

情感分析结果如图16-7所示。

图16-7 情感分析结果

从图16-7中可以看到:销售类、运动类文本的情感较为积极,销售类情感得分最高,说明这类新闻试图使用积极的词吸引顾客;政治、宗教类的文本则具有较多的负向情感,这是因为政治宗教类的话题一般比较沉重。

若想要深入了解为什么有些新闻组比其他新闻组更积极或更消极,而不是简单通过直觉进行判断,我们可以检查每个词的消极贡献和积极贡献,并观察哪些词影响了文本的情感。

首先获取每个词的情感贡献值:

然后获取对情感影响最大的词:

如下代码可获取每个子数据集中对情感影响最大的词: