【自嗨笔记#2】微博疫情舆情分析---舆情分析部分

[ 自嗨笔记#2] 微博疫情舆情分析—舆情分析部分

利用前面抓取的信息,开始分析,这里可以说都是看到大佬的文章,模仿加上自己的想象加工,确实不太了解实际业务需求,如果有业内朋友看到,欢迎帮我指正,也欢迎大家帮我出出主意,有时间会更新进文章里

Previously![ 自嗨笔记#1] 微博疫情舆情分析—爬取部分

一、观察数据,整理
【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第1张图片
这里评论2200条非空,其他的为2257条非空,估计是用表情评论的被过滤了,其他目前看不出问题

二、建立需求

  1. 微博正文词云,以及评论词云
  2. 利用snowNLP,情感分析
  3. 尝试利用已有信息,挖掘深度规律

三,代码实现

  • 正文词云
    【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第2张图片
  • 评论词云
    【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第3张图片
  • snowNLP分析
def snownlp_c(element):
    try:
        sn=SnowNLP(element)
        return round(sn.sentiments,1)
    except:
        pass
    
comment['snownlp']=comment['评论正文'].transform(snownlp_c)-0.5 #以0.5为分界线,处理为[-0.5,0.5]的区间,0.5为正向
# snowNlp
a = comment.groupby(by=['snownlp'])['评论正文'].count().reset_index()
print(a)

【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第4张图片
【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第5张图片
其实这里用柱状图更好些
【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第6张图片

  • 微博作者性别统计
    【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第7张图片
a2=news.groupby(by=['性别'])['作者id'].count().reset_index()
plt.figure()
plt.pie(a2['作者id'],labels=['女','男'],
        labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
        startangle = 90,pctdistance = 0.6)
plt.title('微博作者性别统计',fontproperties='SimHei')
plt.show()
  • 评论性别统计

【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第8张图片

a1=comment.groupby(by=['性别'])['id'].count().reset_index()
plt.figure()
plt.pie(a1['id'],labels=['女','男'],
        labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
        startangle = 90,pctdistance = 0.6)
plt.title('评论区性别统计',fontproperties='SimHei')
plt.show()
  • 微博时间范围
max_date = news['发布时间'].max()
min_date = news['发布时间'].min()
print('时间范围',max_date,min_date)

在这里插入图片描述

  • 发布疫情相关最多的微博id信息(前5)
n=news.groupby(by=['昵称'])['新闻id'].count().reset_index().sort_values(by='新闻id',axis=0,ascending=False).head()
print(n)

【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第9张图片

  • 平均评论的时间
    在这里插入图片描述
    我在三月时做过一次,当时回复是20分钟左右,回复时间变长,可能是受到大家复工的影响
dt['互动时间']=dt['时间日期']-dt['发布时间']
print(dt['互动时间'].mean())
  • 评论积极的人以及评论内容
m=comment.groupby(by='id')['评论正文'].count().reset_index().sort_values(by='评论正文',axis=0,ascending=False).head()
print(m)
# s=comment['id'].isin(m['id'])
# print(comment.loc[comment['id'].isin(m['id']),['评论正文','评论昵称','新闻id','时间日期']]) #再分组,实际效果不如for
for i in m['id']:
    print(comment.loc[comment['id'] == i,['评论正文','评论昵称','新闻id','时间日期']])

【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第10张图片

  • 微博发布时间的分布
    【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第11张图片

  • 评论时间的分布
    【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第12张图片

  • 微博发布时间与影响力关系
    影响力:转发数+评论数+点赞数
    【自嗨笔记#2】微博疫情舆情分析---舆情分析部分_第13张图片


你可能感兴趣的:(自嗨笔记,数据分析,python,爬虫)