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


2.4 雷达图
筛选出好评评论和差评评论中top10餐馆后 , 为更深入地了解好评评论量较高的餐馆和差评评论量较高的餐馆的综合表现 , 绘制每个餐馆的环境、口味、服务评分雷达图如下 。
def draw_radar_chart(top_restids, data):"""绘制top_restids中餐厅的雷达图:param top_restids: 需要绘制雷达图的餐厅列表:param data:所有餐厅的评分数据"""# 选择对应的restid数据top_restaurants_data = http://www.kingceram.com/post/data[data['restId'].isin(top_restids)]# 计算rating_env , rating_flavor , rating_service的平均值avg_ratings = top_restaurants_data.groupby('name').mean()[['rating_env', 'rating_flavor', 'rating_service']]# 绘制雷达图attributes = ['rating_env', 'rating_flavor', 'rating_service']for name, row in avg_ratings.iterrows():values = row.values.flatten().tolist()values += values[:1]angles = [n / float(len(attributes)) * 2 * pi for n in range(len(attributes))]angles += angles[:1]ax = plt.subplot(111, polar=True)plt.xticks(angles[:-1], attributes,rotation=90,ha='left')ax.set_rlabel_position(0)plt.yticks([1.0, 2.0, 3.0, 4.0,5.0], ["1.0", "2.0", "3.0", '4.0','5.0'], color="grey",size=9, rotation=90, ha='center')plt.ylim(1, 5)ax.plot(angles, values, linewidth=1, linestyle='solid')ax.fill(angles, values, 'b', alpha=0.1)#添加数值标记(保留两位数)for i in range(len(attributes)):angle_rad = i / float(len(attributes)) * 2 * piif values[i] >= 3:ha = 'left'else:ha = 'right'plt.text(angle_rad, values[i]+0.2, format(values[i], '.2f'), ha=ha, va='center')plt.title('Ratings for Restaurant {}'.format(name))plt.show()
观察好评率top10餐馆可以发现 , 大部分好评餐馆在环境、服务、口味3各方面中环境和服务评分比口味高 , 由于好评率是所有维度的综合体现 , 环境和服务评分可能对总体的好评率产生更大的影响 。
观察差评率top10餐馆可以发现大部分差评餐馆在环境、服务、口味3各方面中环境和服务评分比口味低 , 这与上文得出的结论相同 , 环境和服务评分可能对总体的好评率产生更大的影响 。餐馆经营者需要注意维护餐厅的整体形象 , 提高服务质量、卫生和环境等方面的表现 , 并尽可能提高各方面的综合表现 , 以获得更高的好评率和更多的客户支持 。
3 特征工程 3.1 数据集划分
餐馆的评论文本数据经过预处理后 , 已经具备构建分类器的条件 。将评论文本分成训练数据集和测试数据集 , 首先在训练数据集上建立预测模型 , 构建文本分类器 , 然后用训练出来的分类器模型在测试数据集上进行预测 , 根据预测情况对分类器性能进行评估 。

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

文章插图
把预处理后的数据的列作为特征值 , 列作为目标值 。采用随机抽样的方式来抽取训练数据集和测试数据集 , 以8:2的比例划分训练集和测试集 。
from sklearn. model_selection import train_test_splitX = batch_data['comment']y = batch_data['evaluation']X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=22)
3.2 特征提取
采用Count 文本特征提取方法 , 将原始文本数据转化为数字特征向量 。该方法将每个文档表示为一个向量 , 其中向量的每个元素表示该文档中相应单词(或特征)出现的次数 。
设置Count 方法中的两个参数=0.9 , =3, 当某个单词在文档中出现的频率达到这个阈值时 , 某个单词在所有文档中出现的频率小于这个阈值时 , 就会被认为是停用词(即被过滤掉) , 可以帮助减小特征空间的维度并提高向量化后数据的质量和可解释性 。