词云图分析微博评论微博评论词云图
最近⼩猪在5⽉20号发布了⼀篇对周扬青的⼩作⽂,我正好也想做⼀个词云图的项⽬,所以爬取了这条微博的评论,做个词云图来看看⼤家都在说些什么,
PS:有些信息只能脱敏
#导包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import repeat_word as rw
import jieba
import jieba.analyse
from wordcloud import WordCloud,STOPWORDS #词云图,屏蔽词
from PIL import Image#读取图⽚
#显⽰中⽂
数据处理
# 这是我之前已经爬取好的评论数据
df =  pd.read_excel(r"F:\Eddy\罗志祥博⽂评论.xlsx")
df.head()
发帖⼦
⼈博⽂发布时间
评论
评论内容评论时间评论点赞
0lzx 5⽉20⽇
09:12
1四⼗岁啦还⾃称男孩6666(学到了
5⽉20⽇
13:20
1163934.00
1lzx 5⽉20⽇
09:12
2⼟狗,我初中就不写这种东西了
5⽉20⽇
09:20
953578.00
2lzx 5⽉20⽇
09:12
3热搜预备:罗志祥舔起来了
5⽉20⽇
09:12
370486.00
3lzx 5⽉20⽇
09:12
4
不是繁体,是本⼈写的吗?难每天半夜给周扬青发消息的只是你的替⾝?是个⼤
陆⼈?
5⽉20⽇
09:17
324679.00
4lzx 5⽉20⽇
09:12
5你的恋爱,我⼼疼;你的⽂字,还爱她。
5⽉20⽇
09:18
261725.00
df.info()
<class 'frame.DataFrame'> RangeIndex: 687 entries, 0 to 686 Data columns (total 6 columns):
#  Column  Non-Null Count  Dtype
---  ------  --------------  -----
0  发帖⼦⼈    687 non-null    object
1  博⽂发布时间  687 non-null    object
2  评论者    686 non-null    object
3  评论内容    679 non-null    object
微博关闭评论4  评论时间    686 non-null    object
5  评论点赞    349 non-null    float64 dtypes: float64(1), object(5)
memory usage: 32.3+ KB
#删除⽆评论项
df.dropna(inplace=True)
# 重置下索引
---------------------------------------------------------------------------
NameError                                Traceback (most recent call last)
<ipython-input-45-3e1500d1d53c> in <module>
----> set_index(drop=true,inplace=True)
NameError: name 'true' is not defined
#看⼀下前10评论都说了什么
df[["评论者","评论内容","评论点赞"]][0:10]
评论者评论内容评论点赞01四⼗岁啦还⾃称男孩6666(学到了1163934.00 12⼟狗,我初中就不写这种东西了953578.00 23热搜预备:罗志祥舔起来了370486.00 34不是繁体,是本⼈写的吗?难每天半夜给周扬青发消息的只是你的替⾝?是个⼤陆⼈?324679.00 45你的恋爱,我⼼疼;你的⽂字,还爱她。261725.00 56怎么qq空间⽇志即视感啊男孩⼥孩237951.00 67211969.00 78你不配这个⼥孩,臭⼋⽖鱼194336.00 89真的想洗⽩就给⼤家还花呗184394.00 910¡评论配图158093.00数据探索
# 提取评论
lzx = df.评论内容
lzx
0                          四⼗岁啦还⾃称男孩6666(学到了
1                              ⼟狗,我初中就不写这种东西了
2                                热搜预备:罗志祥舔起来了
3      不是繁体,是本⼈写的吗?难每天半夜给周扬青发消息的只是你的替⾝?是个⼤陆⼈?
4                          你的恋爱,我⼼疼;你的⽂字,还爱她。
...
632                        新型洗⽩⽅式,⼤家学起来。啥时候舔
637                                  是他⾃⼰写的吗。
653              “这段⽇⼦是我近年来最长的⼀段(没有和异性)独处时间”
656                            你垂死挣扎的样⼦,像极了卢某
671                      艺⼈不是普通⼈没有⾃⼰私⽣活事?何必?
Name: 评论内容, Length: 346, dtype: object
# 这⾥是之前写的⼀个删除评论前后重复的Python脚本
lzx_01 = rw.del_forward(rw.del_backward(lzx))
lzx_01[0:6]
['四⼗岁啦还⾃称男孩6666(学到了',
'⼟狗,我初中就不写这种东西了',
'热搜预备:罗志祥舔起来了',
'不是繁体,是本⼈写的吗?难每天半夜给周扬青发消息的只是你的替⾝?是个⼤陆⼈?',
'你的恋爱,我⼼疼;你的⽂字,还爱她。',
'怎么qq空间⽇志即视感啊男孩⼥孩']
len(lzx_01)
346
# 去个重
lzx_03 =set(lzx_01)
len(lzx_03)
322
# 使⽤jieba切词,把所有评论放到⼀个列表中
text =""
for i in lzx_03:
text +=" ".join(jieba.lcut(i))
# 简单看⼀下
text[0:220]
'你平安喜乐就好你很爱她是不是为了周扬青看懂才换的简体哥平安就好其实分⼿最好,没觉得他俩般配放过她吧,哥,放过⼈⼥孩⼦吧图⽚评论 ¡ 评论配图哥最好的猪猪  溜回台湾了,还不忘发⽂章讨⼀波打赏,不愧是时间管理员,⼀⼨光阴⼀⼨⾦你的团队真能作,请你放过她卧槽??这就开始洗⽩了吗。。。。 p 都 '
词云图绘制
#配置词云的基本参数,先简单绘制⼀下
mask = np.array(Image.open("地图.jpg"))
my_cloud = WordCloud(
mask = mask,
background_color='white',
stopwords=STOPWORDS,#这⾥是屏蔽词,等下我们可以制作⼀个⾃⼰的屏蔽词
font_path="F:\")
# 把上⾯⽣成好的text⽂本放在词云实例中⽣成
ate(text)
# 各⾃画图格式
#显⽰词云
plt.imshow(my_cloud)
plt.axis('off')
plt.show()
可以看到这⾥的词云图是⾮常混乱的,看不出来什么东西,有很多⽤不到的词,我们需要对源数据清洗⼀下然后重新绘制
#这⾥是⼀个txt问件,⾥⾯我已经提前加好了⼀些屏蔽词
sw = pd.read_csv(r"F:\",quoting=3,names=["屏蔽词"])
sw.head()
屏蔽词
0评论
1微博
2配图
3周扬
4⼩猪
c =""
for i in lzx_03:
seg = jieba.lcut(i)
for word in seg:
if word in sw.values:
continue
else:
c +=" "+ word
# 简单看⼀下,清洗过后的评论信息
c[0:200]
' 平安喜乐爱青看懂换简体哥平安分⼿他俩般配放过哥放过⼥孩⼦ ¡ 哥猪猪  溜回台湾不忘发⽂章讨⼀波打赏不愧时间管理员⼀⼨光阴⼀⼨⾦团队真能作请放过卧槽洗⽩ p 原谅错错错过错过安好挑 520 发⼈间迷惑回归⽹络异常爱情默默守护⼥朋友⼀年哥哥好好说我哥⼥孩故事不忍⼼完哥⼲嘛 ¡ 好'
#制作词频,⽤来绘制词云图
freq = act_tags(c,topK=30,withWeight=True)
print(freq[:30])
freq ={i[0]: i[1]for i in freq}
[('真的', 0.1367668533273763), ('安好', 0.11470157989691877), ('520', 0.11162247901867413), ('好好', 0.09713376472918767), ('⼥孩', 0.069696800033 70682), ('爱过', 0.06597395530849673), ('⼲嘛', 0.060498606227647064), ('希望', 0.05832311792918768), ('加油', 0.0575616173279085), ('幸福', 0.0572 1095744537815), ('复合', 0.05627792496164333), ('洗⽩', 0.055811239509337064), ('⽂章', 0.05565907500285715), ('放过', 0.0548981662838562), ('男孩', 0.05404879653692811), ('粉丝', 0.052188852511540616), ('故事', 0.05143171902579831), ('定时', 0.04881395992235294), ('简体字', 0.0478******* 742297), ('感情', 0.04762335690644258), ('分⼿', 0.04507342145529411), ('吃⽠', 0.04464899160746965), ('⼥友', 0.043443313734080294), ('珍惜', 0.04 062642680070028), ('⾮主流', 0.038972704945658264), ('卧槽', 0.03893747241456583), ('真⼼', 0.038794074096451914), ('时间', 0.0380909396121381 9), ('原谅', 0.03737756684271709), ('向前', 0.03664900142089636)]
#配置词云的基本参数,绘制词频词云图
mask = np.array(Image.open("地图.jpg"))
my_cloud = WordCloud(
mask=mask,
background_color='white',
stopwords=STOPWORDS,#这⾥是屏蔽词,等下我们可以制作⼀个⾃⼰的屏蔽词    font_path="F:\",
width=1000,
height=200)
# 把上⾯⽣成好的text⽂本放在词云实例中⽣成
my_cloud.fit_words(freq)
# 各⾃画图格式
#显⽰词云
plt.imshow(my_cloud)
plt.axis('off')
plt.show()
这样就做出来了我们需要的词云图,可以看出祝安好的还是有很多⼈的