您的位置:首页 > 教育 > 锐评 > 免费在线观看电影大全_石家庄最新新闻事件_衡阳seo排名_国际新闻消息

免费在线观看电影大全_石家庄最新新闻事件_衡阳seo排名_国际新闻消息

2025/11/9 21:14:07 来源:https://blog.csdn.net/roccreed/article/details/143112963  浏览:    关键词:免费在线观看电影大全_石家庄最新新闻事件_衡阳seo排名_国际新闻消息
免费在线观看电影大全_石家庄最新新闻事件_衡阳seo排名_国际新闻消息

这篇文章使用的数据基于博文 微博爬虫
主要涉及的技术是 pandas + matplotlib ,是常见的python的数据分析作图方法

1 统计代码生成excel

利用pandas生成excel数据

def init_data():df = pd.read_sql_query("SELECT * FROM tb_weibo", cnn)print('初始化数据完毕..')# 分割 topics 字段df['topics'] = df['topics'].str.split(',')# 扁平化 topics 字段df_exploded = df.explode('topics')# 统计 attitudes_count、comments_count、reposts_count 的和值summary_df = df_exploded.groupby('topics').agg({'attitudes_count': 'sum','comments_count': 'sum','reposts_count': 'sum','keywords': 'first',  # 展示对应的 keywords 字段'label': 'count'  # 统计对应行数,取名为 total}).reset_index().rename(columns={'label': 'total'})# 统计负面文章的数量(label 等于 '消极' 的数量)negative_count_df = df_exploded[df_exploded['label'] == '消极'].groupby('topics').size().reset_index(name='native_count')# 统计用户的个数(去重)user_count_df = df_exploded.groupby('topics')['user_id'].nunique().reset_index(name='user_count')# 合并所有统计结果result_df = summary_df.merge(negative_count_df, on='topics', how='left').merge(user_count_df, on='topics',how='left')# 替换 NaN 值为 0(如果有的话)result_df.fillna(0, inplace=True)# 根据 total 进行倒序排列result_df = result_df.sort_values(by=['total'], ascending=False)# 将结果保存为 Excel 文件result_df.to_excel('topic.xlsx', index=False)print('数据处理完毕,生成 topic.xlsx 文件')

2 生成分析图

利用matplotlib生成柱状图和饼图

# 读取处理后的数据def analyze_chart1():# 读取处理后的数据result_df = pd.read_excel('topic.xlsx')# 确保 topics 列是字符串类型并处理 NaN 值result_df['topics'] = result_df['topics'].astype(str).fillna('未知主题')# 取前20个主题top_20_df = result_df.head(20)# 设置中文字体,确保能够显示中文字符matplotlib.rcParams['font.family'] = 'SimHei'  # 使用黑体matplotlib.rcParams['axes.unicode_minus'] = False  # 解决负号 '-' 显示为方块的问题# 1. 柱状图:分析各个关键词的文章条数 total 列plt.figure(figsize=(12, 6))plt.bar(top_20_df['topics'], top_20_df['total'], color='skyblue')plt.xlabel('主题')plt.ylabel('文章条数')plt.title('各个关键词的文章条数(前20)')plt.xticks(rotation=45, ha='right')  # 旋转 x 轴标签plt.tight_layout()plt.savefig('bar_chart_total.png')  # 保存图表plt.show()  # 显示图表# 2. 饼图:分析负面舆情 native_count 和 totalsizes = [result_df['native_count'].sum(), result_df['total'].sum() - result_df['native_count'].sum()]labels = ['负面舆情', '其他舆情']plt.figure(figsize=(8, 8))plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, colors=['tomato', 'lightgreen'])plt.title('负面舆情与其他舆情占比')plt.axis('equal')  # 使饼图为圆形plt.savefig('pie_chart_native_count.png')  # 保存图表plt.show()  # 显示图表

3 执行结果

执行代码:

if __name__ == '__main__':init_data()analyze_chart1()

生成的excel:
在这里插入图片描述
生成的分析图:
柱状图,我们使用到了蓝色的柱形,表示每个主题下的微博文章的数量的排列,只列出了前20的。
在这里插入图片描述
饼图,我们分析了负面的微博文章的比例,显示为红色,其他舆情(积极和中性)占97.8%。
在这里插入图片描述

4 小结

以上图形分析的是整体的数据情况,更多的时候我们希望分析的是某一个话题或者某一个关键词的舆情状况,所以需要添加查询参数,下一篇文章我们拓展更多的图形,并且添加关键词参数。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com