(24)选择数据框 df 中满足条件 subjectivity <= 0.2 的前五行数据,并且仅保留 "Review"、"date"、"Location"、"polarity" 和 "subjectivity" 列的信息。这意味着只选择主观性非常低的评论,并显示这些评论的相关信息。
df[['Review','date','Location','polarity','subjectivity']][df.subjectivity<=0.2].head(5)
执行后会输出:
Review date Location polarity subjectivity
6 Old. Musty. Motel. Bath need an update asap !... 2019-08-19 NaN 0.0 0.0
23 基本的に問題なしでした。 清潔で防音も普通な方で、水回りも清潔でシャワーの水圧も問題なしです... 2019-08-18 NaN 0.0 0.0
31 Les chambres familiales sont pratiques (nous é... 2019-08-17 Montréal 0.0 0.0
47 Vétuste mérite un sacré rafraîchissement Empl... 2019-08-14 Toulon 0.0 0.0
49 El aire acondicionado goteaba y la alfombra es... 2019-08-14 NaN 0.0 0.0
(25)生成一个基于主观性非常低的评论的词云图,以可视化这些高度客观的评论中最常见的单词。
filtered_reviews = df[df['subjectivity']<=0.2]['Review']
filtered_reviews = filtered_reviews.astype(str)
text = ' '.join(filtered_reviews)
wordcloud = WordCloud(width=800, height=400, background_color='black').generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.title("Highly Factual")
plt.axis('off')
plt.show()
执行后会生成一个以黑色背景为基础的高度客观评论的词云图,帮助您可视化高度客观评论中的关键词和主题。如图7-9所示。
图7-9 高度客观评论的词云图
(26)选择数据框 df 中满足条件 subjectivity > 0.8 的前五行数据,并且仅保留 "Review"、"date"、"Location"、"polarity" 和 "subjectivity" 列的信息。这意味着只选择主观性非常高的评论,并显示这些评论的相关信息。
df[['Review','date','Location','polarity','subjectivity']][df.subjectivity>0.8].head(5)
执行后会输出:
Review date Location polarity subjectivity
7 Loved the layout of the hotel and the relaxing... 2019-08-19 NaN 0.266667 0.866667
12 Location was great, lobby area was nice but ro... 2019-08-19 NaN 0.700000 0.875000
22 Awesome location, easy access to sights and su... 2019-08-18 NaN 0.716667 0.916667
63 I liked everything except the smoking by the p... 2019-08-12 San Antonio,TX -0.155000 0.833333
72 Everything was great. When we walked into the ... 2019-08-12 Corinth 0.790000 0.875000
(27)生成一个基于主观性非常高的评论的词云图,以可视化这些高度主观的评论中最常见的单词。
filtered_reviews = df[df['subjectivity']>0.8]['Review']
filtered_reviews = filtered_reviews.astype(str)
text = ' '.join(filtered_reviews)
wordcloud = WordCloud(width=800, height=400, background_color='black').generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.title("Highly Opinionated")
plt.axis('off')
plt.show()
对上述代码的具体说明如下:
- 通过df['subjectivity'] > 0.8条件过滤数据框df,选择主观性非常高的评论。这将返回一个包含满足条件的行的子数据框,其中包含 "Review" 列的评论。
- 将filtered_reviews 的数据类型转换为字符串,以确保文本是字符串类型。
- 使用' '.join(filtered_reviews)将这些满足条件的评论连接成一个单独的文本字符串,存储在名为text的变量中。
- 创建一个WordCloud对象,设置了词云的宽度、高度和背景颜色。词云的宽度为800像素,高度为400像素,背景颜色为黑色。
- 创建一个绘图窗口,设置了图形的大小为(10, 5)。
- 使用plt.imshow(wordcloud, interpolation='bilinear')显示生成的高度主观评论的词云图,其中wordcloud是词云对象,interpolation='bilinear'用于平滑图像的显示。
- 使用plt.title("Highly Opinionated")设置图形的标题为"Highly Opinionated",表示这是高度主观评论的词云图。
- 使用plt.axis('off')关闭坐标轴,以便只显示词云图,而不显示坐标轴。
- 最后,使用plt.show()显示词云图。
执行后会生成一个以黑色背景为基础的高度主观评论的词云图,这有助于了解哪些评论包含了许多主观观点和情感表达。如图7-10所示。
图7-10 高度主观评论的词云图
(28)下面的代码执行了时间序列分析,其中数据被分成了2018年和2019年两个子数据框,并计算了每天的情感极性均值,然后绘制了情感随时间的变化图表。
df_2018 = df[df['date'].dt.year == 2018]
df_2019 = df[df['date'].dt.year == 2019]
date_sentiment = df.groupby(df['date'].dt.date)['polarity'].mean()
plt.figure(figsize=(12, 6))
date_sentiment.plot()
plt.title('Sentiment Over Time')
plt.xlabel('Date')
plt.ylabel('Mean Sentiment')
plt.grid(True)
plt.show()
对上述代码的具体说明如下:
- 首先,使用df[df['date'].dt.year == 2018]和df[df['date'].dt.year == 2019]分别创建了两个子数据框 df_2018 和 df_2019,用于分别存储2018年和2019年的数据。
- 接着,使用df.groupby(df['date'].dt.date)['polarity'].mean()计算了每天的情感极性均值,这将创建一个时间序列,其中日期是索引,情感极性均值是对应的值。
- 创建一个图形窗口,设置图形的大小为(12, 6),以准备绘制情感随时间的变化图表。
- 使用 date_sentiment.plot() 绘制了情感随时间的变化图表,其中 date_sentiment 包含了日期和情感均值的信息。
- 使用 plt.title('Sentiment Over Time') 设置图表的标题为"Sentiment Over Time",表示这是情感随时间的变化图表。
- 使用 plt.xlabel('Date') 和 plt.ylabel('Mean Sentiment') 分别设置X轴和Y轴的标签,表示日期和情感均值。
- 使用 plt.grid(True) 打开图表的网格线。
- 最后,使用 plt.show() 显示绘制好的情感随时间的变化图表,如图7-11所示。。
图7-11 情感随时间的变化图
上述代码的目的是可视化情感随时间的变化趋势,从而帮助了解客户对产品或服务的情感变化。图表显示了情感均值随日期的波动情况,以及是否存在明显的趋势。这对于了解产品或服务在不同时间段的受欢迎程度和客户满意度非常有帮助。根据上面绘制的情感随时间的变化图表,可以得出以下结论:
- 总体情感是积极的,情感均值大于0。
- 情感随时间逐渐增加,但存在一些波动。
- 情感均值最高出现在2019年9月,而最低情感均值出现在2018年11月。
这些结论表明,整体上,针对产品或服务的情感是积极的,且随时间逐渐增加。然而,情感存在一些波动,可能受到特定时间段或事件的影响。总体来说,客户对产品或服务的情感呈现出积极趋势,这是一个积极的发展迹象。
(29)通过下面的代码进行时间序列分析时,专门针对2018年的数据进行了情感随时间的变化图表绘制。
date_sentiment_2018 = df_2018.groupby(df_2018['date'].dt.date)['polarity'].mean()
plt.figure(figsize=(12, 6))
date_sentiment_2018.plot()
plt.title('Sentiment Over Time (2018)')
plt.xlabel('Date')
plt.ylabel('Mean Sentiment')
plt.grid(True)
plt.show()
对上述代码的具体说明如下:
- 使用 df_2018 这个子数据框,选择了2018年的数据,即 df[df['date'].dt.year == 2018]。
- 使用 df_2018.groupby(df_2018['date'].dt.date)['polarity'].mean() 计算了2018年每天的情感极性均值,这将创建一个时间序列,其中日期是索引,情感极性均值是对应的值。
- 创建一个图形窗口,设置图形的大小为(12, 6),以准备绘制2018年情感随时间的变化图表。
- 使用 date_sentiment_2018.plot() 绘制了2018年情感随时间的变化图表,其中 date_sentiment_2018 包含了日期和情感均值的信息。
- 使用 plt.title('Sentiment Over Time (2018)') 设置图表的标题为"Sentiment Over Time (2018)",表示这是2018年情感随时间的变化图表。
- 使用 plt.xlabel('Date') 和 plt.ylabel('Mean Sentiment') 分别设置X轴和Y轴的标签,表示日期和情感均值。
- 使用 plt.grid(True) 打开图表的网格线。
- 最后,使用 plt.show() 显示绘制好的2018年情感随时间的变化图,如图7-12所示。
图7-12 2018年情感随时间的变化图
根据上述可视化图表可以得出以下结论:
- 2018年整体上情感是积极的,但存在一些波动。
- 情感均值在2018年9月达到最高点,而在2018年11月达到最低点。
- 公司的整体情感是积极的,这是一个积极的迹象。
- 公司能够在一段时间内保持积极的情感,尽管存在一些波动。
这些结论表明,公司在2018年内大体上保持了积极的客户情感,尽管可能会受到季节性或事件性因素的影响。保持积极的客户情感有助于维护客户忠诚度和业务成功。