作者:Abhishek Sharma
翻译:李嘉骐
校对:方星轩
本文长度为5500字,建议阅读10+分钟
本文利用Python对Amazon产品的反馈对数据文本进行探索性研究与分析,并给出结论。
标签:初学者|资料探索|电子商务|自然语言处理|Python|技术|文本
探索性数据分析(EDA)的重要性
在一个机器学习项目的全流程中是没有捷径可走的,比如我们无法在收集齐所需的数据后直接跳到模型搭建的阶段。我们需要有条理地规划方法,而在此过程中探索性数据分析(EDA)阶段是十分重要的。
我无数次在事后才认识到EDA的重要性。
在我从事这一领域的前期,总是急切地要深入研究机器学习算法,但这常常得到不确定性的结果。通过个人经历和导师的建议,我意识到在探索和理解数据上花时间是必要的。
即使是自然语言处理(NLP)项目[1]中的文本数据也是如此。我们需要对数据进行研究和探索性分析,看看是否能挖掘出有意义的发现。相信我,处理的文本数据越多,你就会感激EDA这个过程。
当然我们也不缺文本数据。我们有来自推特、数字媒体平台、博客和其他大量来源的数据。作为一个数据科学家和NLP爱好者,分析这些文本数据以帮助你的公司做出数据驱动的决策非常重要。
探索性的数据分析将这些紧密联系在一起。可以说这是NLP项目中的一个关键环节——一个你根本无法跳过的阶段。
-探索性数据分析是探索数据、形成见解、检验假设、检查预设条件并揭示数据中潜在的隐藏规律的过程。
-(Exploratory Data Analysis is the process of exploring data, generating insights, testing hypotheses, checking assumptions and revealing underlying hidden patterns in the data.)
因此,在本文中,我们将通过一个实际的例子讨论如何使用Python对文本数据进行探索性数据分析。如果你不熟悉NLP或数据可视化的辉煌而广阔的世界,可以浏览以下资源:
从零开始掌握数据可视化:
https://courses.analyticsvidhya.com/courses/tableau-2-0
NLP简介(免费课程):
https://courses.analyticsvidhya.com/courses/Intro-to-NLP
目录
理解问题的设定
基本的文本数据预处理
用Python清洗文本数据
为探索性数据分析(EDA)准备文本数据
基于Python的Amazon产品评论探索性数据分析
理解问题的设定
对于任何一个机器学习项目,第一步就是理解问题。这也是我们本章要讨论的内容。
我是亚马逊系列产品的超级粉丝。我这里有一个数据集,其中包含了亚马逊的各种产品的评论,如Kindle、Fire TV、Echo等。
数据集的下载链接:
https://www.kaggle.com/datafiniti/consumer-reviews-of-amazon-products
该数据集大有34000多行,每行包含每个产品的评论文本、用户名、产品名称、评级和其他信息。我们的目标是使用这些数据,探索它,并从中形成自己的见解。
让我们开始使用不同的技术来研究这个数据集,并从中形成自己的见解。
基本的文本数据预处理
在进入数据探索阶段之前,我们需要进行基本的数据预处理,如空值插补和去除不需要的数据。那么,让我们从导入库和读取数据集开始:
import numpy as np
import pandas as pd
# 可视化
import matplotlib.pyplot as plt
# 正则化
import re
# 处理字符串
import string
# 执行数学运算
import math
# 导入数据
df=pd.read_csv('dataset.csv') print("Shape of data=>",df.shape)
数据集包含34660行和21列。但我们只需要诸如产品名称、评论文本、用户推荐(推荐或不推荐)和认为该评论有用的人数等信息。因此,我删除了其他列,并将数据集缩减为只有四列,即“名称”、“评论文本”, “评论-是否推荐”和“评论-认为此评论有用的人数”:
df=df[['name','reviews.text','reviews.doRecommend','reviews.numHelpful']]
print("Shape of data=>",df.shape)
df.head(5)
让我们来看一下数据集中是否有空值:
df.isnull().sum()
数据集中存在一些空值,所以我们删除掉这些空值后再往下进行:
df.dropna(inplace=True)
df.isnull().sum()
我只利用至少有500条评论的产品。这样做是为了确保每个产品都有足够数量的评论。这里,我们可以使用lambda函数和filter()来过滤数据集。
如果你想了解更多关于lambda函数,可以阅读这篇文章:什么是lambda函数?Python中Lambda函数的快速指南。我强烈建议去阅读这篇指南,因为本文之后部分将会多次使用lambda函数。
什么是lambda函数?Python中Lambda函数的快速指南:
https://www.analyticsvidhya.com/blog/2020/03/what-are-lambda-functions-in-python/
df=df.groupby('name').filter(lambda x:len(x)>500).reset_index(drop=True)
print('Number of products=>',len(df['name'].unique()))
现在只剩下了八种产品。另外,“评论-是否推荐”列包含二值化数据True-False; '“评论-认为此评论有用的人数”列包含浮点数,这些数据类型不能直接用来处理。因此&#x