微博数据舆情分析项目

这份微博舆情数据集是2020年1月1日至2020年4月15日期间中国网民关于Covid-19大流行病的微博帖子,这些帖子包含了用户对疫情的讨论、感受、信息分享等内容。它可以帮助我们了解在Covid-19大流行期间微博用户的观点、情绪和行为。通过分析这些数据,我们可以揭示公众对于疫情的关注点、情感态度以及对应措施的反馈。此外,通过观察用户的地理位置等信息,我们还可以研究不同人群之间的观点差异和舆情传播模式。

1.可视化

import pandas as pd

sample = pd.read_csv('sample.csv', encoding='utf-8')
print(sample.columns.values)

# 【转发数】【评论数】【点赞数】缺失值填充
sample.loc[sample['转发数'].isnull(), '转发数'] = 0
sample.loc[sample['评论数'].isnull(), '评论数'] = 0
sample.loc[sample['点赞数'].isnull(), '点赞数'] = 0


#用地理位置列填充实时地理位置列
sample['实时地理位置'].fillna(sample['地理位置'],inplace=True)
#查看实时地理位置列是否还有空值
print(sample['实时地理位置'].isna().sum())

# 统一实时地理位置名称
for i in range(len(sample)):
    if sample.iloc[i, 8] in ['北京','天津','上海','重庆']:
        sample.iloc[i, 8] += '市'
    elif sample.iloc[i, 8] in ['香港','澳门']:
        sample.iloc[i, 8] += '特别行政区'
    elif sample.iloc[i, 8] in ['西藏','内蒙古']:
        sample.iloc[i, 8] += '自治区'
    elif sample.iloc[i, 8] == '新疆':
        sample.iloc[i, 8] += '维吾尔自治区'
    elif sample.iloc[i, 8] == '广西':
        sample.iloc[i, 8] += '壮族自治区'
    elif sample.iloc[i, 8] == '宁夏':
        sample.iloc[i, 8] += '回族自治区'
    elif sample.iloc[i, 8] != '海外' and sample.iloc[i, 8] != '其它':
         sample.iloc[i, 8] += '省'
print(sample['实时地理位置'].head())

import re
import jieba

#用微博内容列填充内容列缺失值
sample['内容'].fillna(sample['微博内容'],inplace=True)
#再用原微博列填充内容列缺失值
sample['内容'].fillna(sample['原微博(如果这条微博为转发)'],inplace=True)
#删除含有空值的列
sample.dropna(axis=0,subset=['内容'],inplace=True)
#查看内容列是否还有空值
print(sample['内容'].isnull().sum())
# 重置索引
sample.reindex() 

import jieba,re

# 读取停用词表
def read_stopwords(file='hit_stopwords.txt'):
    with open(file,'r', encoding='utf-8') as f:
        stopwords = f.read().split('\n')  
    return stopwords


# 数据清洗
def data_cleaning(content_list):
    # 建立数据清洗后的列表
    content_seg_list = []

    # 初始化特殊字符、标点、数字、字母等
    symbols = '-\\n~%≥℃|/【】↓#~_「♂!?\',、:;。《》()()·—.…,0123456789abcdefghijklnmopqrstuvwxyz'
    # 初始化停用词表
    stopwords =read_stopwords(file='hit_stopwords.txt')
   
    # 遍历文本列表
    for content in content_list:
        # 获取“展开全文-收起全文”内文本
        if '展开全文' in content and '收起全文' in content:
            begin = content.find('展开全文')
            end = content.find('收起全文')
            content = content[begin: end]
        # 去除用户名
        if '@' in content:
            content =  re.sub('@.* ', ' ', content) 
        # 统一转换为小写
        content = content.lower()
        # 去除停用词
        for con in content:
            # 包含symbols则替换为空格
            if con in symbols:
                content = content.replace(con, ' ')
        # 分词
        con_list = jieba.cut(content, cut_all=False)
        result_list = []
        # 去停用词
        for con in con_list:
            if con not in stopwords and con!='\n' and con!='\u3000' and con!=' ':
                result_list.append(con)
        content_seg_list.append(result_list)
    
    return content_seg_list


# 将微博内容转换为列表
content = sample['内容'].tolist()
# 将内容分词后保存到列表
content_seg_list = data_cleaning(content)   
sample['content_seg']=content_seg_list

from pyecharts.charts import WordCloud
from pyecharts import options as opts
from pyecharts.globals import SymbolType
from collections import Counter

# 获取词语
word_list = []
for seg in content_seg_list:
    word_list += seg
# 统计词频,取频率最高的100个词语
word_dict = Counter(word_list).most_common(100)

wordcloud = WordCloud().add(series_name="新冠疫情微博文本词云图", 
                            data_pair = word_dict,  # 添加数据 
                            word_gap = 7,  # 字间隙
                            word_size_range = [15, 60],  # 调整字体大小范围
                            shape = 'circle' # 设置形状为椭圆
                           )
wordcloud.set_global_opts(title_opts=opts.TitleOpts(title="新冠疫情微博文本词云图", # 设置图标题
                                                    title_textstyle_opts=opts.TextStyleOpts(font_size=20)),
                          tooltip_opts=opts.TooltipOpts(is_show=True))

wordcloud.render()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值