赞
踩
这份微博舆情数据集是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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。