Yelp数据集数据分析 数据说明
business_id门店ID
Date 日期
Rating 评分
Content 评价内容
Review_auther 点评作者
Review_image 点评插图
Reactions 互动
Replies 回复
review_order 点评序号(针对同一家店)
Eelite_status 表示点评作者是否具有elite标识
check-in_status 表示点评作者是否在门店办理了入住手续
business_name 被点评的门店名称
1 2 3 4 5 6 import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsfrom wordcloud import WordCloudimport matplotlib
1 2 3 matplotlib.rcParams['font.family' ] = 'SimHei' matplotlib.rcParams['axes.unicode_minus' ] = False
1 2 3 4 5 6 7 8 file_path = "C:\\Users\\28696\\Desktop\\人工智能\\yelp\\Yelp businesses reviews.csv" df = pd.read_csv(file_path) df.dropna(subset=['Rating' ], inplace=True )
1、评分分布与变化趋势: 分析整个数据集中评分的平均值、中位数、标准差等统计指标 了解整体评分水平
1 2 3 4 5 6 7 8 9 10 11 12 mean_rating = df['Rating' ].mean() median_rating = df['Rating' ].median() std_dev_rating = df['Rating' ].std() min_rating = df['Rating' ].min () max_rating = df['Rating' ].max () print (f"平均评分: {mean_rating} " )print (f"中位数评分: {median_rating} " )print (f"标准差: {std_dev_rating} " )print (f"最小评分: {min_rating} " )print (f"最大评分: {max_rating} " )
平均评分: 3.869
中位数评分: 5.0
标准差: 1.4317433041187548
最小评分: 1
最大评分: 5
1 2 3 4 5 6 df['Rating' ].hist(bins=20 , alpha=0.7 , color='blue' ) plt.title('评分分布' ) plt.xlabel('评分' ) plt.ylabel('数量' ) plt.show()
时间趋势分析
1 2 3 4 5 6 monthly_ratings = df['Rating' ].resample('M' ).mean().plot() monthly_ratings.set_title('每月平均评分' ) monthly_ratings.set_xlabel('日期' ) monthly_ratings.set_ylabel('平均评分' ) plt.show()
2、Elite用户影响力分析: 分析Elite(精英)用户的评论数量、内容特点以及对其他用户Reactions(点赞、收藏等)的影响 进行Elite用户影响力分析,可以从以下几个步骤入手: (1)筛选Elite用户评论:从数据集中筛选出标记为Elite的用户评论。 (2)计算Elite用户评论数量:统计Elite用户评论的总数。 (3)分析Elite用户评论内容:可以对Elite用户的评论文本进行文本分析,比如词频分析、情感分析等。 (4)分析Elite用户评论的Reactions:统计Elite用户评论的点赞、收藏等互动数量,并与其他用户进行比较
1 2 3 4 5 print (df['Eelite_status' ].unique())elite_reviews = df[pd.notnull(df['Eelite_status' ]) & (df['Eelite_status' ].str .contains('Elite' , case =False , na=False ))]
[nan 'Elite from 2023']
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 elite_review_count = elite_reviews.shape[0 ] print (f"Elite用户评论数量: {elite_review_count} " )elite_reviews['Rating' ].hist(bins=20 , alpha=0.7 , color='blue' ) plt.title('Elite用户评分分布' ) plt.xlabel('评分' ) plt.ylabel('数量' ) plt.show() elite_reviews['Reactions' ].hist(bins=20 , alpha=0.7 , color='green' ) plt.title('Elite用户评论Reactions数量' ) plt.xlabel('Reactions数量' ) plt.ylabel('数量' ) plt.show()
Elite用户评论数量: 3
结论 (1)评分较高:Elite用户普遍给出较高的评分,这可能表明他们对商户的整体体验感到满意。 (2)Reactions认可:某些评论在特定的Reactions类别中获得了认可,这可能表明这些评论在某些特定方面(如幽默感、酷感)特别突出或引人注目。
进一步分析建议
深入分析Reactions:可以进一步分析哪些评论获得了较多的Reactions,特别是那些在多个类别中都获得认可的评论。
评论内容分析:对Elite用户的评论内容进行文本分析,识别他们特别关注或满意的方面。
时间趋势分析:如果数据集包含时间戳,可以分析Elite用户评分和Reactions随时间的变化趋势,了解是否有季节性或趋势性的变化。
3、图片对评论的影响力分析: 统计Review_image存在的比例,分析包含图片的评论与无图片评论的Rating差异,了解图片是否对评分有显著影响 要进行图片对评论影响力分析,我们可以采取以下步骤: (1)统计包含图片的评论比例:计算数据集中包含图片(Review_image 字段非空)的评论数量,并与总评论数量进行比较。 (2)分析包含图片的评论与无图片评论的评分差异:比较包含图片的评论的评分(Rating)与无图片评论的评分,看是否存在显著差异。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 image_reviews = df[df['Review_image' ].notnull()] no_image_reviews = df[df['Review_image' ].isnull()] total_reviews = df.shape[0 ] image_review_count = image_reviews.shape[0 ] no_image_review_count = no_image_reviews.shape[0 ] image_review_percentage = (image_review_count / total_reviews) * 100 no_image_review_percentage = (no_image_review_count / total_reviews) * 100 print (f"包含图片的评论比例: {image_review_percentage:.2 f} %" )print (f"不包含图片的评论比例: {no_image_review_percentage:.2 f} %" )mean_rating_image = image_reviews['Rating' ].mean() print (f"包含图片的评论的平均评分: {mean_rating_image:.2 f} " )mean_rating_no_image = no_image_reviews['Rating' ].mean() print (f"不包含图片的评论的平均评分: {mean_rating_no_image:.2 f} " )plt.figure(figsize=(10 , 6 )) plt.hist([image_reviews['Rating' ], no_image_reviews['Rating' ]], bins=20 , alpha=0.7 , label=['有图片' , '无图片' ]) plt.title('包含图片和不包含图片评论的评分分布' ) plt.xlabel('评分' ) plt.ylabel('数量' ) plt.legend() plt.show()
包含图片的评论比例: 17.90%
不包含图片的评论比例: 82.10%
包含图片的评论的平均评分: 4.21
不包含图片的评论的平均评分: 3.79
结论
图片对评分的影响:包含图片的评论平均评分显著高于不包含图片的评论,这可能表明图片在一定程度上提高了用户的满意度,从而影响了他们的评分。这可能是因为图片可以更直观地展示商户的产品或服务,增加了评论的可信度和吸引力。
用户行为:较少的用户选择在评论中添加图片,但这些用户可能更倾向于给出更高的评分。这可能意味着他们对商户的体验非常满意,希望通过图片进一步支持他们的正面评价。
进一步分析建议
深入分析图片内容:可以进一步分析图片的内容,了解哪些类型的图片(如食品、环境、服务等)更常见,以及这些图片是否与更高的评分相关联。
评论文本分析:结合评论文本内容,分析图片评论中常见的关键词或短语,了解用户在哪些方面特别满意。
时间因素:如果数据集包含时间戳,可以分析不同时间段内图片评论的比例和评分是否有变化,了解是否存在季节性或趋势性的影响。
4、点评序号与评分关系: 观察review_order与Rating之间的关系,研究随着点评数量的增长,新近点评的评分是否趋于稳定、是否存在“新鲜感”效应(即新开业或新加入Yelp的商家初期评分偏高) 要分析点评序号(review_order)与评分(Rating)之间的关系步骤如下:
排序:根据点评序号对数据进行排序,确保点评序号是连续的。
计算平均评分:按点评序号分组,计算每个组别的平均评分。来确保每个商户的评分是按时间顺序计算的
绘制趋势图:绘制点评序号与平均评分的关系图,观察评分是否趋于稳定或存在“新鲜感”效应。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 import matplotlibmatplotlib.rcParams['font.family' ] = 'SimHei' matplotlib.rcParams['axes.unicode_minus' ] = False file_path = "C:\\Users\\28696\\Desktop\\人工智能\\yelp\\Yelp businesses reviews.csv" df = pd.read_csv(file_path) df.dropna(subset=['Rating' , 'review_order' ], inplace=True ) df['review_order' ] = pd.to_numeric(df['review_order' ], errors='coerce' ) df = df[pd.isna(df['review_order' ]) == False ] df_sorted = df.sort_values(by=['business_id' , 'review_order' ]) average_ratings = df_sorted.groupby('business_id' )['Rating' ].rank(method='min' ).reset_index() plt.figure(figsize=(12 , 6 )) for business_id, group in df_sorted.groupby('business_id' ): plt.plot(group['review_order' ], group['Rating' ], marker='o' , label=f'Business {business_id} ' ) plt.title('点评序号与评分关系' ) plt.xlabel('点评序号' ) plt.ylabel('评分' ) plt.legend(title='商户ID' ) plt.show()
结论
评分趋势:如果评分随着点评序号的增加而趋于稳定,这可能表明用户对商户的评价逐渐趋于一致,没有明显的“新鲜感”效应。
新鲜感效应:如果初期评分较高,随着点评数量的增加评分逐渐下降,这可能表明存在“新鲜感”效应,即新开业或新加入Yelp的商家初期评分偏高。
进一步分析建议
时间序列分析:考虑时间因素,分析评分随时间的变化趋势。可以使用时间序列分析方法,如ARIMA模型,来预测评分的变化。
商户类别分析:分析不同类别的商户是否存在不同的评分趋势。例如,餐饮业和服务业的评分趋势可能有所不同。
用户行为分析:结合用户的行为数据(如用户评分习惯、评论频率等),分析用户行为对评分的影响。
文本分析:对评论内容进行文本分析,提取关键词或情感倾向,分析评论内容与评分之间的关系。
聚类分析:对商户进行聚类分析,找出评分趋势相似的商户群体,分析其共同特征。
异常值检测:检测评分数据中的异常值,分析这些异常值背后的原因,如是否是恶意评分或虚假评论。