Susan Li作者和中华校对吴金笛翻译

文本数据探索性数据分析结合可视化和NLP产生见解(附代码)

作为数据科学家或NLP专家,可视化地表示文本文档的内容是文本挖掘领域中最重要的任务之一。然而,在可视化非结构化 (文本)数据和结构化数据之间存在一些差距。

Photo credit: Pixabay文本文档内容的可视化表示是文本挖掘领域中最重要的任务之一。作为一名数据科学家或NLP专家,我们不仅要从不同方面和不同细节层面来探索文档的内容,还要总结单个文档,显示单词和主题,检测事件,以及创建故事情节。

然而,在可视化非结构化(文本)数据和结构化数据之间存在一些差距。例如,许多文本可视化并不直接表示文本,而是表示语言模型的输出(字数、字符长度、单词序列等)。

在这篇文章中,我们将使用女装电子商务评论的数据集,并尝试使用Plotly的Python图形库和Bokeh可视化库尽可能多地探索和可视化。我们不仅将研究文本数据,而且还将可视化数值型和类别型特征。让我们开始吧!

数据 

1. df = pd.read_csv('Womens Clothing E-Commerce Reviews.csv')  

表1经过对数据的简单检查,发现我们需要进行一系列的数据预处理。

删除“Title”特征。

删除缺少“Review Text”的行。

清洗“Review Text”列。

使用TextBlob计算位于[-1,1]范围内的情绪极性,其中1表示积极情绪,-1表示消极情绪。

为评论的长度创建新特性。

为评论的字数创建新特性。

1. df.drop('Unnamed: 0', axis=1, inplace=True)  

2. df.drop('Title', axis=1, inplace=True)  

3. df = df[~df['Review Text'].isnull()]  

4.   

5. def preprocess(ReviewText):  

6.     ReviewText = ReviewText.str.replace("(  

7. )", "")  

8.     ReviewText = ReviewText.str.replace('().*()', '')  

9.     ReviewText = ReviewText.str.replace('(&)', '')  

10.     ReviewText = ReviewText.str.replace('(>)', '')  

11.     ReviewText = ReviewText.str.replace('(<)', '')  

12.     ReviewText = ReviewText.str.replace('(\xa0)', ' ')    

13.     return ReviewText  

14. df['Review Text'] = preprocess(df['Review Text'])  

15.   

16. df['polarity'] = df['Review Text'].map(lambda text: TextBlob(text).sentiment.polarity)  

17. df['review_len'] = df['Review Text'].astype(str).apply(len)  

18. df['word_count'] = df['Review Text'].apply(lambda x: len(str(x).split()))  

text_preprocessing.py

为了预览情绪极性分数是否有效,我们随机选择5个具有最高情绪极性分数(即1)的评论:

1. print('5 random reviews with the highest positive sentiment polarity: \n')  

2. cl = df.loc[df.polarity == 1, ['Review Text']].sample(5).values  

3. for c in cl:  

4.     print(c[0])  

图1然后随机选择5个具有最中性情绪级性的评论(即0):

1. print('5 random reviews with the most neutral sentiment(zero) polarity: \n')  

2. cl = df.loc[df.polarity == 0, ['Review Text']].sample(5).values  

3. for c in cl:  

4.     print(c[0])  

图2只有2个评论有最负面的情绪级性分:

1. print('2 reviews with the most negative polarity: \n')  

2. cl = df.loc[df.polarity == -0.97500000000000009, ['Review Text']].sample(2).values  

3. for c in cl:  

4.     print(c[0])  

图3有效!

专业用户独享

本文为机器之心深度精选内容,专业认证后即可阅读全文
开启专业认证
工程NLP数据分析
5
相关数据
参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

文本分类技术

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

词性标注技术

词性标注是指为分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程。

潜在语义分析技术

潜在语义分析(LSA)是自然语言处理中的一种技术,特别是在分布式语义学中。传统的语义学通常研究字、词的含义以及词与词之间的关系,如同义,近义,反义等等。潜在语义分析探讨的是隐藏在字词背后的某种关系,这种关系不是以词典上的定义为基础,而是以字词的使用环境作为最基本的参考。这种思想来自于心理语言学家。他们认为,世界上数以百计的语言都应该有一种共同的简单的机制,使得任何人只要是在某种特定的语言环境下长大都能掌握那种语言。在这种思想的指导下,人们找到了一种简单的数学模型,这种模型的输入是由任何一种语言书写的文献构成的文库,输出是该语言的字、词的一种数学表达(向量)。字、词之间的关系乃至任何文章片断之间的含义的比较就由这种向量之间的运算产生。值接近1代表相似的单词,而值接近0代表非常不相似的单词。这项技术在信息检索中,被称作潜在语义索引(LSI)。

语料库技术

语料库一词在语言学上意指大量的文本,通常经过整理,具有既定格式与标记;事实上,语料库英文 "text corpus" 的涵意即为"body of text"。

降维技术

降维算法是将 p+1 个系数的问题简化为 M+1 个系数的问题,其中 M<p。算法执行包括计算变量的 M 个不同线性组合或投射(projection)。然后这 M 个投射作为预测器通过最小二乘法拟合一个线性回归模型。两个主要的方法是主成分回归(principal component regression)和偏最小二乘法(partial least squares)。

文本挖掘技术

文本挖掘有时也被称为文字探勘、文本数据挖掘等,大致相当于文字分析,一般指文本处理过程中产生高质量的信息。高质量的信息通常通过分类和预测来产生,如模式识别。文本挖掘通常涉及输入文本的处理过程,产生结构化数据,并最终评价和解释输出。'高品质'的文本挖掘通常是指某种组合的相关性,新颖性和趣味性。

主题模型技术

主题模型(Topic Model)在机器学习和自然语言处理等领域是用来在一系列文档中发现抽象主题的一种统计模型。直观来讲,如果一篇文章有一个中心思想,那么一些特定词语会更频繁的出现。比方说,如果一篇文章是在讲狗的,那“狗”和“骨头”等词出现的频率会高些。如果一篇文章是在讲猫的,那“猫”和“鱼”等词出现的频率会高些。而有些词例如“这个”、“和”大概在两篇文章中出现的频率会大致相等。但真实的情况是,一篇文章通常包含多种主题,而且每个主题所占比例各不相同。因此,如果一篇文章10%和猫有关,90%和狗有关,那么和狗相关的关键字出现的次数大概会是和猫相关的关键字出现次数的9倍。一个主题模型试图用数学框架来体现文档的这种特点。主题模型自动分析每个文档,统计文档内的词语,根据统计的信息来断定当前文档含有哪些主题,以及每个主题所占的比例各为多少。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

推荐文章
暂无评论
暂无评论~