Zomato 情感分析
'Zomato情感分析'
通过探索性数据分析和数据准备的旅程
在本文中,我们将定义目标、加载数据、进行探索性数据分析和进行数据准备
我们模型的步骤:
- 定义问题陈述的目标。
- 数据收集
- 探索性数据分析(EDA) EDA基本上是我们使用技术更好地理解数据,以便提供其他可视化表示
- 数据准备 数据可能不在正确的格式中。可能存在异常值或缺失值。因此,您需要扫描不一致性的集合并修复它们 注意:数据准备步骤和EDA步骤是相辅相成的
- 构建机器学习模型
- 模型评估和优化
- 预测/部署
现在,是时候进入实现的细节了!
目标
该项目旨在分析印度Zomato餐厅的数据,通过对评论进行情感分析并可视化数据以获得洞察。
加载库
数据集:链接
import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as plt %matplotlib inlineimport warnings warnings.filterwarnings("ignore")import datetime as dtfrom wordcloud
加载数据
数据集链接:Github
review = pd.read_csv("Zomato Restaurant reviews.csv")
探索性数据分析
EDA是一种心态。它是在对数据集进行任何更改之前可以执行的第一步。EDA的过程包括总结、可视化和深入了解数据集的重要特征。
数据是什么样子的?
review.random(5):获取随机5条记录 review.tail():获取最后5条记录 review.head():获取前5条记录 元数据包含餐厅的关注者和评论数量。
数据有多大?
共有10000条记录(或评论),包含7个特征。
我们数据集中的列
列的数据类型是什么?
它给出了非空计数和数据类型信息。此外,还给出了它在内存中占用的空间大小
数学上我们的数据是什么样子的?
是否有重复的数据?
我们有36个重复项。让我们看看它们的重复项
由于所有重复行都是空值,我们可以在预处理时将它们删除。
是否有任何缺失值?
我们有许多空值。
检查评论数据集中每个变量的唯一值。
我们将检查评分的唯一值,因为我们有10个唯一的评分
评分由顾客给出,为1、1.5、2、2.5、…5和’like’,同时存在一些缺失值。
发现 :
- 评分应该是整数,但它包含值’like’,表示它属于对象数据类型。
- 时间以文本格式提供,使其成为对象数据类型。
- 我们有重复值,但由于它们都是空值,我们可以消除它们。
- 数据集共有10,000个评论,包括7个特征。
- 除了餐厅名称和发布的图片数量外,大多数值都是空值。
- 根据评论数据集的描述,我们可以推断出有100家餐厅收到了顾客的评论。
- 评分可以被视为从0到5的分类变量。我们可以用该特定餐厅的中位数评分替换缺失值。由于’like’不是评分,我们可以用4作为它的替代值,表示人们喜欢口味。
- 顾客发布了36个不同的图片。
数据准备
您可能已经注意到,在完成探索性数据分析部分时,您还没有进行任何清理或转换。然而,我们已经确定了需要进行的清理工作和需要清理的内容。注意:特征工程是数据预处理步骤。它基本上将原始数据转换为更有意义的数据或可以被机器学习理解的数据。
删除空值的重复项
review.drop_duplicates(inplace = True, keep = False)
inplace = True:我们修改的是DataFrame而不是创建一个新的。keep = False:删除所有重复项
将评分中的’Like’替换为评分4,并将该列转换为浮点类型 注意:Series.str可以用于访问系列的字符串值,并对其应用多种方法
review['Rating']=review['Rating'].str.replace("Like",'4').astype('float')
用0填充’Followers’列中的空值
review['Followers'].fillna(0,inplace = True)
将“Time”列转换为日期时间并提取小时和年份
现在我们只有评论列中的空值,因此我们可以删除它们,因为我们不需要没有评论的记录。(由于缺失值的数量较少,因此没有影响)
将元数据拆分为评论和关注者
用0替换“关注者”中的缺失值,并将时间转换为日期时间,提取小时和年份
review['Followers'].fillna(0, inplace=True)
review["Time"] = pd.to_datetime(review['Time'])
review['Hour'] = pd.DatetimeIndex(review['Time']).hour
review['Year'] = pd.DatetimeIndex(review['Time']).year
餐厅的平均评分和总评论数
avg_rating = review.groupby('Restaurant').agg({'Rating': 'mean', 'Reviewer': 'count'}).reset_index().rename(columns={'Reviewer': 'Total_Review'})
avg_rating
“感谢您加入这次旅程!请继续关注我的最新更新,我们将深入探索Zomato情感分析的世界。精彩的事情即将来临,所以请保持联系以了解下一步和洞察力。我们将一起揭示数据中隐藏的故事。很快见!”
感谢阅读!如果您喜欢这篇文章并希望阅读更多我的作品,请考虑在VoAGI上关注我。期待在未来与您分享更多。