【基于机器学习的餐馆评论文本分类分析】( 四 )

<= pd.Timedelta(minutes=1):# 计算相似度similarity = SequenceMatcher(None, batch_data.iloc[j]['comment'], batch_data.iloc[j-1]['comment']).ratio()if similarity> 0.8:idx_to_drop.append(j)# 删除高度疑似水军数据batch_data = http://www.kingceram.com/post/batch_data.drop(idx_to_drop)print(idx_to_drop)# 保存处理后的数据到文件batch_data.to_csv(f'batch_data_processed_{i}.csv', index=False)
# 将数据进行汇总# 读取第 1 个数据集文件batch = pd.read_csv('batch_data_processed_0.csv')# 读取其他 9 个数据集文件 , 并与第 1 个数据集合并for i in range(1, 19):batch_i = pd.read_csv(f'batch_data_processed_{i}.csv')batch = pd.concat([batch, batch_i], ignore_index=True)# 将合并后的数据集保存为一个文件batch.to_csv('drop_water_data.csv', index=False)
2 描述性统计分析 2.1 词云图
经过上文对数据进行预处理后 , 本节分别统计好评和差评评论文本中各个词语出现的频次并绘制相应词云图 , 最后绘制所有评论的词云图 。词云图中 , 词频越高 , 词的字号就越大 , 词频越低 , 词的字号就越小 。
from wordcloud import WordCloud, STOPWORDSimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']# 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False# 用来正常显示负号def generate_wordcloud_batches(batch_data, num_batches, save_path):# 每批次处理数据的大小batch_size = int(len(batch_data) / num_batches)batch_data['comment'] = batch_data['comment'].astype(str)# 定义生成词云图函数def generate_wordcloud(text_list, output_file):text = " ".join(text_list)wc = WordCloud(font_path='simkai.ttf', background_color='white', width=800, height=600, max_words=100, collocations=False)wc.generate(text)wc.to_file(output_file)# 分批次处理数据并生成词云图for i in range(num_batches):start = i * batch_sizeend = start + batch_size if i != (num_batches - 1) else len(batch_data)batch_text_list = batch_data.iloc[start:end, :]["comment"].tolist()output_file = f"{save_path}batch_wordcloud_f_{i}.png"generate_wordcloud(batch_text_list, output_file)# 合并所有词云图all_text_list = batch_data["comment"].tolist()output_file = f"{save_path}all_f.png"generate_wordcloud(all_text_list, output_file)
将数据集划分为好评数据集和差评数据集 , 分别绘制好评、差评和总的评论词云图如下:
df = a_data.copy()final_wordcloud = generate_wordcloud_batches(df, num_batches=10, save_path='a/')
df = c_data.copy()final_wordcloud = generate_wordcloud_batches(df, num_batches=10, save_path='c/')
df = batch_data.copy()final_wordcloud = generate_wordcloud_batches(df, num_batches=10, save_path='all_data/')
观察图可以看出 , 不错、味道、好吃、吃、喜欢、感觉、环境、价格、服务等词语较为醒目 , 可以知道在评论中大部分消费者经常使用这些词汇对餐馆做出评价 , 观察好评词云图高频词是一些正面评价的词汇 , 而在差评词云图中出现了一些负面高频词 , 如:贵、少、不好等词汇 。其中在差评词云图中 , 关于服务的词汇出现了两个:服务员、服务 , 说明做出负面评价的消费者对餐馆的服务质量并不满意 。建议餐馆管理者加强对服务员的培训、提高服务质量 。
2.2 不同餐馆的好评/差评 ratio[按照总体评分] , 排序 top10 , 柱状图可视化